diff --git a/README.md b/README.md index 096a81486..31339e04d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.21.90 - 1.21.110 and Minecraft Java 1.21.7 - 1.21.8. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.21.90 - 1.21.110 and Minecraft Java 1.21.9 - 1.21.10. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java index 61b868cc3..c1950f965 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java @@ -59,7 +59,9 @@ public interface JavaBlockState { * Gets the pick item of the block state * * @return the pick item of the block state + * @deprecated the pick item is sent by the Java server */ + @Deprecated @Nullable String pickItem(); /** @@ -103,6 +105,7 @@ public interface JavaBlockState { Builder canBreakWithHand(boolean canBreakWithHand); + @Deprecated Builder pickItem(@Nullable String pickItem); Builder pistonBehavior(@Nullable String pistonBehavior); diff --git a/api/src/main/java/org/geysermc/geyser/api/entity/property/BatchPropertyUpdater.java b/api/src/main/java/org/geysermc/geyser/api/entity/property/BatchPropertyUpdater.java new file mode 100644 index 000000000..308d23cd1 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/entity/property/BatchPropertyUpdater.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.entity.property; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineEntityPropertiesEvent; + +/** + * Collects property changes to be applied as a single, batched update to an entity. + *

+ * Notes: + *

+ * + *
{@code
+ * entity.updatePropertiesBatched(updater -> {
+ *     updater.update(SOME_FLOAT_PROPERTY, 0.15f);
+ *     updater.update(SOME_BOOLEAN_PROPERTY, true);
+ *     updater.update(SOME_INT_PROPERTY, null); // reset to default
+ * });
+ * }
+ * + * @since 2.9.0 + */ +@FunctionalInterface +public interface BatchPropertyUpdater { + + /** + * Queues an update for the given property within the current batch. + *

+ * If {@code value} is {@code null}, the property will be reset to its default value + * as declared when the property was registered during the {@link GeyserDefineEntityPropertiesEvent}. + * + * @param property a {@link GeyserEntityProperty} registered for the target entity type + * @param value the new value, or {@code null} to reset to the default + * @param the property's value type + * + * @since 2.9.0 + */ + void update(@NonNull GeyserEntityProperty property, @Nullable T value); +} diff --git a/api/src/main/java/org/geysermc/geyser/api/entity/property/GeyserEntityProperty.java b/api/src/main/java/org/geysermc/geyser/api/entity/property/GeyserEntityProperty.java new file mode 100644 index 000000000..9489a9946 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/entity/property/GeyserEntityProperty.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.entity.property; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.util.Identifier; + +/** + * Represents a property that can be attached to an entity. + *

+ * Entity properties are used to describe metadata about an entity, such as + * integers, floats, booleans, or enums. + * @see + * Official documentation for info + * + * @param the type of value stored by this property + * + * @since 2.9.0 + */ +public interface GeyserEntityProperty { + + /** + * Gets the unique name of this property. + * Custom properties cannot use the vanilla namespace + * to avoid collisions with vanilla entity properties. + * + * @return the property identifier + * @since 2.9.0 + */ + @NonNull + Identifier identifier(); + + /** + * Gets the default value of this property which + * is set upon spawning entities. + * + * @return the default value of this property + * @since 2.9.0 + */ + @NonNull + T defaultValue(); +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/HoneyBlock.java b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserBooleanEntityProperty.java similarity index 77% rename from core/src/main/java/org/geysermc/geyser/level/block/type/HoneyBlock.java rename to api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserBooleanEntityProperty.java index 642240915..1c988d5d7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/HoneyBlock.java +++ b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserBooleanEntityProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 GeyserMC. http://geysermc.org + * Copyright (c) 2025 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,10 +23,13 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.level.block.type; +package org.geysermc.geyser.api.entity.property.type; -public class HoneyBlock extends Block { - public HoneyBlock(String javaIdentifier, Builder builder) { - super(javaIdentifier, builder); - } +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; + +/** + * Represents a boolean entity property. + * @since 2.9.0 + */ +public interface GeyserBooleanEntityProperty extends GeyserEntityProperty { } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/PistonHeadBlock.java b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserEnumEntityProperty.java similarity index 62% rename from core/src/main/java/org/geysermc/geyser/level/block/type/PistonHeadBlock.java rename to api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserEnumEntityProperty.java index 8a6b4f41c..283111c7f 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/PistonHeadBlock.java +++ b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserEnumEntityProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 GeyserMC. http://geysermc.org + * Copyright (c) 2025 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,20 +23,20 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.level.block.type; +package org.geysermc.geyser.api.entity.property.type; -import org.geysermc.geyser.level.block.Blocks; -import org.geysermc.geyser.level.block.property.Properties; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; -public class PistonHeadBlock extends Block { - public PistonHeadBlock(String javaIdentifier, Builder builder) { - super(javaIdentifier, builder); - } - - @Override - public ItemStack pickItem(BlockState state) { - Block block = state.getValue(Properties.PISTON_TYPE).equals("sticky") ? Blocks.STICKY_PISTON : Blocks.PISTON; - return new ItemStack(block.asItem().javaId()); - } +/** + * Represents a Java enum-backed enum property. + * There are a few key limitations: + *

+ * + * @param the enum type + * @since 2.9.0 + */ +public interface GeyserEnumEntityProperty> extends GeyserEntityProperty { } diff --git a/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserFloatEntityProperty.java b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserFloatEntityProperty.java new file mode 100644 index 000000000..8337e09fa --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserFloatEntityProperty.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.entity.property.type; + +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineEntityPropertiesEvent; +import org.geysermc.geyser.api.util.Identifier; + +/** + * Represents a float-backed entity property with inclusive bounds. + * Values associated with this property must be always within the {@code [min(), max()]} bounds. + * + * @see GeyserDefineEntityPropertiesEvent#registerFloatProperty(Identifier, Identifier, float, float, Float) + * @since 2.9.0 + */ +public interface GeyserFloatEntityProperty extends GeyserEntityProperty { + + /** + * @return the inclusive lower bound for this property + * @since 2.9.0 + */ + float min(); + + /** + * @return the inclusive upper bound for this property + * @since 2.9.0 + */ + float max(); +} diff --git a/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserIntEntityProperty.java b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserIntEntityProperty.java new file mode 100644 index 000000000..36c4996bd --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserIntEntityProperty.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.entity.property.type; + +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineEntityPropertiesEvent; +import org.geysermc.geyser.api.util.Identifier; + +/** + * Represents an int-backed entity property with inclusive bounds. + * There are a few key limitations: + *
    + *
  • Values must be always within the {@code [min(), max()]} bounds
  • + *
  • Molang evaluation uses floats under the hood; very large integers can lose precision. + * Prefer keeping values in a practical range to avoid rounding issues.
  • + *
+ * + * @see GeyserDefineEntityPropertiesEvent#registerIntegerProperty(Identifier, Identifier, int, int, Integer) + * @since 2.9.0 + */ +public interface GeyserIntEntityProperty extends GeyserEntityProperty { + + /** + * @return the inclusive lower bound for this property + * @since 2.9.0 + */ + int min(); + + /** + * @return the inclusive upper bound for this property + * @since 2.9.0 + */ + int max(); +} diff --git a/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserStringEnumProperty.java b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserStringEnumProperty.java new file mode 100644 index 000000000..ebd541ef7 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/entity/property/type/GeyserStringEnumProperty.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.entity.property.type; + +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; + +import java.util.List; + +/** + * Represents a string-backed enum property. + * There are a few key limitations: + *
    + *
  • There cannot be more than 16 values
  • + *
  • The values' names cannot be longer than 32 chars, must start with a letter, and may contain numbers and underscores
  • + *
+ * + * @since 2.9.0 + */ +public interface GeyserStringEnumProperty extends GeyserEntityProperty { + + /** + * @return an unmodifiable list of all registered values + * @since 2.9.0 + */ + List values(); +} diff --git a/api/src/main/java/org/geysermc/geyser/api/entity/type/GeyserEntity.java b/api/src/main/java/org/geysermc/geyser/api/entity/type/GeyserEntity.java index 02acb4e21..1f8698518 100644 --- a/api/src/main/java/org/geysermc/geyser/api/entity/type/GeyserEntity.java +++ b/api/src/main/java/org/geysermc/geyser/api/entity/type/GeyserEntity.java @@ -26,9 +26,17 @@ package org.geysermc.geyser.api.entity.type; import org.checkerframework.checker.index.qual.NonNegative; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.connection.GeyserConnection; +import org.geysermc.geyser.api.entity.property.BatchPropertyUpdater; +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineEntityPropertiesEvent; + +import java.util.function.Consumer; /** - * Represents a unique instance of an entity. Each {@link org.geysermc.geyser.api.connection.GeyserConnection} + * Represents a unique instance of an entity. Each {@link GeyserConnection} * have their own sets of entities - no two instances will share the same GeyserEntity instance. */ public interface GeyserEntity { @@ -37,4 +45,24 @@ public interface GeyserEntity { */ @NonNegative int javaId(); + + /** + * Updates an entity property with a new value. + * If the new value is null, the property is reset to the default value. + * + * @param property a {@link GeyserEntityProperty} registered for this type in the {@link GeyserDefineEntityPropertiesEvent} + * @param value the new property value + * @param the type of the value + * @since 2.9.0 + */ + default void updateProperty(@NonNull GeyserEntityProperty property, @Nullable T value) { + this.updatePropertiesBatched(consumer -> consumer.update(property, value)); + } + + /** + * Updates multiple properties with just one update packet. + * @see BatchPropertyUpdater + * @since 2.9.0 + */ + void updatePropertiesBatched(Consumer consumer); } diff --git a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionAcceptCodeOfConductEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionAcceptCodeOfConductEvent.java new file mode 100644 index 000000000..0df79765e --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionAcceptCodeOfConductEvent.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.bedrock; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.connection.GeyserConnection; +import org.geysermc.geyser.api.event.connection.ConnectionEvent; +import org.geysermc.geyser.api.event.java.ServerCodeOfConductEvent; + +/** + * Fired when a player accepts a code of conduct sent by the Java server. API users can listen to this event + * to store the acceptance in a cache, and tell Geyser not to do so. + * + *

Java clients cache acceptance locally, but bedrock clients don't. Normally Geyser uses a simple JSON file to implement this, + * but an alternative solution may be preferred when using multiple Geyser instances. Such a solution can be implemented through this event and {@link ServerCodeOfConductEvent}.

+ * + * @see ServerCodeOfConductEvent + * @since 2.9.0 + */ +public class SessionAcceptCodeOfConductEvent extends ConnectionEvent { + private final String codeOfConduct; + private boolean skipSaving = false; + + public SessionAcceptCodeOfConductEvent(@NonNull GeyserConnection connection, String codeOfConduct) { + super(connection); + this.codeOfConduct = codeOfConduct; + } + + /** + * @return the code of conduct sent by the server + * @since 2.9.0 + */ + public String codeOfConduct() { + return codeOfConduct; + } + + /** + * @return {@code true} if Geyser should not save the acceptance of the code of conduct in its own cache (through a JSON file), because it was saved elsewhere + * @since 2.9.0 + */ + public boolean shouldSkipSaving() { + return skipSaving; + } + + /** + * Sets {@link SessionAcceptCodeOfConductEvent#shouldSkipSaving()} to {@code true}. + * @since 2.9.0 + */ + public void skipSaving() { + this.skipSaving = true; + } +} diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCodeOfConductEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCodeOfConductEvent.java new file mode 100644 index 000000000..d40094fb6 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCodeOfConductEvent.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.java; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.connection.GeyserConnection; +import org.geysermc.geyser.api.event.bedrock.SessionAcceptCodeOfConductEvent; +import org.geysermc.geyser.api.event.connection.ConnectionEvent; + +/** + * Fired when the Java server sends a code of conduct during the configuration phase. + * API users can listen to this event and tell Geyser the player has accepted the code of conduct before, which will result in the + * code of conduct not being shown to the player. + * + *

Java clients cache this locally, but bedrock clients don't. Normally Geyser uses a simple JSON file to implement this, + * but an alternative solution may be preferred when using multiple Geyser instances. Such a solution can be implemented through this event and {@link SessionAcceptCodeOfConductEvent}.

+ * + * @see SessionAcceptCodeOfConductEvent + * @since 2.9.0 + */ +public final class ServerCodeOfConductEvent extends ConnectionEvent { + private final String codeOfConduct; + private boolean hasAccepted = false; + + public ServerCodeOfConductEvent(@NonNull GeyserConnection connection, String codeOfConduct) { + super(connection); + this.codeOfConduct = codeOfConduct; + } + + /** + * @return the code of conduct sent by the server + * @since 2.9.0 + */ + public String codeOfConduct() { + return codeOfConduct; + } + + /** + * @return {@code true} if Geyser should not show the code of conduct to the player, because they have already accepted it + * @since 2.9.0 + */ + public boolean accepted() { + return hasAccepted; + } + + /** + * Sets {@link ServerCodeOfConductEvent#accepted()} to {@code true}. + * @since 2.9.0 + */ + public void accept() { + this.hasAccepted = true; + } +} diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineEntityPropertiesEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineEntityPropertiesEvent.java new file mode 100644 index 000000000..ef8380041 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineEntityPropertiesEvent.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.lifecycle; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.event.Event; +import org.geysermc.geyser.api.entity.EntityData; +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserBooleanEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserEnumEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserFloatEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserIntEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserStringEnumProperty; +import org.geysermc.geyser.api.entity.type.GeyserEntity; +import org.geysermc.geyser.api.util.Identifier; + +import java.util.Collection; +import java.util.List; +import java.util.function.Consumer; + +/** + * Lifecycle event fired during Geyser's startup to allow custom entity properties + * to be registered for a specific entity type. + *

+ * Listeners can add new properties for any entity by passing the target entity's + * identifier (e.g., {@code Identifier.of("player")}) to the registration methods. + * The returned {@link GeyserEntityProperty} is used to identify the properties and to + * update the value of a specific entity instance. + * + *

Example usage

+ *
{@code
+ * public void onDefine(GeyserDefineEntityPropertiesEvent event) {
+ *     Identifier player = Identifier.of("player");
+ *     GeyserFloatEntityProperty ANIMATION_SPEED =
+ *         event.registerFloatProperty(player, Identifier.of("my_group:animation_speed"), 0.0f, 1.0f, 0.1f);
+ *     GeyserBooleanEntityProperty SHOW_SHORTS =
+ *         event.registerBooleanProperty(player, Identifier.of("my_group:show_shorts"), false);
+ * }
+ * }
+ * + * Retrieving entity instances is possible with the {@link EntityData#entityByJavaId(int)} method, or + * {@link EntityData#playerEntity()} for the connection player entity. + * To update the value of a property on a specific entity, use {@link GeyserEntity#updateProperty(GeyserEntityProperty, Object)}, + * or {@link GeyserEntity#updatePropertiesBatched(Consumer)} to update multiple properties efficiently at once. + * + *

Notes: + *

    + *
  • Default values must fall within the provided bounds.
  • + *
  • There cannot be more than 32 properties registered per entity type in total
  • + *
  • {@link #properties(Identifier)} returns properties registered for the given entity + * (including those added earlier in the same callback), including vanilla properties.
  • + *
+ * + * @since 2.9.0 + */ +public interface GeyserDefineEntityPropertiesEvent extends Event { + + /** + * Returns an unmodifiable view of all properties that have been registered + * so far for the given entity type. This includes entity properties used for vanilla gameplay, + * such as those used for creaking animations. + * + * @param entityType the Java edition entity type identifier + * @return an unmodifiable collection of registered properties + * + * @since 2.9.0 + */ + Collection> properties(@NonNull Identifier entityType); + + /** + * Registers a {@code float}-backed entity property. + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param min the minimum allowed value (inclusive) + * @param max the maximum allowed value (inclusive) + * @param defaultValue the default value assigned initially on entity spawn - if null, it will be the minimum value + * @return the created float property + * + * @since 2.9.0 + */ + GeyserFloatEntityProperty registerFloatProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, float min, float max, @Nullable Float defaultValue); + + /** + * Registers a {@code float}-backed entity property with a default value set to the minimum value. + * @see #registerFloatProperty(Identifier, Identifier, float, float, Float) + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param min the minimum allowed value (inclusive) + * @param max the maximum allowed value (inclusive) + * @return the created float property + * + * @since 2.9.0 + */ + default GeyserFloatEntityProperty registerFloatProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, float min, float max) { + return registerFloatProperty(entityType, propertyIdentifier, min, max, null); + } + + /** + * Registers an {@code int}-backed entity property. + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param min the minimum allowed value (inclusive) + * @param max the maximum allowed value (inclusive) + * @param defaultValue the default value assigned initially on entity spawn - if null, it will be the minimum value + * @return the created int property + * + * @since 2.9.0 + */ + GeyserIntEntityProperty registerIntegerProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, int min, int max, @Nullable Integer defaultValue); + + /** + * Registers an {@code int}-backed entity property with a default value set to the minimum value. + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param min the minimum allowed value (inclusive) + * @param max the maximum allowed value (inclusive) + * @return the created int property + * + * @since 2.9.0 + */ + default GeyserIntEntityProperty registerIntegerProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, int min, int max) { + return registerIntegerProperty(entityType, propertyIdentifier, min, max, null); + } + + /** + * Registers a {@code boolean}-backed entity property. + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param defaultValue the default boolean value + * @return the created boolean property handle + * + * @since 2.9.0 + */ + GeyserBooleanEntityProperty registerBooleanProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, boolean defaultValue); + + /** + * Registers a {@code boolean}-backed entity property with a default of {@code false}. + * @see #registerBooleanProperty(Identifier, Identifier, boolean) + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @return the created boolean property + * @since 2.9.0 + */ + default GeyserBooleanEntityProperty registerBooleanProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier) { + return registerBooleanProperty(entityType, propertyIdentifier, false); + } + + /** + * Registers a typed {@linkplain Enum enum}-backed entity property. + *

+ * The enum constants define the allowed values. If {@code defaultValue} is {@code null}, + * the first enum value is set as the default. + * @see GeyserEnumEntityProperty for further limitations + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param enumClass the enum class that defines allowed values + * @param defaultValue the default enum value, or {@code null} for the first enum value to be the default + * @param the enum type + * @return the created enum property + * + * @since 2.9.0 + */ + > GeyserEnumEntityProperty registerEnumProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, @NonNull Class enumClass, @Nullable E defaultValue); + + /** + * Registers a typed {@linkplain Enum enum}-backed entity property with the first value set as the default. + * @see #registerEnumProperty(Identifier, Identifier, Class, Enum) + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param enumClass the enum class that defines allowed values + * @param the enum type + * @return the created enum property + * + * @since 2.9.0 + */ + default > GeyserEnumEntityProperty registerEnumProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, @NonNull Class enumClass) { + return registerEnumProperty(entityType, propertyIdentifier, enumClass, null); + } + + /** + * Registers a string-backed "enum-like" entity property where the set of allowed values + * is defined by the provided list. If {@code defaultValue} is {@code null}, the first value is used as the default + * on entity spawn. The default must be one of the values in {@code values}. + * @see GeyserStringEnumProperty + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param values the allowed string values + * @param defaultValue the default string value, or {@code null} for the first value to be used + * @return the created string-enum property + * + * @since 2.9.0 + */ + GeyserStringEnumProperty registerEnumProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, @NonNull List values, @Nullable String defaultValue); + + /** + * Registers a string-backed "enum-like" entity property with the first value as the default. + * @see #registerEnumProperty(Identifier, Identifier, List, String) + * + * @param entityType the Java edition entity type identifier + * @param propertyIdentifier the unique property identifier + * @param values the allowed string values + * @return the created string-enum property handle + * + * @since 2.9.0 + */ + default GeyserStringEnumProperty registerEnumProperty(@NonNull Identifier entityType, @NonNull Identifier propertyIdentifier, @NonNull List values) { + return registerEnumProperty(entityType, propertyIdentifier, values, null); + } +} diff --git a/api/src/main/java/org/geysermc/geyser/api/util/Identifier.java b/api/src/main/java/org/geysermc/geyser/api/util/Identifier.java new file mode 100644 index 000000000..e82a695d1 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/util/Identifier.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2024-2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.util; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.GeyserApi; + +/** + * An identifying object for representing unique objects. + * This identifier consists of two parts: + *

    + *
  • + * a namespace, which is usually a name identifying your work + *
  • + *
  • + * a path, which holds a value. + *
  • + *
+ * + * Examples of identifiers: + *
    + *
  • {@code minecraft:fox}
  • + *
  • {@code geysermc:one_fun_example}
  • + *
+ * + * If this identifier is referencing anything not in the + * vanilla Minecraft game, the namespace cannot be "minecraft". + * Further, paths cannot contain colons ({@code :}). + * + * @since 2.9.0 + */ +public interface Identifier { + + /** + * The namespace for Minecraft. + * @since 2.9.0 + */ + String DEFAULT_NAMESPACE = "minecraft"; + + /** + * Attempts to create a new identifier from a namespace and path. + * + * @return the identifier for this namespace and path + * @throws IllegalArgumentException if either namespace or path are invalid. + * @since 2.9.0 + */ + static Identifier of(@NonNull String namespace, @NonNull String path) { + return GeyserApi.api().provider(Identifier.class, namespace, path); + } + + /** + * Attempts to create a new identifier from a string representation. + * + * @return the identifier for this namespace and path + * @throws IllegalArgumentException if either the namespace or path are invalid + * @since 2.9.0 + */ + static Identifier of(String identifier) { + String[] split = identifier.split(":"); + String namespace; + String path; + if (split.length == 1) { + namespace = DEFAULT_NAMESPACE; + path = split[0]; + } else if (split.length == 2) { + namespace = split[0]; + path = split[1]; + } else { + throw new IllegalArgumentException("':' in identifier path: " + identifier); + } + return of(namespace, path); + } + + /** + * @return the namespace of this identifier. + * @since 2.9.0 + */ + String namespace(); + + /** + * @return the path of this identifier. + * @since 2.9.0 + */ + String path(); + + /** + * Checks whether this identifier is using the "minecraft" namespace. + * @since 2.9.0 + */ + default boolean vanilla() { + return namespace().equals(DEFAULT_NAMESPACE); + } +} diff --git a/bootstrap/mod/fabric/build.gradle.kts b/bootstrap/mod/fabric/build.gradle.kts index ebe727253..5b66e0f37 100644 --- a/bootstrap/mod/fabric/build.gradle.kts +++ b/bootstrap/mod/fabric/build.gradle.kts @@ -8,8 +8,6 @@ architectury { fabric() } -val includeTransitive: Configuration = configurations.getByName("includeTransitive") - dependencies { modImplementation(libs.fabric.loader) modApi(libs.fabric.api) diff --git a/bootstrap/mod/fabric/src/main/resources/fabric.mod.json b/bootstrap/mod/fabric/src/main/resources/fabric.mod.json index 69071cea4..b042bb252 100644 --- a/bootstrap/mod/fabric/src/main/resources/fabric.mod.json +++ b/bootstrap/mod/fabric/src/main/resources/fabric.mod.json @@ -23,8 +23,8 @@ "geyser.mixins.json" ], "depends": { - "fabricloader": ">=0.16.7", + "fabricloader": ">=0.17.2", "fabric-api": "*", - "minecraft": ">=1.21.6" + "minecraft": ">=1.21.9" } } diff --git a/bootstrap/mod/neoforge/build.gradle.kts b/bootstrap/mod/neoforge/build.gradle.kts index 2c58192fb..310e8c3f6 100644 --- a/bootstrap/mod/neoforge/build.gradle.kts +++ b/bootstrap/mod/neoforge/build.gradle.kts @@ -16,8 +16,6 @@ provided("com.google.errorprone", "error_prone_annotations") // Jackson shipped by Minecraft is too old, so we shade & relocate our newer version relocate("com.fasterxml.jackson") -val includeTransitive: Configuration = configurations.getByName("includeTransitive") - dependencies { // See https://github.com/google/guava/issues/6618 modules { diff --git a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeBootstrap.java b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeBootstrap.java index aa731befc..803a06b6e 100644 --- a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeBootstrap.java +++ b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeBootstrap.java @@ -111,7 +111,7 @@ public class GeyserNeoForgeBootstrap extends GeyserModBootstrap { @Override public boolean isServer() { - return FMLLoader.getDist().isDedicatedServer(); + return FMLLoader.getCurrent().getDist().isDedicatedServer(); } private void onPermissionGather(PermissionGatherEvent.Nodes event) { diff --git a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeDumpInfo.java b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeDumpInfo.java index 623f68d3a..8348ca160 100644 --- a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeDumpInfo.java +++ b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeDumpInfo.java @@ -54,10 +54,10 @@ public class GeyserNeoForgeDumpInfo extends BootstrapDumpInfo { private final List mods; public GeyserNeoForgeDumpInfo(MinecraftServer server) { - this.platformName = FMLLoader.launcherHandlerName(); - this.platformVersion = FMLLoader.versionInfo().neoForgeVersion(); - this.minecraftVersion = FMLLoader.versionInfo().mcVersion(); - this.dist = FMLLoader.getDist(); + this.platformName = server.getServerModName(); + this.platformVersion = FMLLoader.getCurrent().getVersionInfo().neoForgeVersion(); + this.minecraftVersion = FMLLoader.getCurrent().getVersionInfo().mcVersion(); + this.dist = FMLLoader.getCurrent().getDist(); this.serverIP = server.getLocalIp() == null ? "unknown" : server.getLocalIp(); this.serverPort = server.getPort(); this.onlineMode = server.usesAuthentication(); @@ -81,4 +81,4 @@ public class GeyserNeoForgeDumpInfo extends BootstrapDumpInfo { public String version; public String url; } -} \ No newline at end of file +} diff --git a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgePlatform.java b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgePlatform.java index 41562baf3..c1e0b67e0 100644 --- a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgePlatform.java +++ b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgePlatform.java @@ -38,7 +38,6 @@ import org.geysermc.geyser.platform.mod.platform.GeyserModPlatform; import java.io.IOException; import java.io.InputStream; -import java.nio.file.Files; import java.nio.file.Path; public class GeyserNeoForgePlatform implements GeyserModPlatform { @@ -82,8 +81,7 @@ public class GeyserNeoForgePlatform implements GeyserModPlatform { @Override public @Nullable InputStream resolveResource(@NonNull String resource) { try { - Path path = container.getModInfo().getOwningFile().getFile().findResource(resource); - return Files.newInputStream(path); + return container.getModInfo().getOwningFile().getFile().getContents().openFile(resource); } catch (IOException e) { return null; } diff --git a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/PermissionUtils.java b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/PermissionUtils.java index 5755e407f..6ed5bc608 100644 --- a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/PermissionUtils.java +++ b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/PermissionUtils.java @@ -71,7 +71,7 @@ public class PermissionUtils { case FALSE -> false; case NOT_SET -> { if (player != null) { - yield player.createCommandSourceStack().hasPermission(Objects.requireNonNull(player.getServer()).getOperatorUserPermissionLevel()); + yield player.createCommandSourceStack().hasPermission(Objects.requireNonNull(player.level()).getServer().operatorUserPermissionLevel()); } yield false; // NeoForge javadocs say player is null in the case of an offline player. } diff --git a/bootstrap/mod/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/bootstrap/mod/neoforge/src/main/resources/META-INF/neoforge.mods.toml index 3f1fe574d..7eb124724 100644 --- a/bootstrap/mod/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/bootstrap/mod/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -16,12 +16,12 @@ config = "geyser_neoforge.mixins.json" [[dependencies.geyser_neoforge]] modId="neoforge" type="required" - versionRange="[21.6.0-beta,)" + versionRange="[21.9.14-beta,)" ordering="NONE" side="BOTH" [[dependencies.geyser_neoforge]] modId="minecraft" type="required" - versionRange="[1.21.6,)" + versionRange="[1.21.9,)" ordering="NONE" side="BOTH" diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/mixin/server/DedicatedServerMixin.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/mixin/server/DedicatedServerMixin.java index 3b809d321..84e3303c9 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/mixin/server/DedicatedServerMixin.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/mixin/server/DedicatedServerMixin.java @@ -30,7 +30,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.Services; import net.minecraft.server.WorldStem; import net.minecraft.server.dedicated.DedicatedServer; -import net.minecraft.server.level.progress.ChunkProgressListenerFactory; +import net.minecraft.server.level.progress.LevelLoadListener; import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.world.level.storage.LevelStorageSource; import org.geysermc.geyser.platform.mod.GeyserServerPortGetter; @@ -40,8 +40,9 @@ import java.net.Proxy; @Mixin(DedicatedServer.class) public abstract class DedicatedServerMixin extends MinecraftServer implements GeyserServerPortGetter { - public DedicatedServerMixin(Thread thread, LevelStorageSource.LevelStorageAccess levelStorageAccess, PackRepository packRepository, WorldStem worldStem, Proxy proxy, DataFixer dataFixer, Services services, ChunkProgressListenerFactory chunkProgressListenerFactory) { - super(thread, levelStorageAccess, packRepository, worldStem, proxy, dataFixer, services, chunkProgressListenerFactory); + + public DedicatedServerMixin(Thread thread, LevelStorageSource.LevelStorageAccess levelStorageAccess, PackRepository packRepository, WorldStem worldStem, Proxy proxy, DataFixer dataFixer, Services services, LevelLoadListener levelLoadListener) { + super(thread, levelStorageAccess, packRepository, worldStem, proxy, dataFixer, services, levelLoadListener); } @Override diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java index 2a6056df9..f0fa71ab2 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java @@ -96,19 +96,31 @@ public class GeyserSpigotCompressionDisabler extends ChannelOutboundHandlerAdapt private static Class findCompressionPacket() throws ClassNotFoundException { try { - return Class.forName("net.minecraft.network.protocol.login.PacketLoginOutSetCompression"); + // Mojmaps + return Class.forName("net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket"); } catch (ClassNotFoundException e) { - String prefix = Bukkit.getServer().getClass().getPackage().getName().replace("org.bukkit.craftbukkit", "net.minecraft.server"); - return Class.forName(prefix + ".PacketLoginOutSetCompression"); + try { + // Spigot mappings + return Class.forName("net.minecraft.network.protocol.login.PacketLoginOutSetCompression"); + } catch (ClassNotFoundException ex) { + String prefix = Bukkit.getServer().getClass().getPackage().getName().replace("org.bukkit.craftbukkit", "net.minecraft.server"); + return Class.forName(prefix + ".PacketLoginOutSetCompression"); + } } } private static Class findLoginSuccessPacket() throws ClassNotFoundException { try { - return Class.forName("net.minecraft.network.protocol.login.PacketLoginOutSuccess"); + // Mojmaps + return Class.forName("net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket"); } catch (ClassNotFoundException e) { - String prefix = Bukkit.getServer().getClass().getPackage().getName().replace("org.bukkit.craftbukkit", "net.minecraft.server"); - return Class.forName(prefix + ".PacketLoginOutSuccess"); + try { + // Spigot mappings + return Class.forName("net.minecraft.network.protocol.login.PacketLoginOutSuccess"); + } catch (ClassNotFoundException ex) { + String prefix = Bukkit.getServer().getClass().getPackage().getName().replace("org.bukkit.craftbukkit", "net.minecraft.server"); + return Class.forName(prefix + ".PacketLoginOutSuccess"); + } } } } diff --git a/build-logic/src/main/kotlin/geyser.modded-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.modded-conventions.gradle.kts index b157c0e53..903d82258 100644 --- a/build-logic/src/main/kotlin/geyser.modded-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.modded-conventions.gradle.kts @@ -96,8 +96,8 @@ tasks { afterEvaluate { val providedDependencies = providedDependencies[project.name]!! - val shadedDependencies = configurations.getByName("shadowBundle") - .dependencies.stream().map { dependency -> "${dependency.group}:${dependency.name}" }.toList() + val shadedDependencies = configurations.getByName("shadowBundle").resolvedConfiguration.resolvedArtifacts.stream() + .map { dependency -> "${dependency.moduleVersion.id.module}" }.toList() // Now: Include all transitive dependencies that aren't excluded configurations["includeTransitive"].resolvedConfiguration.resolvedArtifacts.forEach { dep -> diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 58068425e..4908c0614 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -94,6 +94,7 @@ import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.AssetUtils; +import org.geysermc.geyser.util.CodeOfConductManager; import org.geysermc.geyser.util.CooldownUtils; import org.geysermc.geyser.util.Metrics; import org.geysermc.geyser.util.NewsHandler; @@ -296,7 +297,10 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { if (isReloading) { // If we're reloading, the default locale in the config might have changed. GeyserLocale.finalizeDefaultLocale(this); + } else { + CodeOfConductManager.load(); } + GeyserLogger logger = bootstrap.getGeyserLogger(); GeyserConfiguration config = bootstrap.getGeyserConfig(); @@ -683,6 +687,7 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { runIfNonNull(erosionUnixListener, UnixSocketClientListener::close); ResourcePackLoader.clear(); + CodeOfConductManager.getInstance().save(); this.setEnabled(false); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java index d26a25d2c..1cc529a07 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java @@ -31,6 +31,7 @@ import lombok.experimental.Accessors; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.factory.EntityFactory; import org.geysermc.geyser.entity.properties.GeyserEntityProperties; +import org.geysermc.geyser.entity.properties.type.PropertyType; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.translator.entity.EntityMetadataTranslator; @@ -54,7 +55,7 @@ public record EntityDefinition(EntityFactory factory, Entit float width, float height, float offset, GeyserEntityProperties registeredProperties, List> translators) { public static Builder inherited(EntityFactory factory, EntityDefinition parent) { - return new Builder<>(factory, parent.entityType, parent.identifier, parent.width, parent.height, parent.offset, parent.registeredProperties, new ObjectArrayList<>(parent.translators)); + return new Builder<>(factory, parent.entityType, parent.identifier, parent.width, parent.height, parent.offset, new ObjectArrayList<>(parent.translators)); } public static Builder builder(EntityFactory factory) { @@ -89,7 +90,7 @@ public record EntityDefinition(EntityFactory factory, Entit private float width; private float height; private float offset = 0.00001f; - private GeyserEntityProperties registeredProperties; + private GeyserEntityProperties.Builder propertiesBuilder; private final List> translators; private Builder(EntityFactory factory) { @@ -97,14 +98,13 @@ public record EntityDefinition(EntityFactory factory, Entit translators = new ObjectArrayList<>(); } - public Builder(EntityFactory factory, EntityType type, String identifier, float width, float height, float offset, GeyserEntityProperties registeredProperties, List> translators) { + public Builder(EntityFactory factory, EntityType type, String identifier, float width, float height, float offset, List> translators) { this.factory = factory; this.type = type; this.identifier = identifier; this.width = width; this.height = height; this.offset = offset; - this.registeredProperties = registeredProperties; this.translators = translators; } @@ -131,8 +131,11 @@ public record EntityDefinition(EntityFactory factory, Entit return this; } - public Builder properties(GeyserEntityProperties registeredProperties) { - this.registeredProperties = registeredProperties; + public Builder property(PropertyType propertyType) { + if (this.propertiesBuilder == null) { + this.propertiesBuilder = new GeyserEntityProperties.Builder(this.identifier); + } + propertiesBuilder.add(propertyType); return this; } @@ -158,13 +161,11 @@ public record EntityDefinition(EntityFactory factory, Entit if (identifier == null && type != null) { identifier = "minecraft:" + type.name().toLowerCase(Locale.ROOT); } + GeyserEntityProperties registeredProperties = propertiesBuilder == null ? null : propertiesBuilder.build(); EntityDefinition definition = new EntityDefinition<>(factory, type, identifier, width, height, offset, registeredProperties, translators); if (register && definition.entityType() != null) { Registries.ENTITY_DEFINITIONS.get().putIfAbsent(definition.entityType(), definition); Registries.JAVA_ENTITY_IDENTIFIERS.get().putIfAbsent("minecraft:" + type.name().toLowerCase(Locale.ROOT), definition); - if (definition.registeredProperties() != null) { - Registries.BEDROCK_ENTITY_PROPERTIES.get().add(definition.registeredProperties().toNbtMap(identifier)); - } } return definition; } 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 960369de7..fbe8b7883 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -25,10 +25,23 @@ package org.geysermc.geyser.entity; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserFloatEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserStringEnumProperty; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineEntityPropertiesEvent; +import org.geysermc.geyser.api.util.Identifier; import org.geysermc.geyser.entity.factory.EntityFactory; -import org.geysermc.geyser.entity.properties.VanillaEntityProperties; +import org.geysermc.geyser.entity.properties.type.BooleanProperty; +import org.geysermc.geyser.entity.properties.type.EnumProperty; +import org.geysermc.geyser.entity.properties.type.FloatProperty; +import org.geysermc.geyser.entity.properties.type.IntProperty; +import org.geysermc.geyser.entity.properties.type.PropertyType; +import org.geysermc.geyser.entity.properties.type.StringEnumProperty; import org.geysermc.geyser.entity.type.AbstractArrowEntity; import org.geysermc.geyser.entity.type.AbstractWindChargeEntity; import org.geysermc.geyser.entity.type.AreaEffectCloudEntity; @@ -37,8 +50,6 @@ import org.geysermc.geyser.entity.type.BoatEntity; import org.geysermc.geyser.entity.type.ChestBoatEntity; import org.geysermc.geyser.entity.type.CommandBlockMinecartEntity; import org.geysermc.geyser.entity.type.DisplayBaseEntity; -import org.geysermc.geyser.entity.type.HangingEntity; -import org.geysermc.geyser.entity.type.ThrowableEggEntity; import org.geysermc.geyser.entity.type.EnderCrystalEntity; import org.geysermc.geyser.entity.type.EnderEyeEntity; import org.geysermc.geyser.entity.type.Entity; @@ -49,6 +60,7 @@ import org.geysermc.geyser.entity.type.FireballEntity; import org.geysermc.geyser.entity.type.FireworkEntity; import org.geysermc.geyser.entity.type.FishingHookEntity; import org.geysermc.geyser.entity.type.FurnaceMinecartEntity; +import org.geysermc.geyser.entity.type.HangingEntity; import org.geysermc.geyser.entity.type.InteractionEntity; import org.geysermc.geyser.entity.type.ItemEntity; import org.geysermc.geyser.entity.type.ItemFrameEntity; @@ -60,6 +72,7 @@ import org.geysermc.geyser.entity.type.PaintingEntity; import org.geysermc.geyser.entity.type.SpawnerMinecartEntity; import org.geysermc.geyser.entity.type.TNTEntity; import org.geysermc.geyser.entity.type.TextDisplayEntity; +import org.geysermc.geyser.entity.type.ThrowableEggEntity; import org.geysermc.geyser.entity.type.ThrowableEntity; import org.geysermc.geyser.entity.type.ThrowableItemEntity; import org.geysermc.geyser.entity.type.ThrownPotionEntity; @@ -70,6 +83,7 @@ import org.geysermc.geyser.entity.type.living.AgeableEntity; import org.geysermc.geyser.entity.type.living.AllayEntity; import org.geysermc.geyser.entity.type.living.ArmorStandEntity; import org.geysermc.geyser.entity.type.living.BatEntity; +import org.geysermc.geyser.entity.type.living.CopperGolemEntity; import org.geysermc.geyser.entity.type.living.DolphinEntity; import org.geysermc.geyser.entity.type.living.GlowSquidEntity; import org.geysermc.geyser.entity.type.living.IronGolemEntity; @@ -82,17 +96,14 @@ import org.geysermc.geyser.entity.type.living.TadpoleEntity; import org.geysermc.geyser.entity.type.living.animal.ArmadilloEntity; import org.geysermc.geyser.entity.type.living.animal.AxolotlEntity; import org.geysermc.geyser.entity.type.living.animal.BeeEntity; -import org.geysermc.geyser.entity.type.living.animal.HappyGhastEntity; -import org.geysermc.geyser.entity.type.living.animal.farm.ChickenEntity; -import org.geysermc.geyser.entity.type.living.animal.farm.CowEntity; import org.geysermc.geyser.entity.type.living.animal.FoxEntity; import org.geysermc.geyser.entity.type.living.animal.FrogEntity; import org.geysermc.geyser.entity.type.living.animal.GoatEntity; +import org.geysermc.geyser.entity.type.living.animal.HappyGhastEntity; import org.geysermc.geyser.entity.type.living.animal.HoglinEntity; import org.geysermc.geyser.entity.type.living.animal.MooshroomEntity; import org.geysermc.geyser.entity.type.living.animal.OcelotEntity; import org.geysermc.geyser.entity.type.living.animal.PandaEntity; -import org.geysermc.geyser.entity.type.living.animal.farm.PigEntity; import org.geysermc.geyser.entity.type.living.animal.PolarBearEntity; import org.geysermc.geyser.entity.type.living.animal.PufferFishEntity; import org.geysermc.geyser.entity.type.living.animal.RabbitEntity; @@ -101,6 +112,10 @@ import org.geysermc.geyser.entity.type.living.animal.SnifferEntity; import org.geysermc.geyser.entity.type.living.animal.StriderEntity; import org.geysermc.geyser.entity.type.living.animal.TropicalFishEntity; import org.geysermc.geyser.entity.type.living.animal.TurtleEntity; +import org.geysermc.geyser.entity.type.living.animal.farm.ChickenEntity; +import org.geysermc.geyser.entity.type.living.animal.farm.CowEntity; +import org.geysermc.geyser.entity.type.living.animal.farm.PigEntity; +import org.geysermc.geyser.entity.type.living.animal.farm.TemperatureVariantAnimal; import org.geysermc.geyser.entity.type.living.animal.horse.AbstractHorseEntity; import org.geysermc.geyser.entity.type.living.animal.horse.CamelEntity; import org.geysermc.geyser.entity.type.living.animal.horse.ChestedHorseEntity; @@ -147,6 +162,8 @@ import org.geysermc.geyser.entity.type.living.monster.raid.RaidParticipantEntity import org.geysermc.geyser.entity.type.living.monster.raid.RavagerEntity; import org.geysermc.geyser.entity.type.living.monster.raid.SpellcasterIllagerEntity; import org.geysermc.geyser.entity.type.living.monster.raid.VindicatorEntity; +import org.geysermc.geyser.entity.type.player.AvatarEntity; +import org.geysermc.geyser.entity.type.player.MannequinEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.translator.text.MessageTranslator; @@ -155,6 +172,10 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.Boolea import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.FloatEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + public final class EntityDefinitions { public static final EntityDefinition ACACIA_BOAT; public static final EntityDefinition ACACIA_CHEST_BOAT; @@ -182,6 +203,7 @@ public final class EntityDefinitions { public static final EntityDefinition CHEST_MINECART; public static final EntityDefinition CHICKEN; public static final EntityDefinition COD; + public static final EntityDefinition COPPER_GOLEM; public static final EntityDefinition COMMAND_BLOCK_MINECART; public static final EntityDefinition COW; public static final EntityDefinition CREAKING; @@ -236,6 +258,7 @@ public final class EntityDefinitions { public static final EntityDefinition MAGMA_CUBE; public static final EntityDefinition MANGROVE_BOAT; public static final EntityDefinition MANGROVE_CHEST_BOAT; + public static final EntityDefinition MANNEQUIN; public static final EntityDefinition MINECART; public static final EntityDefinition MOOSHROOM; public static final EntityDefinition MULE; @@ -464,7 +487,7 @@ public final class EntityDefinitions { EGG = EntityDefinition.inherited(ThrowableEggEntity::new, throwableItemBase) .type(EntityType.EGG) .heightAndWidth(0.25f) - .properties(VanillaEntityProperties.CLIMATE_VARIANT) + .property(TemperatureVariantAnimal.TEMPERATE_VARIANT_PROPERTY) .build(); ENDER_PEARL = EntityDefinition.inherited(ThrowableItemEntity::new, throwableItemBase) .type(EntityType.ENDER_PEARL) @@ -651,16 +674,27 @@ public final class EntityDefinitions { .addTranslator(MetadataTypes.ROTATIONS, ArmorStandEntity::setLeftLegRotation) .addTranslator(MetadataTypes.ROTATIONS, ArmorStandEntity::setRightLegRotation) .build(); - PLAYER = EntityDefinition.inherited(null, livingEntityBase) + + EntityDefinition avatarEntityBase = EntityDefinition.inherited(null, livingEntityBase) + .height(1.8f).width(0.6f) + .offset(1.62f) + .addTranslator(null) // Player main hand + .addTranslator(MetadataTypes.BYTE, AvatarEntity::setSkinVisibility) + .build(); + + MANNEQUIN = EntityDefinition.inherited(MannequinEntity::new, avatarEntityBase) + .type(EntityType.MANNEQUIN) + .addTranslator(MetadataTypes.RESOLVABLE_PROFILE, MannequinEntity::setProfile) + .addTranslator(null) // Immovable + .addTranslator(MetadataTypes.OPTIONAL_COMPONENT, MannequinEntity::setDescription) + .build(); + + PLAYER = EntityDefinition.inherited(null, avatarEntityBase) .type(EntityType.PLAYER) - .height(1.8f).width(0.6f) - .offset(1.62f) .addTranslator(MetadataTypes.FLOAT, PlayerEntity::setAbsorptionHearts) .addTranslator(null) // Player score - .addTranslator(MetadataTypes.BYTE, PlayerEntity::setSkinVisibility) - .addTranslator(null) // Player main hand - .addTranslator(MetadataTypes.COMPOUND_TAG, PlayerEntity::setLeftParrot) - .addTranslator(MetadataTypes.COMPOUND_TAG, PlayerEntity::setRightParrot) + .addTranslator(MetadataTypes.OPTIONAL_UNSIGNED_INT, PlayerEntity::setLeftParrot) + .addTranslator(MetadataTypes.OPTIONAL_UNSIGNED_INT, PlayerEntity::setRightParrot) .build(); EntityDefinition mobEntityBase = EntityDefinition.inherited(MobEntity::new, livingEntityBase) @@ -694,6 +728,15 @@ public final class EntityDefinitions { .type(EntityType.BREEZE) .height(1.77f).width(0.6f) .build(); + COPPER_GOLEM = EntityDefinition.inherited(CopperGolemEntity::new, mobEntityBase) + .type(EntityType.COPPER_GOLEM) + .height(0.49f).width(0.98f) + .addTranslator(MetadataTypes.WEATHERING_COPPER_STATE, CopperGolemEntity::setWeatheringState) + .addTranslator(MetadataTypes.COPPER_GOLEM_STATE, CopperGolemEntity::setGolemState) + .property(CopperGolemEntity.CHEST_INTERACTION_PROPERTY) + .property(CopperGolemEntity.HAS_FLOWER_PROPERTY) + .property(CopperGolemEntity.OXIDATION_LEVEL_STATE_ENUM_PROPERTY) + .build(); CREAKING = EntityDefinition.inherited(CreakingEntity::new, mobEntityBase) .type(EntityType.CREAKING) .height(2.7f).width(0.9f) @@ -701,7 +744,8 @@ public final class EntityDefinitions { .addTranslator(MetadataTypes.BOOLEAN, CreakingEntity::setActive) .addTranslator(MetadataTypes.BOOLEAN, CreakingEntity::setIsTearingDown) .addTranslator(MetadataTypes.OPTIONAL_BLOCK_POS, CreakingEntity::setHomePos) - .properties(VanillaEntityProperties.CREAKING) + .property(CreakingEntity.STATE_PROPERTY) + .property(CreakingEntity.SWAYING_TICKS_PROPERTY) .build(); CREEPER = EntityDefinition.inherited(CreeperEntity::new, mobEntityBase) .type(EntityType.CREEPER) @@ -954,7 +998,7 @@ public final class EntityDefinitions { ARMADILLO = EntityDefinition.inherited(ArmadilloEntity::new, ageableEntityBase) .type(EntityType.ARMADILLO) .height(0.65f).width(0.7f) - .properties(VanillaEntityProperties.ARMADILLO) + .property(ArmadilloEntity.STATE_PROPERTY) .addTranslator(MetadataTypes.ARMADILLO_STATE, ArmadilloEntity::setArmadilloState) .build(); AXOLOTL = EntityDefinition.inherited(AxolotlEntity::new, ageableEntityBase) @@ -967,20 +1011,20 @@ public final class EntityDefinitions { BEE = EntityDefinition.inherited(BeeEntity::new, ageableEntityBase) .type(EntityType.BEE) .heightAndWidth(0.6f) - .properties(VanillaEntityProperties.BEE) + .property(BeeEntity.NECTAR_PROPERTY) .addTranslator(MetadataTypes.BYTE, BeeEntity::setBeeFlags) .addTranslator(MetadataTypes.INT, BeeEntity::setAngerTime) .build(); CHICKEN = EntityDefinition.inherited(ChickenEntity::new, ageableEntityBase) .type(EntityType.CHICKEN) .height(0.7f).width(0.4f) - .properties(VanillaEntityProperties.CLIMATE_VARIANT) + .property(TemperatureVariantAnimal.TEMPERATE_VARIANT_PROPERTY) .addTranslator(MetadataTypes.CHICKEN_VARIANT, ChickenEntity::setVariant) .build(); COW = EntityDefinition.inherited(CowEntity::new, ageableEntityBase) .type(EntityType.COW) .height(1.4f).width(0.9f) - .properties(VanillaEntityProperties.CLIMATE_VARIANT) + .property(TemperatureVariantAnimal.TEMPERATE_VARIANT_PROPERTY) .addTranslator(MetadataTypes.COW_VARIANT, CowEntity::setVariant) .build(); FOX = EntityDefinition.inherited(FoxEntity::new, ageableEntityBase) @@ -1000,7 +1044,7 @@ public final class EntityDefinitions { HAPPY_GHAST = EntityDefinition.inherited(HappyGhastEntity::new, ageableEntityBase) .type(EntityType.HAPPY_GHAST) .heightAndWidth(4f) - .properties(VanillaEntityProperties.HAPPY_GHAST) + .property(HappyGhastEntity.CAN_MOVE_PROPERTY) .addTranslator(null) // Is leash holder .addTranslator(MetadataTypes.BOOLEAN, HappyGhastEntity::setStaysStill) .build(); @@ -1039,7 +1083,7 @@ public final class EntityDefinitions { PIG = EntityDefinition.inherited(PigEntity::new, ageableEntityBase) .type(EntityType.PIG) .heightAndWidth(0.9f) - .properties(VanillaEntityProperties.CLIMATE_VARIANT) + .property(TemperatureVariantAnimal.TEMPERATE_VARIANT_PROPERTY) .addTranslator(MetadataTypes.INT, PigEntity::setBoost) .addTranslator(MetadataTypes.PIG_VARIANT, PigEntity::setVariant) .build(); @@ -1185,7 +1229,7 @@ public final class EntityDefinitions { WOLF = EntityDefinition.inherited(WolfEntity::new, tameableEntityBase) .type(EntityType.WOLF) .height(0.85f).width(0.6f) - .properties(VanillaEntityProperties.WOLF_SOUND_VARIANT) + .property(WolfEntity.SOUND_VARIANT) // "Begging" on wiki.vg, "Interested" in Nukkit - the tilt of the head .addTranslator(MetadataTypes.BOOLEAN, (wolfEntity, entityMetadata) -> wolfEntity.setFlag(EntityFlag.INTERESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) .addTranslator(MetadataTypes.INT, WolfEntity::setCollarColor) @@ -1219,7 +1263,95 @@ public final class EntityDefinitions { } public static void init() { - // no-op + // entities would be initialized before this event is called + GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineEntityPropertiesEvent() { + @Override + public GeyserFloatEntityProperty registerFloatProperty(@NonNull Identifier identifier, @NonNull Identifier propertyId, float min, float max, @Nullable Float defaultValue) { + Objects.requireNonNull(identifier); + Objects.requireNonNull(propertyId); + if (propertyId.vanilla()) { + throw new IllegalArgumentException("Cannot register custom property in vanilla namespace! " + propertyId); + } + FloatProperty property = new FloatProperty(propertyId, min, max, defaultValue); + registerProperty(identifier, property); + return property; + } + + @Override + public IntProperty registerIntegerProperty(@NonNull Identifier identifier, @NonNull Identifier propertyId, int min, int max, @Nullable Integer defaultValue) { + Objects.requireNonNull(identifier); + Objects.requireNonNull(propertyId); + if (propertyId.vanilla()) { + throw new IllegalArgumentException("Cannot register custom property in vanilla namespace! " + propertyId); + } + IntProperty property = new IntProperty(propertyId, min, max, defaultValue); + registerProperty(identifier, property); + return property; + } + + @Override + public BooleanProperty registerBooleanProperty(@NonNull Identifier identifier, @NonNull Identifier propertyId, boolean defaultValue) { + Objects.requireNonNull(identifier); + Objects.requireNonNull(propertyId); + if (propertyId.vanilla()) { + throw new IllegalArgumentException("Cannot register custom property in vanilla namespace! " + propertyId); + } + BooleanProperty property = new BooleanProperty(propertyId, defaultValue); + registerProperty(identifier, property); + return property; + } + + @Override + public > EnumProperty registerEnumProperty(@NonNull Identifier identifier, @NonNull Identifier propertyId, @NonNull Class enumClass, @Nullable E defaultValue) { + Objects.requireNonNull(identifier); + Objects.requireNonNull(propertyId); + Objects.requireNonNull(enumClass); + if (propertyId.vanilla()) { + throw new IllegalArgumentException("Cannot register custom property in vanilla namespace! " + propertyId); + } + EnumProperty property = new EnumProperty<>(propertyId, enumClass, defaultValue == null ? enumClass.getEnumConstants()[0] : defaultValue); + registerProperty(identifier, property); + return property; + } + + @Override + public GeyserStringEnumProperty registerEnumProperty(@NonNull Identifier identifier, @NonNull Identifier propertyId, @NonNull List values, @Nullable String defaultValue) { + Objects.requireNonNull(identifier); + Objects.requireNonNull(propertyId); + Objects.requireNonNull(values); + if (propertyId.vanilla()) { + throw new IllegalArgumentException("Cannot register custom property in vanilla namespace! " + propertyId); + } + StringEnumProperty property = new StringEnumProperty(propertyId, values, defaultValue); + registerProperty(identifier, property); + return property; + } + + @Override + public Collection> properties(@NonNull Identifier identifier) { + Objects.requireNonNull(identifier); + var definition = Registries.JAVA_ENTITY_IDENTIFIERS.get(identifier.toString()); + if (definition == null) { + throw new IllegalArgumentException("Unknown entity type: " + identifier); + } + return List.copyOf(definition.registeredProperties().getProperties()); + } + }); + + for (var definition : Registries.ENTITY_DEFINITIONS.get().values()) { + if (definition.registeredProperties() != null) { + Registries.BEDROCK_ENTITY_PROPERTIES.get().add(definition.registeredProperties().toNbtMap(definition.identifier())); + } + } + } + + private static void registerProperty(Identifier entityType, PropertyType property) { + var definition = Registries.JAVA_ENTITY_IDENTIFIERS.get(entityType.toString()); + if (definition == null) { + throw new IllegalArgumentException("Unknown entity type: " + entityType); + } + + definition.registeredProperties().add(entityType.toString(), property); } private EntityDefinitions() { diff --git a/core/src/main/java/org/geysermc/geyser/entity/GeyserEntityData.java b/core/src/main/java/org/geysermc/geyser/entity/GeyserEntityData.java index 6f8f2525f..e0267ff13 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/GeyserEntityData.java +++ b/core/src/main/java/org/geysermc/geyser/entity/GeyserEntityData.java @@ -44,7 +44,6 @@ import java.util.concurrent.CompletableFuture; public class GeyserEntityData implements EntityData { private final GeyserSession session; - private final Set movementLockOwners = new HashSet<>(); public GeyserEntityData(GeyserSession session) { diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java b/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java index eaa7b7448..fa9439998 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java @@ -31,36 +31,38 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import lombok.EqualsAndHashCode; import lombok.ToString; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; -import org.geysermc.geyser.entity.properties.type.BooleanProperty; -import org.geysermc.geyser.entity.properties.type.EnumProperty; -import org.geysermc.geyser.entity.properties.type.FloatProperty; -import org.geysermc.geyser.entity.properties.type.IntProperty; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityProperty; import org.geysermc.geyser.entity.properties.type.PropertyType; +import org.geysermc.geyser.registry.Registries; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import java.util.Objects; +import java.util.regex.Pattern; @EqualsAndHashCode @ToString public class GeyserEntityProperties { - private final ObjectArrayList properties; + + private final static Pattern ENTITY_PROPERTY_PATTERN = Pattern.compile("^[a-z0-9_.:-]*:[a-z0-9_.:-]*$"); + + private final ObjectArrayList> properties; private final Object2IntMap propertyIndices; - private GeyserEntityProperties(ObjectArrayList properties, - Object2IntMap propertyIndices) { - this.properties = properties; - this.propertyIndices = propertyIndices; + private GeyserEntityProperties() { + this.properties = new ObjectArrayList<>(); + this.propertyIndices = new Object2IntOpenHashMap<>(); } public NbtMap toNbtMap(String entityType) { NbtMapBuilder mapBuilder = NbtMap.builder(); List nbtProperties = new ArrayList<>(); - for (PropertyType property : properties) { + for (PropertyType property : properties) { nbtProperties.add(property.nbtMap()); } mapBuilder.putList("properties", NbtType.COMPOUND, nbtProperties); @@ -68,7 +70,30 @@ public class GeyserEntityProperties { return mapBuilder.putString("type", entityType).build(); } - public @NonNull List getProperties() { + public void add(String entityType, @NonNull PropertyType property) { + if (!Registries.BEDROCK_ENTITY_PROPERTIES.get().isEmpty()) { + throw new IllegalStateException("Cannot add properties outside the GeyserDefineEntityProperties event!"); + } + + if (this.properties.size() > 32) { + throw new IllegalArgumentException("Cannot register more than 32 properties for entity type " + entityType); + } + + Objects.requireNonNull(property, "property cannot be null!"); + String name = property.identifier().toString(); + if (propertyIndices.containsKey(name)) { + throw new IllegalArgumentException( + "Property with name " + name + " already exists on builder!"); + } else if (!ENTITY_PROPERTY_PATTERN.matcher(name).matches()) { + throw new IllegalArgumentException( + "Cannot register property with name " + name + " because property name is invalid! Must match: " + ENTITY_PROPERTY_PATTERN.pattern() + ); + } + this.properties.add(property); + propertyIndices.put(name, properties.size() - 1); + } + + public @NonNull List> getProperties() { return properties; } @@ -77,89 +102,24 @@ public class GeyserEntityProperties { } public static class Builder { - private final ObjectArrayList properties = new ObjectArrayList<>(); - private final Object2IntMap propertyIndices = new Object2IntOpenHashMap<>(); + private GeyserEntityProperties properties; + private final String identifier; - public Builder addInt(@NonNull String name, int min, int max) { - if (propertyIndices.containsKey(name)) { - throw new IllegalArgumentException( - "Property with name " + name + " already exists on builder!"); + public Builder(String identifier) { + this.identifier = identifier; + } + + public Builder add(@NonNull PropertyType property) { + Objects.requireNonNull(property, "property cannot be null!"); + if (properties == null) { + properties = new GeyserEntityProperties(); } - PropertyType property = new IntProperty(name, min, max); - this.properties.add(property); - propertyIndices.put(name, properties.size() - 1); + properties.add(identifier, property); return this; } - public Builder addInt(@NonNull String name) { - if (propertyIndices.containsKey(name)) { - throw new IllegalArgumentException( - "Property with name " + name + " already exists on builder!"); - } - PropertyType property = new IntProperty(name, Integer.MIN_VALUE, Integer.MAX_VALUE); - this.properties.add(property); - propertyIndices.put(name, properties.size() - 1); - return this; - } - - public Builder addFloat(@NonNull String name, float min, float max) { - if (propertyIndices.containsKey(name)) { - throw new IllegalArgumentException( - "Property with name " + name + " already exists on builder!"); - } - PropertyType property = new FloatProperty(name, min, max); - this.properties.add(property); - propertyIndices.put(name, properties.size() - 1); - return this; - } - - public Builder addFloat(@NonNull String name) { - if (propertyIndices.containsKey(name)) { - throw new IllegalArgumentException( - "Property with name " + name + " already exists on builder!"); - } - PropertyType property = new FloatProperty(name, Float.MIN_NORMAL, Float.MAX_VALUE); - this.properties.add(property); - propertyIndices.put(name, properties.size() - 1); - return this; - } - - public Builder addBoolean(@NonNull String name) { - if (propertyIndices.containsKey(name)) { - throw new IllegalArgumentException( - "Property with name " + name + " already exists on builder!"); - } - PropertyType property = new BooleanProperty(name); - this.properties.add(property); - propertyIndices.put(name, properties.size() - 1); - return this; - } - - public Builder addEnum(@NonNull String name, List values) { - if (propertyIndices.containsKey(name)) { - throw new IllegalArgumentException( - "Property with name " + name + " already exists on builder!"); - } - PropertyType property = new EnumProperty(name, values); - this.properties.add(property); - propertyIndices.put(name, properties.size() - 1); - return this; - } - - public Builder addEnum(@NonNull String name, String... values) { - if (propertyIndices.containsKey(name)) { - throw new IllegalArgumentException( - "Property with name " + name + " already exists on builder!"); - } - List valuesList = Arrays.asList(values); // Convert array to list - PropertyType property = new EnumProperty(name, valuesList); - this.properties.add(property); - propertyIndices.put(name, properties.size() - 1); - return this; - } - - public GeyserEntityProperties build() { - return new GeyserEntityProperties(properties, propertyIndices); + public @Nullable GeyserEntityProperties build() { + return properties; } } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityPropertyManager.java b/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityPropertyManager.java index 29026b172..a5f189cc7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityPropertyManager.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityPropertyManager.java @@ -25,10 +25,12 @@ package org.geysermc.geyser.entity.properties; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityProperty; import org.cloudburstmc.protocol.bedrock.data.entity.FloatEntityProperty; import org.cloudburstmc.protocol.bedrock.data.entity.IntEntityProperty; -import org.geysermc.geyser.entity.properties.type.EnumProperty; import org.geysermc.geyser.entity.properties.type.PropertyType; import java.util.List; @@ -36,34 +38,29 @@ import java.util.List; public class GeyserEntityPropertyManager { private final GeyserEntityProperties properties; - - private final ObjectArrayList intEntityProperties = new ObjectArrayList<>(); - private final ObjectArrayList floatEntityProperties = new ObjectArrayList<>(); + private final Object2ObjectMap intEntityProperties = new Object2ObjectArrayMap<>(); + private final Object2ObjectMap floatEntityProperties = new Object2ObjectArrayMap<>(); public GeyserEntityPropertyManager(GeyserEntityProperties properties) { this.properties = properties; + for (PropertyType property : properties.getProperties()) { + String name = property.identifier().toString(); + int index = properties.getPropertyIndex(name); + addProperty(name, property.defaultValue(index)); + } } - public void add(String propertyName, int value) { - int index = properties.getPropertyIndex(propertyName); - intEntityProperties.add(new IntEntityProperty(index, value)); + public void addProperty(PropertyType propertyType, T value) { + int index = properties.getPropertyIndex(propertyType.identifier().toString()); + this.addProperty(propertyType.identifier().toString(), propertyType.createValue(index, value)); } - public void add(String propertyName, boolean value) { - int index = properties.getPropertyIndex(propertyName); - intEntityProperties.add(new IntEntityProperty(index, value ? 1 : 0)); - } - - public void add(String propertyName, String value) { - int index = properties.getPropertyIndex(propertyName); - PropertyType property = properties.getProperties().get(index); - int enumIndex = ((EnumProperty) property).getIndex(value); - intEntityProperties.add(new IntEntityProperty(index, enumIndex)); - } - - public void add(String propertyName, float value) { - int index = properties.getPropertyIndex(propertyName); - floatEntityProperties.add(new FloatEntityProperty(index, value)); + private void addProperty(String propertyName, EntityProperty entityProperty) { + if (entityProperty instanceof FloatEntityProperty floatEntityProperty) { + floatEntityProperties.put(propertyName, floatEntityProperty); + } else if (entityProperty instanceof IntEntityProperty intEntityProperty) { + intEntityProperties.put(propertyName, intEntityProperty); + } } public boolean hasFloatProperties() { @@ -78,21 +75,17 @@ public class GeyserEntityPropertyManager { return hasFloatProperties() || hasIntProperties(); } - public ObjectArrayList intProperties() { - return this.intEntityProperties; - } - public void applyIntProperties(List properties) { - properties.addAll(intEntityProperties); + properties.addAll(intEntityProperties.values()); intEntityProperties.clear(); } - public ObjectArrayList floatProperties() { - return this.floatEntityProperties; - } - public void applyFloatProperties(List properties) { - properties.addAll(floatEntityProperties); + properties.addAll(floatEntityProperties.values()); floatEntityProperties.clear(); } -} \ No newline at end of file + + public NbtMap toNbtMap(String entityType) { + return this.properties.toNbtMap(entityType); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/VanillaEntityProperties.java b/core/src/main/java/org/geysermc/geyser/entity/properties/VanillaEntityProperties.java deleted file mode 100644 index 06a715f18..000000000 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/VanillaEntityProperties.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2025 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.entity.properties; - -import org.geysermc.geyser.entity.type.living.monster.CreakingEntity; - -public class VanillaEntityProperties { - - public static final String CLIMATE_VARIANT_ID = "minecraft:climate_variant"; - - public static final GeyserEntityProperties ARMADILLO = new GeyserEntityProperties.Builder() - .addEnum("minecraft:armadillo_state", - "unrolled", - "rolled_up", - "rolled_up_peeking", - "rolled_up_relaxing", - "rolled_up_unrolling") - .build(); - - public static final GeyserEntityProperties BEE = new GeyserEntityProperties.Builder() - .addBoolean("minecraft:has_nectar") - .build(); - - public static final GeyserEntityProperties CLIMATE_VARIANT = new GeyserEntityProperties.Builder() - .addEnum(CLIMATE_VARIANT_ID, - "temperate", - "warm", - "cold") - .build(); - - public static final GeyserEntityProperties CREAKING = new GeyserEntityProperties.Builder() - .addEnum(CreakingEntity.CREAKING_STATE, - "neutral", - "hostile_observed", - "hostile_unobserved", - "twitching", - "crumbling") - .addInt(CreakingEntity.CREAKING_SWAYING_TICKS, 0, 6) - .build(); - - public static final GeyserEntityProperties HAPPY_GHAST = new GeyserEntityProperties.Builder() - .addBoolean("minecraft:can_move") - .build(); - - public static final GeyserEntityProperties WOLF_SOUND_VARIANT = new GeyserEntityProperties.Builder() - .addEnum("minecraft:sound_variant", - "default", - "big", - "cute", - "grumpy", - "mad", - "puglin", - "sad") - .build(); -} diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/AbstractEnumProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/AbstractEnumProperty.java new file mode 100644 index 000000000..0c921b54e --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/AbstractEnumProperty.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.entity.properties.type; + +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtType; +import org.cloudburstmc.protocol.bedrock.data.entity.IntEntityProperty; +import org.geysermc.geyser.api.util.Identifier; + +import java.util.List; +import java.util.regex.Pattern; + +public interface AbstractEnumProperty extends PropertyType { + + Pattern VALUE_VALIDATION_REGEX = Pattern.compile("^[A-Za-z][A-Za-z0-9_]{0,31}$"); + + @Override + default NbtMap nbtMap() { + return NbtMap.builder() + .putString("name", identifier().toString()) + .putList("enum", NbtType.STRING, allBedrockValues()) + .putInt("type", 3) + .build(); + } + + default void validateAllValues(Identifier name, List values) { + if (values.size() > 16) { + throw new IllegalArgumentException("Cannot register enum property with name " + name + " because it has more than 16 values!"); + } + + for (String value : values) { + if (!VALUE_VALIDATION_REGEX.matcher(value).matches()) { + throw new IllegalArgumentException( + "Cannot register enum property with name " + name + " and value " + value + + " because enum values can only contain alphanumeric characters and underscores." + ); + } + } + } + + List allBedrockValues(); + + @Override + default IntEntityProperty defaultValue(int index) { + return new IntEntityProperty(index, defaultIndex()); + } + + @Override + default IntEntityProperty createValue(int index, @Nullable T value) { + if (value == null) { + return defaultValue(index); + } + + int valueIndex = indexOf(value); + if (valueIndex == -1) { + throw new IllegalArgumentException("Enum value " + value + " is not a valid enum value!"); + } + return new IntEntityProperty(index, valueIndex); + } + + int indexOf(T value); + + int defaultIndex(); +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/BooleanProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/BooleanProperty.java index 6fc64ad4b..9bbb1cc2d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/type/BooleanProperty.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/BooleanProperty.java @@ -26,19 +26,33 @@ package org.geysermc.geyser.entity.properties.type; import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.bedrock.data.entity.IntEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserBooleanEntityProperty; +import org.geysermc.geyser.api.util.Identifier; -public class BooleanProperty implements PropertyType { - private final String name; - - public BooleanProperty(String name) { - this.name = name; - } +public record BooleanProperty( + Identifier identifier, + Boolean defaultValue +) implements PropertyType, GeyserBooleanEntityProperty { @Override public NbtMap nbtMap() { return NbtMap.builder() - .putString("name", name) + .putString("name", identifier.toString()) .putInt("type", 2) .build(); } -} \ No newline at end of file + + @Override + public IntEntityProperty defaultValue(int index) { + return createValue(index, defaultValue != null && defaultValue); + } + + @Override + public IntEntityProperty createValue(int index, Boolean value) { + if (value == null) { + return defaultValue(index); + } + return new IntEntityProperty(index, value ? 1 : 0); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/EnumProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/EnumProperty.java index 05e12ba61..42fbb6a81 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/type/EnumProperty.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/EnumProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * Copyright (c) 2025 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,37 +25,40 @@ package org.geysermc.geyser.entity.properties.type; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import org.cloudburstmc.nbt.NbtMap; -import org.cloudburstmc.nbt.NbtType; +import org.geysermc.geyser.api.entity.property.type.GeyserEnumEntityProperty; +import org.geysermc.geyser.api.util.Identifier; +import java.util.Arrays; import java.util.List; +import java.util.Locale; -public class EnumProperty implements PropertyType { - private final String name; - private final List values; - private final Object2IntMap valueIndexMap; +public record EnumProperty>( + Identifier identifier, + Class enumClass, + E defaultValue +) implements AbstractEnumProperty, GeyserEnumEntityProperty { - public EnumProperty(String name, List values) { - this.name = name; - this.values = values; - this.valueIndexMap = new Object2IntOpenHashMap<>(values.size()); - for (int i = 0; i < values.size(); i++) { - valueIndexMap.put(values.get(i), i); - } + public EnumProperty { + validateAllValues(identifier, Arrays.stream(enumClass.getEnumConstants()).map(value -> value.name().toLowerCase(Locale.ROOT)).toList()); + } + + public List values() { + return List.of(enumClass.getEnumConstants()); + } + + public List allBedrockValues() { + return values().stream().map( + value -> value.name().toLowerCase(Locale.ROOT) + ).toList(); } @Override - public NbtMap nbtMap() { - return NbtMap.builder() - .putString("name", name) - .putList("enum", NbtType.STRING, values) - .putInt("type", 3) - .build(); + public int indexOf(E value) { + return value.ordinal(); } - public int getIndex(String value) { - return valueIndexMap.getOrDefault(value, -1); + @Override + public int defaultIndex() { + return defaultValue.ordinal(); } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/FloatProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/FloatProperty.java index 8b808ebc3..16997dc8a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/type/FloatProperty.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/FloatProperty.java @@ -26,25 +26,48 @@ package org.geysermc.geyser.entity.properties.type; import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.bedrock.data.entity.FloatEntityProperty; +import org.geysermc.geyser.api.entity.property.type.GeyserFloatEntityProperty; +import org.geysermc.geyser.api.util.Identifier; -public class FloatProperty implements PropertyType { - private final String name; - private final float max; - private final float min; +public record FloatProperty( + Identifier identifier, + float max, + float min, + Float defaultValue +) implements PropertyType, GeyserFloatEntityProperty { - public FloatProperty(String name, float min, float max) { - this.name = name; - this.max = max; - this.min = min; + public FloatProperty { + if (min > max) { + throw new IllegalArgumentException("Cannot create float entity property (%s) with a minimum value (%s) greater than maximum (%s)!" + .formatted(identifier, min, max)); + } + if (defaultValue < min || defaultValue > max) { + throw new IllegalArgumentException("Cannot create float entity property (%s) with a default value (%s) outside of the range (%s - %s)!" + .formatted(identifier, defaultValue, min, max)); + } } @Override public NbtMap nbtMap() { return NbtMap.builder() - .putString("name", name) + .putString("name", identifier.toString()) .putFloat("max", max) .putFloat("min", min) .putInt("type", 1) .build(); } -} \ No newline at end of file + + @Override + public FloatEntityProperty defaultValue(int index) { + return createValue(index, defaultValue == null ? min : defaultValue); + } + + @Override + public FloatEntityProperty createValue(int index, Float value) { + if (value == null) { + return defaultValue(index); + } + return new FloatEntityProperty(index, value); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/IntProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/IntProperty.java index 9e38db7c7..966277696 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/type/IntProperty.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/IntProperty.java @@ -26,25 +26,53 @@ package org.geysermc.geyser.entity.properties.type; import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.bedrock.data.entity.IntEntityProperty; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.entity.property.type.GeyserIntEntityProperty; +import org.geysermc.geyser.api.util.Identifier; -public class IntProperty implements PropertyType { - private final String name; - private final int max; - private final int min; +public record IntProperty( + Identifier identifier, + int max, + int min, + Integer defaultValue +) implements PropertyType, GeyserIntEntityProperty { - public IntProperty(String name, int min, int max) { - this.name = name; - this.max = max; - this.min = min; + public IntProperty { + if (min > max) { + throw new IllegalArgumentException("Cannot create int entity property (%s) with a minimum value (%s) greater than maximum (%s)!" + .formatted(identifier, min, max)); + } + if (defaultValue < min || defaultValue > max) { + throw new IllegalArgumentException("Cannot create int entity property (%s) with a default value (%s) outside of the range (%s - %s)!" + .formatted(identifier, defaultValue, min, max)); + } + if (min < -1000000 || max > 1000000) { + // https://learn.microsoft.com/en-us/minecraft/creator/documents/introductiontoentityproperties?view=minecraft-bedrock-stable#a-note-on-large-integer-entity-property-values + GeyserImpl.getInstance().getLogger().warning("Using int entity properties with min / max values larger than +- 1 million is not recommended!"); + } } @Override public NbtMap nbtMap() { return NbtMap.builder() - .putString("name", name) + .putString("name", identifier.toString()) .putInt("max", max) .putInt("min", min) .putInt("type", 0) .build(); } -} \ No newline at end of file + + @Override + public IntEntityProperty defaultValue(int index) { + return createValue(index, defaultValue == null ? min : defaultValue); + } + + @Override + public IntEntityProperty createValue(int index, Integer value) { + if (value == null) { + return defaultValue(index); + } + return new IntEntityProperty(index, value); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/PropertyType.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/PropertyType.java index a64d7246a..cd1471273 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/type/PropertyType.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/PropertyType.java @@ -25,8 +25,20 @@ package org.geysermc.geyser.entity.properties.type; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityProperty; +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; +import org.geysermc.geyser.entity.properties.GeyserEntityPropertyManager; -public interface PropertyType { +public interface PropertyType extends GeyserEntityProperty { NbtMap nbtMap(); -} \ No newline at end of file + + NetworkRepresentation defaultValue(int index); + + NetworkRepresentation createValue(int index, @Nullable Type value); + + default void apply(GeyserEntityPropertyManager manager, Type value) { + manager.addProperty(this, value); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/StringEnumProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/StringEnumProperty.java new file mode 100644 index 000000000..278f60c7f --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/StringEnumProperty.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.entity.properties.type; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.entity.property.type.GeyserStringEnumProperty; +import org.geysermc.geyser.api.util.Identifier; + +import java.util.List; + +public record StringEnumProperty( + Identifier identifier, + List values, + int defaultIndex +) implements AbstractEnumProperty, GeyserStringEnumProperty { + + public StringEnumProperty { + if (defaultIndex < 0) { + throw new IllegalArgumentException("Unable to find default value for enum property with name " + identifier); + } + validateAllValues(identifier, values); + } + + public StringEnumProperty(Identifier name, List values, @Nullable String defaultValue) { + this(name, values, defaultValue == null ? 0 : values.indexOf(defaultValue)); + } + + @Override + public List allBedrockValues() { + return values; + } + + @Override + public int indexOf(String value) { + return values.indexOf(value); + } + + @Override + public @NonNull String defaultValue() { + return values.get(defaultIndex); + } +} 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 b03dea3ed..15584a2be 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 @@ -29,22 +29,28 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityProperty; import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; import org.cloudburstmc.protocol.bedrock.packet.MoveEntityDeltaPacket; import org.cloudburstmc.protocol.bedrock.packet.RemoveEntityPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; +import org.geysermc.geyser.api.entity.property.BatchPropertyUpdater; +import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; import org.geysermc.geyser.api.entity.type.GeyserEntity; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.GeyserDirtyMetadata; +import org.geysermc.geyser.entity.properties.GeyserEntityProperties; import org.geysermc.geyser.entity.properties.GeyserEntityPropertyManager; +import org.geysermc.geyser.entity.properties.type.PropertyType; import org.geysermc.geyser.entity.type.living.MobEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.item.Items; @@ -71,6 +77,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.UUID; +import java.util.function.Consumer; @Getter @Setter @@ -118,7 +125,7 @@ public class Entity implements GeyserEntity { @Setter(AccessLevel.NONE) private float boundingBoxWidth; @Setter(AccessLevel.NONE) - private String displayName; + protected String displayName; @Setter(AccessLevel.NONE) protected boolean silent = false; /* Metadata end */ @@ -201,6 +208,10 @@ public class Entity implements GeyserEntity { addEntityPacket.setBodyRotation(yaw); // TODO: This should be bodyYaw addEntityPacket.getMetadata().putFlags(flags); dirtyMetadata.apply(addEntityPacket.getMetadata()); + if (propertyManager != null) { + propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); + propertyManager.applyFloatProperties(addEntityPacket.getProperties().getFloatProperties()); + } addAdditionalSpawnData(addEntityPacket); valid = true; @@ -672,7 +683,7 @@ public class Entity implements GeyserEntity { // Note this might be client side. Has yet to be an issue though, as of Java 1.21. return InteractiveTag.REMOVE_LEASH; } - if (session.getPlayerInventory().getItemInHand(hand).asItem() == Items.LEAD && leashable.canBeLeashed()) { + if (session.getPlayerInventory().getItemInHand(hand).is(Items.LEAD) && leashable.canBeLeashed()) { // We shall leash return InteractiveTag.LEASH; } @@ -701,7 +712,7 @@ public class Entity implements GeyserEntity { // Has yet to be an issue though, as of Java 1.21. return InteractionResult.SUCCESS; } - if (session.getPlayerInventory().getItemInHand(hand).asItem() == Items.LEAD + if (session.getPlayerInventory().getItemInHand(hand).is(Items.LEAD) && !(session.getEntityCache().getEntityByGeyserId(leashable.leashHolderBedrockId()) instanceof PlayerEntity)) { // We shall leash return InteractionResult.SUCCESS; @@ -752,4 +763,42 @@ public class Entity implements GeyserEntity { packet.setData(data); session.sendUpstreamPacket(packet); } + + @Override + public void updatePropertiesBatched(Consumer consumer) { + if (this.propertyManager != null) { + Objects.requireNonNull(consumer); + GeyserEntityProperties propertyDefinitions = definition.registeredProperties(); + consumer.accept(new BatchPropertyUpdater() { + @Override + public void update(@NonNull GeyserEntityProperty property, @Nullable T value) { + Objects.requireNonNull(property, "property must not be null!"); + if (!(property instanceof PropertyType propertyType)) { + throw new IllegalArgumentException("Invalid property implementation! Got: " + property.getClass().getSimpleName()); + } + int index = propertyDefinitions.getPropertyIndex(property.identifier().toString()); + if (index < 0) { + throw new IllegalArgumentException("No property with the name " + property.identifier() + " has been registered."); + } + + var expectedProperty = propertyDefinitions.getProperties().get(index); + if (!expectedProperty.equals(propertyType)) { + throw new IllegalArgumentException("The supplied property was not registered with this entity type!"); + } + + propertyType.apply(propertyManager, value); + } + }); + + if (propertyManager.hasProperties()) { + SetEntityDataPacket packet = new SetEntityDataPacket(); + packet.setRuntimeEntityId(getGeyserId()); + propertyManager.applyFloatProperties(packet.getProperties().getFloatProperties()); + propertyManager.applyIntProperties(packet.getProperties().getIntProperties()); + session.sendUpstreamPacket(packet); + } + } else { + throw new IllegalArgumentException("Given entity has no registered properties!"); + } + } } 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 92048eb25..d6d880d0a 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 @@ -35,7 +35,6 @@ import org.cloudburstmc.protocol.bedrock.data.AttributeData; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; -import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket; import org.cloudburstmc.protocol.bedrock.packet.MobEquipmentPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; @@ -46,9 +45,10 @@ import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.entity.vehicle.HappyGhastVehicleComponent; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.scoreboard.Team; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.geyser.util.AttributeUtils; import org.geysermc.geyser.util.EntityUtils; @@ -82,15 +82,6 @@ import java.util.UUID; public class LivingEntity extends Entity { protected EnumMap equipment = new EnumMap<>(EquipmentSlot.class); - protected ItemData helmet = ItemData.AIR; - protected ItemData chestplate = ItemData.AIR; - protected ItemData leggings = ItemData.AIR; - protected ItemData boots = ItemData.AIR; - protected ItemData body = ItemData.AIR; - protected ItemData saddle = ItemData.AIR; - protected ItemData hand = ItemData.AIR; - protected ItemData offhand = ItemData.AIR; - @Getter(value = AccessLevel.NONE) protected float health = 1f; // The default value in Java Edition before any entity metadata is sent @Getter(value = AccessLevel.NONE) @@ -118,34 +109,48 @@ public class LivingEntity extends Entity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } + public GeyserItemStack getItemInSlot(EquipmentSlot slot) { + GeyserItemStack stack = equipment.get(slot); + if (stack == null) { + return GeyserItemStack.EMPTY; + } + return stack; + } + + public GeyserItemStack getMainHandItem() { + return getItemInSlot(EquipmentSlot.MAIN_HAND); + } + + public GeyserItemStack getOffHandItem() { + return getItemInSlot(EquipmentSlot.OFF_HAND); + } + + public boolean isHolding(Item item) { + return getMainHandItem().is(item) || getOffHandItem().is(item); + } + public void setHelmet(GeyserItemStack stack) { this.equipment.put(EquipmentSlot.HELMET, stack); - this.helmet = ItemTranslator.translateToBedrock(session, stack); } public void setChestplate(GeyserItemStack stack) { this.equipment.put(EquipmentSlot.CHESTPLATE, stack); - this.chestplate = ItemTranslator.translateToBedrock(session, stack); } public void setLeggings(GeyserItemStack stack) { this.equipment.put(EquipmentSlot.LEGGINGS, stack); - this.leggings = ItemTranslator.translateToBedrock(session, stack); } public void setBoots(GeyserItemStack stack) { this.equipment.put(EquipmentSlot.BOOTS, stack); - this.boots = ItemTranslator.translateToBedrock(session, stack); } public void setBody(GeyserItemStack stack) { this.equipment.put(EquipmentSlot.BODY, stack); - this.body = ItemTranslator.translateToBedrock(session, stack); } public void setSaddle(GeyserItemStack stack) { this.equipment.put(EquipmentSlot.SADDLE, stack); - this.saddle = ItemTranslator.translateToBedrock(session, stack); boolean saddled = false; if (!stack.isEmpty()) { @@ -158,12 +163,10 @@ public class LivingEntity extends Entity { public void setHand(GeyserItemStack stack) { this.equipment.put(EquipmentSlot.MAIN_HAND, stack); - this.hand = ItemTranslator.translateToBedrock(session, stack); } public void setOffhand(GeyserItemStack stack) { this.equipment.put(EquipmentSlot.OFF_HAND, stack); - this.offhand = ItemTranslator.translateToBedrock(session, stack); } protected void updateSaddled(boolean saddled) { @@ -178,13 +181,9 @@ public class LivingEntity extends Entity { } public void switchHands() { - GeyserItemStack javaOffhand = this.equipment.get(EquipmentSlot.OFF_HAND); + GeyserItemStack offhand = this.equipment.get(EquipmentSlot.OFF_HAND); this.equipment.put(EquipmentSlot.OFF_HAND, this.equipment.get(EquipmentSlot.MAIN_HAND)); - this.equipment.put(EquipmentSlot.MAIN_HAND, javaOffhand); - - ItemData bedrockOffhand = this.offhand; - this.offhand = this.hand; - this.hand = bedrockOffhand; + this.equipment.put(EquipmentSlot.MAIN_HAND, offhand); } @Override @@ -279,11 +278,10 @@ public class LivingEntity extends Entity { } protected boolean hasShield(boolean offhand) { - ItemMapping shieldMapping = session.getItemMappings().getStoredItems().shield(); if (offhand) { - return this.offhand.getDefinition().equals(shieldMapping.getBedrockDefinition()); + return getOffHandItem().is(Items.SHIELD); } else { - return hand.getDefinition().equals(shieldMapping.getBedrockDefinition()); + return getMainHandItem().is(Items.SHIELD); } } @@ -342,7 +340,7 @@ public class LivingEntity extends Entity { @Override public InteractionResult interact(Hand hand) { GeyserItemStack itemStack = session.getPlayerInventory().getItemInHand(hand); - if (itemStack.asItem() == Items.NAME_TAG) { + if (itemStack.is(Items.NAME_TAG)) { InteractionResult result = checkInteractWithNameTag(itemStack); if (result.consumesAction()) { return result; @@ -394,39 +392,38 @@ public class LivingEntity extends Entity { return InteractionResult.PASS; } - public void updateArmor(GeyserSession session) { + public void updateArmor() { if (!valid) return; - ItemData helmet = this.helmet; - ItemData chestplate = this.chestplate; + GeyserItemStack helmet = getItemInSlot(EquipmentSlot.HELMET); + GeyserItemStack chestplate = getItemInSlot(EquipmentSlot.CHESTPLATE); // If an entity has a banner on them, it will be in the helmet slot in Java but the chestplate spot in Bedrock // But don't overwrite the chestplate if it isn't empty - ItemMapping banner = session.getItemMappings().getStoredItems().banner(); - if (ItemData.AIR.equals(chestplate) && helmet.getDefinition().equals(banner.getBedrockDefinition())) { - chestplate = this.helmet; - helmet = ItemData.AIR; - } else if (chestplate.getDefinition().equals(banner.getBedrockDefinition())) { + if (chestplate.isEmpty() && helmet.is(session, ItemTag.BANNERS)) { + chestplate = helmet; + helmet = GeyserItemStack.EMPTY; + } else if (chestplate.is(session, ItemTag.BANNERS)) { // Prevent chestplate banners from showing erroneously - chestplate = ItemData.AIR; + chestplate = GeyserItemStack.EMPTY; } MobArmorEquipmentPacket armorEquipmentPacket = new MobArmorEquipmentPacket(); armorEquipmentPacket.setRuntimeEntityId(geyserId); - armorEquipmentPacket.setHelmet(helmet); - armorEquipmentPacket.setChestplate(chestplate); - armorEquipmentPacket.setLeggings(leggings); - armorEquipmentPacket.setBoots(boots); - armorEquipmentPacket.setBody(body); + armorEquipmentPacket.setHelmet(ItemTranslator.translateToBedrock(session, helmet)); + armorEquipmentPacket.setChestplate(ItemTranslator.translateToBedrock(session, chestplate)); + armorEquipmentPacket.setLeggings(ItemTranslator.translateToBedrock(session, getItemInSlot(EquipmentSlot.LEGGINGS))); + armorEquipmentPacket.setBoots(ItemTranslator.translateToBedrock(session, getItemInSlot(EquipmentSlot.BOOTS))); + armorEquipmentPacket.setBody(ItemTranslator.translateToBedrock(session, getItemInSlot(EquipmentSlot.BODY))); session.sendUpstreamPacket(armorEquipmentPacket); } - public void updateMainHand(GeyserSession session) { + public void updateMainHand() { if (!valid) return; MobEquipmentPacket handPacket = new MobEquipmentPacket(); handPacket.setRuntimeEntityId(geyserId); - handPacket.setItem(hand); + handPacket.setItem(ItemTranslator.translateToBedrock(session, getMainHandItem())); handPacket.setHotbarSlot(-1); handPacket.setInventorySlot(0); handPacket.setContainerId(ContainerId.INVENTORY); @@ -434,12 +431,12 @@ public class LivingEntity extends Entity { session.sendUpstreamPacket(handPacket); } - public void updateOffHand(GeyserSession session) { + public void updateOffHand() { if (!valid) return; MobEquipmentPacket offHandPacket = new MobEquipmentPacket(); offHandPacket.setRuntimeEntityId(geyserId); - offHandPacket.setItem(offhand); + offHandPacket.setItem(ItemTranslator.translateToBedrock(session, getOffHandItem())); offHandPacket.setHotbarSlot(-1); offHandPacket.setInventorySlot(0); offHandPacket.setContainerId(ContainerId.OFFHAND); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEggEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEggEntity.java index 3167ed305..a32762abe 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEggEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEggEntity.java @@ -28,9 +28,7 @@ package org.geysermc.geyser.entity.type; import lombok.Getter; import net.kyori.adventure.key.Key; import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.geysermc.geyser.entity.EntityDefinition; -import org.geysermc.geyser.entity.properties.VanillaEntityProperties; import org.geysermc.geyser.entity.type.living.animal.farm.TemperatureVariantAnimal; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; @@ -41,7 +39,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetad import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; -import java.util.Locale; import java.util.UUID; @Getter @@ -54,31 +51,25 @@ public class ThrowableEggEntity extends ThrowableItemEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - @Override - public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) { - propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, "temperate"); - propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); - } - @Override public void setItem(EntityMetadata entityMetadata) { GeyserItemStack stack = GeyserItemStack.from(entityMetadata.getValue()); - propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, getVariantOrFallback(session, stack)); + TemperatureVariantAnimal.TEMPERATE_VARIANT_PROPERTY.apply(propertyManager, getVariantOrFallback(session, stack)); updateBedrockEntityProperties(); this.itemStack = stack; } - private static String getVariantOrFallback(GeyserSession session, GeyserItemStack stack) { + private static TemperatureVariantAnimal.BuiltInVariant getVariantOrFallback(GeyserSession session, GeyserItemStack stack) { Holder holder = stack.getComponent(DataComponentTypes.CHICKEN_VARIANT); if (holder != null) { Key chickenVariant = holder.getOrCompute(id -> JavaRegistries.CHICKEN_VARIANT.key(session, id)); for (var variant : TemperatureVariantAnimal.BuiltInVariant.values()) { if (chickenVariant.asMinimalString().equalsIgnoreCase(variant.name())) { - return chickenVariant.asMinimalString().toLowerCase(Locale.ROOT); + return variant; } } } - return TemperatureVariantAnimal.BuiltInVariant.TEMPERATE.toBedrock(); + return TemperatureVariantAnimal.BuiltInVariant.TEMPERATE; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java index 01a42e527..e87e20236 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java @@ -30,8 +30,8 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; -import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; @@ -60,9 +60,9 @@ public class AllayEntity extends MobEntity { if (this.canDuplicate && getFlag(EntityFlag.DANCING) && isDuplicationItem(itemInHand)) { // Maybe better as another tag? return InteractiveTag.GIVE_ITEM_TO_ALLAY; - } else if (!this.hand.isValid() && !itemInHand.isEmpty()) { + } else if (getMainHandItem().isEmpty() && !itemInHand.isEmpty()) { return InteractiveTag.GIVE_ITEM_TO_ALLAY; - } else if (this.hand.isValid() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) { + } else if (!getMainHandItem().isEmpty() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) { // Seems like there isn't a good tag for this yet return InteractiveTag.GIVE_ITEM_TO_ALLAY; } else { @@ -76,10 +76,10 @@ public class AllayEntity extends MobEntity { if (this.canDuplicate && getFlag(EntityFlag.DANCING) && isDuplicationItem(itemInHand)) { //TOCHECK sound return InteractionResult.SUCCESS; - } else if (!this.hand.isValid() && !itemInHand.isEmpty()) { + } else if (getMainHandItem().isEmpty() && !itemInHand.isEmpty()) { //TODO play sound? return InteractionResult.SUCCESS; - } else if (this.hand.isValid() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) { + } else if (!getMainHandItem().isEmpty() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) { //TOCHECK also play sound here? return InteractionResult.SUCCESS; } else { @@ -88,6 +88,6 @@ public class AllayEntity extends MobEntity { } private boolean isDuplicationItem(GeyserItemStack itemStack) { - return itemStack.asItem() == Items.AMETHYST_SHARD; + return itemStack.is(session, ItemTag.DUPLICATES_ALLAYS); } } 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 afbdcca31..956d641bb 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 @@ -32,7 +32,6 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataType; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; -import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.LivingEntity; @@ -42,6 +41,7 @@ import org.geysermc.geyser.scoreboard.Team; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.MathUtils; +import org.geysermc.mcprotocollib.protocol.data.game.entity.EquipmentSlot; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; @@ -257,7 +257,7 @@ public class ArmorStandEntity extends LivingEntity { @Override public InteractionResult interactAt(Hand hand) { - if (!isMarker && session.getPlayerInventory().getItemInHand(hand).asItem() != Items.NAME_TAG) { + if (!isMarker && !session.getPlayerInventory().getItemInHand(hand).is(Items.NAME_TAG)) { // Java Edition returns SUCCESS if in spectator mode, but this is overridden with an earlier check on the client return InteractionResult.CONSUME; } else { @@ -332,8 +332,7 @@ public class ArmorStandEntity extends LivingEntity { return; } boolean isNametagEmpty = nametag.isEmpty(); - if (!isNametagEmpty && (!helmet.equals(ItemData.AIR) || !chestplate.equals(ItemData.AIR) || !leggings.equals(ItemData.AIR) - || !boots.equals(ItemData.AIR) || !hand.equals(ItemData.AIR) || !offhand.equals(ItemData.AIR))) { + if (!isNametagEmpty && hasAnyEquipment()) { // Reset scale of the proper armor stand setScale(getScale()); // Set the proper armor stand to invisible to show armor @@ -396,6 +395,12 @@ public class ArmorStandEntity extends LivingEntity { } } + private boolean hasAnyEquipment() { + return (!getItemInSlot(EquipmentSlot.HELMET).isEmpty() || !getItemInSlot(EquipmentSlot.CHESTPLATE).isEmpty() + || !getItemInSlot(EquipmentSlot.LEGGINGS).isEmpty() || !getItemInSlot(EquipmentSlot.BOOTS).isEmpty() + || !getMainHandItem().isEmpty() || !getOffHandItem().isEmpty()); + } + @Override public float getBoundingBoxWidth() { // For consistency with getBoundingBoxHeight() diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/CopperGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/CopperGolemEntity.java new file mode 100644 index 000000000..946d96169 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/CopperGolemEntity.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.entity.type.living; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.cloudburstmc.math.vector.Vector3f; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.properties.type.BooleanProperty; +import org.geysermc.geyser.entity.properties.type.EnumProperty; +import org.geysermc.geyser.impl.IdentifierImpl; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.util.InteractionResult; +import org.geysermc.geyser.util.InteractiveTag; +import org.geysermc.mcprotocollib.protocol.data.game.entity.EquipmentSlot; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.CopperGolemState; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.WeatheringCopperState; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; + +import java.util.UUID; + +public class CopperGolemEntity extends GolemEntity { + public static final BooleanProperty HAS_FLOWER_PROPERTY = new BooleanProperty( + IdentifierImpl.of("has_flower"), + false + ); + + public static final EnumProperty CHEST_INTERACTION_PROPERTY = new EnumProperty<>( + IdentifierImpl.of("chest_interaction"), + ChestInteractionState.class, + ChestInteractionState.NONE + ); + + public static final EnumProperty OXIDATION_LEVEL_STATE_ENUM_PROPERTY = new EnumProperty<>( + IdentifierImpl.of("oxidation_level"), + OxidationLevelState.class, + OxidationLevelState.UNOXIDIZED + ); + + public enum ChestInteractionState { + NONE, + TAKE, + TAKE_FAIL, + PUT, + PUT_FAIL + } + + public enum OxidationLevelState { + UNOXIDIZED, + EXPOSED, + WEATHERED, + OXIDIZED + } + + public CopperGolemEntity(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 @NonNull InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { + if (itemInHand.isEmpty() && !getMainHandItem().isEmpty()) { + return InteractiveTag.DROP_ITEM; + } else if (itemInHand.is(Items.SHEARS) && canBeSheared()) { + return InteractiveTag.SHEAR; + } else if (itemInHand.is(Items.HONEYCOMB)) { + return InteractiveTag.WAX_ON; + } else if (itemInHand.is(session, ItemTag.AXES)) { + // There is no way of knowing if the copper golem is waxed or not, + // so just always send a scrape tag :( + return InteractiveTag.SCRAPE; + } + + return super.testMobInteraction(hand, itemInHand); + } + + @Override + protected @NonNull InteractionResult mobInteract(@NonNull Hand usedHand, @NonNull GeyserItemStack itemInHand) { + if ((itemInHand.isEmpty() && !getMainHandItem().isEmpty()) || (itemInHand.is(Items.SHEARS) && canBeSheared())) { + return InteractionResult.SUCCESS; + } + + return InteractionResult.PASS; + } + + private boolean canBeSheared() { + return isAlive() && getItemInSlot(EquipmentSlot.HELMET).is(session, ItemTag.SHEARABLE_FROM_COPPER_GOLEM); + } + + @Override + public void setSaddle(GeyserItemStack stack) { + super.setSaddle(stack); + + // Equipment on Java, entity property on bedrock + HAS_FLOWER_PROPERTY.apply(propertyManager, stack.is(Items.POPPY)); + updateBedrockEntityProperties(); + } + + public void setWeatheringState(EntityMetadata> metadata) { + WeatheringCopperState state = metadata.getValue(); + OXIDATION_LEVEL_STATE_ENUM_PROPERTY.apply(propertyManager, switch (state) { + case UNAFFECTED -> OxidationLevelState.UNOXIDIZED; + case EXPOSED -> OxidationLevelState.EXPOSED; + case WEATHERED -> OxidationLevelState.WEATHERED; + case OXIDIZED -> OxidationLevelState.OXIDIZED; + }); + updateBedrockEntityProperties(); + } + + public void setGolemState(EntityMetadata> metadata) { + CopperGolemState state = metadata.getValue(); + CHEST_INTERACTION_PROPERTY.apply(propertyManager, switch (state) { + case IDLE -> ChestInteractionState.NONE; + case GETTING_ITEM -> ChestInteractionState.TAKE; + case GETTING_NO_ITEM -> ChestInteractionState.TAKE_FAIL; + case DROPPING_ITEM -> ChestInteractionState.PUT; + case DROPPING_NO_ITEM -> ChestInteractionState.PUT_FAIL; + }); + updateBedrockEntityProperties(); + } +} 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 8c404be97..cb300a7c9 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 @@ -50,7 +50,7 @@ public class DolphinEntity extends AgeableWaterEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (!itemInHand.isEmpty() && session.getTagCache().is(ItemTag.FISHES, itemInHand)) { + if (!itemInHand.isEmpty() && itemInHand.is(session, ItemTag.FISHES)) { return InteractiveTag.FEED; } return super.testMobInteraction(hand, itemInHand); @@ -59,7 +59,7 @@ public class DolphinEntity extends AgeableWaterEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (!itemInHand.isEmpty() && session.getTagCache().is(ItemTag.FISHES, itemInHand)) { + if (!itemInHand.isEmpty() && itemInHand.is(session, ItemTag.FISHES)) { // Feed return InteractionResult.SUCCESS; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java index 58a349cc9..8cbed6373 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 @@ -54,7 +54,7 @@ public class IronGolemEntity extends GolemEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.IRON_INGOT) { + if (itemInHand.is(Items.IRON_INGOT)) { if (health < maxHealth) { // Healing the iron golem return InteractionResult.SUCCESS; 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 558bffd99..d6c00f694 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 @@ -85,7 +85,7 @@ public class MobEntity extends LivingEntity implements Leashable { return InteractiveTag.REMOVE_LEASH; } else { GeyserItemStack itemStack = session.getPlayerInventory().getItemInHand(hand); - if (itemStack.asItem() == Items.NAME_TAG) { + if (itemStack.is(Items.NAME_TAG)) { InteractionResult result = checkInteractWithNameTag(itemStack); if (result.consumesAction()) { return InteractiveTag.NAME; @@ -120,8 +120,10 @@ public class MobEntity extends LivingEntity implements Leashable { } for (EquipmentSlot slot : EquipmentSlot.values()) { - GeyserItemStack equipped = equipment.get(slot); - if (equipped == null || equipped.isEmpty()) continue; + GeyserItemStack equipped = getItemInSlot(slot); + if (equipped.isEmpty()) { + continue; + } Equippable equippable = equipped.getComponent(DataComponentTypes.EQUIPPABLE); if (equippable != null && equippable.canBeSheared()) { @@ -135,7 +137,7 @@ public class MobEntity extends LivingEntity implements Leashable { } private InteractionResult checkPriorityInteractions(GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.NAME_TAG) { + if (itemInHand.is(Items.NAME_TAG)) { InteractionResult result = checkInteractWithNameTag(itemInHand); if (result.consumesAction()) { return result; 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 50aa7b90e..f766cd402 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 @@ -54,7 +54,7 @@ public class SnowGolemEntity extends GolemEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (Items.SHEARS == itemInHand.asItem() && isAlive() && !getFlag(EntityFlag.SHEARED)) { + if (itemInHand.is(Items.SHEARS) && isAlive() && !getFlag(EntityFlag.SHEARED)) { // Shearing the snow golem return InteractiveTag.SHEAR; } @@ -64,7 +64,7 @@ public class SnowGolemEntity extends GolemEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (Items.SHEARS == itemInHand.asItem() && isAlive() && !getFlag(EntityFlag.SHEARED)) { + if (itemInHand.is(Items.SHEARS) && isAlive() && !getFlag(EntityFlag.SHEARED)) { // Shearing the snow golem return InteractionResult.SUCCESS; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java index 68cf763c3..42ef51f67 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java @@ -62,6 +62,6 @@ public class TadpoleEntity extends AbstractFishEntity { } private boolean isFood(GeyserItemStack itemStack) { - return session.getTagCache().is(ItemTag.FROG_FOOD, itemStack); + return itemStack.is(session, ItemTag.FROG_FOOD); } } 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 57cbdc783..d0c097ec8 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 @@ -53,7 +53,7 @@ public abstract class AnimalEntity extends AgeableEntity { if (tag == null) { return false; } - return session.getTagCache().is(tag, itemStack); + return itemStack.is(session, tag); } /** diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ArmadilloEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ArmadilloEntity.java index 2b443f5e4..0ebd92021 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ArmadilloEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ArmadilloEntity.java @@ -28,6 +28,8 @@ package org.geysermc.geyser.entity.type.living.animal; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.properties.type.EnumProperty; +import org.geysermc.geyser.impl.IdentifierImpl; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; @@ -39,6 +41,13 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; public class ArmadilloEntity extends AnimalEntity { + + public static final EnumProperty STATE_PROPERTY = new EnumProperty<>( + IdentifierImpl.of("armadillo_state"), + State.class, + State.UNROLLED + ); + private ArmadilloState armadilloState = ArmadilloState.IDLE; public ArmadilloEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, @@ -50,10 +59,10 @@ public class ArmadilloEntity extends AnimalEntity { armadilloState = entityMetadata.getValue(); switch (armadilloState) { - case IDLE -> propertyManager.add("minecraft:armadillo_state", "unrolled"); - case ROLLING -> propertyManager.add("minecraft:armadillo_state", "rolled_up"); - case SCARED -> propertyManager.add("minecraft:armadillo_state", "rolled_up_relaxing"); - case UNROLLING -> propertyManager.add("minecraft:armadillo_state", "rolled_up_unrolling"); + case IDLE -> STATE_PROPERTY.apply(propertyManager, State.UNROLLED); + case ROLLING -> STATE_PROPERTY.apply(propertyManager, State.ROLLED_UP); + case SCARED -> STATE_PROPERTY.apply(propertyManager, State.ROLLED_UP_RELAXING); + case UNROLLING -> STATE_PROPERTY.apply(propertyManager, State.ROLLED_UP_UNROLLING); } updateBedrockEntityProperties(); @@ -62,13 +71,13 @@ public class ArmadilloEntity extends AnimalEntity { public void onPeeking() { // Technically we should wait if not currently scared if (armadilloState == ArmadilloState.SCARED) { - propertyManager.add("minecraft:armadillo_state", "rolled_up_peeking"); + STATE_PROPERTY.apply(propertyManager, State.ROLLED_UP_PEEKING); updateBedrockEntityProperties(); // Needed for consecutive peeks session.scheduleInEventLoop(() -> { if (armadilloState == ArmadilloState.SCARED) { - propertyManager.add("minecraft:armadillo_state", "rolled_up_relaxing"); + STATE_PROPERTY.apply(propertyManager, State.ROLLED_UP_RELAXING); updateBedrockEntityProperties(); } }, 250, TimeUnit.MILLISECONDS); @@ -80,4 +89,12 @@ public class ArmadilloEntity extends AnimalEntity { protected Tag getFoodTag() { return ItemTag.ARMADILLO_FOOD; } + + public enum State { + UNROLLED, + ROLLED_UP, + ROLLED_UP_PEEKING, + ROLLED_UP_RELAXING, + ROLLED_UP_UNROLLING + } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java index 5f8956b6a..919af7c22 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java @@ -32,6 +32,8 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.properties.type.BooleanProperty; +import org.geysermc.geyser.impl.IdentifierImpl; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; @@ -43,6 +45,11 @@ import java.util.UUID; public class BeeEntity extends AnimalEntity { + public static final BooleanProperty NECTAR_PROPERTY = new BooleanProperty( + IdentifierImpl.of("has_nectar"), + false + ); + public BeeEntity(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); } @@ -60,7 +67,7 @@ public class BeeEntity extends AnimalEntity { // If the bee has stung dirtyMetadata.put(EntityDataTypes.MARK_VARIANT, (xd & 0x04) == 0x04 ? 1 : 0); // If the bee has nectar or not - propertyManager.add("minecraft:has_nectar", (xd & 0x08) == 0x08); + NECTAR_PROPERTY.apply(propertyManager, (xd & 0x08) == 0x08); updateBedrockEntityProperties(); } 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 b954bb7a5..02d7c62de 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 @@ -77,7 +77,7 @@ public class GoatEntity extends AnimalEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (!getFlag(EntityFlag.BABY) && itemInHand.asItem() == Items.BUCKET) { + if (!getFlag(EntityFlag.BABY) && itemInHand.is(Items.BUCKET)) { session.playSoundEvent(isScreamer ? SoundEvent.MILK_SCREAMER : SoundEvent.MILK, position); return InteractionResult.SUCCESS; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java index 15bcd09fa..51f61c6bf 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java @@ -33,11 +33,13 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.AttributeData; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.properties.type.BooleanProperty; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.entity.vehicle.HappyGhastVehicleComponent; import org.geysermc.geyser.entity.vehicle.VehicleComponent; +import org.geysermc.geyser.impl.IdentifierImpl; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; @@ -61,6 +63,11 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { public static final float[] X_OFFSETS = {0.0F, -1.7F, 0.0F, 1.7F}; public static final float[] Z_OFFSETS = {1.7F, 0.0F, -1.7F, 0.0F}; + public static final BooleanProperty CAN_MOVE_PROPERTY = new BooleanProperty( + IdentifierImpl.of("can_move"), + true + ); + private final HappyGhastVehicleComponent vehicleComponent = new HappyGhastVehicleComponent(this, 0.0f); private boolean staysStill; @@ -80,8 +87,6 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { setFlag(EntityFlag.WASD_AIR_CONTROLLED, true); setFlag(EntityFlag.DOES_SERVER_AUTH_ONLY_DISMOUNT, true); - - propertyManager.add("minecraft:can_move", true); } @Override @@ -111,7 +116,7 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { public void setStaysStill(BooleanEntityMetadata entityMetadata) { staysStill = entityMetadata.getPrimitiveValue(); - propertyManager.add("minecraft:can_move", !entityMetadata.getPrimitiveValue()); + CAN_MOVE_PROPERTY.apply(propertyManager, !entityMetadata.getPrimitiveValue()); updateBedrockEntityProperties(); } @@ -122,12 +127,12 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { return super.testMobInteraction(hand, itemInHand); } else { if (!itemInHand.isEmpty()) { - if (session.getTagCache().is(ItemTag.HARNESSES, itemInHand)) { - if (this.equipment.get(EquipmentSlot.BODY) == null) { + if (itemInHand.is(session, ItemTag.HARNESSES)) { + if (getItemInSlot(EquipmentSlot.BODY).isEmpty()) { // Harnesses the ghast return InteractiveTag.EQUIP_HARNESS; } - } else if (itemInHand.asItem() == Items.SHEARS) { + } else if (itemInHand.is(Items.SHEARS)) { if (this.canShearEquipment() && !session.isSneaking()) { // Shears the harness off of the ghast return InteractiveTag.REMOVE_HARNESS; @@ -135,7 +140,7 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { } } - if (this.equipment.get(EquipmentSlot.BODY) != null && !session.isSneaking()) { + if (!getItemInSlot(EquipmentSlot.BODY).isEmpty() && !session.isSneaking()) { // Rides happy ghast return InteractiveTag.RIDE_HORSE; } else { @@ -151,12 +156,12 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { return super.mobInteract(hand, itemInHand); } else { if (!itemInHand.isEmpty()) { - if (session.getTagCache().is(ItemTag.HARNESSES, itemInHand)) { - if (this.equipment.get(EquipmentSlot.BODY) == null) { + if (itemInHand.is(session, ItemTag.HARNESSES)) { + if (getItemInSlot(EquipmentSlot.BODY).isEmpty()) { // Harnesses the ghast return InteractionResult.SUCCESS; } - } else if (itemInHand.asItem() == Items.SHEARS) { + } else if (itemInHand.is(Items.SHEARS)) { if (this.canShearEquipment() && !session.isSneaking()) { // Shears the harness off of the ghast return InteractionResult.SUCCESS; @@ -164,7 +169,7 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { } } - if (this.equipment.get(EquipmentSlot.BODY) == null && !session.isSneaking()) { + if (!getItemInSlot(EquipmentSlot.BODY).isEmpty() && !session.isSneaking()) { // Rides happy ghast return InteractionResult.SUCCESS; } else { 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 3314344cb..78f2ea025 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 @@ -63,10 +63,10 @@ public class MooshroomEntity extends CowEntity { @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!isBaby()) { - if (itemInHand.asItem() == Items.BOWL) { + if (itemInHand.is(Items.BOWL)) { // Stew return InteractiveTag.MOOSHROOM_MILK_STEW; - } else if (isAlive() && itemInHand.asItem() == Items.SHEARS) { + } else if (isAlive() && itemInHand.is(Items.SHEARS)) { // Shear items return InteractiveTag.MOOSHROOM_SHEAR; } @@ -78,13 +78,13 @@ public class MooshroomEntity extends CowEntity { @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean isBaby = isBaby(); - if (!isBaby && itemInHand.asItem() == Items.BOWL) { + if (!isBaby && itemInHand.is(Items.BOWL)) { // Stew return InteractionResult.SUCCESS; - } else if (!isBaby && isAlive() && itemInHand.asItem() == Items.SHEARS) { + } else if (!isBaby && isAlive() && itemInHand.is(Items.SHEARS)) { // Shear items return InteractionResult.SUCCESS; - } else if (isBrown && session.getTagCache().is(ItemTag.SMALL_FLOWERS, itemInHand)) { + } else if (isBrown && itemInHand.is(session, ItemTag.SMALL_FLOWERS)) { // ? return InteractionResult.SUCCESS; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java index 022e58bc0..358643b0e 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 @@ -64,7 +64,7 @@ public class PandaEntity extends AnimalEntity { packet.setRuntimeEntityId(geyserId); packet.setType(EntityEventType.EATING_ITEM); // As of 1.20.5 - pandas can eat cake - packet.setData(this.hand.getDefinition().getRuntimeId() << 16); + packet.setData(session.getItemMappings().getMapping(getMainHandItem()).getBedrockDefinition().getRuntimeId() << 16); session.sendUpstreamPacket(packet); } } 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 e26b0be61..35863071c 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 @@ -68,7 +68,7 @@ public class SheepEntity extends AnimalEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SHEARS) { + if (itemInHand.is(Items.SHEARS)) { return InteractiveTag.SHEAR; } else { InteractiveTag tag = super.testMobInteraction(hand, itemInHand); @@ -86,7 +86,7 @@ public class SheepEntity extends AnimalEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SHEARS) { + if (itemInHand.is(Items.SHEARS)) { return InteractionResult.CONSUME; } else { InteractionResult superResult = super.mobInteract(hand, itemInHand); 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 36a126687..186ecd2dd 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 @@ -29,7 +29,6 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.type.Entity; @@ -157,8 +156,7 @@ public class StriderEntity extends AnimalEntity implements Tickable, ClientVehic vehicleComponent.tickBoost(); } } else { // getHand() for session player seems to always return air - ItemDefinition itemDefinition = session.getItemMappings().getStoredItems().warpedFungusOnAStick().getBedrockDefinition(); - if (player.getHand().getDefinition() == itemDefinition || player.getOffhand().getDefinition() == itemDefinition) { + if (player.isHolding(Items.WARPED_FUNGUS_ON_A_STICK)) { vehicleComponent.tickBoost(); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java index de79e9a52..8c1a27b95 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java @@ -54,7 +54,7 @@ public class CowEntity extends TemperatureVariantAnimal { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (getFlag(EntityFlag.BABY) || itemInHand.asItem() != Items.BUCKET) { + if (getFlag(EntityFlag.BABY) || !itemInHand.is(Items.BUCKET)) { return super.testMobInteraction(hand, itemInHand); } @@ -64,7 +64,7 @@ public class CowEntity extends TemperatureVariantAnimal { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (getFlag(EntityFlag.BABY) || itemInHand.asItem() != Items.BUCKET) { + if (getFlag(EntityFlag.BABY) || !itemInHand.is(Items.BUCKET)) { return super.mobInteract(hand, itemInHand); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/PigEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/PigEntity.java index 7ae672bcc..bb629c3d7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/PigEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/PigEntity.java @@ -29,7 +29,6 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.type.Tickable; @@ -116,8 +115,7 @@ public class PigEntity extends TemperatureVariantAnimal implements Tickable, Cli vehicleComponent.tickBoost(); } } else { // getHand() for session player seems to always return air - ItemDefinition itemDefinition = session.getItemMappings().getStoredItems().carrotOnAStick().getBedrockDefinition(); - if (player.getHand().getDefinition() == itemDefinition || player.getOffhand().getDefinition() == itemDefinition) { + if (player.isHolding(Items.CARROT_ON_A_STICK)) { vehicleComponent.tickBoost(); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/TemperatureVariantAnimal.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/TemperatureVariantAnimal.java index b61a3a80d..9d772c8a2 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/TemperatureVariantAnimal.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/TemperatureVariantAnimal.java @@ -26,19 +26,24 @@ package org.geysermc.geyser.entity.type.living.animal.farm; import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.geysermc.geyser.entity.EntityDefinition; -import org.geysermc.geyser.entity.properties.VanillaEntityProperties; +import org.geysermc.geyser.entity.properties.type.EnumProperty; import org.geysermc.geyser.entity.type.living.animal.AnimalEntity; import org.geysermc.geyser.entity.type.living.animal.VariantHolder; +import org.geysermc.geyser.impl.IdentifierImpl; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.RegistryCache; -import java.util.Locale; import java.util.UUID; public abstract class TemperatureVariantAnimal extends AnimalEntity implements VariantHolder { + public static final EnumProperty TEMPERATE_VARIANT_PROPERTY = new EnumProperty<>( + IdentifierImpl.of("climate_variant"), + BuiltInVariant.class, + BuiltInVariant.TEMPERATE + ); + public static final RegistryCache.RegistryReader VARIANT_READER = VariantHolder.reader(BuiltInVariant.class, BuiltInVariant.TEMPERATE); public TemperatureVariantAnimal(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, @@ -46,25 +51,15 @@ public abstract class TemperatureVariantAnimal extends AnimalEntity implements V super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - @Override - public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) { - propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, "temperate"); - propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); - } - @Override public void setBedrockVariant(BuiltInVariant variant) { - propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, variant.toBedrock()); + TEMPERATE_VARIANT_PROPERTY.apply(propertyManager, variant); updateBedrockEntityProperties(); } public enum BuiltInVariant implements VariantHolder.BuiltIn { - COLD, TEMPERATE, - WARM; - - public String toBedrock() { - return name().toLowerCase(Locale.ROOT); - } + WARM, + COLD; } } 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 8b0e77c73..65e2ed051 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 @@ -165,7 +165,7 @@ public class AbstractHorseEntity extends AnimalEntity { return InteractiveTag.ATTACH_CHEST; } - if (additionalTestForInventoryOpen(itemInHand) || !isBaby && !getFlag(EntityFlag.SADDLED) && itemInHand.asItem() == Items.SADDLE) { + if (additionalTestForInventoryOpen(itemInHand) || !isBaby && !getFlag(EntityFlag.SADDLED) && itemInHand.is(Items.SADDLE)) { // Will open the inventory to be saddled return InteractiveTag.OPEN_CONTAINER; } @@ -221,7 +221,7 @@ public class AbstractHorseEntity extends AnimalEntity { } // Note: yes, this code triggers for llamas too. lol (as of Java Edition 1.18.1) - if (additionalTestForInventoryOpen(itemInHand) || (!isBaby && !getFlag(EntityFlag.SADDLED) && itemInHand.asItem() == Items.SADDLE)) { + if (additionalTestForInventoryOpen(itemInHand) || (!isBaby && !getFlag(EntityFlag.SADDLED) && itemInHand.is(Items.SADDLE))) { // Will open the inventory to be saddled return InteractionResult.SUCCESS; } @@ -245,6 +245,7 @@ public class AbstractHorseEntity extends AnimalEntity { } protected boolean additionalTestForInventoryOpen(@NonNull GeyserItemStack itemInHand) { + // TODO this doesn't seem right anymore... (as of Java 1.21.9) return itemInHand.asItem().javaIdentifier().endsWith("_horse_armor"); } @@ -260,7 +261,7 @@ public class AbstractHorseEntity extends AnimalEntity { } else if (!passengers.isEmpty()) { return testHorseInteraction(hand, itemInHand); } else { - if (Items.SADDLE == itemInHand.asItem()) { + if (itemInHand.is(Items.SADDLE)) { return InteractiveTag.OPEN_CONTAINER; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java index fc8584de3..491ca02df 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java @@ -54,7 +54,7 @@ public class ChestedHorseEntity extends AbstractHorseEntity { @Override protected boolean testForChest(@NonNull GeyserItemStack itemInHand) { - return itemInHand.asItem() == Items.CHEST && !getFlag(EntityFlag.CHESTED); + return itemInHand.is(Items.CHEST) && !getFlag(EntityFlag.CHESTED); } @Override 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 95e9c901b..ef6121456 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 @@ -52,21 +52,21 @@ public class ParrotEntity extends TameableEntity { return null; } - private boolean isTameFood(Item item) { - return session.getTagCache().is(ItemTag.PARROT_FOOD, item); + private boolean isTameFood(GeyserItemStack item) { + return item.is(session, ItemTag.PARROT_FOOD); } - private boolean isPoisonousFood(Item item) { - return session.getTagCache().is(ItemTag.PARROT_POISONOUS_FOOD, item); + private boolean isPoisonousFood(GeyserItemStack item) { + return item.is(session, ItemTag.PARROT_POISONOUS_FOOD); } @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean tame = getFlag(EntityFlag.TAMED); - if (!tame && isTameFood(itemInHand.asItem())) { + if (!tame && isTameFood(itemInHand)) { return InteractiveTag.FEED; - } else if (isPoisonousFood(itemInHand.asItem())) { + } else if (isPoisonousFood(itemInHand)) { return InteractiveTag.FEED; } else if (onGround && tame && ownerBedrockId == session.getPlayerEntity().getGeyserId()) { // Sitting/standing @@ -79,9 +79,9 @@ public class ParrotEntity extends TameableEntity { @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean tame = getFlag(EntityFlag.TAMED); - if (!tame && isTameFood(itemInHand.asItem())) { + if (!tame && isTameFood(itemInHand)) { return InteractionResult.SUCCESS; - } else if (isPoisonousFood(itemInHand.asItem())) { + } else if (isPoisonousFood(itemInHand)) { return InteractionResult.SUCCESS; } else if (onGround && tame && ownerBedrockId == session.getPlayerEntity().getGeyserId()) { // Sitting/standing 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 46911480e..eee7a0052 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 @@ -30,10 +30,11 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; -import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.properties.type.StringEnumProperty; import org.geysermc.geyser.entity.type.living.animal.VariantIntHolder; +import org.geysermc.geyser.impl.IdentifierImpl; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.enchantment.EnchantmentComponent; @@ -47,6 +48,7 @@ import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.geyser.util.ItemUtils; +import org.geysermc.mcprotocollib.protocol.data.game.entity.EquipmentSlot; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; @@ -55,9 +57,25 @@ import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponen import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import java.util.Collections; +import java.util.List; import java.util.UUID; public class WolfEntity extends TameableEntity implements VariantIntHolder { + + public static final StringEnumProperty SOUND_VARIANT = new StringEnumProperty( + IdentifierImpl.of("sound_variant"), + List.of( + "default", + "big", + "cute", + "grumpy", + "mad", + "puglin", + "sad" + ), + null + ); + private byte collarColor = 14; // Red - default private HolderSet repairableItems = null; private boolean isCurseOfBinding = false; @@ -66,12 +84,6 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - @Override - public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) { - propertyManager.add("minecraft:sound_variant", "default"); - propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); - } - @Override public void setTameableFlags(ByteEntityMetadata entityMetadata) { super.setTameableFlags(entityMetadata); @@ -146,7 +158,7 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder { if (getFlag(EntityFlag.ANGRY)) { return InteractiveTag.NONE; } - if (itemInHand.asItem() == Items.BONE && !getFlag(EntityFlag.TAMED)) { + if (itemInHand.is(Items.BONE) && !getFlag(EntityFlag.TAMED)) { // Bone and untamed - can tame return InteractiveTag.TAME; } @@ -159,17 +171,15 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder { return super.testMobInteraction(hand, itemInHand); } } - if (itemInHand.asItem() == Items.WOLF_ARMOR && !this.body.isValid() && !getFlag(EntityFlag.BABY)) { + if (itemInHand.is(Items.WOLF_ARMOR) && !getItemInSlot(EquipmentSlot.BODY).isEmpty() && !getFlag(EntityFlag.BABY)) { return InteractiveTag.EQUIP_WOLF_ARMOR; } - if (itemInHand.asItem() == Items.SHEARS && this.body.isValid() + if (itemInHand.is(Items.SHEARS) && !getItemInSlot(EquipmentSlot.BODY).isEmpty() && (!isCurseOfBinding || session.getGameMode().equals(GameMode.CREATIVE))) { return InteractiveTag.REMOVE_WOLF_ARMOR; } - if (getFlag(EntityFlag.SITTING) && - session.getTagCache().isItem(repairableItems, itemInHand.asItem()) && - this.body.isValid() && this.body.getTag() != null && - this.body.getTag().getInt("Damage") > 0) { + if (getFlag(EntityFlag.SITTING) && itemInHand.is(session, repairableItems) && + !getItemInSlot(EquipmentSlot.BODY).isEmpty() && getItemInSlot(EquipmentSlot.BODY).isDamaged()) { return InteractiveTag.REPAIR_WOLF_ARMOR; } // Tamed and owned by player - can sit/stand @@ -182,7 +192,7 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder { @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (ownerBedrockId == session.getPlayerEntity().getGeyserId() || getFlag(EntityFlag.TAMED) - || itemInHand.asItem() == Items.BONE && !getFlag(EntityFlag.ANGRY)) { + || itemInHand.is(Items.BONE) && !getFlag(EntityFlag.ANGRY)) { // Sitting toggle or feeding; not angry return InteractionResult.CONSUME; } else { 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 2492aabd7..ecc517489 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 @@ -54,7 +54,7 @@ public class AbstractMerchantEntity extends AgeableEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() != Items.VILLAGER_SPAWN_EGG + if (!itemInHand.is(Items.VILLAGER_SPAWN_EGG) && (definition != EntityDefinitions.VILLAGER || !getFlag(EntityFlag.SLEEPING) && ((VillagerEntity) this).isCanTradeWith())) { // An additional check we know cannot work if (!isBaby()) { @@ -67,7 +67,7 @@ public class AbstractMerchantEntity extends AgeableEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() != Items.VILLAGER_SPAWN_EGG + if (!itemInHand.is(Items.VILLAGER_SPAWN_EGG) && (definition != EntityDefinitions.VILLAGER || !getFlag(EntityFlag.SLEEPING)) && (definition != EntityDefinitions.WANDERING_TRADER || !getFlag(EntityFlag.BABY))) { // Trading time diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java index d08fff06a..16b5cc01c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java @@ -26,10 +26,10 @@ package org.geysermc.geyser.entity.type.living.monster; import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; @@ -49,8 +49,7 @@ public class AbstractSkeletonEntity extends MonsterEntity { dirtyMetadata.put(EntityDataTypes.TARGET_EID, ((xd & 4) == 4) ? geyserId : 0); if ((xd & 4) == 4) { - ItemDefinition bow = session.getItemMappings().getStoredItems().bow().getBedrockDefinition(); - setFlag(EntityFlag.FACING_TARGET_TO_RANGE_ATTACK, this.hand.getDefinition() == bow || this.offhand.getDefinition() == bow); + setFlag(EntityFlag.FACING_TARGET_TO_RANGE_ATTACK, isHolding(Items.BOW)); } else { setFlag(EntityFlag.FACING_TARGET_TO_RANGE_ATTACK, false); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BoggedEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BoggedEntity.java index 806d58ed1..c4d8eeff3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BoggedEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BoggedEntity.java @@ -53,7 +53,7 @@ public class BoggedEntity extends AbstractSkeletonEntity { @Override protected @NonNull InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SHEARS && readyForShearing()) { + if (itemInHand.is(Items.SHEARS) && readyForShearing()) { return InteractiveTag.SHEAR; } return super.testMobInteraction(hand, itemInHand); @@ -61,7 +61,7 @@ public class BoggedEntity extends AbstractSkeletonEntity { @Override protected @NonNull InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SHEARS && readyForShearing()) { + if (itemInHand.is(Items.SHEARS) && readyForShearing()) { return InteractionResult.SUCCESS; } return super.mobInteract(hand, itemInHand); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java index 166cdc053..dc9755a2b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java @@ -30,9 +30,11 @@ import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; -import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelEventGenericPacket; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.properties.type.EnumProperty; +import org.geysermc.geyser.entity.properties.type.IntProperty; +import org.geysermc.geyser.impl.IdentifierImpl; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; @@ -41,8 +43,23 @@ import java.util.Optional; import java.util.UUID; public class CreakingEntity extends MonsterEntity { - public static final String CREAKING_STATE = "minecraft:creaking_state"; - public static final String CREAKING_SWAYING_TICKS = "minecraft:creaking_swaying_ticks"; + + public static final EnumProperty STATE_PROPERTY = new EnumProperty<>( + IdentifierImpl.of("creaking_state"), + CreakingState.class, + CreakingState.NEUTRAL + ); + + // also, the creaking seems to have this minecraft:creaking_swaying_ticks thingy + // which i guess is responsible for some animation? + // it's sent over the network, all 6 "stages" 50ms in between of each other. + // no clue what it's used for tbh, so i'm not gonna bother implementing it + // - chris + // update: this still holds true, even a refactor later :( + public static final IntProperty SWAYING_TICKS_PROPERTY = new IntProperty( + IdentifierImpl.of("creaking_swaying_ticks"), + 6, 0, 0 + ); private Vector3i homePosition; @@ -56,33 +73,21 @@ public class CreakingEntity extends MonsterEntity { setFlag(EntityFlag.FIRE_IMMUNE, true); } - @Override - public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) { - propertyManager.add(CREAKING_STATE, "neutral"); - // also, the creaking seems to have this minecraft:creaking_swaying_ticks thingy - // which i guess is responsible for some animation? - // it's sent over the network, all 6 "stages" 50ms in between of each other. - // no clue what it's used for tbh, so i'm not gonna bother implementing it - // - chris - propertyManager.add(CREAKING_SWAYING_TICKS, 0); - propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); - } - public void setCanMove(EntityMetadata> booleanEntityMetadata) { setFlag(EntityFlag.BODY_ROTATION_BLOCKED, !booleanEntityMetadata.getValue()); - propertyManager.add(CREAKING_STATE, booleanEntityMetadata.getValue() ? "hostile_unobserved" : "hostile_observed"); + STATE_PROPERTY.apply(propertyManager, booleanEntityMetadata.getValue() ? CreakingState.HOSTILE_UNOBSERVED : CreakingState.HOSTILE_OBSERVED); updateBedrockEntityProperties(); } public void setActive(EntityMetadata> booleanEntityMetadata) { if (!booleanEntityMetadata.getValue()) { - propertyManager.add(CREAKING_STATE, "neutral"); + STATE_PROPERTY.apply(propertyManager, CreakingState.NEUTRAL); } } public void setIsTearingDown(EntityMetadata> booleanEntityMetadata) { if (booleanEntityMetadata.getValue()) { - propertyManager.add(CREAKING_STATE, "crumbling"); + STATE_PROPERTY.apply(propertyManager, CreakingState.CRUMBLING); updateBedrockEntityProperties(); } } @@ -115,4 +120,12 @@ public class CreakingEntity extends MonsterEntity { session.sendUpstreamPacket(levelEventGenericPacket); } } + + public enum CreakingState { + NEUTRAL, + HOSTILE_OBSERVED, + HOSTILE_UNOBSERVED, + TWITCHING, + CRUMBLING + } } 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 5f54d2942..cc58aa7aa 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 @@ -66,7 +66,7 @@ public class CreeperEntity extends MonsterEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (session.getTagCache().is(ItemTag.CREEPER_IGNITERS, itemInHand)) { + if (itemInHand.is(session, ItemTag.CREEPER_IGNITERS)) { return InteractiveTag.IGNITE_CREEPER; } else { return super.testMobInteraction(hand, itemInHand); @@ -76,7 +76,7 @@ public class CreeperEntity extends MonsterEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (session.getTagCache().is(ItemTag.CREEPER_IGNITERS, itemInHand)) { + if (itemInHand.is(session, ItemTag.CREEPER_IGNITERS)) { // Ignite creeper - as of 1.19.3 session.playSoundEvent(SoundEvent.IGNITE, position); return InteractionResult.SUCCESS; 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 36c412ba7..b35e6a17f 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 @@ -35,13 +35,13 @@ import org.cloudburstmc.protocol.bedrock.packet.MobEquipmentPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import java.util.UUID; @@ -71,17 +71,16 @@ public class PiglinEntity extends BasePiglinEntity { @Override public void setHand(GeyserItemStack stack) { - ItemMapping crossbow = session.getItemMappings().getStoredItems().crossbow(); - boolean toCrossbow = stack != null && stack.asItem() == crossbow.getJavaItem(); + boolean toCrossbow = stack != null && stack.is(Items.CROSSBOW); - if (toCrossbow ^ this.hand.getDefinition() == crossbow.getBedrockDefinition()) { // If switching to/from crossbow + if (toCrossbow ^ getMainHandItem().is(Items.CROSSBOW)) { // If switching to/from crossbow dirtyMetadata.put(EntityDataTypes.BLOCK, session.getBlockMappings().getDefinition(toCrossbow ? 0 : 1)); dirtyMetadata.put(EntityDataTypes.CHARGE_AMOUNT, (byte) 0); setFlag(EntityFlag.CHARGED, false); setFlag(EntityFlag.USING_ITEM, false); updateBedrockMetadata(); - if (this.hand.isValid()) { + if (!getMainHandItem().isEmpty()) { MobEquipmentPacket mobEquipmentPacket = new MobEquipmentPacket(); mobEquipmentPacket.setRuntimeEntityId(geyserId); mobEquipmentPacket.setContainerId(ContainerId.INVENTORY); @@ -96,11 +95,11 @@ public class PiglinEntity extends BasePiglinEntity { } @Override - public void updateMainHand(GeyserSession session) { - super.updateMainHand(session); + public void updateMainHand() { + super.updateMainHand(); - if (this.hand.getDefinition() == session.getItemMappings().getStoredItems().crossbow().getBedrockDefinition()) { - if (this.hand.getTag() != null && this.hand.getTag().containsKey("chargedItem")) { + if (getMainHandItem().is(Items.CROSSBOW)) { + if (getMainHandItem().getComponent(DataComponentTypes.CHARGED_PROJECTILES) != null) { dirtyMetadata.put(EntityDataTypes.CHARGE_AMOUNT, Byte.MAX_VALUE); setFlag(EntityFlag.CHARGING, false); setFlag(EntityFlag.CHARGED, true); @@ -116,12 +115,12 @@ public class PiglinEntity extends BasePiglinEntity { } @Override - public void updateOffHand(GeyserSession session) { + public void updateOffHand() { // Check if the Piglin is holding Gold and set the ADMIRING flag accordingly so its pose updates - setFlag(EntityFlag.ADMIRING, session.getTagCache().is(ItemTag.PIGLIN_LOVED, session.getItemMappings().getMapping(this.offhand).getJavaItem())); + setFlag(EntityFlag.ADMIRING, getOffHandItem().is(session, ItemTag.PIGLIN_LOVED)); super.updateBedrockMetadata(); - super.updateOffHand(session); + super.updateOffHand(); } @NonNull @@ -147,6 +146,6 @@ public class PiglinEntity extends BasePiglinEntity { } private boolean canGiveGoldTo(@NonNull GeyserItemStack itemInHand) { - return !getFlag(EntityFlag.BABY) && itemInHand.asItem() == Items.GOLD_INGOT && !getFlag(EntityFlag.ADMIRING); + return !getFlag(EntityFlag.BABY) && itemInHand.is(Items.GOLD_INGOT) && !getFlag(EntityFlag.ADMIRING); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java index 6e03e4f98..e09568102 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 @@ -70,7 +70,7 @@ public class ZombieVillagerEntity extends ZombieEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.GOLDEN_APPLE) { + if (itemInHand.is(Items.GOLDEN_APPLE)) { return InteractiveTag.CURE; } else { return super.testMobInteraction(hand, itemInHand); @@ -80,7 +80,7 @@ public class ZombieVillagerEntity extends ZombieEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.GOLDEN_APPLE) { + if (itemInHand.is(Items.GOLDEN_APPLE)) { // The client doesn't know if the entity has weakness as that's not usually sent over the network return InteractionResult.CONSUME; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java index fd7448e29..e73052286 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java @@ -28,11 +28,12 @@ package org.geysermc.geyser.entity.type.living.monster.raid; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; -import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.entity.EntityDefinition; -import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import java.util.UUID; @@ -49,33 +50,32 @@ public class PillagerEntity extends AbstractIllagerEntity { } @Override - public void updateMainHand(GeyserSession session) { + public void updateMainHand() { updateCrossbow(); - super.updateMainHand(session); + super.updateMainHand(); } @Override - public void updateOffHand(GeyserSession session) { + public void updateOffHand() { updateCrossbow(); - super.updateOffHand(session); + super.updateOffHand(); } /** * Check for a crossbow in either the mainhand or offhand. If one exists, indicate that the pillager should be posing */ protected void updateCrossbow() { - ItemMapping crossbow = session.getItemMappings().getStoredItems().crossbow(); - ItemData activeCrossbow = null; - if (this.hand.getDefinition() == crossbow.getBedrockDefinition()) { - activeCrossbow = this.hand; - } else if (this.offhand.getDefinition() == crossbow.getBedrockDefinition()) { - activeCrossbow = this.offhand; + GeyserItemStack activeCrossbow = null; + if (getMainHandItem().is(Items.CROSSBOW)) { + activeCrossbow = getMainHandItem(); + } else if (getOffHandItem().is(Items.CROSSBOW)) { + activeCrossbow = getOffHandItem(); } if (activeCrossbow != null) { - if (activeCrossbow.getTag() != null && activeCrossbow.getTag().containsKey("chargedItem")) { + if (activeCrossbow.getComponent(DataComponentTypes.CHARGED_PROJECTILES) != null) { dirtyMetadata.put(EntityDataTypes.CHARGE_AMOUNT, Byte.MAX_VALUE); setFlag(EntityFlag.CHARGING, false); setFlag(EntityFlag.CHARGED, true); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/AvatarEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/AvatarEntity.java new file mode 100644 index 000000000..f8bb7f658 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/AvatarEntity.java @@ -0,0 +1,361 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.entity.type.player; + +import lombok.Getter; +import lombok.Setter; +import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.protocol.bedrock.data.Ability; +import org.cloudburstmc.protocol.bedrock.data.AbilityLayer; +import org.cloudburstmc.protocol.bedrock.data.GameType; +import org.cloudburstmc.protocol.bedrock.data.PlayerPermission; +import org.cloudburstmc.protocol.bedrock.data.command.CommandPermission; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; +import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; +import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.type.LivingEntity; +import org.geysermc.geyser.level.block.Blocks; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.skin.SkinManager; +import org.geysermc.geyser.skin.SkullSkinManager; +import org.geysermc.geyser.translator.item.ItemTranslator; +import org.geysermc.geyser.util.ChunkUtils; +import org.geysermc.mcprotocollib.auth.GameProfile; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +public class AvatarEntity extends LivingEntity { + public static final float SNEAKING_POSE_HEIGHT = 1.5f; + protected static final List BASE_ABILITY_LAYER; + + @Getter + protected String username; + + /** + * The textures property from the GameProfile. + */ + @Getter + @Setter + @Nullable + protected String texturesProperty; // TODO no direct setter, rather one that updates the skin + + private String cachedScore = ""; + private boolean scoreVisible = true; + + @Getter + @Nullable + private Vector3i bedPosition; + + static { + AbilityLayer abilityLayer = new AbilityLayer(); + abilityLayer.setLayerType(AbilityLayer.Type.BASE); + Ability[] abilities = Ability.values(); + Collections.addAll(abilityLayer.getAbilitiesSet(), abilities); // Apparently all the abilities you're working with + Collections.addAll(abilityLayer.getAbilityValues(), abilities); // Apparently all the abilities the player can work with + BASE_ABILITY_LAYER = Collections.singletonList(abilityLayer); + } + + public AvatarEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, + Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw, String username) { + super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); + this.username = username; + this.nametag = username; + } + + @Override + protected void initializeMetadata() { + super.initializeMetadata(); + // For the OptionalPack, set all bits as invisible by default as this matches Java Edition behavior + dirtyMetadata.put(EntityDataTypes.MARK_VARIANT, 0xff); + } + + @Override + public void spawnEntity() { + AddPlayerPacket addPlayerPacket = new AddPlayerPacket(); + addPlayerPacket.setUuid(uuid); + addPlayerPacket.setUsername(username); + addPlayerPacket.setRuntimeEntityId(geyserId); + addPlayerPacket.setUniqueEntityId(geyserId); + addPlayerPacket.setPosition(position.sub(0, definition.offset(), 0)); + addPlayerPacket.setRotation(getBedrockRotation()); + addPlayerPacket.setMotion(motion); + addPlayerPacket.setHand(ItemTranslator.translateToBedrock(session, getMainHandItem())); + addPlayerPacket.getAdventureSettings().setCommandPermission(CommandPermission.ANY); + addPlayerPacket.getAdventureSettings().setPlayerPermission(PlayerPermission.MEMBER); + addPlayerPacket.setDeviceId(""); + addPlayerPacket.setPlatformChatId(""); + addPlayerPacket.setGameType(GameType.SURVIVAL); //TODO + addPlayerPacket.setAbilityLayers(BASE_ABILITY_LAYER); // Recommended to be added since 1.19.10, but only needed here for permissions viewing + addPlayerPacket.getMetadata().putFlags(flags); + dirtyMetadata.apply(addPlayerPacket.getMetadata()); + + setFlagsDirty(false); + + valid = true; + session.sendUpstreamPacket(addPlayerPacket); + } + + @Override + public void moveAbsolute(Vector3f position, float yaw, float pitch, float headYaw, boolean isOnGround, boolean teleported) { + setPosition(position); + setYaw(yaw); + setPitch(pitch); + setHeadYaw(headYaw); + + setOnGround(isOnGround); + + MovePlayerPacket movePlayerPacket = new MovePlayerPacket(); + movePlayerPacket.setRuntimeEntityId(geyserId); + movePlayerPacket.setPosition(this.position); + movePlayerPacket.setRotation(getBedrockRotation()); + movePlayerPacket.setOnGround(isOnGround); + movePlayerPacket.setMode(this instanceof SessionPlayerEntity || teleported ? MovePlayerPacket.Mode.TELEPORT : MovePlayerPacket.Mode.NORMAL); + if (movePlayerPacket.getMode() == MovePlayerPacket.Mode.TELEPORT) { + movePlayerPacket.setTeleportationCause(MovePlayerPacket.TeleportationCause.BEHAVIOR); + } + + session.sendUpstreamPacket(movePlayerPacket); + + if (teleported && !(this instanceof SessionPlayerEntity)) { + // As of 1.19.0, head yaw seems to be ignored during teleports, also don't do this for session player. + updateHeadLookRotation(headYaw); + } + } + + @Override + public void moveRelative(double relX, double relY, double relZ, float yaw, float pitch, float headYaw, boolean isOnGround) { + setYaw(yaw); + setPitch(pitch); + setHeadYaw(headYaw); + this.position = Vector3f.from(position.getX() + relX, position.getY() + relY, position.getZ() + relZ); + + setOnGround(isOnGround); + + MovePlayerPacket movePlayerPacket = new MovePlayerPacket(); + movePlayerPacket.setRuntimeEntityId(geyserId); + movePlayerPacket.setPosition(position); + movePlayerPacket.setRotation(getBedrockRotation()); + movePlayerPacket.setOnGround(isOnGround); + movePlayerPacket.setMode(this instanceof SessionPlayerEntity ? MovePlayerPacket.Mode.TELEPORT : MovePlayerPacket.Mode.NORMAL); + // If the player is moved while sleeping, we have to adjust their y, so it appears + // correctly on Bedrock. This fixes GSit's lay. + if (getFlag(EntityFlag.SLEEPING)) { + if (bedPosition != null && (bedPosition.getY() == 0 || bedPosition.distanceSquared(position.toInt()) > 4)) { + // Force the player movement by using a teleport + movePlayerPacket.setPosition(Vector3f.from(position.getX(), position.getY() - definition.offset() + 0.2f, position.getZ())); + movePlayerPacket.setMode(MovePlayerPacket.Mode.TELEPORT); + } + } + + if (movePlayerPacket.getMode() == MovePlayerPacket.Mode.TELEPORT) { + movePlayerPacket.setTeleportationCause(MovePlayerPacket.TeleportationCause.BEHAVIOR); + } + + session.sendUpstreamPacket(movePlayerPacket); + } + + @Override + public void setPosition(Vector3f position) { + if (this.bedPosition != null) { + // As of Bedrock 1.21.22 and Fabric 1.21.1 + // Messes with Bedrock if we send this to the client itself, though. + super.setPosition(position.up(0.2f)); + } else { + super.setPosition(position.add(0, definition.offset(), 0)); + } + } + + @Override + public @Nullable Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { + bedPosition = super.setBedPosition(entityMetadata); + if (bedPosition != null) { + // Required to sync position of entity to bed + // Fixes https://github.com/GeyserMC/Geyser/issues/3595 on vanilla 1.19.3 servers - did not happen on Paper + this.setPosition(bedPosition.toFloat()); + + // TODO evaluate if needed + 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); + + // Indicate that the player should enter the sleep cycle + // Has to be a byte or it does not work + // (Bed position is what actually triggers sleep - "pose" is only optional) + dirtyMetadata.put(EntityDataTypes.PLAYER_FLAGS, (byte) 2); + } else { + // Player is no longer sleeping + dirtyMetadata.put(EntityDataTypes.PLAYER_FLAGS, (byte) 0); + return null; + } + return bedPosition; + } + + public void setSkin(ResolvableProfile profile, boolean cape, Runnable after) { + SkinManager.resolveProfile(profile).thenAccept(resolved -> setSkin(resolved, cape, after)); + } + + public void setSkin(GameProfile profile, boolean cape, Runnable after) { + GameProfile.Property textures = profile.getProperty("textures"); + if (textures != null) { + setSkin(textures.getValue(), cape, after); + } else { + setSkin((String) null, cape, after); + } + } + + public void setSkin(String texturesProperty, boolean cape, Runnable after) { + if (Objects.equals(texturesProperty, this.texturesProperty)) { + return; + } + + this.texturesProperty = texturesProperty; + if (cape) { + SkinManager.requestAndHandleSkinAndCape(this, session, skin -> after.run()); + } else { + SkullSkinManager.requestAndHandleSkin(this, session, skin -> after.run()); + } + } + + public void setSkinVisibility(ByteEntityMetadata entityMetadata) { + // OptionalPack usage for toggling skin bits + // In Java Edition, a bit being set means that part should be enabled + // However, to ensure that the pack still works on other servers, we invert the bit so all values by default + // are true (0). + dirtyMetadata.put(EntityDataTypes.MARK_VARIANT, ~entityMetadata.getPrimitiveValue() & 0xff); + } + + @Override + public String getDisplayName() { + return username; + } + + @Override + public void setDisplayName(EntityMetadata, ?> entityMetadata) { + // Doesn't do anything for players + if (!(this instanceof PlayerEntity)) { + super.setDisplayName(entityMetadata); + } + } + + @Override + public void setDisplayNameVisible(BooleanEntityMetadata entityMetadata) { + // Doesn't do anything for players + if (!(this instanceof PlayerEntity)) { + super.setDisplayNameVisible(entityMetadata); + } + } + + public void setBelowNameText(String text) { + if (text == null) { + text = ""; + } + + boolean changed = !Objects.equals(cachedScore, text); + cachedScore = text; + if (scoreVisible && changed) { + dirtyMetadata.put(EntityDataTypes.SCORE, text); + } + } + + @Override + protected void scoreVisibility(boolean show) { + boolean visibilityChanged = scoreVisible != show; + scoreVisible = show; + if (!visibilityChanged) { + return; + } + // if the player has no cachedScore, we never have to change the score. + // hide = set to "" (does nothing), show = change from "" (does nothing) + if (cachedScore.isEmpty()) { + return; + } + dirtyMetadata.put(EntityDataTypes.SCORE, show ? cachedScore : ""); + } + + @Override + public void setPose(Pose pose) { + super.setPose(pose); + setFlag(EntityFlag.SWIMMING, false); + setFlag(EntityFlag.CRAWLING, false); + + if (pose == Pose.SWIMMING) { + // This is just for, so we know if player is swimming or crawling. + // TODO test, changed from position (field) to position() (method), which adds offset + if (session.getGeyser().getWorldManager().blockAt(session, position.toInt()).is(Blocks.WATER)) { + setFlag(EntityFlag.SWIMMING, true); + } else { + setFlag(EntityFlag.CRAWLING, true); + // Look at https://github.com/GeyserMC/Geyser/issues/5316, we're fixing this by spoofing player pitch to 0. + updateRotation(this.yaw, 0, this.onGround); + } + } + } + + @Override + public void setPitch(float pitch) { + super.setPitch(getFlag(EntityFlag.CRAWLING) ? 0 : pitch); + } + + @Override + public void setDimensionsFromPose(Pose pose) { + float height; + float width; + switch (pose) { + case SNEAKING -> { + height = SNEAKING_POSE_HEIGHT; + width = definition.width(); + } + case FALL_FLYING, SPIN_ATTACK, SWIMMING -> { + height = 0.6f; + width = definition.width(); + } + case DYING -> { + height = 0.2f; + width = 0.2f; + } + default -> { + super.setDimensionsFromPose(pose); + return; + } + } + setBoundingBoxWidth(width); + setBoundingBoxHeight(height); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/MannequinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/MannequinEntity.java new file mode 100644 index 000000000..c45221a1a --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/MannequinEntity.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.entity.type.player; + +import net.kyori.adventure.text.Component; +import org.cloudburstmc.math.vector.Vector3f; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile; + +import java.util.Optional; +import java.util.UUID; + +public class MannequinEntity extends AvatarEntity { + + public MannequinEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { + super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw, ""); + } + + public void setProfile(EntityMetadata entityMetadata) { + setSkin(entityMetadata.getValue(), true, () -> {}); + } + + @Override + public String getDisplayName() { + return displayName; + } + + public void setDescription(EntityMetadata, ?> entityMetadata) { + // TODO + } +} 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 a8ca770aa..4e1eb2dcb 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,73 +27,28 @@ package org.geysermc.geyser.entity.type.player; import lombok.Getter; import lombok.Setter; -import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.math.vector.Vector3i; -import org.cloudburstmc.nbt.NbtMap; -import org.cloudburstmc.protocol.bedrock.data.Ability; -import org.cloudburstmc.protocol.bedrock.data.AbilityLayer; -import org.cloudburstmc.protocol.bedrock.data.GameType; -import org.cloudburstmc.protocol.bedrock.data.PlayerPermission; -import org.cloudburstmc.protocol.bedrock.data.command.CommandPermission; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; -import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.data.entity.EntityLinkData; -import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; -import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; -import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityLinkPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.entity.type.Entity; -import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.entity.type.living.animal.tameable.ParrotEntity; -import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.FloatEntityMetadata; import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.OptionalInt; import java.util.UUID; import java.util.concurrent.TimeUnit; @Getter @Setter -public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { - public static final float SNEAKING_POSE_HEIGHT = 1.5f; - protected static final List BASE_ABILITY_LAYER; - - static { - AbilityLayer abilityLayer = new AbilityLayer(); - abilityLayer.setLayerType(AbilityLayer.Type.BASE); - Ability[] abilities = Ability.values(); - Collections.addAll(abilityLayer.getAbilitiesSet(), abilities); // Apparently all the abilities you're working with - Collections.addAll(abilityLayer.getAbilityValues(), abilities); // Apparently all the abilities the player can work with - BASE_ABILITY_LAYER = Collections.singletonList(abilityLayer); - } - - private String username; - - private String cachedScore = ""; - private boolean scoreVisible = true; - - /** - * The textures property from the GameProfile. - */ - @Nullable - private String texturesProperty; - - @Nullable - private Vector3i bedPosition; +public class PlayerEntity extends AvatarEntity implements GeyserPlayerEntity { /** * Saves the parrot currently on the player's left shoulder; otherwise null @@ -111,48 +66,17 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { public PlayerEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw, String username, @Nullable String texturesProperty) { - super(session, entityId, geyserId, uuid, EntityDefinitions.PLAYER, position, motion, yaw, pitch, headYaw); - - this.username = username; - this.nametag = username; + super(session, entityId, geyserId, uuid, EntityDefinitions.PLAYER, position, motion, yaw, pitch, headYaw, username); this.texturesProperty = texturesProperty; } @Override protected void initializeMetadata() { super.initializeMetadata(); - // For the OptionalPack, set all bits as invisible by default as this matches Java Edition behavior - dirtyMetadata.put(EntityDataTypes.MARK_VARIANT, 0xff); - } - - @Override - public void spawnEntity() { - AddPlayerPacket addPlayerPacket = new AddPlayerPacket(); - addPlayerPacket.setUuid(uuid); - addPlayerPacket.setUsername(username); - addPlayerPacket.setRuntimeEntityId(geyserId); - addPlayerPacket.setUniqueEntityId(geyserId); - addPlayerPacket.setPosition(position.sub(0, definition.offset(), 0)); - addPlayerPacket.setRotation(getBedrockRotation()); - addPlayerPacket.setMotion(motion); - addPlayerPacket.setHand(hand); - addPlayerPacket.getAdventureSettings().setCommandPermission(CommandPermission.ANY); - addPlayerPacket.getAdventureSettings().setPlayerPermission(PlayerPermission.MEMBER); - addPlayerPacket.setDeviceId(""); - addPlayerPacket.setPlatformChatId(""); - addPlayerPacket.setGameType(GameType.SURVIVAL); //TODO - addPlayerPacket.setAbilityLayers(BASE_ABILITY_LAYER); // Recommended to be added since 1.19.10, but only needed here for permissions viewing - addPlayerPacket.getMetadata().putFlags(flags); // Since 1.20.60, the nametag does not show properly if this is not set :/ // The nametag does disappear properly when the player is invisible though. dirtyMetadata.put(EntityDataTypes.NAMETAG_ALWAYS_SHOW, (byte) 1); - dirtyMetadata.apply(addPlayerPacket.getMetadata()); - - setFlagsDirty(false); - - valid = true; - session.sendUpstreamPacket(addPlayerPacket); } @Override @@ -164,12 +88,6 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { this.nametag = username; this.equipment.clear(); - this.hand = ItemData.AIR; - this.offhand = ItemData.AIR; - this.boots = ItemData.AIR; - this.leggings = ItemData.AIR; - this.chestplate = ItemData.AIR; - this.helmet = ItemData.AIR; } public void resetMetadata() { @@ -179,8 +97,8 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { this.initializeMetadata(); // Explicitly reset all metadata not handled by initializeMetadata - setParrot(null, true); - setParrot(null, false); + setParrot(OptionalInt.empty(), true); + setParrot(OptionalInt.empty(), false); } public void sendPlayer() { @@ -192,30 +110,7 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { @Override public void moveAbsolute(Vector3f position, float yaw, float pitch, float headYaw, boolean isOnGround, boolean teleported) { - setPosition(position); - setYaw(yaw); - setPitch(pitch); - setHeadYaw(headYaw); - - setOnGround(isOnGround); - - MovePlayerPacket movePlayerPacket = new MovePlayerPacket(); - movePlayerPacket.setRuntimeEntityId(geyserId); - movePlayerPacket.setPosition(this.position); - movePlayerPacket.setRotation(getBedrockRotation()); - movePlayerPacket.setOnGround(isOnGround); - movePlayerPacket.setMode(this instanceof SessionPlayerEntity || teleported ? MovePlayerPacket.Mode.TELEPORT : MovePlayerPacket.Mode.NORMAL); - if (movePlayerPacket.getMode() == MovePlayerPacket.Mode.TELEPORT) { - movePlayerPacket.setTeleportationCause(MovePlayerPacket.TeleportationCause.BEHAVIOR); - } - - session.sendUpstreamPacket(movePlayerPacket); - - if (teleported && !(this instanceof SessionPlayerEntity)) { - // As of 1.19.0, head yaw seems to be ignored during teleports, also don't do this for session player. - updateHeadLookRotation(headYaw); - } - + super.moveAbsolute(position, yaw, pitch, headYaw, isOnGround, teleported); if (leftParrot != null) { leftParrot.moveAbsolute(position, yaw, pitch, headYaw, true, teleported); } @@ -226,34 +121,7 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { @Override public void moveRelative(double relX, double relY, double relZ, float yaw, float pitch, float headYaw, boolean isOnGround) { - setYaw(yaw); - setPitch(pitch); - setHeadYaw(headYaw); - this.position = Vector3f.from(position.getX() + relX, position.getY() + relY, position.getZ() + relZ); - - setOnGround(isOnGround); - - MovePlayerPacket movePlayerPacket = new MovePlayerPacket(); - movePlayerPacket.setRuntimeEntityId(geyserId); - movePlayerPacket.setPosition(position); - movePlayerPacket.setRotation(getBedrockRotation()); - movePlayerPacket.setOnGround(isOnGround); - movePlayerPacket.setMode(this instanceof SessionPlayerEntity ? MovePlayerPacket.Mode.TELEPORT : MovePlayerPacket.Mode.NORMAL); - // If the player is moved while sleeping, we have to adjust their y, so it appears - // correctly on Bedrock. This fixes GSit's lay. - if (getFlag(EntityFlag.SLEEPING)) { - if (bedPosition != null && (bedPosition.getY() == 0 || bedPosition.distanceSquared(position.toInt()) > 4)) { - // Force the player movement by using a teleport - movePlayerPacket.setPosition(Vector3f.from(position.getX(), position.getY() - definition.offset() + 0.2f, position.getZ())); - movePlayerPacket.setMode(MovePlayerPacket.Mode.TELEPORT); - } - } - - if (movePlayerPacket.getMode() == MovePlayerPacket.Mode.TELEPORT) { - movePlayerPacket.setTeleportationCause(MovePlayerPacket.TeleportationCause.BEHAVIOR); - } - - session.sendUpstreamPacket(movePlayerPacket); + super.moveRelative(relX, relY, relZ, yaw, pitch, headYaw, isOnGround); if (leftParrot != null) { leftParrot.moveRelative(relX, relY, relZ, yaw, pitch, headYaw, true); } @@ -262,42 +130,6 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { } } - @Override - public void setPosition(Vector3f position) { - if (this.bedPosition != null) { - // As of Bedrock 1.21.22 and Fabric 1.21.1 - // Messes with Bedrock if we send this to the client itself, though. - super.setPosition(position.up(0.2f)); - } else { - super.setPosition(position.add(0, definition.offset(), 0)); - } - } - - @Override - public @Nullable Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { - bedPosition = super.setBedPosition(entityMetadata); - if (bedPosition != null) { - // Required to sync position of entity to bed - // Fixes https://github.com/GeyserMC/Geyser/issues/3595 on vanilla 1.19.3 servers - did not happen on Paper - this.setPosition(bedPosition.toFloat()); - - // TODO evaluate if needed - 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); - - // Indicate that the player should enter the sleep cycle - // Has to be a byte or it does not work - // (Bed position is what actually triggers sleep - "pose" is only optional) - dirtyMetadata.put(EntityDataTypes.PLAYER_FLAGS, (byte) 2); - } else { - // Player is no longer sleeping - dirtyMetadata.put(EntityDataTypes.PLAYER_FLAGS, (byte) 0); - return null; - } - return bedPosition; - } - public void setAbsorptionHearts(FloatEntityMetadata entityMetadata) { // Extra hearts - is not metadata but an attribute on Bedrock UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket(); @@ -308,19 +140,11 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { session.sendUpstreamPacket(attributesPacket); } - public void setSkinVisibility(ByteEntityMetadata entityMetadata) { - // OptionalPack usage for toggling skin bits - // In Java Edition, a bit being set means that part should be enabled - // However, to ensure that the pack still works on other servers, we invert the bit so all values by default - // are true (0). - dirtyMetadata.put(EntityDataTypes.MARK_VARIANT, ~entityMetadata.getPrimitiveValue() & 0xff); - } - - public void setLeftParrot(EntityMetadata entityMetadata) { + public void setLeftParrot(EntityMetadata entityMetadata) { setParrot(entityMetadata.getValue(), true); } - public void setRightParrot(EntityMetadata entityMetadata) { + public void setRightParrot(EntityMetadata entityMetadata) { setParrot(entityMetadata.getValue(), false); } @@ -328,17 +152,17 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { * Sets the parrot occupying the shoulder. Bedrock Edition requires a full entity whereas Java Edition just * spawns it from the NBT data provided */ - protected void setParrot(NbtMap tag, boolean isLeft) { - if (tag != null && !tag.isEmpty()) { + protected void setParrot(OptionalInt variant, boolean isLeft) { + if (variant.isPresent()) { if ((isLeft && leftParrot != null) || (!isLeft && rightParrot != null)) { // No need to update a parrot's data when it already exists return; } - // The parrot is a separate entity in Bedrock, but part of the player entity in Java //TODO is a UUID provided in NBT? + // The parrot is a separate entity in Bedrock, but part of the player entity in Java ParrotEntity parrot = new ParrotEntity(session, 0, session.getEntityCache().getNextEntityId().incrementAndGet(), null, EntityDefinitions.PARROT, position, motion, getYaw(), getPitch(), getHeadYaw()); parrot.spawnEntity(); - parrot.getDirtyMetadata().put(EntityDataTypes.VARIANT, (Integer) tag.get("Variant")); + parrot.getDirtyMetadata().put(EntityDataTypes.VARIANT, variant.getAsInt()); // Different position whether the parrot is left or right float offset = isLeft ? 0.4f : -0.4f; parrot.getDirtyMetadata().put(EntityDataTypes.SEAT_OFFSET, Vector3f.from(offset, -0.22, -0.1)); @@ -368,21 +192,12 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { } } - @Override - public String getDisplayName() { - return username; - } - - @Override - public void setDisplayName(EntityMetadata, ?> entityMetadata) { - // Doesn't do anything for players - } - @Override public String teamIdentifier() { return username; } + // TODO test mannequins @Override protected void setNametag(@Nullable String nametag, boolean fromDisplayName) { // when fromDisplayName, LivingEntity will call scoreboard code. After that @@ -394,85 +209,8 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { super.setNametag(nametag, fromDisplayName); } - @Override - public void setDisplayNameVisible(BooleanEntityMetadata entityMetadata) { - // Doesn't do anything for players - } - - public void setBelowNameText(String text) { - if (text == null) { - text = ""; - } - - boolean changed = !Objects.equals(cachedScore, text); - cachedScore = text; - if (isScoreVisible() && changed) { - dirtyMetadata.put(EntityDataTypes.SCORE, text); - } - } - - @Override - protected void scoreVisibility(boolean show) { - boolean visibilityChanged = scoreVisible != show; - scoreVisible = show; - if (!visibilityChanged) { - return; - } - // if the player has no cachedScore, we never have to change the score. - // hide = set to "" (does nothing), show = change from "" (does nothing) - if (cachedScore.isEmpty()) { - return; - } - dirtyMetadata.put(EntityDataTypes.SCORE, show ? cachedScore : ""); - } - - @Override - public void setPose(Pose pose) { - super.setPose(pose); - setFlag(EntityFlag.SWIMMING, false); - setFlag(EntityFlag.CRAWLING, false); - - if (pose == Pose.SWIMMING) { - // This is just for, so we know if player is swimming or crawling. - if (session.getGeyser().getWorldManager().blockAt(session, this.position().toInt()).is(Blocks.WATER)) { - setFlag(EntityFlag.SWIMMING, true); - } else { - setFlag(EntityFlag.CRAWLING, true); - // Look at https://github.com/GeyserMC/Geyser/issues/5316, we're fixing this by spoofing player pitch to 0. - updateRotation(this.yaw, 0, this.onGround); - } - } - } - - @Override - public void setPitch(float pitch) { - super.setPitch(getFlag(EntityFlag.CRAWLING) ? 0 : pitch); - } - - @Override - public void setDimensionsFromPose(Pose pose) { - float height; - float width; - switch (pose) { - case SNEAKING -> { - height = SNEAKING_POSE_HEIGHT; - width = definition.width(); - } - case FALL_FLYING, SPIN_ATTACK, SWIMMING -> { - height = 0.6f; - width = definition.width(); - } - case DYING -> { - height = 0.2f; - width = 0.2f; - } - default -> { - super.setDimensionsFromPose(pose); - return; - } - } - setBoundingBoxWidth(width); - setBoundingBoxHeight(height); + public void setUsername(String username) { + this.username = username; } /** 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 145421a5f..a60dd0b78 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 @@ -322,9 +322,9 @@ public class SessionPlayerEntity extends PlayerEntity { protected boolean hasShield(boolean offhand) { // Must be overridden to point to the player's inventory cache if (offhand) { - return session.getPlayerInventory().getOffhand().asItem() == Items.SHIELD; + return session.getPlayerInventory().getOffhand().is(Items.SHIELD); } else { - return session.getPlayerInventory().getItemInHand().asItem() == Items.SHIELD; + return session.getPlayerInventory().getItemInHand().is(Items.SHIELD); } } @@ -498,7 +498,7 @@ public class SessionPlayerEntity extends PlayerEntity { } Vector3i pos = getPosition().down(EntityDefinitions.PLAYER.offset()).toInt(); BlockState state = session.getGeyser().getWorldManager().blockAt(session, pos); - if (session.getTagCache().is(BlockTag.CLIMBABLE, state.block())) { + if (state.block().is(session, BlockTag.CLIMBABLE)) { return true; } @@ -539,7 +539,7 @@ public class SessionPlayerEntity extends PlayerEntity { } // Bedrock will NOT allow flight when not wearing an elytra; even if it doesn't have a glider component - if (entry.getKey() == EquipmentSlot.CHESTPLATE && !entry.getValue().asItem().equals(Items.ELYTRA)) { + if (entry.getKey() == EquipmentSlot.CHESTPLATE && !entry.getValue().is(Items.ELYTRA)) { return false; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java index 4c8d1d20b..2819d9486 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java @@ -34,6 +34,7 @@ import org.cloudburstmc.protocol.bedrock.data.command.CommandPermission; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; +import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.block.type.WallSkullBlock; @@ -41,6 +42,7 @@ import org.geysermc.geyser.level.physics.Direction; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.skin.SkullSkinManager; +import org.geysermc.geyser.translator.item.ItemTranslator; import java.util.Objects; import java.util.UUID; @@ -50,7 +52,7 @@ import java.util.concurrent.TimeUnit; * A wrapper to handle skulls more effectively - skulls have to be treated as entities since there are no * custom player skulls in Bedrock. */ -public class SkullPlayerEntity extends PlayerEntity { +public class SkullPlayerEntity extends AvatarEntity { @Getter private UUID skullUUID; @@ -59,7 +61,7 @@ public class SkullPlayerEntity extends PlayerEntity { private Vector3i skullPosition; public SkullPlayerEntity(GeyserSession session, long geyserId) { - super(session, 0, geyserId, UUID.randomUUID(), Vector3f.ZERO, Vector3f.ZERO, 0, 0, 0, "", null); + super(session, 0, geyserId, UUID.randomUUID(), EntityDefinitions.PLAYER, Vector3f.ZERO, Vector3f.ZERO, 0, 0, 0, ""); } @Override @@ -73,51 +75,20 @@ public class SkullPlayerEntity extends PlayerEntity { setFlag(EntityFlag.INVISIBLE, true); // Until the skin is loaded } - /** - * Overwritten so each entity doesn't check for a linked entity - */ - @Override - public void spawnEntity() { - AddPlayerPacket addPlayerPacket = new AddPlayerPacket(); - addPlayerPacket.setUuid(getUuid()); - addPlayerPacket.setUsername(getUsername()); - addPlayerPacket.setRuntimeEntityId(geyserId); - addPlayerPacket.setUniqueEntityId(geyserId); - addPlayerPacket.setPosition(position.sub(0, definition.offset(), 0)); - addPlayerPacket.setRotation(getBedrockRotation()); - addPlayerPacket.setMotion(motion); - addPlayerPacket.setHand(hand); - addPlayerPacket.getAdventureSettings().setCommandPermission(CommandPermission.ANY); - addPlayerPacket.getAdventureSettings().setPlayerPermission(PlayerPermission.MEMBER); - addPlayerPacket.setDeviceId(""); - addPlayerPacket.setPlatformChatId(""); - addPlayerPacket.setGameType(GameType.SURVIVAL); - addPlayerPacket.setAbilityLayers(BASE_ABILITY_LAYER); - addPlayerPacket.getMetadata().putFlags(flags); - dirtyMetadata.apply(addPlayerPacket.getMetadata()); - - setFlagsDirty(false); - - valid = true; - session.sendUpstreamPacket(addPlayerPacket); - } - public void updateSkull(SkullCache.Skull skull) { skullPosition = skull.getPosition(); - if (!Objects.equals(skull.getTexturesProperty(), getTexturesProperty()) || !Objects.equals(skullUUID, skull.getUuid())) { + if (!Objects.equals(skull.getTexturesProperty(), texturesProperty) || !Objects.equals(skullUUID, skull.getUuid())) { // Make skull invisible as we change skins setFlag(EntityFlag.INVISIBLE, true); updateBedrockMetadata(); skullUUID = skull.getUuid(); - setTexturesProperty(skull.getTexturesProperty()); - - SkullSkinManager.requestAndHandleSkin(this, session, (skin -> session.scheduleInEventLoop(() -> { + setSkin(skull.getTexturesProperty(), false, () -> session.scheduleInEventLoop(() -> { // Delay to minimize split-second "player" pop-in setFlag(EntityFlag.INVISIBLE, false); updateBedrockMetadata(); - }, 250, TimeUnit.MILLISECONDS))); + }, 250, TimeUnit.MILLISECONDS)); } else { // Just a rotation/position change setFlag(EntityFlag.INVISIBLE, false); diff --git a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java index 44e922950..64796d052 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java +++ b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java @@ -683,7 +683,7 @@ public class VehicleComponent { } BlockState blockState = ctx.centerBlock(); - if (vehicle.getSession().getTagCache().is(BlockTag.CLIMBABLE, blockState.block())) { + if (blockState.block().is(vehicle.getSession(), BlockTag.CLIMBABLE)) { return true; } diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java index dca11dfcd..a8f5c5584 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java @@ -40,11 +40,11 @@ import java.nio.file.Path; public class GeyserExtensionClassLoader extends URLClassLoader { private final GeyserExtensionLoader loader; - private final ExtensionDescription description; + private final GeyserExtensionDescription description; private final Object2ObjectMap> classes = new Object2ObjectOpenHashMap<>(); private boolean warnedForExternalClassAccess; - public GeyserExtensionClassLoader(GeyserExtensionLoader loader, ClassLoader parent, Path path, ExtensionDescription description) throws MalformedURLException { + public GeyserExtensionClassLoader(GeyserExtensionLoader loader, ClassLoader parent, Path path, GeyserExtensionDescription description) throws MalformedURLException { super(new URL[] { path.toUri().toURL() }, parent); this.loader = loader; this.description = description; @@ -89,7 +89,7 @@ public class GeyserExtensionClassLoader extends URLClassLoader { // If class is not found in current extension, check in the global class loader // This is used for classes that are not in the extension, but are in other extensions if (checkGlobal) { - if (!warnedForExternalClassAccess) { + if (!warnedForExternalClassAccess && this.description.dependencies().isEmpty()) { // Don't warn when the extension has dependencies, it is probably using it's dependencies! GeyserImpl.getInstance().getLogger().warning("Extension " + this.description.name() + " loads class " + name + " from an external source. " + "This can change at any time and break the extension, additionally to potentially causing unexpected behaviour!"); warnedForExternalClassAccess = true; diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java index a84f12813..702ab0f68 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java @@ -47,7 +47,8 @@ public record GeyserExtensionDescription(@NonNull String id, int majorApiVersion, int minorApiVersion, @NonNull String version, - @NonNull List authors) implements ExtensionDescription { + @NonNull List authors, + @NonNull Map dependencies) implements ExtensionDescription { private static final Yaml YAML = new Yaml(new CustomClassLoaderConstructor(Source.class.getClassLoader(), new LoaderOptions())); @@ -94,7 +95,12 @@ public record GeyserExtensionDescription(@NonNull String id, authors.addAll(source.authors); } - return new GeyserExtensionDescription(id, name, main, humanApi, majorApi, minorApi, version, authors); + Map dependencies = new LinkedHashMap<>(); + if (source.dependencies != null) { + dependencies.putAll(source.dependencies); + } + + return new GeyserExtensionDescription(id, name, main, humanApi, majorApi, minorApi, version, authors, dependencies); } @NonNull @@ -116,5 +122,17 @@ public record GeyserExtensionDescription(@NonNull String id, String version; String author; List authors; + Map dependencies; + } + + @Getter + @Setter + public static class Dependency { + boolean required = true; // Defaults to true + LoadOrder load = LoadOrder.BEFORE; // Defaults to ensure the dependency loads before this extension + } + + public enum LoadOrder { + BEFORE, AFTER } } diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java index 2bfa6cce6..2be6d2f8f 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java @@ -54,11 +54,16 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.BiConsumer; +import java.util.function.Consumer; import java.util.regex.Pattern; @RequiredArgsConstructor @@ -167,6 +172,8 @@ public class GeyserExtensionLoader extends ExtensionLoader { Map extensions = new LinkedHashMap<>(); Map loadedExtensions = new LinkedHashMap<>(); + Map descriptions = new LinkedHashMap<>(); + Map extensionPaths = new LinkedHashMap<>(); Path updateDirectory = extensionsDirectory.resolve("update"); if (Files.isDirectory(updateDirectory)) { @@ -195,10 +202,126 @@ public class GeyserExtensionLoader extends ExtensionLoader { }); } - // Step 3: Load the extensions + // Step 3: Order the extensions to allow dependencies to load in the correct order this.processExtensionsFolder(extensionsDirectory, (path, description) -> { - String name = description.name(); String id = description.id(); + descriptions.put(id, description); + extensionPaths.put(id, path); + + }, (path, e) -> { + logger.error(GeyserLocale.getLocaleStringLog("geyser.extensions.load.failed_with_name", path.getFileName(), path.toAbsolutePath()), e); + }); + + // The graph to back out loading order (Funny I just learnt these too) + Map> loadOrderGraph = new HashMap<>(); + + // Looks like the graph needs to be prepopulated otherwise issues happen + for (String id : descriptions.keySet()) { + loadOrderGraph.putIfAbsent(id, new ArrayList<>()); + } + + for (GeyserExtensionDescription description : descriptions.values()) { + for (Map.Entry dependency : description.dependencies().entrySet()) { + String from = null; + String to = null; // Java complains if this isn't initialised, but not from, so, both null. + + // Check if the extension is even loaded + if (!descriptions.containsKey(dependency.getKey())) { + if (dependency.getValue().isRequired()) { // Only disable the extension if this dependency is required + // The extension we are checking is missing 1 or more dependencies + logger.error( + GeyserLocale.getLocaleStringLog( + "geyser.extensions.load.failed_dependency_missing", + description.id(), + dependency.getKey() + ) + ); + + descriptions.remove(description.id()); // Prevents it from being loaded later + } + + continue; + } + + if ( + !(description.humanApiVersion() >= 2 && + description.majorApiVersion() >= 9 && + description.minorApiVersion() >= 0) + ) { + logger.error( + GeyserLocale.getLocaleStringLog( + "geyser.extensions.load.failed_cannot_use_dependencies", + description.id(), + description.apiVersion() + ) + ); + + descriptions.remove(description.id()); // Prevents it from being loaded later + + continue; + } + + // Determine which way they should go in the graph + switch (dependency.getValue().getLoad()) { + case BEFORE -> { + from = dependency.getKey(); + to = description.id(); + } + case AFTER -> { + from = description.id(); + to = dependency.getKey(); + } + } + + loadOrderGraph.get(from).add(to); + } + } + + Set visited = new HashSet<>(); + List visiting = new ArrayList<>(); + List loadOrder = new ArrayList<>(); + + AtomicReference> sortMethod = new AtomicReference<>(); // yay, lambdas. This doesn't feel to suited to be a method + sortMethod.set((node) -> { + if (visiting.contains(node)) { + logger.error( + GeyserLocale.getLocaleStringLog( + "geyser.extensions.load.failed_cyclical_dependencies", + node, + visiting.get(visiting.indexOf(node) - 1) + ) + ); + + visiting.remove(node); + return; + } + + if (visited.contains(node)) return; + + visiting.add(node); + for (String neighbor : loadOrderGraph.get(node)) { + sortMethod.get().accept(neighbor); + } + visiting.remove(node); + visited.add(node); + loadOrder.add(node); + }); + + for (String ext : descriptions.keySet()) { + if (!visited.contains(ext)) { + // Time to sort the graph to get a load order, this reveals any cycles we may have + sortMethod.get().accept(ext); + } + } + Collections.reverse(loadOrder); // This is inverted due to how the graph is created + + // Step 4: Load the extensions + for (String id : loadOrder) { + // Grab path and description found from before, since we want a custom load order now + Path path = extensionPaths.get(id); + GeyserExtensionDescription description = descriptions.get(id); + + String name = description.name(); if (extensions.containsKey(id) || extensionManager.extension(id) != null) { logger.warning(GeyserLocale.getLocaleStringLog("geyser.extensions.load.duplicate", name, path.toString())); return; @@ -222,20 +345,22 @@ public class GeyserExtensionLoader extends ExtensionLoader { } } - GeyserExtensionContainer container = this.loadExtension(path, description); - extensions.put(id, path); - loadedExtensions.put(id, container); - }, (path, e) -> { - logger.error(GeyserLocale.getLocaleStringLog("geyser.extensions.load.failed_with_name", path.getFileName(), path.toAbsolutePath()), e); - }); + try { + GeyserExtensionContainer container = this.loadExtension(path, description); + extensions.put(id, path); + loadedExtensions.put(id, container); + } catch (Throwable e) { + logger.error(GeyserLocale.getLocaleStringLog("geyser.extensions.load.failed_with_name", path.getFileName(), path.toAbsolutePath()), e); + } + } - // Step 4: Register the extensions + // Step 5: Register the extensions for (GeyserExtensionContainer container : loadedExtensions.values()) { this.extensionContainers.put(container.extension(), container); this.register(container.extension(), extensionManager); } } catch (IOException ex) { - ex.printStackTrace(); + logger.error("Unable to read extensions.", ex); } } diff --git a/core/src/main/java/org/geysermc/geyser/impl/IdentifierImpl.java b/core/src/main/java/org/geysermc/geyser/impl/IdentifierImpl.java new file mode 100644 index 000000000..ca0324665 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/impl/IdentifierImpl.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.impl; + +import net.kyori.adventure.key.Key; +import org.geysermc.geyser.api.util.Identifier; +import org.geysermc.geyser.util.MinecraftKey; + +import java.util.Objects; + +public record IdentifierImpl(Key identifier) implements Identifier { + + public static IdentifierImpl of(String namespace, String value) throws IllegalArgumentException { + Objects.requireNonNull(namespace, "namespace cannot be null!"); + Objects.requireNonNull(value, "value cannot be null!"); + try { + return new IdentifierImpl(MinecraftKey.key(namespace, value)); + } catch (Throwable e) { + throw new IllegalArgumentException(e.getMessage()); + } + } + + // FIXME using the identifier interface from the API breaks tests + public static IdentifierImpl of(String value) { + return of(Identifier.DEFAULT_NAMESPACE, value); + } + + @Override + public String namespace() { + return identifier.namespace(); + } + + @Override + public String path() { + return identifier.value(); + } + + @Override + public String toString() { + return identifier.toString(); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java index 5f4ce6b45..0de4580aa 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -40,11 +40,14 @@ import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.BundleCache; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; @@ -115,6 +118,22 @@ public class GeyserItemStack { return isEmpty() ? 0 : amount; } + public boolean is(Item item) { + return javaId == item.javaId(); + } + + public boolean is(GeyserSession session, Tag tag) { + return session.getTagCache().is(tag, javaId); + } + + public boolean is(GeyserSession session, HolderSet set) { + return session.getTagCache().is(set, JavaRegistries.ITEM, javaId); + } + + public boolean isSameItem(GeyserItemStack other) { + return javaId == other.javaId; + } + /** * Returns all components of this item - base and additional components sent over the network. * These are NOT modifiable! To add components, use {@link #getOrCreateComponents()}. @@ -248,6 +267,10 @@ public class GeyserItemStack { return new ItemStackSlotDisplay(this.getItemStack()); } + public int getMaxStackSize() { + return getComponentElseGet(DataComponentTypes.MAX_STACK_SIZE, () -> 1); + } + public int getMaxDamage() { return getComponentElseGet(DataComponentTypes.MAX_DAMAGE, () -> 0); } @@ -266,6 +289,10 @@ public class GeyserItemStack { return getComponent(DataComponentTypes.MAX_DAMAGE) != null && getComponent(DataComponentTypes.UNBREAKABLE) == null && getComponent(DataComponentTypes.DAMAGE) != null; } + public boolean isDamaged() { + return isDamageable() && getDamage() > 0; + } + public Item asItem() { if (isEmpty()) { return Items.AIR; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java index 2d8b0e351..414ad2951 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -148,7 +148,7 @@ public abstract class Inventory { items[slot] = newItem; // Lodestone caching - if (newItem.asItem() == Items.COMPASS) { + if (newItem.is(Items.COMPASS)) { var tracker = newItem.getComponent(DataComponentTypes.LODESTONE_TRACKER); if (tracker != null) { session.getLodestoneCache().cacheInventoryItem(newItem, tracker); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java index 200bf522b..6c34aa7d5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java @@ -71,7 +71,7 @@ public class PlayerInventory extends Inventory { * @return If the player is holding the item in either hand */ public boolean isHolding(@NonNull Item item) { - return getItemInHand().asItem() == item || getOffhand().asItem() == item; + return getItemInHand().is(item) || getOffhand().is(item); } public GeyserItemStack getItemInHand(@NonNull Hand hand) { @@ -98,10 +98,6 @@ public class PlayerInventory extends Inventory { ); } - public boolean eitherHandMatchesItem(@NonNull Item item) { - return getItemInHand().asItem() == item || getItemInHand(Hand.OFF_HAND).asItem() == item; - } - public void setItemInHand(@NonNull GeyserItemStack item) { if (36 + heldItemSlot > this.size) { GeyserImpl.getInstance().getLogger().debug("Held item slot was larger than expected!"); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java index e9d884cdd..8a33db7d2 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java @@ -45,7 +45,7 @@ public class StonecutterContainer extends Container { @Override public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession session) { - if (slot == 0 && newItem.getJavaId() != items[slot].getJavaId()) { + if (slot == 0 && !newItem.isSameItem(items[slot])) { // The pressed stonecutter button output resets whenever the input item changes this.stonecutterButton = -1; } 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 f856af35c..a58c218f0 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 @@ -40,37 +40,25 @@ import java.util.Map; @Getter @Accessors(fluent = true) public class StoredItemMappings { - private final ItemMapping banner; private final ItemMapping barrier; - private final ItemMapping bow; - private final ItemMapping carrotOnAStick; private final ItemMapping compass; - private final ItemMapping crossbow; private final ItemMapping glassBottle; private final ItemMapping milkBucket; private final ItemMapping powderSnowBucket; - private final ItemMapping shield; private final ItemMapping totem; private final ItemMapping upgradeTemplate; - private final ItemMapping warpedFungusOnAStick; private final ItemMapping wheat; private final ItemMapping writableBook; private final ItemMapping writtenBook; public StoredItemMappings(Map itemMappings) { - this.banner = load(itemMappings, Items.WHITE_BANNER); // As of 1.17.10, all banners have the same Bedrock ID this.barrier = load(itemMappings, Items.BARRIER); - this.bow = load(itemMappings, Items.BOW); - this.carrotOnAStick = load(itemMappings, Items.CARROT_ON_A_STICK); this.compass = load(itemMappings, Items.COMPASS); - this.crossbow = load(itemMappings, Items.CROSSBOW); this.glassBottle = load(itemMappings, Items.GLASS_BOTTLE); this.milkBucket = load(itemMappings, Items.MILK_BUCKET); this.powderSnowBucket = load(itemMappings, Items.POWDER_SNOW_BUCKET); - this.shield = load(itemMappings, Items.SHIELD); this.totem = load(itemMappings, Items.TOTEM_OF_UNDYING); this.upgradeTemplate = load(itemMappings, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE); - this.warpedFungusOnAStick = load(itemMappings, Items.WARPED_FUNGUS_ON_A_STICK); this.wheat = load(itemMappings, Items.WHEAT); this.writableBook = load(itemMappings, Items.WRITABLE_BOOK); this.writtenBook = load(itemMappings, Items.WRITTEN_BOOK); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/TrimRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/TrimRecipe.java index ae7a8bd6a..9b49f8577 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/TrimRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/TrimRecipe.java @@ -86,12 +86,12 @@ public final class TrimRecipe { return new TrimMaterial(key, color, trimItem.getBedrockIdentifier()); } - // TODO this is WRONG. this changed. FIXME in 1.21.5 public static TrimPattern readTrimPattern(RegistryEntryContext context) { String key = context.id().asMinimalString(); - String itemIdentifier = context.data().getString("template_item"); - ItemMapping itemMapping = context.session().getItemMappings().getMapping(itemIdentifier); + // Not ideal, Java edition also gives us a translatable description... Bedrock wants the template item + String identifier = context.id().asString() + "_armor_trim_smithing_template"; + ItemMapping itemMapping = context.session().getItemMappings().getMapping(identifier); if (itemMapping == null) { // This should never happen so not sure what to do here. itemMapping = ItemMapping.AIR; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java index bea3e0507..89af5842b 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java @@ -223,7 +223,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { if (!material.isEmpty()) { totalRepairCost += getRepairCost(material); if (isCombining(input, material)) { - if (hasDurability(input) && input.getJavaId() == material.getJavaId()) { + if (hasDurability(input) && input.isSameItem(material)) { cost += calcMergeRepairCost(input, material); } @@ -312,7 +312,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { for (Object2IntMap.Entry entry : getEnchantments(session, material).object2IntEntrySet()) { Enchantment enchantment = entry.getKey(); - boolean canApply = isEnchantedBook(input) || session.getTagCache().is(enchantment.supportedItems(), input.asItem()); + boolean canApply = isEnchantedBook(input) || enchantment.supportedItems().contains(session, input.asItem()); List incompatibleEnchantments = enchantment.exclusiveSet().resolve(session); for (Enchantment incompatible : incompatibleEnchantments) { @@ -388,11 +388,11 @@ public class AnvilInventoryUpdater extends InventoryUpdater { } private boolean isEnchantedBook(GeyserItemStack itemStack) { - return itemStack.asItem() == Items.ENCHANTED_BOOK; + return itemStack.is(Items.ENCHANTED_BOOK); } private boolean isCombining(GeyserItemStack input, GeyserItemStack material) { - return isEnchantedBook(material) || (input.getJavaId() == material.getJavaId() && hasDurability(input)); + return isEnchantedBook(material) || (input.isSameItem(material) && hasDurability(input)); } private boolean isRepairing(GeyserItemStack input, GeyserItemStack material, GeyserSession session) { @@ -401,7 +401,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { return false; } - return session.getTagCache().isItem(repairable, material.asItem()); + return material.is(session, repairable); } private boolean isRenaming(GeyserSession session, AnvilContainer anvilContainer, boolean bedrock) { diff --git a/core/src/main/java/org/geysermc/geyser/item/Items.java b/core/src/main/java/org/geysermc/geyser/item/Items.java index e86a93a42..d0bf6655d 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -371,6 +371,18 @@ public final class Items { public static final Item SMOOTH_SANDSTONE = register(new BlockItem(builder(), Blocks.SMOOTH_SANDSTONE)); public static final Item SMOOTH_STONE = register(new BlockItem(builder(), Blocks.SMOOTH_STONE)); public static final Item BRICKS = register(new BlockItem(builder(), Blocks.BRICKS)); + public static final Item ACACIA_SHELF = register(new BlockItem(builder(), Blocks.ACACIA_SHELF)); + public static final Item BAMBOO_SHELF = register(new BlockItem(builder(), Blocks.BAMBOO_SHELF)); + public static final Item BIRCH_SHELF = register(new BlockItem(builder(), Blocks.BIRCH_SHELF)); + public static final Item CHERRY_SHELF = register(new BlockItem(builder(), Blocks.CHERRY_SHELF)); + public static final Item CRIMSON_SHELF = register(new BlockItem(builder(), Blocks.CRIMSON_SHELF)); + public static final Item DARK_OAK_SHELF = register(new BlockItem(builder(), Blocks.DARK_OAK_SHELF)); + public static final Item JUNGLE_SHELF = register(new BlockItem(builder(), Blocks.JUNGLE_SHELF)); + public static final Item MANGROVE_SHELF = register(new BlockItem(builder(), Blocks.MANGROVE_SHELF)); + public static final Item OAK_SHELF = register(new BlockItem(builder(), Blocks.OAK_SHELF)); + public static final Item PALE_OAK_SHELF = register(new BlockItem(builder(), Blocks.PALE_OAK_SHELF)); + public static final Item SPRUCE_SHELF = register(new BlockItem(builder(), Blocks.SPRUCE_SHELF)); + public static final Item WARPED_SHELF = register(new BlockItem(builder(), Blocks.WARPED_SHELF)); public static final Item BOOKSHELF = register(new BlockItem(builder(), Blocks.BOOKSHELF)); public static final Item CHISELED_BOOKSHELF = register(new BlockItem(builder(), Blocks.CHISELED_BOOKSHELF)); public static final Item DECORATED_POT = register(new DecoratedPotItem(builder(), Blocks.DECORATED_POT)); @@ -420,6 +432,7 @@ public final class Items { public static final Item POLISHED_BASALT = register(new BlockItem(builder(), Blocks.POLISHED_BASALT)); public static final Item SMOOTH_BASALT = register(new BlockItem(builder(), Blocks.SMOOTH_BASALT)); public static final Item SOUL_TORCH = register(new BlockItem(builder(), Blocks.SOUL_TORCH, Blocks.SOUL_WALL_TORCH)); + public static final Item COPPER_TORCH = register(new BlockItem(builder(), Blocks.COPPER_TORCH, Blocks.COPPER_WALL_TORCH)); public static final Item GLOWSTONE = register(new BlockItem(builder(), Blocks.GLOWSTONE)); public static final Item INFESTED_STONE = register(new BlockItem(builder(), Blocks.INFESTED_STONE)); public static final Item INFESTED_COBBLESTONE = register(new BlockItem(builder(), Blocks.INFESTED_COBBLESTONE)); @@ -444,7 +457,23 @@ public final class Items { public static final Item RED_MUSHROOM_BLOCK = register(new BlockItem(builder(), Blocks.RED_MUSHROOM_BLOCK)); public static final Item MUSHROOM_STEM = register(new BlockItem(builder(), Blocks.MUSHROOM_STEM)); public static final Item IRON_BARS = register(new BlockItem(builder(), Blocks.IRON_BARS)); - public static final Item CHAIN = register(new BlockItem(builder(), Blocks.CHAIN)); + public static final Item COPPER_BARS = register(new BlockItem(builder(), Blocks.COPPER_BARS)); + public static final Item EXPOSED_COPPER_BARS = register(new BlockItem(builder(), Blocks.EXPOSED_COPPER_BARS)); + public static final Item WEATHERED_COPPER_BARS = register(new BlockItem(builder(), Blocks.WEATHERED_COPPER_BARS)); + public static final Item OXIDIZED_COPPER_BARS = register(new BlockItem(builder(), Blocks.OXIDIZED_COPPER_BARS)); + public static final Item WAXED_COPPER_BARS = register(new BlockItem(builder(), Blocks.WAXED_COPPER_BARS)); + public static final Item WAXED_EXPOSED_COPPER_BARS = register(new BlockItem(builder(), Blocks.WAXED_EXPOSED_COPPER_BARS)); + public static final Item WAXED_WEATHERED_COPPER_BARS = register(new BlockItem(builder(), Blocks.WAXED_WEATHERED_COPPER_BARS)); + public static final Item WAXED_OXIDIZED_COPPER_BARS = register(new BlockItem(builder(), Blocks.WAXED_OXIDIZED_COPPER_BARS)); + public static final Item IRON_CHAIN = register(new BlockItem(builder(), Blocks.IRON_CHAIN)); + public static final Item COPPER_CHAIN = register(new BlockItem(builder(), Blocks.COPPER_CHAIN)); + public static final Item EXPOSED_COPPER_CHAIN = register(new BlockItem(builder(), Blocks.EXPOSED_COPPER_CHAIN)); + public static final Item WEATHERED_COPPER_CHAIN = register(new BlockItem(builder(), Blocks.WEATHERED_COPPER_CHAIN)); + public static final Item OXIDIZED_COPPER_CHAIN = register(new BlockItem(builder(), Blocks.OXIDIZED_COPPER_CHAIN)); + public static final Item WAXED_COPPER_CHAIN = register(new BlockItem(builder(), Blocks.WAXED_COPPER_CHAIN)); + public static final Item WAXED_EXPOSED_COPPER_CHAIN = register(new BlockItem(builder(), Blocks.WAXED_EXPOSED_COPPER_CHAIN)); + public static final Item WAXED_WEATHERED_COPPER_CHAIN = register(new BlockItem(builder(), Blocks.WAXED_WEATHERED_COPPER_CHAIN)); + public static final Item WAXED_OXIDIZED_COPPER_CHAIN = register(new BlockItem(builder(), Blocks.WAXED_OXIDIZED_COPPER_CHAIN)); public static final Item GLASS_PANE = register(new BlockItem(builder(), Blocks.GLASS_PANE)); public static final Item MELON = register(new BlockItem(builder(), Blocks.MELON)); public static final Item VINE = register(new BlockItem(builder(), Blocks.VINE)); @@ -771,6 +800,13 @@ public final class Items { public static final Item TARGET = register(new BlockItem(builder(), Blocks.TARGET)); public static final Item LEVER = register(new BlockItem(builder(), Blocks.LEVER)); public static final Item LIGHTNING_ROD = register(new BlockItem(builder(), Blocks.LIGHTNING_ROD)); + public static final Item EXPOSED_LIGHTNING_ROD = register(new BlockItem(builder(), Blocks.EXPOSED_LIGHTNING_ROD)); + public static final Item WEATHERED_LIGHTNING_ROD = register(new BlockItem(builder(), Blocks.WEATHERED_LIGHTNING_ROD)); + public static final Item OXIDIZED_LIGHTNING_ROD = register(new BlockItem(builder(), Blocks.OXIDIZED_LIGHTNING_ROD)); + public static final Item WAXED_LIGHTNING_ROD = register(new BlockItem(builder(), Blocks.WAXED_LIGHTNING_ROD)); + public static final Item WAXED_EXPOSED_LIGHTNING_ROD = register(new BlockItem(builder(), Blocks.WAXED_EXPOSED_LIGHTNING_ROD)); + public static final Item WAXED_WEATHERED_LIGHTNING_ROD = register(new BlockItem(builder(), Blocks.WAXED_WEATHERED_LIGHTNING_ROD)); + public static final Item WAXED_OXIDIZED_LIGHTNING_ROD = register(new BlockItem(builder(), Blocks.WAXED_OXIDIZED_LIGHTNING_ROD)); public static final Item DAYLIGHT_DETECTOR = register(new BlockItem(builder(), Blocks.DAYLIGHT_DETECTOR)); public static final Item SCULK_SENSOR = register(new BlockItem(builder(), Blocks.SCULK_SENSOR)); public static final Item CALIBRATED_SCULK_SENSOR = register(new BlockItem(builder(), Blocks.CALIBRATED_SCULK_SENSOR)); @@ -946,6 +982,11 @@ public final class Items { public static final Item WOODEN_PICKAXE = register(new Item("wooden_pickaxe", builder().attackDamage(2.0))); public static final Item WOODEN_AXE = register(new Item("wooden_axe", builder().attackDamage(7.0))); public static final Item WOODEN_HOE = register(new Item("wooden_hoe", builder().attackDamage(1.0))); + public static final Item COPPER_SWORD = register(new Item("copper_sword", builder().attackDamage(5.0))); + public static final Item COPPER_SHOVEL = register(new Item("copper_shovel", builder().attackDamage(3.5))); + public static final Item COPPER_PICKAXE = register(new Item("copper_pickaxe", builder().attackDamage(3.0))); + public static final Item COPPER_AXE = register(new Item("copper_axe", builder().attackDamage(9.0))); + public static final Item COPPER_HOE = register(new Item("copper_hoe", builder().attackDamage(1.0))); public static final Item STONE_SWORD = register(new Item("stone_sword", builder().attackDamage(5.0))); public static final Item STONE_SHOVEL = register(new Item("stone_shovel", builder().attackDamage(3.5))); public static final Item STONE_PICKAXE = register(new Item("stone_pickaxe", builder().attackDamage(3.0))); @@ -983,6 +1024,10 @@ public final class Items { public static final Item LEATHER_CHESTPLATE = register(new DyeableArmorItem("leather_chestplate", builder())); public static final Item LEATHER_LEGGINGS = register(new DyeableArmorItem("leather_leggings", builder())); public static final Item LEATHER_BOOTS = register(new DyeableArmorItem("leather_boots", builder())); + public static final Item COPPER_HELMET = register(new ArmorItem("copper_helmet", builder())); + public static final Item COPPER_CHESTPLATE = register(new ArmorItem("copper_chestplate", builder())); + public static final Item COPPER_LEGGINGS = register(new ArmorItem("copper_leggings", builder())); + public static final Item COPPER_BOOTS = register(new ArmorItem("copper_boots", builder())); public static final Item CHAINMAIL_HELMET = register(new ArmorItem("chainmail_helmet", builder())); public static final Item CHAINMAIL_CHESTPLATE = register(new ArmorItem("chainmail_chestplate", builder())); public static final Item CHAINMAIL_LEGGINGS = register(new ArmorItem("chainmail_leggings", builder())); @@ -1148,7 +1193,7 @@ public final class Items { public static final Item BLAZE_POWDER = register(new Item("blaze_powder", builder())); public static final Item MAGMA_CREAM = register(new Item("magma_cream", builder())); public static final Item BREWING_STAND = register(new BlockItem(builder(), Blocks.BREWING_STAND)); - public static final Item CAULDRON = register(new BlockItem(builder(), Blocks.CAULDRON, Blocks.LAVA_CAULDRON, Blocks.POWDER_SNOW_CAULDRON, Blocks.WATER_CAULDRON)); + public static final Item CAULDRON = register(new BlockItem(builder(), Blocks.CAULDRON, Blocks.WATER_CAULDRON, Blocks.POWDER_SNOW_CAULDRON, Blocks.LAVA_CAULDRON)); public static final Item ENDER_EYE = register(new Item("ender_eye", builder())); public static final Item GLISTERING_MELON_SLICE = register(new Item("glistering_melon_slice", builder())); public static final Item ARMADILLO_SPAWN_EGG = register(new SpawnEggItem("armadillo_spawn_egg", builder())); @@ -1164,6 +1209,7 @@ public final class Items { public static final Item CAVE_SPIDER_SPAWN_EGG = register(new SpawnEggItem("cave_spider_spawn_egg", builder())); public static final Item CHICKEN_SPAWN_EGG = register(new SpawnEggItem("chicken_spawn_egg", builder())); public static final Item COD_SPAWN_EGG = register(new SpawnEggItem("cod_spawn_egg", builder())); + public static final Item COPPER_GOLEM_SPAWN_EGG = register(new SpawnEggItem("copper_golem_spawn_egg", builder())); public static final Item COW_SPAWN_EGG = register(new SpawnEggItem("cow_spawn_egg", builder())); public static final Item CREEPER_SPAWN_EGG = register(new SpawnEggItem("creeper_spawn_egg", builder())); public static final Item DOLPHIN_SPAWN_EGG = register(new SpawnEggItem("dolphin_spawn_egg", builder())); @@ -1271,6 +1317,7 @@ public final class Items { public static final Item RABBIT_FOOT = register(new Item("rabbit_foot", builder())); public static final Item RABBIT_HIDE = register(new Item("rabbit_hide", builder())); public static final Item ARMOR_STAND = register(new Item("armor_stand", builder())); + public static final Item COPPER_HORSE_ARMOR = register(new Item("copper_horse_armor", builder())); public static final Item IRON_HORSE_ARMOR = register(new Item("iron_horse_armor", builder())); public static final Item GOLDEN_HORSE_ARMOR = register(new Item("golden_horse_armor", builder())); public static final Item DIAMOND_HORSE_ARMOR = register(new Item("diamond_horse_armor", builder())); @@ -1313,6 +1360,7 @@ public final class Items { public static final Item TOTEM_OF_UNDYING = register(new Item("totem_of_undying", builder())); public static final Item SHULKER_SHELL = register(new Item("shulker_shell", builder())); public static final Item IRON_NUGGET = register(new Item("iron_nugget", builder())); + public static final Item COPPER_NUGGET = register(new Item("copper_nugget", builder())); public static final Item KNOWLEDGE_BOOK = register(new Item("knowledge_book", builder())); public static final Item DEBUG_STICK = register(new Item("debug_stick", builder())); public static final Item MUSIC_DISC_13 = register(new Item("music_disc_13", builder())); @@ -1366,6 +1414,14 @@ public final class Items { public static final Item BELL = register(new BlockItem(builder(), Blocks.BELL)); public static final Item LANTERN = register(new BlockItem(builder(), Blocks.LANTERN)); public static final Item SOUL_LANTERN = register(new BlockItem(builder(), Blocks.SOUL_LANTERN)); + public static final Item COPPER_LANTERN = register(new BlockItem(builder(), Blocks.COPPER_LANTERN)); + public static final Item EXPOSED_COPPER_LANTERN = register(new BlockItem(builder(), Blocks.EXPOSED_COPPER_LANTERN)); + public static final Item WEATHERED_COPPER_LANTERN = register(new BlockItem(builder(), Blocks.WEATHERED_COPPER_LANTERN)); + public static final Item OXIDIZED_COPPER_LANTERN = register(new BlockItem(builder(), Blocks.OXIDIZED_COPPER_LANTERN)); + public static final Item WAXED_COPPER_LANTERN = register(new BlockItem(builder(), Blocks.WAXED_COPPER_LANTERN)); + public static final Item WAXED_EXPOSED_COPPER_LANTERN = register(new BlockItem(builder(), Blocks.WAXED_EXPOSED_COPPER_LANTERN)); + public static final Item WAXED_WEATHERED_COPPER_LANTERN = register(new BlockItem(builder(), Blocks.WAXED_WEATHERED_COPPER_LANTERN)); + public static final Item WAXED_OXIDIZED_COPPER_LANTERN = register(new BlockItem(builder(), Blocks.WAXED_OXIDIZED_COPPER_LANTERN)); public static final Item SWEET_BERRIES = register(new BlockItem("sweet_berries", builder(), Blocks.SWEET_BERRY_BUSH)); public static final Item GLOW_BERRIES = register(new BlockItem("glow_berries", builder(), Blocks.CAVE_VINES)); public static final Item CAMPFIRE = register(new BlockItem(builder(), Blocks.CAMPFIRE)); @@ -1477,6 +1533,22 @@ public final class Items { public static final Item WAXED_EXPOSED_COPPER_BULB = register(new BlockItem(builder(), Blocks.WAXED_EXPOSED_COPPER_BULB)); public static final Item WAXED_WEATHERED_COPPER_BULB = register(new BlockItem(builder(), Blocks.WAXED_WEATHERED_COPPER_BULB)); public static final Item WAXED_OXIDIZED_COPPER_BULB = register(new BlockItem(builder(), Blocks.WAXED_OXIDIZED_COPPER_BULB)); + public static final Item COPPER_CHEST = register(new BlockItem(builder(), Blocks.COPPER_CHEST)); + public static final Item EXPOSED_COPPER_CHEST = register(new BlockItem(builder(), Blocks.EXPOSED_COPPER_CHEST)); + public static final Item WEATHERED_COPPER_CHEST = register(new BlockItem(builder(), Blocks.WEATHERED_COPPER_CHEST)); + public static final Item OXIDIZED_COPPER_CHEST = register(new BlockItem(builder(), Blocks.OXIDIZED_COPPER_CHEST)); + public static final Item WAXED_COPPER_CHEST = register(new BlockItem(builder(), Blocks.WAXED_COPPER_CHEST)); + public static final Item WAXED_EXPOSED_COPPER_CHEST = register(new BlockItem(builder(), Blocks.WAXED_EXPOSED_COPPER_CHEST)); + public static final Item WAXED_WEATHERED_COPPER_CHEST = register(new BlockItem(builder(), Blocks.WAXED_WEATHERED_COPPER_CHEST)); + public static final Item WAXED_OXIDIZED_COPPER_CHEST = register(new BlockItem(builder(), Blocks.WAXED_OXIDIZED_COPPER_CHEST)); + public static final Item COPPER_GOLEM_STATUE = register(new BlockItem(builder(), Blocks.COPPER_GOLEM_STATUE)); + public static final Item EXPOSED_COPPER_GOLEM_STATUE = register(new BlockItem(builder(), Blocks.EXPOSED_COPPER_GOLEM_STATUE)); + public static final Item WEATHERED_COPPER_GOLEM_STATUE = register(new BlockItem(builder(), Blocks.WEATHERED_COPPER_GOLEM_STATUE)); + public static final Item OXIDIZED_COPPER_GOLEM_STATUE = register(new BlockItem(builder(), Blocks.OXIDIZED_COPPER_GOLEM_STATUE)); + public static final Item WAXED_COPPER_GOLEM_STATUE = register(new BlockItem(builder(), Blocks.WAXED_COPPER_GOLEM_STATUE)); + public static final Item WAXED_EXPOSED_COPPER_GOLEM_STATUE = register(new BlockItem(builder(), Blocks.WAXED_EXPOSED_COPPER_GOLEM_STATUE)); + public static final Item WAXED_WEATHERED_COPPER_GOLEM_STATUE = register(new BlockItem(builder(), Blocks.WAXED_WEATHERED_COPPER_GOLEM_STATUE)); + public static final Item WAXED_OXIDIZED_COPPER_GOLEM_STATUE = register(new BlockItem(builder(), Blocks.WAXED_OXIDIZED_COPPER_GOLEM_STATUE)); public static final Item TRIAL_SPAWNER = register(new BlockItem(builder(), Blocks.TRIAL_SPAWNER)); public static final Item TRIAL_KEY = register(new Item("trial_key", builder())); public static final Item OMINOUS_TRIAL_KEY = register(new Item("ominous_trial_key", builder())); diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/DataComponentHashers.java b/core/src/main/java/org/geysermc/geyser/item/hashing/DataComponentHashers.java index b3343c9bb..ca9840994 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/DataComponentHashers.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/DataComponentHashers.java @@ -74,6 +74,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.item.component.MobEffectIns import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ToolData; import org.geysermc.mcprotocollib.protocol.data.game.item.component.TooltipDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.TypedEntityData; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Unit; import org.geysermc.mcprotocollib.protocol.data.game.item.component.UseCooldown; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Weapon; @@ -213,9 +214,15 @@ public class DataComponentHashers { register(DataComponentTypes.TRIM, RegistryHasher.ARMOR_TRIM); register(DataComponentTypes.DEBUG_STICK_STATE, MinecraftHasher.NBT_MAP); - register(DataComponentTypes.ENTITY_DATA, MinecraftHasher.NBT_MAP); + registerMap(DataComponentTypes.ENTITY_DATA, builder -> builder + .accept("id", RegistryHasher.ENTITY_TYPE_KEY, TypedEntityData::type) + .inlineNbt(TypedEntityData::tag) + ); register(DataComponentTypes.BUCKET_ENTITY_DATA, MinecraftHasher.NBT_MAP); - register(DataComponentTypes.BLOCK_ENTITY_DATA, MinecraftHasher.NBT_MAP); + registerMap(DataComponentTypes.BLOCK_ENTITY_DATA, builder -> builder + .accept("id", RegistryHasher.BLOCK_ENTITY_TYPE_KEY, TypedEntityData::type) + .inlineNbt(TypedEntityData::tag) + ); register(DataComponentTypes.INSTRUMENT, RegistryHasher.INSTRUMENT_COMPONENT); register(DataComponentTypes.PROVIDES_TRIM_MATERIAL, RegistryHasher.PROVIDES_TRIM_MATERIAL); @@ -235,7 +242,7 @@ public class DataComponentHashers { .optional("flight_duration", MinecraftHasher.BYTE, fireworks -> (byte) fireworks.getFlightDuration(), (byte) 0) .optionalList("explosions", RegistryHasher.FIREWORK_EXPLOSION, Fireworks::getExplosions)); - register(DataComponentTypes.PROFILE, MinecraftHasher.GAME_PROFILE); + register(DataComponentTypes.PROFILE, MinecraftHasher.RESOLVABLE_PROFILE); register(DataComponentTypes.NOTE_BLOCK_SOUND, MinecraftHasher.KEY); register(DataComponentTypes.BANNER_PATTERNS, RegistryHasher.BANNER_PATTERN_LAYER.list()); register(DataComponentTypes.BASE_COLOR, MinecraftHasher.DYE_COLOR); diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/MapHasher.java b/core/src/main/java/org/geysermc/geyser/item/hashing/MapHasher.java index 2072ace29..187360308 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/MapHasher.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/MapHasher.java @@ -26,6 +26,8 @@ package org.geysermc.geyser.item.hashing; import com.google.common.hash.HashCode; +import org.cloudburstmc.nbt.NbtList; +import org.cloudburstmc.nbt.NbtMap; import java.util.HashMap; import java.util.List; @@ -67,6 +69,14 @@ public class MapHasher { return this; } + private MapHasher accept(String key, Object value, HashCode valueHash) { + if (unhashed != null) { + unhashed.put(key, value); + } + map.put(encoder.string(key), valueHash); + return this; + } + /** * Adds a constant {@link Value} to the map. * @@ -82,6 +92,25 @@ public class MapHasher { return accept(key, hasher.hash(value, encoder)); } + public MapHasher inlineNbt(Function extractor) { + NbtMap nbtMap = extractor.apply(object); + for (String key : nbtMap.keySet()) { + Object value = nbtMap.get(key); + if (value instanceof NbtList list) { + accept(key, value, encoder.nbtList(list)); + } else { + nbtMap.listenForNumber(key, n -> accept(key, value, encoder.number(n))); + nbtMap.listenForString(key, s -> accept(key, value, encoder.string(s))); + nbtMap.listenForCompound(key, compound -> accept(key, value, encoder.nbtMap(compound))); + + nbtMap.listenForByteArray(key, bytes -> accept(key, value, encoder.byteArray(bytes))); + nbtMap.listenForIntArray(key, ints -> accept(key, value, encoder.intArray(ints))); + nbtMap.listenForLongArray(key, longs -> accept(key, value, encoder.longArray(longs))); + } + } + return this; + } + /** * Extracts a {@link Value} from a {@link Type} using the {@code extractor}, and adds it to the map. * diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/MinecraftHasher.java b/core/src/main/java/org/geysermc/geyser/item/hashing/MinecraftHasher.java index 08c79c049..7f135e2d6 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/MinecraftHasher.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/MinecraftHasher.java @@ -37,6 +37,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.protocol.data.game.entity.EquipmentSlot; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.GlobalPos; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Filterable; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemAttributeModifiers; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Unit; @@ -45,6 +46,7 @@ import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.UUID; import java.util.function.BiFunction; import java.util.function.Function; @@ -131,10 +133,15 @@ public interface MinecraftHasher { .accept("value", STRING, GameProfile.Property::getValue) .optionalNullable("signature", STRING, GameProfile.Property::getSignature)); - MinecraftHasher GAME_PROFILE = mapBuilder(builder -> builder - .optionalNullable("name", STRING, GameProfile::getName) - .optionalNullable("id", UUID, GameProfile::getId) - .optionalList("properties", GAME_PROFILE_PROPERTY, GameProfile::getProperties)); + MinecraftHasher RESOLVABLE_PROFILE = mapBuilder(builder -> builder + .optionalNullable("name", STRING, resolvableProfile -> resolvableProfile.getProfile().getName()) + .optionalNullable("id", UUID, resolvableProfile -> resolvableProfile.getProfile().getId()) + .optionalList("properties", GAME_PROFILE_PROPERTY, resolvableProfile -> resolvableProfile.getProfile().getProperties()) + .optionalNullable("texture", KEY, ResolvableProfile::getBody) + .optionalNullable("cape", KEY, ResolvableProfile::getCape) + .optionalNullable("elytra", KEY, ResolvableProfile::getElytra) + .optional("model", STRING, resolvableProfile -> Optional.ofNullable(resolvableProfile.getModel()).map(GameProfile.TextureModel::name)) + ); MinecraftHasher RARITY = fromIdEnum(Rarity.values(), Rarity::getName); diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/RegistryHasher.java b/core/src/main/java/org/geysermc/geyser/item/hashing/RegistryHasher.java index cd72874e5..85916592c 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/RegistryHasher.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/RegistryHasher.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.item.hashing; import com.google.common.hash.HashCode; import net.kyori.adventure.key.Key; -import org.cloudburstmc.nbt.NbtMap; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.item.hashing.data.ConsumeEffectType; import org.geysermc.geyser.item.hashing.data.FireworkExplosionShape; @@ -74,6 +73,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.item.component.ProvidesTrim import org.geysermc.mcprotocollib.protocol.data.game.item.component.SuspiciousStewEffect; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ToolData; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Unit; +import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; import org.geysermc.mcprotocollib.protocol.data.game.level.sound.BuiltinSound; import org.geysermc.mcprotocollib.protocol.data.game.level.sound.CustomSound; import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound; @@ -110,6 +110,10 @@ public interface RegistryHasher extends MinecraftHasher { RegistryHasher ENTITY_TYPE = enumIdRegistry(EntityType.values()); + MinecraftHasher ENTITY_TYPE_KEY = enumRegistry(); + + MinecraftHasher BLOCK_ENTITY_TYPE_KEY = enumRegistry(); + RegistryHasher ENCHANTMENT = registry(JavaRegistries.ENCHANTMENT); RegistryHasher ATTRIBUTE = enumIdRegistry(AttributeType.Builtin.values(), AttributeType::getIdentifier); @@ -346,7 +350,8 @@ public interface RegistryHasher extends MinecraftHasher { .optional("has_twinkle", BOOL, Fireworks.FireworkExplosion::isHasTwinkle, false)); MinecraftHasher BEEHIVE_OCCUPANT = MinecraftHasher.mapBuilder(builder -> builder - .optional("entity_data", NBT_MAP, BeehiveOccupant::getEntityData, NbtMap.EMPTY) + .accept("id", RegistryHasher.ENTITY_TYPE_KEY, beehiveOccupant -> beehiveOccupant.getEntityData().type()) + .inlineNbt(beehiveOccupant -> beehiveOccupant.getEntityData().tag()) .accept("ticks_in_hive", INT, BeehiveOccupant::getTicksInHive) .accept("min_ticks_in_hive", INT, BeehiveOccupant::getMinTicksInHive)); diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/data/FireworkExplosionShape.java b/core/src/main/java/org/geysermc/geyser/item/hashing/data/FireworkExplosionShape.java index 316253e3e..bc880ef85 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/data/FireworkExplosionShape.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/data/FireworkExplosionShape.java @@ -25,11 +25,22 @@ package org.geysermc.geyser.item.hashing.data; +import java.util.Locale; + // Ordered and named by Java ID public enum FireworkExplosionShape { SMALL_BALL, LARGE_BALL, STAR, CREEPER, - BURST + BURST; + + public static FireworkExplosionShape fromJavaIdentifier(String identifier) { + for (FireworkExplosionShape shape : values()) { + if (shape.name().toLowerCase(Locale.ROOT).equals(identifier)) { + return shape; + } + } + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java b/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java new file mode 100644 index 000000000..69b330791 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.item.parser; + +import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; +import net.kyori.adventure.key.Key; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtMapBuilder; +import org.cloudburstmc.nbt.NbtType; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.inventory.item.DyeColor; +import org.geysermc.geyser.inventory.item.Potion; +import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.hashing.data.FireworkExplosionShape; +import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.translator.item.BedrockItemBuilder; +import org.geysermc.geyser.translator.item.ItemTranslator; +import org.geysermc.geyser.translator.level.block.entity.SkullBlockEntityTranslator; +import org.geysermc.geyser.util.MinecraftKey; +import org.geysermc.mcprotocollib.protocol.data.game.Holder; +import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.CustomModelData; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.Fireworks; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +/** + * Utility class to parse an item stack, or a data component patch, from NBT data. + * + *

This class does NOT parse all possible data components in a data component patch, only those that + * can visually change the way an item looks. This class should/is usually used for parsing block entity NBT data, + * such as for vault or shelf block entities.

+ * + *

Be sure to update this class for Java updates!

+ */ +// Lots of unchecked casting happens here. It should all be handled properly. +@SuppressWarnings("unchecked") +// TODO only log some things once (like was done in vault translator) +public final class ItemStackParser { + private static final Map, DataComponentParser> PARSERS = new Reference2ObjectOpenHashMap<>(); + + // We need the rawClass parameter here because the Raw type can't be inferred from the parser alone + private static void register(DataComponentType component, Class rawClass, DataComponentParser parser) { + if (PARSERS.containsKey(component)) { + throw new IllegalStateException("Duplicate data component parser registered for " + component); + } + PARSERS.put(component, parser); + } + + private static void registerSimple(DataComponentType component, Class rawClass, Function parser) { + register(component, rawClass, (session, raw) -> parser.apply(raw)); + } + + private static void registerSimple(DataComponentType component, Class parsedClass) { + registerSimple(component, parsedClass, Function.identity()); + } + + private static int javaItemIdentifierToNetworkId(String identifier) { + if (identifier == null || identifier.isEmpty()) { + return Items.AIR_ID; + } + + Item item = Registries.JAVA_ITEM_IDENTIFIERS.get(identifier); + if (item == null) { + GeyserImpl.getInstance().getLogger().warning("Received unknown item ID " + identifier + " whilst parsing NBT item stack!"); + return Items.AIR_ID; + } + return item.javaId(); + } + + private static ItemEnchantments parseEnchantments(GeyserSession session, NbtMap map) { + Int2IntMap enchantments = new Int2IntOpenHashMap(map.size()); + for (Map.Entry entry : map.entrySet()) { + enchantments.put(JavaRegistries.ENCHANTMENT.networkId(session, MinecraftKey.key(entry.getKey())), (int) entry.getValue()); + } + return new ItemEnchantments(enchantments); + } + + static { + // The various ignored null-warnings are for things that should never be null as they shouldn't be missing from the data component + // If they are null an exception will be thrown, but this will be caught with an error message logged + + register(DataComponentTypes.BANNER_PATTERNS, List.class, (session, raw) -> { + List casted = (List) raw; + List layers = new ArrayList<>(); + for (NbtMap layer : casted) { + DyeColor colour = DyeColor.getByJavaIdentifier(layer.getString("color")); + + // Patterns can be an ID or inline + Object pattern = layer.get("pattern"); + Holder patternHolder; + if (pattern instanceof String id) { + patternHolder = Holder.ofId(JavaRegistries.BANNER_PATTERN.networkId(session, MinecraftKey.key(id))); + } else { + NbtMap inline = (NbtMap) pattern; + Key assetId = MinecraftKey.key(inline.getString("asset_id")); + String translationKey = inline.getString("translation_key"); + patternHolder = Holder.ofCustom(new BannerPatternLayer.BannerPattern(assetId, translationKey)); + } + layers.add(new BannerPatternLayer(patternHolder, colour.ordinal())); + } + return layers; + }); + registerSimple(DataComponentTypes.BASE_COLOR, String.class, raw -> DyeColor.getByJavaIdentifier(raw).ordinal()); + register(DataComponentTypes.CHARGED_PROJECTILES, List.class, + (session, projectiles) -> projectiles.stream() + .map(object -> parseItemStack(session, (NbtMap) object)) + .toList()); + registerSimple(DataComponentTypes.CUSTOM_MODEL_DATA, NbtMap.class, raw -> { + List floats = raw.getList("floats", NbtType.FLOAT); + List flags = raw.getList("flags", NbtType.BYTE).stream().map(b -> b != 0).toList(); + List strings = raw.getList("strings", NbtType.STRING); + List colours = raw.getList("colors", NbtType.INT); + return new CustomModelData(floats, flags, strings, colours); + }); + registerSimple(DataComponentTypes.DYED_COLOR, Integer.class); + registerSimple(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, Boolean.class); + register(DataComponentTypes.ENCHANTMENTS, NbtMap.class, ItemStackParser::parseEnchantments); + registerSimple(DataComponentTypes.FIREWORK_EXPLOSION, NbtMap.class, raw -> { + FireworkExplosionShape shape = FireworkExplosionShape.fromJavaIdentifier(raw.getString("shape")); + List colours = raw.getList("colors", NbtType.INT); + List fadeColours = raw.getList("fade_colors", NbtType.INT); + boolean hasTrail = raw.getBoolean("has_trail"); + boolean hasTwinkle = raw.getBoolean("has_twinkle"); + return new Fireworks.FireworkExplosion(shape.ordinal(), + colours.stream() + .mapToInt(i -> i) // We need to do this because MCPL wants an int[] array + .toArray(), + fadeColours.stream() + .mapToInt(i -> i) + .toArray(), + hasTrail, hasTwinkle); + }); + registerSimple(DataComponentTypes.ITEM_MODEL, String.class, MinecraftKey::key); + registerSimple(DataComponentTypes.MAP_COLOR, Integer.class); + registerSimple(DataComponentTypes.POT_DECORATIONS, List.class, list -> list.stream() + .map(item -> javaItemIdentifierToNetworkId((String) item)) + .toList()); + register(DataComponentTypes.POTION_CONTENTS, NbtMap.class, (session, map) -> { + Potion potion = Potion.getByJavaIdentifier(map.getString("potion")); + int customColour = map.getInt("custom_color", -1); + // Not reading custom effects + String customName = map.getString("custom_name", null); + return new PotionContents(potion == null ? -1 : potion.ordinal(), customColour, List.of(), customName); + }); + registerSimple(DataComponentTypes.PROFILE, NbtMap.class, SkullBlockEntityTranslator::parseResolvableProfile); + register(DataComponentTypes.STORED_ENCHANTMENTS, NbtMap.class, ItemStackParser::parseEnchantments); + } + + private static void parseDataComponent(GeyserSession session, DataComponents patch, DataComponentType type, + DataComponentParser parser, Object raw) { + try { + patch.put((DataComponentType) type, parser.parse(session, (Raw) raw)); + } catch (ClassCastException exception) { + GeyserImpl.getInstance().getLogger().error("Received incorrect object type for component " + type + "!", exception); + } catch (Exception exception) { + GeyserImpl.getInstance().getLogger().error("Failed to parse component" + type + " from " + raw + "!", exception); + } + } + + public static @Nullable DataComponents parseDataComponentPatch(GeyserSession session, @Nullable NbtMap map) { + if (map == null || map.isEmpty()) { + return null; + } + + DataComponents patch = new DataComponents(new Reference2ObjectOpenHashMap<>()); + try { + for (Map.Entry patchEntry : map.entrySet()) { + String rawType = patchEntry.getKey(); + // When a component starts with a '!', indicates removal of the component from the default component set + boolean removal = rawType.startsWith("!"); + if (removal) { + rawType = rawType.substring(1); + } + + DataComponentType type = DataComponentTypes.fromKey(MinecraftKey.key(rawType)); + if (type == null) { + GeyserImpl.getInstance().getLogger().warning("Received unknown data component " + rawType + " in NBT data component patch: " + map); + } else if (removal) { + // Removals are easy, we don't have to parse anything + patch.put(type, null); + } else { + DataComponentParser parser = PARSERS.get(type); + if (parser != null) { + parseDataComponent(session, patch, type, parser, patchEntry.getValue()); + } else { + GeyserImpl.getInstance().getLogger().debug("Ignoring data component " + type + " whilst parsing NBT patch because there is no parser registered for it"); + } + } + } + } catch (Exception exception) { + GeyserImpl.getInstance().getLogger().error("Failed to parse data component patch from NBT data!", exception); + } + + return patch; + } + + public static ItemStack parseItemStack(GeyserSession session, @Nullable NbtMap map) { + if (map == null) { + return new ItemStack(Items.AIR_ID); + } + + try { + int id = javaItemIdentifierToNetworkId(map.getString("id")); + int count = map.getInt("count"); + DataComponents patch = parseDataComponentPatch(session, map.getCompound("components")); + return new ItemStack(id, count, patch); + } catch (Exception exception) { + GeyserImpl.getInstance().getLogger().error("Failed to parse item stack from NBT data!", exception); + } + return new ItemStack(Items.AIR_ID); + } + + /** + * Shorthand method for calling the following methods: + * + *
    + *
  • {@link ItemStackParser#parseItemStack(GeyserSession, NbtMap)}
  • + *
  • {@link ItemTranslator#translateToBedrock(GeyserSession, ItemStack)}
  • + *
  • {@link BedrockItemBuilder#createItemNbt(ItemData)}
  • + *
+ */ + public static NbtMapBuilder javaItemStackToBedrock(GeyserSession session, @Nullable NbtMap map) { + return BedrockItemBuilder.createItemNbt(ItemTranslator.translateToBedrock(session, parseItemStack(session, map))); + } + + private ItemStackParser() {} + + @FunctionalInterface + private interface DataComponentParser { + + Parsed parse(GeyserSession session, Raw raw) throws Exception; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java index 9eb95e4fb..27224f027 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java @@ -52,11 +52,8 @@ public class CrossbowItem extends Item { if (chargedProjectiles != null && !chargedProjectiles.isEmpty()) { ItemStack javaProjectile = chargedProjectiles.get(0); - ItemMapping projectileMapping = session.getItemMappings().getMapping(javaProjectile.getId()); ItemData itemData = ItemTranslator.translateToBedrock(session, javaProjectile); - - NbtMapBuilder newProjectile = BedrockItemBuilder.createItemNbt(projectileMapping, itemData.getCount(), itemData.getDamage()); - + NbtMapBuilder newProjectile = BedrockItemBuilder.createItemNbt(itemData); builder.putCompound("chargedItem", newProjectile.build()); } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/Item.java b/core/src/main/java/org/geysermc/geyser/item/type/Item.java index 84d3e37fb..7c614255a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/Item.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/Item.java @@ -45,6 +45,7 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; @@ -53,6 +54,7 @@ import org.geysermc.geyser.util.MinecraftKey; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; import org.jetbrains.annotations.UnmodifiableView; @@ -101,6 +103,14 @@ public class Item { return baseComponents.getOrDefault(DataComponentTypes.MAX_STACK_SIZE, 1); } + public boolean is(GeyserSession session, Tag tag) { + return session.getTagCache().is(tag, javaId); + } + + public boolean is(GeyserSession session, HolderSet set) { + return session.getTagCache().is(set, JavaRegistries.ITEM, javaId); + } + /** * Returns an unmodifiable {@link DataComponents} view containing known data components. * Optionally, additional components can be provided to replace (or add to) diff --git a/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java index 1ead9f2ad..5184e7ac6 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java @@ -30,10 +30,12 @@ import org.geysermc.geyser.item.TooltipOptions; import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.skin.SkinManager; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.auth.GameProfile; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; @@ -49,18 +51,25 @@ public class PlayerHeadItem extends BlockItem { // Use the correct color, determined by the rarity of the item char rarity = Rarity.fromId(components.getOrDefault(DataComponentTypes.RARITY, Rarity.COMMON.ordinal())).getColor(); - GameProfile profile = components.get(DataComponentTypes.PROFILE); + ResolvableProfile profile = components.get(DataComponentTypes.PROFILE); if (profile != null) { - String name = profile.getName(); - if (name != null) { - // Add correct name of player skull - String displayName = ChatColor.RESET + ChatColor.ESCAPE + rarity + + // Ideally we'd update the item once the profile is resolved, + // but there's no good way of doing this as we don't know where the item is in an inventory after we have translated it + // So, we request a resolve here, and if the profile has already been resolved it will be returned instantly from cache. + // If not, the next time the item will be translated the profile will probably have been resolved + GameProfile resolved = SkinManager.resolveProfile(profile).getNow(null); + if (resolved != null) { + String name = resolved.getName(); + if (name != null) { + // Add correct name of player skull + String displayName = ChatColor.RESET + ChatColor.ESCAPE + rarity + MinecraftLocale.getLocaleString("block.minecraft.player_head.named", session.locale()).replace("%s", name); - builder.setCustomName(displayName); - } else { - // No name found so default to "Player Head" - builder.setCustomName(ChatColor.RESET + ChatColor.ESCAPE + rarity + + builder.setCustomName(displayName); + } else { + // No name found so default to "Player Head" + builder.setCustomName(ChatColor.RESET + ChatColor.ESCAPE + rarity + MinecraftLocale.getLocaleString("block.minecraft.player_head", session.locale())); + } } } } diff --git a/core/src/main/java/org/geysermc/geyser/level/GameRule.java b/core/src/main/java/org/geysermc/geyser/level/GameRule.java index 8a1af095a..a77d5f09c 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GameRule.java +++ b/core/src/main/java/org/geysermc/geyser/level/GameRule.java @@ -68,7 +68,12 @@ public enum GameRule { SPAWNRADIUS("spawnRadius", 10), SPECTATORSGENERATECHUNKS("spectatorsGenerateChunks", true), // JE only UNIVERSALANGER("universalAnger", false), - LOCATORBAR("locatorBar", true); + LOCATORBAR("locatorBar", true), + ALLOWENTERINGNETHERUSINGPORTALS("allowEnteringNetherUsingPortals", true), // JE only + COMMANDBLOCKSENABLED("commandBlocksEnabled", true), + PVP("pvp", true), + SPAWNMONSTERS("spawnMonsters", true), + SPAWNERBLOCKSENABLED("spawnerBlocksEnabled", true); public static final GameRule[] VALUES = values(); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java b/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java index 2f3cdfa00..875328738 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java @@ -25,10 +25,24 @@ package org.geysermc.geyser.level.block; -import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.block.property.ChestType; import org.geysermc.geyser.level.block.property.FrontAndTop; -import org.geysermc.geyser.level.block.type.*; +import org.geysermc.geyser.level.block.type.BannerBlock; +import org.geysermc.geyser.level.block.type.BedBlock; +import org.geysermc.geyser.level.block.type.Block; +import org.geysermc.geyser.level.block.type.ButtonBlock; +import org.geysermc.geyser.level.block.type.CauldronBlock; +import org.geysermc.geyser.level.block.type.ChestBlock; +import org.geysermc.geyser.level.block.type.DoorBlock; +import org.geysermc.geyser.level.block.type.FlowerPotBlock; +import org.geysermc.geyser.level.block.type.FurnaceBlock; +import org.geysermc.geyser.level.block.type.LecternBlock; +import org.geysermc.geyser.level.block.type.MovingPistonBlock; +import org.geysermc.geyser.level.block.type.PistonBlock; +import org.geysermc.geyser.level.block.type.SkullBlock; +import org.geysermc.geyser.level.block.type.TrapDoorBlock; +import org.geysermc.geyser.level.block.type.WallSkullBlock; +import org.geysermc.geyser.level.block.type.WaterBlock; import org.geysermc.geyser.level.physics.Axis; import org.geysermc.geyser.level.physics.Direction; import org.geysermc.geyser.level.physics.PistonBehavior; @@ -329,12 +343,12 @@ public final class Blocks { public static final Block SHORT_DRY_GRASS = register(new Block("short_dry_grass", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block TALL_DRY_GRASS = register(new Block("tall_dry_grass", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block SEAGRASS = register(new Block("seagrass", builder().pushReaction(PistonBehavior.DESTROY))); - public static final Block TALL_SEAGRASS = register(new Block("tall_seagrass", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.SEAGRASS) + public static final Block TALL_SEAGRASS = register(new Block("tall_seagrass", builder().pushReaction(PistonBehavior.DESTROY) .enumState(DOUBLE_BLOCK_HALF))); public static final Block PISTON = register(new PistonBlock("piston", builder().destroyTime(1.5f).pushReaction(PistonBehavior.BLOCK) .booleanState(EXTENDED) .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); - public static final Block PISTON_HEAD = register(new PistonHeadBlock("piston_head", builder().destroyTime(1.5f).pushReaction(PistonBehavior.BLOCK) + public static final Block PISTON_HEAD = register(new Block("piston_head", builder().destroyTime(1.5f).pushReaction(PistonBehavior.BLOCK) .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) .booleanState(SHORT) .enumState(PISTON_TYPE))); @@ -381,12 +395,72 @@ public final class Blocks { public static final Block BOOKSHELF = register(new Block("bookshelf", builder().destroyTime(1.5f))); public static final Block CHISELED_BOOKSHELF = register(new Block("chiseled_bookshelf", builder().setBlockEntity(BlockEntityType.CHISELED_BOOKSHELF).destroyTime(1.5f) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(CHISELED_BOOKSHELF_SLOT_0_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_1_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_2_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_3_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_4_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_5_OCCUPIED))); + .booleanState(SLOT_0_OCCUPIED) + .booleanState(SLOT_1_OCCUPIED) + .booleanState(SLOT_2_OCCUPIED) + .booleanState(SLOT_3_OCCUPIED) + .booleanState(SLOT_4_OCCUPIED) + .booleanState(SLOT_5_OCCUPIED))); + public static final Block ACACIA_SHELF = register(new Block("acacia_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block BAMBOO_SHELF = register(new Block("bamboo_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block BIRCH_SHELF = register(new Block("birch_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block CHERRY_SHELF = register(new Block("cherry_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block CRIMSON_SHELF = register(new Block("crimson_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block DARK_OAK_SHELF = register(new Block("dark_oak_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block JUNGLE_SHELF = register(new Block("jungle_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block MANGROVE_SHELF = register(new Block("mangrove_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block OAK_SHELF = register(new Block("oak_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_SHELF = register(new Block("pale_oak_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block SPRUCE_SHELF = register(new Block("spruce_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); + public static final Block WARPED_SHELF = register(new Block("warped_shelf", builder().setBlockEntity(BlockEntityType.SHELF).destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED) + .enumState(SIDE_CHAIN_PART) + .booleanState(WATERLOGGED))); public static final Block MOSSY_COBBLESTONE = register(new Block("mossy_cobblestone", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block OBSIDIAN = register(new Block("obsidian", builder().requiresCorrectToolForDrops().destroyTime(50.0f))); public static final Block TORCH = register(new Block("torch", builder().pushReaction(PistonBehavior.DESTROY))); @@ -400,7 +474,7 @@ public final class Blocks { .booleanState(UP) .booleanState(WEST))); public static final Block SOUL_FIRE = register(new Block("soul_fire", builder().pushReaction(PistonBehavior.DESTROY))); - public static final Block SPAWNER = register(new SpawnerBlock("spawner", builder().setBlockEntity(BlockEntityType.MOB_SPAWNER).requiresCorrectToolForDrops().destroyTime(5.0f))); + public static final Block SPAWNER = register(new Block("spawner", builder().setBlockEntity(BlockEntityType.MOB_SPAWNER).requiresCorrectToolForDrops().destroyTime(5.0f))); public static final Block CREAKING_HEART = register(new Block("creaking_heart", builder().setBlockEntity(BlockEntityType.CREAKING_HEART).destroyTime(10.0f) .enumState(AXIS, Axis.VALUES) .enumState(CREAKING_HEART_STATE) @@ -665,6 +739,9 @@ public final class Blocks { public static final Block SOUL_TORCH = register(new Block("soul_torch", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block SOUL_WALL_TORCH = register(new Block("soul_wall_torch", builder().pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + public static final Block COPPER_TORCH = register(new Block("copper_torch", builder().pushReaction(PistonBehavior.DESTROY))); + public static final Block COPPER_WALL_TORCH = register(new Block("copper_wall_torch", builder().pushReaction(PistonBehavior.DESTROY) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block GLOWSTONE = register(new Block("glowstone", builder().destroyTime(0.3f))); public static final Block NETHER_PORTAL = register(new Block("nether_portal", builder().destroyTime(-1.0f).pushReaction(PistonBehavior.BLOCK) .enumState(HORIZONTAL_AXIS, Axis.X, Axis.Z))); @@ -794,7 +871,79 @@ public final class Blocks { .booleanState(SOUTH) .booleanState(WATERLOGGED) .booleanState(WEST))); - public static final Block CHAIN = register(new Block("chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + public static final Block COPPER_BARS = register(new Block("copper_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block EXPOSED_COPPER_BARS = register(new Block("exposed_copper_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block WEATHERED_COPPER_BARS = register(new Block("weathered_copper_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block OXIDIZED_COPPER_BARS = register(new Block("oxidized_copper_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block WAXED_COPPER_BARS = register(new Block("waxed_copper_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block WAXED_EXPOSED_COPPER_BARS = register(new Block("waxed_exposed_copper_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block WAXED_WEATHERED_COPPER_BARS = register(new Block("waxed_weathered_copper_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block WAXED_OXIDIZED_COPPER_BARS = register(new Block("waxed_oxidized_copper_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block IRON_CHAIN = register(new Block("iron_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); + public static final Block COPPER_CHAIN = register(new Block("copper_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); + public static final Block EXPOSED_COPPER_CHAIN = register(new Block("exposed_copper_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WEATHERED_COPPER_CHAIN = register(new Block("weathered_copper_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); + public static final Block OXIDIZED_COPPER_CHAIN = register(new Block("oxidized_copper_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WAXED_COPPER_CHAIN = register(new Block("waxed_copper_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WAXED_EXPOSED_COPPER_CHAIN = register(new Block("waxed_exposed_copper_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WAXED_WEATHERED_COPPER_CHAIN = register(new Block("waxed_weathered_copper_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WAXED_OXIDIZED_COPPER_CHAIN = register(new Block("waxed_oxidized_copper_chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) .enumState(AXIS, Axis.VALUES) .booleanState(WATERLOGGED))); public static final Block GLASS_PANE = register(new Block("glass_pane", builder().destroyTime(0.3f) @@ -805,9 +954,9 @@ public final class Blocks { .booleanState(WEST))); public static final Block PUMPKIN = register(new Block("pumpkin", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY))); public static final Block MELON = register(new Block("melon", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY))); - public static final Block ATTACHED_PUMPKIN_STEM = register(new Block("attached_pumpkin_stem", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.PUMPKIN_SEEDS) + public static final Block ATTACHED_PUMPKIN_STEM = register(new Block("attached_pumpkin_stem", builder().pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); - public static final Block ATTACHED_MELON_STEM = register(new Block("attached_melon_stem", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.MELON_SEEDS) + public static final Block ATTACHED_MELON_STEM = register(new Block("attached_melon_stem", builder().pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block PUMPKIN_STEM = register(new Block("pumpkin_stem", builder().pushReaction(PistonBehavior.DESTROY) .intState(AGE_7))); @@ -1797,7 +1946,7 @@ public final class Blocks { public static final Block BLACK_CONCRETE_POWDER = register(new Block("black_concrete_powder", builder().destroyTime(0.5f))); public static final Block KELP = register(new Block("kelp", builder().pushReaction(PistonBehavior.DESTROY) .intState(AGE_25))); - public static final Block KELP_PLANT = register(new Block("kelp_plant", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.KELP))); + public static final Block KELP_PLANT = register(new Block("kelp_plant", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block DRIED_KELP_BLOCK = register(new Block("dried_kelp_block", builder().destroyTime(0.5f))); public static final Block TURTLE_EGG = register(new Block("turtle_egg", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .intState(EGGS) @@ -1894,7 +2043,7 @@ public final class Blocks { public static final Block BLUE_ICE = register(new Block("blue_ice", builder().destroyTime(2.8f))); public static final Block CONDUIT = register(new Block("conduit", builder().setBlockEntity(BlockEntityType.CONDUIT).destroyTime(3.0f) .booleanState(WATERLOGGED))); - public static final Block BAMBOO_SAPLING = register(new Block("bamboo_sapling", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.BAMBOO))); + public static final Block BAMBOO_SAPLING = register(new Block("bamboo_sapling", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY))); public static final Block BAMBOO = register(new Block("bamboo", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) .intState(AGE_1) .enumState(BAMBOO_LEAVES) @@ -2141,6 +2290,30 @@ public final class Blocks { public static final Block SOUL_LANTERN = register(new Block("soul_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(HANGING) .booleanState(WATERLOGGED))); + public static final Block COPPER_LANTERN = register(new Block("copper_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(HANGING) + .booleanState(WATERLOGGED))); + public static final Block EXPOSED_COPPER_LANTERN = register(new Block("exposed_copper_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(HANGING) + .booleanState(WATERLOGGED))); + public static final Block WEATHERED_COPPER_LANTERN = register(new Block("weathered_copper_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(HANGING) + .booleanState(WATERLOGGED))); + public static final Block OXIDIZED_COPPER_LANTERN = register(new Block("oxidized_copper_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(HANGING) + .booleanState(WATERLOGGED))); + public static final Block WAXED_COPPER_LANTERN = register(new Block("waxed_copper_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(HANGING) + .booleanState(WATERLOGGED))); + public static final Block WAXED_EXPOSED_COPPER_LANTERN = register(new Block("waxed_exposed_copper_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(HANGING) + .booleanState(WATERLOGGED))); + public static final Block WAXED_WEATHERED_COPPER_LANTERN = register(new Block("waxed_weathered_copper_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(HANGING) + .booleanState(WATERLOGGED))); + public static final Block WAXED_OXIDIZED_COPPER_LANTERN = register(new Block("waxed_oxidized_copper_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(HANGING) + .booleanState(WATERLOGGED))); public static final Block CAMPFIRE = register(new Block("campfire", builder().setBlockEntity(BlockEntityType.CAMPFIRE).destroyTime(2.0f) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .booleanState(LIT) @@ -2179,10 +2352,10 @@ public final class Blocks { public static final Block SHROOMLIGHT = register(new Block("shroomlight", builder().destroyTime(1.0f))); public static final Block WEEPING_VINES = register(new Block("weeping_vines", builder().pushReaction(PistonBehavior.DESTROY) .intState(AGE_25))); - public static final Block WEEPING_VINES_PLANT = register(new Block("weeping_vines_plant", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.WEEPING_VINES))); + public static final Block WEEPING_VINES_PLANT = register(new Block("weeping_vines_plant", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block TWISTING_VINES = register(new Block("twisting_vines", builder().pushReaction(PistonBehavior.DESTROY) .intState(AGE_25))); - public static final Block TWISTING_VINES_PLANT = register(new Block("twisting_vines_plant", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.TWISTING_VINES))); + public static final Block TWISTING_VINES_PLANT = register(new Block("twisting_vines_plant", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block CRIMSON_ROOTS = register(new Block("crimson_roots", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block CRIMSON_PLANKS = register(new Block("crimson_planks", builder().destroyTime(2.0f))); public static final Block WARPED_PLANKS = register(new Block("warped_planks", builder().destroyTime(2.0f))); @@ -2289,7 +2462,7 @@ public final class Blocks { public static final Block BEEHIVE = register(new Block("beehive", builder().setBlockEntity(BlockEntityType.BEEHIVE).destroyTime(0.6f) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .intState(LEVEL_HONEY))); - public static final Block HONEY_BLOCK = register(new HoneyBlock("honey_block", builder())); + public static final Block HONEY_BLOCK = register(new Block("honey_block", builder())); public static final Block HONEYCOMB_BLOCK = register(new Block("honeycomb_block", builder().destroyTime(0.6f))); public static final Block NETHERITE_BLOCK = register(new Block("netherite_block", builder().requiresCorrectToolForDrops().destroyTime(50.0f))); public static final Block ANCIENT_DEBRIS = register(new Block("ancient_debris", builder().requiresCorrectToolForDrops().destroyTime(30.0f))); @@ -2429,39 +2602,39 @@ public final class Blocks { .intState(CANDLES) .booleanState(LIT) .booleanState(WATERLOGGED))); - public static final Block CANDLE_CAKE = register(new Block("candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block CANDLE_CAKE = register(new Block("candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block WHITE_CANDLE_CAKE = register(new Block("white_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block WHITE_CANDLE_CAKE = register(new Block("white_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block ORANGE_CANDLE_CAKE = register(new Block("orange_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block ORANGE_CANDLE_CAKE = register(new Block("orange_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block MAGENTA_CANDLE_CAKE = register(new Block("magenta_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block MAGENTA_CANDLE_CAKE = register(new Block("magenta_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block LIGHT_BLUE_CANDLE_CAKE = register(new Block("light_blue_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block LIGHT_BLUE_CANDLE_CAKE = register(new Block("light_blue_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block YELLOW_CANDLE_CAKE = register(new Block("yellow_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block YELLOW_CANDLE_CAKE = register(new Block("yellow_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block LIME_CANDLE_CAKE = register(new Block("lime_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block LIME_CANDLE_CAKE = register(new Block("lime_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block PINK_CANDLE_CAKE = register(new Block("pink_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block PINK_CANDLE_CAKE = register(new Block("pink_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block GRAY_CANDLE_CAKE = register(new Block("gray_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block GRAY_CANDLE_CAKE = register(new Block("gray_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block LIGHT_GRAY_CANDLE_CAKE = register(new Block("light_gray_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block LIGHT_GRAY_CANDLE_CAKE = register(new Block("light_gray_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block CYAN_CANDLE_CAKE = register(new Block("cyan_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block CYAN_CANDLE_CAKE = register(new Block("cyan_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block PURPLE_CANDLE_CAKE = register(new Block("purple_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block PURPLE_CANDLE_CAKE = register(new Block("purple_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block BLUE_CANDLE_CAKE = register(new Block("blue_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block BLUE_CANDLE_CAKE = register(new Block("blue_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block BROWN_CANDLE_CAKE = register(new Block("brown_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block BROWN_CANDLE_CAKE = register(new Block("brown_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block GREEN_CANDLE_CAKE = register(new Block("green_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block GREEN_CANDLE_CAKE = register(new Block("green_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block RED_CANDLE_CAKE = register(new Block("red_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block RED_CANDLE_CAKE = register(new Block("red_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); - public static final Block BLACK_CANDLE_CAKE = register(new Block("black_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) + public static final Block BLACK_CANDLE_CAKE = register(new Block("black_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(LIT))); public static final Block AMETHYST_BLOCK = register(new Block("amethyst_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block BUDDING_AMETHYST = register(new Block("budding_amethyst", builder().requiresCorrectToolForDrops().destroyTime(1.5f).pushReaction(PistonBehavior.DESTROY))); @@ -2780,10 +2953,102 @@ public final class Blocks { public static final Block WAXED_OXIDIZED_COPPER_BULB = register(new Block("waxed_oxidized_copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) .booleanState(LIT) .booleanState(POWERED))); + public static final Block COPPER_CHEST = register(new ChestBlock("copper_chest", builder().setBlockEntity(BlockEntityType.CHEST).requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); + public static final Block EXPOSED_COPPER_CHEST = register(new ChestBlock("exposed_copper_chest", builder().setBlockEntity(BlockEntityType.CHEST).requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WEATHERED_COPPER_CHEST = register(new ChestBlock("weathered_copper_chest", builder().setBlockEntity(BlockEntityType.CHEST).requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); + public static final Block OXIDIZED_COPPER_CHEST = register(new ChestBlock("oxidized_copper_chest", builder().setBlockEntity(BlockEntityType.CHEST).requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WAXED_COPPER_CHEST = register(new ChestBlock("waxed_copper_chest", builder().setBlockEntity(BlockEntityType.CHEST).requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WAXED_EXPOSED_COPPER_CHEST = register(new ChestBlock("waxed_exposed_copper_chest", builder().setBlockEntity(BlockEntityType.CHEST).requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WAXED_WEATHERED_COPPER_CHEST = register(new ChestBlock("waxed_weathered_copper_chest", builder().setBlockEntity(BlockEntityType.CHEST).requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); + public static final Block WAXED_OXIDIZED_COPPER_CHEST = register(new ChestBlock("waxed_oxidized_copper_chest", builder().setBlockEntity(BlockEntityType.CHEST).requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); + public static final Block COPPER_GOLEM_STATUE = register(new Block("copper_golem_statue", builder().setBlockEntity(BlockEntityType.COPPER_GOLEM_STATUE).destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(COPPER_GOLEM_POSE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block EXPOSED_COPPER_GOLEM_STATUE = register(new Block("exposed_copper_golem_statue", builder().setBlockEntity(BlockEntityType.COPPER_GOLEM_STATUE).destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(COPPER_GOLEM_POSE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block WEATHERED_COPPER_GOLEM_STATUE = register(new Block("weathered_copper_golem_statue", builder().setBlockEntity(BlockEntityType.COPPER_GOLEM_STATUE).destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(COPPER_GOLEM_POSE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block OXIDIZED_COPPER_GOLEM_STATUE = register(new Block("oxidized_copper_golem_statue", builder().setBlockEntity(BlockEntityType.COPPER_GOLEM_STATUE).destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(COPPER_GOLEM_POSE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block WAXED_COPPER_GOLEM_STATUE = register(new Block("waxed_copper_golem_statue", builder().setBlockEntity(BlockEntityType.COPPER_GOLEM_STATUE).destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(COPPER_GOLEM_POSE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block WAXED_EXPOSED_COPPER_GOLEM_STATUE = register(new Block("waxed_exposed_copper_golem_statue", builder().setBlockEntity(BlockEntityType.COPPER_GOLEM_STATUE).destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(COPPER_GOLEM_POSE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block WAXED_WEATHERED_COPPER_GOLEM_STATUE = register(new Block("waxed_weathered_copper_golem_statue", builder().setBlockEntity(BlockEntityType.COPPER_GOLEM_STATUE).destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(COPPER_GOLEM_POSE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block WAXED_OXIDIZED_COPPER_GOLEM_STATUE = register(new Block("waxed_oxidized_copper_golem_statue", builder().setBlockEntity(BlockEntityType.COPPER_GOLEM_STATUE).destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(COPPER_GOLEM_POSE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block LIGHTNING_ROD = register(new Block("lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) .booleanState(POWERED) .booleanState(WATERLOGGED))); + public static final Block EXPOSED_LIGHTNING_ROD = register(new Block("exposed_lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); + public static final Block WEATHERED_LIGHTNING_ROD = register(new Block("weathered_lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); + public static final Block OXIDIZED_LIGHTNING_ROD = register(new Block("oxidized_lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); + public static final Block WAXED_LIGHTNING_ROD = register(new Block("waxed_lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); + public static final Block WAXED_EXPOSED_LIGHTNING_ROD = register(new Block("waxed_exposed_lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); + public static final Block WAXED_WEATHERED_LIGHTNING_ROD = register(new Block("waxed_weathered_lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); + public static final Block WAXED_OXIDIZED_LIGHTNING_ROD = register(new Block("waxed_oxidized_lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block POINTED_DRIPSTONE = register(new Block("pointed_dripstone", builder().destroyTime(1.5f).pushReaction(PistonBehavior.DESTROY) .enumState(DRIPSTONE_THICKNESS) .enumState(VERTICAL_DIRECTION, Direction.UP, Direction.DOWN) @@ -2792,7 +3057,7 @@ public final class Blocks { public static final Block CAVE_VINES = register(new Block("cave_vines", builder().pushReaction(PistonBehavior.DESTROY) .intState(AGE_25) .booleanState(BERRIES))); - public static final Block CAVE_VINES_PLANT = register(new Block("cave_vines_plant", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.GLOW_BERRIES) + public static final Block CAVE_VINES_PLANT = register(new Block("cave_vines_plant", builder().pushReaction(PistonBehavior.DESTROY) .booleanState(BERRIES))); public static final Block SPORE_BLOSSOM = register(new Block("spore_blossom", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block AZALEA = register(new Block("azalea", builder().pushReaction(PistonBehavior.DESTROY))); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java index 782f664fc..5848d0a76 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java @@ -14,7 +14,6 @@ public class GeyserJavaBlockState implements JavaBlockState { boolean waterlogged; JavaBoundingBox[] collision; boolean canBreakWithHand; - String pickItem; String pistonBehavior; private GeyserJavaBlockState(Builder builder) { @@ -25,7 +24,6 @@ public class GeyserJavaBlockState implements JavaBlockState { this.waterlogged = builder.waterlogged; this.collision = builder.collision; this.canBreakWithHand = builder.canBreakWithHand; - this.pickItem = builder.pickItem; this.pistonBehavior = builder.pistonBehavior; } @@ -66,7 +64,7 @@ public class GeyserJavaBlockState implements JavaBlockState { @Override public @Nullable String pickItem() { - return pickItem; + return null; } @Override @@ -88,7 +86,6 @@ public class GeyserJavaBlockState implements JavaBlockState { private boolean waterlogged; private JavaBoundingBox[] collision; private boolean canBreakWithHand; - private String pickItem; private String pistonBehavior; @Override @@ -134,8 +131,8 @@ public class GeyserJavaBlockState implements JavaBlockState { } @Override + @Deprecated public Builder pickItem(@Nullable String pickItem) { - this.pickItem = pickItem; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java b/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java index 5506130e3..df3a0c3cc 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java @@ -90,6 +90,7 @@ public final class Properties { public static final BasicEnumProperty WEST_REDSTONE = BasicEnumProperty.create("west", "up", "side", "none"); public static final BasicEnumProperty DOUBLE_BLOCK_HALF = BasicEnumProperty.create("half", "upper", "lower"); public static final BasicEnumProperty HALF = BasicEnumProperty.create("half", "top", "bottom"); + public static final BasicEnumProperty SIDE_CHAIN_PART = BasicEnumProperty.create("side_chain", "unconnected", "right", "center", "left"); public static final BasicEnumProperty RAIL_SHAPE = BasicEnumProperty.create("shape", "north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"); public static final BasicEnumProperty RAIL_SHAPE_STRAIGHT = BasicEnumProperty.create("shape", "north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"); public static final IntegerProperty AGE_1 = IntegerProperty.create("age", 0, 1); @@ -135,12 +136,12 @@ public final class Properties { public static final EnumProperty VERTICAL_DIRECTION = EnumProperty.create("vertical_direction", Direction.UP, Direction.DOWN); public static final BasicEnumProperty DRIPSTONE_THICKNESS = BasicEnumProperty.create("thickness", "tip_merge", "tip", "frustum", "middle", "base"); public static final BasicEnumProperty SCULK_SENSOR_PHASE = BasicEnumProperty.create("sculk_sensor_phase", "inactive", "active", "cooldown"); - public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_0_OCCUPIED = BooleanProperty.create("slot_0_occupied"); - public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_1_OCCUPIED = BooleanProperty.create("slot_1_occupied"); - public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_2_OCCUPIED = BooleanProperty.create("slot_2_occupied"); - public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_3_OCCUPIED = BooleanProperty.create("slot_3_occupied"); - public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_4_OCCUPIED = BooleanProperty.create("slot_4_occupied"); - public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_5_OCCUPIED = BooleanProperty.create("slot_5_occupied"); + public static final BooleanProperty SLOT_0_OCCUPIED = BooleanProperty.create("slot_0_occupied"); + public static final BooleanProperty SLOT_1_OCCUPIED = BooleanProperty.create("slot_1_occupied"); + public static final BooleanProperty SLOT_2_OCCUPIED = BooleanProperty.create("slot_2_occupied"); + public static final BooleanProperty SLOT_3_OCCUPIED = BooleanProperty.create("slot_3_occupied"); + public static final BooleanProperty SLOT_4_OCCUPIED = BooleanProperty.create("slot_4_occupied"); + public static final BooleanProperty SLOT_5_OCCUPIED = BooleanProperty.create("slot_5_occupied"); public static final IntegerProperty DUSTED = IntegerProperty.create("dusted", 0, 3); public static final BooleanProperty CRACKED = BooleanProperty.create("cracked"); public static final BooleanProperty CRAFTING = BooleanProperty.create("crafting"); @@ -150,4 +151,5 @@ public final class Properties { public static final BooleanProperty OMINOUS = BooleanProperty.create("ominous"); public static final BasicEnumProperty TEST_BLOCK_MODE = BasicEnumProperty.create("mode", "start", "log", "fail", "accept"); public static final BooleanProperty MAP = BooleanProperty.create("map"); + public static final BasicEnumProperty COPPER_GOLEM_POSE = BasicEnumProperty.create("copper_golem_pose", "standing", "sitting", "running", "star"); } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java b/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java index f15f73cac..a32328c35 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java @@ -41,12 +41,17 @@ import org.geysermc.geyser.level.block.property.Property; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.tags.Tag; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; import org.intellij.lang.annotations.Subst; -import java.util.*; -import java.util.function.Supplier; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Stream; public class Block { @@ -60,11 +65,6 @@ public class Block { private final @Nullable BlockEntityType blockEntityType; private final float destroyTime; private final @NonNull PistonBehavior pushReaction; - /** - * Used for classes we don't have implemented yet that override Mojmap getCloneItemStack with their own item. - * A supplier prevents any issues arising where the Items class finishes before the Blocks class. - */ - private final Supplier pickItem; protected Item item = null; private int javaId = -1; @@ -80,7 +80,6 @@ public class Block { this.blockEntityType = builder.blockEntityType; this.destroyTime = builder.destroyTime; this.pushReaction = builder.pushReaction; - this.pickItem = builder.pickItem; BlockState firstState = builder.build(this).get(0); this.propertyKeys = builder.propertyKeys; // Ensure this is not null before iterating over states @@ -158,13 +157,6 @@ public class Block { return this.item; } - public ItemStack pickItem(BlockState state) { - if (this.pickItem != null) { - return new ItemStack(this.pickItem.get().javaId()); - } - return new ItemStack(this.asItem().javaId()); - } - /** * Should only be ran on block creation. Can be overridden. * @param firstState the first state created from this block @@ -215,6 +207,14 @@ public class Block { this.javaId = javaId; } + public boolean is(GeyserSession session, Tag tag) { + return session.getTagCache().is(tag, javaId); + } + + public boolean is(GeyserSession session, HolderSet set) { + return session.getTagCache().is(set, JavaRegistries.BLOCK, javaId); + } + @Override public String toString() { return "Block{" + @@ -237,7 +237,6 @@ public class Block { private BlockEntityType blockEntityType = null; private PistonBehavior pushReaction = PistonBehavior.NORMAL; private float destroyTime; - private Supplier pickItem; // We'll use this field after building private Property[] propertyKeys = null; @@ -294,11 +293,6 @@ public class Block { return this; } - public Builder pickItem(Supplier pickItem) { - this.pickItem = pickItem; - return this; - } - public Builder javaId(int javaId) { this.javaId = javaId; return this; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/FlowerPotBlock.java b/core/src/main/java/org/geysermc/geyser/level/block/type/FlowerPotBlock.java index 5107616af..28cddb2c8 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/FlowerPotBlock.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/FlowerPotBlock.java @@ -34,7 +34,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.level.block.entity.BedrockChunkWantsBlockEntityTag; import org.geysermc.geyser.translator.level.block.entity.BlockEntityTranslator; import org.geysermc.geyser.util.BlockEntityUtils; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; public class FlowerPotBlock extends Block implements BedrockChunkWantsBlockEntityTag { private final Block flower; @@ -78,14 +77,6 @@ public class FlowerPotBlock extends Block implements BedrockChunkWantsBlockEntit return tagBuilder.build(); } - @Override - public ItemStack pickItem(BlockState state) { - if (this.flower != Blocks.AIR) { - return new ItemStack(this.flower.asItem().javaId()); - } - return super.pickItem(state); - } - public Block flower() { return flower; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java b/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java index d41d160f8..76b532919 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java @@ -25,20 +25,10 @@ package org.geysermc.geyser.level.block.type; -import org.geysermc.mcprotocollib.auth.GameProfile; import org.cloudburstmc.math.vector.Vector3i; -import org.cloudburstmc.nbt.NbtMap; -import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; -import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; - -import java.util.Collections; -import java.util.UUID; public class SkullBlock extends Block { private final Type type; @@ -65,32 +55,6 @@ public class SkullBlock extends Block { // It's not an empty skull. } - public ItemStack pickItem(GeyserSession session, BlockState state, Vector3i position) { - SkullCache.Skull skull = session.getSkullCache().getSkulls().get(position); - if (skull == null) { - return new ItemStack(pickItem(state).getId()); - } - - GeyserItemStack itemStack = GeyserItemStack.of(pickItem(state).getId(), 1); - // This is a universal block entity behavior, but hardcode how it works for now. - NbtMapBuilder builder = NbtMap.builder() - .putString("id", "minecraft:skull") - .putInt("x", position.getX()) - .putInt("y", position.getY()) - .putInt("z", position.getZ()); - DataComponents components = itemStack.getOrCreateComponents(); - components.put(DataComponentTypes.BLOCK_ENTITY_DATA, builder.build()); - - UUID uuid = skull.getUuid(); - String texturesProperty = skull.getTexturesProperty(); - GameProfile profile = new GameProfile(uuid, null); - if (texturesProperty != null) { - profile.setProperties(Collections.singletonList(new GameProfile.Property("textures", texturesProperty))); - } - components.put(DataComponentTypes.PROFILE, profile); - return itemStack.getItemStack(); - } - public Type skullType() { return type; } diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 8031aa200..5ddda8f38 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -138,6 +138,10 @@ public final class GameProtocol { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ + public static boolean is1_21_100(GeyserSession session) { + return session.protocolVersion() == Bedrock_v827.CODEC.getProtocolVersion(); + } + public static boolean is1_21_110orHigher(GeyserSession session) { return is1_21_110orHigher(session.protocolVersion()); } @@ -152,7 +156,7 @@ public final class GameProtocol { * @return the supported Minecraft: Java Edition version names */ public static List getJavaVersions() { - return List.of(DEFAULT_JAVA_CODEC.getMinecraftVersion(), "1.21.8"); + return List.of(DEFAULT_JAVA_CODEC.getMinecraftVersion()); } /** @@ -170,7 +174,7 @@ public final class GameProtocol { * @return the supported Minecraft: Java Edition version */ public static String getJavaMinecraftVersion() { - return "1.21.8"; + return "1.21.9"; } /** diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index 4154164be..e8c6745c8 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -30,6 +30,7 @@ import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.protocol.bedrock.BedrockDisconnectReasons; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.compat.BedrockCompat; +import org.cloudburstmc.protocol.bedrock.data.ExperimentData; import org.cloudburstmc.protocol.bedrock.data.PacketCompressionAlgorithm; import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; import org.cloudburstmc.protocol.bedrock.netty.codec.compression.CompressionStrategy; @@ -288,6 +289,11 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { stackPacket.setGameVersion(session.getClientData().getGameVersion()); stackPacket.getResourcePacks().addAll(this.resourcePackLoadEvent.orderedPacks()); + if (GameProtocol.is1_21_100(session)) { + // Support copper age drop features (or some of them) in 1.21.100 + stackPacket.getExperiments().add(new ExperimentData("y_2025_drop_3", true)); + } + session.sendUpstreamPacket(stackPacket); } default -> { diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index b1f62ca99..48e08cc9c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -44,8 +44,10 @@ import org.geysermc.geyser.api.pack.UrlPackCodec; import org.geysermc.geyser.api.pack.option.PriorityOption; import org.geysermc.geyser.api.pack.option.SubpackOption; import org.geysermc.geyser.api.pack.option.UrlFallbackOption; +import org.geysermc.geyser.api.util.Identifier; import org.geysermc.geyser.event.GeyserEventRegistrar; import org.geysermc.geyser.extension.command.GeyserExtensionCommand; +import org.geysermc.geyser.impl.IdentifierImpl; import org.geysermc.geyser.impl.camera.GeyserCameraFade; import org.geysermc.geyser.impl.camera.GeyserCameraPosition; import org.geysermc.geyser.item.GeyserCustomItemData; @@ -74,6 +76,9 @@ public class ProviderRegistryLoader implements RegistryLoader, Prov @Override public Map, ProviderSupplier> load(Map, ProviderSupplier> providers) { + // misc + providers.put(Identifier.class, args -> IdentifierImpl.of((String) args[0], (String) args[1])); + // commands providers.put(Command.Builder.class, args -> new GeyserExtensionCommand.Builder<>((Extension) args[0])); 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 0e72eaecc..a8aa29106 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 @@ -59,6 +59,7 @@ import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.block.type.FlowerPotBlock; import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.populator.conversion.Conversion827_819; import org.geysermc.geyser.registry.populator.conversion.Conversion844_827; import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.GeyserBedrockBlock; @@ -119,8 +120,8 @@ public final class BlockRegistryPopulator { private static void registerBedrockBlocks() { var blockMappers = ImmutableMap., Remapper>builder() - .put(ObjectIntPair.of("1_21_90", Bedrock_v818.CODEC.getProtocolVersion()), Conversion844_827::remapBlock) - .put(ObjectIntPair.of("1_21_90", Bedrock_v819.CODEC.getProtocolVersion()), Conversion844_827::remapBlock) + .put(ObjectIntPair.of("1_21_90", Bedrock_v818.CODEC.getProtocolVersion()), Conversion827_819::remapBlock) + .put(ObjectIntPair.of("1_21_90", Bedrock_v819.CODEC.getProtocolVersion()), Conversion827_819::remapBlock) .put(ObjectIntPair.of("1_21_100", Bedrock_v827.CODEC.getProtocolVersion()), Conversion844_827::remapBlock) .put(ObjectIntPair.of("1_21_110", Bedrock_v844.CODEC.getProtocolVersion()), tag -> tag) .build(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 66bcabf1d..284c89f03 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -35,7 +35,6 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; -import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; @@ -51,7 +50,6 @@ import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; import org.geysermc.geyser.api.util.CreativeCategory; -import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; @@ -59,18 +57,15 @@ import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.block.GeyserGeometryComponent; import org.geysermc.geyser.level.block.GeyserMaterialInstance; import org.geysermc.geyser.level.block.type.Block; -import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.translator.collision.OtherCollision; import org.geysermc.geyser.util.BlockUtils; import org.geysermc.geyser.util.MathUtils; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import java.util.ArrayList; import java.util.Arrays; @@ -286,21 +281,7 @@ public class CustomBlockRegistryPopulator { builder.requiresCorrectToolForDrops(); } String cleanJavaIdentifier = BlockUtils.getCleanIdentifier(javaBlockState.identifier()); - String pickItem = javaBlockState.pickItem(); - Block block = new Block(cleanJavaIdentifier, builder) { - @Override - public ItemStack pickItem(BlockState state) { - if (this.item == null) { - this.item = Registries.JAVA_ITEM_IDENTIFIERS.get(pickItem); - if (this.item == null) { - GeyserImpl.getInstance().getLogger().warning("We could not find item " + pickItem - + " for getting the item for block " + javaBlockState.identifier()); - this.item = Items.AIR; - } - } - return new ItemStack(this.item.javaId()); - } - }; + Block block = new Block(cleanJavaIdentifier, builder); block.setJavaId(javaBlockState.stateGroupId()); BlockRegistries.JAVA_BLOCKS.registerWithAnyIndex(javaBlockState.stateGroupId(), block, Blocks.AIR); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index 04820e966..71d6a5319 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -46,6 +46,7 @@ import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.function.Function; import java.util.regex.Pattern; @@ -179,15 +180,14 @@ public class CustomSkullRegistryPopulator { */ private static @Nullable String getProfileFromUuid(String uuid) { try { - String uuidDigits = uuid.replace("-", ""); - if (uuidDigits.length() != 32) { - GeyserImpl.getInstance().getLogger().error("Invalid skull uuid " + uuid + " This skull will not be added as a custom block."); - return null; - } - return SkinProvider.requestTexturesFromUUID(uuid).get(); + UUID parsed = UUID.fromString(uuid); + return SkinProvider.requestTexturesFromUUID(parsed).get(); } catch (InterruptedException | ExecutionException e) { GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + uuid + " This skull will not be added as a custom block.", e); return null; + } catch (IllegalArgumentException e) { + GeyserImpl.getInstance().getLogger().error("Invalid skull uuid " + uuid + " This skull will not be added as a custom block."); + return null; } } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java index ef3168f41..78e6156a4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java @@ -57,7 +57,7 @@ public final class DataComponentRegistryPopulator { public static void populate() { GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); List defaultComponents; - try (InputStream stream = bootstrap.getResourceOrThrow("java/item_data_components.json")) { + try (InputStream stream = bootstrap.getResourceOrThrow("mappings/item_data_components.json")) { //noinspection deprecation - 1.16.5 breaks otherwise JsonElement rootElement = new JsonParser().parse(new InputStreamReader(stream)); JsonArray jsonArray = rootElement.getAsJsonArray(); 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 e8fe6969b..f90673389 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 @@ -86,6 +86,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -119,10 +120,81 @@ public class ItemRegistryPopulator { } public static void populate() { - List paletteVersions = new ArrayList<>(6); - paletteVersions.add(new PaletteVersion("1_21_90", Bedrock_v818.CODEC.getProtocolVersion(), Map.of(Items.MUSIC_DISC_LAVA_CHICKEN, Items.MUSIC_DISC_CHIRP), Conversion844_827::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_93", Bedrock_v819.CODEC.getProtocolVersion(), Conversion844_827::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_100", Bedrock_v827.CODEC.getProtocolVersion(), Conversion844_827::remapItem)); + Map eightTwoSevenFallbacks = new HashMap<>(); + eightTwoSevenFallbacks.put(Items.ACACIA_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.BAMBOO_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.BIRCH_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.CHERRY_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.CRIMSON_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.DARK_OAK_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.JUNGLE_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.MANGROVE_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.OAK_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.PALE_OAK_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.SPRUCE_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.WARPED_SHELF, Items.CHISELED_BOOKSHELF); + eightTwoSevenFallbacks.put(Items.COPPER_BARS, Items.IRON_BARS); + eightTwoSevenFallbacks.put(Items.EXPOSED_COPPER_BARS, Items.IRON_BARS); + eightTwoSevenFallbacks.put(Items.WEATHERED_COPPER_BARS, Items.IRON_BARS); + eightTwoSevenFallbacks.put(Items.OXIDIZED_COPPER_BARS, Items.IRON_BARS); + eightTwoSevenFallbacks.put(Items.WAXED_COPPER_BARS, Items.IRON_BARS); + eightTwoSevenFallbacks.put(Items.WAXED_EXPOSED_COPPER_BARS, Items.IRON_BARS); + eightTwoSevenFallbacks.put(Items.WAXED_WEATHERED_COPPER_BARS, Items.IRON_BARS); + eightTwoSevenFallbacks.put(Items.WAXED_OXIDIZED_COPPER_BARS, Items.IRON_BARS); + eightTwoSevenFallbacks.put(Items.COPPER_GOLEM_STATUE, Items.ARMOR_STAND); + eightTwoSevenFallbacks.put(Items.EXPOSED_COPPER_GOLEM_STATUE, Items.ARMOR_STAND); + eightTwoSevenFallbacks.put(Items.WEATHERED_COPPER_GOLEM_STATUE, Items.ARMOR_STAND); + eightTwoSevenFallbacks.put(Items.OXIDIZED_COPPER_GOLEM_STATUE, Items.ARMOR_STAND); + eightTwoSevenFallbacks.put(Items.WAXED_COPPER_GOLEM_STATUE, Items.ARMOR_STAND); + eightTwoSevenFallbacks.put(Items.WAXED_EXPOSED_COPPER_GOLEM_STATUE, Items.ARMOR_STAND); + eightTwoSevenFallbacks.put(Items.WAXED_WEATHERED_COPPER_GOLEM_STATUE, Items.ARMOR_STAND); + eightTwoSevenFallbacks.put(Items.WAXED_OXIDIZED_COPPER_GOLEM_STATUE, Items.ARMOR_STAND); + eightTwoSevenFallbacks.put(Items.COPPER_LANTERN, Items.LANTERN); + eightTwoSevenFallbacks.put(Items.EXPOSED_COPPER_LANTERN, Items.LANTERN); + eightTwoSevenFallbacks.put(Items.WEATHERED_COPPER_LANTERN, Items.LANTERN); + eightTwoSevenFallbacks.put(Items.OXIDIZED_COPPER_LANTERN, Items.LANTERN); + eightTwoSevenFallbacks.put(Items.WAXED_COPPER_LANTERN, Items.LANTERN); + eightTwoSevenFallbacks.put(Items.WAXED_EXPOSED_COPPER_LANTERN, Items.LANTERN); + eightTwoSevenFallbacks.put(Items.WAXED_WEATHERED_COPPER_LANTERN, Items.LANTERN); + eightTwoSevenFallbacks.put(Items.WAXED_OXIDIZED_COPPER_LANTERN, Items.LANTERN); + eightTwoSevenFallbacks.put(Items.EXPOSED_LIGHTNING_ROD, Items.LIGHTNING_ROD); + eightTwoSevenFallbacks.put(Items.WEATHERED_LIGHTNING_ROD, Items.LIGHTNING_ROD); + eightTwoSevenFallbacks.put(Items.OXIDIZED_LIGHTNING_ROD, Items.LIGHTNING_ROD); + eightTwoSevenFallbacks.put(Items.WAXED_LIGHTNING_ROD, Items.LIGHTNING_ROD); + eightTwoSevenFallbacks.put(Items.WAXED_EXPOSED_LIGHTNING_ROD, Items.LIGHTNING_ROD); + eightTwoSevenFallbacks.put(Items.WAXED_WEATHERED_LIGHTNING_ROD, Items.LIGHTNING_ROD); + eightTwoSevenFallbacks.put(Items.WAXED_OXIDIZED_LIGHTNING_ROD, Items.LIGHTNING_ROD); + eightTwoSevenFallbacks.put(Items.COPPER_TORCH, Items.TORCH); + eightTwoSevenFallbacks.put(Items.COPPER_HORSE_ARMOR, Items.LEATHER_HORSE_ARMOR); + + Map eightOneNineFallbacks = new HashMap<>(eightTwoSevenFallbacks); + eightOneNineFallbacks.put(Items.COPPER_CHEST, Items.CHEST); + eightOneNineFallbacks.put(Items.EXPOSED_COPPER_CHEST, Items.CHEST); + eightOneNineFallbacks.put(Items.WEATHERED_COPPER_CHEST, Items.CHEST); + eightOneNineFallbacks.put(Items.OXIDIZED_COPPER_CHEST, Items.CHEST); + eightOneNineFallbacks.put(Items.WAXED_COPPER_CHEST, Items.CHEST); + eightOneNineFallbacks.put(Items.WAXED_EXPOSED_COPPER_CHEST, Items.CHEST); + eightOneNineFallbacks.put(Items.WAXED_WEATHERED_COPPER_CHEST, Items.CHEST); + eightOneNineFallbacks.put(Items.WAXED_OXIDIZED_COPPER_CHEST, Items.CHEST); + eightOneNineFallbacks.put(Items.COPPER_HELMET, Items.LEATHER_HELMET); + eightOneNineFallbacks.put(Items.COPPER_CHESTPLATE, Items.LEATHER_CHESTPLATE); + eightOneNineFallbacks.put(Items.COPPER_LEGGINGS, Items.LEATHER_LEGGINGS); + eightOneNineFallbacks.put(Items.COPPER_BOOTS, Items.LEATHER_BOOTS); + eightOneNineFallbacks.put(Items.COPPER_NUGGET, Items.IRON_NUGGET); + eightOneNineFallbacks.put(Items.COPPER_SWORD, Items.STONE_SWORD); + eightOneNineFallbacks.put(Items.COPPER_PICKAXE, Items.STONE_PICKAXE); + eightOneNineFallbacks.put(Items.COPPER_SHOVEL, Items.STONE_SHOVEL); + eightOneNineFallbacks.put(Items.COPPER_AXE, Items.STONE_AXE); + eightOneNineFallbacks.put(Items.COPPER_HOE, Items.STONE_HOE); + eightOneNineFallbacks.put(Items.COPPER_GOLEM_SPAWN_EGG, Items.IRON_GOLEM_SPAWN_EGG); + + Map eightOneEightFallbacks = new HashMap<>(eightOneNineFallbacks); + eightOneEightFallbacks.put(Items.MUSIC_DISC_LAVA_CHICKEN, Items.MUSIC_DISC_CHIRP); + + List paletteVersions = new ArrayList<>(4); + paletteVersions.add(new PaletteVersion("1_21_90", Bedrock_v818.CODEC.getProtocolVersion(), eightOneEightFallbacks, Conversion844_827::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_93", Bedrock_v819.CODEC.getProtocolVersion(), eightOneNineFallbacks, Conversion844_827::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_100", Bedrock_v827.CODEC.getProtocolVersion(), eightTwoSevenFallbacks, Conversion844_827::remapItem)); paletteVersions.add(new PaletteVersion("1_21_110", Bedrock_v844.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/SpawnerBlock.java b/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion827_819.java similarity index 70% rename from core/src/main/java/org/geysermc/geyser/level/block/type/SpawnerBlock.java rename to core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion827_819.java index 968499d11..c04e70615 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/SpawnerBlock.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion827_819.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 GeyserMC. http://geysermc.org + * Copyright (c) 2025 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,10 +23,20 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.level.block.type; +package org.geysermc.geyser.registry.populator.conversion; -public class SpawnerBlock extends Block { - public SpawnerBlock(String javaIdentifier, Builder builder) { - super(javaIdentifier, builder); +import org.cloudburstmc.nbt.NbtMap; + +public class Conversion827_819 { + + public static NbtMap remapBlock(NbtMap nbtMap) { + nbtMap = Conversion844_827.remapBlock(nbtMap); + + final String name = nbtMap.getString("name"); + if (name.endsWith("copper_chest")) { + return ConversionHelper.withName(nbtMap, "chest"); + } + + return nbtMap; } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion844_827.java b/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion844_827.java index 7f6eddfe7..511d27407 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion844_827.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion844_827.java @@ -35,21 +35,30 @@ public class Conversion844_827 { public static NbtMap remapBlock(NbtMap nbtMap) { final String name = nbtMap.getString("name"); - if (name.equals("minecraft:iron_chain")) { + if (name.equals("minecraft:iron_chain") || name.endsWith("copper_chain")) { return ConversionHelper.withName(nbtMap, "chain"); - } else if (name.equals("minecraft:lightning_rod")) { + } else if (name.endsWith("lightning_rod")) { NbtMapBuilder statesWithoutPoweredBit = nbtMap.getCompound("states").toBuilder(); statesWithoutPoweredBit.remove("powered_bit"); return nbtMap.toBuilder() + .putString("name", "minecraft:lightning_rod") .putCompound("states", statesWithoutPoweredBit.build()) .build(); + } else if (name.endsWith("_shelf") || name.endsWith("copper_golem_statue")) { + return ConversionHelper.withoutStates("unknown"); + } else if (name.equals("minecraft:copper_torch")) { + return ConversionHelper.withName(nbtMap, "torch"); + } else if (name.endsWith("copper_bars")) { + return ConversionHelper.withName(nbtMap, "iron_bars"); + } else if (name.endsWith("copper_lantern")) { + return ConversionHelper.withName(nbtMap, "lantern"); } return nbtMap; } public static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { - if (item == Items.CHAIN) { + if (item == Items.IRON_CHAIN || item.javaIdentifier().endsWith("copper_chain")) { return mapping.withBedrockIdentifier("minecraft:chain"); } return mapping; diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java index 7e63a5999..b0ffe13b2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java @@ -38,6 +38,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.common.DefinitionRegistry; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.item.StoredItemMappings; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; @@ -75,11 +76,21 @@ public class ItemMappings implements DefinitionRegistry { Object2ObjectMap customBlockItemDefinitions; + /** + * Gets an {@link ItemMapping} from the given {@link GeyserItemStack}. + * + * @param itemStack the itemstack + * @return an item entry from the given item stack + */ + public ItemMapping getMapping(@NonNull GeyserItemStack itemStack) { + return this.getMapping(itemStack.getJavaId()); + } + /** * Gets an {@link ItemMapping} from the given {@link ItemStack}. * * @param itemStack the itemstack - * @return an item entry from the given java edition identifier + * @return an item entry from the given java edition item stack */ @NonNull public ItemMapping getMapping(@NonNull ItemStack itemStack) { 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 f8fe5d107..ae1cedc63 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -154,6 +154,7 @@ import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.physics.CollisionManager; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.network.netty.LocalSession; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.BlockMappings; @@ -211,6 +212,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.HandPreference; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerAction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile; import org.geysermc.mcprotocollib.protocol.data.game.setting.ChatVisibility; import org.geysermc.mcprotocollib.protocol.data.game.setting.ParticleStatus; import org.geysermc.mcprotocollib.protocol.data.game.setting.SkinPart; @@ -218,6 +220,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.statistic.CustomStatistic; import org.geysermc.mcprotocollib.protocol.data.game.statistic.Statistic; import org.geysermc.mcprotocollib.protocol.data.handshake.HandshakeIntent; import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundClientInformationPacket; +import org.geysermc.mcprotocollib.protocol.packet.configuration.serverbound.ServerboundAcceptCodeOfConductPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatCommandSignedPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerAbilitiesPacket; @@ -396,7 +399,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * A map of all players (and their heads) that are wearing a player head with a custom texture. * Our workaround for these players is to give them a custom skin and geometry to emulate wearing a custom skull. */ - private final Map playerWithCustomHeads = new Object2ObjectOpenHashMap<>(); + private final Map playerWithCustomHeads = new Object2ObjectOpenHashMap<>(); @Setter private boolean droppingLecternBook; @@ -742,6 +745,9 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private boolean allowVibrantVisuals = true; + @Accessors(fluent = true) + private boolean hasAcceptedCodeOfConduct = false; + public GeyserSession(GeyserImpl geyser, BedrockServerSession bedrockServerSession, EventLoop tickEventLoop) { this.geyser = geyser; this.upstream = new UpstreamSession(bedrockServerSession); @@ -1442,9 +1448,9 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { return false; } - if (playerInventoryHolder.inventory().getItemInHand().asItem() == Items.SHIELD) { + if (playerInventoryHolder.inventory().getItemInHand().is(Items.SHIELD)) { useItem(Hand.MAIN_HAND); - } else if (playerInventoryHolder.inventory().getOffhand().asItem() == Items.SHIELD) { + } else if (playerInventoryHolder.inventory().getOffhand().is(Items.SHIELD)) { useItem(Hand.OFF_HAND); } else { // No blocking @@ -1710,6 +1716,23 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { return true; } + public void acceptCodeOfConduct() { + if (hasAcceptedCodeOfConduct) { + return; + } + hasAcceptedCodeOfConduct = true; + sendDownstreamConfigurationPacket(ServerboundAcceptCodeOfConductPacket.INSTANCE); + } + + public void prepareForConfigurationForm() { + if (!sentSpawnPacket) { + connect(); + } + // Disable time progression whilst the form is open + // Once logged into the game this is set correctly when receiving a time packet from the server + setDaylightCycle(false); + } + public @NonNull PlayerInventory getPlayerInventory() { return this.playerInventoryHolder.inventory(); } @@ -1811,6 +1834,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Needed for certain molang queries used in blocks and items startGamePacket.getExperiments().add(new ExperimentData("experimental_molang_features", true)); + // Enable 2025 Content Drop 3 features on 1.21.100 + if (GameProtocol.is1_21_100(this)) { + startGamePacket.getExperiments().add(new ExperimentData("y_2025_drop_3", true)); + } + startGamePacket.setVanillaVersion("*"); startGamePacket.setInventoriesServerAuthoritative(true); startGamePacket.setServerEngine(""); // Do we want to fill this in? @@ -1827,6 +1855,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // It does *not* mean we can dictate the break speed server-sided :( startGamePacket.setServerAuthoritativeBlockBreaking(true); + if (playerEntity.getPropertyManager() != null) { + startGamePacket.setPlayerPropertyData(playerEntity.getPropertyManager().toNbtMap("minecraft:player")); + } + startGamePacket.setServerId(""); startGamePacket.setWorldId(""); startGamePacket.setScenarioId(""); @@ -1904,6 +1936,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { sendDownstreamPacket(packet, ProtocolState.GAME); } + public void sendDownstreamConfigurationPacket(Packet packet) { + sendDownstreamPacket(packet, ProtocolState.CONFIGURATION); + } + /** * Send a packet to the remote server if in the login state. * diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java index 90f22afd6..50b45a3a1 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java @@ -64,7 +64,7 @@ public class BookEditCache { } // Don't send the update if the player is not holding a book, shouldn't happen if we catch all interactions GeyserItemStack itemStack = session.getPlayerInventory().getItemInHand(); - if (itemStack == null || itemStack.asItem() != Items.WRITABLE_BOOK) { + if (itemStack == null || !itemStack.is(Items.WRITABLE_BOOK)) { packet = null; return; } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java index 3338a11fc..d5405d1de 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java @@ -65,7 +65,7 @@ public final class BundleCache { public void initialize(GeyserItemStack itemStack) { // Message before 1.21.4 - "Can't check for BUNDLE_CONTENTS, which may be missing if the bundle is empty." // Now irrelevant, but keeping as-is for the time being. - if (session.getTagCache().is(ItemTag.BUNDLES, itemStack)) { + if (itemStack.is(session, ItemTag.BUNDLES)) { if (itemStack.getBundleData() != null) { session.getGeyser().getLogger().warning("Stack has bundle data already! It should not!"); if (session.getGeyser().getConfig().isDebugMode()) { @@ -231,7 +231,7 @@ public final class BundleCache { * if Bedrock sends its own. */ public void awaitRelease() { - if (session.getTagCache().is(ItemTag.BUNDLES, session.getPlayerInventory().getItemInHand())) { + if (session.getPlayerInventory().getItemInHand().is(session, ItemTag.BUNDLES)) { releaseTick = session.getTicks() + 1; } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java index 08f73a381..ac314a458 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java @@ -43,6 +43,7 @@ import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.skin.SkinManager; +import org.geysermc.mcprotocollib.auth.GameProfile; import java.io.IOException; import java.util.*; @@ -74,6 +75,14 @@ public class SkullCache { this.skullRenderDistanceSquared = distance * distance; } + public Skull putSkull(Vector3i position, GameProfile resolved, BlockState blockState) { + GameProfile.Property textures = resolved.getProperty("textures"); + if (textures != null) { + return putSkull(position, resolved.getId(), textures.getValue(), blockState); + } + return null; + } + public Skull putSkull(Vector3i position, UUID uuid, String texturesProperty, BlockState blockState) { Skull skull = skulls.computeIfAbsent(position, Skull::new); skull.uuid = uuid; diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index 57ce7ecbf..28990e1e2 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -31,9 +31,6 @@ import net.kyori.adventure.key.Key; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserLogger; -import org.geysermc.geyser.inventory.GeyserItemStack; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; @@ -43,7 +40,6 @@ import org.geysermc.geyser.util.MinecraftKey; import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundUpdateTagsPacket; -import javax.annotation.ParametersAreNonnullByDefault; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -52,8 +48,19 @@ import java.util.Map; * Manages information sent from the {@link ClientboundUpdateTagsPacket}. If that packet is not sent, all lists here * will remain empty, matching Java Edition behavior. Looking up a tag that wasn't listed in that packet will return an empty array. * Only tags from registries in {@link JavaRegistries} are stored. Read {@link JavaRegistryKey} for more information. + * + *

To simply check if an element is in a tag, it's preferred to use the element's "{@code is}" method, if available. For example:

+ * + *
    + *
  • {@link org.geysermc.geyser.level.block.type.Block#is(GeyserSession, Tag)}
  • + *
  • {@link org.geysermc.geyser.level.block.type.Block#is(GeyserSession, HolderSet)}
  • + *
  • {@link org.geysermc.geyser.item.type.Item#is(GeyserSession, Tag)}
  • + *
  • {@link org.geysermc.geyser.item.type.Item#is(GeyserSession, HolderSet)}
  • + *
  • {@link org.geysermc.geyser.inventory.GeyserItemStack#is(GeyserSession, Tag)}
  • + *
  • {@link org.geysermc.geyser.inventory.GeyserItemStack#is(GeyserSession, HolderSet)}
  • + *
  • {@link GeyserHolderSet#contains(GeyserSession, Object)}
  • + *
*/ -@ParametersAreNonnullByDefault public final class TagCache { private final GeyserSession session; private final Map, int[]> tags = new Object2ObjectOpenHashMap<>(); @@ -109,37 +116,40 @@ public final class TagCache { } } - public boolean is(Tag tag, T object) { + /** + * Should only be used when the network ID of an element is already known. If not, prefer using the {@link TagCache#is(Tag, Object)} shorthand method. + */ + public boolean is(@NonNull Tag tag, int id) { + return contains(getRaw(tag), id); + } + + public boolean is(@NonNull Tag tag, @NonNull T object) { return contains(getRaw(tag), tag.registry().networkId(session, object)); } /** - * @return true if the item tag is present and contains this item stack's Java ID. + * Prefer using {@link GeyserHolderSet#contains(GeyserSession, Object)}. + * + * @return true if the specified network ID is in the given {@link GeyserHolderSet}. */ - public boolean is(Tag tag, GeyserItemStack itemStack) { - return is(tag, itemStack.asItem()); - } - - /** - * @return true if the specified network ID is in the given holder set. - */ - public boolean is(@Nullable GeyserHolderSet holderSet, @Nullable T object) { - if (holderSet == null || object == null) { + public boolean is(@NonNull GeyserHolderSet holderSet, @Nullable T object) { + if (object == null) { return false; } return contains(holderSet.resolveRaw(this), holderSet.getRegistry().networkId(session, object)); } /** - * Accessible via the {@link #isItem(HolderSet, Item)} method. * @return true if the specified network ID is in the given {@link HolderSet} set. */ - private boolean is(@Nullable HolderSet holderSet, @NonNull JavaRegistryKey registry, int id) { + public boolean is(@Nullable HolderSet holderSet, @NonNull JavaRegistryKey registry, int id) { if (holderSet == null) { return false; } int[] entries = holderSet.resolve(key -> { + // This should never happen, since a key in a HolderSet is always a tag + // We check for it anyway if (key.value().startsWith("#")) { key = Key.key(key.namespace(), key.value().substring(1)); } @@ -149,23 +159,14 @@ public final class TagCache { return contains(entries, id); } - public boolean isItem(@Nullable HolderSet holderSet, @NonNull Item item) { - return is(holderSet, JavaRegistries.ITEM, item.javaId()); - } - - public boolean isBlock(@Nullable HolderSet holderSet, @NonNull Block block) { - return is(holderSet, JavaRegistries.BLOCK, block.javaId()); - } - - - public List get(Tag tag) { + public List get(@NonNull Tag tag) { return mapRawArray(session, getRaw(tag), tag.registry()); } /** - * @return the network IDs in the given tag. This can be an empty list. + * @return the network IDs in the given tag. This can be an empty array. */ - public int[] getRaw(Tag tag) { + public int[] getRaw(@NonNull Tag tag) { return this.tags.getOrDefault(tag, IntArrays.EMPTY_ARRAY); } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java index 7c08dbed1..64062c7bd 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java @@ -47,6 +47,7 @@ public final class BlockTag { public static final Tag WOODEN_FENCES = create("wooden_fences"); public static final Tag FENCE_GATES = create("fence_gates"); public static final Tag WOODEN_PRESSURE_PLATES = create("wooden_pressure_plates"); + public static final Tag WOODEN_SHELVES = create("wooden_shelves"); public static final Tag DOORS = create("doors"); public static final Tag SAPLINGS = create("saplings"); public static final Tag BAMBOO_BLOCKS = create("bamboo_blocks"); @@ -93,6 +94,13 @@ public final class BlockTag { public static final Tag TERRACOTTA = create("terracotta"); public static final Tag COMPLETES_FIND_TREE_TUTORIAL = create("completes_find_tree_tutorial"); public static final Tag SHULKER_BOXES = create("shulker_boxes"); + public static final Tag COPPER_CHESTS = create("copper_chests"); + public static final Tag LIGHTNING_RODS = create("lightning_rods"); + public static final Tag COPPER = create("copper"); + public static final Tag CHAINS = create("chains"); + public static final Tag COPPER_GOLEM_STATUES = create("copper_golem_statues"); + public static final Tag LANTERNS = create("lanterns"); + public static final Tag BARS = create("bars"); public static final Tag CEILING_HANGING_SIGNS = create("ceiling_hanging_signs"); public static final Tag STANDING_SIGNS = create("standing_signs"); public static final Tag BEE_ATTRACTIVE = create("bee_attractive"); @@ -180,6 +188,7 @@ public final class BlockTag { public static final Tag INCORRECT_FOR_NETHERITE_TOOL = create("incorrect_for_netherite_tool"); public static final Tag INCORRECT_FOR_DIAMOND_TOOL = create("incorrect_for_diamond_tool"); public static final Tag INCORRECT_FOR_IRON_TOOL = create("incorrect_for_iron_tool"); + public static final Tag INCORRECT_FOR_COPPER_TOOL = create("incorrect_for_copper_tool"); public static final Tag INCORRECT_FOR_STONE_TOOL = create("incorrect_for_stone_tool"); public static final Tag INCORRECT_FOR_GOLD_TOOL = create("incorrect_for_gold_tool"); public static final Tag INCORRECT_FOR_WOODEN_TOOL = create("incorrect_for_wooden_tool"); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java index 00eaf1f44..85c7d762e 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java @@ -95,6 +95,13 @@ public final class GeyserHolderSet { return new GeyserHolderSet<>(registry, tag, holderSet.getHolders(), null); } + public boolean contains(@NonNull GeyserSession session, @Nullable T object) { + if (object == null) { + return false; + } + return session.getTagCache().is(this, object); + } + /** * Resolves the HolderSet, and automatically maps the network IDs to their respective object types. * If the HolderSet is a list of IDs, this will be returned. If it is a tag, the tag will be resolved from the tag cache. If it is an inline HolderSet, the list of inline elements will be returned. diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java index 34fb02afd..161b9063f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java @@ -47,6 +47,7 @@ public final class ItemTag { public static final Tag WOODEN_FENCES = create("wooden_fences"); public static final Tag FENCE_GATES = create("fence_gates"); public static final Tag WOODEN_PRESSURE_PLATES = create("wooden_pressure_plates"); + public static final Tag WOODEN_SHELVES = create("wooden_shelves"); public static final Tag DOORS = create("doors"); public static final Tag SAPLINGS = create("saplings"); public static final Tag BAMBOO_BLOCKS = create("bamboo_blocks"); @@ -93,6 +94,13 @@ public final class ItemTag { public static final Tag TERRACOTTA = create("terracotta"); public static final Tag COMPLETES_FIND_TREE_TUTORIAL = create("completes_find_tree_tutorial"); public static final Tag SHULKER_BOXES = create("shulker_boxes"); + public static final Tag COPPER_CHESTS = create("copper_chests"); + public static final Tag LIGHTNING_RODS = create("lightning_rods"); + public static final Tag COPPER_GOLEM_STATUES = create("copper_golem_statues"); + public static final Tag COPPER = create("copper"); + public static final Tag CHAINS = create("chains"); + public static final Tag LANTERNS = create("lanterns"); + public static final Tag BARS = create("bars"); public static final Tag SIGNS = create("signs"); public static final Tag HANGING_SIGNS = create("hanging_signs"); public static final Tag BEE_FOOD = create("bee_food"); @@ -148,11 +156,13 @@ public final class ItemTag { public static final Tag BEACON_PAYMENT_ITEMS = create("beacon_payment_items"); public static final Tag WOODEN_TOOL_MATERIALS = create("wooden_tool_materials"); public static final Tag STONE_TOOL_MATERIALS = create("stone_tool_materials"); + public static final Tag COPPER_TOOL_MATERIALS = create("copper_tool_materials"); public static final Tag IRON_TOOL_MATERIALS = create("iron_tool_materials"); public static final Tag GOLD_TOOL_MATERIALS = create("gold_tool_materials"); public static final Tag DIAMOND_TOOL_MATERIALS = create("diamond_tool_materials"); public static final Tag NETHERITE_TOOL_MATERIALS = create("netherite_tool_materials"); public static final Tag REPAIRS_LEATHER_ARMOR = create("repairs_leather_armor"); + public static final Tag REPAIRS_COPPER_ARMOR = create("repairs_copper_armor"); public static final Tag REPAIRS_CHAIN_ARMOR = create("repairs_chain_armor"); public static final Tag REPAIRS_IRON_ARMOR = create("repairs_iron_armor"); public static final Tag REPAIRS_GOLD_ARMOR = create("repairs_gold_armor"); @@ -192,6 +202,7 @@ public final class ItemTag { public static final Tag PIGLIN_PREFERRED_WEAPONS = create("piglin_preferred_weapons"); public static final Tag PILLAGER_PREFERRED_WEAPONS = create("pillager_preferred_weapons"); public static final Tag WITHER_SKELETON_DISLIKED_WEAPONS = create("wither_skeleton_disliked_weapons"); + public static final Tag SHEARABLE_FROM_COPPER_GOLEM = create("shearable_from_copper_golem"); public static final Tag ENCHANTABLE_FOOT_ARMOR = create("enchantable/foot_armor"); public static final Tag ENCHANTABLE_LEG_ARMOR = create("enchantable/leg_armor"); public static final Tag ENCHANTABLE_CHEST_ARMOR = create("enchantable/chest_armor"); diff --git a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java index 12f002025..4ca5f14eb 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java @@ -39,21 +39,17 @@ import org.geysermc.geyser.api.skin.Skin; import org.geysermc.geyser.api.skin.SkinData; import org.geysermc.geyser.api.skin.SkinGeometry; import org.geysermc.geyser.entity.type.LivingEntity; -import org.geysermc.geyser.entity.type.player.PlayerEntity; +import org.geysermc.geyser.entity.type.player.AvatarEntity; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.skin.SkinManager.GameProfileData; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.auth.GameProfile.Texture; -import org.geysermc.mcprotocollib.auth.GameProfile.TextureModel; import org.geysermc.mcprotocollib.auth.GameProfile.TextureType; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile; import java.awt.*; import java.awt.image.BufferedImage; -import java.io.IOException; -import java.util.Map; import java.util.Objects; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -104,86 +100,44 @@ public class FakeHeadProvider { } }); - public static void setHead(GeyserSession session, PlayerEntity entity, @Nullable GameProfile profile) { + public static void setHead(GeyserSession session, AvatarEntity entity, @Nullable ResolvableProfile profile) { if (profile == null) { return; } - GameProfile current = session.getPlayerWithCustomHeads().get(entity.getUuid()); + ResolvableProfile current = session.getPlayerWithCustomHeads().get(entity.getUuid()); if (profile.equals(current)) { // We already did this, no need to re-compute return; } - Map textures; - try { - textures = profile.getTextures(false); - } catch (IllegalStateException e) { - GeyserImpl.getInstance().getLogger().debug("Could not decode player head from profile %s, got: %s".formatted(profile, e.getMessage())); - textures = null; - } - - if (textures == null || textures.isEmpty()) { - loadHeadFromProfile(session, entity, profile); - return; - } - - Texture skinTexture = textures.get(TextureType.SKIN); - - if (skinTexture == null) { - return; - } - - Texture capeTexture = textures.get(TextureType.CAPE); - String capeUrl = capeTexture != null ? capeTexture.getURL() : null; - - boolean isAlex = skinTexture.getModel() == TextureModel.SLIM; - - loadHeadFromProfile(session, entity, new GameProfileData(skinTexture.getURL(), capeUrl, isAlex), profile); - } - - public static void loadHeadFromProfile(GeyserSession session, PlayerEntity entity, GameProfile profile) { - CompletableFuture texturesFuture; - if (profile.getId() != null) { - texturesFuture = SkinProvider.requestTexturesFromUUID(profile.getId().toString()); - } else { - texturesFuture = SkinProvider.requestTexturesFromUsername(profile.getName()); - } - - texturesFuture.whenCompleteAsync((encodedJson, throwable) -> { + SkinManager.resolveProfile(profile).whenCompleteAsync((resolved, throwable) -> { if (throwable != null) { GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.getUuid()), throwable); return; } - try { - SkinManager.GameProfileData gameProfileData = SkinManager.GameProfileData.loadFromJson(encodedJson); - if (gameProfileData == null) { - return; - } - loadHeadFromProfile(session, entity, gameProfileData, profile); - } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.getUuid(), e.getMessage())); - } + loadHeadFromProfile(session, entity, profile, resolved); }); } - public static void loadHeadFromProfile(GeyserSession session, PlayerEntity entity, SkinManager.GameProfileData gameProfileData, GameProfile profile) { - String fakeHeadSkinUrl = gameProfileData.skinUrl(); - - session.getPlayerWithCustomHeads().put(entity.getUuid(), profile); - String texturesProperty = entity.getTexturesProperty(); - SkinProvider.getExecutorService().execute(() -> { - try { - SkinData mergedSkinData = MERGED_SKINS_LOADING_CACHE.get(new FakeHeadEntry(texturesProperty, fakeHeadSkinUrl, entity, session)); - SkinManager.sendSkinPacket(session, entity, mergedSkinData); - } catch (ExecutionException e) { - GeyserImpl.getInstance().getLogger().error("Couldn't merge skin of " + entity.getUsername() + " with head skin url " + fakeHeadSkinUrl, e); - } - }); + private static void loadHeadFromProfile(GeyserSession session, AvatarEntity entity, ResolvableProfile original, GameProfile resolved) { + Texture skinTexture = SkinManager.getTextureDataFromProfile(resolved, TextureType.SKIN); + String originalTextures = entity.getTexturesProperty(); + if (skinTexture != null) { + session.getPlayerWithCustomHeads().put(entity.getUuid(), original); + SkinProvider.getExecutorService().execute(() -> { + try { + SkinData mergedSkinData = MERGED_SKINS_LOADING_CACHE.get(new FakeHeadEntry(originalTextures, skinTexture.getURL(), entity, session)); + SkinManager.sendSkinPacket(session, entity, mergedSkinData); + } catch (ExecutionException e) { + GeyserImpl.getInstance().getLogger().error("Couldn't merge skin of " + entity.getUsername() + " with head skin " + resolved, e); + } + }); + } } public static void restoreOriginalSkin(GeyserSession session, LivingEntity livingEntity) { - if (!(livingEntity instanceof PlayerEntity entity)) { + if (!(livingEntity instanceof AvatarEntity entity)) { return; } @@ -207,7 +161,7 @@ public class FakeHeadProvider { private static class FakeHeadEntry { private final String texturesProperty; private final String fakeHeadSkinUrl; - private PlayerEntity entity; + private AvatarEntity entity; private GeyserSession session; @Override diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java index 2f506d10f..dd943e984 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java @@ -26,6 +26,8 @@ package org.geysermc.geyser.skin; import com.fasterxml.jackson.databind.JsonNode; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; @@ -38,29 +40,42 @@ import org.geysermc.geyser.api.skin.Cape; import org.geysermc.geyser.api.skin.Skin; import org.geysermc.geyser.api.skin.SkinData; import org.geysermc.geyser.api.skin.SkinGeometry; -import org.geysermc.geyser.entity.type.player.PlayerEntity; +import org.geysermc.geyser.entity.type.player.AvatarEntity; import org.geysermc.geyser.entity.type.player.SkullPlayerEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.auth.BedrockClientData; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.FileUtils; +import org.geysermc.mcprotocollib.auth.GameProfile; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile; import java.awt.*; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Base64; import java.util.List; +import java.util.Map; import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; import java.util.function.Consumer; public class SkinManager { + private static final Cache RESOLVED_PROFILES_CACHE = CacheBuilder.newBuilder() + .expireAfterAccess(1, TimeUnit.HOURS) + .build(); + private static final UUID EMPTY_UUID = new UUID(0L, 0L); + public static final GameProfile EMPTY_PROFILE = new GameProfile((UUID) null, null); + public static final ResolvableProfile EMPTY_RESOLVABLE_PROFILE = new ResolvableProfile(EMPTY_PROFILE, null, null, null, null, false); + static final String GEOMETRY = new String(FileUtils.readAllBytes("bedrock/geometries/geo.json"), StandardCharsets.UTF_8); /** * Builds a Bedrock player list entry from our existing, cached Bedrock skin information */ - public static PlayerListPacket.Entry buildCachedEntry(GeyserSession session, PlayerEntity playerEntity) { + public static PlayerListPacket.Entry buildCachedEntry(GeyserSession session, AvatarEntity playerEntity) { // First: see if we have the cached skin texture ID. GameProfileData data = GameProfileData.from(playerEntity); Skin skin = null; @@ -143,7 +158,7 @@ public class SkinManager { return entry; } - public static void sendSkinPacket(GeyserSession session, PlayerEntity entity, SkinData skinData) { + public static void sendSkinPacket(GeyserSession session, AvatarEntity entity, SkinData skinData) { Skin skin = skinData.skin(); Cape cape = skinData.cape(); SkinGeometry geometry = skinData.geometry(); @@ -190,7 +205,82 @@ public class SkinManager { .build(); } - public static void requestAndHandleSkinAndCape(PlayerEntity entity, GeyserSession session, + public static CompletableFuture resolveProfile(ResolvableProfile profile) { + GameProfile partial = profile.getProfile(); + if (!profile.isDynamic()) { + // This is easy: the server has provided the entire profile for us (or however much it knew), + // and is asking us to use this + return CompletableFuture.completedFuture(partial); + } else if (!partial.getProperties().isEmpty() || (partial.getId() == null && partial.getName() == null)) { + // If properties have been provided to us, or no ID and no name have been provided, create a static profile from + // what we do know + // This replicates vanilla Java client behaviour + String name = partial.getName() == null ? "" : partial.getName(); + UUID uuid = partial.getName() == null ? EMPTY_UUID : createOfflinePlayerUUID(partial.getName()); + GameProfile completed = new GameProfile(uuid, name); + completed.setProperties(partial.getProperties()); + return CompletableFuture.completedFuture(completed); + } + + GameProfile cached = RESOLVED_PROFILES_CACHE.getIfPresent(profile); + if (cached != null) { + return CompletableFuture.completedFuture(cached); + } + + // The resolvable profile is dynamic - server wants the client (us) to retrieve the full GameProfile + // from Mojang's API + + // The partial profile *should* always have either a name or a UUID, not both + CompletableFuture completedProfileFuture; + if (partial.getName() != null) { + completedProfileFuture = SkinProvider.requestUUIDFromUsername(partial.getName()) + .thenApply(uuid -> new GameProfile(uuid, partial.getName())); + } else { + completedProfileFuture = SkinProvider.requestUsernameFromUUID(partial.getId()) + .thenApply(name -> new GameProfile(partial.getId(), name)); + } + + return completedProfileFuture + .thenCompose(nameAndUUID -> { + // Fallback to partial if anything goes wrong - should replicate vanilla Java client behaviour + if (nameAndUUID.getId() == null || nameAndUUID.getName() == null) { + return CompletableFuture.completedFuture(partial); + } + + return SkinProvider.requestTexturesFromUUID(nameAndUUID.getId()) + .thenApply(encoded -> { + if (encoded == null) { + return partial; + } + + List properties = new ArrayList<>(); + properties.add(new GameProfile.Property("textures", encoded)); + nameAndUUID.setProperties(properties); + return nameAndUUID; + }); + }) + .thenApply(resolved -> { + RESOLVED_PROFILES_CACHE.put(profile, resolved); + return resolved; + }); + } + + public static GameProfile.@Nullable Texture getTextureDataFromProfile(GameProfile profile, GameProfile.TextureType type) { + Map textures; + try { + textures = profile.getTextures(false); + } catch (IllegalStateException e) { + GeyserImpl.getInstance().getLogger().debug("Could not decode textures from game profile %s, got: %s".formatted(profile, e.getMessage())); + return null; + } + + if (textures == null) { + return null; + } + return textures.get(type); + } + + public static void requestAndHandleSkinAndCape(AvatarEntity entity, GeyserSession session, Consumer skinAndCapeConsumer) { SkinProvider.requestSkinData(entity, session).whenCompleteAsync((skinData, throwable) -> { if (skinData == null) { @@ -211,7 +301,7 @@ public class SkinManager { }); } - public static void handleBedrockSkin(PlayerEntity playerEntity, BedrockClientData clientData) { + public static void handleBedrockSkin(AvatarEntity playerEntity, BedrockClientData clientData) { GeyserImpl geyser = GeyserImpl.getInstance(); if (geyser.getConfig().isDebugMode()) { geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.skin.bedrock.register", playerEntity.getUsername(), playerEntity.getUuid())); @@ -240,6 +330,10 @@ public class SkinManager { } } + public static UUID createOfflinePlayerUUID(String username) { + return UUID.nameUUIDFromBytes(("OfflinePlayer:" + username).getBytes(StandardCharsets.UTF_8)); + } + public record GameProfileData(String skinUrl, String capeUrl, boolean isAlex) { /** * Generate the GameProfileData from the given CompoundTag representing a GameProfile @@ -278,7 +372,7 @@ public class SkinManager { * @param entity entity to build the GameProfileData from * @return The built GameProfileData */ - public static @Nullable GameProfileData from(PlayerEntity entity) { + public static @Nullable GameProfileData from(AvatarEntity entity) { String texturesProperty = entity.getTexturesProperty(); if (texturesProperty == null) { // Likely offline mode diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index f3ad0be2f..ec88f6e93 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -38,7 +38,7 @@ import org.geysermc.geyser.api.skin.Cape; import org.geysermc.geyser.api.skin.Skin; import org.geysermc.geyser.api.skin.SkinData; import org.geysermc.geyser.api.skin.SkinGeometry; -import org.geysermc.geyser.entity.type.player.PlayerEntity; +import org.geysermc.geyser.entity.type.player.AvatarEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.FileUtils; @@ -236,7 +236,7 @@ public class SkinProvider { return CACHED_JAVA_CAPES.getIfPresent(capeUrl); } - static CompletableFuture requestSkinData(PlayerEntity entity, GeyserSession session) { + static CompletableFuture requestSkinData(AvatarEntity entity, GeyserSession session) { SkinManager.GameProfileData data = SkinManager.GameProfileData.from(entity); if (data == null) { // This player likely does not have a textures property @@ -476,16 +476,84 @@ public class SkinProvider { return data; } + public static @Nullable String shorthandUUID(@Nullable UUID uuid) { + if (uuid == null) { + return null; + } + + return uuid.toString().replace("-", ""); + } + + public static @Nullable UUID expandUUID(@Nullable String uuid) { + if (uuid == null) { + return null; + } + + long mostSignificant = Long.parseUnsignedLong(uuid.substring(0, 16), 16); + long leastSignificant = Long.parseUnsignedLong(uuid.substring(16), 16); + return new UUID(mostSignificant, leastSignificant); + } + + /** + * Request a player's username from their UUID + * + * @param uuid the player's UUID + * @return a completable username of the player + */ + public static CompletableFuture<@Nullable String> requestUsernameFromUUID(UUID uuid) { + return CompletableFuture.supplyAsync(() -> { + try { + JsonNode node = WebUtils.getJson("https://api.minecraftservices.com/minecraft/profile/lookup/" + shorthandUUID(uuid)); + JsonNode name = node.get("name"); + if (name == null) { + GeyserImpl.getInstance().getLogger().debug("No username found in Mojang response for " + uuid); + return null; + } + return name.asText(); + } catch (Exception e) { + if (GeyserImpl.getInstance().getConfig().isDebugMode()) { + e.printStackTrace(); + } + return null; + } + }, getExecutorService()); + } + + /** + * Request a player's UUID from their username + * + * @param username the player's username + * @return a completable UUID of the player + */ + public static CompletableFuture<@Nullable UUID> requestUUIDFromUsername(String username) { + return CompletableFuture.supplyAsync(() -> { + try { + JsonNode node = WebUtils.getJson("https://api.mojang.com/users/profiles/minecraft/" + username); + JsonNode id = node.get("id"); + if (id == null) { + GeyserImpl.getInstance().getLogger().debug("No UUID found in Mojang response for " + username); + return null; + } + return expandUUID(id.asText()); + } catch (Exception e) { + if (GeyserImpl.getInstance().getConfig().isDebugMode()) { + e.printStackTrace(); + } + return null; + } + }, getExecutorService()); + } + /** * Request textures from a player's UUID * - * @param uuid the player's UUID without any hyphens + * @param uuid the player's UUID * @return a completable GameProfile with textures included */ - public static CompletableFuture<@Nullable String> requestTexturesFromUUID(String uuid) { + public static CompletableFuture<@Nullable String> requestTexturesFromUUID(UUID uuid) { return CompletableFuture.supplyAsync(() -> { try { - JsonNode node = WebUtils.getJson("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid); + JsonNode node = WebUtils.getJson("https://sessionserver.mojang.com/session/minecraft/profile/" + shorthandUUID(uuid)); JsonNode properties = node.get("properties"); if (properties == null) { GeyserImpl.getInstance().getLogger().debug("No properties found in Mojang response for " + uuid); @@ -509,28 +577,13 @@ public class SkinProvider { * @return a completable GameProfile with textures included */ public static CompletableFuture<@Nullable String> requestTexturesFromUsername(String username) { - return CompletableFuture.supplyAsync(() -> { - try { - // Offline skin, or no present UUID - JsonNode node = WebUtils.getJson("https://api.mojang.com/users/profiles/minecraft/" + username); - JsonNode id = node.get("id"); - if (id == null) { - GeyserImpl.getInstance().getLogger().debug("No UUID found in Mojang response for " + username); - return null; + return requestUUIDFromUsername(username) + .thenCompose(uuid -> { + if (uuid == null) { + return CompletableFuture.completedFuture(null); } - return id.asText(); - } catch (Exception e) { - if (GeyserImpl.getInstance().getConfig().isDebugMode()) { - e.printStackTrace(); - } - return null; - } - }, getExecutorService()).thenCompose(uuid -> { - if (uuid == null) { - return CompletableFuture.completedFuture(null); - } - return requestTexturesFromUUID(uuid); - }); + return requestTexturesFromUUID(uuid); + }); } private static BufferedImage downloadImage(String imageUrl) throws IOException { diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java index 41e4025f1..47fb17197 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java @@ -31,6 +31,7 @@ import org.cloudburstmc.protocol.bedrock.packet.PlayerSkinPacket; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.skin.Skin; import org.geysermc.geyser.api.skin.SkinData; +import org.geysermc.geyser.entity.type.player.AvatarEntity; import org.geysermc.geyser.entity.type.player.SkullPlayerEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; @@ -55,7 +56,7 @@ public class SkullSkinManager extends SkinManager { .build(); } - public static void requestAndHandleSkin(SkullPlayerEntity entity, GeyserSession session, + public static void requestAndHandleSkin(AvatarEntity entity, GeyserSession session, Consumer skinConsumer) { BiConsumer applySkin = (skin, throwable) -> { try { @@ -77,11 +78,13 @@ public class SkullSkinManager extends SkinManager { GameProfileData data = GameProfileData.from(entity); if (data == null) { - GeyserImpl.getInstance().getLogger().debug("Using fallback skin for skull at " + entity.getSkullPosition() + - " with texture value: " + entity.getTexturesProperty() + " and UUID: " + entity.getSkullUUID()); - // No texture available, fallback using the UUID - SkinData fallback = SkinProvider.determineFallbackSkinData(entity.getSkullUUID()); - applySkin.accept(fallback.skin(), null); + if (entity instanceof SkullPlayerEntity skullEntity) { + GeyserImpl.getInstance().getLogger().debug("Using fallback skin for skull at " + skullEntity.getSkullPosition() + + " with texture value: " + entity.getTexturesProperty() + " and UUID: " + skullEntity.getSkullUUID()); + // No texture available, fallback using the UUID + SkinData fallback = SkinProvider.determineFallbackSkinData(skullEntity.getSkullUUID()); + applySkin.accept(fallback.skin(), null); + } } else { SkinProvider.requestSkin(entity.getUuid(), data.skinUrl(), true) .whenCompleteAsync(applySkin); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java index ea9adba98..6abd7025d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java @@ -314,7 +314,7 @@ public final class BundleInventoryTranslator { return Fraction.ONE; } } - return Fraction.getFraction(1, itemStack.getComponentElseGet(DataComponentTypes.MAX_STACK_SIZE, () -> itemStack.asItem().defaultMaxStackSize())); + return Fraction.getFraction(1, itemStack.getMaxStackSize()); } public static int capacityForItemStack(Fraction bundleWeight, GeyserItemStack itemStack) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java index 8d182f923..5c66288fc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java @@ -46,11 +46,11 @@ public class CartographyInventoryTranslator extends AbstractBlockInventoryTransl if (javaDestinationSlot == 0) { // Bedrock Edition can use paper or an empty map in slot 0 GeyserItemStack itemStack = javaSourceSlot == -1 ? session.getPlayerInventory().getCursor() : container.getItem(javaSourceSlot); - return itemStack.asItem() == Items.PAPER || itemStack.asItem() == Items.MAP; + return itemStack.is(Items.PAPER) || itemStack.is(Items.MAP); } else if (javaDestinationSlot == 1) { // Bedrock Edition can use a compass to create locator maps, or use a filled map, in the ADDITIONAL slot GeyserItemStack itemStack = javaSourceSlot == -1 ? session.getPlayerInventory().getCursor() : container.getItem(javaSourceSlot); - return itemStack.asItem() == Items.COMPASS || itemStack.asItem() == Items.FILLED_MAP; + return itemStack.is(Items.COMPASS) || itemStack.is(Items.FILLED_MAP); } return false; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java index baf53487d..0c08c8df1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java @@ -329,8 +329,7 @@ public abstract class InventoryTranslator { if (destSlot == 5) { // only set the head if the destination is the head slot GeyserItemStack javaItem = inventory.getItem(sourceSlot); - if (javaItem.asItem() == Items.PLAYER_HEAD - && javaItem.hasNonBaseComponents()) { + if (javaItem.is(Items.PLAYER_HEAD) && javaItem.hasNonBaseComponents()) { FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentTypes.PROFILE)); } } else if (sourceSlot == 5) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 15109a574..fb2880fb4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -108,9 +108,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator textures; - try { - textures = profile.getTextures(false); - } catch (IllegalStateException e) { - GeyserImpl.getInstance().getLogger().debug("Could not decode player head from profile %s, got: %s".formatted(profile, e.getMessage())); + // Ideally we'd update the item once the profile has been resolved, but this isn't really possible, + // also see comments in PlayerHeadItem for full explanation + GameProfile resolved = SkinManager.resolveProfile(profile).getNow(null); + if (resolved == null) { return null; } - if (textures == null || textures.isEmpty()) { - // TODO the java client looks up the texture properties here and updates the item - return null; - } - - Texture skinTexture = textures.get(TextureType.SKIN); - + GameProfile.Texture skinTexture = SkinManager.getTextureDataFromProfile(resolved, GameProfile.TextureType.SKIN); if (skinTexture == null) { return null; } - - String skinHash = skinTexture.getURL().substring(skinTexture.getURL().lastIndexOf('/') + 1); - return BlockRegistries.CUSTOM_SKULLS.get(skinHash); + return BlockRegistries.CUSTOM_SKULLS.get(skinTexture.getHash()); } - private static void translatePlayerHead(GeyserSession session, GameProfile profile, ItemData.Builder builder) { + private static void translatePlayerHead(GeyserSession session, ResolvableProfile profile, ItemData.Builder builder) { CustomSkull customSkull = getCustomSkull(profile); if (customSkull != null) { CustomBlockData customBlockData = customSkull.getCustomBlockData(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CopperBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CopperBlockEntityTranslator.java new file mode 100644 index 000000000..15e699f6c --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CopperBlockEntityTranslator.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.level.block.entity; + +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtMapBuilder; +import org.geysermc.geyser.level.block.property.Properties; +import org.geysermc.geyser.level.block.type.BlockState; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; + +@BlockEntity(type = BlockEntityType.COPPER_GOLEM_STATUE) +public class CopperBlockEntityTranslator extends BlockEntityTranslator implements RequiresBlockState { + + @Override + public void translateTag(GeyserSession session, NbtMapBuilder bedrockNbt, NbtMap javaNbt, BlockState blockState) { + // Copper golem poses are set through block states on Java and through NBT on bedrock + bedrockNbt.putBoolean("isMovable", false) + .putInt("Pose", translateCopperPose(blockState.getValue(Properties.COPPER_GOLEM_POSE))); + } + + private static int translateCopperPose(String java) { + return switch (java) { + case "standing" -> 0; + case "sitting" -> 1; + case "running" -> 2; + case "star" -> 3; + default -> throw new IllegalStateException("Unexpected value for copper pose: " + java); + }; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShelfBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShelfBlockEntityTranslator.java new file mode 100644 index 000000000..ff01ecbd5 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShelfBlockEntityTranslator.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.level.block.entity; + +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtMapBuilder; +import org.cloudburstmc.nbt.NbtType; +import org.geysermc.geyser.item.parser.ItemStackParser; +import org.geysermc.geyser.level.block.type.BlockState; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; + +import java.util.Comparator; + +@BlockEntity(type = BlockEntityType.SHELF) +public class ShelfBlockEntityTranslator extends BlockEntityTranslator { + + @Override + public void translateTag(GeyserSession session, NbtMapBuilder bedrockNbt, NbtMap javaNbt, BlockState blockState) { + // We can't translate align_items_to_bottom, I think :( + bedrockNbt.putList("Items", NbtType.COMPOUND, javaNbt.getList("Items", NbtType.COMPOUND).stream() + .sorted(Comparator.comparingInt(stack -> stack.getByte("Slot"))) + .map(stack -> ItemStackParser.javaItemStackToBedrock(session, stack).build()) + .toList()); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 10d45658e..9c9e61454 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -37,18 +37,20 @@ import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; -import org.geysermc.geyser.skin.SkinProvider; +import org.geysermc.geyser.skin.SkinManager; +import org.geysermc.geyser.util.EntityUtils; +import org.geysermc.mcprotocollib.auth.GameProfile; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile; import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; -import java.nio.charset.StandardCharsets; import java.util.List; -import java.util.Locale; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @BlockEntity(type = BlockEntityType.SKULL) public class SkullBlockEntityTranslator extends BlockEntityTranslator implements RequiresBlockState { + @Override public void translateTag(GeyserSession session, NbtMapBuilder bedrockNbt, NbtMap javaNbt, BlockState blockState) { Integer rotation = blockState.getValue(Properties.ROTATION_16); @@ -61,41 +63,30 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements } } - private static UUID getUUID(NbtMap profile) { - int[] uuidAsArray = profile.getIntArray("id"); - if (uuidAsArray.length == 4) { - // thank u viaversion - return new UUID((long) uuidAsArray[0] << 32 | ((long) uuidAsArray[1] & 0xFFFFFFFFL), - (long) uuidAsArray[2] << 32 | ((long) uuidAsArray[3] & 0xFFFFFFFFL)); + private static List parseProperties(List properties) { + if (properties == null) { + return null; } - // Convert username to an offline UUID - String username = null; - String nameTag = profile.getString("name", null); - if (nameTag != null) { - username = nameTag.toLowerCase(Locale.ROOT); - } - return UUID.nameUUIDFromBytes(("OfflinePlayer:" + username).getBytes(StandardCharsets.UTF_8)); + return properties.stream() + .map(property -> { + String name = property.getString("name"); + String value = property.getString("value"); + String signature = property.getString("signature"); + return new GameProfile.Property(name, value, signature); + }) + .toList(); } - private static CompletableFuture<@Nullable String> getTextures(NbtMap profile, UUID uuid) { - List properties = profile.getList("properties", NbtType.COMPOUND); - if (properties.isEmpty()) { - if (uuid != null && uuid.version() == 4) { - String uuidString = uuid.toString().replace("-", ""); - return SkinProvider.requestTexturesFromUUID(uuidString); - } else { - String nameTag = profile.getString("name", null); - if (nameTag != null) { - // Fall back to username if UUID was missing or was an offline mode UUID - return SkinProvider.requestTexturesFromUsername(nameTag); - } - } - return CompletableFuture.completedFuture(null); - } + public static ResolvableProfile parseResolvableProfile(NbtMap profile) { + UUID uuid = EntityUtils.uuidFromIntArray(profile.getIntArray("id", null)); + String name = profile.getString("name", null); + List properties = parseProperties(profile.getList("properties", NbtType.COMPOUND, null)); - NbtMap tag1 = properties.get(0); - String texture = tag1.getString("value", null); - return CompletableFuture.completedFuture(texture); + GameProfile partialOrStatic = new GameProfile(uuid, name); + partialOrStatic.setProperties(properties); + // Only if all fields are present, then the profile is a static one + // TODO shorthand constructor in MCPL + return new ResolvableProfile(partialOrStatic); } public static @Nullable BlockDefinition translateSkull(GeyserSession session, NbtMap javaNbt, Vector3i blockPosition, BlockState blockState) { @@ -104,17 +95,15 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements session.getSkullCache().removeSkull(blockPosition); return null; } - UUID uuid = getUUID(profile); - CompletableFuture texturesFuture = getTextures(profile, uuid); - if (texturesFuture.isDone()) { + CompletableFuture resolvedFuture = SkinManager.resolveProfile(parseResolvableProfile(profile)); + if (resolvedFuture.isDone()) { try { - String texture = texturesFuture.get(); - if (texture == null) { - session.getGeyser().getLogger().debug("Custom skull with invalid profile tag: " + blockPosition + " " + javaNbt); + SkullCache.Skull skull = session.getSkullCache().putSkull(blockPosition, resolvedFuture.get(), blockState); + if (skull == null) { + session.getGeyser().getLogger().debug("Custom skull with invalid profile: " + blockPosition + " " + resolvedFuture.get()); return null; } - SkullCache.Skull skull = session.getSkullCache().putSkull(blockPosition, uuid, texture, blockState); return skull.getBlockDefinition(); } catch (InterruptedException | ExecutionException e) { session.getGeyser().getLogger().debug("Failed to acquire textures for custom skull: " + blockPosition + " " + javaNbt); @@ -126,22 +115,24 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements } // profile contained a username, so we have to wait for it to be retrieved - texturesFuture.whenComplete((texturesProperty, throwable) -> { - if (texturesProperty == null) { - session.getGeyser().getLogger().debug("Custom skull with invalid profile tag: " + blockPosition + " " + javaNbt); + resolvedFuture.whenComplete((resolved, throwable) -> { + if (throwable != null ) { + session.getGeyser().getLogger().debug("Failed resolving profile of player head at: " + blockPosition + " " + javaNbt); + if (GeyserImpl.getInstance().getConfig().isDebugMode()) { + throwable.printStackTrace(); + } return; } - - session.ensureInEventLoop(() -> putSkull(session, blockPosition, uuid, texturesProperty, blockState)); + session.ensureInEventLoop(() -> putSkull(session, blockPosition, resolved, blockState)); }); // We don't have the textures yet, so we can't determine if a custom block was defined for this skull return null; } - private static void putSkull(GeyserSession session, Vector3i blockPosition, UUID uuid, String texturesProperty, BlockState blockState) { - SkullCache.Skull skull = session.getSkullCache().putSkull(blockPosition, uuid, texturesProperty, blockState); - if (skull.getBlockDefinition() != null) { + private static void putSkull(GeyserSession session, Vector3i blockPosition, GameProfile resolved, BlockState blockState) { + SkullCache.Skull skull = session.getSkullCache().putSkull(blockPosition, resolved, blockState); + if (skull != null && skull.getBlockDefinition() != null) { UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); updateBlockPacket.setDataLayer(0); updateBlockPacket.setBlockPosition(blockPosition); diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/VaultBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/VaultBlockEntityTranslator.java index bebea2f22..b1eb8fa71 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/VaultBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/VaultBlockEntityTranslator.java @@ -25,39 +25,24 @@ package org.geysermc.geyser.translator.level.block.entity; -import it.unimi.dsi.fastutil.ints.Int2IntMap; -import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.longs.LongArrayList; import it.unimi.dsi.fastutil.longs.LongList; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; -import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; -import org.cloudburstmc.protocol.common.util.TriConsumer; import org.geysermc.geyser.entity.type.player.PlayerEntity; -import org.geysermc.geyser.inventory.item.Potion; +import org.geysermc.geyser.item.parser.ItemStackParser; import org.geysermc.geyser.level.block.type.BlockState; -import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.registry.JavaRegistries; -import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.geyser.translator.item.ItemTranslator; -import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; +import org.geysermc.geyser.util.EntityUtils; import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Optional; import java.util.UUID; @BlockEntity(type = BlockEntityType.VAULT) public class VaultBlockEntityTranslator extends BlockEntityTranslator { - private static boolean loggedComponentTranslationFailure = false; // Bedrock 1.21 does not send the position nor ID in the tag. @Override @@ -72,49 +57,12 @@ public class VaultBlockEntityTranslator extends BlockEntityTranslator { @Override public void translateTag(GeyserSession session, NbtMapBuilder bedrockNbt, NbtMap javaNbt, BlockState blockState) { NbtMap sharedData = javaNbt.getCompound("shared_data"); - - NbtMap item = sharedData.getCompound("display_item"); - ItemMapping mapping = session.getItemMappings().getMapping(item.getString("id")); - if (mapping == null) { - bedrockNbt.putCompound("display_item", NbtMap.builder() - .putByte("Count", (byte) 0) - .putShort("Damage", (short) 0) - .putString("Name", "") - .putByte("WasPickedUp", (byte) 0).build()); - } else { - int count = item.getInt("count"); - NbtMap componentsTag = item.getCompound("components"); - NbtMapBuilder itemAsNbt; - if (!componentsTag.isEmpty()) { - DataComponents components = new DataComponents(new HashMap<>()); - for (Map.Entry entry : componentsTag.entrySet()) { - var consumer = DATA_COMPONENT_DECODERS.get(entry.getKey()); - if (consumer != null) { - try { - consumer.accept(session, (NbtMap) entry.getValue(), components); - } catch (RuntimeException exception) { - if (!loggedComponentTranslationFailure) { - session.getGeyser().getLogger().warning("Failed to translate vault item component data for " + entry.getKey() + "! Did the component structure change?"); - loggedComponentTranslationFailure = true; - } - } - } - } - ItemData bedrockItem = ItemTranslator.translateToBedrock(session, mapping.getJavaItem(), mapping, count, components).build(); - itemAsNbt = BedrockItemBuilder.createItemNbt(mapping, bedrockItem.getCount(), bedrockItem.getDamage()); - if (bedrockItem.getTag() != null) { - itemAsNbt.putCompound("tag", bedrockItem.getTag()); - } - } else { - itemAsNbt = BedrockItemBuilder.createItemNbt(mapping, count, mapping.getBedrockData()); - } - bedrockNbt.putCompound("display_item", itemAsNbt.build()); - } + bedrockNbt.putCompound("display_item", ItemStackParser.javaItemStackToBedrock(session, sharedData.getCompound("display_item")).build()); List connectedPlayers = sharedData.getList("connected_players", NbtType.INT_ARRAY); LongList bedrockPlayers = new LongArrayList(connectedPlayers.size()); for (int[] player : connectedPlayers) { - UUID uuid = uuidFromIntArray(player); + UUID uuid = EntityUtils.uuidFromIntArray(player); if (uuid.equals(session.getPlayerEntity().getUuid())) { bedrockPlayers.add(session.getPlayerEntity().getGeyserId()); } else { @@ -130,26 +78,4 @@ public class VaultBlockEntityTranslator extends BlockEntityTranslator { // if it is not sent over the network bedrockNbt.putFloat("connected_particle_range", (float) sharedData.getDouble("connected_particles_range", 4.5d)); } - - // From ViaVersion! thank u!! - private static UUID uuidFromIntArray(int[] parts) { - return new UUID((long) parts[0] << 32 | (parts[1] & 0xFFFFFFFFL), (long) parts[2] << 32 | (parts[3] & 0xFFFFFFFFL)); - } - - // This might be easier to maintain in the long run so items don't have two translate methods. - // Also, it's not out of the question that block entities get the data component treatment, likely rendering this useless. - // The goal is to just translate the basics so clients know what potion is roughly present, and that any enchantment even exists. - private static final Map> DATA_COMPONENT_DECODERS = Map.of( - "minecraft:potion_contents", (session, tag, components) -> { - // Can only translate built-in potions, potions with custom colours don't work - Optional.ofNullable(tag.getString("potion")).map(Potion::getByJavaIdentifier) - .ifPresent(potion -> components.put(DataComponentTypes.POTION_CONTENTS, potion.toComponent())); - }, - "minecraft:enchantments", (session, tag, components) -> { // Enchanted books already have glint. Translating them doesn't matter. - Int2IntMap enchantments = new Int2IntOpenHashMap(tag.size()); - for (Map.Entry entry : tag.entrySet()) { - enchantments.put(JavaRegistries.ENCHANTMENT.networkId(session, MinecraftKey.key(entry.getKey())), (int) entry.getValue()); - } - components.put(DataComponentTypes.ENCHANTMENTS, new ItemEnchantments(enchantments)); - }); } 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 0b3c4f3aa..0da9eb73a 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 @@ -339,7 +339,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator 1) { - if (itemStack.asItem() == Items.BUCKET || itemStack.asItem() == Items.GLASS_BOTTLE) { + if (itemStack.is(Items.BUCKET) || itemStack.is(Items.GLASS_BOTTLE)) { // Using a stack of buckets or glass bottles will result in an item being added to the first empty slot. // We need to revert the item in case the interaction fails. The order goes from left to right in the // hotbar. Then left to right and top to bottom in the inventory. diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java index 64681723e..137092f7a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java @@ -61,7 +61,7 @@ public class BedrockMobEquipmentTranslator extends PacketTranslator switch (packet.getAction()) { case INTERACT: - if (session.getPlayerInventory().getItemInHand().asItem() == Items.SHIELD) { + if (session.getPlayerInventory().getItemInHand().is(Items.SHIELD)) { break; } ServerboundInteractPacket interactPacket = new ServerboundInteractPacket(entity.getEntityId(), diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCodeOfConductTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCodeOfConductTranslator.java new file mode 100644 index 000000000..b75cc5acd --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCodeOfConductTranslator.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.protocol.java; + +import org.geysermc.cumulus.form.CustomForm; +import org.geysermc.geyser.text.MinecraftLocale; +import org.geysermc.geyser.util.CodeOfConductManager; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.configuration.clientbound.ClientboundCodeOfConductPacket; + +@Translator(packet = ClientboundCodeOfConductPacket.class) +public class JavaCodeOfConductTranslator extends PacketTranslator { + + @Override + public void translate(GeyserSession session, ClientboundCodeOfConductPacket packet) { + if (session.hasAcceptedCodeOfConduct()) { + return; + } else if (CodeOfConductManager.getInstance().hasAcceptedCodeOfConduct(session, packet.getCodeOfConduct())) { + session.acceptCodeOfConduct(); + return; + } + showCodeOfConductForm(session, packet.getCodeOfConduct()); + } + + private static void showCodeOfConductForm(GeyserSession session, String codeOfConduct) { + session.prepareForConfigurationForm(); + session.sendForm(CustomForm.builder() + .translator(MinecraftLocale::getLocaleString, session.locale()) + .title("multiplayer.codeOfConduct.title") + .label(codeOfConduct) + .toggle("multiplayer.codeOfConduct.check") + .validResultHandler(response -> { + if (response.asToggle()) { + CodeOfConductManager.getInstance().saveCodeOfConductAccepted(session, codeOfConduct); + } + session.acceptCodeOfConduct(); + }) + .closedResultHandler(() -> session.disconnect(MinecraftLocale.getLocaleString("multiplayer.disconnect.code_of_conduct", session.locale()))) + ); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/dialogues/JavaShowDialogueConfigurationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/dialogues/JavaShowDialogueConfigurationTranslator.java index 526394420..6802c0c27 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/dialogues/JavaShowDialogueConfigurationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/dialogues/JavaShowDialogueConfigurationTranslator.java @@ -36,13 +36,7 @@ public class JavaShowDialogueConfigurationTranslator extends PacketTranslator { - GameProfile profile = stack.getComponent(DataComponentTypes.PROFILE); - if (livingEntity instanceof PlayerEntity && stack.asItem() == Items.PLAYER_HEAD && profile != null) { + ResolvableProfile profile = stack.getComponent(DataComponentTypes.PROFILE); + if (livingEntity instanceof PlayerEntity && stack.is(Items.PLAYER_HEAD) && profile != null) { FakeHeadProvider.setHead(session, (PlayerEntity) livingEntity, profile); } else { FakeHeadProvider.restoreOriginalSkin(session, livingEntity); @@ -104,13 +104,13 @@ public class JavaSetEquipmentTranslator extends PacketTranslator - GeyserImpl.getInstance().getLogger().debug("Loaded Local Bedrock Java Skin Data for " + session.getClientData().getUsername())); + playerEntity.setSkin(profile, true, + () -> GeyserImpl.getInstance().getLogger().debug("Loaded Local Bedrock Java Skin Data for " + session.getClientData().getUsername())); } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 5368a6bb4..dfbdc4091 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -234,7 +234,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator { GeyserItemStack template = inventory.getItem(SmithingInventoryTranslator.TEMPLATE); - if (template.asItem() != Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) { + if (!template.is(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE)) { // Technically we should probably also do this for custom items, but last I checked Bedrock doesn't even support that. return; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java index 1fb12d209..f6e6ac53e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java @@ -38,8 +38,8 @@ public class JavaSetDefaultSpawnPositionTranslator extends PacketTranslator matchers = predicate.getProperties(); diff --git a/core/src/main/java/org/geysermc/geyser/util/CodeOfConductManager.java b/core/src/main/java/org/geysermc/geyser/util/CodeOfConductManager.java new file mode 100644 index 000000000..8692f35b6 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/util/CodeOfConductManager.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.util; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.event.bedrock.SessionAcceptCodeOfConductEvent; +import org.geysermc.geyser.api.event.java.ServerCodeOfConductEvent; +import org.geysermc.geyser.session.GeyserSession; + +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +public class CodeOfConductManager { + private static final Path SAVE_PATH = Path.of("cache/codeofconducts.json"); + private static CodeOfConductManager loaded = null; + + private final Object2IntMap playerAcceptedCodeOfConducts = new Object2IntOpenHashMap<>(); + private boolean dirty = false; + + private CodeOfConductManager() { + Path savePath = getSavePath(); + if (Files.exists(savePath) && Files.isRegularFile(savePath)) { + GeyserImpl.getInstance().getLogger().debug("Loading codeofconducts.json"); + + try (Reader reader = new FileReader(savePath.toFile())) { + //noinspection deprecation - otherwise 1.16.5 doesn't work + JsonObject object = new JsonParser().parse(reader).getAsJsonObject(); + for (Map.Entry entry : object.entrySet()) { + playerAcceptedCodeOfConducts.put(entry.getKey(), entry.getValue().getAsInt()); + } + } catch (IOException exception) { + GeyserImpl.getInstance().getLogger().error("Failed to read code of conduct cache!", exception); + } + } else { + GeyserImpl.getInstance().getLogger().debug("codeofconducts.json not found, not loading"); + } + + // Save file now and every 5 minutes after + GeyserImpl.getInstance().getScheduledThread().scheduleAtFixedRate(this::save, 0L, 5L, TimeUnit.MINUTES); + } + + public boolean hasAcceptedCodeOfConduct(GeyserSession session, String codeOfConduct) { + ServerCodeOfConductEvent event = new ServerCodeOfConductEvent(session, codeOfConduct); + session.getGeyser().getEventBus().fire(event); + return event.accepted() || playerAcceptedCodeOfConducts.getInt(session.xuid()) == codeOfConduct.hashCode(); + } + + public void saveCodeOfConductAccepted(GeyserSession session, String codeOfConduct) { + SessionAcceptCodeOfConductEvent event = new SessionAcceptCodeOfConductEvent(session, codeOfConduct); + session.getGeyser().getEventBus().fire(event); + if (!event.shouldSkipSaving()) { + playerAcceptedCodeOfConducts.put(session.xuid(), codeOfConduct.hashCode()); + dirty = true; + } + } + + public void save() { + if (dirty) { + GeyserImpl.getInstance().getLogger().debug("Saving codeofconducts.json"); + + JsonObject saved = new JsonObject(); + playerAcceptedCodeOfConducts.forEach(saved::addProperty); + try { + Files.writeString(getSavePath(), saved.toString()); + dirty = false; + } catch (IOException exception) { + GeyserImpl.getInstance().getLogger().error("Failed to write code of conduct cache!", exception); + } + } + } + + private static Path getSavePath() { + return GeyserImpl.getInstance().configDirectory().resolve(SAVE_PATH); + } + + public static void load() { + if (loaded == null) { + loaded = new CodeOfConductManager(); + } + } + + public static CodeOfConductManager getInstance() { + if (loaded == null) { + throw new IllegalStateException("CodeOfConductManager was accessed before loaded"); + } + return loaded; + } +} 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 02e28167c..d4464938d 100644 --- a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java @@ -171,7 +171,7 @@ public class DimensionUtils { * * @param javaDimension Dimension ID to convert * @return Converted Bedrock edition dimension ID - */ + */ // TODO take a key public static int javaToBedrock(String javaDimension) { return switch (javaDimension) { case BedrockDimension.NETHER_IDENTIFIER -> BedrockDimension.BEDROCK_NETHER_ID; 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 ed1093446..915db8b3a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -54,6 +54,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Equippable; import java.util.Locale; +import java.util.UUID; public final class EntityUtils { /** @@ -296,14 +297,14 @@ public final class EntityUtils { * Determine if an action would result in a successful bucketing of the given entity. */ public static boolean attemptToBucket(GeyserItemStack itemInHand) { - return itemInHand.asItem() == Items.WATER_BUCKET; + return itemInHand.is(Items.WATER_BUCKET); } /** * Attempt to determine the result of saddling the given entity. */ public static InteractionResult attemptToSaddle(Entity entityToSaddle, GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SADDLE) { + if (itemInHand.is(Items.SADDLE)) { if (!entityToSaddle.getFlag(EntityFlag.SADDLED) && !entityToSaddle.getFlag(EntityFlag.BABY)) { // Saddle return InteractionResult.SUCCESS; @@ -358,7 +359,17 @@ public final class EntityUtils { } GeyserHolderSet holderSet = GeyserHolderSet.fromHolderSet(JavaRegistries.ENTITY_TYPE, equippable.allowedEntities()); - return session.getTagCache().is(holderSet, entity); + return holderSet.contains(session, entity); + } + + // From ViaVersion! thank u!! + public static UUID uuidFromIntArray(int[] uuid) { + if (uuid != null && uuid.length == 4) { + // thank u viaversion + return new UUID((long) uuid[0] << 32 | ((long) uuid[1] & 0xFFFFFFFFL), + (long) uuid[2] << 32 | ((long) uuid[3] & 0xFFFFFFFFL)); + } + return null; } private EntityUtils() { 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 79dcb9337..d9f9b5f7a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java +++ b/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java @@ -76,7 +76,11 @@ public enum InteractiveTag { REMOVE_WOLF_ARMOR("removewolfarmor"), REPAIR_WOLF_ARMOR("repairwolfarmor"), EQUIP_HARNESS("equipharness"), - REMOVE_HARNESS("removeharness"); + REMOVE_HARNESS("removeharness"), + SCRAPE, + WAX_ON, + WAX_OFF, + DROP_ITEM; /** * The full string that should be passed on to the client. diff --git a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java index 49517e3f6..bc23994cd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -266,7 +266,7 @@ public class InventoryUtils { canStackDebug(item1, item2); if (item1.isEmpty() || item2.isEmpty()) return false; - return item1.getJavaId() == item2.getJavaId() && Objects.equals(item1.getComponents(), item2.getComponents()); + return item1.isSameItem(item2) && Objects.equals(item1.getComponents(), item2.getComponents()); } private static void canStackDebug(GeyserItemStack item1, GeyserItemStack item2) { @@ -379,7 +379,7 @@ public class InventoryUtils { && Objects.equals(itemStack.getComponents(), other.getDataComponentsPatch()); } if (slotDisplay instanceof TagSlotDisplay tagSlotDisplay) { - return session.getTagCache().is(new Tag<>(JavaRegistries.ITEM, tagSlotDisplay.tag()), itemStack.asItem()); + return itemStack.is(session, new Tag<>(JavaRegistries.ITEM, tagSlotDisplay.tag())); } session.getGeyser().getLogger().warning("Unknown slot display type: " + slotDisplay); return false; diff --git a/core/src/main/java/org/geysermc/geyser/util/MinecraftKey.java b/core/src/main/java/org/geysermc/geyser/util/MinecraftKey.java index 5f1c8e084..891c3ed82 100644 --- a/core/src/main/java/org/geysermc/geyser/util/MinecraftKey.java +++ b/core/src/main/java/org/geysermc/geyser/util/MinecraftKey.java @@ -26,6 +26,9 @@ package org.geysermc.geyser.util; import net.kyori.adventure.key.Key; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.util.Identifier; +import org.geysermc.geyser.impl.IdentifierImpl; import org.intellij.lang.annotations.Subst; public final class MinecraftKey { @@ -36,4 +39,25 @@ public final class MinecraftKey { public static Key key(@Subst("empty") String s) { return Key.key(s); } + + /** + * To prevent constant warnings from invalid regex. + */ + public static Key key(@Subst("empty") String namespace, @Subst("empty") String value) { + return Key.key(namespace, value); + } + + public static @Nullable Key identifierToKey(@Nullable Identifier identifier) { + if (identifier == null) { + return null; + } + return identifier instanceof IdentifierImpl impl ? impl.identifier() : key(identifier.namespace(), identifier.path()); + } + + public static @Nullable Identifier keyToIdentifier(@Nullable Key key) { + if (key == null) { + return null; + } + return new IdentifierImpl(key); + } } diff --git a/core/src/main/resources/java/item_data_components.json b/core/src/main/resources/java/item_data_components.json deleted file mode 100644 index f36eb17ec..000000000 --- a/core/src/main/resources/java/item_data_components.json +++ /dev/null @@ -1,23310 +0,0 @@ -[ - { - "id": 0, - "key": "minecraft:air", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw1taW5lY3JhZnQ6YWly", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2Jsb2NrLm1pbmVjcmFmdC5haXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1, - "key": "minecraft:stone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6c3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5zdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 2, - "key": "minecraft:granite", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6Z3Jhbml0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5ncmFuaXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 3, - "key": "minecraft:polished_granite", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cG9saXNoZWRfZ3Jhbml0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ncmFuaXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 4, - "key": "minecraft:diorite", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZGlvcml0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5kaW9yaXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 5, - "key": "minecraft:polished_diorite", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cG9saXNoZWRfZGlvcml0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kaW9yaXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 6, - "key": "minecraft:andesite", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6YW5kZXNpdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5hbmRlc2l0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 7, - "key": "minecraft:polished_andesite", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cG9saXNoZWRfYW5kZXNpdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9hbmRlc2l0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 8, - "key": "minecraft:deepslate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGVlcHNsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 9, - "key": "minecraft:cobbled_deepslate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y29iYmxlZF9kZWVwc2xhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jb2JibGVkX2RlZXBzbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 10, - "key": "minecraft:polished_deepslate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cG9saXNoZWRfZGVlcHNsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kZWVwc2xhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 11, - "key": "minecraft:calcite", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y2FsY2l0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5jYWxjaXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 12, - "key": "minecraft:tuff", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6dHVmZg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC50dWZmAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 13, - "key": "minecraft:tuff_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6dHVmZl9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC50dWZmX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 14, - "key": "minecraft:tuff_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6dHVmZl9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC50dWZmX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 15, - "key": "minecraft:tuff_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6dHVmZl93YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC50dWZmX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 16, - "key": "minecraft:chiseled_tuff", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hpc2VsZWRfdHVmZg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF90dWZmAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 17, - "key": "minecraft:polished_tuff", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cG9saXNoZWRfdHVmZg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF90dWZmAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 18, - "key": "minecraft:polished_tuff_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cG9saXNoZWRfdHVmZl9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF90dWZmX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 19, - "key": "minecraft:polished_tuff_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6cG9saXNoZWRfdHVmZl9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF90dWZmX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 20, - "key": "minecraft:polished_tuff_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cG9saXNoZWRfdHVmZl93YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF90dWZmX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 21, - "key": "minecraft:tuff_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6dHVmZl9icmlja3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC50dWZmX2JyaWNrcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 22, - "key": "minecraft:tuff_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6dHVmZl9icmlja19zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC50dWZmX2JyaWNrX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 23, - "key": "minecraft:tuff_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6dHVmZl9icmlja19zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC50dWZmX2JyaWNrX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 24, - "key": "minecraft:tuff_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6dHVmZl9icmlja193YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC50dWZmX2JyaWNrX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 25, - "key": "minecraft:chiseled_tuff_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y2hpc2VsZWRfdHVmZl9icmlja3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF90dWZmX2JyaWNrcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 26, - "key": "minecraft:dripstone_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZHJpcHN0b25lX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kcmlwc3RvbmVfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 27, - "key": "minecraft:grass_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ncmFzc19ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 28, - "key": "minecraft:dirt", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6ZGlydA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5kaXJ0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 29, - "key": "minecraft:coarse_dirt", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29hcnNlX2RpcnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jb2Fyc2VfZGlydAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 30, - "key": "minecraft:podzol", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6cG9kem9s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5wb2R6b2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 31, - "key": "minecraft:rooted_dirt", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cm9vdGVkX2RpcnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5yb290ZWRfZGlydAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 32, - "key": "minecraft:mud", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw1taW5lY3JhZnQ6bXVk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2Jsb2NrLm1pbmVjcmFmdC5tdWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 33, - "key": "minecraft:crimson_nylium", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9ueWxpdW0=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX255bGl1bQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 34, - "key": "minecraft:warped_nylium", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX255bGl1bQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfbnlsaXVtAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 35, - "key": "minecraft:cobblestone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29iYmxlc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jb2JibGVzdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 36, - "key": "minecraft:oak_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6b2FrX3BsYW5rcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vYWtfcGxhbmtzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 37, - "key": "minecraft:spruce_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BydWNlX3BsYW5rcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfcGxhbmtzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 38, - "key": "minecraft:birch_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlyY2hfcGxhbmtz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9wbGFua3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 39, - "key": "minecraft:jungle_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6anVuZ2xlX3BsYW5rcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfcGxhbmtzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 40, - "key": "minecraft:acacia_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YWNhY2lhX3BsYW5rcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfcGxhbmtzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 41, - "key": "minecraft:cherry_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hlcnJ5X3BsYW5rcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfcGxhbmtzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 42, - "key": "minecraft:dark_oak_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19vYWtfcGxhbmtz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19wbGFua3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 43, - "key": "minecraft:pale_oak_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9vYWtfcGxhbmtz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19wbGFua3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 44, - "key": "minecraft:mangrove_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFuZ3JvdmVfcGxhbmtz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9wbGFua3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 45, - "key": "minecraft:bamboo_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmFtYm9vX3BsYW5rcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fcGxhbmtzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 46, - "key": "minecraft:crimson_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9wbGFua3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3BsYW5rcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 47, - "key": "minecraft:warped_planks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX3BsYW5rcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfcGxhbmtzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 48, - "key": "minecraft:bamboo_mosaic", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmFtYm9vX21vc2FpYw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fbW9zYWljAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 49, - "key": "minecraft:oak_sapling", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6b2FrX3NhcGxpbmc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5vYWtfc2FwbGluZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 50, - "key": "minecraft:spruce_sapling", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c3BydWNlX3NhcGxpbmc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfc2FwbGluZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 51, - "key": "minecraft:birch_sapling", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmlyY2hfc2FwbGluZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iaXJjaF9zYXBsaW5nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 52, - "key": "minecraft:jungle_sapling", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6anVuZ2xlX3NhcGxpbmc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfc2FwbGluZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 53, - "key": "minecraft:acacia_sapling", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YWNhY2lhX3NhcGxpbmc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfc2FwbGluZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 54, - "key": "minecraft:cherry_sapling", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y2hlcnJ5X3NhcGxpbmc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jaGVycnlfc2FwbGluZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 55, - "key": "minecraft:dark_oak_sapling", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZGFya19vYWtfc2FwbGluZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19zYXBsaW5nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 56, - "key": "minecraft:pale_oak_sapling", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cGFsZV9vYWtfc2FwbGluZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19zYXBsaW5nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 57, - "key": "minecraft:mangrove_propagule", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bWFuZ3JvdmVfcHJvcGFndWxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9wcm9wYWd1bGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 58, - "key": "minecraft:bedrock", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6YmVkcm9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5iZWRyb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 59, - "key": "minecraft:sand", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6c2FuZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5zYW5kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 60, - "key": "minecraft:suspicious_sand", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c3VzcGljaW91c19zYW5k", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5zdXNwaWNpb3VzX3NhbmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 61, - "key": "minecraft:suspicious_gravel", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6c3VzcGljaW91c19ncmF2ZWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5zdXNwaWNpb3VzX2dyYXZlbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 62, - "key": "minecraft:red_sand", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmVkX3NhbmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 63, - "key": "minecraft:gravel", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6Z3JhdmVs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5ncmF2ZWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 64, - "key": "minecraft:coal_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y29hbF9vcmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5jb2FsX29yZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 65, - "key": "minecraft:deepslate_coal_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZGVlcHNsYXRlX2NvYWxfb3Jl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfY29hbF9vcmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 66, - "key": "minecraft:iron_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6aXJvbl9vcmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5pcm9uX29yZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 67, - "key": "minecraft:deepslate_iron_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZGVlcHNsYXRlX2lyb25fb3Jl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfaXJvbl9vcmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 68, - "key": "minecraft:copper_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29wcGVyX29yZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jb3BwZXJfb3JlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 69, - "key": "minecraft:deepslate_copper_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGVlcHNsYXRlX2NvcHBlcl9vcmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfY29wcGVyX29yZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 70, - "key": "minecraft:gold_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Z29sZF9vcmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5nb2xkX29yZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 71, - "key": "minecraft:deepslate_gold_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZGVlcHNsYXRlX2dvbGRfb3Jl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfZ29sZF9vcmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 72, - "key": "minecraft:redstone_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cmVkc3RvbmVfb3Jl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5yZWRzdG9uZV9vcmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 73, - "key": "minecraft:deepslate_redstone_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZGVlcHNsYXRlX3JlZHN0b25lX29yZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfcmVkc3RvbmVfb3JlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 74, - "key": "minecraft:emerald_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZW1lcmFsZF9vcmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5lbWVyYWxkX29yZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 75, - "key": "minecraft:deepslate_emerald_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVlcHNsYXRlX2VtZXJhbGRfb3Jl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfZW1lcmFsZF9vcmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 76, - "key": "minecraft:lapis_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6bGFwaXNfb3Jl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5sYXBpc19vcmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 77, - "key": "minecraft:deepslate_lapis_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVlcHNsYXRlX2xhcGlzX29yZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfbGFwaXNfb3JlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 78, - "key": "minecraft:diamond_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZGlhbW9uZF9vcmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5kaWFtb25kX29yZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 79, - "key": "minecraft:deepslate_diamond_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVlcHNsYXRlX2RpYW1vbmRfb3Jl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfZGlhbW9uZF9vcmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 80, - "key": "minecraft:nether_gold_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyX2dvbGRfb3Jl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5uZXRoZXJfZ29sZF9vcmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 81, - "key": "minecraft:nether_quartz_ore", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyX3F1YXJ0el9vcmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfcXVhcnR6X29yZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 82, - "key": "minecraft:ancient_debris", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YW5jaWVudF9kZWJyaXM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5hbmNpZW50X2RlYnJpcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 83, - "key": "minecraft:coal_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29hbF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jb2FsX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 84, - "key": "minecraft:raw_iron_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmF3X2lyb25fYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yYXdfaXJvbl9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 85, - "key": "minecraft:raw_copper_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cmF3X2NvcHBlcl9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5yYXdfY29wcGVyX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 86, - "key": "minecraft:raw_gold_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmF3X2dvbGRfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yYXdfZ29sZF9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 87, - "key": "minecraft:heavy_core", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6aGVhdnlfY29yZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5oZWF2eV9jb3JlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 88, - "key": "minecraft:amethyst_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YW1ldGh5c3RfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5hbWV0aHlzdF9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 89, - "key": "minecraft:budding_amethyst", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6YnVkZGluZ19hbWV0aHlzdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5idWRkaW5nX2FtZXRoeXN0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 90, - "key": "minecraft:iron_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXJvbl9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5pcm9uX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 91, - "key": "minecraft:copper_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y29wcGVyX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jb3BwZXJfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 92, - "key": "minecraft:gold_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z29sZF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5nb2xkX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 93, - "key": "minecraft:diamond_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGlhbW9uZF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kaWFtb25kX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 94, - "key": "minecraft:netherite_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5uZXRoZXJpdGVfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 95, - "key": "minecraft:exposed_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 96, - "key": "minecraft:weathered_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 97, - "key": "minecraft:oxidized_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 98, - "key": "minecraft:chiseled_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y2hpc2VsZWRfY29wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 99, - "key": "minecraft:exposed_chiseled_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZXhwb3NlZF9jaGlzZWxlZF9jb3BwZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NoaXNlbGVkX2NvcHBlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 100, - "key": "minecraft:weathered_chiseled_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2VhdGhlcmVkX2NoaXNlbGVkX2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY2hpc2VsZWRfY29wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 101, - "key": "minecraft:oxidized_chiseled_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6b3hpZGl6ZWRfY2hpc2VsZWRfY29wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jaGlzZWxlZF9jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 102, - "key": "minecraft:cut_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y3V0X2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jdXRfY29wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 103, - "key": "minecraft:exposed_cut_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZXhwb3NlZF9jdXRfY29wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2N1dF9jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 104, - "key": "minecraft:weathered_cut_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6d2VhdGhlcmVkX2N1dF9jb3BwZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY3V0X2NvcHBlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 105, - "key": "minecraft:oxidized_cut_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6b3hpZGl6ZWRfY3V0X2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jdXRfY29wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 106, - "key": "minecraft:cut_copper_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y3V0X2NvcHBlcl9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jdXRfY29wcGVyX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 107, - "key": "minecraft:exposed_cut_copper_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6ZXhwb3NlZF9jdXRfY29wcGVyX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2N1dF9jb3BwZXJfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 108, - "key": "minecraft:weathered_cut_copper_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByVtaW5lY3JhZnQ6d2VhdGhlcmVkX2N1dF9jb3BwZXJfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY3V0X2NvcHBlcl9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 109, - "key": "minecraft:oxidized_cut_copper_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6b3hpZGl6ZWRfY3V0X2NvcHBlcl9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jdXRfY29wcGVyX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 110, - "key": "minecraft:cut_copper_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y3V0X2NvcHBlcl9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jdXRfY29wcGVyX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 111, - "key": "minecraft:exposed_cut_copper_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZXhwb3NlZF9jdXRfY29wcGVyX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2N1dF9jb3BwZXJfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 112, - "key": "minecraft:weathered_cut_copper_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2VhdGhlcmVkX2N1dF9jb3BwZXJfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY3V0X2NvcHBlcl9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 113, - "key": "minecraft:oxidized_cut_copper_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6b3hpZGl6ZWRfY3V0X2NvcHBlcl9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jdXRfY29wcGVyX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 114, - "key": "minecraft:waxed_copper_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6d2F4ZWRfY29wcGVyX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 115, - "key": "minecraft:waxed_exposed_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 116, - "key": "minecraft:waxed_weathered_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 117, - "key": "minecraft:waxed_oxidized_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 118, - "key": "minecraft:waxed_chiseled_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2F4ZWRfY2hpc2VsZWRfY29wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jaGlzZWxlZF9jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 119, - "key": "minecraft:waxed_exposed_chiseled_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BydtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jaGlzZWxlZF9jb3BwZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NoaXNlbGVkX2NvcHBlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 120, - "key": "minecraft:waxed_weathered_chiseled_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByltaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NoaXNlbGVkX2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY2hpc2VsZWRfY29wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 121, - "key": "minecraft:waxed_oxidized_chiseled_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByhtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY2hpc2VsZWRfY29wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jaGlzZWxlZF9jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 122, - "key": "minecraft:waxed_cut_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6d2F4ZWRfY3V0X2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC53YXhlZF9jdXRfY29wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 123, - "key": "minecraft:waxed_exposed_cut_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jdXRfY29wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2N1dF9jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 124, - "key": "minecraft:waxed_weathered_cut_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2N1dF9jb3BwZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY3V0X2NvcHBlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 125, - "key": "minecraft:waxed_oxidized_cut_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY3V0X2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jdXRfY29wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 126, - "key": "minecraft:waxed_cut_copper_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6d2F4ZWRfY3V0X2NvcHBlcl9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC53YXhlZF9jdXRfY29wcGVyX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 127, - "key": "minecraft:waxed_exposed_cut_copper_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByltaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jdXRfY29wcGVyX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2Jsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2N1dF9jb3BwZXJfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 128, - "key": "minecraft:waxed_weathered_cut_copper_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByttaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2N1dF9jb3BwZXJfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMWJsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY3V0X2NvcHBlcl9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 129, - "key": "minecraft:waxed_oxidized_cut_copper_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByptaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY3V0X2NvcHBlcl9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jdXRfY29wcGVyX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 130, - "key": "minecraft:waxed_cut_copper_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2F4ZWRfY3V0X2NvcHBlcl9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jdXRfY29wcGVyX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 131, - "key": "minecraft:waxed_exposed_cut_copper_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BydtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jdXRfY29wcGVyX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2N1dF9jb3BwZXJfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 132, - "key": "minecraft:waxed_weathered_cut_copper_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByltaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2N1dF9jb3BwZXJfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY3V0X2NvcHBlcl9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 133, - "key": "minecraft:waxed_oxidized_cut_copper_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByhtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY3V0X2NvcHBlcl9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jdXRfY29wcGVyX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 134, - "key": "minecraft:oak_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6b2FrX2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5vYWtfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 135, - "key": "minecraft:spruce_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c3BydWNlX2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 136, - "key": "minecraft:birch_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6YmlyY2hfbG9n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5iaXJjaF9sb2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 137, - "key": "minecraft:jungle_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6anVuZ2xlX2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 138, - "key": "minecraft:acacia_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YWNhY2lhX2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 139, - "key": "minecraft:cherry_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y2hlcnJ5X2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jaGVycnlfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 140, - "key": "minecraft:pale_oak_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cGFsZV9vYWtfbG9n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19sb2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 141, - "key": "minecraft:dark_oak_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6ZGFya19vYWtfbG9n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19sb2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 142, - "key": "minecraft:mangrove_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6bWFuZ3JvdmVfbG9n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9sb2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 143, - "key": "minecraft:mangrove_roots", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFuZ3JvdmVfcm9vdHM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9yb290cwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 144, - "key": "minecraft:muddy_mangrove_roots", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6bXVkZHlfbWFuZ3JvdmVfcm9vdHM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5tdWRkeV9tYW5ncm92ZV9yb290cwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 145, - "key": "minecraft:crimson_stem", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JpbXNvbl9zdGVt", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3N0ZW0A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 146, - "key": "minecraft:warped_stem", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2FycGVkX3N0ZW0=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfc3RlbQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 147, - "key": "minecraft:bamboo_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmFtYm9vX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iYW1ib29fYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 148, - "key": "minecraft:stripped_oak_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6c3RyaXBwZWRfb2FrX2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9vYWtfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 149, - "key": "minecraft:stripped_spruce_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfc3BydWNlX2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9zcHJ1Y2VfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 150, - "key": "minecraft:stripped_birch_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6c3RyaXBwZWRfYmlyY2hfbG9n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9iaXJjaF9sb2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 151, - "key": "minecraft:stripped_jungle_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfanVuZ2xlX2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9qdW5nbGVfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 152, - "key": "minecraft:stripped_acacia_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfYWNhY2lhX2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9hY2FjaWFfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 153, - "key": "minecraft:stripped_cherry_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfY2hlcnJ5X2xvZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9jaGVycnlfbG9nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 154, - "key": "minecraft:stripped_dark_oak_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfZGFya19vYWtfbG9n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9kYXJrX29ha19sb2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 155, - "key": "minecraft:stripped_pale_oak_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfcGFsZV9vYWtfbG9n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9wYWxlX29ha19sb2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 156, - "key": "minecraft:stripped_mangrove_log", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfbWFuZ3JvdmVfbG9n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9tYW5ncm92ZV9sb2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 157, - "key": "minecraft:stripped_crimson_stem", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfY3JpbXNvbl9zdGVt", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9jcmltc29uX3N0ZW0A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 158, - "key": "minecraft:stripped_warped_stem", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfd2FycGVkX3N0ZW0=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF93YXJwZWRfc3RlbQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 159, - "key": "minecraft:stripped_oak_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6c3RyaXBwZWRfb2FrX3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9vYWtfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 160, - "key": "minecraft:stripped_spruce_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfc3BydWNlX3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9zcHJ1Y2Vfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 161, - "key": "minecraft:stripped_birch_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfYmlyY2hfd29vZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9iaXJjaF93b29kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 162, - "key": "minecraft:stripped_jungle_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfanVuZ2xlX3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9qdW5nbGVfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 163, - "key": "minecraft:stripped_acacia_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfYWNhY2lhX3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9hY2FjaWFfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 164, - "key": "minecraft:stripped_cherry_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfY2hlcnJ5X3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9jaGVycnlfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 165, - "key": "minecraft:stripped_dark_oak_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6c3RyaXBwZWRfZGFya19vYWtfd29vZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9kYXJrX29ha193b29kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 166, - "key": "minecraft:stripped_pale_oak_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6c3RyaXBwZWRfcGFsZV9vYWtfd29vZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9wYWxlX29ha193b29kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 167, - "key": "minecraft:stripped_mangrove_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6c3RyaXBwZWRfbWFuZ3JvdmVfd29vZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9tYW5ncm92ZV93b29kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 168, - "key": "minecraft:stripped_crimson_hyphae", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6c3RyaXBwZWRfY3JpbXNvbl9oeXBoYWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9jcmltc29uX2h5cGhhZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 169, - "key": "minecraft:stripped_warped_hyphae", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6c3RyaXBwZWRfd2FycGVkX2h5cGhhZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF93YXJwZWRfaHlwaGFlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 170, - "key": "minecraft:stripped_bamboo_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfYmFtYm9vX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9iYW1ib29fYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 171, - "key": "minecraft:oak_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYWtfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 172, - "key": "minecraft:spruce_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 173, - "key": "minecraft:birch_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfd29vZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5iaXJjaF93b29kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 174, - "key": "minecraft:jungle_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 175, - "key": "minecraft:acacia_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 176, - "key": "minecraft:cherry_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X3dvb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfd29vZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 177, - "key": "minecraft:pale_oak_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfd29vZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha193b29kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 178, - "key": "minecraft:dark_oak_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfd29vZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha193b29kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 179, - "key": "minecraft:mangrove_wood", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfd29vZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV93b29kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 180, - "key": "minecraft:crimson_hyphae", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9oeXBoYWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2h5cGhhZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 181, - "key": "minecraft:warped_hyphae", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX2h5cGhhZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfaHlwaGFlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 182, - "key": "minecraft:oak_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6b2FrX2xlYXZlcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vYWtfbGVhdmVzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 183, - "key": "minecraft:spruce_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BydWNlX2xlYXZlcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfbGVhdmVzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 184, - "key": "minecraft:birch_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlyY2hfbGVhdmVz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9sZWF2ZXMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 185, - "key": "minecraft:jungle_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6anVuZ2xlX2xlYXZlcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfbGVhdmVzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 186, - "key": "minecraft:acacia_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YWNhY2lhX2xlYXZlcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfbGVhdmVzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 187, - "key": "minecraft:cherry_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hlcnJ5X2xlYXZlcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfbGVhdmVzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 188, - "key": "minecraft:dark_oak_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19vYWtfbGVhdmVz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19sZWF2ZXMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 189, - "key": "minecraft:pale_oak_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9vYWtfbGVhdmVz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19sZWF2ZXMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 190, - "key": "minecraft:mangrove_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFuZ3JvdmVfbGVhdmVz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9sZWF2ZXMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 191, - "key": "minecraft:azalea_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YXphbGVhX2xlYXZlcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hemFsZWFfbGVhdmVzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 192, - "key": "minecraft:flowering_azalea_leaves", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6Zmxvd2VyaW5nX2F6YWxlYV9sZWF2ZXM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5mbG93ZXJpbmdfYXphbGVhX2xlYXZlcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 193, - "key": "minecraft:sponge", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6c3Bvbmdl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5zcG9uZ2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 194, - "key": "minecraft:wet_sponge", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6d2V0X3Nwb25nZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC53ZXRfc3BvbmdlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 195, - "key": "minecraft:glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6Z2xhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5nbGFzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 196, - "key": "minecraft:tinted_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6dGludGVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC50aW50ZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 197, - "key": "minecraft:lapis_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGFwaXNfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5sYXBpc19ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 198, - "key": "minecraft:sandstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6c2FuZHN0b25l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5zYW5kc3RvbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 199, - "key": "minecraft:chiseled_sandstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y2hpc2VsZWRfc2FuZHN0b25l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9zYW5kc3RvbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 200, - "key": "minecraft:cut_sandstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y3V0X3NhbmRzdG9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jdXRfc2FuZHN0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 201, - "key": "minecraft:cobweb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y29id2Vi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5jb2J3ZWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 202, - "key": "minecraft:short_grass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2hvcnRfZ3Jhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zaG9ydF9ncmFzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 203, - "key": "minecraft:fern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6ZmVybg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5mZXJuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 204, - "key": "minecraft:bush", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6YnVzaA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5idXNoAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 205, - "key": "minecraft:azalea", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YXphbGVh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5hemFsZWEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 206, - "key": "minecraft:flowering_azalea", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Zmxvd2VyaW5nX2F6YWxlYQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5mbG93ZXJpbmdfYXphbGVhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 207, - "key": "minecraft:dead_bush", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGVhZF9idXNo", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kZWFkX2J1c2gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 208, - "key": "minecraft:firefly_bush", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6ZmlyZWZseV9idXNo", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5maXJlZmx5X2J1c2gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 209, - "key": "minecraft:short_dry_grass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c2hvcnRfZHJ5X2dyYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5zaG9ydF9kcnlfZ3Jhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 210, - "key": "minecraft:tall_dry_grass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6dGFsbF9kcnlfZ3Jhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC50YWxsX2RyeV9ncmFzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 211, - "key": "minecraft:seagrass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6c2VhZ3Jhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5zZWFncmFzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 212, - "key": "minecraft:sea_pickle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c2VhX3BpY2tsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zZWFfcGlja2xlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 213, - "key": "minecraft:white_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6d2hpdGVfd29vbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC53aGl0ZV93b29sAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 214, - "key": "minecraft:orange_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6b3JhbmdlX3dvb2w=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5vcmFuZ2Vfd29vbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 215, - "key": "minecraft:magenta_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6bWFnZW50YV93b29s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3dvb2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 216, - "key": "minecraft:light_blue_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bGlnaHRfYmx1ZV93b29s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3dvb2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 217, - "key": "minecraft:yellow_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6eWVsbG93X3dvb2w=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC55ZWxsb3dfd29vbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 218, - "key": "minecraft:lime_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6bGltZV93b29s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5saW1lX3dvb2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 219, - "key": "minecraft:pink_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6cGlua193b29s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5waW5rX3dvb2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 220, - "key": "minecraft:gray_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z3JheV93b29s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ncmF5X3dvb2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 221, - "key": "minecraft:light_gray_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bGlnaHRfZ3JheV93b29s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3dvb2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 222, - "key": "minecraft:cyan_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Y3lhbl93b29s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5jeWFuX3dvb2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 223, - "key": "minecraft:purple_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cHVycGxlX3dvb2w=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5wdXJwbGVfd29vbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 224, - "key": "minecraft:blue_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Ymx1ZV93b29s", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ibHVlX3dvb2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 225, - "key": "minecraft:brown_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YnJvd25fd29vbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5icm93bl93b29sAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 226, - "key": "minecraft:green_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z3JlZW5fd29vbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ncmVlbl93b29sAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 227, - "key": "minecraft:red_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmVkX3dvb2w=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5yZWRfd29vbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 228, - "key": "minecraft:black_wool", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmxhY2tfd29vbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ibGFja193b29sAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 229, - "key": "minecraft:dandelion", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGFuZGVsaW9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kYW5kZWxpb24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 230, - "key": "minecraft:open_eyeblossom", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6b3Blbl9leWVibG9zc29t", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5vcGVuX2V5ZWJsb3Nzb20A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 231, - "key": "minecraft:closed_eyeblossom", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2xvc2VkX2V5ZWJsb3Nzb20=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jbG9zZWRfZXllYmxvc3NvbQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 232, - "key": "minecraft:poppy", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6cG9wcHk=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5wb3BweQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 233, - "key": "minecraft:blue_orchid", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9vcmNoaWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ibHVlX29yY2hpZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 234, - "key": "minecraft:allium", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YWxsaXVt", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5hbGxpdW0A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 235, - "key": "minecraft:azure_bluet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YXp1cmVfYmx1ZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5henVyZV9ibHVldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 236, - "key": "minecraft:red_tulip", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6cmVkX3R1bGlw", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5yZWRfdHVsaXAA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 237, - "key": "minecraft:orange_tulip", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6b3JhbmdlX3R1bGlw", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfdHVsaXAA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 238, - "key": "minecraft:white_tulip", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2hpdGVfdHVsaXA=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53aGl0ZV90dWxpcAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 239, - "key": "minecraft:pink_tulip", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cGlua190dWxpcA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5waW5rX3R1bGlwAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 240, - "key": "minecraft:oxeye_daisy", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6b3hleWVfZGFpc3k=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5veGV5ZV9kYWlzeQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 241, - "key": "minecraft:cornflower", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29ybmZsb3dlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jb3JuZmxvd2VyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 242, - "key": "minecraft:lily_of_the_valley", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGlseV9vZl90aGVfdmFsbGV5", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5saWx5X29mX3RoZV92YWxsZXkA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 243, - "key": "minecraft:wither_rose", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2l0aGVyX3Jvc2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53aXRoZXJfcm9zZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 244, - "key": "minecraft:torchflower", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6dG9yY2hmbG93ZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC50b3JjaGZsb3dlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 245, - "key": "minecraft:pitcher_plant", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGl0Y2hlcl9wbGFudA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5waXRjaGVyX3BsYW50AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 246, - "key": "minecraft:spore_blossom", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BvcmVfYmxvc3NvbQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcG9yZV9ibG9zc29tAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 247, - "key": "minecraft:brown_mushroom", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YnJvd25fbXVzaHJvb20=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5icm93bl9tdXNocm9vbQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 248, - "key": "minecraft:red_mushroom", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cmVkX211c2hyb29t", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5yZWRfbXVzaHJvb20A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 249, - "key": "minecraft:crimson_fungus", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9mdW5ndXM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2Z1bmd1cwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 250, - "key": "minecraft:warped_fungus", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX2Z1bmd1cw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfZnVuZ3VzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 251, - "key": "minecraft:crimson_roots", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y3JpbXNvbl9yb290cw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3Jvb3RzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 252, - "key": "minecraft:warped_roots", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2FycGVkX3Jvb3Rz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53YXJwZWRfcm9vdHMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 253, - "key": "minecraft:nether_sprouts", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bmV0aGVyX3Nwcm91dHM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfc3Byb3V0cwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 254, - "key": "minecraft:weeping_vines", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2VlcGluZ192aW5lcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53ZWVwaW5nX3ZpbmVzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 255, - "key": "minecraft:twisting_vines", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6dHdpc3RpbmdfdmluZXM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC50d2lzdGluZ192aW5lcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 256, - "key": "minecraft:sugar_cane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c3VnYXJfY2FuZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zdWdhcl9jYW5lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 257, - "key": "minecraft:kelp", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6a2VscA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5rZWxwAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 258, - "key": "minecraft:pink_petals", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19wZXRhbHM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waW5rX3BldGFscwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 259, - "key": "minecraft:wildflowers", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2lsZGZsb3dlcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53aWxkZmxvd2VycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 260, - "key": "minecraft:leaf_litter", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGVhZl9saXR0ZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5sZWFmX2xpdHRlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 261, - "key": "minecraft:moss_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bW9zc19jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5tb3NzX2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 262, - "key": "minecraft:moss_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6bW9zc19ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5tb3NzX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 263, - "key": "minecraft:pale_moss_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cGFsZV9tb3NzX2NhcnBldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5wYWxlX21vc3NfY2FycGV0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 264, - "key": "minecraft:pale_hanging_moss", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cGFsZV9oYW5naW5nX21vc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wYWxlX2hhbmdpbmdfbW9zcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 265, - "key": "minecraft:pale_moss_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9tb3NzX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX21vc3NfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 266, - "key": "minecraft:hanging_roots", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6aGFuZ2luZ19yb290cw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5oYW5naW5nX3Jvb3RzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 267, - "key": "minecraft:big_dripleaf", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlnX2RyaXBsZWFm", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaWdfZHJpcGxlYWYA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 268, - "key": "minecraft:small_dripleaf", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c21hbGxfZHJpcGxlYWY=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zbWFsbF9kcmlwbGVhZgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 269, - "key": "minecraft:bamboo", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YmFtYm9v", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5iYW1ib28A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 270, - "key": "minecraft:oak_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYWtfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 271, - "key": "minecraft:spruce_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 272, - "key": "minecraft:birch_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5iaXJjaF9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 273, - "key": "minecraft:jungle_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 274, - "key": "minecraft:acacia_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 275, - "key": "minecraft:cherry_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 276, - "key": "minecraft:dark_oak_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 277, - "key": "minecraft:pale_oak_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 278, - "key": "minecraft:mangrove_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 279, - "key": "minecraft:bamboo_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmFtYm9vX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29fc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 280, - "key": "minecraft:bamboo_mosaic_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6YmFtYm9vX21vc2FpY19zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5iYW1ib29fbW9zYWljX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 281, - "key": "minecraft:crimson_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JpbXNvbl9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 282, - "key": "minecraft:warped_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2FycGVkX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 283, - "key": "minecraft:stone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c3RvbmVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zdG9uZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 284, - "key": "minecraft:smooth_stone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6c21vb3RoX3N0b25lX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc3RvbmVfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 285, - "key": "minecraft:sandstone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2FuZHN0b25lX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zYW5kc3RvbmVfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 286, - "key": "minecraft:cut_sandstone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y3V0X3NhbmRzdG9uZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jdXRfc2FuZHN0b25lX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 287, - "key": "minecraft:petrified_oak_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cGV0cmlmaWVkX29ha19zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wZXRyaWZpZWRfb2FrX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 288, - "key": "minecraft:cobblestone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Y29iYmxlc3RvbmVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5jb2JibGVzdG9uZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 289, - "key": "minecraft:brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YnJpY2tfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5icmlja19zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 290, - "key": "minecraft:stone_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6c3RvbmVfYnJpY2tfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9icmlja19zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 291, - "key": "minecraft:mud_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVkX2JyaWNrX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tdWRfYnJpY2tfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 292, - "key": "minecraft:nether_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyX2JyaWNrX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 293, - "key": "minecraft:quartz_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cXVhcnR6X3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5xdWFydHpfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 294, - "key": "minecraft:red_sandstone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cmVkX3NhbmRzdG9uZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZHN0b25lX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 295, - "key": "minecraft:cut_red_sandstone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y3V0X3JlZF9zYW5kc3RvbmVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jdXRfcmVkX3NhbmRzdG9uZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 296, - "key": "minecraft:purpur_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cHVycHVyX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5wdXJwdXJfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 297, - "key": "minecraft:prismarine_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cHJpc21hcmluZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 298, - "key": "minecraft:prismarine_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cHJpc21hcmluZV9icmlja19zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX2JyaWNrX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 299, - "key": "minecraft:dark_prismarine_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGFya19wcmlzbWFyaW5lX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kYXJrX3ByaXNtYXJpbmVfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 300, - "key": "minecraft:smooth_quartz", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c21vb3RoX3F1YXJ0eg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcXVhcnR6AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 301, - "key": "minecraft:smooth_red_sandstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c21vb3RoX3JlZF9zYW5kc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcmVkX3NhbmRzdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 302, - "key": "minecraft:smooth_sandstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6c21vb3RoX3NhbmRzdG9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc2FuZHN0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 303, - "key": "minecraft:smooth_stone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6c21vb3RoX3N0b25l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc3RvbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 304, - "key": "minecraft:bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 305, - "key": "minecraft:bookshelf", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Ym9va3NoZWxm", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ib29rc2hlbGYA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 306, - "key": "minecraft:chiseled_bookshelf", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y2hpc2VsZWRfYm9va3NoZWxm", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9ib29rc2hlbGYA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 307, - "key": "minecraft:decorated_pot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGVjb3JhdGVkX3BvdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kZWNvcmF0ZWRfcG90AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:pot_decorations": "QQTUB9QH1AfUBw==", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 308, - "key": "minecraft:mossy_cobblestone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bW9zc3lfY29iYmxlc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5tb3NzeV9jb2JibGVzdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 309, - "key": "minecraft:obsidian", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2JzaWRpYW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYnNpZGlhbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 310, - "key": "minecraft:torch", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6dG9yY2g=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC50b3JjaAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 311, - "key": "minecraft:end_rod", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZW5kX3JvZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5lbmRfcm9kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 312, - "key": "minecraft:chorus_plant", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y2hvcnVzX3BsYW50", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jaG9ydXNfcGxhbnQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 313, - "key": "minecraft:chorus_flower", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hvcnVzX2Zsb3dlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaG9ydXNfZmxvd2VyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 314, - "key": "minecraft:purpur_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cHVycHVyX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5wdXJwdXJfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 315, - "key": "minecraft:purpur_pillar", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycHVyX3BpbGxhcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwdXJfcGlsbGFyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 316, - "key": "minecraft:purpur_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycHVyX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwdXJfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 317, - "key": "minecraft:spawner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6c3Bhd25lcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5zcGF3bmVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 318, - "key": "minecraft:creaking_heart", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JlYWtpbmdfaGVhcnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmVha2luZ19oZWFydAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 319, - "key": "minecraft:chest", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6Y2hlc3Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5jaGVzdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 320, - "key": "minecraft:crafting_table", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JhZnRpbmdfdGFibGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmFmdGluZ190YWJsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 321, - "key": "minecraft:farmland", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6ZmFybWxhbmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5mYXJtbGFuZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 322, - "key": "minecraft:furnace", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZnVybmFjZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5mdXJuYWNlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 323, - "key": "minecraft:ladder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6bGFkZGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5sYWRkZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 324, - "key": "minecraft:cobblestone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y29iYmxlc3RvbmVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jb2JibGVzdG9uZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 325, - "key": "minecraft:snow", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6c25vdw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5zbm93AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 326, - "key": "minecraft:ice", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw1taW5lY3JhZnQ6aWNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2Jsb2NrLm1pbmVjcmFmdC5pY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 327, - "key": "minecraft:snow_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c25vd19ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zbm93X2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 328, - "key": "minecraft:cactus", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y2FjdHVz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5jYWN0dXMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 329, - "key": "minecraft:cactus_flower", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2FjdHVzX2Zsb3dlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jYWN0dXNfZmxvd2VyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 330, - "key": "minecraft:clay", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6Y2xheQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5jbGF5AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 331, - "key": "minecraft:jukebox", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6anVrZWJveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5qdWtlYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 332, - "key": "minecraft:oak_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6b2FrX2ZlbmNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5vYWtfZmVuY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 333, - "key": "minecraft:spruce_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3BydWNlX2ZlbmNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfZmVuY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 334, - "key": "minecraft:birch_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmlyY2hfZmVuY2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5iaXJjaF9mZW5jZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 335, - "key": "minecraft:jungle_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6anVuZ2xlX2ZlbmNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfZmVuY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 336, - "key": "minecraft:acacia_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YWNhY2lhX2ZlbmNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfZmVuY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 337, - "key": "minecraft:cherry_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y2hlcnJ5X2ZlbmNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jaGVycnlfZmVuY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 338, - "key": "minecraft:dark_oak_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZGFya19vYWtfZmVuY2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19mZW5jZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 339, - "key": "minecraft:pale_oak_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6cGFsZV9vYWtfZmVuY2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19mZW5jZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 340, - "key": "minecraft:mangrove_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFuZ3JvdmVfZmVuY2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9mZW5jZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 341, - "key": "minecraft:bamboo_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmFtYm9vX2ZlbmNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iYW1ib29fZmVuY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 342, - "key": "minecraft:crimson_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y3JpbXNvbl9mZW5jZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2ZlbmNlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 343, - "key": "minecraft:warped_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2FycGVkX2ZlbmNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53YXJwZWRfZmVuY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 344, - "key": "minecraft:pumpkin", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6cHVtcGtpbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5wdW1wa2luAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 345, - "key": "minecraft:carved_pumpkin", - "components": { - "minecraft:attribute_modifiers": "DQEhJm1pbmVjcmFmdDp3YXlwb2ludF90cmFuc21pdF9yYW5nZV9oaWRlv/AAAAAAAAACBwE=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARHAAEabWluZWNyYWZ0Om1pc2MvcHVtcGtpbmJsdXIAAQABAACSCg==", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y2FydmVkX3B1bXBraW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jYXJ2ZWRfcHVtcGtpbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 346, - "key": "minecraft:jack_o_lantern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6amFja19vX2xhbnRlcm4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5qYWNrX29fbGFudGVybgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 347, - "key": "minecraft:netherrack", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6bmV0aGVycmFjaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5uZXRoZXJyYWNrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 348, - "key": "minecraft:soul_sand", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6c291bF9zYW5k", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5zb3VsX3NhbmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 349, - "key": "minecraft:soul_soil", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6c291bF9zb2ls", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5zb3VsX3NvaWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 350, - "key": "minecraft:basalt", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YmFzYWx0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5iYXNhbHQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 351, - "key": "minecraft:polished_basalt", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cG9saXNoZWRfYmFzYWx0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9iYXNhbHQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 352, - "key": "minecraft:smooth_basalt", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c21vb3RoX2Jhc2FsdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfYmFzYWx0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 353, - "key": "minecraft:soul_torch", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c291bF90b3JjaA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zb3VsX3RvcmNoAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 354, - "key": "minecraft:glowstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z2xvd3N0b25l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5nbG93c3RvbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 355, - "key": "minecraft:infested_stone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6aW5mZXN0ZWRfc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9zdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 356, - "key": "minecraft:infested_cobblestone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6aW5mZXN0ZWRfY29iYmxlc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9jb2JibGVzdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 357, - "key": "minecraft:infested_stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6aW5mZXN0ZWRfc3RvbmVfYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9zdG9uZV9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 358, - "key": "minecraft:infested_mossy_stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByVtaW5lY3JhZnQ6aW5mZXN0ZWRfbW9zc3lfc3RvbmVfYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9tb3NzeV9zdG9uZV9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 359, - "key": "minecraft:infested_cracked_stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BydtaW5lY3JhZnQ6aW5mZXN0ZWRfY3JhY2tlZF9zdG9uZV9icmlja3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9jcmFja2VkX3N0b25lX2JyaWNrcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 360, - "key": "minecraft:infested_chiseled_stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByhtaW5lY3JhZnQ6aW5mZXN0ZWRfY2hpc2VsZWRfc3RvbmVfYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9jaGlzZWxlZF9zdG9uZV9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 361, - "key": "minecraft:infested_deepslate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6aW5mZXN0ZWRfZGVlcHNsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9kZWVwc2xhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 362, - "key": "minecraft:stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3RvbmVfYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 363, - "key": "minecraft:mossy_stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bW9zc3lfc3RvbmVfYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5tb3NzeV9zdG9uZV9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 364, - "key": "minecraft:cracked_stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y3JhY2tlZF9zdG9uZV9icmlja3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5jcmFja2VkX3N0b25lX2JyaWNrcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 365, - "key": "minecraft:chiseled_stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2hpc2VsZWRfc3RvbmVfYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9zdG9uZV9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 366, - "key": "minecraft:packed_mud", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cGFja2VkX211ZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5wYWNrZWRfbXVkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 367, - "key": "minecraft:mud_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6bXVkX2JyaWNrcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5tdWRfYnJpY2tzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 368, - "key": "minecraft:deepslate_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZGVlcHNsYXRlX2JyaWNrcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfYnJpY2tzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 369, - "key": "minecraft:cracked_deepslate_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6Y3JhY2tlZF9kZWVwc2xhdGVfYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5jcmFja2VkX2RlZXBzbGF0ZV9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 370, - "key": "minecraft:deepslate_tiles", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGVlcHNsYXRlX3RpbGVz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfdGlsZXMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 371, - "key": "minecraft:cracked_deepslate_tiles", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6Y3JhY2tlZF9kZWVwc2xhdGVfdGlsZXM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5jcmFja2VkX2RlZXBzbGF0ZV90aWxlcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 372, - "key": "minecraft:chiseled_deepslate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y2hpc2VsZWRfZGVlcHNsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9kZWVwc2xhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 373, - "key": "minecraft:reinforced_deepslate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6cmVpbmZvcmNlZF9kZWVwc2xhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5yZWluZm9yY2VkX2RlZXBzbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 374, - "key": "minecraft:brown_mushroom_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6YnJvd25fbXVzaHJvb21fYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5icm93bl9tdXNocm9vbV9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 375, - "key": "minecraft:red_mushroom_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cmVkX211c2hyb29tX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5yZWRfbXVzaHJvb21fYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 376, - "key": "minecraft:mushroom_stem", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bXVzaHJvb21fc3RlbQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tdXNocm9vbV9zdGVtAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 377, - "key": "minecraft:iron_bars", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6aXJvbl9iYXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5pcm9uX2JhcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 378, - "key": "minecraft:chain", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6Y2hhaW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5jaGFpbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 379, - "key": "minecraft:glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z2xhc3NfcGFuZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5nbGFzc19wYW5lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 380, - "key": "minecraft:melon", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6bWVsb24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5tZWxvbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 381, - "key": "minecraft:vine", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6dmluZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC52aW5lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 382, - "key": "minecraft:glow_lichen", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z2xvd19saWNoZW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5nbG93X2xpY2hlbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 383, - "key": "minecraft:resin_clump", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmVzaW5fY2x1bXA=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJlc2luX2NsdW1wAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 384, - "key": "minecraft:resin_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmVzaW5fYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5yZXNpbl9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 385, - "key": "minecraft:resin_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cmVzaW5fYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5yZXNpbl9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 386, - "key": "minecraft:resin_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cmVzaW5fYnJpY2tfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5yZXNpbl9icmlja19zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 387, - "key": "minecraft:resin_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cmVzaW5fYnJpY2tfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5yZXNpbl9icmlja19zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 388, - "key": "minecraft:resin_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cmVzaW5fYnJpY2tfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5yZXNpbl9icmlja193YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 389, - "key": "minecraft:chiseled_resin_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2hpc2VsZWRfcmVzaW5fYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9yZXNpbl9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 390, - "key": "minecraft:brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJpY2tfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5icmlja19zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 391, - "key": "minecraft:stone_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6c3RvbmVfYnJpY2tfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5zdG9uZV9icmlja19zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 392, - "key": "minecraft:mud_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVkX2JyaWNrX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5tdWRfYnJpY2tfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 393, - "key": "minecraft:mycelium", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6bXljZWxpdW0=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5teWNlbGl1bQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 394, - "key": "minecraft:lily_pad", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6bGlseV9wYWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5saWx5X3BhZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 395, - "key": "minecraft:nether_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bmV0aGVyX2JyaWNrcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 396, - "key": "minecraft:cracked_nether_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y3JhY2tlZF9uZXRoZXJfYnJpY2tz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jcmFja2VkX25ldGhlcl9icmlja3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 397, - "key": "minecraft:chiseled_nether_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y2hpc2VsZWRfbmV0aGVyX2JyaWNrcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9uZXRoZXJfYnJpY2tzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 398, - "key": "minecraft:nether_brick_fence", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bmV0aGVyX2JyaWNrX2ZlbmNl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tfZmVuY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 399, - "key": "minecraft:nether_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bmV0aGVyX2JyaWNrX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 400, - "key": "minecraft:sculk", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6c2N1bGs=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5zY3VsawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 401, - "key": "minecraft:sculk_vein", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c2N1bGtfdmVpbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zY3Vsa192ZWluAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 402, - "key": "minecraft:sculk_catalyst", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2N1bGtfY2F0YWx5c3Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zY3Vsa19jYXRhbHlzdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 403, - "key": "minecraft:sculk_shrieker", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2N1bGtfc2hyaWVrZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zY3Vsa19zaHJpZWtlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 404, - "key": "minecraft:enchanting_table", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZW5jaGFudGluZ190YWJsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5lbmNoYW50aW5nX3RhYmxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 405, - "key": "minecraft:end_portal_frame", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZW5kX3BvcnRhbF9mcmFtZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5lbmRfcG9ydGFsX2ZyYW1lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 406, - "key": "minecraft:end_stone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZW5kX3N0b25l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 407, - "key": "minecraft:end_stone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZW5kX3N0b25lX2JyaWNrcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmVfYnJpY2tzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 408, - "key": "minecraft:dragon_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZHJhZ29uX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5kcmFnb25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 409, - "key": "minecraft:sandstone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6c2FuZHN0b25lX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zYW5kc3RvbmVfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 410, - "key": "minecraft:ender_chest", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZW5kZXJfY2hlc3Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5lbmRlcl9jaGVzdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 411, - "key": "minecraft:emerald_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZW1lcmFsZF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5lbWVyYWxkX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 412, - "key": "minecraft:oak_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6b2FrX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vYWtfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 413, - "key": "minecraft:spruce_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BydWNlX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 414, - "key": "minecraft:birch_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlyY2hfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 415, - "key": "minecraft:jungle_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6anVuZ2xlX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 416, - "key": "minecraft:acacia_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YWNhY2lhX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 417, - "key": "minecraft:cherry_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hlcnJ5X3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 418, - "key": "minecraft:dark_oak_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19vYWtfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 419, - "key": "minecraft:pale_oak_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9vYWtfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 420, - "key": "minecraft:mangrove_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFuZ3JvdmVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 421, - "key": "minecraft:bamboo_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmFtYm9vX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 422, - "key": "minecraft:bamboo_mosaic_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6YmFtYm9vX21vc2FpY19zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5iYW1ib29fbW9zYWljX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 423, - "key": "minecraft:crimson_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 424, - "key": "minecraft:warped_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 425, - "key": "minecraft:command_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29tbWFuZF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jb21tYW5kX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 426, - "key": "minecraft:beacon", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YmVhY29u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5iZWFjb24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 427, - "key": "minecraft:cobblestone_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Y29iYmxlc3RvbmVfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5jb2JibGVzdG9uZV93YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 428, - "key": "minecraft:mossy_cobblestone_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6bW9zc3lfY29iYmxlc3RvbmVfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5tb3NzeV9jb2JibGVzdG9uZV93YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 429, - "key": "minecraft:brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YnJpY2tfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5icmlja193YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 430, - "key": "minecraft:prismarine_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cHJpc21hcmluZV93YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 431, - "key": "minecraft:red_sandstone_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cmVkX3NhbmRzdG9uZV93YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZHN0b25lX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 432, - "key": "minecraft:mossy_stone_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6bW9zc3lfc3RvbmVfYnJpY2tfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5tb3NzeV9zdG9uZV9icmlja193YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 433, - "key": "minecraft:granite_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3Jhbml0ZV93YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmFuaXRlX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 434, - "key": "minecraft:stone_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6c3RvbmVfYnJpY2tfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9icmlja193YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 435, - "key": "minecraft:mud_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVkX2JyaWNrX3dhbGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tdWRfYnJpY2tfd2FsbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 436, - "key": "minecraft:nether_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyX2JyaWNrX3dhbGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tfd2FsbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 437, - "key": "minecraft:andesite_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YW5kZXNpdGVfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hbmRlc2l0ZV93YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 438, - "key": "minecraft:red_nether_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cmVkX25ldGhlcl9icmlja193YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5yZWRfbmV0aGVyX2JyaWNrX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 439, - "key": "minecraft:sandstone_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2FuZHN0b25lX3dhbGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zYW5kc3RvbmVfd2FsbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 440, - "key": "minecraft:end_stone_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZW5kX3N0b25lX2JyaWNrX3dhbGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmVfYnJpY2tfd2FsbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 441, - "key": "minecraft:diorite_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6ZGlvcml0ZV93YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5kaW9yaXRlX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 442, - "key": "minecraft:blackstone_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YmxhY2tzdG9uZV93YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ibGFja3N0b25lX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 443, - "key": "minecraft:polished_blackstone_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV93YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 444, - "key": "minecraft:polished_blackstone_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByhtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9icmlja193YWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrX3dhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 445, - "key": "minecraft:cobbled_deepslate_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y29iYmxlZF9kZWVwc2xhdGVfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jb2JibGVkX2RlZXBzbGF0ZV93YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 446, - "key": "minecraft:polished_deepslate_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cG9saXNoZWRfZGVlcHNsYXRlX3dhbGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kZWVwc2xhdGVfd2FsbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 447, - "key": "minecraft:deepslate_brick_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGVlcHNsYXRlX2JyaWNrX3dhbGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfYnJpY2tfd2FsbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 448, - "key": "minecraft:deepslate_tile_wall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVlcHNsYXRlX3RpbGVfd2FsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfdGlsZV93YWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 449, - "key": "minecraft:anvil", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6YW52aWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5hbnZpbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 450, - "key": "minecraft:chipped_anvil", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hpcHBlZF9hbnZpbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGlwcGVkX2FudmlsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 451, - "key": "minecraft:damaged_anvil", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFtYWdlZF9hbnZpbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYW1hZ2VkX2FudmlsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 452, - "key": "minecraft:chiseled_quartz_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2hpc2VsZWRfcXVhcnR6X2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9xdWFydHpfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 453, - "key": "minecraft:quartz_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cXVhcnR6X2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5xdWFydHpfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 454, - "key": "minecraft:quartz_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cXVhcnR6X2JyaWNrcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5xdWFydHpfYnJpY2tzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 455, - "key": "minecraft:quartz_pillar", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cXVhcnR6X3BpbGxhcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5xdWFydHpfcGlsbGFyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 456, - "key": "minecraft:quartz_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cXVhcnR6X3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5xdWFydHpfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 457, - "key": "minecraft:white_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6d2hpdGVfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC53aGl0ZV90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 458, - "key": "minecraft:orange_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6b3JhbmdlX3RlcnJhY290dGE=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfdGVycmFjb3R0YQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 459, - "key": "minecraft:magenta_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bWFnZW50YV90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 460, - "key": "minecraft:light_blue_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6bGlnaHRfYmx1ZV90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 461, - "key": "minecraft:yellow_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6eWVsbG93X3RlcnJhY290dGE=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfdGVycmFjb3R0YQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 462, - "key": "minecraft:lime_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bGltZV90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5saW1lX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 463, - "key": "minecraft:pink_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cGlua190ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5waW5rX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 464, - "key": "minecraft:gray_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Z3JheV90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ncmF5X3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 465, - "key": "minecraft:light_gray_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6bGlnaHRfZ3JheV90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 466, - "key": "minecraft:cyan_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y3lhbl90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jeWFuX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 467, - "key": "minecraft:purple_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cHVycGxlX3RlcnJhY290dGE=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfdGVycmFjb3R0YQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 468, - "key": "minecraft:blue_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Ymx1ZV90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ibHVlX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 469, - "key": "minecraft:brown_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6YnJvd25fdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5icm93bl90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 470, - "key": "minecraft:green_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Z3JlZW5fdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ncmVlbl90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 471, - "key": "minecraft:red_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmVkX3RlcnJhY290dGE=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yZWRfdGVycmFjb3R0YQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 472, - "key": "minecraft:black_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6YmxhY2tfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ibGFja190ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 473, - "key": "minecraft:barrier", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6YmFycmllcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5iYXJyaWVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 474, - "key": "minecraft:light", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:block_state": "QwEFbGV2ZWwCMTU=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6bGlnaHQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5saWdodAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 475, - "key": "minecraft:hay_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6aGF5X2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5oYXlfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 476, - "key": "minecraft:white_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEWbWluZWNyYWZ0OndoaXRlX2NhcnBldAABA0yBAQEBAQAB1wY=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2hpdGVfY2FycGV0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53aGl0ZV9jYXJwZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 477, - "key": "minecraft:orange_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEXbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQAAQNMgQEBAQEAAdcG", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6b3JhbmdlX2NhcnBldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfY2FycGV0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 478, - "key": "minecraft:magenta_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEYbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0AAEDTIEBAQEBAAHXBg==", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFnZW50YV9jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 479, - "key": "minecraft:light_blue_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEbbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0AAEDTIEBAQEBAAHXBg==", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfYmx1ZV9jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 480, - "key": "minecraft:yellow_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEXbWluZWNyYWZ0OnllbGxvd19jYXJwZXQAAQNMgQEBAQEAAdcG", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6eWVsbG93X2NhcnBldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfY2FycGV0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 481, - "key": "minecraft:lime_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEVbWluZWNyYWZ0OmxpbWVfY2FycGV0AAEDTIEBAQEBAAHXBg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGltZV9jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5saW1lX2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 482, - "key": "minecraft:pink_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEVbWluZWNyYWZ0OnBpbmtfY2FycGV0AAEDTIEBAQEBAAHXBg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waW5rX2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 483, - "key": "minecraft:gray_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEVbWluZWNyYWZ0OmdyYXlfY2FycGV0AAEDTIEBAQEBAAHXBg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3JheV9jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ncmF5X2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 484, - "key": "minecraft:light_gray_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEbbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0AAEDTIEBAQEBAAHXBg==", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfZ3JheV9jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 485, - "key": "minecraft:cyan_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEVbWluZWNyYWZ0OmN5YW5fY2FycGV0AAEDTIEBAQEBAAHXBg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y3lhbl9jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jeWFuX2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 486, - "key": "minecraft:purple_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEXbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQAAQNMgQEBAQEAAdcG", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycGxlX2NhcnBldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfY2FycGV0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 487, - "key": "minecraft:blue_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEVbWluZWNyYWZ0OmJsdWVfY2FycGV0AAEDTIEBAQEBAAHXBg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9jYXJwZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ibHVlX2NhcnBldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 488, - "key": "minecraft:brown_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEWbWluZWNyYWZ0OmJyb3duX2NhcnBldAABA0yBAQEBAQAB1wY=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJvd25fY2FycGV0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5icm93bl9jYXJwZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 489, - "key": "minecraft:green_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEWbWluZWNyYWZ0OmdyZWVuX2NhcnBldAABA0yBAQEBAQAB1wY=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JlZW5fY2FycGV0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmVlbl9jYXJwZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 490, - "key": "minecraft:red_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEUbWluZWNyYWZ0OnJlZF9jYXJwZXQAAQNMgQEBAQEAAdcG", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmVkX2NhcnBldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5yZWRfY2FycGV0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 491, - "key": "minecraft:black_carpet", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbWBgEWbWluZWNyYWZ0OmJsYWNrX2NhcnBldAABA0yBAQEBAQAB1wY=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhY2tfY2FycGV0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ibGFja19jYXJwZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 492, - "key": "minecraft:terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6dGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 493, - "key": "minecraft:packed_ice", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cGFja2VkX2ljZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5wYWNrZWRfaWNlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 494, - "key": "minecraft:dirt_path", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGlydF9wYXRo", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kaXJ0X3BhdGgA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 495, - "key": "minecraft:sunflower", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6c3VuZmxvd2Vy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5zdW5mbG93ZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 496, - "key": "minecraft:lilac", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6bGlsYWM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5saWxhYwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 497, - "key": "minecraft:rose_bush", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6cm9zZV9idXNo", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5yb3NlX2J1c2gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 498, - "key": "minecraft:peony", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6cGVvbnk=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5wZW9ueQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 499, - "key": "minecraft:tall_grass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6dGFsbF9ncmFzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50YWxsX2dyYXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 500, - "key": "minecraft:large_fern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6bGFyZ2VfZmVybg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5sYXJnZV9mZXJuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 501, - "key": "minecraft:white_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6d2hpdGVfc3RhaW5lZF9nbGFzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC53aGl0ZV9zdGFpbmVkX2dsYXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 502, - "key": "minecraft:orange_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6b3JhbmdlX3N0YWluZWRfZ2xhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5vcmFuZ2Vfc3RhaW5lZF9nbGFzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 503, - "key": "minecraft:magenta_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6bWFnZW50YV9zdGFpbmVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3N0YWluZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 504, - "key": "minecraft:light_blue_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9zdGFpbmVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3N0YWluZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 505, - "key": "minecraft:yellow_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6eWVsbG93X3N0YWluZWRfZ2xhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfc3RhaW5lZF9nbGFzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 506, - "key": "minecraft:lime_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGltZV9zdGFpbmVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5saW1lX3N0YWluZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 507, - "key": "minecraft:pink_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cGlua19zdGFpbmVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5waW5rX3N0YWluZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 508, - "key": "minecraft:gray_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Z3JheV9zdGFpbmVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5ncmF5X3N0YWluZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 509, - "key": "minecraft:light_gray_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6bGlnaHRfZ3JheV9zdGFpbmVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3N0YWluZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 510, - "key": "minecraft:cyan_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y3lhbl9zdGFpbmVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jeWFuX3N0YWluZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 511, - "key": "minecraft:purple_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6cHVycGxlX3N0YWluZWRfZ2xhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfc3RhaW5lZF9nbGFzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 512, - "key": "minecraft:blue_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Ymx1ZV9zdGFpbmVkX2dsYXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5ibHVlX3N0YWluZWRfZ2xhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 513, - "key": "minecraft:brown_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6YnJvd25fc3RhaW5lZF9nbGFzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5icm93bl9zdGFpbmVkX2dsYXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 514, - "key": "minecraft:green_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6Z3JlZW5fc3RhaW5lZF9nbGFzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5ncmVlbl9zdGFpbmVkX2dsYXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 515, - "key": "minecraft:red_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cmVkX3N0YWluZWRfZ2xhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5yZWRfc3RhaW5lZF9nbGFzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 516, - "key": "minecraft:black_stained_glass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6YmxhY2tfc3RhaW5lZF9nbGFzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5ibGFja19zdGFpbmVkX2dsYXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 517, - "key": "minecraft:white_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6d2hpdGVfc3RhaW5lZF9nbGFzc19wYW5l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC53aGl0ZV9zdGFpbmVkX2dsYXNzX3BhbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 518, - "key": "minecraft:orange_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6b3JhbmdlX3N0YWluZWRfZ2xhc3NfcGFuZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2Vfc3RhaW5lZF9nbGFzc19wYW5lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 519, - "key": "minecraft:magenta_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6bWFnZW50YV9zdGFpbmVkX2dsYXNzX3BhbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3N0YWluZWRfZ2xhc3NfcGFuZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 520, - "key": "minecraft:light_blue_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BydtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9zdGFpbmVkX2dsYXNzX3BhbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3N0YWluZWRfZ2xhc3NfcGFuZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 521, - "key": "minecraft:yellow_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6eWVsbG93X3N0YWluZWRfZ2xhc3NfcGFuZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfc3RhaW5lZF9nbGFzc19wYW5lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 522, - "key": "minecraft:lime_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6bGltZV9zdGFpbmVkX2dsYXNzX3BhbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5saW1lX3N0YWluZWRfZ2xhc3NfcGFuZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 523, - "key": "minecraft:pink_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cGlua19zdGFpbmVkX2dsYXNzX3BhbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5waW5rX3N0YWluZWRfZ2xhc3NfcGFuZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 524, - "key": "minecraft:gray_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6Z3JheV9zdGFpbmVkX2dsYXNzX3BhbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5ncmF5X3N0YWluZWRfZ2xhc3NfcGFuZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 525, - "key": "minecraft:light_gray_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BydtaW5lY3JhZnQ6bGlnaHRfZ3JheV9zdGFpbmVkX2dsYXNzX3BhbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3N0YWluZWRfZ2xhc3NfcGFuZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 526, - "key": "minecraft:cyan_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6Y3lhbl9zdGFpbmVkX2dsYXNzX3BhbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5jeWFuX3N0YWluZWRfZ2xhc3NfcGFuZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 527, - "key": "minecraft:purple_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6cHVycGxlX3N0YWluZWRfZ2xhc3NfcGFuZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfc3RhaW5lZF9nbGFzc19wYW5lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 528, - "key": "minecraft:blue_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6Ymx1ZV9zdGFpbmVkX2dsYXNzX3BhbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5ibHVlX3N0YWluZWRfZ2xhc3NfcGFuZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 529, - "key": "minecraft:brown_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6YnJvd25fc3RhaW5lZF9nbGFzc19wYW5l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5icm93bl9zdGFpbmVkX2dsYXNzX3BhbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 530, - "key": "minecraft:green_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6Z3JlZW5fc3RhaW5lZF9nbGFzc19wYW5l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5ncmVlbl9zdGFpbmVkX2dsYXNzX3BhbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 531, - "key": "minecraft:red_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6cmVkX3N0YWluZWRfZ2xhc3NfcGFuZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5yZWRfc3RhaW5lZF9nbGFzc19wYW5lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 532, - "key": "minecraft:black_stained_glass_pane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6YmxhY2tfc3RhaW5lZF9nbGFzc19wYW5l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5ibGFja19zdGFpbmVkX2dsYXNzX3BhbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 533, - "key": "minecraft:prismarine", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cHJpc21hcmluZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 534, - "key": "minecraft:prismarine_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cHJpc21hcmluZV9icmlja3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX2JyaWNrcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 535, - "key": "minecraft:dark_prismarine", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19wcmlzbWFyaW5l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX3ByaXNtYXJpbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 536, - "key": "minecraft:prismarine_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cHJpc21hcmluZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 537, - "key": "minecraft:prismarine_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cHJpc21hcmluZV9icmlja19zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX2JyaWNrX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 538, - "key": "minecraft:dark_prismarine_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZGFya19wcmlzbWFyaW5lX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5kYXJrX3ByaXNtYXJpbmVfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 539, - "key": "minecraft:sea_lantern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2VhX2xhbnRlcm4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zZWFfbGFudGVybgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 540, - "key": "minecraft:red_sandstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cmVkX3NhbmRzdG9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZHN0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 541, - "key": "minecraft:chiseled_red_sandstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y2hpc2VsZWRfcmVkX3NhbmRzdG9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9yZWRfc2FuZHN0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 542, - "key": "minecraft:cut_red_sandstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y3V0X3JlZF9zYW5kc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jdXRfcmVkX3NhbmRzdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 543, - "key": "minecraft:red_sandstone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6cmVkX3NhbmRzdG9uZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZHN0b25lX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 544, - "key": "minecraft:repeating_command_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cmVwZWF0aW5nX2NvbW1hbmRfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5yZXBlYXRpbmdfY29tbWFuZF9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 545, - "key": "minecraft:chain_command_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6Y2hhaW5fY29tbWFuZF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5jaGFpbl9jb21tYW5kX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 546, - "key": "minecraft:magma_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWFnbWFfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5tYWdtYV9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 547, - "key": "minecraft:nether_wart_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyX3dhcnRfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfd2FydF9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 548, - "key": "minecraft:warped_wart_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6d2FycGVkX3dhcnRfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfd2FydF9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 549, - "key": "minecraft:red_nether_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cmVkX25ldGhlcl9icmlja3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5yZWRfbmV0aGVyX2JyaWNrcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 550, - "key": "minecraft:bone_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Ym9uZV9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ib25lX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 551, - "key": "minecraft:structure_void", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c3RydWN0dXJlX3ZvaWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zdHJ1Y3R1cmVfdm9pZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 552, - "key": "minecraft:shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2h1bGtlcl9ib3g=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zaHVsa2VyX2JveAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 553, - "key": "minecraft:white_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6d2hpdGVfc2h1bGtlcl9ib3g=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53aGl0ZV9zaHVsa2VyX2JveAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 554, - "key": "minecraft:orange_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6b3JhbmdlX3NodWxrZXJfYm94", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5vcmFuZ2Vfc2h1bGtlcl9ib3gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 555, - "key": "minecraft:magenta_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWFnZW50YV9zaHVsa2VyX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3NodWxrZXJfYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 556, - "key": "minecraft:light_blue_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9zaHVsa2VyX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3NodWxrZXJfYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 557, - "key": "minecraft:yellow_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6eWVsbG93X3NodWxrZXJfYm94", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfc2h1bGtlcl9ib3gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 558, - "key": "minecraft:lime_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bGltZV9zaHVsa2VyX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5saW1lX3NodWxrZXJfYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 559, - "key": "minecraft:pink_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cGlua19zaHVsa2VyX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5waW5rX3NodWxrZXJfYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 560, - "key": "minecraft:gray_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Z3JheV9zaHVsa2VyX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ncmF5X3NodWxrZXJfYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 561, - "key": "minecraft:light_gray_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6bGlnaHRfZ3JheV9zaHVsa2VyX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3NodWxrZXJfYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 562, - "key": "minecraft:cyan_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Y3lhbl9zaHVsa2VyX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5jeWFuX3NodWxrZXJfYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 563, - "key": "minecraft:purple_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cHVycGxlX3NodWxrZXJfYm94", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfc2h1bGtlcl9ib3gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 564, - "key": "minecraft:blue_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Ymx1ZV9zaHVsa2VyX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ibHVlX3NodWxrZXJfYm94AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 565, - "key": "minecraft:brown_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YnJvd25fc2h1bGtlcl9ib3g=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5icm93bl9zaHVsa2VyX2JveAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 566, - "key": "minecraft:green_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Z3JlZW5fc2h1bGtlcl9ib3g=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5ncmVlbl9zaHVsa2VyX2JveAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 567, - "key": "minecraft:red_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cmVkX3NodWxrZXJfYm94", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5yZWRfc2h1bGtlcl9ib3gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 568, - "key": "minecraft:black_shulker_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YmxhY2tfc2h1bGtlcl9ib3g=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5ibGFja19zaHVsa2VyX2JveAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 569, - "key": "minecraft:white_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6d2hpdGVfZ2xhemVkX3RlcnJhY290dGE=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC53aGl0ZV9nbGF6ZWRfdGVycmFjb3R0YQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 570, - "key": "minecraft:orange_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6b3JhbmdlX2dsYXplZF90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfZ2xhemVkX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 571, - "key": "minecraft:magenta_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6bWFnZW50YV9nbGF6ZWRfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2dsYXplZF90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 572, - "key": "minecraft:light_blue_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByZtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9nbGF6ZWRfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALGJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2dsYXplZF90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 573, - "key": "minecraft:yellow_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6eWVsbG93X2dsYXplZF90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfZ2xhemVkX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 574, - "key": "minecraft:lime_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6bGltZV9nbGF6ZWRfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5saW1lX2dsYXplZF90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 575, - "key": "minecraft:pink_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6cGlua19nbGF6ZWRfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5waW5rX2dsYXplZF90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 576, - "key": "minecraft:gray_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Z3JheV9nbGF6ZWRfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5ncmF5X2dsYXplZF90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 577, - "key": "minecraft:light_gray_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByZtaW5lY3JhZnQ6bGlnaHRfZ3JheV9nbGF6ZWRfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALGJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2dsYXplZF90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 578, - "key": "minecraft:cyan_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y3lhbl9nbGF6ZWRfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jeWFuX2dsYXplZF90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 579, - "key": "minecraft:purple_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6cHVycGxlX2dsYXplZF90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfZ2xhemVkX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 580, - "key": "minecraft:blue_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Ymx1ZV9nbGF6ZWRfdGVycmFjb3R0YQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5ibHVlX2dsYXplZF90ZXJyYWNvdHRhAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 581, - "key": "minecraft:brown_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6YnJvd25fZ2xhemVkX3RlcnJhY290dGE=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5icm93bl9nbGF6ZWRfdGVycmFjb3R0YQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 582, - "key": "minecraft:green_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6Z3JlZW5fZ2xhemVkX3RlcnJhY290dGE=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5ncmVlbl9nbGF6ZWRfdGVycmFjb3R0YQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 583, - "key": "minecraft:red_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cmVkX2dsYXplZF90ZXJyYWNvdHRh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5yZWRfZ2xhemVkX3RlcnJhY290dGEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 584, - "key": "minecraft:black_glazed_terracotta", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6YmxhY2tfZ2xhemVkX3RlcnJhY290dGE=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5ibGFja19nbGF6ZWRfdGVycmFjb3R0YQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 585, - "key": "minecraft:white_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6d2hpdGVfY29uY3JldGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC53aGl0ZV9jb25jcmV0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 586, - "key": "minecraft:orange_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6b3JhbmdlX2NvbmNyZXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfY29uY3JldGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 587, - "key": "minecraft:magenta_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bWFnZW50YV9jb25jcmV0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2NvbmNyZXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 588, - "key": "minecraft:light_blue_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bGlnaHRfYmx1ZV9jb25jcmV0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2NvbmNyZXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 589, - "key": "minecraft:yellow_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6eWVsbG93X2NvbmNyZXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC55ZWxsb3dfY29uY3JldGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 590, - "key": "minecraft:lime_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bGltZV9jb25jcmV0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5saW1lX2NvbmNyZXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 591, - "key": "minecraft:pink_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGlua19jb25jcmV0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5waW5rX2NvbmNyZXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 592, - "key": "minecraft:gray_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z3JheV9jb25jcmV0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5ncmF5X2NvbmNyZXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 593, - "key": "minecraft:light_gray_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bGlnaHRfZ3JheV9jb25jcmV0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2NvbmNyZXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 594, - "key": "minecraft:cyan_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y3lhbl9jb25jcmV0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jeWFuX2NvbmNyZXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 595, - "key": "minecraft:purple_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cHVycGxlX2NvbmNyZXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wdXJwbGVfY29uY3JldGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 596, - "key": "minecraft:blue_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Ymx1ZV9jb25jcmV0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5ibHVlX2NvbmNyZXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 597, - "key": "minecraft:brown_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YnJvd25fY29uY3JldGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5icm93bl9jb25jcmV0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 598, - "key": "minecraft:green_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z3JlZW5fY29uY3JldGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5ncmVlbl9jb25jcmV0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 599, - "key": "minecraft:red_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cmVkX2NvbmNyZXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5yZWRfY29uY3JldGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 600, - "key": "minecraft:black_concrete", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YmxhY2tfY29uY3JldGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5ibGFja19jb25jcmV0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 601, - "key": "minecraft:white_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2hpdGVfY29uY3JldGVfcG93ZGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53aGl0ZV9jb25jcmV0ZV9wb3dkZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 602, - "key": "minecraft:orange_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6b3JhbmdlX2NvbmNyZXRlX3Bvd2Rlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfY29uY3JldGVfcG93ZGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 603, - "key": "minecraft:magenta_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6bWFnZW50YV9jb25jcmV0ZV9wb3dkZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2NvbmNyZXRlX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 604, - "key": "minecraft:light_blue_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9jb25jcmV0ZV9wb3dkZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2NvbmNyZXRlX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 605, - "key": "minecraft:yellow_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6eWVsbG93X2NvbmNyZXRlX3Bvd2Rlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfY29uY3JldGVfcG93ZGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 606, - "key": "minecraft:lime_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6bGltZV9jb25jcmV0ZV9wb3dkZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5saW1lX2NvbmNyZXRlX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 607, - "key": "minecraft:pink_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6cGlua19jb25jcmV0ZV9wb3dkZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5waW5rX2NvbmNyZXRlX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 608, - "key": "minecraft:gray_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Z3JheV9jb25jcmV0ZV9wb3dkZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5ncmF5X2NvbmNyZXRlX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 609, - "key": "minecraft:light_gray_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6bGlnaHRfZ3JheV9jb25jcmV0ZV9wb3dkZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2NvbmNyZXRlX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 610, - "key": "minecraft:cyan_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y3lhbl9jb25jcmV0ZV9wb3dkZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5jeWFuX2NvbmNyZXRlX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 611, - "key": "minecraft:purple_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6cHVycGxlX2NvbmNyZXRlX3Bvd2Rlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfY29uY3JldGVfcG93ZGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 612, - "key": "minecraft:blue_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Ymx1ZV9jb25jcmV0ZV9wb3dkZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5ibHVlX2NvbmNyZXRlX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 613, - "key": "minecraft:brown_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6YnJvd25fY29uY3JldGVfcG93ZGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5icm93bl9jb25jcmV0ZV9wb3dkZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 614, - "key": "minecraft:green_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Z3JlZW5fY29uY3JldGVfcG93ZGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5ncmVlbl9jb25jcmV0ZV9wb3dkZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 615, - "key": "minecraft:red_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6cmVkX2NvbmNyZXRlX3Bvd2Rlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5yZWRfY29uY3JldGVfcG93ZGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 616, - "key": "minecraft:black_concrete_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6YmxhY2tfY29uY3JldGVfcG93ZGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5ibGFja19jb25jcmV0ZV9wb3dkZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 617, - "key": "minecraft:turtle_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6dHVydGxlX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50dXJ0bGVfZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 618, - "key": "minecraft:sniffer_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c25pZmZlcl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zbmlmZmVyX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 619, - "key": "minecraft:dried_ghast", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZHJpZWRfZ2hhc3Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5kcmllZF9naGFzdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 620, - "key": "minecraft:dead_tube_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVhZF90dWJlX2NvcmFsX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWFkX3R1YmVfY29yYWxfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 621, - "key": "minecraft:dead_brain_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZGVhZF9icmFpbl9jb3JhbF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5kZWFkX2JyYWluX2NvcmFsX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 622, - "key": "minecraft:dead_bubble_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZGVhZF9idWJibGVfY29yYWxfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2J1YmJsZV9jb3JhbF9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 623, - "key": "minecraft:dead_fire_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVhZF9maXJlX2NvcmFsX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWFkX2ZpcmVfY29yYWxfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 624, - "key": "minecraft:dead_horn_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVhZF9ob3JuX2NvcmFsX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWFkX2hvcm5fY29yYWxfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 625, - "key": "minecraft:tube_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6dHViZV9jb3JhbF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC50dWJlX2NvcmFsX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 626, - "key": "minecraft:brain_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YnJhaW5fY29yYWxfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5icmFpbl9jb3JhbF9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 627, - "key": "minecraft:bubble_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6YnViYmxlX2NvcmFsX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5idWJibGVfY29yYWxfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 628, - "key": "minecraft:fire_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZmlyZV9jb3JhbF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5maXJlX2NvcmFsX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 629, - "key": "minecraft:horn_coral_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6aG9ybl9jb3JhbF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ob3JuX2NvcmFsX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 630, - "key": "minecraft:tube_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6dHViZV9jb3JhbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50dWJlX2NvcmFsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 631, - "key": "minecraft:brain_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YnJhaW5fY29yYWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5icmFpbl9jb3JhbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 632, - "key": "minecraft:bubble_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnViYmxlX2NvcmFs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5idWJibGVfY29yYWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 633, - "key": "minecraft:fire_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZmlyZV9jb3JhbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5maXJlX2NvcmFsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 634, - "key": "minecraft:horn_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6aG9ybl9jb3JhbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ob3JuX2NvcmFsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 635, - "key": "minecraft:dead_brain_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZGVhZF9icmFpbl9jb3JhbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5kZWFkX2JyYWluX2NvcmFsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 636, - "key": "minecraft:dead_bubble_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6ZGVhZF9idWJibGVfY29yYWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5kZWFkX2J1YmJsZV9jb3JhbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 637, - "key": "minecraft:dead_fire_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGVhZF9maXJlX2NvcmFs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2ZpcmVfY29yYWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 638, - "key": "minecraft:dead_horn_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGVhZF9ob3JuX2NvcmFs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2hvcm5fY29yYWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 639, - "key": "minecraft:dead_tube_coral", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGVhZF90dWJlX2NvcmFs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kZWFkX3R1YmVfY29yYWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 640, - "key": "minecraft:tube_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6dHViZV9jb3JhbF9mYW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC50dWJlX2NvcmFsX2ZhbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 641, - "key": "minecraft:brain_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YnJhaW5fY29yYWxfZmFu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5icmFpbl9jb3JhbF9mYW4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 642, - "key": "minecraft:bubble_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6YnViYmxlX2NvcmFsX2Zhbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5idWJibGVfY29yYWxfZmFuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 643, - "key": "minecraft:fire_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZmlyZV9jb3JhbF9mYW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5maXJlX2NvcmFsX2ZhbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 644, - "key": "minecraft:horn_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6aG9ybl9jb3JhbF9mYW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5ob3JuX2NvcmFsX2ZhbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 645, - "key": "minecraft:dead_tube_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVhZF90dWJlX2NvcmFsX2Zhbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWFkX3R1YmVfY29yYWxfZmFuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 646, - "key": "minecraft:dead_brain_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGVhZF9icmFpbl9jb3JhbF9mYW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kZWFkX2JyYWluX2NvcmFsX2ZhbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 647, - "key": "minecraft:dead_bubble_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVhZF9idWJibGVfY29yYWxfZmFu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWFkX2J1YmJsZV9jb3JhbF9mYW4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 648, - "key": "minecraft:dead_fire_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVhZF9maXJlX2NvcmFsX2Zhbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2ZpcmVfY29yYWxfZmFuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 649, - "key": "minecraft:dead_horn_coral_fan", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVhZF9ob3JuX2NvcmFsX2Zhbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2hvcm5fY29yYWxfZmFuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 650, - "key": "minecraft:blue_ice", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Ymx1ZV9pY2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5ibHVlX2ljZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 651, - "key": "minecraft:conduit", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y29uZHVpdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5jb25kdWl0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 652, - "key": "minecraft:polished_granite_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cG9saXNoZWRfZ3Jhbml0ZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ncmFuaXRlX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 653, - "key": "minecraft:smooth_red_sandstone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByVtaW5lY3JhZnQ6c21vb3RoX3JlZF9zYW5kc3RvbmVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcmVkX3NhbmRzdG9uZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 654, - "key": "minecraft:mossy_stone_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6bW9zc3lfc3RvbmVfYnJpY2tfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5tb3NzeV9zdG9uZV9icmlja19zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 655, - "key": "minecraft:polished_diorite_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cG9saXNoZWRfZGlvcml0ZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kaW9yaXRlX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 656, - "key": "minecraft:mossy_cobblestone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6bW9zc3lfY29iYmxlc3RvbmVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5tb3NzeV9jb2JibGVzdG9uZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 657, - "key": "minecraft:end_stone_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZW5kX3N0b25lX2JyaWNrX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmVfYnJpY2tfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 658, - "key": "minecraft:stone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3RvbmVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 659, - "key": "minecraft:smooth_sandstone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6c21vb3RoX3NhbmRzdG9uZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc2FuZHN0b25lX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 660, - "key": "minecraft:smooth_quartz_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c21vb3RoX3F1YXJ0el9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcXVhcnR6X3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 661, - "key": "minecraft:granite_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z3Jhbml0ZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5ncmFuaXRlX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 662, - "key": "minecraft:andesite_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YW5kZXNpdGVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5hbmRlc2l0ZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 663, - "key": "minecraft:red_nether_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cmVkX25ldGhlcl9icmlja19zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5yZWRfbmV0aGVyX2JyaWNrX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 664, - "key": "minecraft:polished_andesite_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6cG9saXNoZWRfYW5kZXNpdGVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9hbmRlc2l0ZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 665, - "key": "minecraft:diorite_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZGlvcml0ZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5kaW9yaXRlX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 666, - "key": "minecraft:cobbled_deepslate_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6Y29iYmxlZF9kZWVwc2xhdGVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5jb2JibGVkX2RlZXBzbGF0ZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 667, - "key": "minecraft:polished_deepslate_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6cG9saXNoZWRfZGVlcHNsYXRlX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kZWVwc2xhdGVfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 668, - "key": "minecraft:deepslate_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZGVlcHNsYXRlX2JyaWNrX3N0YWlycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfYnJpY2tfc3RhaXJzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 669, - "key": "minecraft:deepslate_tile_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVlcHNsYXRlX3RpbGVfc3RhaXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfdGlsZV9zdGFpcnMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 670, - "key": "minecraft:polished_granite_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cG9saXNoZWRfZ3Jhbml0ZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ncmFuaXRlX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 671, - "key": "minecraft:smooth_red_sandstone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6c21vb3RoX3JlZF9zYW5kc3RvbmVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcmVkX3NhbmRzdG9uZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 672, - "key": "minecraft:mossy_stone_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6bW9zc3lfc3RvbmVfYnJpY2tfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5tb3NzeV9zdG9uZV9icmlja19zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 673, - "key": "minecraft:polished_diorite_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cG9saXNoZWRfZGlvcml0ZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kaW9yaXRlX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 674, - "key": "minecraft:mossy_cobblestone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6bW9zc3lfY29iYmxlc3RvbmVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5tb3NzeV9jb2JibGVzdG9uZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 675, - "key": "minecraft:end_stone_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZW5kX3N0b25lX2JyaWNrX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmVfYnJpY2tfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 676, - "key": "minecraft:smooth_sandstone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6c21vb3RoX3NhbmRzdG9uZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc2FuZHN0b25lX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 677, - "key": "minecraft:smooth_quartz_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6c21vb3RoX3F1YXJ0el9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcXVhcnR6X3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 678, - "key": "minecraft:granite_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3Jhbml0ZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmFuaXRlX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 679, - "key": "minecraft:andesite_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YW5kZXNpdGVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hbmRlc2l0ZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 680, - "key": "minecraft:red_nether_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cmVkX25ldGhlcl9icmlja19zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5yZWRfbmV0aGVyX2JyaWNrX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 681, - "key": "minecraft:polished_andesite_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6cG9saXNoZWRfYW5kZXNpdGVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9hbmRlc2l0ZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 682, - "key": "minecraft:diorite_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6ZGlvcml0ZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5kaW9yaXRlX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 683, - "key": "minecraft:cobbled_deepslate_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y29iYmxlZF9kZWVwc2xhdGVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jb2JibGVkX2RlZXBzbGF0ZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 684, - "key": "minecraft:polished_deepslate_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cG9saXNoZWRfZGVlcHNsYXRlX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kZWVwc2xhdGVfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 685, - "key": "minecraft:deepslate_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGVlcHNsYXRlX2JyaWNrX3NsYWI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfYnJpY2tfc2xhYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 686, - "key": "minecraft:deepslate_tile_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVlcHNsYXRlX3RpbGVfc2xhYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfdGlsZV9zbGFiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 687, - "key": "minecraft:scaffolding", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2NhZmZvbGRpbmc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zY2FmZm9sZGluZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 688, - "key": "minecraft:redstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmVkc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnJlZHN0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQASbWluZWNyYWZ0OnJlZHN0b25l", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 689, - "key": "minecraft:redstone_torch", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmVkc3RvbmVfdG9yY2g=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yZWRzdG9uZV90b3JjaAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 690, - "key": "minecraft:redstone_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmVkc3RvbmVfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yZWRzdG9uZV9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 691, - "key": "minecraft:repeater", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmVwZWF0ZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5yZXBlYXRlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 692, - "key": "minecraft:comparator", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29tcGFyYXRvcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jb21wYXJhdG9yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 693, - "key": "minecraft:piston", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6cGlzdG9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5waXN0b24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 694, - "key": "minecraft:sticky_piston", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3RpY2t5X3Bpc3Rvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zdGlja3lfcGlzdG9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 695, - "key": "minecraft:slime_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2xpbWVfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zbGltZV9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 696, - "key": "minecraft:honey_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6aG9uZXlfYmxvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ob25leV9ibG9jawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 697, - "key": "minecraft:observer", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2JzZXJ2ZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYnNlcnZlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 698, - "key": "minecraft:hopper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6aG9wcGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5ob3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 699, - "key": "minecraft:dispenser", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGlzcGVuc2Vy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kaXNwZW5zZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 700, - "key": "minecraft:dropper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZHJvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5kcm9wcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 701, - "key": "minecraft:lectern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6bGVjdGVybg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5sZWN0ZXJuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 702, - "key": "minecraft:target", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6dGFyZ2V0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC50YXJnZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 703, - "key": "minecraft:lever", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6bGV2ZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5sZXZlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 704, - "key": "minecraft:lightning_rod", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bGlnaHRuaW5nX3JvZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5saWdodG5pbmdfcm9kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 705, - "key": "minecraft:daylight_detector", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6ZGF5bGlnaHRfZGV0ZWN0b3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5kYXlsaWdodF9kZXRlY3RvcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 706, - "key": "minecraft:sculk_sensor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6c2N1bGtfc2Vuc29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zY3Vsa19zZW5zb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 707, - "key": "minecraft:calibrated_sculk_sensor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6Y2FsaWJyYXRlZF9zY3Vsa19zZW5zb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5jYWxpYnJhdGVkX3NjdWxrX3NlbnNvcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 708, - "key": "minecraft:tripwire_hook", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHJpcHdpcmVfaG9vaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC50cmlwd2lyZV9ob29rAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 709, - "key": "minecraft:trapped_chest", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHJhcHBlZF9jaGVzdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC50cmFwcGVkX2NoZXN0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 710, - "key": "minecraft:tnt", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw1taW5lY3JhZnQ6dG50", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2Jsb2NrLm1pbmVjcmFmdC50bnQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 711, - "key": "minecraft:redstone_lamp", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cmVkc3RvbmVfbGFtcA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5yZWRzdG9uZV9sYW1wAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 712, - "key": "minecraft:note_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6bm90ZV9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ub3RlX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 713, - "key": "minecraft:stone_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3RvbmVfYnV0dG9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9idXR0b24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 714, - "key": "minecraft:polished_blackstone_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9idXR0b24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2J1dHRvbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 715, - "key": "minecraft:oak_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6b2FrX2J1dHRvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vYWtfYnV0dG9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 716, - "key": "minecraft:spruce_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BydWNlX2J1dHRvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfYnV0dG9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 717, - "key": "minecraft:birch_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlyY2hfYnV0dG9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9idXR0b24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 718, - "key": "minecraft:jungle_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6anVuZ2xlX2J1dHRvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfYnV0dG9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 719, - "key": "minecraft:acacia_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YWNhY2lhX2J1dHRvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfYnV0dG9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 720, - "key": "minecraft:cherry_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hlcnJ5X2J1dHRvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfYnV0dG9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 721, - "key": "minecraft:dark_oak_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19vYWtfYnV0dG9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19idXR0b24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 722, - "key": "minecraft:pale_oak_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9vYWtfYnV0dG9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19idXR0b24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 723, - "key": "minecraft:mangrove_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFuZ3JvdmVfYnV0dG9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9idXR0b24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 724, - "key": "minecraft:bamboo_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmFtYm9vX2J1dHRvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fYnV0dG9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 725, - "key": "minecraft:crimson_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9idXR0b24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2J1dHRvbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 726, - "key": "minecraft:warped_button", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX2J1dHRvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfYnV0dG9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 727, - "key": "minecraft:stone_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RvbmVfcHJlc3N1cmVfcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9wcmVzc3VyZV9wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 728, - "key": "minecraft:polished_blackstone_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByxtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9wcmVzc3VyZV9wbGF0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX3ByZXNzdXJlX3BsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 729, - "key": "minecraft:light_weighted_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BydtaW5lY3JhZnQ6bGlnaHRfd2VpZ2h0ZWRfcHJlc3N1cmVfcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5saWdodF93ZWlnaHRlZF9wcmVzc3VyZV9wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 730, - "key": "minecraft:heavy_weighted_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BydtaW5lY3JhZnQ6aGVhdnlfd2VpZ2h0ZWRfcHJlc3N1cmVfcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5oZWF2eV93ZWlnaHRlZF9wcmVzc3VyZV9wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 731, - "key": "minecraft:oak_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6b2FrX3ByZXNzdXJlX3BsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5vYWtfcHJlc3N1cmVfcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 732, - "key": "minecraft:spruce_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3BydWNlX3ByZXNzdXJlX3BsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfcHJlc3N1cmVfcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 733, - "key": "minecraft:birch_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6YmlyY2hfcHJlc3N1cmVfcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9wcmVzc3VyZV9wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 734, - "key": "minecraft:jungle_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6anVuZ2xlX3ByZXNzdXJlX3BsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfcHJlc3N1cmVfcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 735, - "key": "minecraft:acacia_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6YWNhY2lhX3ByZXNzdXJlX3BsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfcHJlc3N1cmVfcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 736, - "key": "minecraft:cherry_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2hlcnJ5X3ByZXNzdXJlX3BsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfcHJlc3N1cmVfcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 737, - "key": "minecraft:dark_oak_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZGFya19vYWtfcHJlc3N1cmVfcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19wcmVzc3VyZV9wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 738, - "key": "minecraft:pale_oak_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6cGFsZV9vYWtfcHJlc3N1cmVfcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19wcmVzc3VyZV9wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 739, - "key": "minecraft:mangrove_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6bWFuZ3JvdmVfcHJlc3N1cmVfcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9wcmVzc3VyZV9wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 740, - "key": "minecraft:bamboo_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6YmFtYm9vX3ByZXNzdXJlX3BsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fcHJlc3N1cmVfcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 741, - "key": "minecraft:crimson_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y3JpbXNvbl9wcmVzc3VyZV9wbGF0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3ByZXNzdXJlX3BsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 742, - "key": "minecraft:warped_pressure_plate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2FycGVkX3ByZXNzdXJlX3BsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfcHJlc3N1cmVfcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 743, - "key": "minecraft:iron_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6aXJvbl9kb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5pcm9uX2Rvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 744, - "key": "minecraft:oak_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYWtfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 745, - "key": "minecraft:spruce_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 746, - "key": "minecraft:birch_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5iaXJjaF9kb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 747, - "key": "minecraft:jungle_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 748, - "key": "minecraft:acacia_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 749, - "key": "minecraft:cherry_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 750, - "key": "minecraft:dark_oak_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19kb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 751, - "key": "minecraft:pale_oak_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19kb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 752, - "key": "minecraft:mangrove_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9kb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 753, - "key": "minecraft:bamboo_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmFtYm9vX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29fZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 754, - "key": "minecraft:crimson_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JpbXNvbl9kb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2Rvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 755, - "key": "minecraft:warped_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2FycGVkX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 756, - "key": "minecraft:copper_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29wcGVyX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jb3BwZXJfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 757, - "key": "minecraft:exposed_copper_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXJfZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcl9kb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 758, - "key": "minecraft:weathered_copper_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcl9kb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyX2Rvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 759, - "key": "minecraft:oxidized_copper_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVyX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXJfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 760, - "key": "minecraft:waxed_copper_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6d2F4ZWRfY29wcGVyX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 761, - "key": "minecraft:waxed_exposed_copper_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXJfZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcl9kb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 762, - "key": "minecraft:waxed_weathered_copper_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByVtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcl9kb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyX2Rvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 763, - "key": "minecraft:waxed_oxidized_copper_door", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVyX2Rvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXJfZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 764, - "key": "minecraft:iron_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6aXJvbl90cmFwZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5pcm9uX3RyYXBkb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 765, - "key": "minecraft:oak_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6b2FrX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5vYWtfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 766, - "key": "minecraft:spruce_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c3BydWNlX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 767, - "key": "minecraft:birch_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YmlyY2hfdHJhcGRvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5iaXJjaF90cmFwZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 768, - "key": "minecraft:jungle_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6anVuZ2xlX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 769, - "key": "minecraft:acacia_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YWNhY2lhX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 770, - "key": "minecraft:cherry_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y2hlcnJ5X3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 771, - "key": "minecraft:dark_oak_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6ZGFya19vYWtfdHJhcGRvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha190cmFwZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 772, - "key": "minecraft:pale_oak_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cGFsZV9vYWtfdHJhcGRvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha190cmFwZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 773, - "key": "minecraft:mangrove_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bWFuZ3JvdmVfdHJhcGRvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV90cmFwZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 774, - "key": "minecraft:bamboo_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YmFtYm9vX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29fdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 775, - "key": "minecraft:crimson_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Y3JpbXNvbl90cmFwZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3RyYXBkb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 776, - "key": "minecraft:warped_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6d2FycGVkX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 777, - "key": "minecraft:copper_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y29wcGVyX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jb3BwZXJfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 778, - "key": "minecraft:exposed_copper_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXJfdHJhcGRvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcl90cmFwZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 779, - "key": "minecraft:weathered_copper_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcl90cmFwZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyX3RyYXBkb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 780, - "key": "minecraft:oxidized_copper_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVyX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXJfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 781, - "key": "minecraft:waxed_copper_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2F4ZWRfY29wcGVyX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 782, - "key": "minecraft:waxed_exposed_copper_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BydtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXJfdHJhcGRvb3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcl90cmFwZG9vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 783, - "key": "minecraft:waxed_weathered_copper_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByltaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcl90cmFwZG9vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyX3RyYXBkb29yAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 784, - "key": "minecraft:waxed_oxidized_copper_trapdoor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByhtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVyX3RyYXBkb29y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXJfdHJhcGRvb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 785, - "key": "minecraft:oak_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6b2FrX2ZlbmNlX2dhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5vYWtfZmVuY2VfZ2F0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 786, - "key": "minecraft:spruce_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6c3BydWNlX2ZlbmNlX2dhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfZmVuY2VfZ2F0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 787, - "key": "minecraft:birch_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6YmlyY2hfZmVuY2VfZ2F0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9mZW5jZV9nYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 788, - "key": "minecraft:jungle_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6anVuZ2xlX2ZlbmNlX2dhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfZmVuY2VfZ2F0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 789, - "key": "minecraft:acacia_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YWNhY2lhX2ZlbmNlX2dhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfZmVuY2VfZ2F0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 790, - "key": "minecraft:cherry_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2hlcnJ5X2ZlbmNlX2dhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfZmVuY2VfZ2F0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 791, - "key": "minecraft:dark_oak_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGFya19vYWtfZmVuY2VfZ2F0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19mZW5jZV9nYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 792, - "key": "minecraft:pale_oak_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6cGFsZV9vYWtfZmVuY2VfZ2F0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19mZW5jZV9nYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 793, - "key": "minecraft:mangrove_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWFuZ3JvdmVfZmVuY2VfZ2F0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9mZW5jZV9nYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 794, - "key": "minecraft:bamboo_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YmFtYm9vX2ZlbmNlX2dhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fZmVuY2VfZ2F0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 795, - "key": "minecraft:crimson_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y3JpbXNvbl9mZW5jZV9nYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2ZlbmNlX2dhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 796, - "key": "minecraft:warped_fence_gate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6d2FycGVkX2ZlbmNlX2dhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfZmVuY2VfZ2F0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 797, - "key": "minecraft:powered_rail", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cG93ZXJlZF9yYWls", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5wb3dlcmVkX3JhaWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 798, - "key": "minecraft:detector_rail", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGV0ZWN0b3JfcmFpbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kZXRlY3Rvcl9yYWlsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 799, - "key": "minecraft:rail", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6cmFpbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5yYWlsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 800, - "key": "minecraft:activator_rail", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YWN0aXZhdG9yX3JhaWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5hY3RpdmF0b3JfcmFpbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 801, - "key": "minecraft:saddle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAeHBgEQbWluZWNyYWZ0OnNhZGRsZQABABptaW5lY3JhZnQ6Y2FuX2VxdWlwX3NhZGRsZQEBAQEBwA0=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6c2FkZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnNhZGRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 802, - "key": "minecraft:white_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEXbWluZWNyYWZ0OndoaXRlX2hhcm5lc3MAAQAbbWluZWNyYWZ0OmNhbl9lcXVpcF9oYXJuZXNzAQEBAQHgBQ==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2hpdGVfaGFybmVzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LndoaXRlX2hhcm5lc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 803, - "key": "minecraft:orange_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEYbWluZWNyYWZ0Om9yYW5nZV9oYXJuZXNzAAEAG21pbmVjcmFmdDpjYW5fZXF1aXBfaGFybmVzcwEBAQEB4AU=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6b3JhbmdlX2hhcm5lc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm9yYW5nZV9oYXJuZXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 804, - "key": "minecraft:magenta_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEZbWluZWNyYWZ0Om1hZ2VudGFfaGFybmVzcwABABttaW5lY3JhZnQ6Y2FuX2VxdWlwX2hhcm5lc3MBAQEBAeAF", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFnZW50YV9oYXJuZXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm1hZ2VudGFfaGFybmVzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 805, - "key": "minecraft:light_blue_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEcbWluZWNyYWZ0OmxpZ2h0X2JsdWVfaGFybmVzcwABABttaW5lY3JhZnQ6Y2FuX2VxdWlwX2hhcm5lc3MBAQEBAeAF", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9oYXJuZXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2JsdWVfaGFybmVzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 806, - "key": "minecraft:yellow_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEYbWluZWNyYWZ0OnllbGxvd19oYXJuZXNzAAEAG21pbmVjcmFmdDpjYW5fZXF1aXBfaGFybmVzcwEBAQEB4AU=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6eWVsbG93X2hhcm5lc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LnllbGxvd19oYXJuZXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 807, - "key": "minecraft:lime_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEWbWluZWNyYWZ0OmxpbWVfaGFybmVzcwABABttaW5lY3JhZnQ6Y2FuX2VxdWlwX2hhcm5lc3MBAQEBAeAF", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6bGltZV9oYXJuZXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmxpbWVfaGFybmVzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 808, - "key": "minecraft:pink_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEWbWluZWNyYWZ0OnBpbmtfaGFybmVzcwABABttaW5lY3JhZnQ6Y2FuX2VxdWlwX2hhcm5lc3MBAQEBAeAF", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cGlua19oYXJuZXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnBpbmtfaGFybmVzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 809, - "key": "minecraft:gray_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEWbWluZWNyYWZ0OmdyYXlfaGFybmVzcwABABttaW5lY3JhZnQ6Y2FuX2VxdWlwX2hhcm5lc3MBAQEBAeAF", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JheV9oYXJuZXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdyYXlfaGFybmVzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 810, - "key": "minecraft:light_gray_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEcbWluZWNyYWZ0OmxpZ2h0X2dyYXlfaGFybmVzcwABABttaW5lY3JhZnQ6Y2FuX2VxdWlwX2hhcm5lc3MBAQEBAeAF", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGlnaHRfZ3JheV9oYXJuZXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2dyYXlfaGFybmVzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 811, - "key": "minecraft:cyan_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEWbWluZWNyYWZ0OmN5YW5faGFybmVzcwABABttaW5lY3JhZnQ6Y2FuX2VxdWlwX2hhcm5lc3MBAQEBAeAF", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3lhbl9oYXJuZXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmN5YW5faGFybmVzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 812, - "key": "minecraft:purple_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEYbWluZWNyYWZ0OnB1cnBsZV9oYXJuZXNzAAEAG21pbmVjcmFmdDpjYW5fZXF1aXBfaGFybmVzcwEBAQEB4AU=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6cHVycGxlX2hhcm5lc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LnB1cnBsZV9oYXJuZXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 813, - "key": "minecraft:blue_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEWbWluZWNyYWZ0OmJsdWVfaGFybmVzcwABABttaW5lY3JhZnQ6Y2FuX2VxdWlwX2hhcm5lc3MBAQEBAeAF", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Ymx1ZV9oYXJuZXNz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJsdWVfaGFybmVzcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 814, - "key": "minecraft:brown_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEXbWluZWNyYWZ0OmJyb3duX2hhcm5lc3MAAQAbbWluZWNyYWZ0OmNhbl9lcXVpcF9oYXJuZXNzAQEBAQHgBQ==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YnJvd25faGFybmVzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmJyb3duX2hhcm5lc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 815, - "key": "minecraft:green_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEXbWluZWNyYWZ0OmdyZWVuX2hhcm5lc3MAAQAbbWluZWNyYWZ0OmNhbl9lcXVpcF9oYXJuZXNzAQEBAQHgBQ==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z3JlZW5faGFybmVzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmdyZWVuX2hhcm5lc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 816, - "key": "minecraft:red_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEVbWluZWNyYWZ0OnJlZF9oYXJuZXNzAAEAG21pbmVjcmFmdDpjYW5fZXF1aXBfaGFybmVzcwEBAQEB4AU=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmVkX2hhcm5lc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJlZF9oYXJuZXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 817, - "key": "minecraft:black_harness", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAbfBQEXbWluZWNyYWZ0OmJsYWNrX2hhcm5lc3MAAQAbbWluZWNyYWZ0OmNhbl9lcXVpcF9oYXJuZXNzAQEBAQHgBQ==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmxhY2tfaGFybmVzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmJsYWNrX2hhcm5lc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 818, - "key": "minecraft:minecart", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6bWluZWNhcnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lm1pbmVjYXJ0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 819, - "key": "minecraft:chest_minecart", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y2hlc3RfbWluZWNhcnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmNoZXN0X21pbmVjYXJ0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 820, - "key": "minecraft:furnace_minecart", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZnVybmFjZV9taW5lY2FydA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmZ1cm5hY2VfbWluZWNhcnQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 821, - "key": "minecraft:tnt_minecart", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6dG50X21pbmVjYXJ0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnRudF9taW5lY2FydAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 822, - "key": "minecraft:hopper_minecart", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6aG9wcGVyX21pbmVjYXJ0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmhvcHBlcl9taW5lY2FydAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 823, - "key": "minecraft:carrot_on_a_stick", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2Fycm90X29uX2Ffc3RpY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmNhcnJvdF9vbl9hX3N0aWNrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Ahk=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 824, - "key": "minecraft:warped_fungus_on_a_stick", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6d2FycGVkX2Z1bmd1c19vbl9hX3N0aWNr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2l0ZW0ubWluZWNyYWZ0LndhcnBlZF9mdW5ndXNfb25fYV9zdGljawA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AmQ=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 825, - "key": "minecraft:phantom_membrane", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cGhhbnRvbV9tZW1icmFuZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnBoYW50b21fbWVtYnJhbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 826, - "key": "minecraft:elytra", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HANGARBtaW5lY3JhZnQ6ZWx5dHJhAAABAQAAAJIK", - "minecraft:glider": "Hg==", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6ZWx5dHJh", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmVseXRyYQA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ArAD", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQK5Bg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 827, - "key": "minecraft:oak_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lm9ha19ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 828, - "key": "minecraft:oak_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6b2FrX2NoZXN0X2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm9ha19jaGVzdF9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 829, - "key": "minecraft:spruce_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnNwcnVjZV9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 830, - "key": "minecraft:spruce_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6c3BydWNlX2NoZXN0X2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnNwcnVjZV9jaGVzdF9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 831, - "key": "minecraft:birch_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfYm9hdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmJpcmNoX2JvYXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 832, - "key": "minecraft:birch_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6YmlyY2hfY2hlc3RfYm9hdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmJpcmNoX2NoZXN0X2JvYXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 833, - "key": "minecraft:jungle_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lmp1bmdsZV9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 834, - "key": "minecraft:jungle_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6anVuZ2xlX2NoZXN0X2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0Lmp1bmdsZV9jaGVzdF9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 835, - "key": "minecraft:acacia_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmFjYWNpYV9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 836, - "key": "minecraft:acacia_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YWNhY2lhX2NoZXN0X2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmFjYWNpYV9jaGVzdF9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 837, - "key": "minecraft:cherry_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmNoZXJyeV9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 838, - "key": "minecraft:cherry_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2hlcnJ5X2NoZXN0X2JvYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmNoZXJyeV9jaGVzdF9ib2F0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 839, - "key": "minecraft:dark_oak_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfYm9hdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmRhcmtfb2FrX2JvYXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 840, - "key": "minecraft:dark_oak_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGFya19vYWtfY2hlc3RfYm9hdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmRhcmtfb2FrX2NoZXN0X2JvYXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 841, - "key": "minecraft:pale_oak_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfYm9hdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnBhbGVfb2FrX2JvYXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 842, - "key": "minecraft:pale_oak_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6cGFsZV9vYWtfY2hlc3RfYm9hdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnBhbGVfb2FrX2NoZXN0X2JvYXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 843, - "key": "minecraft:mangrove_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfYm9hdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm1hbmdyb3ZlX2JvYXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 844, - "key": "minecraft:mangrove_chest_boat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWFuZ3JvdmVfY2hlc3RfYm9hdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0Lm1hbmdyb3ZlX2NoZXN0X2JvYXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 845, - "key": "minecraft:bamboo_raft", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmFtYm9vX3JhZnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmJhbWJvb19yYWZ0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 846, - "key": "minecraft:bamboo_chest_raft", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YmFtYm9vX2NoZXN0X3JhZnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmJhbWJvb19jaGVzdF9yYWZ0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 847, - "key": "minecraft:structure_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c3RydWN0dXJlX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5zdHJ1Y3R1cmVfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 848, - "key": "minecraft:jigsaw", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6amlnc2F3", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5qaWdzYXcA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 849, - "key": "minecraft:test_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:block_state": "QwEEbW9kZQVzdGFydA==", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6dGVzdF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50ZXN0X2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 850, - "key": "minecraft:test_instance_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6dGVzdF9pbnN0YW5jZV9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC50ZXN0X2luc3RhbmNlX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 851, - "key": "minecraft:turtle_helmet", - "components": { - "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRAAAAAAAAAAAAHAAEWbWluZWNyYWZ0OmFybW9yLmhlbG1ldAAAAAAAAAAAAAcA", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARMARZtaW5lY3JhZnQ6dHVydGxlX3NjdXRlAAABAQEAAJIK", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHVydGxlX2hlbG1ldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnR1cnRsZV9oZWxtZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ApMC", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfdHVydGxlX2hlbG1ldA==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 852, - "key": "minecraft:turtle_scute", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6dHVydGxlX3NjdXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnR1cnRsZV9zY3V0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 853, - "key": "minecraft:armadillo_scute", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YXJtYWRpbGxvX3NjdXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmFybWFkaWxsb19zY3V0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 854, - "key": "minecraft:wolf_armor", - "components": { - "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QCYAAAAAAAAACQABFG1pbmVjcmFmdDphcm1vci5ib2R5AAAAAAAAAAAACQA=", - "minecraft:break_sound": "R94M", - "minecraft:damage": "AwA=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAZNARltaW5lY3JhZnQ6YXJtYWRpbGxvX3NjdXRlAAECjwEBAQEAAU4=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6d29sZl9hcm1vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LndvbGZfYXJtb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AkA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfd29sZl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 855, - "key": "minecraft:flint_and_steel", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZmxpbnRfYW5kX3N0ZWVs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmZsaW50X2FuZF9zdGVlbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AkA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 856, - "key": "minecraft:bowl", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6Ym93bA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmJvd2wA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 857, - "key": "minecraft:apple", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FARAGZmaAA==", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6YXBwbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmFwcGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 858, - "key": "minecraft:bow", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw1taW5lY3JhZnQ6Ym93", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAEml0ZW0ubWluZWNyYWZ0LmJvdwA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AoAD", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 859, - "key": "minecraft:arrow", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6YXJyb3c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmFycm93AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 860, - "key": "minecraft:coal", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6Y29hbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmNvYWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 861, - "key": "minecraft:charcoal", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y2hhcmNvYWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmNoYXJjb2FsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 862, - "key": "minecraft:diamond", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZGlhbW9uZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmRpYW1vbmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQARbWluZWNyYWZ0OmRpYW1vbmQ=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 863, - "key": "minecraft:emerald", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZW1lcmFsZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmVtZXJhbGQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQARbWluZWNyYWZ0OmVtZXJhbGQ=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 864, - "key": "minecraft:lapis_lazuli", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6bGFwaXNfbGF6dWxp", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmxhcGlzX2xhenVsaQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQAPbWluZWNyYWZ0OmxhcGlz", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 865, - "key": "minecraft:quartz", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6cXVhcnR6", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnF1YXJ0egA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQAQbWluZWNyYWZ0OnF1YXJ0eg==", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 866, - "key": "minecraft:amethyst_shard", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YW1ldGh5c3Rfc2hhcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmFtZXRoeXN0X3NoYXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQASbWluZWNyYWZ0OmFtZXRoeXN0", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 867, - "key": "minecraft:raw_iron", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmF3X2lyb24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnJhd19pcm9uAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 868, - "key": "minecraft:iron_ingot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXJvbl9pbmdvdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lmlyb25faW5nb3QA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQAObWluZWNyYWZ0Omlyb24=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 869, - "key": "minecraft:raw_copper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmF3X2NvcHBlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnJhd19jb3BwZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 870, - "key": "minecraft:copper_ingot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y29wcGVyX2luZ290", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmNvcHBlcl9pbmdvdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQAQbWluZWNyYWZ0OmNvcHBlcg==", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 871, - "key": "minecraft:raw_gold", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmF3X2dvbGQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnJhd19nb2xkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 872, - "key": "minecraft:gold_ingot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z29sZF9pbmdvdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmdvbGRfaW5nb3QA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQAObWluZWNyYWZ0OmdvbGQ=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 873, - "key": "minecraft:netherite_ingot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX2luZ290", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9pbmdvdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQATbWluZWNyYWZ0Om5ldGhlcml0ZQ==", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 874, - "key": "minecraft:netherite_scrap", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX3NjcmFw", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9zY3JhcAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 875, - "key": "minecraft:wooden_sword", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VACAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAMzM0AAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d29vZGVuX3N3b3Jk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9zd29yZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Ajs=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQMCgQEBQXAAAAEBAB9taW5lY3JhZnQ6c3dvcmRfaW5zdGFudGx5X21pbmVzAX9///8AABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAIA", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgEAAAAA" - } - }, - { - "id": 876, - "key": "minecraft:wooden_shovel", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2U/+AAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d29vZGVuX3Nob3ZlbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9zaG92ZWwA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Ajs=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQIAI21pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3dvb2Rlbl90b29sAAEAABltaW5lY3JhZnQ6bWluZWFibGUvc2hvdmVsAUAAAAABAT+AAAABAQ==", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 877, - "key": "minecraft:wooden_pickaxe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2U/8AAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAZmZmAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6d29vZGVuX3BpY2theGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9waWNrYXhlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Ajs=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQIAI21pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3dvb2Rlbl90b29sAAEAABptaW5lY3JhZnQ6bWluZWFibGUvcGlja2F4ZQFAAAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 878, - "key": "minecraft:wooden_axe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAGAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAmZmaAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6d29vZGVuX2F4ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9heGUA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Ajs=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQIAI21pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3dvb2Rlbl90b29sAAEAABZtaW5lY3JhZnQ6bWluZWFibGUvYXhlAUAAAAABAT+AAAABAQ==", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgJAoAAA" - } - }, - { - "id": 879, - "key": "minecraft:wooden_hoe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6d29vZGVuX2hvZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9ob2UA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Ajs=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQIAI21pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3dvb2Rlbl90b29sAAEAABZtaW5lY3JhZnQ6bWluZWFibGUvaG9lAUAAAAABAT+AAAABAQ==", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 880, - "key": "minecraft:stone_sword", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAEAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAMzM0AAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwU=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3RvbmVfc3dvcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnN0b25lX3N3b3JkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AoMB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", - "minecraft:tool": "GQMCgQEBQXAAAAEBAB9taW5lY3JhZnQ6c3dvcmRfaW5zdGFudGx5X21pbmVzAX9///8AABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAIA", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgEAAAAA" - } - }, - { - "id": 881, - "key": "minecraft:stone_shovel", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VABAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwU=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3RvbmVfc2hvdmVs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnN0b25lX3Nob3ZlbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AoMB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", - "minecraft:tool": "GQIAIm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3N0b25lX3Rvb2wAAQAAGW1pbmVjcmFmdDptaW5lYWJsZS9zaG92ZWwBQIAAAAEBP4AAAAEB", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 882, - "key": "minecraft:stone_pickaxe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAAAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAZmZmAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwU=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3RvbmVfcGlja2F4ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnN0b25lX3BpY2theGUA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AoMB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", - "minecraft:tool": "GQIAIm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3N0b25lX3Rvb2wAAQAAGm1pbmVjcmFmdDptaW5lYWJsZS9waWNrYXhlAUCAAAABAT+AAAABAQ==", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 883, - "key": "minecraft:stone_axe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAmZmaAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwU=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6c3RvbmVfYXhl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LnN0b25lX2F4ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AoMB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", - "minecraft:tool": "GQIAIm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3N0b25lX3Rvb2wAAQAAFm1pbmVjcmFmdDptaW5lYWJsZS9heGUBQIAAAAEBP4AAAAEB", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgJAoAAA" - } - }, - { - "id": 884, - "key": "minecraft:stone_hoe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAAAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwU=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6c3RvbmVfaG9l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LnN0b25lX2hvZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AoMB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", - "minecraft:tool": "GQIAIm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3N0b25lX3Rvb2wAAQAAFm1pbmVjcmFmdDptaW5lYWJsZS9ob2UBQIAAAAEBP4AAAAEB", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 885, - "key": "minecraft:golden_sword", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VACAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAMzM0AAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GxY=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z29sZGVuX3N3b3Jk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdvbGRlbl9zd29yZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AiA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQMCgQEBQXAAAAEBAB9taW5lY3JhZnQ6c3dvcmRfaW5zdGFudGx5X21pbmVzAX9///8AABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAIA", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgEAAAAA" - } - }, - { - "id": 886, - "key": "minecraft:golden_shovel", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2U/+AAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GxY=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z29sZGVuX3Nob3ZlbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9zaG92ZWwA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AiA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2dvbGRfdG9vbAABAAAZbWluZWNyYWZ0Om1pbmVhYmxlL3Nob3ZlbAFBQAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 887, - "key": "minecraft:golden_pickaxe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2U/8AAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAZmZmAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GxY=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z29sZGVuX3BpY2theGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9waWNrYXhlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AiA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2dvbGRfdG9vbAABAAAabWluZWNyYWZ0Om1pbmVhYmxlL3BpY2theGUBQUAAAAEBP4AAAAEB", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 888, - "key": "minecraft:golden_axe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAGAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GxY=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z29sZGVuX2F4ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9heGUA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AiA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2dvbGRfdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2F4ZQFBQAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgJAoAAA" - } - }, - { - "id": 889, - "key": "minecraft:golden_hoe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GxY=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z29sZGVuX2hvZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9ob2UA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AiA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2dvbGRfdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2hvZQFBQAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 890, - "key": "minecraft:iron_sword", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAFAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAMzM0AAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw4=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXJvbl9zd29yZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lmlyb25fc3dvcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvoB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQMCgQEBQXAAAAEBAB9taW5lY3JhZnQ6c3dvcmRfaW5zdGFudGx5X21pbmVzAX9///8AABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAIA", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgEAAAAA" - } - }, - { - "id": 891, - "key": "minecraft:iron_shovel", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VADAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw4=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6aXJvbl9zaG92ZWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lmlyb25fc2hvdmVsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvoB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2lyb25fdG9vbAABAAAZbWluZWNyYWZ0Om1pbmVhYmxlL3Nob3ZlbAFAwAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 892, - "key": "minecraft:iron_pickaxe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VACAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAZmZmAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw4=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6aXJvbl9waWNrYXhl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lmlyb25fcGlja2F4ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvoB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2lyb25fdG9vbAABAAAabWluZWNyYWZ0Om1pbmVhYmxlL3BpY2theGUBQMAAAAEBP4AAAAEB", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 893, - "key": "minecraft:iron_axe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAjMzMAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw4=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6aXJvbl9heGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lmlyb25fYXhlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvoB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2lyb25fdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2F4ZQFAwAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgJAoAAA" - } - }, - { - "id": 894, - "key": "minecraft:iron_hoe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkv/AAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw4=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6aXJvbl9ob2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lmlyb25faG9lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvoB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2lyb25fdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2hvZQFAwAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 895, - "key": "minecraft:diamond_sword", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAGAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAMzM0AAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGlhbW9uZF9zd29yZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfc3dvcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ApkM", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQMCgQEBQXAAAAEBAB9taW5lY3JhZnQ6c3dvcmRfaW5zdGFudGx5X21pbmVzAX9///8AABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAIA", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgEAAAAA" - } - }, - { - "id": 896, - "key": "minecraft:diamond_shovel", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAEgAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZGlhbW9uZF9zaG92ZWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfc2hvdmVsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ApkM", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAJG1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2RpYW1vbmRfdG9vbAABAAAZbWluZWNyYWZ0Om1pbmVhYmxlL3Nob3ZlbAFBAAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 897, - "key": "minecraft:diamond_pickaxe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAEAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAZmZmAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGlhbW9uZF9waWNrYXhl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfcGlja2F4ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ApkM", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAJG1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2RpYW1vbmRfdG9vbAABAAAabWluZWNyYWZ0Om1pbmVhYmxlL3BpY2theGUBQQAAAAEBP4AAAAEB", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 898, - "key": "minecraft:diamond_axe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZGlhbW9uZF9heGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfYXhlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ApkM", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAJG1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2RpYW1vbmRfdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2F4ZQFBAAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgJAoAAA" - } - }, - { - "id": 899, - "key": "minecraft:diamond_hoe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkAAAAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZGlhbW9uZF9ob2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfaG9lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ApkM", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", - "minecraft:tool": "GQIAJG1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2RpYW1vbmRfdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2hvZQFBAAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 900, - "key": "minecraft:netherite_sword", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAHAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAMzM0AAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX3N3b3Jk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9zd29yZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Au8P", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQMCgQEBQXAAAAEBAB9taW5lY3JhZnQ6c3dvcmRfaW5zdGFudGx5X21pbmVzAX9///8AABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAIA", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgEAAAAA" - } - }, - { - "id": 901, - "key": "minecraft:netherite_shovel", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAFgAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bmV0aGVyaXRlX3Nob3ZlbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9zaG92ZWwA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Au8P", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQIAJm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX25ldGhlcml0ZV90b29sAAEAABltaW5lY3JhZnQ6bWluZWFibGUvc2hvdmVsAUEQAAABAT+AAAABAQ==", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 902, - "key": "minecraft:netherite_pickaxe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAFAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAZmZmAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyaXRlX3BpY2theGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9waWNrYXhlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Au8P", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQIAJm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX25ldGhlcml0ZV90b29sAAEAABptaW5lY3JhZnQ6bWluZWFibGUvcGlja2F4ZQFBEAAAAQE/gAAAAQE=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 903, - "key": "minecraft:netherite_axe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIgAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAgAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bmV0aGVyaXRlX2F4ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9heGUA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Au8P", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQIAJm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX25ldGhlcml0ZV90b29sAAEAABZtaW5lY3JhZnQ6bWluZWFibGUvYXhlAUEQAAABAT+AAAABAQ==", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgJAoAAA" - } - }, - { - "id": 904, - "key": "minecraft:netherite_hoe", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkAAAAAAAAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bmV0aGVyaXRlX2hvZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9ob2UA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Au8P", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", - "minecraft:tool": "GQIAJm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX25ldGhlcml0ZV90b29sAAEAABZtaW5lY3JhZnQ6bWluZWFibGUvaG9lAUEQAAABAT+AAAABAQ==", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgIAAAAA" - } - }, - { - "id": 905, - "key": "minecraft:stick", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6c3RpY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LnN0aWNrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 906, - "key": "minecraft:mushroom_stew", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAZA5mZnAA==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bXVzaHJvb21fc3Rldw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm11c2hyb29tX3N0ZXcA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_remainder": "FgHYBgAA" - } - }, - { - "id": 907, - "key": "minecraft:string", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6c3RyaW5n", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnN0cmluZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 908, - "key": "minecraft:feather", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZmVhdGhlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmZlYXRoZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 909, - "key": "minecraft:gunpowder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z3VucG93ZGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0Lmd1bnBvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 910, - "key": "minecraft:wheat_seeds", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2hlYXRfc2VlZHM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LndoZWF0X3NlZWRzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 911, - "key": "minecraft:wheat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6d2hlYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LndoZWF0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 912, - "key": "minecraft:bread", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAVAwAAAAA==", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6YnJlYWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmJyZWFkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 913, - "key": "minecraft:leather_helmet", - "components": { - "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXQ/8AAAAAAAAAAHAAEWbWluZWNyYWZ0OmFybW9yLmhlbG1ldAAAAAAAAAAAAAcA", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARKARFtaW5lY3JhZnQ6bGVhdGhlcgAAAQEBAACSCg==", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGVhdGhlcl9oZWxtZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfaGVsbWV0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Ajc=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfbGVhdGhlcl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 914, - "key": "minecraft:leather_chestplate", - "components": { - "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQAgAAAAAAAAABgABGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlAAAAAAAAAAAABgA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HANKARFtaW5lY3JhZnQ6bGVhdGhlcgAAAQEBAACSCg==", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGVhdGhlcl9jaGVzdHBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfY2hlc3RwbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AlA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfbGVhdGhlcl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 915, - "key": "minecraft:leather_leggings", - "components": { - "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AAAAAAAAAAAAUAARhtaW5lY3JhZnQ6YXJtb3IubGVnZ2luZ3MAAAAAAAAAAAAFAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAJKARFtaW5lY3JhZnQ6bGVhdGhlcgAAAQEBAACSCg==", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bGVhdGhlcl9sZWdnaW5ncw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfbGVnZ2luZ3MA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Aks=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfbGVhdGhlcl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 916, - "key": "minecraft:leather_boots", - "components": { - "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290cz/wAAAAAAAAAAQAARVtaW5lY3JhZnQ6YXJtb3IuYm9vdHMAAAAAAAAAAAAEAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAFKARFtaW5lY3JhZnQ6bGVhdGhlcgAAAQEBAACSCg==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bGVhdGhlcl9ib290cw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfYm9vdHMA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AkE=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfbGVhdGhlcl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 917, - "key": "minecraft:chainmail_helmet", - "components": { - "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRAAAAAAAAAAAAHAAEWbWluZWNyYWZ0OmFybW9yLmhlbG1ldAAAAAAAAAAAAAcA", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gww=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAREARNtaW5lY3JhZnQ6Y2hhaW5tYWlsAAABAQEAAJIK", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Y2hhaW5tYWlsX2hlbG1ldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmNoYWlubWFpbF9oZWxtZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AqUB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OnJlcGFpcnNfY2hhaW5fYXJtb3I=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 918, - "key": "minecraft:chainmail_chestplate", - "components": { - "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQBQAAAAAAAAABgABGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlAAAAAAAAAAAABgA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gww=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HANEARNtaW5lY3JhZnQ6Y2hhaW5tYWlsAAABAQEAAJIK", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y2hhaW5tYWlsX2NoZXN0cGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmNoYWlubWFpbF9jaGVzdHBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvAB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OnJlcGFpcnNfY2hhaW5fYXJtb3I=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 919, - "key": "minecraft:chainmail_leggings", - "components": { - "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AQAAAAAAAAAAUAARhtaW5lY3JhZnQ6YXJtb3IubGVnZ2luZ3MAAAAAAAAAAAAFAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gww=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAJEARNtaW5lY3JhZnQ6Y2hhaW5tYWlsAAABAQEAAJIK", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y2hhaW5tYWlsX2xlZ2dpbmdz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmNoYWlubWFpbF9sZWdnaW5ncwA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AuEB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OnJlcGFpcnNfY2hhaW5fYXJtb3I=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 920, - "key": "minecraft:chainmail_boots", - "components": { - "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290cz/wAAAAAAAAAAQAARVtaW5lY3JhZnQ6YXJtb3IuYm9vdHMAAAAAAAAAAAAEAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gww=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAFEARNtaW5lY3JhZnQ6Y2hhaW5tYWlsAAABAQEAAJIK", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y2hhaW5tYWlsX2Jvb3Rz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmNoYWlubWFpbF9ib290cwA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AsMB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAdbWluZWNyYWZ0OnJlcGFpcnNfY2hhaW5fYXJtb3I=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 921, - "key": "minecraft:iron_helmet", - "components": { - "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRAAAAAAAAAAAAHAAEWbWluZWNyYWZ0OmFybW9yLmhlbG1ldAAAAAAAAAAAAAcA", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARJAQ5taW5lY3JhZnQ6aXJvbgAAAQEBAACSCg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6aXJvbl9oZWxtZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lmlyb25faGVsbWV0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AqUB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfaXJvbl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 922, - "key": "minecraft:iron_chestplate", - "components": { - "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQBgAAAAAAAAABgABGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlAAAAAAAAAAAABgA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HANJAQ5taW5lY3JhZnQ6aXJvbgAAAQEBAACSCg==", - "minecraft:item_model": "BxltaW5lY3JhZnQ6aXJvbl9jaGVzdHBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lmlyb25fY2hlc3RwbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvAB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfaXJvbl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 923, - "key": "minecraft:iron_leggings", - "components": { - "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AUAAAAAAAAAAUAARhtaW5lY3JhZnQ6YXJtb3IubGVnZ2luZ3MAAAAAAAAAAAAFAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAJJAQ5taW5lY3JhZnQ6aXJvbgAAAQEBAACSCg==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6aXJvbl9sZWdnaW5ncw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lmlyb25fbGVnZ2luZ3MA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AuEB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfaXJvbl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 924, - "key": "minecraft:iron_boots", - "components": { - "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290c0AAAAAAAAAAAAQAARVtaW5lY3JhZnQ6YXJtb3IuYm9vdHMAAAAAAAAAAAAEAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAFJAQ5taW5lY3JhZnQ6aXJvbgAAAQEBAACSCg==", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXJvbl9ib290cw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lmlyb25fYm9vdHMA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AsMB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfaXJvbl9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 925, - "key": "minecraft:diamond_helmet", - "components": { - "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRACAAAAAAAAAAHAAEWbWluZWNyYWZ0OmFybW9yLmhlbG1ldEAAAAAAAAAAAAcA", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARFARFtaW5lY3JhZnQ6ZGlhbW9uZAAAAQEBAACSCg==", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZGlhbW9uZF9oZWxtZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfaGVsbWV0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AusC", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfZGlhbW9uZF9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 926, - "key": "minecraft:diamond_chestplate", - "components": { - "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQCAAAAAAAAAABgABGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQAAAAAAAAAAABgA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HANFARFtaW5lY3JhZnQ6ZGlhbW9uZAAAAQEBAACSCg==", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZGlhbW9uZF9jaGVzdHBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfY2hlc3RwbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ApAE", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfZGlhbW9uZF9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 927, - "key": "minecraft:diamond_leggings", - "components": { - "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AYAAAAAAAAAAUAARhtaW5lY3JhZnQ6YXJtb3IubGVnZ2luZ3NAAAAAAAAAAAAFAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAJFARFtaW5lY3JhZnQ6ZGlhbW9uZAAAAQEBAACSCg==", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZGlhbW9uZF9sZWdnaW5ncw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfbGVnZ2luZ3MA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Au8D", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfZGlhbW9uZF9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 928, - "key": "minecraft:diamond_boots", - "components": { - "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290c0AIAAAAAAAAAAQAARVtaW5lY3JhZnQ6YXJtb3IuYm9vdHNAAAAAAAAAAAAEAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gwo=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAFFARFtaW5lY3JhZnQ6ZGlhbW9uZAAAAQEBAACSCg==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGlhbW9uZF9ib290cw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfYm9vdHMA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Aq0D", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfZGlhbW9uZF9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 929, - "key": "minecraft:golden_helmet", - "components": { - "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRAAAAAAAAAAAAHAAEWbWluZWNyYWZ0OmFybW9yLmhlbG1ldAAAAAAAAAAAAAcA", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gxk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARIAQ5taW5lY3JhZnQ6Z29sZAAAAQEBAACSCg==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z29sZGVuX2hlbG1ldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9oZWxtZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Ak0=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfZ29sZF9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 930, - "key": "minecraft:golden_chestplate", - "components": { - "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQBQAAAAAAAAABgABGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlAAAAAAAAAAAABgA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gxk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HANIAQ5taW5lY3JhZnQ6Z29sZAAAAQEBAACSCg==", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Z29sZGVuX2NoZXN0cGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9jaGVzdHBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AnA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfZ29sZF9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 931, - "key": "minecraft:golden_leggings", - "components": { - "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AIAAAAAAAAAAUAARhtaW5lY3JhZnQ6YXJtb3IubGVnZ2luZ3MAAAAAAAAAAAAFAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gxk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAJIAQ5taW5lY3JhZnQ6Z29sZAAAAQEBAACSCg==", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Z29sZGVuX2xlZ2dpbmdz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmdvbGRlbl9sZWdnaW5ncwA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Amk=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfZ29sZF9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 932, - "key": "minecraft:golden_boots", - "components": { - "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290cz/wAAAAAAAAAAQAARVtaW5lY3JhZnQ6YXJtb3IuYm9vdHMAAAAAAAAAAAAEAA==", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gxk=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAFIAQ5taW5lY3JhZnQ6Z29sZAAAAQEBAACSCg==", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z29sZGVuX2Jvb3Rz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdvbGRlbl9ib290cwA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Als=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfZ29sZF9hcm1vcg==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 933, - "key": "minecraft:netherite_helmet", - "components": { - "minecraft:attribute_modifiers": "DQMAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRACAAAAAAAAAAHAAEWbWluZWNyYWZ0OmFybW9yLmhlbG1ldEAIAAAAAAAAAAcAEBZtaW5lY3JhZnQ6YXJtb3IuaGVsbWV0P7mZmaAAAAAABwA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARLARNtaW5lY3JhZnQ6bmV0aGVyaXRlAAABAQEAAJIK", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bmV0aGVyaXRlX2hlbG1ldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9oZWxtZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "ApcD", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAhbWluZWNyYWZ0OnJlcGFpcnNfbmV0aGVyaXRlX2FybW9y", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 934, - "key": "minecraft:netherite_chestplate", - "components": { - "minecraft:attribute_modifiers": "DQMAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQCAAAAAAAAAABgABGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQAgAAAAAAAAABgAQGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlP7mZmaAAAAAABgA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HANLARNtaW5lY3JhZnQ6bmV0aGVyaXRlAAABAQEAAJIK", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6bmV0aGVyaXRlX2NoZXN0cGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9jaGVzdHBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AtAE", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAhbWluZWNyYWZ0OnJlcGFpcnNfbmV0aGVyaXRlX2FybW9y", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 935, - "key": "minecraft:netherite_leggings", - "components": { - "minecraft:attribute_modifiers": "DQMAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AYAAAAAAAAAAUAARhtaW5lY3JhZnQ6YXJtb3IubGVnZ2luZ3NACAAAAAAAAAAFABAYbWluZWNyYWZ0OmFybW9yLmxlZ2dpbmdzP7mZmaAAAAAABQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAJLARNtaW5lY3JhZnQ6bmV0aGVyaXRlAAABAQEAAJIK", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bmV0aGVyaXRlX2xlZ2dpbmdz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9sZWdnaW5ncwA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AqsE", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAhbWluZWNyYWZ0OnJlcGFpcnNfbmV0aGVyaXRlX2FybW9y", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 936, - "key": "minecraft:netherite_boots", - "components": { - "minecraft:attribute_modifiers": "DQMAFW1pbmVjcmFmdDphcm1vci5ib290c0AIAAAAAAAAAAQAARVtaW5lY3JhZnQ6YXJtb3IuYm9vdHNACAAAAAAAAAAEABAVbWluZWNyYWZ0OmFybW9yLmJvb3RzP7mZmaAAAAAABAA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:damage_resistant": "GBFtaW5lY3JhZnQ6aXNfZmlyZQ==", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAFLARNtaW5lY3JhZnQ6bmV0aGVyaXRlAAABAQEAAJIK", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX2Jvb3Rz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9ib290cwA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AuED", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAhbWluZWNyYWZ0OnJlcGFpcnNfbmV0aGVyaXRlX2FybW9y", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 937, - "key": "minecraft:flint", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6ZmxpbnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmZsaW50AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 938, - "key": "minecraft:porkchop", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAM/5mZnAA==", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cG9ya2Nob3A=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnBvcmtjaG9wAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 939, - "key": "minecraft:cooked_porkchop", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAhBTMzNAA==", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y29va2VkX3BvcmtjaG9w", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmNvb2tlZF9wb3JrY2hvcAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 940, - "key": "minecraft:painting", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cGFpbnRpbmc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnBhaW50aW5nAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 941, - "key": "minecraft:golden_apple", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAQACCQFkAAEBABUA4BIAAQEAP4AAAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FARBGZmaAQ==", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z29sZGVuX2FwcGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdvbGRlbl9hcHBsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 942, - "key": "minecraft:enchanted_golden_apple", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAQAECQGQAwABAQAKAPAuAAEBAAsA8C4AAQEAFQPgEgABAQA/gAAA", - "minecraft:enchantment_glint_override": "EgE=", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FARBGZmaAQ==", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZW5jaGFudGVkX2dvbGRlbl9hcHBsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmVuY2hhbnRlZF9nb2xkZW5fYXBwbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 943, - "key": "minecraft:oak_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX3NpZ24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYWtfc2lnbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 944, - "key": "minecraft:spruce_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX3NpZ24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfc2lnbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 945, - "key": "minecraft:birch_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5iaXJjaF9zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 946, - "key": "minecraft:jungle_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX3NpZ24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfc2lnbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 947, - "key": "minecraft:acacia_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX3NpZ24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfc2lnbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 948, - "key": "minecraft:cherry_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X3NpZ24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfc2lnbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 949, - "key": "minecraft:dark_oak_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 950, - "key": "minecraft:pale_oak_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 951, - "key": "minecraft:mangrove_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 952, - "key": "minecraft:bamboo_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmFtYm9vX3NpZ24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29fc2lnbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 953, - "key": "minecraft:crimson_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JpbXNvbl9zaWdu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3NpZ24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 954, - "key": "minecraft:warped_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2FycGVkX3NpZ24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfc2lnbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 955, - "key": "minecraft:oak_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6b2FrX2hhbmdpbmdfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5vYWtfaGFuZ2luZ19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 956, - "key": "minecraft:spruce_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3BydWNlX2hhbmdpbmdfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfaGFuZ2luZ19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 957, - "key": "minecraft:birch_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6YmlyY2hfaGFuZ2luZ19zaWdu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5iaXJjaF9oYW5naW5nX3NpZ24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 958, - "key": "minecraft:jungle_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6anVuZ2xlX2hhbmdpbmdfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfaGFuZ2luZ19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 959, - "key": "minecraft:acacia_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6YWNhY2lhX2hhbmdpbmdfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfaGFuZ2luZ19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 960, - "key": "minecraft:cherry_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6Y2hlcnJ5X2hhbmdpbmdfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfaGFuZ2luZ19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 961, - "key": "minecraft:dark_oak_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGFya19vYWtfaGFuZ2luZ19zaWdu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19oYW5naW5nX3NpZ24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 962, - "key": "minecraft:pale_oak_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cGFsZV9vYWtfaGFuZ2luZ19zaWdu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19oYW5naW5nX3NpZ24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 963, - "key": "minecraft:mangrove_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6bWFuZ3JvdmVfaGFuZ2luZ19zaWdu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9oYW5naW5nX3NpZ24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 964, - "key": "minecraft:bamboo_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6YmFtYm9vX2hhbmdpbmdfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29faGFuZ2luZ19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 965, - "key": "minecraft:crimson_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y3JpbXNvbl9oYW5naW5nX3NpZ24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2hhbmdpbmdfc2lnbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 966, - "key": "minecraft:warped_hanging_sign", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6d2FycGVkX2hhbmdpbmdfc2lnbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfaGFuZ2luZ19zaWduAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 967, - "key": "minecraft:bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YnVja2V0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmJ1Y2tldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 968, - "key": "minecraft:water_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2F0ZXJfYnVja2V0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LndhdGVyX2J1Y2tldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 969, - "key": "minecraft:lava_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGF2YV9idWNrZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmxhdmFfYnVja2V0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 970, - "key": "minecraft:powder_snow_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cG93ZGVyX3Nub3dfYnVja2V0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LnBvd2Rlcl9zbm93X2J1Y2tldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 971, - "key": "minecraft:snowball", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6c25vd2JhbGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnNub3diYWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 972, - "key": "minecraft:leather", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6bGVhdGhlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmxlYXRoZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 973, - "key": "minecraft:milk_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0C5gQAAQI=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWlsa19idWNrZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1pbGtfYnVja2V0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_remainder": "FgHHBwAA" - } - }, - { - "id": 974, - "key": "minecraft:pufferfish_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bucket_entity_data": "MgoA", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cHVmZmVyZmlzaF9idWNrZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnB1ZmZlcmZpc2hfYnVja2V0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 975, - "key": "minecraft:salmon_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bucket_entity_data": "MgoA", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c2FsbW9uX2J1Y2tldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnNhbG1vbl9idWNrZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 976, - "key": "minecraft:cod_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bucket_entity_data": "MgoA", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29kX2J1Y2tldA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmNvZF9idWNrZXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 977, - "key": "minecraft:tropical_fish_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bucket_entity_data": "MgoA", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6dHJvcGljYWxfZmlzaF9idWNrZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnRyb3BpY2FsX2Zpc2hfYnVja2V0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 978, - "key": "minecraft:axolotl_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bucket_entity_data": "MgoA", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YXhvbG90bF9idWNrZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmF4b2xvdGxfYnVja2V0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 979, - "key": "minecraft:tadpole_bucket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bucket_entity_data": "MgoA", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6dGFkcG9sZV9idWNrZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LnRhZHBvbGVfYnVja2V0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 980, - "key": "minecraft:brick", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6YnJpY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmJyaWNrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 981, - "key": "minecraft:clay_ball", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Y2xheV9iYWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmNsYXlfYmFsbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 982, - "key": "minecraft:dried_kelp_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZHJpZWRfa2VscF9ibG9jaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5kcmllZF9rZWxwX2Jsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 983, - "key": "minecraft:paper", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6cGFwZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LnBhcGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 984, - "key": "minecraft:book", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantable": "GwE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6Ym9vaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmJvb2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 985, - "key": "minecraft:slime_ball", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c2xpbWVfYmFsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnNsaW1lX2JhbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 986, - "key": "minecraft:egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:chicken/variant": "VgATbWluZWNyYWZ0OnRlbXBlcmF0ZQ==", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw1taW5lY3JhZnQ6ZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAEml0ZW0ubWluZWNyYWZ0LmVnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 987, - "key": "minecraft:blue_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:chicken/variant": "VgAObWluZWNyYWZ0OmNvbGQ=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Ymx1ZV9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmJsdWVfZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 988, - "key": "minecraft:brown_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:chicken/variant": "VgAObWluZWNyYWZ0Ondhcm0=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6YnJvd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJyb3duX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 989, - "key": "minecraft:compass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y29tcGFzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmNvbXBhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 990, - "key": "minecraft:recovery_compass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cmVjb3ZlcnlfY29tcGFzcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnJlY292ZXJ5X2NvbXBhc3MA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 991, - "key": "minecraft:bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YnVuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmJ1bmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 992, - "key": "minecraft:white_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2hpdGVfYnVuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LndoaXRlX2J1bmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 993, - "key": "minecraft:orange_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6b3JhbmdlX2J1bmRsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm9yYW5nZV9idW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 994, - "key": "minecraft:magenta_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFnZW50YV9idW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm1hZ2VudGFfYnVuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 995, - "key": "minecraft:light_blue_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfYmx1ZV9idW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2JsdWVfYnVuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 996, - "key": "minecraft:yellow_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6eWVsbG93X2J1bmRsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnllbGxvd19idW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 997, - "key": "minecraft:lime_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGltZV9idW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmxpbWVfYnVuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 998, - "key": "minecraft:pink_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19idW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnBpbmtfYnVuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 999, - "key": "minecraft:gray_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3JheV9idW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmdyYXlfYnVuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1000, - "key": "minecraft:light_gray_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfZ3JheV9idW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2dyYXlfYnVuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1001, - "key": "minecraft:cyan_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y3lhbl9idW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmN5YW5fYnVuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1002, - "key": "minecraft:purple_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycGxlX2J1bmRsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnB1cnBsZV9idW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1003, - "key": "minecraft:blue_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9idW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmJsdWVfYnVuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1004, - "key": "minecraft:brown_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJvd25fYnVuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJyb3duX2J1bmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1005, - "key": "minecraft:green_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JlZW5fYnVuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdyZWVuX2J1bmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1006, - "key": "minecraft:red_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmVkX2J1bmRsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnJlZF9idW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1007, - "key": "minecraft:black_bundle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:bundle_contents": "KQA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhY2tfYnVuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJsYWNrX2J1bmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1008, - "key": "minecraft:fishing_rod", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZmlzaGluZ19yb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmZpc2hpbmdfcm9kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AkA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1009, - "key": "minecraft:clock", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6Y2xvY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmNsb2NrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1010, - "key": "minecraft:spyglass", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6c3B5Z2xhc3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnNweWdsYXNzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1011, - "key": "minecraft:glowstone_dust", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z2xvd3N0b25lX2R1c3Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lmdsb3dzdG9uZV9kdXN0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1012, - "key": "minecraft:cod", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI+zMzNAA==", - "minecraft:item_model": "Bw1taW5lY3JhZnQ6Y29k", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAEml0ZW0ubWluZWNyYWZ0LmNvZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1013, - "key": "minecraft:salmon", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI+zMzNAA==", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6c2FsbW9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnNhbG1vbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1014, - "key": "minecraft:tropical_fish", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAE+TMzNAA==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHJvcGljYWxfZmlzaA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnRyb3BpY2FsX2Zpc2gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1015, - "key": "minecraft:pufferfish", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAQADEgGwCQABAQAQAqwCAAEBAAgArAIAAQEAP4AAAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAE+TMzNAA==", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cHVmZmVyZmlzaA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnB1ZmZlcmZpc2gA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1016, - "key": "minecraft:cooked_cod", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAVAwAAAAA==", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29va2VkX2NvZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9jb2QA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1017, - "key": "minecraft:cooked_salmon", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAZBGZmaAA==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29va2VkX3NhbG1vbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9zYWxtb24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1018, - "key": "minecraft:ink_sac", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6aW5rX3NhYw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0Lmlua19zYWMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1019, - "key": "minecraft:glow_ink_sac", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z2xvd19pbmtfc2Fj", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lmdsb3dfaW5rX3NhYwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1020, - "key": "minecraft:cocoa_beans", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29jb2FfYmVhbnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmNvY29hX2JlYW5zAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1021, - "key": "minecraft:white_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6d2hpdGVfZHll", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LndoaXRlX2R5ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1022, - "key": "minecraft:orange_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6b3JhbmdlX2R5ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lm9yYW5nZV9keWUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1023, - "key": "minecraft:magenta_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWFnZW50YV9keWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1hZ2VudGFfZHllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1024, - "key": "minecraft:light_blue_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9keWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2JsdWVfZHllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1025, - "key": "minecraft:yellow_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6eWVsbG93X2R5ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnllbGxvd19keWUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1026, - "key": "minecraft:lime_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6bGltZV9keWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmxpbWVfZHllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1027, - "key": "minecraft:pink_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cGlua19keWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnBpbmtfZHllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1028, - "key": "minecraft:gray_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Z3JheV9keWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmdyYXlfZHllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1029, - "key": "minecraft:light_gray_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGlnaHRfZ3JheV9keWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2dyYXlfZHllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1030, - "key": "minecraft:cyan_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y3lhbl9keWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmN5YW5fZHllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1031, - "key": "minecraft:purple_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cHVycGxlX2R5ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnB1cnBsZV9keWUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1032, - "key": "minecraft:blue_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Ymx1ZV9keWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmJsdWVfZHllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1033, - "key": "minecraft:brown_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6YnJvd25fZHll", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJyb3duX2R5ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1034, - "key": "minecraft:green_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z3JlZW5fZHll", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmdyZWVuX2R5ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1035, - "key": "minecraft:red_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6cmVkX2R5ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LnJlZF9keWUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1036, - "key": "minecraft:black_dye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6YmxhY2tfZHll", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJsYWNrX2R5ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1037, - "key": "minecraft:bone_meal", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Ym9uZV9tZWFs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJvbmVfbWVhbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1038, - "key": "minecraft:bone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6Ym9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmJvbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1039, - "key": "minecraft:sugar", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6c3VnYXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LnN1Z2FyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1040, - "key": "minecraft:cake", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6Y2FrZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5jYWtlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1041, - "key": "minecraft:white_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6d2hpdGVfYmVk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC53aGl0ZV9iZWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1042, - "key": "minecraft:orange_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6b3JhbmdlX2JlZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfYmVkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1043, - "key": "minecraft:magenta_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWFnZW50YV9iZWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2JlZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1044, - "key": "minecraft:light_blue_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9iZWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2JlZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1045, - "key": "minecraft:yellow_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6eWVsbG93X2JlZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfYmVkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1046, - "key": "minecraft:lime_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6bGltZV9iZWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5saW1lX2JlZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1047, - "key": "minecraft:pink_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6cGlua19iZWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5waW5rX2JlZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1048, - "key": "minecraft:gray_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Z3JheV9iZWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5ncmF5X2JlZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1049, - "key": "minecraft:light_gray_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGlnaHRfZ3JheV9iZWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2JlZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1050, - "key": "minecraft:cyan_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y3lhbl9iZWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5jeWFuX2JlZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1051, - "key": "minecraft:purple_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cHVycGxlX2JlZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfYmVkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1052, - "key": "minecraft:blue_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Ymx1ZV9iZWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5ibHVlX2JlZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1053, - "key": "minecraft:brown_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6YnJvd25fYmVk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5icm93bl9iZWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1054, - "key": "minecraft:green_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z3JlZW5fYmVk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ncmVlbl9iZWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1055, - "key": "minecraft:red_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6cmVkX2JlZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5yZWRfYmVkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1056, - "key": "minecraft:black_bed", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6YmxhY2tfYmVk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ibGFja19iZWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1057, - "key": "minecraft:cookie", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI+zMzNAA==", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y29va2ll", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmNvb2tpZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1058, - "key": "minecraft:crafter", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y3JhZnRlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5jcmFmdGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1059, - "key": "minecraft:filled_map", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZmlsbGVkX21hcA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmZpbGxlZF9tYXAA", - "minecraft:lore": "CAA=", - "minecraft:map_color": "JABGQC4=", - "minecraft:map_decorations": "JgoA", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1060, - "key": "minecraft:shears", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6c2hlYXJz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnNoZWFycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "Au4B", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tool": "GQQCgQEBQXAAAAEBABBtaW5lY3JhZnQ6bGVhdmVzAUFwAAAAAA5taW5lY3JhZnQ6d29vbAFAoAAAAAPPAtACAUAAAAAAP4AAAAEB", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1061, - "key": "minecraft:melon_slice", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI/mZmaAA==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWVsb25fc2xpY2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1lbG9uX3NsaWNlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1062, - "key": "minecraft:dried_kelp", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT9MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAE/GZmaAA==", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZHJpZWRfa2VscA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmRyaWVkX2tlbHAA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1063, - "key": "minecraft:pumpkin_seeds", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVtcGtpbl9zZWVkcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnB1bXBraW5fc2VlZHMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1064, - "key": "minecraft:melon_seeds", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWVsb25fc2VlZHM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1lbG9uX3NlZWRzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1065, - "key": "minecraft:beef", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAM/5mZnAA==", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6YmVlZg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmJlZWYA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1066, - "key": "minecraft:cooked_beef", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAhBTMzNAA==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29va2VkX2JlZWY=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmNvb2tlZF9iZWVmAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1067, - "key": "minecraft:chicken", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAQABEADYBAABAQA+mZma", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI/mZmaAA==", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y2hpY2tlbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmNoaWNrZW4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1068, - "key": "minecraft:cooked_chicken", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAZA5mZnAA==", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y29va2VkX2NoaWNrZW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9jaGlja2VuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1069, - "key": "minecraft:rotten_flesh", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAQABEADYBAABAQA/TMzN", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAQ/TMzNAA==", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6cm90dGVuX2ZsZXNo", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnJvdHRlbl9mbGVzaAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1070, - "key": "minecraft:ender_pearl", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZW5kZXJfcGVhcmw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmVuZGVyX3BlYXJsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_cooldown": "Fz+AAAAA" - } - }, - { - "id": 1071, - "key": "minecraft:blaze_rod", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6YmxhemVfcm9k", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJsYXplX3JvZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1072, - "key": "minecraft:ghast_tear", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z2hhc3RfdGVhcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmdoYXN0X3RlYXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1073, - "key": "minecraft:gold_nugget", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z29sZF9udWdnZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmdvbGRfbnVnZ2V0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1074, - "key": "minecraft:nether_wart", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bmV0aGVyX3dhcnQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm5ldGhlcl93YXJ0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1075, - "key": "minecraft:glass_bottle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z2xhc3NfYm90dGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdsYXNzX2JvdHRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1076, - "key": "minecraft:potion", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0C5gQAAA==", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6cG90aW9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnBvdGlvbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:potion_contents": "KgAAAAA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_remainder": "FgGzCAAA" - } - }, - { - "id": 1077, - "key": "minecraft:spider_eye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAQABEgBkAAEBAD+AAAA=", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAJATMzNAA==", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6c3BpZGVyX2V5ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnNwaWRlcl9leWUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1078, - "key": "minecraft:fermented_spider_eye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZmVybWVudGVkX3NwaWRlcl9leWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmZlcm1lbnRlZF9zcGlkZXJfZXllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1079, - "key": "minecraft:blaze_powder", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhemVfcG93ZGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJsYXplX3Bvd2RlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1080, - "key": "minecraft:magma_cream", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWFnbWFfY3JlYW0=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1hZ21hX2NyZWFtAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1081, - "key": "minecraft:brewing_stand", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YnJld2luZ19zdGFuZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5icmV3aW5nX3N0YW5kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1082, - "key": "minecraft:cauldron", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y2F1bGRyb24=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5jYXVsZHJvbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1083, - "key": "minecraft:ender_eye", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZW5kZXJfZXll", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmVuZGVyX2V5ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1084, - "key": "minecraft:glistering_melon_slice", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Z2xpc3RlcmluZ19tZWxvbl9zbGljZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmdsaXN0ZXJpbmdfbWVsb25fc2xpY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1085, - "key": "minecraft:armadillo_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6YXJtYWRpbGxvX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmFybWFkaWxsb19zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1086, - "key": "minecraft:allay_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YWxsYXlfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmFsbGF5X3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1087, - "key": "minecraft:axolotl_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YXhvbG90bF9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmF4b2xvdGxfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1088, - "key": "minecraft:bat_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmF0X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmJhdF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1089, - "key": "minecraft:bee_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmVlX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmJlZV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1090, - "key": "minecraft:blaze_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YmxhemVfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmJsYXplX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1091, - "key": "minecraft:bogged_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6Ym9nZ2VkX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmJvZ2dlZF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1092, - "key": "minecraft:breeze_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6YnJlZXplX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmJyZWV6ZV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1093, - "key": "minecraft:cat_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2F0X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNhdF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1094, - "key": "minecraft:camel_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y2FtZWxfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmNhbWVsX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1095, - "key": "minecraft:cave_spider_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2F2ZV9zcGlkZXJfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LmNhdmVfc3BpZGVyX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1096, - "key": "minecraft:chicken_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2hpY2tlbl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmNoaWNrZW5fc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1097, - "key": "minecraft:cod_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29kX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvZF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1098, - "key": "minecraft:cow_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y293X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvd19zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1099, - "key": "minecraft:creeper_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y3JlZXBlcl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmNyZWVwZXJfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1100, - "key": "minecraft:dolphin_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6ZG9scGhpbl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmRvbHBoaW5fc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1101, - "key": "minecraft:donkey_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZG9ua2V5X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmRvbmtleV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1102, - "key": "minecraft:drowned_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6ZHJvd25lZF9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmRyb3duZWRfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1103, - "key": "minecraft:elder_guardian_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6ZWxkZXJfZ3VhcmRpYW5fc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2l0ZW0ubWluZWNyYWZ0LmVsZGVyX2d1YXJkaWFuX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1104, - "key": "minecraft:ender_dragon_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZW5kZXJfZHJhZ29uX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmVuZGVyX2RyYWdvbl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1105, - "key": "minecraft:enderman_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZW5kZXJtYW5fc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmVuZGVybWFuX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1106, - "key": "minecraft:endermite_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZW5kZXJtaXRlX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmVuZGVybWl0ZV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1107, - "key": "minecraft:evoker_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6ZXZva2VyX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmV2b2tlcl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1108, - "key": "minecraft:fox_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Zm94X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmZveF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1109, - "key": "minecraft:frog_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZnJvZ19zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmZyb2dfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1110, - "key": "minecraft:ghast_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Z2hhc3Rfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmdoYXN0X3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1111, - "key": "minecraft:happy_ghast_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6aGFwcHlfZ2hhc3Rfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LmhhcHB5X2doYXN0X3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1112, - "key": "minecraft:glow_squid_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Z2xvd19zcXVpZF9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lmdsb3dfc3F1aWRfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1113, - "key": "minecraft:goat_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z29hdF9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmdvYXRfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1114, - "key": "minecraft:guardian_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Z3VhcmRpYW5fc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lmd1YXJkaWFuX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1115, - "key": "minecraft:hoglin_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6aG9nbGluX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmhvZ2xpbl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1116, - "key": "minecraft:horse_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6aG9yc2Vfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmhvcnNlX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1117, - "key": "minecraft:husk_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6aHVza19zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lmh1c2tfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1118, - "key": "minecraft:iron_golem_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6aXJvbl9nb2xlbV9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lmlyb25fZ29sZW1fc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1119, - "key": "minecraft:llama_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bGxhbWFfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmxsYW1hX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1120, - "key": "minecraft:magma_cube_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6bWFnbWFfY3ViZV9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lm1hZ21hX2N1YmVfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1121, - "key": "minecraft:mooshroom_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bW9vc2hyb29tX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0Lm1vb3Nocm9vbV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1122, - "key": "minecraft:mule_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVsZV9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm11bGVfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1123, - "key": "minecraft:ocelot_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6b2NlbG90X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm9jZWxvdF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1124, - "key": "minecraft:panda_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFuZGFfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnBhbmRhX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1125, - "key": "minecraft:parrot_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cGFycm90X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnBhcnJvdF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1126, - "key": "minecraft:phantom_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cGhhbnRvbV9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnBoYW50b21fc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1127, - "key": "minecraft:pig_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGlnX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnBpZ19zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1128, - "key": "minecraft:piglin_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cGlnbGluX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnBpZ2xpbl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1129, - "key": "minecraft:piglin_brute_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6cGlnbGluX2JydXRlX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LnBpZ2xpbl9icnV0ZV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1130, - "key": "minecraft:pillager_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6cGlsbGFnZXJfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LnBpbGxhZ2VyX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1131, - "key": "minecraft:polar_bear_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6cG9sYXJfYmVhcl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnBvbGFyX2JlYXJfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1132, - "key": "minecraft:pufferfish_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6cHVmZmVyZmlzaF9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnB1ZmZlcmZpc2hfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1133, - "key": "minecraft:rabbit_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cmFiYml0X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnJhYmJpdF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1134, - "key": "minecraft:ravager_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cmF2YWdlcl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnJhdmFnZXJfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1135, - "key": "minecraft:salmon_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6c2FsbW9uX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnNhbG1vbl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1136, - "key": "minecraft:sheep_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c2hlZXBfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnNoZWVwX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1137, - "key": "minecraft:shulker_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6c2h1bGtlcl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnNodWxrZXJfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1138, - "key": "minecraft:silverfish_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c2lsdmVyZmlzaF9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnNpbHZlcmZpc2hfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1139, - "key": "minecraft:skeleton_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6c2tlbGV0b25fc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LnNrZWxldG9uX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1140, - "key": "minecraft:skeleton_horse_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6c2tlbGV0b25faG9yc2Vfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2l0ZW0ubWluZWNyYWZ0LnNrZWxldG9uX2hvcnNlX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1141, - "key": "minecraft:slime_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c2xpbWVfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnNsaW1lX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1142, - "key": "minecraft:sniffer_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6c25pZmZlcl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnNuaWZmZXJfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1143, - "key": "minecraft:snow_golem_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c25vd19nb2xlbV9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnNub3dfZ29sZW1fc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1144, - "key": "minecraft:spider_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6c3BpZGVyX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnNwaWRlcl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1145, - "key": "minecraft:squid_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c3F1aWRfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnNxdWlkX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1146, - "key": "minecraft:stray_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c3RyYXlfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnN0cmF5X3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1147, - "key": "minecraft:strider_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6c3RyaWRlcl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnN0cmlkZXJfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1148, - "key": "minecraft:tadpole_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6dGFkcG9sZV9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnRhZHBvbGVfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1149, - "key": "minecraft:trader_llama_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6dHJhZGVyX2xsYW1hX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LnRyYWRlcl9sbGFtYV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1150, - "key": "minecraft:tropical_fish_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6dHJvcGljYWxfZmlzaF9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJml0ZW0ubWluZWNyYWZ0LnRyb3BpY2FsX2Zpc2hfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1151, - "key": "minecraft:turtle_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6dHVydGxlX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnR1cnRsZV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1152, - "key": "minecraft:vex_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6dmV4X3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnZleF9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1153, - "key": "minecraft:villager_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6dmlsbGFnZXJfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LnZpbGxhZ2VyX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1154, - "key": "minecraft:vindicator_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6dmluZGljYXRvcl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnZpbmRpY2F0b3Jfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1155, - "key": "minecraft:wandering_trader_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2FuZGVyaW5nX3RyYWRlcl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWl0ZW0ubWluZWNyYWZ0LndhbmRlcmluZ190cmFkZXJfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1156, - "key": "minecraft:warden_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6d2FyZGVuX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LndhcmRlbl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1157, - "key": "minecraft:witch_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6d2l0Y2hfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LndpdGNoX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1158, - "key": "minecraft:wither_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6d2l0aGVyX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LndpdGhlcl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1159, - "key": "minecraft:wither_skeleton_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2l0aGVyX3NrZWxldG9uX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGl0ZW0ubWluZWNyYWZ0LndpdGhlcl9za2VsZXRvbl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1160, - "key": "minecraft:wolf_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6d29sZl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LndvbGZfc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1161, - "key": "minecraft:zoglin_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6em9nbGluX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnpvZ2xpbl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1162, - "key": "minecraft:creaking_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y3JlYWtpbmdfc3Bhd25fZWdn", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmNyZWFraW5nX3NwYXduX2VnZwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1163, - "key": "minecraft:zombie_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6em9tYmllX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnpvbWJpZV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1164, - "key": "minecraft:zombie_horse_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6em9tYmllX2hvcnNlX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LnpvbWJpZV9ob3JzZV9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1165, - "key": "minecraft:zombie_villager_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6em9tYmllX3ZpbGxhZ2VyX3NwYXduX2VnZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGl0ZW0ubWluZWNyYWZ0LnpvbWJpZV92aWxsYWdlcl9zcGF3bl9lZ2cA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1166, - "key": "minecraft:zombified_piglin_spawn_egg", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6em9tYmlmaWVkX3BpZ2xpbl9zcGF3bl9lZ2c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWl0ZW0ubWluZWNyYWZ0LnpvbWJpZmllZF9waWdsaW5fc3Bhd25fZWdnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1167, - "key": "minecraft:experience_bottle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantment_glint_override": "EgE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6ZXhwZXJpZW5jZV9ib3R0bGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmV4cGVyaWVuY2VfYm90dGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1168, - "key": "minecraft:fire_charge", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZmlyZV9jaGFyZ2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmZpcmVfY2hhcmdlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1169, - "key": "minecraft:wind_charge", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2luZF9jaGFyZ2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LndpbmRfY2hhcmdlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_cooldown": "Fz8AAAAA" - } - }, - { - "id": 1170, - "key": "minecraft:writable_book", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6d3JpdGFibGVfYm9vaw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LndyaXRhYmxlX2Jvb2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:writable_book_content": "LQA=" - } - }, - { - "id": 1171, - "key": "minecraft:written_book", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantment_glint_override": "EgE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d3JpdHRlbl9ib29r", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LndyaXR0ZW5fYm9vawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1172, - "key": "minecraft:breeze_rod", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YnJlZXplX3JvZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmJyZWV6ZV9yb2QA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1173, - "key": "minecraft:mace", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAFAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAszM0AAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "Gw8=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6bWFjZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0Lm1hY2UA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvQD", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQKUCQ==", - "minecraft:tool": "GQA/gAAAAgA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgEAAAAA" - } - }, - { - "id": 1174, - "key": "minecraft:item_frame", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXRlbV9mcmFtZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lml0ZW1fZnJhbWUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1175, - "key": "minecraft:glow_item_frame", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Z2xvd19pdGVtX2ZyYW1l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lmdsb3dfaXRlbV9mcmFtZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1176, - "key": "minecraft:flower_pot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Zmxvd2VyX3BvdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5mbG93ZXJfcG90AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1177, - "key": "minecraft:carrot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FANAZmZnAA==", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y2Fycm90", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmNhcnJvdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1178, - "key": "minecraft:potato", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAE/GZmaAA==", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6cG90YXRv", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnBvdGF0bwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1179, - "key": "minecraft:baked_potato", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAVAwAAAAA==", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmFrZWRfcG90YXRv", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJha2VkX3BvdGF0bwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1180, - "key": "minecraft:poisonous_potato", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAQABEgBkAAEBAD8ZmZo=", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI/mZmaAA==", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cG9pc29ub3VzX3BvdGF0bw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnBvaXNvbm91c19wb3RhdG8A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1181, - "key": "minecraft:map", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw1taW5lY3JhZnQ6bWFw", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAEml0ZW0ubWluZWNyYWZ0Lm1hcAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1182, - "key": "minecraft:golden_carrot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAZBZmZnAA==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z29sZGVuX2NhcnJvdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9jYXJyb3QA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1183, - "key": "minecraft:skeleton_skull", - "components": { - "minecraft:attribute_modifiers": "DQEhJm1pbmVjcmFmdDp3YXlwb2ludF90cmFuc21pdF9yYW5nZV9oaWRlv/AAAAAAAAACBwE=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARHAAAAAQABAACSCg==", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2tlbGV0b25fc2t1bGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5za2VsZXRvbl9za3VsbAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1184, - "key": "minecraft:wither_skeleton_skull", - "components": { - "minecraft:attribute_modifiers": "DQEhJm1pbmVjcmFmdDp3YXlwb2ludF90cmFuc21pdF9yYW5nZV9oaWRlv/AAAAAAAAACBwE=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARHAAAAAQABAACSCg==", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2l0aGVyX3NrZWxldG9uX3NrdWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53aXRoZXJfc2tlbGV0b25fc2t1bGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1185, - "key": "minecraft:player_head", - "components": { - "minecraft:attribute_modifiers": "DQEhJm1pbmVjcmFmdDp3YXlwb2ludF90cmFuc21pdF9yYW5nZV9oaWRlv/AAAAAAAAACBwE=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARHAAAAAQABAACSCg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGxheWVyX2hlYWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5wbGF5ZXJfaGVhZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1186, - "key": "minecraft:zombie_head", - "components": { - "minecraft:attribute_modifiers": "DQEhJm1pbmVjcmFmdDp3YXlwb2ludF90cmFuc21pdF9yYW5nZV9oaWRlv/AAAAAAAAACBwE=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARHAAAAAQABAACSCg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6em9tYmllX2hlYWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC56b21iaWVfaGVhZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1187, - "key": "minecraft:creeper_head", - "components": { - "minecraft:attribute_modifiers": "DQEhJm1pbmVjcmFmdDp3YXlwb2ludF90cmFuc21pdF9yYW5nZV9oaWRlv/AAAAAAAAACBwE=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARHAAAAAQABAACSCg==", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JlZXBlcl9oZWFk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmVlcGVyX2hlYWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1188, - "key": "minecraft:dragon_head", - "components": { - "minecraft:attribute_modifiers": "DQEhJm1pbmVjcmFmdDp3YXlwb2ludF90cmFuc21pdF9yYW5nZV9oaWRlv/AAAAAAAAACBwE=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARHAAAAAQABAACSCg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZHJhZ29uX2hlYWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5kcmFnb25faGVhZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1189, - "key": "minecraft:piglin_head", - "components": { - "minecraft:attribute_modifiers": "DQEhJm1pbmVjcmFmdDp3YXlwb2ludF90cmFuc21pdF9yYW5nZV9oaWRlv/AAAAAAAAACBwE=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HARHAAAAAQABAACSCg==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlnbGluX2hlYWQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waWdsaW5faGVhZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1190, - "key": "minecraft:nether_star", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage_resistant": "GBZtaW5lY3JhZnQ6aXNfZXhwbG9zaW9u", - "minecraft:enchantment_glint_override": "EgE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bmV0aGVyX3N0YXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm5ldGhlcl9zdGFyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1191, - "key": "minecraft:pumpkin_pie", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAhAmZmaAA==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cHVtcGtpbl9waWU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnB1bXBraW5fcGllAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1192, - "key": "minecraft:firework_rocket", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:fireworks": "PAEA", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZmlyZXdvcmtfcm9ja2V0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmZpcmV3b3JrX3JvY2tldAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1193, - "key": "minecraft:firework_star", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZmlyZXdvcmtfc3Rhcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmZpcmV3b3JrX3N0YXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1194, - "key": "minecraft:enchanted_book", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantment_glint_override": "EgE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZW5jaGFudGVkX2Jvb2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmVuY2hhbnRlZF9ib29rAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:stored_enchantments": "IgA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1195, - "key": "minecraft:nether_brick", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6bmV0aGVyX2JyaWNr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lm5ldGhlcl9icmljawA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1196, - "key": "minecraft:resin_brick", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmVzaW5fYnJpY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJlc2luX2JyaWNrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:provides_trim_material": "NQAPbWluZWNyYWZ0OnJlc2lu", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1197, - "key": "minecraft:prismarine_shard", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6cHJpc21hcmluZV9zaGFyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnByaXNtYXJpbmVfc2hhcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1198, - "key": "minecraft:prismarine_crystals", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6cHJpc21hcmluZV9jcnlzdGFscw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnByaXNtYXJpbmVfY3J5c3RhbHMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1199, - "key": "minecraft:rabbit", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAM/5mZnAA==", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6cmFiYml0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnJhYmJpdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1200, - "key": "minecraft:cooked_rabbit", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAVAwAAAAA==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29va2VkX3JhYmJpdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9yYWJiaXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1201, - "key": "minecraft:rabbit_stew", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FApBQAAAAA==", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmFiYml0X3N0ZXc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJhYmJpdF9zdGV3AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_remainder": "FgHYBgAA" - } - }, - { - "id": 1202, - "key": "minecraft:rabbit_foot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmFiYml0X2Zvb3Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJhYmJpdF9mb290AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1203, - "key": "minecraft:rabbit_hide", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmFiYml0X2hpZGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJhYmJpdF9oaWRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1204, - "key": "minecraft:armor_stand", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6YXJtb3Jfc3RhbmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmFybW9yX3N0YW5kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1205, - "key": "minecraft:iron_horse_armor", - "components": { - "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QBQAAAAAAAAACQABFG1pbmVjcmFmdDphcm1vci5ib2R5AAAAAAAAAAAACQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAb+BQEObWluZWNyYWZ0Omlyb24AAQAebWluZWNyYWZ0OmNhbl93ZWFyX2hvcnNlX2FybW9yAQEAAAH/BQ==", - "minecraft:item_model": "BxptaW5lY3JhZnQ6aXJvbl9ob3JzZV9hcm1vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lmlyb25faG9yc2VfYXJtb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1206, - "key": "minecraft:golden_horse_armor", - "components": { - "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QBwAAAAAAAAACQABFG1pbmVjcmFmdDphcm1vci5ib2R5AAAAAAAAAAAACQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAb+BQEObWluZWNyYWZ0OmdvbGQAAQAebWluZWNyYWZ0OmNhbl93ZWFyX2hvcnNlX2FybW9yAQEAAAH/BQ==", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Z29sZGVuX2hvcnNlX2FybW9y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9ob3JzZV9hcm1vcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1207, - "key": "minecraft:diamond_horse_armor", - "components": { - "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QCYAAAAAAAAACQABFG1pbmVjcmFmdDphcm1vci5ib2R5QAAAAAAAAAAACQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAb+BQERbWluZWNyYWZ0OmRpYW1vbmQAAQAebWluZWNyYWZ0OmNhbl93ZWFyX2hvcnNlX2FybW9yAQEAAAH/BQ==", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGlhbW9uZF9ob3JzZV9hcm1vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfaG9yc2VfYXJtb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1208, - "key": "minecraft:leather_horse_armor", - "components": { - "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QAgAAAAAAAAACQABFG1pbmVjcmFmdDphcm1vci5ib2R5AAAAAAAAAAAACQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAb+BQERbWluZWNyYWZ0OmxlYXRoZXIAAQAebWluZWNyYWZ0OmNhbl93ZWFyX2hvcnNlX2FybW9yAQEAAAH/BQ==", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bGVhdGhlcl9ob3JzZV9hcm1vcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfaG9yc2VfYXJtb3IA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1209, - "key": "minecraft:lead", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6bGVhZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmxlYWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1210, - "key": "minecraft:name_tag", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6bmFtZV90YWc=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lm5hbWVfdGFnAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1211, - "key": "minecraft:command_block_minecart", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y29tbWFuZF9ibG9ja19taW5lY2FydA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmNvbW1hbmRfYmxvY2tfbWluZWNhcnQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1212, - "key": "minecraft:mutton", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI/mZmaAA==", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6bXV0dG9u", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0Lm11dHRvbgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1213, - "key": "minecraft:cooked_mutton", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAZBGZmaAA==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29va2VkX211dHRvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9tdXR0b24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1214, - "key": "minecraft:white_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2hpdGVfYmFubmVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53aGl0ZV9iYW5uZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1215, - "key": "minecraft:orange_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6b3JhbmdlX2Jhbm5lcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfYmFubmVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1216, - "key": "minecraft:magenta_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFnZW50YV9iYW5uZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2Jhbm5lcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1217, - "key": "minecraft:light_blue_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfYmx1ZV9iYW5uZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2Jhbm5lcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1218, - "key": "minecraft:yellow_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6eWVsbG93X2Jhbm5lcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfYmFubmVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1219, - "key": "minecraft:lime_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGltZV9iYW5uZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5saW1lX2Jhbm5lcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1220, - "key": "minecraft:pink_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19iYW5uZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waW5rX2Jhbm5lcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1221, - "key": "minecraft:gray_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3JheV9iYW5uZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ncmF5X2Jhbm5lcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1222, - "key": "minecraft:light_gray_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfZ3JheV9iYW5uZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2Jhbm5lcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1223, - "key": "minecraft:cyan_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y3lhbl9iYW5uZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jeWFuX2Jhbm5lcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1224, - "key": "minecraft:purple_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycGxlX2Jhbm5lcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfYmFubmVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1225, - "key": "minecraft:blue_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9iYW5uZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ibHVlX2Jhbm5lcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1226, - "key": "minecraft:brown_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJvd25fYmFubmVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5icm93bl9iYW5uZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1227, - "key": "minecraft:green_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JlZW5fYmFubmVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmVlbl9iYW5uZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1228, - "key": "minecraft:red_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmVkX2Jhbm5lcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5yZWRfYmFubmVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1229, - "key": "minecraft:black_banner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhY2tfYmFubmVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ibGFja19iYW5uZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1230, - "key": "minecraft:end_crystal", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantment_glint_override": "EgE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZW5kX2NyeXN0YWw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmVuZF9jcnlzdGFsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1231, - "key": "minecraft:chorus_fruit", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAQNBgAAA", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FARAGZmaAQ==", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y2hvcnVzX2ZydWl0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmNob3J1c19mcnVpdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_cooldown": "Fz+AAAAA" - } - }, - { - "id": 1232, - "key": "minecraft:popped_chorus_fruit", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6cG9wcGVkX2Nob3J1c19mcnVpdA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnBvcHBlZF9jaG9ydXNfZnJ1aXQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1233, - "key": "minecraft:torchflower_seeds", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6dG9yY2hmbG93ZXJfc2VlZHM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnRvcmNoZmxvd2VyX3NlZWRzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1234, - "key": "minecraft:pitcher_pod", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGl0Y2hlcl9wb2Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnBpdGNoZXJfcG9kAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1235, - "key": "minecraft:beetroot", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAE/mZmaAA==", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6YmVldHJvb3Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmJlZXRyb290AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1236, - "key": "minecraft:beetroot_seeds", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6YmVldHJvb3Rfc2VlZHM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmJlZXRyb290X3NlZWRzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1237, - "key": "minecraft:beetroot_soup", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAZA5mZnAA==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmVldHJvb3Rfc291cA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmJlZXRyb290X3NvdXAA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_remainder": "FgHYBgAA" - } - }, - { - "id": 1238, - "key": "minecraft:dragon_breath", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZHJhZ29uX2JyZWF0aA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmRyYWdvbl9icmVhdGgA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1239, - "key": "minecraft:splash_potion", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BsYXNoX3BvdGlvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnNwbGFzaF9wb3Rpb24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:potion_contents": "KgAAAAA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1240, - "key": "minecraft:spectral_arrow", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c3BlY3RyYWxfYXJyb3c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LnNwZWN0cmFsX2Fycm93AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1241, - "key": "minecraft:tipped_arrow", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6dGlwcGVkX2Fycm93", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnRpcHBlZF9hcnJvdwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:potion_contents": "KgAAAAA=", - "minecraft:potion_duration_scale": "Kz4AAAA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1242, - "key": "minecraft:lingering_potion", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bGluZ2VyaW5nX3BvdGlvbg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmxpbmdlcmluZ19wb3Rpb24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:potion_contents": "KgAAAAA=", - "minecraft:potion_duration_scale": "Kz6AAAA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1243, - "key": "minecraft:shield", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:banner_patterns": "PwA=", - "minecraft:blocks_attacks": "IT6AAAA/gAAAAUK0AAAAAAAAAD+AAABAQAAAP4AAAD+AAAABGW1pbmVjcmFmdDpieXBhc3Nlc19zaGllbGQBkwoBlAo=", - "minecraft:break_sound": "R5QK", - "minecraft:damage": "AwA=", - "minecraft:enchantments": "CgA=", - "minecraft:equippable": "HAVHAAAAAQABAACSCg==", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6c2hpZWxk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnNoaWVsZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AtAC", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1244, - "key": "minecraft:totem_of_undying", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:death_protection": "IAICAAMJAYQHAAEBABUBZAABAQALAKAGAAEBAD+AAAA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6dG90ZW1fb2ZfdW5keWluZw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnRvdGVtX29mX3VuZHlpbmcA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1245, - "key": "minecraft:shulker_shell", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c2h1bGtlcl9zaGVsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnNodWxrZXJfc2hlbGwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1246, - "key": "minecraft:iron_nugget", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6aXJvbl9udWdnZXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lmlyb25fbnVnZ2V0AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1247, - "key": "minecraft:knowledge_book", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6a25vd2xlZGdlX2Jvb2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lmtub3dsZWRnZV9ib29rAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQM=", - "minecraft:recipes": "OQkAAAAAAA==", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1248, - "key": "minecraft:debug_stick", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:debug_stick_state": "MAoA", - "minecraft:enchantment_glint_override": "EgE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZGVidWdfc3RpY2s=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmRlYnVnX3N0aWNrAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1249, - "key": "minecraft:music_disc_13", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bXVzaWNfZGlzY18xMw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfMTMA", - "minecraft:jukebox_playable": "NwAMbWluZWNyYWZ0OjEz", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1250, - "key": "minecraft:music_disc_cat", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVzaWNfZGlzY19jYXQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfY2F0AA==", - "minecraft:jukebox_playable": "NwANbWluZWNyYWZ0OmNhdA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1251, - "key": "minecraft:music_disc_blocks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bXVzaWNfZGlzY19ibG9ja3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfYmxvY2tzAA==", - "minecraft:jukebox_playable": "NwAQbWluZWNyYWZ0OmJsb2Nrcw==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1252, - "key": "minecraft:music_disc_chirp", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVzaWNfZGlzY19jaGlycA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfY2hpcnAA", - "minecraft:jukebox_playable": "NwAPbWluZWNyYWZ0OmNoaXJw", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1253, - "key": "minecraft:music_disc_creator", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bXVzaWNfZGlzY19jcmVhdG9y", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfY3JlYXRvcgA=", - "minecraft:jukebox_playable": "NwARbWluZWNyYWZ0OmNyZWF0b3I=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1254, - "key": "minecraft:music_disc_creator_music_box", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByZtaW5lY3JhZnQ6bXVzaWNfZGlzY19jcmVhdG9yX211c2ljX2JveA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfY3JlYXRvcl9tdXNpY19ib3gA", - "minecraft:jukebox_playable": "NwAbbWluZWNyYWZ0OmNyZWF0b3JfbXVzaWNfYm94", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1255, - "key": "minecraft:music_disc_far", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVzaWNfZGlzY19mYXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfZmFyAA==", - "minecraft:jukebox_playable": "NwANbWluZWNyYWZ0OmZhcg==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1256, - "key": "minecraft:music_disc_lava_chicken", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByFtaW5lY3JhZnQ6bXVzaWNfZGlzY19sYXZhX2NoaWNrZW4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfbGF2YV9jaGlja2VuAA==", - "minecraft:jukebox_playable": "NwAWbWluZWNyYWZ0OmxhdmFfY2hpY2tlbg==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1257, - "key": "minecraft:music_disc_mall", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bXVzaWNfZGlzY19tYWxs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfbWFsbAA=", - "minecraft:jukebox_playable": "NwAObWluZWNyYWZ0Om1hbGw=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1258, - "key": "minecraft:music_disc_mellohi", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bXVzaWNfZGlzY19tZWxsb2hp", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfbWVsbG9oaQA=", - "minecraft:jukebox_playable": "NwARbWluZWNyYWZ0Om1lbGxvaGk=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1259, - "key": "minecraft:music_disc_stal", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bXVzaWNfZGlzY19zdGFs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfc3RhbAA=", - "minecraft:jukebox_playable": "NwAObWluZWNyYWZ0OnN0YWw=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1260, - "key": "minecraft:music_disc_strad", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVzaWNfZGlzY19zdHJhZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfc3RyYWQA", - "minecraft:jukebox_playable": "NwAPbWluZWNyYWZ0OnN0cmFk", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1261, - "key": "minecraft:music_disc_ward", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bXVzaWNfZGlzY193YXJk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfd2FyZAA=", - "minecraft:jukebox_playable": "NwAObWluZWNyYWZ0OndhcmQ=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1262, - "key": "minecraft:music_disc_11", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6bXVzaWNfZGlzY18xMQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfMTEA", - "minecraft:jukebox_playable": "NwAMbWluZWNyYWZ0OjEx", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1263, - "key": "minecraft:music_disc_wait", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6bXVzaWNfZGlzY193YWl0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfd2FpdAA=", - "minecraft:jukebox_playable": "NwAObWluZWNyYWZ0OndhaXQ=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1264, - "key": "minecraft:music_disc_otherside", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6bXVzaWNfZGlzY19vdGhlcnNpZGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfb3RoZXJzaWRlAA==", - "minecraft:jukebox_playable": "NwATbWluZWNyYWZ0Om90aGVyc2lkZQ==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1265, - "key": "minecraft:music_disc_relic", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVzaWNfZGlzY19yZWxpYw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfcmVsaWMA", - "minecraft:jukebox_playable": "NwAPbWluZWNyYWZ0OnJlbGlj", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1266, - "key": "minecraft:music_disc_5", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6bXVzaWNfZGlzY181", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfNQA=", - "minecraft:jukebox_playable": "NwALbWluZWNyYWZ0OjU=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1267, - "key": "minecraft:music_disc_pigstep", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bXVzaWNfZGlzY19waWdzdGVw", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfcGlnc3RlcAA=", - "minecraft:jukebox_playable": "NwARbWluZWNyYWZ0OnBpZ3N0ZXA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1268, - "key": "minecraft:music_disc_precipice", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6bXVzaWNfZGlzY19wcmVjaXBpY2U=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfcHJlY2lwaWNlAA==", - "minecraft:jukebox_playable": "NwATbWluZWNyYWZ0OnByZWNpcGljZQ==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1269, - "key": "minecraft:music_disc_tears", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVzaWNfZGlzY190ZWFycw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfdGVhcnMA", - "minecraft:jukebox_playable": "NwAPbWluZWNyYWZ0OnRlYXJz", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1270, - "key": "minecraft:disc_fragment_5", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGlzY19mcmFnbWVudF81", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmRpc2NfZnJhZ21lbnRfNQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1271, - "key": "minecraft:trident", - "components": { - "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIAAAAAAAAAABAAQbbWluZWNyYWZ0OmJhc2VfYXR0YWNrX3NwZWVkwAczM0AAAAAAAQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6dHJpZGVudA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LnRyaWRlbnQA", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AvoB", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tool": "GQA/gAAAAgA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:weapon": "GgEAAAAA" - } - }, - { - "id": 1272, - "key": "minecraft:nautilus_shell", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bmF1dGlsdXNfc2hlbGw=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm5hdXRpbHVzX3NoZWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1273, - "key": "minecraft:heart_of_the_sea", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6aGVhcnRfb2ZfdGhlX3NlYQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmhlYXJ0X29mX3RoZV9zZWEA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1274, - "key": "minecraft:crossbow", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:charged_projectiles": "KAA=", - "minecraft:damage": "AwA=", - "minecraft:enchantable": "GwE=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y3Jvc3Nib3c=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmNyb3NzYm93AA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AtED", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1275, - "key": "minecraft:suspicious_stew", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAZA5mZnAQ==", - "minecraft:item_model": "BxltaW5lY3JhZnQ6c3VzcGljaW91c19zdGV3", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnN1c3BpY2lvdXNfc3RldwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:suspicious_stew_effects": "LAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_remainder": "FgHYBgAA" - } - }, - { - "id": 1276, - "key": "minecraft:loom", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6bG9vbQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5sb29tAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1277, - "key": "minecraft:flower_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Zmxvd2VyX2Jhbm5lcl9wYXR0ZXJu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LmZsb3dlcl9iYW5uZXJfcGF0dGVybgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OB1taW5lY3JhZnQ6cGF0dGVybl9pdGVtL2Zsb3dlcg==", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1278, - "key": "minecraft:creeper_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y3JlZXBlcl9iYW5uZXJfcGF0dGVybg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmNyZWVwZXJfYmFubmVyX3BhdHRlcm4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OB5taW5lY3JhZnQ6cGF0dGVybl9pdGVtL2NyZWVwZXI=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1279, - "key": "minecraft:skull_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c2t1bGxfYmFubmVyX3BhdHRlcm4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnNrdWxsX2Jhbm5lcl9wYXR0ZXJuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OBxtaW5lY3JhZnQ6cGF0dGVybl9pdGVtL3NrdWxs", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1280, - "key": "minecraft:mojang_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6bW9qYW5nX2Jhbm5lcl9wYXR0ZXJu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0Lm1vamFuZ19iYW5uZXJfcGF0dGVybgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OB1taW5lY3JhZnQ6cGF0dGVybl9pdGVtL21vamFuZw==", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1281, - "key": "minecraft:globe_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Z2xvYmVfYmFubmVyX3BhdHRlcm4=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lmdsb2JlX2Jhbm5lcl9wYXR0ZXJuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OBxtaW5lY3JhZnQ6cGF0dGVybl9pdGVtL2dsb2Jl", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1282, - "key": "minecraft:piglin_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cGlnbGluX2Jhbm5lcl9wYXR0ZXJu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LnBpZ2xpbl9iYW5uZXJfcGF0dGVybgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OB1taW5lY3JhZnQ6cGF0dGVybl9pdGVtL3BpZ2xpbg==", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1283, - "key": "minecraft:flow_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6Zmxvd19iYW5uZXJfcGF0dGVybg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmZsb3dfYmFubmVyX3BhdHRlcm4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OBttaW5lY3JhZnQ6cGF0dGVybl9pdGVtL2Zsb3c=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1284, - "key": "minecraft:guster_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6Z3VzdGVyX2Jhbm5lcl9wYXR0ZXJu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0Lmd1c3Rlcl9iYW5uZXJfcGF0dGVybgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OB1taW5lY3JhZnQ6cGF0dGVybl9pdGVtL2d1c3Rlcg==", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1285, - "key": "minecraft:field_masoned_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByZtaW5lY3JhZnQ6ZmllbGRfbWFzb25lZF9iYW5uZXJfcGF0dGVybg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2l0ZW0ubWluZWNyYWZ0LmZpZWxkX21hc29uZWRfYmFubmVyX3BhdHRlcm4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OCRtaW5lY3JhZnQ6cGF0dGVybl9pdGVtL2ZpZWxkX21hc29uZWQ=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1286, - "key": "minecraft:bordure_indented_banner_pattern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByltaW5lY3JhZnQ6Ym9yZHVyZV9pbmRlbnRlZF9iYW5uZXJfcGF0dGVybg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALml0ZW0ubWluZWNyYWZ0LmJvcmR1cmVfaW5kZW50ZWRfYmFubmVyX3BhdHRlcm4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:provides_banner_patterns": "OCdtaW5lY3JhZnQ6cGF0dGVybl9pdGVtL2JvcmR1cmVfaW5kZW50ZWQ=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1287, - "key": "minecraft:goat_horn", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:instrument": "NAAabWluZWNyYWZ0OnBvbmRlcl9nb2F0X2hvcm4=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z29hdF9ob3Ju", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmdvYXRfaG9ybgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1288, - "key": "minecraft:composter", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6Y29tcG9zdGVy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5jb21wb3N0ZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1289, - "key": "minecraft:barrel", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6YmFycmVs", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5iYXJyZWwA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1290, - "key": "minecraft:smoker", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6c21va2Vy", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5zbW9rZXIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1291, - "key": "minecraft:blast_furnace", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6Ymxhc3RfZnVybmFjZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5ibGFzdF9mdXJuYWNlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1292, - "key": "minecraft:cartography_table", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2FydG9ncmFwaHlfdGFibGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jYXJ0b2dyYXBoeV90YWJsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1293, - "key": "minecraft:fletching_table", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6ZmxldGNoaW5nX3RhYmxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5mbGV0Y2hpbmdfdGFibGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1294, - "key": "minecraft:grindstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z3JpbmRzdG9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ncmluZHN0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1295, - "key": "minecraft:smithing_table", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6c21pdGhpbmdfdGFibGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zbWl0aGluZ190YWJsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1296, - "key": "minecraft:stonecutter", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3RvbmVjdXR0ZXI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zdG9uZWN1dHRlcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1297, - "key": "minecraft:bell", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw5taW5lY3JhZnQ6YmVsbA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5iZWxsAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1298, - "key": "minecraft:lantern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6bGFudGVybg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5sYW50ZXJuAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1299, - "key": "minecraft:soul_lantern", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6c291bF9sYW50ZXJu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zb3VsX2xhbnRlcm4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1300, - "key": "minecraft:sweet_berries", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI+zMzNAA==", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3dlZXRfYmVycmllcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnN3ZWV0X2JlcnJpZXMA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1301, - "key": "minecraft:glow_berries", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0B5wQBAA==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAI+zMzNAA==", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z2xvd19iZXJyaWVz", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lmdsb3dfYmVycmllcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1302, - "key": "minecraft:campfire", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y2FtcGZpcmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5jYW1wZmlyZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1303, - "key": "minecraft:soul_campfire", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:container": "QgA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6c291bF9jYW1wZmlyZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zb3VsX2NhbXBmaXJlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1304, - "key": "minecraft:shroomlight", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2hyb29tbGlnaHQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zaHJvb21saWdodAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1305, - "key": "minecraft:honeycomb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6aG9uZXljb21i", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmhvbmV5Y29tYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1306, - "key": "minecraft:bee_nest", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:bees": "RAA=", - "minecraft:block_state": "QwELaG9uZXlfbGV2ZWwBMA==", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxJtaW5lY3JhZnQ6YmVlX25lc3Q=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5iZWVfbmVzdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1307, - "key": "minecraft:beehive", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:bees": "RAA=", - "minecraft:block_state": "QwELaG9uZXlfbGV2ZWwBMA==", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxFtaW5lY3JhZnQ6YmVlaGl2ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5iZWVoaXZlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1308, - "key": "minecraft:honey_bottle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FUAAAAAC8wUAAQECEg==", - "minecraft:enchantments": "CgA=", - "minecraft:food": "FAY/mZmaAQ==", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6aG9uZXlfYm90dGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmhvbmV5X2JvdHRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "ARA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA", - "minecraft:use_remainder": "FgGzCAAA" - } - }, - { - "id": 1309, - "key": "minecraft:honeycomb_block", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6aG9uZXljb21iX2Jsb2Nr", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ob25leWNvbWJfYmxvY2sA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1310, - "key": "minecraft:lodestone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6bG9kZXN0b25l", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5sb2Rlc3RvbmUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1311, - "key": "minecraft:crying_obsidian", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6Y3J5aW5nX29ic2lkaWFu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jcnlpbmdfb2JzaWRpYW4A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1312, - "key": "minecraft:blackstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmxhY2tzdG9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ibGFja3N0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1313, - "key": "minecraft:blackstone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6YmxhY2tzdG9uZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ibGFja3N0b25lX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1314, - "key": "minecraft:blackstone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6YmxhY2tzdG9uZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5ibGFja3N0b25lX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1315, - "key": "minecraft:gilded_blackstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6Z2lsZGVkX2JsYWNrc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5naWxkZWRfYmxhY2tzdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1316, - "key": "minecraft:polished_blackstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1317, - "key": "minecraft:polished_blackstone_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1318, - "key": "minecraft:polished_blackstone_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1319, - "key": "minecraft:chiseled_polished_blackstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByZtaW5lY3JhZnQ6Y2hpc2VsZWRfcG9saXNoZWRfYmxhY2tzdG9uZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALGJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9wb2xpc2hlZF9ibGFja3N0b25lAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1320, - "key": "minecraft:polished_blackstone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3M=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrcwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1321, - "key": "minecraft:polished_blackstone_brick_slab", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByhtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9icmlja19zbGFi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrX3NsYWIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1322, - "key": "minecraft:polished_blackstone_brick_stairs", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByptaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9icmlja19zdGFpcnM=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrX3N0YWlycwA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1323, - "key": "minecraft:cracked_polished_blackstone_bricks", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByxtaW5lY3JhZnQ6Y3JhY2tlZF9wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrcw==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMmJsb2NrLm1pbmVjcmFmdC5jcmFja2VkX3BvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1324, - "key": "minecraft:respawn_anchor", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmVzcGF3bl9hbmNob3I=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yZXNwYXduX2FuY2hvcgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1325, - "key": "minecraft:candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y2FuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5jYW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1326, - "key": "minecraft:white_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2hpdGVfY2FuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53aGl0ZV9jYW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1327, - "key": "minecraft:orange_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6b3JhbmdlX2NhbmRsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfY2FuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1328, - "key": "minecraft:magenta_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFnZW50YV9jYW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2NhbmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1329, - "key": "minecraft:light_blue_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfYmx1ZV9jYW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2NhbmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1330, - "key": "minecraft:yellow_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6eWVsbG93X2NhbmRsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfY2FuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1331, - "key": "minecraft:lime_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGltZV9jYW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5saW1lX2NhbmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1332, - "key": "minecraft:pink_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19jYW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waW5rX2NhbmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1333, - "key": "minecraft:gray_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3JheV9jYW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ncmF5X2NhbmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1334, - "key": "minecraft:light_gray_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfZ3JheV9jYW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2NhbmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1335, - "key": "minecraft:cyan_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y3lhbl9jYW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jeWFuX2NhbmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1336, - "key": "minecraft:purple_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycGxlX2NhbmRsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfY2FuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1337, - "key": "minecraft:blue_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9jYW5kbGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ibHVlX2NhbmRsZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1338, - "key": "minecraft:brown_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJvd25fY2FuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5icm93bl9jYW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1339, - "key": "minecraft:green_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JlZW5fY2FuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmVlbl9jYW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1340, - "key": "minecraft:red_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmVkX2NhbmRsZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5yZWRfY2FuZGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1341, - "key": "minecraft:black_candle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhY2tfY2FuZGxl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ibGFja19jYW5kbGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1342, - "key": "minecraft:small_amethyst_bud", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6c21hbGxfYW1ldGh5c3RfYnVk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5zbWFsbF9hbWV0aHlzdF9idWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1343, - "key": "minecraft:medium_amethyst_bud", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWVkaXVtX2FtZXRoeXN0X2J1ZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5tZWRpdW1fYW1ldGh5c3RfYnVkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1344, - "key": "minecraft:large_amethyst_bud", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGFyZ2VfYW1ldGh5c3RfYnVk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5sYXJnZV9hbWV0aHlzdF9idWQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1345, - "key": "minecraft:amethyst_cluster", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxptaW5lY3JhZnQ6YW1ldGh5c3RfY2x1c3Rlcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5hbWV0aHlzdF9jbHVzdGVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1346, - "key": "minecraft:pointed_dripstone", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6cG9pbnRlZF9kcmlwc3RvbmU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wb2ludGVkX2RyaXBzdG9uZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1347, - "key": "minecraft:ochre_froglight", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxltaW5lY3JhZnQ6b2NocmVfZnJvZ2xpZ2h0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5vY2hyZV9mcm9nbGlnaHQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1348, - "key": "minecraft:verdant_froglight", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6dmVyZGFudF9mcm9nbGlnaHQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC52ZXJkYW50X2Zyb2dsaWdodAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1349, - "key": "minecraft:pearlescent_froglight", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6cGVhcmxlc2NlbnRfZnJvZ2xpZ2h0", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wZWFybGVzY2VudF9mcm9nbGlnaHQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1350, - "key": "minecraft:frogspawn", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZnJvZ3NwYXdu", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5mcm9nc3Bhd24A", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1351, - "key": "minecraft:echo_shard", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZWNob19zaGFyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmVjaG9fc2hhcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1352, - "key": "minecraft:brush", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:damage": "AwA=", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6YnJ1c2g=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmJydXNoAA==", - "minecraft:lore": "CAA=", - "minecraft:max_damage": "AkA=", - "minecraft:max_stack_size": "AQE=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1353, - "key": "minecraft:netherite_upgrade_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "By1taW5lY3JhZnQ6bmV0aGVyaXRlX3VwZ3JhZGVfc21pdGhpbmdfdGVtcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV91cGdyYWRlX3NtaXRoaW5nX3RlbXBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1354, - "key": "minecraft:sentry_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "By1taW5lY3JhZnQ6c2VudHJ5X2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMml0ZW0ubWluZWNyYWZ0LnNlbnRyeV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1355, - "key": "minecraft:dune_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByttaW5lY3JhZnQ6ZHVuZV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LmR1bmVfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1356, - "key": "minecraft:coast_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByxtaW5lY3JhZnQ6Y29hc3RfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMWl0ZW0ubWluZWNyYWZ0LmNvYXN0X2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1357, - "key": "minecraft:wild_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByttaW5lY3JhZnQ6d2lsZF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LndpbGRfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1358, - "key": "minecraft:ward_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByttaW5lY3JhZnQ6d2FyZF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LndhcmRfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1359, - "key": "minecraft:eye_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByptaW5lY3JhZnQ6ZXllX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2l0ZW0ubWluZWNyYWZ0LmV5ZV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1360, - "key": "minecraft:vex_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByptaW5lY3JhZnQ6dmV4X2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2l0ZW0ubWluZWNyYWZ0LnZleF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1361, - "key": "minecraft:tide_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByttaW5lY3JhZnQ6dGlkZV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LnRpZGVfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1362, - "key": "minecraft:snout_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByxtaW5lY3JhZnQ6c25vdXRfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMWl0ZW0ubWluZWNyYWZ0LnNub3V0X2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1363, - "key": "minecraft:rib_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByptaW5lY3JhZnQ6cmliX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2l0ZW0ubWluZWNyYWZ0LnJpYl9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1364, - "key": "minecraft:spire_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByxtaW5lY3JhZnQ6c3BpcmVfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMWl0ZW0ubWluZWNyYWZ0LnNwaXJlX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQI=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1365, - "key": "minecraft:wayfinder_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BzBtaW5lY3JhZnQ6d2F5ZmluZGVyX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUANWl0ZW0ubWluZWNyYWZ0LndheWZpbmRlcl9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1366, - "key": "minecraft:shaper_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "By1taW5lY3JhZnQ6c2hhcGVyX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMml0ZW0ubWluZWNyYWZ0LnNoYXBlcl9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1367, - "key": "minecraft:silence_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "By5taW5lY3JhZnQ6c2lsZW5jZV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAM2l0ZW0ubWluZWNyYWZ0LnNpbGVuY2VfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQM=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1368, - "key": "minecraft:raiser_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "By1taW5lY3JhZnQ6cmFpc2VyX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMml0ZW0ubWluZWNyYWZ0LnJhaXNlcl9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1369, - "key": "minecraft:host_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByttaW5lY3JhZnQ6aG9zdF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0Lmhvc3RfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1370, - "key": "minecraft:flow_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByttaW5lY3JhZnQ6Zmxvd19hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LmZsb3dfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1371, - "key": "minecraft:bolt_armor_trim_smithing_template", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByttaW5lY3JhZnQ6Ym9sdF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LmJvbHRfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1372, - "key": "minecraft:angler_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6YW5nbGVyX3BvdHRlcnlfc2hlcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmFuZ2xlcl9wb3R0ZXJ5X3NoZXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1373, - "key": "minecraft:archer_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6YXJjaGVyX3BvdHRlcnlfc2hlcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmFyY2hlcl9wb3R0ZXJ5X3NoZXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1374, - "key": "minecraft:arms_up_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6YXJtc191cF9wb3R0ZXJ5X3NoZXJk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LmFybXNfdXBfcG90dGVyeV9zaGVyZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1375, - "key": "minecraft:blade_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6YmxhZGVfcG90dGVyeV9zaGVyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmJsYWRlX3BvdHRlcnlfc2hlcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1376, - "key": "minecraft:brewer_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6YnJld2VyX3BvdHRlcnlfc2hlcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmJyZXdlcl9wb3R0ZXJ5X3NoZXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1377, - "key": "minecraft:burn_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6YnVybl9wb3R0ZXJ5X3NoZXJk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmJ1cm5fcG90dGVyeV9zaGVyZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1378, - "key": "minecraft:danger_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGFuZ2VyX3BvdHRlcnlfc2hlcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmRhbmdlcl9wb3R0ZXJ5X3NoZXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1379, - "key": "minecraft:explorer_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZXhwbG9yZXJfcG90dGVyeV9zaGVyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmV4cGxvcmVyX3BvdHRlcnlfc2hlcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1380, - "key": "minecraft:flow_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6Zmxvd19wb3R0ZXJ5X3NoZXJk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmZsb3dfcG90dGVyeV9zaGVyZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1381, - "key": "minecraft:friend_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZnJpZW5kX3BvdHRlcnlfc2hlcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmZyaWVuZF9wb3R0ZXJ5X3NoZXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1382, - "key": "minecraft:guster_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6Z3VzdGVyX3BvdHRlcnlfc2hlcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lmd1c3Rlcl9wb3R0ZXJ5X3NoZXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1383, - "key": "minecraft:heart_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6aGVhcnRfcG90dGVyeV9zaGVyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmhlYXJ0X3BvdHRlcnlfc2hlcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1384, - "key": "minecraft:heartbreak_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByJtaW5lY3JhZnQ6aGVhcnRicmVha19wb3R0ZXJ5X3NoZXJk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2l0ZW0ubWluZWNyYWZ0LmhlYXJ0YnJlYWtfcG90dGVyeV9zaGVyZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1385, - "key": "minecraft:howl_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6aG93bF9wb3R0ZXJ5X3NoZXJk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lmhvd2xfcG90dGVyeV9zaGVyZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1386, - "key": "minecraft:miner_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWluZXJfcG90dGVyeV9zaGVyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0Lm1pbmVyX3BvdHRlcnlfc2hlcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1387, - "key": "minecraft:mourner_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6bW91cm5lcl9wb3R0ZXJ5X3NoZXJk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0Lm1vdXJuZXJfcG90dGVyeV9zaGVyZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1388, - "key": "minecraft:plenty_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6cGxlbnR5X3BvdHRlcnlfc2hlcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnBsZW50eV9wb3R0ZXJ5X3NoZXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1389, - "key": "minecraft:prize_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6cHJpemVfcG90dGVyeV9zaGVyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnByaXplX3BvdHRlcnlfc2hlcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1390, - "key": "minecraft:scrape_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6c2NyYXBlX3BvdHRlcnlfc2hlcmQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnNjcmFwZV9wb3R0ZXJ5X3NoZXJkAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1391, - "key": "minecraft:sheaf_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c2hlYWZfcG90dGVyeV9zaGVyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnNoZWFmX3BvdHRlcnlfc2hlcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1392, - "key": "minecraft:shelter_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6c2hlbHRlcl9wb3R0ZXJ5X3NoZXJk", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LnNoZWx0ZXJfcG90dGVyeV9zaGVyZAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1393, - "key": "minecraft:skull_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c2t1bGxfcG90dGVyeV9zaGVyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnNrdWxsX3BvdHRlcnlfc2hlcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1394, - "key": "minecraft:snort_pottery_sherd", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6c25vcnRfcG90dGVyeV9zaGVyZA==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnNub3J0X3BvdHRlcnlfc2hlcmQA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1395, - "key": "minecraft:copper_grate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y29wcGVyX2dyYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jb3BwZXJfZ3JhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1396, - "key": "minecraft:exposed_copper_grate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXJfZ3JhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcl9ncmF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1397, - "key": "minecraft:weathered_copper_grate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByBtaW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcl9ncmF0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyX2dyYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1398, - "key": "minecraft:oxidized_copper_grate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVyX2dyYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXJfZ3JhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1399, - "key": "minecraft:waxed_copper_grate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxxtaW5lY3JhZnQ6d2F4ZWRfY29wcGVyX2dyYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfZ3JhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1400, - "key": "minecraft:waxed_exposed_copper_grate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXJfZ3JhdGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcl9ncmF0ZQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1401, - "key": "minecraft:waxed_weathered_copper_grate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByZtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcl9ncmF0ZQ==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALGJsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyX2dyYXRlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1402, - "key": "minecraft:waxed_oxidized_copper_grate", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByVtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVyX2dyYXRl", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXJfZ3JhdGUA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1403, - "key": "minecraft:copper_bulb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29wcGVyX2J1bGI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jb3BwZXJfYnVsYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1404, - "key": "minecraft:exposed_copper_bulb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXJfYnVsYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcl9idWxiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1405, - "key": "minecraft:weathered_copper_bulb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcl9idWxi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyX2J1bGIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1406, - "key": "minecraft:oxidized_copper_bulb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bx5taW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVyX2J1bGI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXJfYnVsYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1407, - "key": "minecraft:waxed_copper_bulb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6d2F4ZWRfY29wcGVyX2J1bGI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfYnVsYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1408, - "key": "minecraft:waxed_exposed_copper_bulb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXJfYnVsYg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcl9idWxiAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1409, - "key": "minecraft:waxed_weathered_copper_bulb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByVtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcl9idWxi", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyX2J1bGIA", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1410, - "key": "minecraft:waxed_oxidized_copper_bulb", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVyX2J1bGI=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXJfYnVsYgA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1411, - "key": "minecraft:trial_spawner", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHJpYWxfc3Bhd25lcg==", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC50cmlhbF9zcGF3bmVyAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1412, - "key": "minecraft:trial_key", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxNtaW5lY3JhZnQ6dHJpYWxfa2V5", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LnRyaWFsX2tleQA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1413, - "key": "minecraft:ominous_trial_key", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxttaW5lY3JhZnQ6b21pbm91c190cmlhbF9rZXk=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0Lm9taW5vdXNfdHJpYWxfa2V5AA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1414, - "key": "minecraft:vault", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "Bw9taW5lY3JhZnQ6dmF1bHQ=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC52YXVsdAA=", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:rarity": "CQA=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - }, - { - "id": 1415, - "key": "minecraft:ominous_bottle", - "components": { - "minecraft:attribute_modifiers": "DQA=", - "minecraft:break_sound": "R7EG", - "minecraft:consumable": "FT/MzM0C5gQAAQS0CA==", - "minecraft:enchantments": "CgA=", - "minecraft:item_model": "BxhtaW5lY3JhZnQ6b21pbm91c19ib3R0bGU=", - "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm9taW5vdXNfYm90dGxlAA==", - "minecraft:lore": "CAA=", - "minecraft:max_stack_size": "AUA=", - "minecraft:ominous_bottle_amplifier": "NgA=", - "minecraft:rarity": "CQE=", - "minecraft:repair_cost": "EAA=", - "minecraft:tooltip_display": "DwAA" - } - } -] \ No newline at end of file diff --git a/core/src/main/resources/languages b/core/src/main/resources/languages index 40253e5f3..4ce8ad58e 160000 --- a/core/src/main/resources/languages +++ b/core/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 40253e5f317ede6020aa563d0823c54c37380ebf +Subproject commit 4ce8ad58ea7ab779d613a64862956d6d0563a8e3 diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 40fa908cd..15398c158 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 40fa908cd129385a7c4342af730e479cdbd98048 +Subproject commit 15398c1588f5149824db8bd625e21f6886f98b10 diff --git a/gradle.properties b/gradle.properties index 0e88006be..0dc5199e3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,5 +8,5 @@ org.gradle.vfs.watch=false group=org.geysermc id=geyser -version=2.8.4-SNAPSHOT +version=2.9.0-SNAPSHOT description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 05f2bbe46..71eb9e633 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ protocol-common = "3.0.0.Beta8-20250929.213851-8" protocol-codec = "3.0.0.Beta8-20250929.213851-8" raknet = "1.0.0.CR3-20250811.214335-20" minecraftauth = "4.1.1" -mcprotocollib = "1.21.7-20250915.111046-6" +mcprotocollib = "1.21.9-20251008.155050-11" adventure = "4.24.0" adventure-platform = "4.3.0" junit = "5.9.2" @@ -33,23 +33,23 @@ bungeecord = "1.21-R0.1-20250215.224541-54" bungeecord-api = "1.21-R0.1" velocity = "3.4.0-SNAPSHOT" viaproxy = "3.3.2-SNAPSHOT" -fabric-loader = "0.16.14" -fabric-api = "0.128.1+1.21.7" +fabric-loader = "0.17.2" +fabric-api = "0.133.14+1.21.9" fabric-permissions-api = "0.4.1" -neoforge-minecraft = "21.8.0-beta" +neoforge-minecraft = "21.9.14-beta" mixin = "0.8.5" mixinextras = "0.3.5" -minecraft = "1.21.8" +minecraft = "1.21.9" mockito = "5.+" runtask = "2.3.1" -runpaperversion = "1.21.8" +runpaperversion = "1.21.9" runvelocityversion = "3.4.0-SNAPSHOT" # plugin versions indra = "3.1.3" shadow = "8.1.1" architectury-plugin = "3.4-SNAPSHOT" -architectury-loom = "1.10-SNAPSHOT" +architectury-loom = "1.11-SNAPSHOT" minotaur = "2.8.7" lombok = "8.4" blossom = "2.1.0"