From 60de3187c6101803176b3d0e7fecd804b9c9ca27 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 8 Apr 2023 12:45:13 -0400 Subject: [PATCH] Yeet NbtItemStackTranslator --- .../javax.annotation.processing.Processor | 1 - .../java/org/geysermc/geyser/GeyserImpl.java | 1 - .../type/living/AbstractFishEntity.java | 2 +- .../type/living/animal/AxolotlEntity.java | 2 +- .../type/living/animal/MooshroomEntity.java | 3 +- .../geyser/inventory/GeyserItemStack.java | 3 + .../inventory/item/StoredItemMappings.java | 8 - .../geysermc/geyser/item/ArmorMaterial.java | 22 +- .../DyeableLeatherItem.java} | 39 +- .../java/org/geysermc/geyser/item/Items.java | 2101 +++++++++-------- .../type/AxolotlBucketItem.java} | 32 +- .../type/BannerItem.java} | 64 +- .../type/BoatItem.java} | 14 +- .../geyser/item/type/CompassItem.java | 15 +- .../type/CrossbowItem.java} | 42 +- .../geyser/item/type/DyeableArmorItem.java | 53 + .../item/type/DyeableHorseArmorItem.java | 52 + .../type/EnchantedBookItem.java} | 57 +- .../geyser/item/type/FilledMapItem.java | 6 +- .../type/FireworkRocketItem.java} | 56 +- .../type/FireworkStarItem.java} | 45 +- .../type/FishingRodItem.java} | 38 +- .../geysermc/geyser/item/type/FlowerItem.java | 17 +- .../org/geysermc/geyser/item/type/Item.java | 163 +- .../geysermc/geyser/item/type/MapItem.java | 29 + .../type/PlayerHeadItem.java} | 39 +- .../type/ReadableBookItem.java} | 47 +- .../type/ShulkerBoxItem.java} | 38 +- .../type/TropicalFishBucketItem.java} | 36 +- .../CustomItemRegistryPopulator.java | 1 - .../populator/ItemRegistryPopulator.java | 15 +- .../registry/type/GeyserMappingItem.java | 5 - .../geyser/registry/type/ItemMapping.java | 3 - .../inventory/LoomInventoryTranslator.java | 4 +- .../inventory/item/ItemTranslator.java | 54 +- .../item/nbt/BasicItemTranslator.java | 90 - .../item/nbt/EnchantmentTranslator.java | 168 -- .../item/nbt/FireworkRocketTranslator.java | 94 - .../inventory/item/nbt/MapItemTranslator.java | 73 - .../entity/BannerBlockEntityTranslator.java | 6 +- ...BedrockInventoryTransactionTranslator.java | 22 +- .../org/geysermc/geyser/util/EntityUtils.java | 3 +- .../org/geysermc/geyser/util/ItemUtils.java | 3 +- 43 files changed, 1670 insertions(+), 1896 deletions(-) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/LeatherArmorTranslator.java => item/DyeableLeatherItem.java} (55%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/AxolotlBucketTranslator.java => item/type/AxolotlBucketItem.java} (65%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/BannerTranslator.java => item/type/BannerItem.java} (75%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/ItemRemapper.java => item/type/BoatItem.java} (79%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/CrossbowTranslator.java => item/type/CrossbowItem.java} (72%) create mode 100644 core/src/main/java/org/geysermc/geyser/item/type/DyeableArmorItem.java create mode 100644 core/src/main/java/org/geysermc/geyser/item/type/DyeableHorseArmorItem.java rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/EnchantedBookTranslator.java => item/type/EnchantedBookItem.java} (50%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/FireworkBaseTranslator.java => item/type/FireworkRocketItem.java} (71%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/FireworkStarTranslator.java => item/type/FireworkStarItem.java} (70%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/LodestoneCompassTranslator.java => item/type/FishingRodItem.java} (54%) rename ap/src/main/java/org/geysermc/geyser/processor/ItemRemapperProcessor.java => core/src/main/java/org/geysermc/geyser/item/type/FlowerItem.java (69%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/PlayerHeadTranslator.java => item/type/PlayerHeadItem.java} (68%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/BookPagesTranslator.java => item/type/ReadableBookItem.java} (64%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/ShulkerBoxItemTranslator.java => item/type/ShulkerBoxItem.java} (76%) rename core/src/main/java/org/geysermc/geyser/{translator/inventory/item/nbt/TropicalFishBucketTranslator.java => item/type/TropicalFishBucketItem.java} (79%) delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BasicItemTranslator.java delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/EnchantmentTranslator.java delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkRocketTranslator.java delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/MapItemTranslator.java diff --git a/ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor index 1f6475b61..7b8d03200 100644 --- a/ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor +++ b/ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -1,5 +1,4 @@ org.geysermc.geyser.processor.BlockEntityProcessor org.geysermc.geyser.processor.CollisionRemapperProcessor -org.geysermc.geyser.processor.ItemRemapperProcessor org.geysermc.geyser.processor.PacketTranslatorProcessor org.geysermc.geyser.processor.SoundHandlerProcessor \ No newline at end of file diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index d6988b052..78d538422 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -195,7 +195,6 @@ public class GeyserImpl implements GeyserApi { /* Initialize translators */ EntityDefinitions.init(); - ItemTranslator.init(); MessageTranslator.init(); // Download the latest asset list and cache it diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java index f5884437c..ec0caac33 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java @@ -51,7 +51,7 @@ public class AbstractFishEntity extends WaterEntity { @Nonnull @Override protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { - if (EntityUtils.attemptToBucket(session, itemInHand)) { + if (EntityUtils.attemptToBucket(itemInHand)) { return InteractionResult.SUCCESS; } else { return super.mobInteract(hand, itemInHand); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java index 69abd3bba..06eb0791b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java @@ -77,7 +77,7 @@ public class AxolotlEntity extends AnimalEntity { @Nonnull @Override protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { - if (EntityUtils.attemptToBucket(session, itemInHand)) { + if (EntityUtils.attemptToBucket(itemInHand)) { return InteractionResult.SUCCESS; } else { return super.mobInteract(hand, itemInHand); 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 c650e0703..2d136a169 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 @@ -32,6 +32,7 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.FlowerItem; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; @@ -76,7 +77,7 @@ public class MooshroomEntity extends AnimalEntity { } else if (!isBaby && isAlive() && itemInHand.asItem() == Items.SHEARS) { // Shear items return InteractionResult.SUCCESS; - } else if (isBrown && session.getTagCache().isSmallFlower(itemInHand) && itemInHand.getMapping(session).isHasSuspiciousStewEffect()) { + } else if (isBrown && session.getTagCache().isSmallFlower(itemInHand) && itemInHand.asItem() instanceof FlowerItem) { // ? return InteractionResult.SUCCESS; } 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 d76816592..dee2a8760 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -27,6 +27,8 @@ package org.geysermc.geyser.inventory; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import lombok.AccessLevel; +import lombok.Getter; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import lombok.Data; import org.geysermc.geyser.item.type.Item; @@ -107,6 +109,7 @@ public class GeyserItemStack { return session.getItemMappings().getMapping(this.javaId); } + @Getter(AccessLevel.NONE) private Item item; //TODO public Item asItem() { 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 b9652542b..c4137fba9 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 @@ -43,34 +43,26 @@ public class StoredItemMappings { private final ItemMapping bamboo; private final ItemMapping banner; private final ItemMapping barrier; - private final ItemMapping bucket; private final ItemMapping compass; private final ItemMapping crossbow; - private final ItemMapping frogspawn; private final ItemMapping glassBottle; - private final ItemMapping lilyPad; private final ItemMapping milkBucket; private final ItemMapping powderSnowBucket; private final ItemMapping egg; private final ItemMapping shield; - private final ItemMapping waterBucket; private final ItemMapping wheat; public StoredItemMappings(Map itemMappings) { this.bamboo = load(itemMappings, Items.BAMBOO); 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.bucket = load(itemMappings, Items.BUCKET); this.compass = load(itemMappings, Items.COMPASS); this.crossbow = load(itemMappings, Items.CROSSBOW); - this.frogspawn = load(itemMappings, Items.FROGSPAWN); this.glassBottle = load(itemMappings, Items.GLASS_BOTTLE); - this.lilyPad = load(itemMappings, Items.LILY_PAD); this.milkBucket = load(itemMappings, Items.MILK_BUCKET); this.powderSnowBucket = load(itemMappings, Items.POWDER_SNOW_BUCKET); this.egg = load(itemMappings, Items.EGG); this.shield = load(itemMappings, Items.SHIELD); - this.waterBucket = load(itemMappings, Items.WATER_BUCKET); this.wheat = load(itemMappings, Items.WHEAT); } diff --git a/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java b/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java index adb72350d..315a8cd4d 100644 --- a/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java +++ b/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java @@ -27,22 +27,24 @@ package org.geysermc.geyser.item; import org.geysermc.geyser.item.type.Item; +import java.util.function.Supplier; + public enum ArmorMaterial { - LEATHER(Items.LEATHER), - CHAIN(Items.IRON_INGOT), - IRON(Items.IRON_INGOT), - GOLD(Items.GOLD_INGOT), - DIAMOND(Items.DIAMOND), - TURTLE(Items.SCUTE), - NETHERITE(Items.NETHERITE_INGOT); + LEATHER(() -> Items.LEATHER), + CHAIN(() -> Items.IRON_INGOT), + IRON(() -> Items.IRON_INGOT), + GOLD(() -> Items.GOLD_INGOT), + DIAMOND(() -> Items.DIAMOND), + TURTLE(() -> Items.SCUTE), + NETHERITE(() -> Items.NETHERITE_INGOT); - private final Item repairIngredient; + private final Supplier repairIngredient; - ArmorMaterial(Item repairIngredient) { + ArmorMaterial(Supplier repairIngredient) { this.repairIngredient = repairIngredient; } public Item getRepairIngredient() { - return repairIngredient; + return repairIngredient.get(); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/LeatherArmorTranslator.java b/core/src/main/java/org/geysermc/geyser/item/DyeableLeatherItem.java similarity index 55% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/LeatherArmorTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/DyeableLeatherItem.java index ea855ce52..e0eec767f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/LeatherArmorTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/DyeableLeatherItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,53 +23,34 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntTag; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.type.ItemMapping; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; -import java.util.List; +public interface DyeableLeatherItem { -@ItemRemapper -public class LeatherArmorTranslator extends NbtItemStackTranslator { - - private static final List ITEMS = List.of(Items.LEATHER_HELMET, Items.LEATHER_CHESTPLATE, - Items.LEATHER_LEGGINGS, Items.LEATHER_BOOTS, Items.LEATHER_HORSE_ARMOR); - - @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - CompoundTag displayTag = itemTag.get("display"); + static void translateNbtToBedrock(CompoundTag tag) { + CompoundTag displayTag = tag.get("display"); if (displayTag == null) { return; } IntTag color = displayTag.remove("color"); if (color != null) { - itemTag.put(new IntTag("customColor", color.getValue())); + tag.put(new IntTag("customColor", color.getValue())); } } - @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - IntTag color = itemTag.get("customColor"); + static void translateNbtToJava(CompoundTag tag) { + IntTag color = tag.get("customColor"); if (color == null) { return; } - CompoundTag displayTag = itemTag.get("display"); + CompoundTag displayTag = tag.get("display"); if (displayTag == null) { displayTag = new CompoundTag("display"); } displayTag.put(color); - itemTag.remove("customColor"); - } - - @Override - public boolean acceptItem(Item item) { - return ITEMS.contains(item); + tag.remove("customColor"); } } 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 ad13faf19..68c7cf786 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -34,730 +34,731 @@ import static org.geysermc.geyser.item.type.Item.builder; /** * A list, in order, of all Java items. */ +@SuppressWarnings("unused") public final class Items { public static final Item AIR = register(new Item("air", builder())); - public static final Item STONE = register(new Item("stone", builder())); - public static final Item GRANITE = register(new Item("granite", builder())); - public static final Item POLISHED_GRANITE = register(new Item("polished_granite", builder())); - public static final Item DIORITE = register(new Item("diorite", builder())); - public static final Item POLISHED_DIORITE = register(new Item("polished_diorite", builder())); - public static final Item ANDESITE = register(new Item("andesite", builder())); - public static final Item POLISHED_ANDESITE = register(new Item("polished_andesite", builder())); - public static final Item DEEPSLATE = register(new Item("deepslate", builder())); - public static final Item COBBLED_DEEPSLATE = register(new Item("cobbled_deepslate", builder())); - public static final Item POLISHED_DEEPSLATE = register(new Item("polished_deepslate", builder())); - public static final Item CALCITE = register(new Item("calcite", builder())); - public static final Item TUFF = register(new Item("tuff", builder())); - public static final Item DRIPSTONE_BLOCK = register(new Item("dripstone_block", builder())); - public static final Item GRASS_BLOCK = register(new Item("grass_block", builder())); - public static final Item DIRT = register(new Item("dirt", builder())); - public static final Item COARSE_DIRT = register(new Item("coarse_dirt", builder())); - public static final Item PODZOL = register(new Item("podzol", builder())); - public static final Item ROOTED_DIRT = register(new Item("rooted_dirt", builder())); - public static final Item MUD = register(new Item("mud", builder())); - public static final Item CRIMSON_NYLIUM = register(new Item("crimson_nylium", builder())); - public static final Item WARPED_NYLIUM = register(new Item("warped_nylium", builder())); - public static final Item COBBLESTONE = register(new Item("cobblestone", builder())); - public static final Item OAK_PLANKS = register(new Item("oak_planks", builder())); - public static final Item SPRUCE_PLANKS = register(new Item("spruce_planks", builder())); - public static final Item BIRCH_PLANKS = register(new Item("birch_planks", builder())); - public static final Item JUNGLE_PLANKS = register(new Item("jungle_planks", builder())); - public static final Item ACACIA_PLANKS = register(new Item("acacia_planks", builder())); - public static final Item CHERRY_PLANKS = register(new Item("cherry_planks", builder())); - public static final Item DARK_OAK_PLANKS = register(new Item("dark_oak_planks", builder())); - public static final Item MANGROVE_PLANKS = register(new Item("mangrove_planks", builder())); - public static final Item BAMBOO_PLANKS = register(new Item("bamboo_planks", builder())); - public static final Item CRIMSON_PLANKS = register(new Item("crimson_planks", builder())); - public static final Item WARPED_PLANKS = register(new Item("warped_planks", builder())); - public static final Item BAMBOO_MOSAIC = register(new Item("bamboo_mosaic", builder())); - public static final Item OAK_SAPLING = register(new Item("oak_sapling", builder())); - public static final Item SPRUCE_SAPLING = register(new Item("spruce_sapling", builder())); - public static final Item BIRCH_SAPLING = register(new Item("birch_sapling", builder())); - public static final Item JUNGLE_SAPLING = register(new Item("jungle_sapling", builder())); - public static final Item ACACIA_SAPLING = register(new Item("acacia_sapling", builder())); - public static final Item CHERRY_SAPLING = register(new Item("cherry_sapling", builder())); - public static final Item DARK_OAK_SAPLING = register(new Item("dark_oak_sapling", builder())); - public static final Item MANGROVE_PROPAGULE = register(new Item("mangrove_propagule", builder())); - public static final Item BEDROCK = register(new Item("bedrock", builder())); - public static final Item SAND = register(new Item("sand", builder())); - public static final Item SUSPICIOUS_SAND = register(new Item("suspicious_sand", builder())); - public static final Item RED_SAND = register(new Item("red_sand", builder())); - public static final Item GRAVEL = register(new Item("gravel", builder())); - public static final Item COAL_ORE = register(new Item("coal_ore", builder())); - public static final Item DEEPSLATE_COAL_ORE = register(new Item("deepslate_coal_ore", builder())); - public static final Item IRON_ORE = register(new Item("iron_ore", builder())); - public static final Item DEEPSLATE_IRON_ORE = register(new Item("deepslate_iron_ore", builder())); - public static final Item COPPER_ORE = register(new Item("copper_ore", builder())); - public static final Item DEEPSLATE_COPPER_ORE = register(new Item("deepslate_copper_ore", builder())); - public static final Item GOLD_ORE = register(new Item("gold_ore", builder())); - public static final Item DEEPSLATE_GOLD_ORE = register(new Item("deepslate_gold_ore", builder())); - public static final Item REDSTONE_ORE = register(new Item("redstone_ore", builder())); - public static final Item DEEPSLATE_REDSTONE_ORE = register(new Item("deepslate_redstone_ore", builder())); - public static final Item EMERALD_ORE = register(new Item("emerald_ore", builder())); - public static final Item DEEPSLATE_EMERALD_ORE = register(new Item("deepslate_emerald_ore", builder())); - public static final Item LAPIS_ORE = register(new Item("lapis_ore", builder())); - public static final Item DEEPSLATE_LAPIS_ORE = register(new Item("deepslate_lapis_ore", builder())); - public static final Item DIAMOND_ORE = register(new Item("diamond_ore", builder())); - public static final Item DEEPSLATE_DIAMOND_ORE = register(new Item("deepslate_diamond_ore", builder())); - public static final Item NETHER_GOLD_ORE = register(new Item("nether_gold_ore", builder())); - public static final Item NETHER_QUARTZ_ORE = register(new Item("nether_quartz_ore", builder())); - public static final Item ANCIENT_DEBRIS = register(new Item("ancient_debris", builder())); - public static final Item COAL_BLOCK = register(new Item("coal_block", builder())); - public static final Item RAW_IRON_BLOCK = register(new Item("raw_iron_block", builder())); - public static final Item RAW_COPPER_BLOCK = register(new Item("raw_copper_block", builder())); - public static final Item RAW_GOLD_BLOCK = register(new Item("raw_gold_block", builder())); - public static final Item AMETHYST_BLOCK = register(new Item("amethyst_block", builder())); - public static final Item BUDDING_AMETHYST = register(new Item("budding_amethyst", builder())); - public static final Item IRON_BLOCK = register(new Item("iron_block", builder())); - public static final Item COPPER_BLOCK = register(new Item("copper_block", builder())); - public static final Item GOLD_BLOCK = register(new Item("gold_block", builder())); - public static final Item DIAMOND_BLOCK = register(new Item("diamond_block", builder())); - public static final Item NETHERITE_BLOCK = register(new Item("netherite_block", builder())); - public static final Item EXPOSED_COPPER = register(new Item("exposed_copper", builder())); - public static final Item WEATHERED_COPPER = register(new Item("weathered_copper", builder())); - public static final Item OXIDIZED_COPPER = register(new Item("oxidized_copper", builder())); - public static final Item CUT_COPPER = register(new Item("cut_copper", builder())); - public static final Item EXPOSED_CUT_COPPER = register(new Item("exposed_cut_copper", builder())); - public static final Item WEATHERED_CUT_COPPER = register(new Item("weathered_cut_copper", builder())); - public static final Item OXIDIZED_CUT_COPPER = register(new Item("oxidized_cut_copper", builder())); - public static final Item CUT_COPPER_STAIRS = register(new Item("cut_copper_stairs", builder())); - public static final Item EXPOSED_CUT_COPPER_STAIRS = register(new Item("exposed_cut_copper_stairs", builder())); - public static final Item WEATHERED_CUT_COPPER_STAIRS = register(new Item("weathered_cut_copper_stairs", builder())); - public static final Item OXIDIZED_CUT_COPPER_STAIRS = register(new Item("oxidized_cut_copper_stairs", builder())); - public static final Item CUT_COPPER_SLAB = register(new Item("cut_copper_slab", builder())); - public static final Item EXPOSED_CUT_COPPER_SLAB = register(new Item("exposed_cut_copper_slab", builder())); - public static final Item WEATHERED_CUT_COPPER_SLAB = register(new Item("weathered_cut_copper_slab", builder())); - public static final Item OXIDIZED_CUT_COPPER_SLAB = register(new Item("oxidized_cut_copper_slab", builder())); - public static final Item WAXED_COPPER_BLOCK = register(new Item("waxed_copper_block", builder())); - public static final Item WAXED_EXPOSED_COPPER = register(new Item("waxed_exposed_copper", builder())); - public static final Item WAXED_WEATHERED_COPPER = register(new Item("waxed_weathered_copper", builder())); - public static final Item WAXED_OXIDIZED_COPPER = register(new Item("waxed_oxidized_copper", builder())); - public static final Item WAXED_CUT_COPPER = register(new Item("waxed_cut_copper", builder())); - public static final Item WAXED_EXPOSED_CUT_COPPER = register(new Item("waxed_exposed_cut_copper", builder())); - public static final Item WAXED_WEATHERED_CUT_COPPER = register(new Item("waxed_weathered_cut_copper", builder())); - public static final Item WAXED_OXIDIZED_CUT_COPPER = register(new Item("waxed_oxidized_cut_copper", builder())); - public static final Item WAXED_CUT_COPPER_STAIRS = register(new Item("waxed_cut_copper_stairs", builder())); - public static final Item WAXED_EXPOSED_CUT_COPPER_STAIRS = register(new Item("waxed_exposed_cut_copper_stairs", builder())); - public static final Item WAXED_WEATHERED_CUT_COPPER_STAIRS = register(new Item("waxed_weathered_cut_copper_stairs", builder())); - public static final Item WAXED_OXIDIZED_CUT_COPPER_STAIRS = register(new Item("waxed_oxidized_cut_copper_stairs", builder())); - public static final Item WAXED_CUT_COPPER_SLAB = register(new Item("waxed_cut_copper_slab", builder())); - public static final Item WAXED_EXPOSED_CUT_COPPER_SLAB = register(new Item("waxed_exposed_cut_copper_slab", builder())); - public static final Item WAXED_WEATHERED_CUT_COPPER_SLAB = register(new Item("waxed_weathered_cut_copper_slab", builder())); - public static final Item WAXED_OXIDIZED_CUT_COPPER_SLAB = register(new Item("waxed_oxidized_cut_copper_slab", builder())); - public static final Item OAK_LOG = register(new Item("oak_log", builder())); - public static final Item SPRUCE_LOG = register(new Item("spruce_log", builder())); - public static final Item BIRCH_LOG = register(new Item("birch_log", builder())); - public static final Item JUNGLE_LOG = register(new Item("jungle_log", builder())); - public static final Item ACACIA_LOG = register(new Item("acacia_log", builder())); - public static final Item CHERRY_LOG = register(new Item("cherry_log", builder())); - public static final Item DARK_OAK_LOG = register(new Item("dark_oak_log", builder())); - public static final Item MANGROVE_LOG = register(new Item("mangrove_log", builder())); - public static final Item MANGROVE_ROOTS = register(new Item("mangrove_roots", builder())); - public static final Item MUDDY_MANGROVE_ROOTS = register(new Item("muddy_mangrove_roots", builder())); - public static final Item CRIMSON_STEM = register(new Item("crimson_stem", builder())); - public static final Item WARPED_STEM = register(new Item("warped_stem", builder())); - public static final Item BAMBOO_BLOCK = register(new Item("bamboo_block", builder())); - public static final Item STRIPPED_OAK_LOG = register(new Item("stripped_oak_log", builder())); - public static final Item STRIPPED_SPRUCE_LOG = register(new Item("stripped_spruce_log", builder())); - public static final Item STRIPPED_BIRCH_LOG = register(new Item("stripped_birch_log", builder())); - public static final Item STRIPPED_JUNGLE_LOG = register(new Item("stripped_jungle_log", builder())); - public static final Item STRIPPED_ACACIA_LOG = register(new Item("stripped_acacia_log", builder())); - public static final Item STRIPPED_CHERRY_LOG = register(new Item("stripped_cherry_log", builder())); - public static final Item STRIPPED_DARK_OAK_LOG = register(new Item("stripped_dark_oak_log", builder())); - public static final Item STRIPPED_MANGROVE_LOG = register(new Item("stripped_mangrove_log", builder())); - public static final Item STRIPPED_CRIMSON_STEM = register(new Item("stripped_crimson_stem", builder())); - public static final Item STRIPPED_WARPED_STEM = register(new Item("stripped_warped_stem", builder())); - public static final Item STRIPPED_OAK_WOOD = register(new Item("stripped_oak_wood", builder())); - public static final Item STRIPPED_SPRUCE_WOOD = register(new Item("stripped_spruce_wood", builder())); - public static final Item STRIPPED_BIRCH_WOOD = register(new Item("stripped_birch_wood", builder())); - public static final Item STRIPPED_JUNGLE_WOOD = register(new Item("stripped_jungle_wood", builder())); - public static final Item STRIPPED_ACACIA_WOOD = register(new Item("stripped_acacia_wood", builder())); - public static final Item STRIPPED_CHERRY_WOOD = register(new Item("stripped_cherry_wood", builder())); - public static final Item STRIPPED_DARK_OAK_WOOD = register(new Item("stripped_dark_oak_wood", builder())); - public static final Item STRIPPED_MANGROVE_WOOD = register(new Item("stripped_mangrove_wood", builder())); - public static final Item STRIPPED_CRIMSON_HYPHAE = register(new Item("stripped_crimson_hyphae", builder())); - public static final Item STRIPPED_WARPED_HYPHAE = register(new Item("stripped_warped_hyphae", builder())); - public static final Item STRIPPED_BAMBOO_BLOCK = register(new Item("stripped_bamboo_block", builder())); - public static final Item OAK_WOOD = register(new Item("oak_wood", builder())); - public static final Item SPRUCE_WOOD = register(new Item("spruce_wood", builder())); - public static final Item BIRCH_WOOD = register(new Item("birch_wood", builder())); - public static final Item JUNGLE_WOOD = register(new Item("jungle_wood", builder())); - public static final Item ACACIA_WOOD = register(new Item("acacia_wood", builder())); - public static final Item CHERRY_WOOD = register(new Item("cherry_wood", builder())); - public static final Item DARK_OAK_WOOD = register(new Item("dark_oak_wood", builder())); - public static final Item MANGROVE_WOOD = register(new Item("mangrove_wood", builder())); - public static final Item CRIMSON_HYPHAE = register(new Item("crimson_hyphae", builder())); - public static final Item WARPED_HYPHAE = register(new Item("warped_hyphae", builder())); - public static final Item OAK_LEAVES = register(new Item("oak_leaves", builder())); - public static final Item SPRUCE_LEAVES = register(new Item("spruce_leaves", builder())); - public static final Item BIRCH_LEAVES = register(new Item("birch_leaves", builder())); - public static final Item JUNGLE_LEAVES = register(new Item("jungle_leaves", builder())); - public static final Item ACACIA_LEAVES = register(new Item("acacia_leaves", builder())); - public static final Item CHERRY_LEAVES = register(new Item("cherry_leaves", builder())); - public static final Item DARK_OAK_LEAVES = register(new Item("dark_oak_leaves", builder())); - public static final Item MANGROVE_LEAVES = register(new Item("mangrove_leaves", builder())); - public static final Item AZALEA_LEAVES = register(new Item("azalea_leaves", builder())); - public static final Item FLOWERING_AZALEA_LEAVES = register(new Item("flowering_azalea_leaves", builder())); - public static final Item SPONGE = register(new Item("sponge", builder())); - public static final Item WET_SPONGE = register(new Item("wet_sponge", builder())); - public static final Item GLASS = register(new Item("glass", builder())); - public static final Item TINTED_GLASS = register(new Item("tinted_glass", builder())); - public static final Item LAPIS_BLOCK = register(new Item("lapis_block", builder())); - public static final Item SANDSTONE = register(new Item("sandstone", builder())); - public static final Item CHISELED_SANDSTONE = register(new Item("chiseled_sandstone", builder())); - public static final Item CUT_SANDSTONE = register(new Item("cut_sandstone", builder())); - public static final Item COBWEB = register(new Item("cobweb", builder())); - public static final Item GRASS = register(new Item("grass", builder())); - public static final Item FERN = register(new Item("fern", builder())); - public static final Item AZALEA = register(new Item("azalea", builder())); - public static final Item FLOWERING_AZALEA = register(new Item("flowering_azalea", builder())); - public static final Item DEAD_BUSH = register(new Item("dead_bush", builder())); - public static final Item SEAGRASS = register(new Item("seagrass", builder())); - public static final Item SEA_PICKLE = register(new Item("sea_pickle", builder())); - public static final Item WHITE_WOOL = register(new Item("white_wool", builder())); - public static final Item ORANGE_WOOL = register(new Item("orange_wool", builder())); - public static final Item MAGENTA_WOOL = register(new Item("magenta_wool", builder())); - public static final Item LIGHT_BLUE_WOOL = register(new Item("light_blue_wool", builder())); - public static final Item YELLOW_WOOL = register(new Item("yellow_wool", builder())); - public static final Item LIME_WOOL = register(new Item("lime_wool", builder())); - public static final Item PINK_WOOL = register(new Item("pink_wool", builder())); - public static final Item GRAY_WOOL = register(new Item("gray_wool", builder())); - public static final Item LIGHT_GRAY_WOOL = register(new Item("light_gray_wool", builder())); - public static final Item CYAN_WOOL = register(new Item("cyan_wool", builder())); - public static final Item PURPLE_WOOL = register(new Item("purple_wool", builder())); - public static final Item BLUE_WOOL = register(new Item("blue_wool", builder())); - public static final Item BROWN_WOOL = register(new Item("brown_wool", builder())); - public static final Item GREEN_WOOL = register(new Item("green_wool", builder())); - public static final Item RED_WOOL = register(new Item("red_wool", builder())); - public static final Item BLACK_WOOL = register(new Item("black_wool", builder())); - public static final Item DANDELION = register(new Item("dandelion", builder())); - public static final Item POPPY = register(new Item("poppy", builder())); - public static final Item BLUE_ORCHID = register(new Item("blue_orchid", builder())); - public static final Item ALLIUM = register(new Item("allium", builder())); - public static final Item AZURE_BLUET = register(new Item("azure_bluet", builder())); - public static final Item RED_TULIP = register(new Item("red_tulip", builder())); - public static final Item ORANGE_TULIP = register(new Item("orange_tulip", builder())); - public static final Item WHITE_TULIP = register(new Item("white_tulip", builder())); - public static final Item PINK_TULIP = register(new Item("pink_tulip", builder())); - public static final Item OXEYE_DAISY = register(new Item("oxeye_daisy", builder())); - public static final Item CORNFLOWER = register(new Item("cornflower", builder())); - public static final Item LILY_OF_THE_VALLEY = register(new Item("lily_of_the_valley", builder())); - public static final Item WITHER_ROSE = register(new Item("wither_rose", builder())); - public static final Item TORCHFLOWER = register(new Item("torchflower", builder())); - public static final Item SPORE_BLOSSOM = register(new Item("spore_blossom", builder())); - public static final Item BROWN_MUSHROOM = register(new Item("brown_mushroom", builder())); - public static final Item RED_MUSHROOM = register(new Item("red_mushroom", builder())); - public static final Item CRIMSON_FUNGUS = register(new Item("crimson_fungus", builder())); - public static final Item WARPED_FUNGUS = register(new Item("warped_fungus", builder())); - public static final Item CRIMSON_ROOTS = register(new Item("crimson_roots", builder())); - public static final Item WARPED_ROOTS = register(new Item("warped_roots", builder())); - public static final Item NETHER_SPROUTS = register(new Item("nether_sprouts", builder())); - public static final Item WEEPING_VINES = register(new Item("weeping_vines", builder())); - public static final Item TWISTING_VINES = register(new Item("twisting_vines", builder())); - public static final Item SUGAR_CANE = register(new Item("sugar_cane", builder())); - public static final Item KELP = register(new Item("kelp", builder())); - public static final Item MOSS_CARPET = register(new Item("moss_carpet", builder())); - public static final Item PINK_PETALS = register(new Item("pink_petals", builder())); - public static final Item MOSS_BLOCK = register(new Item("moss_block", builder())); - public static final Item HANGING_ROOTS = register(new Item("hanging_roots", builder())); - public static final Item BIG_DRIPLEAF = register(new Item("big_dripleaf", builder())); - public static final Item SMALL_DRIPLEAF = register(new Item("small_dripleaf", builder())); - public static final Item BAMBOO = register(new Item("bamboo", builder())); - public static final Item OAK_SLAB = register(new Item("oak_slab", builder())); - public static final Item SPRUCE_SLAB = register(new Item("spruce_slab", builder())); - public static final Item BIRCH_SLAB = register(new Item("birch_slab", builder())); - public static final Item JUNGLE_SLAB = register(new Item("jungle_slab", builder())); - public static final Item ACACIA_SLAB = register(new Item("acacia_slab", builder())); - public static final Item CHERRY_SLAB = register(new Item("cherry_slab", builder())); - public static final Item DARK_OAK_SLAB = register(new Item("dark_oak_slab", builder())); - public static final Item MANGROVE_SLAB = register(new Item("mangrove_slab", builder())); - public static final Item BAMBOO_SLAB = register(new Item("bamboo_slab", builder())); - public static final Item BAMBOO_MOSAIC_SLAB = register(new Item("bamboo_mosaic_slab", builder())); - public static final Item CRIMSON_SLAB = register(new Item("crimson_slab", builder())); - public static final Item WARPED_SLAB = register(new Item("warped_slab", builder())); - public static final Item STONE_SLAB = register(new Item("stone_slab", builder())); - public static final Item SMOOTH_STONE_SLAB = register(new Item("smooth_stone_slab", builder())); - public static final Item SANDSTONE_SLAB = register(new Item("sandstone_slab", builder())); - public static final Item CUT_SANDSTONE_SLAB = register(new Item("cut_sandstone_slab", builder())); - public static final Item PETRIFIED_OAK_SLAB = register(new Item("petrified_oak_slab", builder())); - public static final Item COBBLESTONE_SLAB = register(new Item("cobblestone_slab", builder())); - public static final Item BRICK_SLAB = register(new Item("brick_slab", builder())); - public static final Item STONE_BRICK_SLAB = register(new Item("stone_brick_slab", builder())); - public static final Item MUD_BRICK_SLAB = register(new Item("mud_brick_slab", builder())); - public static final Item NETHER_BRICK_SLAB = register(new Item("nether_brick_slab", builder())); - public static final Item QUARTZ_SLAB = register(new Item("quartz_slab", builder())); - public static final Item RED_SANDSTONE_SLAB = register(new Item("red_sandstone_slab", builder())); - public static final Item CUT_RED_SANDSTONE_SLAB = register(new Item("cut_red_sandstone_slab", builder())); - public static final Item PURPUR_SLAB = register(new Item("purpur_slab", builder())); - public static final Item PRISMARINE_SLAB = register(new Item("prismarine_slab", builder())); - public static final Item PRISMARINE_BRICK_SLAB = register(new Item("prismarine_brick_slab", builder())); - public static final Item DARK_PRISMARINE_SLAB = register(new Item("dark_prismarine_slab", builder())); - public static final Item SMOOTH_QUARTZ = register(new Item("smooth_quartz", builder())); - public static final Item SMOOTH_RED_SANDSTONE = register(new Item("smooth_red_sandstone", builder())); - public static final Item SMOOTH_SANDSTONE = register(new Item("smooth_sandstone", builder())); - public static final Item SMOOTH_STONE = register(new Item("smooth_stone", builder())); - public static final Item BRICKS = register(new Item("bricks", builder())); - public static final Item BOOKSHELF = register(new Item("bookshelf", builder())); - public static final Item CHISELED_BOOKSHELF = register(new Item("chiseled_bookshelf", builder())); - public static final Item DECORATED_POT = register(new Item("decorated_pot", builder().stackSize(1))); - public static final Item MOSSY_COBBLESTONE = register(new Item("mossy_cobblestone", builder())); - public static final Item OBSIDIAN = register(new Item("obsidian", builder())); - public static final Item TORCH = register(new Item("torch", builder())); - public static final Item END_ROD = register(new Item("end_rod", builder())); - public static final Item CHORUS_PLANT = register(new Item("chorus_plant", builder())); - public static final Item CHORUS_FLOWER = register(new Item("chorus_flower", builder())); - public static final Item PURPUR_BLOCK = register(new Item("purpur_block", builder())); - public static final Item PURPUR_PILLAR = register(new Item("purpur_pillar", builder())); - public static final Item PURPUR_STAIRS = register(new Item("purpur_stairs", builder())); - public static final Item SPAWNER = register(new Item("spawner", builder())); - public static final Item CHEST = register(new Item("chest", builder())); - public static final Item CRAFTING_TABLE = register(new Item("crafting_table", builder())); - public static final Item FARMLAND = register(new Item("farmland", builder())); - public static final Item FURNACE = register(new Item("furnace", builder())); - public static final Item LADDER = register(new Item("ladder", builder())); - public static final Item COBBLESTONE_STAIRS = register(new Item("cobblestone_stairs", builder())); - public static final Item SNOW = register(new Item("snow", builder())); - public static final Item ICE = register(new Item("ice", builder())); - public static final Item SNOW_BLOCK = register(new Item("snow_block", builder())); - public static final Item CACTUS = register(new Item("cactus", builder())); - public static final Item CLAY = register(new Item("clay", builder())); - public static final Item JUKEBOX = register(new Item("jukebox", builder())); - public static final Item OAK_FENCE = register(new Item("oak_fence", builder())); - public static final Item SPRUCE_FENCE = register(new Item("spruce_fence", builder())); - public static final Item BIRCH_FENCE = register(new Item("birch_fence", builder())); - public static final Item JUNGLE_FENCE = register(new Item("jungle_fence", builder())); - public static final Item ACACIA_FENCE = register(new Item("acacia_fence", builder())); - public static final Item CHERRY_FENCE = register(new Item("cherry_fence", builder())); - public static final Item DARK_OAK_FENCE = register(new Item("dark_oak_fence", builder())); - public static final Item MANGROVE_FENCE = register(new Item("mangrove_fence", builder())); - public static final Item BAMBOO_FENCE = register(new Item("bamboo_fence", builder())); - public static final Item CRIMSON_FENCE = register(new Item("crimson_fence", builder())); - public static final Item WARPED_FENCE = register(new Item("warped_fence", builder())); - public static final Item PUMPKIN = register(new Item("pumpkin", builder())); - public static final Item CARVED_PUMPKIN = register(new Item("carved_pumpkin", builder())); - public static final Item JACK_O_LANTERN = register(new Item("jack_o_lantern", builder())); - public static final Item NETHERRACK = register(new Item("netherrack", builder())); - public static final Item SOUL_SAND = register(new Item("soul_sand", builder())); - public static final Item SOUL_SOIL = register(new Item("soul_soil", builder())); - public static final Item BASALT = register(new Item("basalt", builder())); - public static final Item POLISHED_BASALT = register(new Item("polished_basalt", builder())); - public static final Item SMOOTH_BASALT = register(new Item("smooth_basalt", builder())); - public static final Item SOUL_TORCH = register(new Item("soul_torch", builder())); - public static final Item GLOWSTONE = register(new Item("glowstone", builder())); - public static final Item INFESTED_STONE = register(new Item("infested_stone", builder())); - public static final Item INFESTED_COBBLESTONE = register(new Item("infested_cobblestone", builder())); - public static final Item INFESTED_STONE_BRICKS = register(new Item("infested_stone_bricks", builder())); - public static final Item INFESTED_MOSSY_STONE_BRICKS = register(new Item("infested_mossy_stone_bricks", builder())); - public static final Item INFESTED_CRACKED_STONE_BRICKS = register(new Item("infested_cracked_stone_bricks", builder())); - public static final Item INFESTED_CHISELED_STONE_BRICKS = register(new Item("infested_chiseled_stone_bricks", builder())); - public static final Item INFESTED_DEEPSLATE = register(new Item("infested_deepslate", builder())); - public static final Item STONE_BRICKS = register(new Item("stone_bricks", builder())); - public static final Item MOSSY_STONE_BRICKS = register(new Item("mossy_stone_bricks", builder())); - public static final Item CRACKED_STONE_BRICKS = register(new Item("cracked_stone_bricks", builder())); - public static final Item CHISELED_STONE_BRICKS = register(new Item("chiseled_stone_bricks", builder())); - public static final Item PACKED_MUD = register(new Item("packed_mud", builder())); - public static final Item MUD_BRICKS = register(new Item("mud_bricks", builder())); - public static final Item DEEPSLATE_BRICKS = register(new Item("deepslate_bricks", builder())); - public static final Item CRACKED_DEEPSLATE_BRICKS = register(new Item("cracked_deepslate_bricks", builder())); - public static final Item DEEPSLATE_TILES = register(new Item("deepslate_tiles", builder())); - public static final Item CRACKED_DEEPSLATE_TILES = register(new Item("cracked_deepslate_tiles", builder())); - public static final Item CHISELED_DEEPSLATE = register(new Item("chiseled_deepslate", builder())); - public static final Item REINFORCED_DEEPSLATE = register(new Item("reinforced_deepslate", builder())); - public static final Item BROWN_MUSHROOM_BLOCK = register(new Item("brown_mushroom_block", builder())); - public static final Item RED_MUSHROOM_BLOCK = register(new Item("red_mushroom_block", builder())); - public static final Item MUSHROOM_STEM = register(new Item("mushroom_stem", builder())); - public static final Item IRON_BARS = register(new Item("iron_bars", builder())); - public static final Item CHAIN = register(new Item("chain", builder())); - public static final Item GLASS_PANE = register(new Item("glass_pane", builder())); - public static final Item MELON = register(new Item("melon", builder())); - public static final Item VINE = register(new Item("vine", builder())); - public static final Item GLOW_LICHEN = register(new Item("glow_lichen", builder())); - public static final Item BRICK_STAIRS = register(new Item("brick_stairs", builder())); - public static final Item STONE_BRICK_STAIRS = register(new Item("stone_brick_stairs", builder())); - public static final Item MUD_BRICK_STAIRS = register(new Item("mud_brick_stairs", builder())); - public static final Item MYCELIUM = register(new Item("mycelium", builder())); - public static final Item LILY_PAD = register(new Item("lily_pad", builder())); - public static final Item NETHER_BRICKS = register(new Item("nether_bricks", builder())); - public static final Item CRACKED_NETHER_BRICKS = register(new Item("cracked_nether_bricks", builder())); - public static final Item CHISELED_NETHER_BRICKS = register(new Item("chiseled_nether_bricks", builder())); - public static final Item NETHER_BRICK_FENCE = register(new Item("nether_brick_fence", builder())); - public static final Item NETHER_BRICK_STAIRS = register(new Item("nether_brick_stairs", builder())); - public static final Item SCULK = register(new Item("sculk", builder())); - public static final Item SCULK_VEIN = register(new Item("sculk_vein", builder())); - public static final Item SCULK_CATALYST = register(new Item("sculk_catalyst", builder())); - public static final Item SCULK_SHRIEKER = register(new Item("sculk_shrieker", builder())); - public static final Item ENCHANTING_TABLE = register(new Item("enchanting_table", builder())); - public static final Item END_PORTAL_FRAME = register(new Item("end_portal_frame", builder())); - public static final Item END_STONE = register(new Item("end_stone", builder())); - public static final Item END_STONE_BRICKS = register(new Item("end_stone_bricks", builder())); - public static final Item DRAGON_EGG = register(new Item("dragon_egg", builder())); - public static final Item SANDSTONE_STAIRS = register(new Item("sandstone_stairs", builder())); - public static final Item ENDER_CHEST = register(new Item("ender_chest", builder())); - public static final Item EMERALD_BLOCK = register(new Item("emerald_block", builder())); - public static final Item OAK_STAIRS = register(new Item("oak_stairs", builder())); - public static final Item SPRUCE_STAIRS = register(new Item("spruce_stairs", builder())); - public static final Item BIRCH_STAIRS = register(new Item("birch_stairs", builder())); - public static final Item JUNGLE_STAIRS = register(new Item("jungle_stairs", builder())); - public static final Item ACACIA_STAIRS = register(new Item("acacia_stairs", builder())); - public static final Item CHERRY_STAIRS = register(new Item("cherry_stairs", builder())); - public static final Item DARK_OAK_STAIRS = register(new Item("dark_oak_stairs", builder())); - public static final Item MANGROVE_STAIRS = register(new Item("mangrove_stairs", builder())); - public static final Item BAMBOO_STAIRS = register(new Item("bamboo_stairs", builder())); - public static final Item BAMBOO_MOSAIC_STAIRS = register(new Item("bamboo_mosaic_stairs", builder())); - public static final Item CRIMSON_STAIRS = register(new Item("crimson_stairs", builder())); - public static final Item WARPED_STAIRS = register(new Item("warped_stairs", builder())); - public static final Item COMMAND_BLOCK = register(new Item("command_block", builder())); - public static final Item BEACON = register(new Item("beacon", builder())); - public static final Item COBBLESTONE_WALL = register(new Item("cobblestone_wall", builder())); - public static final Item MOSSY_COBBLESTONE_WALL = register(new Item("mossy_cobblestone_wall", builder())); - public static final Item BRICK_WALL = register(new Item("brick_wall", builder())); - public static final Item PRISMARINE_WALL = register(new Item("prismarine_wall", builder())); - public static final Item RED_SANDSTONE_WALL = register(new Item("red_sandstone_wall", builder())); - public static final Item MOSSY_STONE_BRICK_WALL = register(new Item("mossy_stone_brick_wall", builder())); - public static final Item GRANITE_WALL = register(new Item("granite_wall", builder())); - public static final Item STONE_BRICK_WALL = register(new Item("stone_brick_wall", builder())); - public static final Item MUD_BRICK_WALL = register(new Item("mud_brick_wall", builder())); - public static final Item NETHER_BRICK_WALL = register(new Item("nether_brick_wall", builder())); - public static final Item ANDESITE_WALL = register(new Item("andesite_wall", builder())); - public static final Item RED_NETHER_BRICK_WALL = register(new Item("red_nether_brick_wall", builder())); - public static final Item SANDSTONE_WALL = register(new Item("sandstone_wall", builder())); - public static final Item END_STONE_BRICK_WALL = register(new Item("end_stone_brick_wall", builder())); - public static final Item DIORITE_WALL = register(new Item("diorite_wall", builder())); - public static final Item BLACKSTONE_WALL = register(new Item("blackstone_wall", builder())); - public static final Item POLISHED_BLACKSTONE_WALL = register(new Item("polished_blackstone_wall", builder())); - public static final Item POLISHED_BLACKSTONE_BRICK_WALL = register(new Item("polished_blackstone_brick_wall", builder())); - public static final Item COBBLED_DEEPSLATE_WALL = register(new Item("cobbled_deepslate_wall", builder())); - public static final Item POLISHED_DEEPSLATE_WALL = register(new Item("polished_deepslate_wall", builder())); - public static final Item DEEPSLATE_BRICK_WALL = register(new Item("deepslate_brick_wall", builder())); - public static final Item DEEPSLATE_TILE_WALL = register(new Item("deepslate_tile_wall", builder())); - public static final Item ANVIL = register(new Item("anvil", builder())); - public static final Item CHIPPED_ANVIL = register(new Item("chipped_anvil", builder())); - public static final Item DAMAGED_ANVIL = register(new Item("damaged_anvil", builder())); - public static final Item CHISELED_QUARTZ_BLOCK = register(new Item("chiseled_quartz_block", builder())); - public static final Item QUARTZ_BLOCK = register(new Item("quartz_block", builder())); - public static final Item QUARTZ_BRICKS = register(new Item("quartz_bricks", builder())); - public static final Item QUARTZ_PILLAR = register(new Item("quartz_pillar", builder())); - public static final Item QUARTZ_STAIRS = register(new Item("quartz_stairs", builder())); - public static final Item WHITE_TERRACOTTA = register(new Item("white_terracotta", builder())); - public static final Item ORANGE_TERRACOTTA = register(new Item("orange_terracotta", builder())); - public static final Item MAGENTA_TERRACOTTA = register(new Item("magenta_terracotta", builder())); - public static final Item LIGHT_BLUE_TERRACOTTA = register(new Item("light_blue_terracotta", builder())); - public static final Item YELLOW_TERRACOTTA = register(new Item("yellow_terracotta", builder())); - public static final Item LIME_TERRACOTTA = register(new Item("lime_terracotta", builder())); - public static final Item PINK_TERRACOTTA = register(new Item("pink_terracotta", builder())); - public static final Item GRAY_TERRACOTTA = register(new Item("gray_terracotta", builder())); - public static final Item LIGHT_GRAY_TERRACOTTA = register(new Item("light_gray_terracotta", builder())); - public static final Item CYAN_TERRACOTTA = register(new Item("cyan_terracotta", builder())); - public static final Item PURPLE_TERRACOTTA = register(new Item("purple_terracotta", builder())); - public static final Item BLUE_TERRACOTTA = register(new Item("blue_terracotta", builder())); - public static final Item BROWN_TERRACOTTA = register(new Item("brown_terracotta", builder())); - public static final Item GREEN_TERRACOTTA = register(new Item("green_terracotta", builder())); - public static final Item RED_TERRACOTTA = register(new Item("red_terracotta", builder())); - public static final Item BLACK_TERRACOTTA = register(new Item("black_terracotta", builder())); - public static final Item BARRIER = register(new Item("barrier", builder())); - public static final Item LIGHT = register(new Item("light", builder())); - public static final Item HAY_BLOCK = register(new Item("hay_block", builder())); - public static final Item WHITE_CARPET = register(new Item("white_carpet", builder())); - public static final Item ORANGE_CARPET = register(new Item("orange_carpet", builder())); - public static final Item MAGENTA_CARPET = register(new Item("magenta_carpet", builder())); - public static final Item LIGHT_BLUE_CARPET = register(new Item("light_blue_carpet", builder())); - public static final Item YELLOW_CARPET = register(new Item("yellow_carpet", builder())); - public static final Item LIME_CARPET = register(new Item("lime_carpet", builder())); - public static final Item PINK_CARPET = register(new Item("pink_carpet", builder())); - public static final Item GRAY_CARPET = register(new Item("gray_carpet", builder())); - public static final Item LIGHT_GRAY_CARPET = register(new Item("light_gray_carpet", builder())); - public static final Item CYAN_CARPET = register(new Item("cyan_carpet", builder())); - public static final Item PURPLE_CARPET = register(new Item("purple_carpet", builder())); - public static final Item BLUE_CARPET = register(new Item("blue_carpet", builder())); - public static final Item BROWN_CARPET = register(new Item("brown_carpet", builder())); - public static final Item GREEN_CARPET = register(new Item("green_carpet", builder())); - public static final Item RED_CARPET = register(new Item("red_carpet", builder())); - public static final Item BLACK_CARPET = register(new Item("black_carpet", builder())); - public static final Item TERRACOTTA = register(new Item("terracotta", builder())); - public static final Item PACKED_ICE = register(new Item("packed_ice", builder())); - public static final Item DIRT_PATH = register(new Item("dirt_path", builder())); - public static final Item SUNFLOWER = register(new Item("sunflower", builder())); - public static final Item LILAC = register(new Item("lilac", builder())); - public static final Item ROSE_BUSH = register(new Item("rose_bush", builder())); - public static final Item PEONY = register(new Item("peony", builder())); - public static final Item TALL_GRASS = register(new Item("tall_grass", builder())); - public static final Item LARGE_FERN = register(new Item("large_fern", builder())); - public static final Item WHITE_STAINED_GLASS = register(new Item("white_stained_glass", builder())); - public static final Item ORANGE_STAINED_GLASS = register(new Item("orange_stained_glass", builder())); - public static final Item MAGENTA_STAINED_GLASS = register(new Item("magenta_stained_glass", builder())); - public static final Item LIGHT_BLUE_STAINED_GLASS = register(new Item("light_blue_stained_glass", builder())); - public static final Item YELLOW_STAINED_GLASS = register(new Item("yellow_stained_glass", builder())); - public static final Item LIME_STAINED_GLASS = register(new Item("lime_stained_glass", builder())); - public static final Item PINK_STAINED_GLASS = register(new Item("pink_stained_glass", builder())); - public static final Item GRAY_STAINED_GLASS = register(new Item("gray_stained_glass", builder())); - public static final Item LIGHT_GRAY_STAINED_GLASS = register(new Item("light_gray_stained_glass", builder())); - public static final Item CYAN_STAINED_GLASS = register(new Item("cyan_stained_glass", builder())); - public static final Item PURPLE_STAINED_GLASS = register(new Item("purple_stained_glass", builder())); - public static final Item BLUE_STAINED_GLASS = register(new Item("blue_stained_glass", builder())); - public static final Item BROWN_STAINED_GLASS = register(new Item("brown_stained_glass", builder())); - public static final Item GREEN_STAINED_GLASS = register(new Item("green_stained_glass", builder())); - public static final Item RED_STAINED_GLASS = register(new Item("red_stained_glass", builder())); - public static final Item BLACK_STAINED_GLASS = register(new Item("black_stained_glass", builder())); - public static final Item WHITE_STAINED_GLASS_PANE = register(new Item("white_stained_glass_pane", builder())); - public static final Item ORANGE_STAINED_GLASS_PANE = register(new Item("orange_stained_glass_pane", builder())); - public static final Item MAGENTA_STAINED_GLASS_PANE = register(new Item("magenta_stained_glass_pane", builder())); - public static final Item LIGHT_BLUE_STAINED_GLASS_PANE = register(new Item("light_blue_stained_glass_pane", builder())); - public static final Item YELLOW_STAINED_GLASS_PANE = register(new Item("yellow_stained_glass_pane", builder())); - public static final Item LIME_STAINED_GLASS_PANE = register(new Item("lime_stained_glass_pane", builder())); - public static final Item PINK_STAINED_GLASS_PANE = register(new Item("pink_stained_glass_pane", builder())); - public static final Item GRAY_STAINED_GLASS_PANE = register(new Item("gray_stained_glass_pane", builder())); - public static final Item LIGHT_GRAY_STAINED_GLASS_PANE = register(new Item("light_gray_stained_glass_pane", builder())); - public static final Item CYAN_STAINED_GLASS_PANE = register(new Item("cyan_stained_glass_pane", builder())); - public static final Item PURPLE_STAINED_GLASS_PANE = register(new Item("purple_stained_glass_pane", builder())); - public static final Item BLUE_STAINED_GLASS_PANE = register(new Item("blue_stained_glass_pane", builder())); - public static final Item BROWN_STAINED_GLASS_PANE = register(new Item("brown_stained_glass_pane", builder())); - public static final Item GREEN_STAINED_GLASS_PANE = register(new Item("green_stained_glass_pane", builder())); - public static final Item RED_STAINED_GLASS_PANE = register(new Item("red_stained_glass_pane", builder())); - public static final Item BLACK_STAINED_GLASS_PANE = register(new Item("black_stained_glass_pane", builder())); - public static final Item PRISMARINE = register(new Item("prismarine", builder())); - public static final Item PRISMARINE_BRICKS = register(new Item("prismarine_bricks", builder())); - public static final Item DARK_PRISMARINE = register(new Item("dark_prismarine", builder())); - public static final Item PRISMARINE_STAIRS = register(new Item("prismarine_stairs", builder())); - public static final Item PRISMARINE_BRICK_STAIRS = register(new Item("prismarine_brick_stairs", builder())); - public static final Item DARK_PRISMARINE_STAIRS = register(new Item("dark_prismarine_stairs", builder())); - public static final Item SEA_LANTERN = register(new Item("sea_lantern", builder())); - public static final Item RED_SANDSTONE = register(new Item("red_sandstone", builder())); - public static final Item CHISELED_RED_SANDSTONE = register(new Item("chiseled_red_sandstone", builder())); - public static final Item CUT_RED_SANDSTONE = register(new Item("cut_red_sandstone", builder())); - public static final Item RED_SANDSTONE_STAIRS = register(new Item("red_sandstone_stairs", builder())); - public static final Item REPEATING_COMMAND_BLOCK = register(new Item("repeating_command_block", builder())); - public static final Item CHAIN_COMMAND_BLOCK = register(new Item("chain_command_block", builder())); - public static final Item MAGMA_BLOCK = register(new Item("magma_block", builder())); - public static final Item NETHER_WART_BLOCK = register(new Item("nether_wart_block", builder())); - public static final Item WARPED_WART_BLOCK = register(new Item("warped_wart_block", builder())); - public static final Item RED_NETHER_BRICKS = register(new Item("red_nether_bricks", builder())); - public static final Item BONE_BLOCK = register(new Item("bone_block", builder())); - public static final Item STRUCTURE_VOID = register(new Item("structure_void", builder())); - public static final Item SHULKER_BOX = register(new Item("shulker_box", builder().stackSize(1))); - public static final Item WHITE_SHULKER_BOX = register(new Item("white_shulker_box", builder().stackSize(1))); - public static final Item ORANGE_SHULKER_BOX = register(new Item("orange_shulker_box", builder().stackSize(1))); - public static final Item MAGENTA_SHULKER_BOX = register(new Item("magenta_shulker_box", builder().stackSize(1))); - public static final Item LIGHT_BLUE_SHULKER_BOX = register(new Item("light_blue_shulker_box", builder().stackSize(1))); - public static final Item YELLOW_SHULKER_BOX = register(new Item("yellow_shulker_box", builder().stackSize(1))); - public static final Item LIME_SHULKER_BOX = register(new Item("lime_shulker_box", builder().stackSize(1))); - public static final Item PINK_SHULKER_BOX = register(new Item("pink_shulker_box", builder().stackSize(1))); - public static final Item GRAY_SHULKER_BOX = register(new Item("gray_shulker_box", builder().stackSize(1))); - public static final Item LIGHT_GRAY_SHULKER_BOX = register(new Item("light_gray_shulker_box", builder().stackSize(1))); - public static final Item CYAN_SHULKER_BOX = register(new Item("cyan_shulker_box", builder().stackSize(1))); - public static final Item PURPLE_SHULKER_BOX = register(new Item("purple_shulker_box", builder().stackSize(1))); - public static final Item BLUE_SHULKER_BOX = register(new Item("blue_shulker_box", builder().stackSize(1))); - public static final Item BROWN_SHULKER_BOX = register(new Item("brown_shulker_box", builder().stackSize(1))); - public static final Item GREEN_SHULKER_BOX = register(new Item("green_shulker_box", builder().stackSize(1))); - public static final Item RED_SHULKER_BOX = register(new Item("red_shulker_box", builder().stackSize(1))); - public static final Item BLACK_SHULKER_BOX = register(new Item("black_shulker_box", builder().stackSize(1))); - public static final Item WHITE_GLAZED_TERRACOTTA = register(new Item("white_glazed_terracotta", builder())); - public static final Item ORANGE_GLAZED_TERRACOTTA = register(new Item("orange_glazed_terracotta", builder())); - public static final Item MAGENTA_GLAZED_TERRACOTTA = register(new Item("magenta_glazed_terracotta", builder())); - public static final Item LIGHT_BLUE_GLAZED_TERRACOTTA = register(new Item("light_blue_glazed_terracotta", builder())); - public static final Item YELLOW_GLAZED_TERRACOTTA = register(new Item("yellow_glazed_terracotta", builder())); - public static final Item LIME_GLAZED_TERRACOTTA = register(new Item("lime_glazed_terracotta", builder())); - public static final Item PINK_GLAZED_TERRACOTTA = register(new Item("pink_glazed_terracotta", builder())); - public static final Item GRAY_GLAZED_TERRACOTTA = register(new Item("gray_glazed_terracotta", builder())); - public static final Item LIGHT_GRAY_GLAZED_TERRACOTTA = register(new Item("light_gray_glazed_terracotta", builder())); - public static final Item CYAN_GLAZED_TERRACOTTA = register(new Item("cyan_glazed_terracotta", builder())); - public static final Item PURPLE_GLAZED_TERRACOTTA = register(new Item("purple_glazed_terracotta", builder())); - public static final Item BLUE_GLAZED_TERRACOTTA = register(new Item("blue_glazed_terracotta", builder())); - public static final Item BROWN_GLAZED_TERRACOTTA = register(new Item("brown_glazed_terracotta", builder())); - public static final Item GREEN_GLAZED_TERRACOTTA = register(new Item("green_glazed_terracotta", builder())); - public static final Item RED_GLAZED_TERRACOTTA = register(new Item("red_glazed_terracotta", builder())); - public static final Item BLACK_GLAZED_TERRACOTTA = register(new Item("black_glazed_terracotta", builder())); - public static final Item WHITE_CONCRETE = register(new Item("white_concrete", builder())); - public static final Item ORANGE_CONCRETE = register(new Item("orange_concrete", builder())); - public static final Item MAGENTA_CONCRETE = register(new Item("magenta_concrete", builder())); - public static final Item LIGHT_BLUE_CONCRETE = register(new Item("light_blue_concrete", builder())); - public static final Item YELLOW_CONCRETE = register(new Item("yellow_concrete", builder())); - public static final Item LIME_CONCRETE = register(new Item("lime_concrete", builder())); - public static final Item PINK_CONCRETE = register(new Item("pink_concrete", builder())); - public static final Item GRAY_CONCRETE = register(new Item("gray_concrete", builder())); - public static final Item LIGHT_GRAY_CONCRETE = register(new Item("light_gray_concrete", builder())); - public static final Item CYAN_CONCRETE = register(new Item("cyan_concrete", builder())); - public static final Item PURPLE_CONCRETE = register(new Item("purple_concrete", builder())); - public static final Item BLUE_CONCRETE = register(new Item("blue_concrete", builder())); - public static final Item BROWN_CONCRETE = register(new Item("brown_concrete", builder())); - public static final Item GREEN_CONCRETE = register(new Item("green_concrete", builder())); - public static final Item RED_CONCRETE = register(new Item("red_concrete", builder())); - public static final Item BLACK_CONCRETE = register(new Item("black_concrete", builder())); - public static final Item WHITE_CONCRETE_POWDER = register(new Item("white_concrete_powder", builder())); - public static final Item ORANGE_CONCRETE_POWDER = register(new Item("orange_concrete_powder", builder())); - public static final Item MAGENTA_CONCRETE_POWDER = register(new Item("magenta_concrete_powder", builder())); - public static final Item LIGHT_BLUE_CONCRETE_POWDER = register(new Item("light_blue_concrete_powder", builder())); - public static final Item YELLOW_CONCRETE_POWDER = register(new Item("yellow_concrete_powder", builder())); - public static final Item LIME_CONCRETE_POWDER = register(new Item("lime_concrete_powder", builder())); - public static final Item PINK_CONCRETE_POWDER = register(new Item("pink_concrete_powder", builder())); - public static final Item GRAY_CONCRETE_POWDER = register(new Item("gray_concrete_powder", builder())); - public static final Item LIGHT_GRAY_CONCRETE_POWDER = register(new Item("light_gray_concrete_powder", builder())); - public static final Item CYAN_CONCRETE_POWDER = register(new Item("cyan_concrete_powder", builder())); - public static final Item PURPLE_CONCRETE_POWDER = register(new Item("purple_concrete_powder", builder())); - public static final Item BLUE_CONCRETE_POWDER = register(new Item("blue_concrete_powder", builder())); - public static final Item BROWN_CONCRETE_POWDER = register(new Item("brown_concrete_powder", builder())); - public static final Item GREEN_CONCRETE_POWDER = register(new Item("green_concrete_powder", builder())); - public static final Item RED_CONCRETE_POWDER = register(new Item("red_concrete_powder", builder())); - public static final Item BLACK_CONCRETE_POWDER = register(new Item("black_concrete_powder", builder())); - public static final Item TURTLE_EGG = register(new Item("turtle_egg", builder())); - public static final Item DEAD_TUBE_CORAL_BLOCK = register(new Item("dead_tube_coral_block", builder())); - public static final Item DEAD_BRAIN_CORAL_BLOCK = register(new Item("dead_brain_coral_block", builder())); - public static final Item DEAD_BUBBLE_CORAL_BLOCK = register(new Item("dead_bubble_coral_block", builder())); - public static final Item DEAD_FIRE_CORAL_BLOCK = register(new Item("dead_fire_coral_block", builder())); - public static final Item DEAD_HORN_CORAL_BLOCK = register(new Item("dead_horn_coral_block", builder())); - public static final Item TUBE_CORAL_BLOCK = register(new Item("tube_coral_block", builder())); - public static final Item BRAIN_CORAL_BLOCK = register(new Item("brain_coral_block", builder())); - public static final Item BUBBLE_CORAL_BLOCK = register(new Item("bubble_coral_block", builder())); - public static final Item FIRE_CORAL_BLOCK = register(new Item("fire_coral_block", builder())); - public static final Item HORN_CORAL_BLOCK = register(new Item("horn_coral_block", builder())); - public static final Item TUBE_CORAL = register(new Item("tube_coral", builder())); - public static final Item BRAIN_CORAL = register(new Item("brain_coral", builder())); - public static final Item BUBBLE_CORAL = register(new Item("bubble_coral", builder())); - public static final Item FIRE_CORAL = register(new Item("fire_coral", builder())); - public static final Item HORN_CORAL = register(new Item("horn_coral", builder())); - public static final Item DEAD_BRAIN_CORAL = register(new Item("dead_brain_coral", builder())); - public static final Item DEAD_BUBBLE_CORAL = register(new Item("dead_bubble_coral", builder())); - public static final Item DEAD_FIRE_CORAL = register(new Item("dead_fire_coral", builder())); - public static final Item DEAD_HORN_CORAL = register(new Item("dead_horn_coral", builder())); - public static final Item DEAD_TUBE_CORAL = register(new Item("dead_tube_coral", builder())); - public static final Item TUBE_CORAL_FAN = register(new Item("tube_coral_fan", builder())); - public static final Item BRAIN_CORAL_FAN = register(new Item("brain_coral_fan", builder())); - public static final Item BUBBLE_CORAL_FAN = register(new Item("bubble_coral_fan", builder())); - public static final Item FIRE_CORAL_FAN = register(new Item("fire_coral_fan", builder())); - public static final Item HORN_CORAL_FAN = register(new Item("horn_coral_fan", builder())); - public static final Item DEAD_TUBE_CORAL_FAN = register(new Item("dead_tube_coral_fan", builder())); - public static final Item DEAD_BRAIN_CORAL_FAN = register(new Item("dead_brain_coral_fan", builder())); - public static final Item DEAD_BUBBLE_CORAL_FAN = register(new Item("dead_bubble_coral_fan", builder())); - public static final Item DEAD_FIRE_CORAL_FAN = register(new Item("dead_fire_coral_fan", builder())); - public static final Item DEAD_HORN_CORAL_FAN = register(new Item("dead_horn_coral_fan", builder())); - public static final Item BLUE_ICE = register(new Item("blue_ice", builder())); - public static final Item CONDUIT = register(new Item("conduit", builder())); - public static final Item POLISHED_GRANITE_STAIRS = register(new Item("polished_granite_stairs", builder())); - public static final Item SMOOTH_RED_SANDSTONE_STAIRS = register(new Item("smooth_red_sandstone_stairs", builder())); - public static final Item MOSSY_STONE_BRICK_STAIRS = register(new Item("mossy_stone_brick_stairs", builder())); - public static final Item POLISHED_DIORITE_STAIRS = register(new Item("polished_diorite_stairs", builder())); - public static final Item MOSSY_COBBLESTONE_STAIRS = register(new Item("mossy_cobblestone_stairs", builder())); - public static final Item END_STONE_BRICK_STAIRS = register(new Item("end_stone_brick_stairs", builder())); - public static final Item STONE_STAIRS = register(new Item("stone_stairs", builder())); - public static final Item SMOOTH_SANDSTONE_STAIRS = register(new Item("smooth_sandstone_stairs", builder())); - public static final Item SMOOTH_QUARTZ_STAIRS = register(new Item("smooth_quartz_stairs", builder())); - public static final Item GRANITE_STAIRS = register(new Item("granite_stairs", builder())); - public static final Item ANDESITE_STAIRS = register(new Item("andesite_stairs", builder())); - public static final Item RED_NETHER_BRICK_STAIRS = register(new Item("red_nether_brick_stairs", builder())); - public static final Item POLISHED_ANDESITE_STAIRS = register(new Item("polished_andesite_stairs", builder())); - public static final Item DIORITE_STAIRS = register(new Item("diorite_stairs", builder())); - public static final Item COBBLED_DEEPSLATE_STAIRS = register(new Item("cobbled_deepslate_stairs", builder())); - public static final Item POLISHED_DEEPSLATE_STAIRS = register(new Item("polished_deepslate_stairs", builder())); - public static final Item DEEPSLATE_BRICK_STAIRS = register(new Item("deepslate_brick_stairs", builder())); - public static final Item DEEPSLATE_TILE_STAIRS = register(new Item("deepslate_tile_stairs", builder())); - public static final Item POLISHED_GRANITE_SLAB = register(new Item("polished_granite_slab", builder())); - public static final Item SMOOTH_RED_SANDSTONE_SLAB = register(new Item("smooth_red_sandstone_slab", builder())); - public static final Item MOSSY_STONE_BRICK_SLAB = register(new Item("mossy_stone_brick_slab", builder())); - public static final Item POLISHED_DIORITE_SLAB = register(new Item("polished_diorite_slab", builder())); - public static final Item MOSSY_COBBLESTONE_SLAB = register(new Item("mossy_cobblestone_slab", builder())); - public static final Item END_STONE_BRICK_SLAB = register(new Item("end_stone_brick_slab", builder())); - public static final Item SMOOTH_SANDSTONE_SLAB = register(new Item("smooth_sandstone_slab", builder())); - public static final Item SMOOTH_QUARTZ_SLAB = register(new Item("smooth_quartz_slab", builder())); - public static final Item GRANITE_SLAB = register(new Item("granite_slab", builder())); - public static final Item ANDESITE_SLAB = register(new Item("andesite_slab", builder())); - public static final Item RED_NETHER_BRICK_SLAB = register(new Item("red_nether_brick_slab", builder())); - public static final Item POLISHED_ANDESITE_SLAB = register(new Item("polished_andesite_slab", builder())); - public static final Item DIORITE_SLAB = register(new Item("diorite_slab", builder())); - public static final Item COBBLED_DEEPSLATE_SLAB = register(new Item("cobbled_deepslate_slab", builder())); - public static final Item POLISHED_DEEPSLATE_SLAB = register(new Item("polished_deepslate_slab", builder())); - public static final Item DEEPSLATE_BRICK_SLAB = register(new Item("deepslate_brick_slab", builder())); - public static final Item DEEPSLATE_TILE_SLAB = register(new Item("deepslate_tile_slab", builder())); - public static final Item SCAFFOLDING = register(new Item("scaffolding", builder())); - public static final Item REDSTONE = register(new Item("redstone", builder())); - public static final Item REDSTONE_TORCH = register(new Item("redstone_torch", builder())); - public static final Item REDSTONE_BLOCK = register(new Item("redstone_block", builder())); - public static final Item REPEATER = register(new Item("repeater", builder())); - public static final Item COMPARATOR = register(new Item("comparator", builder())); - public static final Item PISTON = register(new Item("piston", builder())); - public static final Item STICKY_PISTON = register(new Item("sticky_piston", builder())); - public static final Item SLIME_BLOCK = register(new Item("slime_block", builder())); - public static final Item HONEY_BLOCK = register(new Item("honey_block", builder())); - public static final Item OBSERVER = register(new Item("observer", builder())); - public static final Item HOPPER = register(new Item("hopper", builder())); - public static final Item DISPENSER = register(new Item("dispenser", builder())); - public static final Item DROPPER = register(new Item("dropper", builder())); - public static final Item LECTERN = register(new Item("lectern", builder())); - public static final Item TARGET = register(new Item("target", builder())); - public static final Item LEVER = register(new Item("lever", builder())); - public static final Item LIGHTNING_ROD = register(new Item("lightning_rod", builder())); - public static final Item DAYLIGHT_DETECTOR = register(new Item("daylight_detector", builder())); - public static final Item SCULK_SENSOR = register(new Item("sculk_sensor", builder())); - public static final Item TRIPWIRE_HOOK = register(new Item("tripwire_hook", builder())); - public static final Item TRAPPED_CHEST = register(new Item("trapped_chest", builder())); - public static final Item TNT = register(new Item("tnt", builder())); - public static final Item REDSTONE_LAMP = register(new Item("redstone_lamp", builder())); - public static final Item NOTE_BLOCK = register(new Item("note_block", builder())); - public static final Item STONE_BUTTON = register(new Item("stone_button", builder())); - public static final Item POLISHED_BLACKSTONE_BUTTON = register(new Item("polished_blackstone_button", builder())); - public static final Item OAK_BUTTON = register(new Item("oak_button", builder())); - public static final Item SPRUCE_BUTTON = register(new Item("spruce_button", builder())); - public static final Item BIRCH_BUTTON = register(new Item("birch_button", builder())); - public static final Item JUNGLE_BUTTON = register(new Item("jungle_button", builder())); - public static final Item ACACIA_BUTTON = register(new Item("acacia_button", builder())); - public static final Item CHERRY_BUTTON = register(new Item("cherry_button", builder())); - public static final Item DARK_OAK_BUTTON = register(new Item("dark_oak_button", builder())); - public static final Item MANGROVE_BUTTON = register(new Item("mangrove_button", builder())); - public static final Item BAMBOO_BUTTON = register(new Item("bamboo_button", builder())); - public static final Item CRIMSON_BUTTON = register(new Item("crimson_button", builder())); - public static final Item WARPED_BUTTON = register(new Item("warped_button", builder())); - public static final Item STONE_PRESSURE_PLATE = register(new Item("stone_pressure_plate", builder())); - public static final Item POLISHED_BLACKSTONE_PRESSURE_PLATE = register(new Item("polished_blackstone_pressure_plate", builder())); - public static final Item LIGHT_WEIGHTED_PRESSURE_PLATE = register(new Item("light_weighted_pressure_plate", builder())); - public static final Item HEAVY_WEIGHTED_PRESSURE_PLATE = register(new Item("heavy_weighted_pressure_plate", builder())); - public static final Item OAK_PRESSURE_PLATE = register(new Item("oak_pressure_plate", builder())); - public static final Item SPRUCE_PRESSURE_PLATE = register(new Item("spruce_pressure_plate", builder())); - public static final Item BIRCH_PRESSURE_PLATE = register(new Item("birch_pressure_plate", builder())); - public static final Item JUNGLE_PRESSURE_PLATE = register(new Item("jungle_pressure_plate", builder())); - public static final Item ACACIA_PRESSURE_PLATE = register(new Item("acacia_pressure_plate", builder())); - public static final Item CHERRY_PRESSURE_PLATE = register(new Item("cherry_pressure_plate", builder())); - public static final Item DARK_OAK_PRESSURE_PLATE = register(new Item("dark_oak_pressure_plate", builder())); - public static final Item MANGROVE_PRESSURE_PLATE = register(new Item("mangrove_pressure_plate", builder())); - public static final Item BAMBOO_PRESSURE_PLATE = register(new Item("bamboo_pressure_plate", builder())); - public static final Item CRIMSON_PRESSURE_PLATE = register(new Item("crimson_pressure_plate", builder())); - public static final Item WARPED_PRESSURE_PLATE = register(new Item("warped_pressure_plate", builder())); - public static final Item IRON_DOOR = register(new Item("iron_door", builder())); - public static final Item OAK_DOOR = register(new Item("oak_door", builder())); - public static final Item SPRUCE_DOOR = register(new Item("spruce_door", builder())); - public static final Item BIRCH_DOOR = register(new Item("birch_door", builder())); - public static final Item JUNGLE_DOOR = register(new Item("jungle_door", builder())); - public static final Item ACACIA_DOOR = register(new Item("acacia_door", builder())); - public static final Item CHERRY_DOOR = register(new Item("cherry_door", builder())); - public static final Item DARK_OAK_DOOR = register(new Item("dark_oak_door", builder())); - public static final Item MANGROVE_DOOR = register(new Item("mangrove_door", builder())); - public static final Item BAMBOO_DOOR = register(new Item("bamboo_door", builder())); - public static final Item CRIMSON_DOOR = register(new Item("crimson_door", builder())); - public static final Item WARPED_DOOR = register(new Item("warped_door", builder())); - public static final Item IRON_TRAPDOOR = register(new Item("iron_trapdoor", builder())); - public static final Item OAK_TRAPDOOR = register(new Item("oak_trapdoor", builder())); - public static final Item SPRUCE_TRAPDOOR = register(new Item("spruce_trapdoor", builder())); - public static final Item BIRCH_TRAPDOOR = register(new Item("birch_trapdoor", builder())); - public static final Item JUNGLE_TRAPDOOR = register(new Item("jungle_trapdoor", builder())); - public static final Item ACACIA_TRAPDOOR = register(new Item("acacia_trapdoor", builder())); - public static final Item CHERRY_TRAPDOOR = register(new Item("cherry_trapdoor", builder())); - public static final Item DARK_OAK_TRAPDOOR = register(new Item("dark_oak_trapdoor", builder())); - public static final Item MANGROVE_TRAPDOOR = register(new Item("mangrove_trapdoor", builder())); - public static final Item BAMBOO_TRAPDOOR = register(new Item("bamboo_trapdoor", builder())); - public static final Item CRIMSON_TRAPDOOR = register(new Item("crimson_trapdoor", builder())); - public static final Item WARPED_TRAPDOOR = register(new Item("warped_trapdoor", builder())); - public static final Item OAK_FENCE_GATE = register(new Item("oak_fence_gate", builder())); - public static final Item SPRUCE_FENCE_GATE = register(new Item("spruce_fence_gate", builder())); - public static final Item BIRCH_FENCE_GATE = register(new Item("birch_fence_gate", builder())); - public static final Item JUNGLE_FENCE_GATE = register(new Item("jungle_fence_gate", builder())); - public static final Item ACACIA_FENCE_GATE = register(new Item("acacia_fence_gate", builder())); - public static final Item CHERRY_FENCE_GATE = register(new Item("cherry_fence_gate", builder())); - public static final Item DARK_OAK_FENCE_GATE = register(new Item("dark_oak_fence_gate", builder())); - public static final Item MANGROVE_FENCE_GATE = register(new Item("mangrove_fence_gate", builder())); - public static final Item BAMBOO_FENCE_GATE = register(new Item("bamboo_fence_gate", builder())); - public static final Item CRIMSON_FENCE_GATE = register(new Item("crimson_fence_gate", builder())); - public static final Item WARPED_FENCE_GATE = register(new Item("warped_fence_gate", builder())); - public static final Item POWERED_RAIL = register(new Item("powered_rail", builder())); - public static final Item DETECTOR_RAIL = register(new Item("detector_rail", builder())); - public static final Item RAIL = register(new Item("rail", builder())); - public static final Item ACTIVATOR_RAIL = register(new Item("activator_rail", builder())); + public static final Item STONE = register(new BlockItem("stone", builder())); + public static final Item GRANITE = register(new BlockItem("granite", builder())); + public static final Item POLISHED_GRANITE = register(new BlockItem("polished_granite", builder())); + public static final Item DIORITE = register(new BlockItem("diorite", builder())); + public static final Item POLISHED_DIORITE = register(new BlockItem("polished_diorite", builder())); + public static final Item ANDESITE = register(new BlockItem("andesite", builder())); + public static final Item POLISHED_ANDESITE = register(new BlockItem("polished_andesite", builder())); + public static final Item DEEPSLATE = register(new BlockItem("deepslate", builder())); + public static final Item COBBLED_DEEPSLATE = register(new BlockItem("cobbled_deepslate", builder())); + public static final Item POLISHED_DEEPSLATE = register(new BlockItem("polished_deepslate", builder())); + public static final Item CALCITE = register(new BlockItem("calcite", builder())); + public static final Item TUFF = register(new BlockItem("tuff", builder())); + public static final Item DRIPSTONE_BLOCK = register(new BlockItem("dripstone_block", builder())); + public static final Item GRASS_BLOCK = register(new BlockItem("grass_block", builder())); + public static final Item DIRT = register(new BlockItem("dirt", builder())); + public static final Item COARSE_DIRT = register(new BlockItem("coarse_dirt", builder())); + public static final Item PODZOL = register(new BlockItem("podzol", builder())); + public static final Item ROOTED_DIRT = register(new BlockItem("rooted_dirt", builder())); + public static final Item MUD = register(new BlockItem("mud", builder())); + public static final Item CRIMSON_NYLIUM = register(new BlockItem("crimson_nylium", builder())); + public static final Item WARPED_NYLIUM = register(new BlockItem("warped_nylium", builder())); + public static final Item COBBLESTONE = register(new BlockItem("cobblestone", builder())); + public static final Item OAK_PLANKS = register(new BlockItem("oak_planks", builder())); + public static final Item SPRUCE_PLANKS = register(new BlockItem("spruce_planks", builder())); + public static final Item BIRCH_PLANKS = register(new BlockItem("birch_planks", builder())); + public static final Item JUNGLE_PLANKS = register(new BlockItem("jungle_planks", builder())); + public static final Item ACACIA_PLANKS = register(new BlockItem("acacia_planks", builder())); + public static final Item CHERRY_PLANKS = register(new BlockItem("cherry_planks", builder())); + public static final Item DARK_OAK_PLANKS = register(new BlockItem("dark_oak_planks", builder())); + public static final Item MANGROVE_PLANKS = register(new BlockItem("mangrove_planks", builder())); + public static final Item BAMBOO_PLANKS = register(new BlockItem("bamboo_planks", builder())); + public static final Item CRIMSON_PLANKS = register(new BlockItem("crimson_planks", builder())); + public static final Item WARPED_PLANKS = register(new BlockItem("warped_planks", builder())); + public static final Item BAMBOO_MOSAIC = register(new BlockItem("bamboo_mosaic", builder())); + public static final Item OAK_SAPLING = register(new BlockItem("oak_sapling", builder())); + public static final Item SPRUCE_SAPLING = register(new BlockItem("spruce_sapling", builder())); + public static final Item BIRCH_SAPLING = register(new BlockItem("birch_sapling", builder())); + public static final Item JUNGLE_SAPLING = register(new BlockItem("jungle_sapling", builder())); + public static final Item ACACIA_SAPLING = register(new BlockItem("acacia_sapling", builder())); + public static final Item CHERRY_SAPLING = register(new BlockItem("cherry_sapling", builder())); + public static final Item DARK_OAK_SAPLING = register(new BlockItem("dark_oak_sapling", builder())); + public static final Item MANGROVE_PROPAGULE = register(new BlockItem("mangrove_propagule", builder())); + public static final Item BEDROCK = register(new BlockItem("bedrock", builder())); + public static final Item SAND = register(new BlockItem("sand", builder())); + public static final Item SUSPICIOUS_SAND = register(new BlockItem("suspicious_sand", builder())); + public static final Item RED_SAND = register(new BlockItem("red_sand", builder())); + public static final Item GRAVEL = register(new BlockItem("gravel", builder())); + public static final Item COAL_ORE = register(new BlockItem("coal_ore", builder())); + public static final Item DEEPSLATE_COAL_ORE = register(new BlockItem("deepslate_coal_ore", builder())); + public static final Item IRON_ORE = register(new BlockItem("iron_ore", builder())); + public static final Item DEEPSLATE_IRON_ORE = register(new BlockItem("deepslate_iron_ore", builder())); + public static final Item COPPER_ORE = register(new BlockItem("copper_ore", builder())); + public static final Item DEEPSLATE_COPPER_ORE = register(new BlockItem("deepslate_copper_ore", builder())); + public static final Item GOLD_ORE = register(new BlockItem("gold_ore", builder())); + public static final Item DEEPSLATE_GOLD_ORE = register(new BlockItem("deepslate_gold_ore", builder())); + public static final Item REDSTONE_ORE = register(new BlockItem("redstone_ore", builder())); + public static final Item DEEPSLATE_REDSTONE_ORE = register(new BlockItem("deepslate_redstone_ore", builder())); + public static final Item EMERALD_ORE = register(new BlockItem("emerald_ore", builder())); + public static final Item DEEPSLATE_EMERALD_ORE = register(new BlockItem("deepslate_emerald_ore", builder())); + public static final Item LAPIS_ORE = register(new BlockItem("lapis_ore", builder())); + public static final Item DEEPSLATE_LAPIS_ORE = register(new BlockItem("deepslate_lapis_ore", builder())); + public static final Item DIAMOND_ORE = register(new BlockItem("diamond_ore", builder())); + public static final Item DEEPSLATE_DIAMOND_ORE = register(new BlockItem("deepslate_diamond_ore", builder())); + public static final Item NETHER_GOLD_ORE = register(new BlockItem("nether_gold_ore", builder())); + public static final Item NETHER_QUARTZ_ORE = register(new BlockItem("nether_quartz_ore", builder())); + public static final Item ANCIENT_DEBRIS = register(new BlockItem("ancient_debris", builder())); + public static final Item COAL_BLOCK = register(new BlockItem("coal_block", builder())); + public static final Item RAW_IRON_BLOCK = register(new BlockItem("raw_iron_block", builder())); + public static final Item RAW_COPPER_BLOCK = register(new BlockItem("raw_copper_block", builder())); + public static final Item RAW_GOLD_BLOCK = register(new BlockItem("raw_gold_block", builder())); + public static final Item AMETHYST_BLOCK = register(new BlockItem("amethyst_block", builder())); + public static final Item BUDDING_AMETHYST = register(new BlockItem("budding_amethyst", builder())); + public static final Item IRON_BLOCK = register(new BlockItem("iron_block", builder())); + public static final Item COPPER_BLOCK = register(new BlockItem("copper_block", builder())); + public static final Item GOLD_BLOCK = register(new BlockItem("gold_block", builder())); + public static final Item DIAMOND_BLOCK = register(new BlockItem("diamond_block", builder())); + public static final Item NETHERITE_BLOCK = register(new BlockItem("netherite_block", builder())); + public static final Item EXPOSED_COPPER = register(new BlockItem("exposed_copper", builder())); + public static final Item WEATHERED_COPPER = register(new BlockItem("weathered_copper", builder())); + public static final Item OXIDIZED_COPPER = register(new BlockItem("oxidized_copper", builder())); + public static final Item CUT_COPPER = register(new BlockItem("cut_copper", builder())); + public static final Item EXPOSED_CUT_COPPER = register(new BlockItem("exposed_cut_copper", builder())); + public static final Item WEATHERED_CUT_COPPER = register(new BlockItem("weathered_cut_copper", builder())); + public static final Item OXIDIZED_CUT_COPPER = register(new BlockItem("oxidized_cut_copper", builder())); + public static final Item CUT_COPPER_STAIRS = register(new BlockItem("cut_copper_stairs", builder())); + public static final Item EXPOSED_CUT_COPPER_STAIRS = register(new BlockItem("exposed_cut_copper_stairs", builder())); + public static final Item WEATHERED_CUT_COPPER_STAIRS = register(new BlockItem("weathered_cut_copper_stairs", builder())); + public static final Item OXIDIZED_CUT_COPPER_STAIRS = register(new BlockItem("oxidized_cut_copper_stairs", builder())); + public static final Item CUT_COPPER_SLAB = register(new BlockItem("cut_copper_slab", builder())); + public static final Item EXPOSED_CUT_COPPER_SLAB = register(new BlockItem("exposed_cut_copper_slab", builder())); + public static final Item WEATHERED_CUT_COPPER_SLAB = register(new BlockItem("weathered_cut_copper_slab", builder())); + public static final Item OXIDIZED_CUT_COPPER_SLAB = register(new BlockItem("oxidized_cut_copper_slab", builder())); + public static final Item WAXED_COPPER_BLOCK = register(new BlockItem("waxed_copper_block", builder())); + public static final Item WAXED_EXPOSED_COPPER = register(new BlockItem("waxed_exposed_copper", builder())); + public static final Item WAXED_WEATHERED_COPPER = register(new BlockItem("waxed_weathered_copper", builder())); + public static final Item WAXED_OXIDIZED_COPPER = register(new BlockItem("waxed_oxidized_copper", builder())); + public static final Item WAXED_CUT_COPPER = register(new BlockItem("waxed_cut_copper", builder())); + public static final Item WAXED_EXPOSED_CUT_COPPER = register(new BlockItem("waxed_exposed_cut_copper", builder())); + public static final Item WAXED_WEATHERED_CUT_COPPER = register(new BlockItem("waxed_weathered_cut_copper", builder())); + public static final Item WAXED_OXIDIZED_CUT_COPPER = register(new BlockItem("waxed_oxidized_cut_copper", builder())); + public static final Item WAXED_CUT_COPPER_STAIRS = register(new BlockItem("waxed_cut_copper_stairs", builder())); + public static final Item WAXED_EXPOSED_CUT_COPPER_STAIRS = register(new BlockItem("waxed_exposed_cut_copper_stairs", builder())); + public static final Item WAXED_WEATHERED_CUT_COPPER_STAIRS = register(new BlockItem("waxed_weathered_cut_copper_stairs", builder())); + public static final Item WAXED_OXIDIZED_CUT_COPPER_STAIRS = register(new BlockItem("waxed_oxidized_cut_copper_stairs", builder())); + public static final Item WAXED_CUT_COPPER_SLAB = register(new BlockItem("waxed_cut_copper_slab", builder())); + public static final Item WAXED_EXPOSED_CUT_COPPER_SLAB = register(new BlockItem("waxed_exposed_cut_copper_slab", builder())); + public static final Item WAXED_WEATHERED_CUT_COPPER_SLAB = register(new BlockItem("waxed_weathered_cut_copper_slab", builder())); + public static final Item WAXED_OXIDIZED_CUT_COPPER_SLAB = register(new BlockItem("waxed_oxidized_cut_copper_slab", builder())); + public static final Item OAK_LOG = register(new BlockItem("oak_log", builder())); + public static final Item SPRUCE_LOG = register(new BlockItem("spruce_log", builder())); + public static final Item BIRCH_LOG = register(new BlockItem("birch_log", builder())); + public static final Item JUNGLE_LOG = register(new BlockItem("jungle_log", builder())); + public static final Item ACACIA_LOG = register(new BlockItem("acacia_log", builder())); + public static final Item CHERRY_LOG = register(new BlockItem("cherry_log", builder())); + public static final Item DARK_OAK_LOG = register(new BlockItem("dark_oak_log", builder())); + public static final Item MANGROVE_LOG = register(new BlockItem("mangrove_log", builder())); + public static final Item MANGROVE_ROOTS = register(new BlockItem("mangrove_roots", builder())); + public static final Item MUDDY_MANGROVE_ROOTS = register(new BlockItem("muddy_mangrove_roots", builder())); + public static final Item CRIMSON_STEM = register(new BlockItem("crimson_stem", builder())); + public static final Item WARPED_STEM = register(new BlockItem("warped_stem", builder())); + public static final Item BAMBOO_BLOCK = register(new BlockItem("bamboo_block", builder())); + public static final Item STRIPPED_OAK_LOG = register(new BlockItem("stripped_oak_log", builder())); + public static final Item STRIPPED_SPRUCE_LOG = register(new BlockItem("stripped_spruce_log", builder())); + public static final Item STRIPPED_BIRCH_LOG = register(new BlockItem("stripped_birch_log", builder())); + public static final Item STRIPPED_JUNGLE_LOG = register(new BlockItem("stripped_jungle_log", builder())); + public static final Item STRIPPED_ACACIA_LOG = register(new BlockItem("stripped_acacia_log", builder())); + public static final Item STRIPPED_CHERRY_LOG = register(new BlockItem("stripped_cherry_log", builder())); + public static final Item STRIPPED_DARK_OAK_LOG = register(new BlockItem("stripped_dark_oak_log", builder())); + public static final Item STRIPPED_MANGROVE_LOG = register(new BlockItem("stripped_mangrove_log", builder())); + public static final Item STRIPPED_CRIMSON_STEM = register(new BlockItem("stripped_crimson_stem", builder())); + public static final Item STRIPPED_WARPED_STEM = register(new BlockItem("stripped_warped_stem", builder())); + public static final Item STRIPPED_OAK_WOOD = register(new BlockItem("stripped_oak_wood", builder())); + public static final Item STRIPPED_SPRUCE_WOOD = register(new BlockItem("stripped_spruce_wood", builder())); + public static final Item STRIPPED_BIRCH_WOOD = register(new BlockItem("stripped_birch_wood", builder())); + public static final Item STRIPPED_JUNGLE_WOOD = register(new BlockItem("stripped_jungle_wood", builder())); + public static final Item STRIPPED_ACACIA_WOOD = register(new BlockItem("stripped_acacia_wood", builder())); + public static final Item STRIPPED_CHERRY_WOOD = register(new BlockItem("stripped_cherry_wood", builder())); + public static final Item STRIPPED_DARK_OAK_WOOD = register(new BlockItem("stripped_dark_oak_wood", builder())); + public static final Item STRIPPED_MANGROVE_WOOD = register(new BlockItem("stripped_mangrove_wood", builder())); + public static final Item STRIPPED_CRIMSON_HYPHAE = register(new BlockItem("stripped_crimson_hyphae", builder())); + public static final Item STRIPPED_WARPED_HYPHAE = register(new BlockItem("stripped_warped_hyphae", builder())); + public static final Item STRIPPED_BAMBOO_BLOCK = register(new BlockItem("stripped_bamboo_block", builder())); + public static final Item OAK_WOOD = register(new BlockItem("oak_wood", builder())); + public static final Item SPRUCE_WOOD = register(new BlockItem("spruce_wood", builder())); + public static final Item BIRCH_WOOD = register(new BlockItem("birch_wood", builder())); + public static final Item JUNGLE_WOOD = register(new BlockItem("jungle_wood", builder())); + public static final Item ACACIA_WOOD = register(new BlockItem("acacia_wood", builder())); + public static final Item CHERRY_WOOD = register(new BlockItem("cherry_wood", builder())); + public static final Item DARK_OAK_WOOD = register(new BlockItem("dark_oak_wood", builder())); + public static final Item MANGROVE_WOOD = register(new BlockItem("mangrove_wood", builder())); + public static final Item CRIMSON_HYPHAE = register(new BlockItem("crimson_hyphae", builder())); + public static final Item WARPED_HYPHAE = register(new BlockItem("warped_hyphae", builder())); + public static final Item OAK_LEAVES = register(new BlockItem("oak_leaves", builder())); + public static final Item SPRUCE_LEAVES = register(new BlockItem("spruce_leaves", builder())); + public static final Item BIRCH_LEAVES = register(new BlockItem("birch_leaves", builder())); + public static final Item JUNGLE_LEAVES = register(new BlockItem("jungle_leaves", builder())); + public static final Item ACACIA_LEAVES = register(new BlockItem("acacia_leaves", builder())); + public static final Item CHERRY_LEAVES = register(new BlockItem("cherry_leaves", builder())); + public static final Item DARK_OAK_LEAVES = register(new BlockItem("dark_oak_leaves", builder())); + public static final Item MANGROVE_LEAVES = register(new BlockItem("mangrove_leaves", builder())); + public static final Item AZALEA_LEAVES = register(new BlockItem("azalea_leaves", builder())); + public static final Item FLOWERING_AZALEA_LEAVES = register(new BlockItem("flowering_azalea_leaves", builder())); + public static final Item SPONGE = register(new BlockItem("sponge", builder())); + public static final Item WET_SPONGE = register(new BlockItem("wet_sponge", builder())); + public static final Item GLASS = register(new BlockItem("glass", builder())); + public static final Item TINTED_GLASS = register(new BlockItem("tinted_glass", builder())); + public static final Item LAPIS_BLOCK = register(new BlockItem("lapis_block", builder())); + public static final Item SANDSTONE = register(new BlockItem("sandstone", builder())); + public static final Item CHISELED_SANDSTONE = register(new BlockItem("chiseled_sandstone", builder())); + public static final Item CUT_SANDSTONE = register(new BlockItem("cut_sandstone", builder())); + public static final Item COBWEB = register(new BlockItem("cobweb", builder())); + public static final Item GRASS = register(new BlockItem("grass", builder())); + public static final Item FERN = register(new BlockItem("fern", builder())); + public static final Item AZALEA = register(new BlockItem("azalea", builder())); + public static final Item FLOWERING_AZALEA = register(new BlockItem("flowering_azalea", builder())); + public static final Item DEAD_BUSH = register(new BlockItem("dead_bush", builder())); + public static final Item SEAGRASS = register(new BlockItem("seagrass", builder())); + public static final Item SEA_PICKLE = register(new BlockItem("sea_pickle", builder())); + public static final Item WHITE_WOOL = register(new BlockItem("white_wool", builder())); + public static final Item ORANGE_WOOL = register(new BlockItem("orange_wool", builder())); + public static final Item MAGENTA_WOOL = register(new BlockItem("magenta_wool", builder())); + public static final Item LIGHT_BLUE_WOOL = register(new BlockItem("light_blue_wool", builder())); + public static final Item YELLOW_WOOL = register(new BlockItem("yellow_wool", builder())); + public static final Item LIME_WOOL = register(new BlockItem("lime_wool", builder())); + public static final Item PINK_WOOL = register(new BlockItem("pink_wool", builder())); + public static final Item GRAY_WOOL = register(new BlockItem("gray_wool", builder())); + public static final Item LIGHT_GRAY_WOOL = register(new BlockItem("light_gray_wool", builder())); + public static final Item CYAN_WOOL = register(new BlockItem("cyan_wool", builder())); + public static final Item PURPLE_WOOL = register(new BlockItem("purple_wool", builder())); + public static final Item BLUE_WOOL = register(new BlockItem("blue_wool", builder())); + public static final Item BROWN_WOOL = register(new BlockItem("brown_wool", builder())); + public static final Item GREEN_WOOL = register(new BlockItem("green_wool", builder())); + public static final Item RED_WOOL = register(new BlockItem("red_wool", builder())); + public static final Item BLACK_WOOL = register(new BlockItem("black_wool", builder())); + public static final Item DANDELION = register(new FlowerItem("dandelion", builder())); + public static final Item POPPY = register(new FlowerItem("poppy", builder())); + public static final Item BLUE_ORCHID = register(new FlowerItem("blue_orchid", builder())); + public static final Item ALLIUM = register(new FlowerItem("allium", builder())); + public static final Item AZURE_BLUET = register(new FlowerItem("azure_bluet", builder())); + public static final Item RED_TULIP = register(new FlowerItem("red_tulip", builder())); + public static final Item ORANGE_TULIP = register(new FlowerItem("orange_tulip", builder())); + public static final Item WHITE_TULIP = register(new FlowerItem("white_tulip", builder())); + public static final Item PINK_TULIP = register(new FlowerItem("pink_tulip", builder())); + public static final Item OXEYE_DAISY = register(new FlowerItem("oxeye_daisy", builder())); + public static final Item CORNFLOWER = register(new FlowerItem("cornflower", builder())); + public static final Item LILY_OF_THE_VALLEY = register(new FlowerItem("lily_of_the_valley", builder())); + public static final Item WITHER_ROSE = register(new FlowerItem("wither_rose", builder())); + public static final Item TORCHFLOWER = register(new FlowerItem("torchflower", builder())); + public static final Item SPORE_BLOSSOM = register(new BlockItem("spore_blossom", builder())); + public static final Item BROWN_MUSHROOM = register(new BlockItem("brown_mushroom", builder())); + public static final Item RED_MUSHROOM = register(new BlockItem("red_mushroom", builder())); + public static final Item CRIMSON_FUNGUS = register(new BlockItem("crimson_fungus", builder())); + public static final Item WARPED_FUNGUS = register(new BlockItem("warped_fungus", builder())); + public static final Item CRIMSON_ROOTS = register(new BlockItem("crimson_roots", builder())); + public static final Item WARPED_ROOTS = register(new BlockItem("warped_roots", builder())); + public static final Item NETHER_SPROUTS = register(new BlockItem("nether_sprouts", builder())); + public static final Item WEEPING_VINES = register(new BlockItem("weeping_vines", builder())); + public static final Item TWISTING_VINES = register(new BlockItem("twisting_vines", builder())); + public static final Item SUGAR_CANE = register(new BlockItem("sugar_cane", builder())); + public static final Item KELP = register(new BlockItem("kelp", builder())); + public static final Item MOSS_CARPET = register(new BlockItem("moss_carpet", builder())); + public static final Item PINK_PETALS = register(new BlockItem("pink_petals", builder())); + public static final Item MOSS_BLOCK = register(new BlockItem("moss_block", builder())); + public static final Item HANGING_ROOTS = register(new BlockItem("hanging_roots", builder())); + public static final Item BIG_DRIPLEAF = register(new BlockItem("big_dripleaf", builder())); + public static final Item SMALL_DRIPLEAF = register(new BlockItem("small_dripleaf", builder())); + public static final Item BAMBOO = register(new BlockItem("bamboo", builder())); + public static final Item OAK_SLAB = register(new BlockItem("oak_slab", builder())); + public static final Item SPRUCE_SLAB = register(new BlockItem("spruce_slab", builder())); + public static final Item BIRCH_SLAB = register(new BlockItem("birch_slab", builder())); + public static final Item JUNGLE_SLAB = register(new BlockItem("jungle_slab", builder())); + public static final Item ACACIA_SLAB = register(new BlockItem("acacia_slab", builder())); + public static final Item CHERRY_SLAB = register(new BlockItem("cherry_slab", builder())); + public static final Item DARK_OAK_SLAB = register(new BlockItem("dark_oak_slab", builder())); + public static final Item MANGROVE_SLAB = register(new BlockItem("mangrove_slab", builder())); + public static final Item BAMBOO_SLAB = register(new BlockItem("bamboo_slab", builder())); + public static final Item BAMBOO_MOSAIC_SLAB = register(new BlockItem("bamboo_mosaic_slab", builder())); + public static final Item CRIMSON_SLAB = register(new BlockItem("crimson_slab", builder())); + public static final Item WARPED_SLAB = register(new BlockItem("warped_slab", builder())); + public static final Item STONE_SLAB = register(new BlockItem("stone_slab", builder())); + public static final Item SMOOTH_STONE_SLAB = register(new BlockItem("smooth_stone_slab", builder())); + public static final Item SANDSTONE_SLAB = register(new BlockItem("sandstone_slab", builder())); + public static final Item CUT_SANDSTONE_SLAB = register(new BlockItem("cut_sandstone_slab", builder())); + public static final Item PETRIFIED_OAK_SLAB = register(new BlockItem("petrified_oak_slab", builder())); + public static final Item COBBLESTONE_SLAB = register(new BlockItem("cobblestone_slab", builder())); + public static final Item BRICK_SLAB = register(new BlockItem("brick_slab", builder())); + public static final Item STONE_BRICK_SLAB = register(new BlockItem("stone_brick_slab", builder())); + public static final Item MUD_BRICK_SLAB = register(new BlockItem("mud_brick_slab", builder())); + public static final Item NETHER_BRICK_SLAB = register(new BlockItem("nether_brick_slab", builder())); + public static final Item QUARTZ_SLAB = register(new BlockItem("quartz_slab", builder())); + public static final Item RED_SANDSTONE_SLAB = register(new BlockItem("red_sandstone_slab", builder())); + public static final Item CUT_RED_SANDSTONE_SLAB = register(new BlockItem("cut_red_sandstone_slab", builder())); + public static final Item PURPUR_SLAB = register(new BlockItem("purpur_slab", builder())); + public static final Item PRISMARINE_SLAB = register(new BlockItem("prismarine_slab", builder())); + public static final Item PRISMARINE_BRICK_SLAB = register(new BlockItem("prismarine_brick_slab", builder())); + public static final Item DARK_PRISMARINE_SLAB = register(new BlockItem("dark_prismarine_slab", builder())); + public static final Item SMOOTH_QUARTZ = register(new BlockItem("smooth_quartz", builder())); + public static final Item SMOOTH_RED_SANDSTONE = register(new BlockItem("smooth_red_sandstone", builder())); + public static final Item SMOOTH_SANDSTONE = register(new BlockItem("smooth_sandstone", builder())); + public static final Item SMOOTH_STONE = register(new BlockItem("smooth_stone", builder())); + public static final Item BRICKS = register(new BlockItem("bricks", builder())); + public static final Item BOOKSHELF = register(new BlockItem("bookshelf", builder())); + public static final Item CHISELED_BOOKSHELF = register(new BlockItem("chiseled_bookshelf", builder())); + public static final Item DECORATED_POT = register(new BlockItem("decorated_pot", builder().stackSize(1))); + public static final Item MOSSY_COBBLESTONE = register(new BlockItem("mossy_cobblestone", builder())); + public static final Item OBSIDIAN = register(new BlockItem("obsidian", builder())); + public static final Item TORCH = register(new BlockItem("torch", builder())); + public static final Item END_ROD = register(new BlockItem("end_rod", builder())); + public static final Item CHORUS_PLANT = register(new BlockItem("chorus_plant", builder())); + public static final Item CHORUS_FLOWER = register(new BlockItem("chorus_flower", builder())); + public static final Item PURPUR_BLOCK = register(new BlockItem("purpur_block", builder())); + public static final Item PURPUR_PILLAR = register(new BlockItem("purpur_pillar", builder())); + public static final Item PURPUR_STAIRS = register(new BlockItem("purpur_stairs", builder())); + public static final Item SPAWNER = register(new BlockItem("spawner", builder())); + public static final Item CHEST = register(new BlockItem("chest", builder())); + public static final Item CRAFTING_TABLE = register(new BlockItem("crafting_table", builder())); + public static final Item FARMLAND = register(new BlockItem("farmland", builder())); + public static final Item FURNACE = register(new BlockItem("furnace", builder())); + public static final Item LADDER = register(new BlockItem("ladder", builder())); + public static final Item COBBLESTONE_STAIRS = register(new BlockItem("cobblestone_stairs", builder())); + public static final Item SNOW = register(new BlockItem("snow", builder())); + public static final Item ICE = register(new BlockItem("ice", builder())); + public static final Item SNOW_BLOCK = register(new BlockItem("snow_block", builder())); + public static final Item CACTUS = register(new BlockItem("cactus", builder())); + public static final Item CLAY = register(new BlockItem("clay", builder())); + public static final Item JUKEBOX = register(new BlockItem("jukebox", builder())); + public static final Item OAK_FENCE = register(new BlockItem("oak_fence", builder())); + public static final Item SPRUCE_FENCE = register(new BlockItem("spruce_fence", builder())); + public static final Item BIRCH_FENCE = register(new BlockItem("birch_fence", builder())); + public static final Item JUNGLE_FENCE = register(new BlockItem("jungle_fence", builder())); + public static final Item ACACIA_FENCE = register(new BlockItem("acacia_fence", builder())); + public static final Item CHERRY_FENCE = register(new BlockItem("cherry_fence", builder())); + public static final Item DARK_OAK_FENCE = register(new BlockItem("dark_oak_fence", builder())); + public static final Item MANGROVE_FENCE = register(new BlockItem("mangrove_fence", builder())); + public static final Item BAMBOO_FENCE = register(new BlockItem("bamboo_fence", builder())); + public static final Item CRIMSON_FENCE = register(new BlockItem("crimson_fence", builder())); + public static final Item WARPED_FENCE = register(new BlockItem("warped_fence", builder())); + public static final Item PUMPKIN = register(new BlockItem("pumpkin", builder())); + public static final Item CARVED_PUMPKIN = register(new BlockItem("carved_pumpkin", builder())); + public static final Item JACK_O_LANTERN = register(new BlockItem("jack_o_lantern", builder())); + public static final Item NETHERRACK = register(new BlockItem("netherrack", builder())); + public static final Item SOUL_SAND = register(new BlockItem("soul_sand", builder())); + public static final Item SOUL_SOIL = register(new BlockItem("soul_soil", builder())); + public static final Item BASALT = register(new BlockItem("basalt", builder())); + public static final Item POLISHED_BASALT = register(new BlockItem("polished_basalt", builder())); + public static final Item SMOOTH_BASALT = register(new BlockItem("smooth_basalt", builder())); + public static final Item SOUL_TORCH = register(new BlockItem("soul_torch", builder())); + public static final Item GLOWSTONE = register(new BlockItem("glowstone", builder())); + public static final Item INFESTED_STONE = register(new BlockItem("infested_stone", builder())); + public static final Item INFESTED_COBBLESTONE = register(new BlockItem("infested_cobblestone", builder())); + public static final Item INFESTED_STONE_BRICKS = register(new BlockItem("infested_stone_bricks", builder())); + public static final Item INFESTED_MOSSY_STONE_BRICKS = register(new BlockItem("infested_mossy_stone_bricks", builder())); + public static final Item INFESTED_CRACKED_STONE_BRICKS = register(new BlockItem("infested_cracked_stone_bricks", builder())); + public static final Item INFESTED_CHISELED_STONE_BRICKS = register(new BlockItem("infested_chiseled_stone_bricks", builder())); + public static final Item INFESTED_DEEPSLATE = register(new BlockItem("infested_deepslate", builder())); + public static final Item STONE_BRICKS = register(new BlockItem("stone_bricks", builder())); + public static final Item MOSSY_STONE_BRICKS = register(new BlockItem("mossy_stone_bricks", builder())); + public static final Item CRACKED_STONE_BRICKS = register(new BlockItem("cracked_stone_bricks", builder())); + public static final Item CHISELED_STONE_BRICKS = register(new BlockItem("chiseled_stone_bricks", builder())); + public static final Item PACKED_MUD = register(new BlockItem("packed_mud", builder())); + public static final Item MUD_BRICKS = register(new BlockItem("mud_bricks", builder())); + public static final Item DEEPSLATE_BRICKS = register(new BlockItem("deepslate_bricks", builder())); + public static final Item CRACKED_DEEPSLATE_BRICKS = register(new BlockItem("cracked_deepslate_bricks", builder())); + public static final Item DEEPSLATE_TILES = register(new BlockItem("deepslate_tiles", builder())); + public static final Item CRACKED_DEEPSLATE_TILES = register(new BlockItem("cracked_deepslate_tiles", builder())); + public static final Item CHISELED_DEEPSLATE = register(new BlockItem("chiseled_deepslate", builder())); + public static final Item REINFORCED_DEEPSLATE = register(new BlockItem("reinforced_deepslate", builder())); + public static final Item BROWN_MUSHROOM_BLOCK = register(new BlockItem("brown_mushroom_block", builder())); + public static final Item RED_MUSHROOM_BLOCK = register(new BlockItem("red_mushroom_block", builder())); + public static final Item MUSHROOM_STEM = register(new BlockItem("mushroom_stem", builder())); + public static final Item IRON_BARS = register(new BlockItem("iron_bars", builder())); + public static final Item CHAIN = register(new BlockItem("chain", builder())); + public static final Item GLASS_PANE = register(new BlockItem("glass_pane", builder())); + public static final Item MELON = register(new BlockItem("melon", builder())); + public static final Item VINE = register(new BlockItem("vine", builder())); + public static final Item GLOW_LICHEN = register(new BlockItem("glow_lichen", builder())); + public static final Item BRICK_STAIRS = register(new BlockItem("brick_stairs", builder())); + public static final Item STONE_BRICK_STAIRS = register(new BlockItem("stone_brick_stairs", builder())); + public static final Item MUD_BRICK_STAIRS = register(new BlockItem("mud_brick_stairs", builder())); + public static final Item MYCELIUM = register(new BlockItem("mycelium", builder())); + public static final Item LILY_PAD = register(new BlockItem("lily_pad", builder())); + public static final Item NETHER_BRICKS = register(new BlockItem("nether_bricks", builder())); + public static final Item CRACKED_NETHER_BRICKS = register(new BlockItem("cracked_nether_bricks", builder())); + public static final Item CHISELED_NETHER_BRICKS = register(new BlockItem("chiseled_nether_bricks", builder())); + public static final Item NETHER_BRICK_FENCE = register(new BlockItem("nether_brick_fence", builder())); + public static final Item NETHER_BRICK_STAIRS = register(new BlockItem("nether_brick_stairs", builder())); + public static final Item SCULK = register(new BlockItem("sculk", builder())); + public static final Item SCULK_VEIN = register(new BlockItem("sculk_vein", builder())); + public static final Item SCULK_CATALYST = register(new BlockItem("sculk_catalyst", builder())); + public static final Item SCULK_SHRIEKER = register(new BlockItem("sculk_shrieker", builder())); + public static final Item ENCHANTING_TABLE = register(new BlockItem("enchanting_table", builder())); + public static final Item END_PORTAL_FRAME = register(new BlockItem("end_portal_frame", builder())); + public static final Item END_STONE = register(new BlockItem("end_stone", builder())); + public static final Item END_STONE_BRICKS = register(new BlockItem("end_stone_bricks", builder())); + public static final Item DRAGON_EGG = register(new BlockItem("dragon_egg", builder())); + public static final Item SANDSTONE_STAIRS = register(new BlockItem("sandstone_stairs", builder())); + public static final Item ENDER_CHEST = register(new BlockItem("ender_chest", builder())); + public static final Item EMERALD_BLOCK = register(new BlockItem("emerald_block", builder())); + public static final Item OAK_STAIRS = register(new BlockItem("oak_stairs", builder())); + public static final Item SPRUCE_STAIRS = register(new BlockItem("spruce_stairs", builder())); + public static final Item BIRCH_STAIRS = register(new BlockItem("birch_stairs", builder())); + public static final Item JUNGLE_STAIRS = register(new BlockItem("jungle_stairs", builder())); + public static final Item ACACIA_STAIRS = register(new BlockItem("acacia_stairs", builder())); + public static final Item CHERRY_STAIRS = register(new BlockItem("cherry_stairs", builder())); + public static final Item DARK_OAK_STAIRS = register(new BlockItem("dark_oak_stairs", builder())); + public static final Item MANGROVE_STAIRS = register(new BlockItem("mangrove_stairs", builder())); + public static final Item BAMBOO_STAIRS = register(new BlockItem("bamboo_stairs", builder())); + public static final Item BAMBOO_MOSAIC_STAIRS = register(new BlockItem("bamboo_mosaic_stairs", builder())); + public static final Item CRIMSON_STAIRS = register(new BlockItem("crimson_stairs", builder())); + public static final Item WARPED_STAIRS = register(new BlockItem("warped_stairs", builder())); + public static final Item COMMAND_BLOCK = register(new BlockItem("command_block", builder())); + public static final Item BEACON = register(new BlockItem("beacon", builder())); + public static final Item COBBLESTONE_WALL = register(new BlockItem("cobblestone_wall", builder())); + public static final Item MOSSY_COBBLESTONE_WALL = register(new BlockItem("mossy_cobblestone_wall", builder())); + public static final Item BRICK_WALL = register(new BlockItem("brick_wall", builder())); + public static final Item PRISMARINE_WALL = register(new BlockItem("prismarine_wall", builder())); + public static final Item RED_SANDSTONE_WALL = register(new BlockItem("red_sandstone_wall", builder())); + public static final Item MOSSY_STONE_BRICK_WALL = register(new BlockItem("mossy_stone_brick_wall", builder())); + public static final Item GRANITE_WALL = register(new BlockItem("granite_wall", builder())); + public static final Item STONE_BRICK_WALL = register(new BlockItem("stone_brick_wall", builder())); + public static final Item MUD_BRICK_WALL = register(new BlockItem("mud_brick_wall", builder())); + public static final Item NETHER_BRICK_WALL = register(new BlockItem("nether_brick_wall", builder())); + public static final Item ANDESITE_WALL = register(new BlockItem("andesite_wall", builder())); + public static final Item RED_NETHER_BRICK_WALL = register(new BlockItem("red_nether_brick_wall", builder())); + public static final Item SANDSTONE_WALL = register(new BlockItem("sandstone_wall", builder())); + public static final Item END_STONE_BRICK_WALL = register(new BlockItem("end_stone_brick_wall", builder())); + public static final Item DIORITE_WALL = register(new BlockItem("diorite_wall", builder())); + public static final Item BLACKSTONE_WALL = register(new BlockItem("blackstone_wall", builder())); + public static final Item POLISHED_BLACKSTONE_WALL = register(new BlockItem("polished_blackstone_wall", builder())); + public static final Item POLISHED_BLACKSTONE_BRICK_WALL = register(new BlockItem("polished_blackstone_brick_wall", builder())); + public static final Item COBBLED_DEEPSLATE_WALL = register(new BlockItem("cobbled_deepslate_wall", builder())); + public static final Item POLISHED_DEEPSLATE_WALL = register(new BlockItem("polished_deepslate_wall", builder())); + public static final Item DEEPSLATE_BRICK_WALL = register(new BlockItem("deepslate_brick_wall", builder())); + public static final Item DEEPSLATE_TILE_WALL = register(new BlockItem("deepslate_tile_wall", builder())); + public static final Item ANVIL = register(new BlockItem("anvil", builder())); + public static final Item CHIPPED_ANVIL = register(new BlockItem("chipped_anvil", builder())); + public static final Item DAMAGED_ANVIL = register(new BlockItem("damaged_anvil", builder())); + public static final Item CHISELED_QUARTZ_BLOCK = register(new BlockItem("chiseled_quartz_block", builder())); + public static final Item QUARTZ_BLOCK = register(new BlockItem("quartz_block", builder())); + public static final Item QUARTZ_BRICKS = register(new BlockItem("quartz_bricks", builder())); + public static final Item QUARTZ_PILLAR = register(new BlockItem("quartz_pillar", builder())); + public static final Item QUARTZ_STAIRS = register(new BlockItem("quartz_stairs", builder())); + public static final Item WHITE_TERRACOTTA = register(new BlockItem("white_terracotta", builder())); + public static final Item ORANGE_TERRACOTTA = register(new BlockItem("orange_terracotta", builder())); + public static final Item MAGENTA_TERRACOTTA = register(new BlockItem("magenta_terracotta", builder())); + public static final Item LIGHT_BLUE_TERRACOTTA = register(new BlockItem("light_blue_terracotta", builder())); + public static final Item YELLOW_TERRACOTTA = register(new BlockItem("yellow_terracotta", builder())); + public static final Item LIME_TERRACOTTA = register(new BlockItem("lime_terracotta", builder())); + public static final Item PINK_TERRACOTTA = register(new BlockItem("pink_terracotta", builder())); + public static final Item GRAY_TERRACOTTA = register(new BlockItem("gray_terracotta", builder())); + public static final Item LIGHT_GRAY_TERRACOTTA = register(new BlockItem("light_gray_terracotta", builder())); + public static final Item CYAN_TERRACOTTA = register(new BlockItem("cyan_terracotta", builder())); + public static final Item PURPLE_TERRACOTTA = register(new BlockItem("purple_terracotta", builder())); + public static final Item BLUE_TERRACOTTA = register(new BlockItem("blue_terracotta", builder())); + public static final Item BROWN_TERRACOTTA = register(new BlockItem("brown_terracotta", builder())); + public static final Item GREEN_TERRACOTTA = register(new BlockItem("green_terracotta", builder())); + public static final Item RED_TERRACOTTA = register(new BlockItem("red_terracotta", builder())); + public static final Item BLACK_TERRACOTTA = register(new BlockItem("black_terracotta", builder())); + public static final Item BARRIER = register(new BlockItem("barrier", builder())); + public static final Item LIGHT = register(new BlockItem("light", builder())); + public static final Item HAY_BLOCK = register(new BlockItem("hay_block", builder())); + public static final Item WHITE_CARPET = register(new BlockItem("white_carpet", builder())); + public static final Item ORANGE_CARPET = register(new BlockItem("orange_carpet", builder())); + public static final Item MAGENTA_CARPET = register(new BlockItem("magenta_carpet", builder())); + public static final Item LIGHT_BLUE_CARPET = register(new BlockItem("light_blue_carpet", builder())); + public static final Item YELLOW_CARPET = register(new BlockItem("yellow_carpet", builder())); + public static final Item LIME_CARPET = register(new BlockItem("lime_carpet", builder())); + public static final Item PINK_CARPET = register(new BlockItem("pink_carpet", builder())); + public static final Item GRAY_CARPET = register(new BlockItem("gray_carpet", builder())); + public static final Item LIGHT_GRAY_CARPET = register(new BlockItem("light_gray_carpet", builder())); + public static final Item CYAN_CARPET = register(new BlockItem("cyan_carpet", builder())); + public static final Item PURPLE_CARPET = register(new BlockItem("purple_carpet", builder())); + public static final Item BLUE_CARPET = register(new BlockItem("blue_carpet", builder())); + public static final Item BROWN_CARPET = register(new BlockItem("brown_carpet", builder())); + public static final Item GREEN_CARPET = register(new BlockItem("green_carpet", builder())); + public static final Item RED_CARPET = register(new BlockItem("red_carpet", builder())); + public static final Item BLACK_CARPET = register(new BlockItem("black_carpet", builder())); + public static final Item TERRACOTTA = register(new BlockItem("terracotta", builder())); + public static final Item PACKED_ICE = register(new BlockItem("packed_ice", builder())); + public static final Item DIRT_PATH = register(new BlockItem("dirt_path", builder())); + public static final Item SUNFLOWER = register(new BlockItem("sunflower", builder())); + public static final Item LILAC = register(new BlockItem("lilac", builder())); + public static final Item ROSE_BUSH = register(new BlockItem("rose_bush", builder())); + public static final Item PEONY = register(new BlockItem("peony", builder())); + public static final Item TALL_GRASS = register(new BlockItem("tall_grass", builder())); + public static final Item LARGE_FERN = register(new BlockItem("large_fern", builder())); + public static final Item WHITE_STAINED_GLASS = register(new BlockItem("white_stained_glass", builder())); + public static final Item ORANGE_STAINED_GLASS = register(new BlockItem("orange_stained_glass", builder())); + public static final Item MAGENTA_STAINED_GLASS = register(new BlockItem("magenta_stained_glass", builder())); + public static final Item LIGHT_BLUE_STAINED_GLASS = register(new BlockItem("light_blue_stained_glass", builder())); + public static final Item YELLOW_STAINED_GLASS = register(new BlockItem("yellow_stained_glass", builder())); + public static final Item LIME_STAINED_GLASS = register(new BlockItem("lime_stained_glass", builder())); + public static final Item PINK_STAINED_GLASS = register(new BlockItem("pink_stained_glass", builder())); + public static final Item GRAY_STAINED_GLASS = register(new BlockItem("gray_stained_glass", builder())); + public static final Item LIGHT_GRAY_STAINED_GLASS = register(new BlockItem("light_gray_stained_glass", builder())); + public static final Item CYAN_STAINED_GLASS = register(new BlockItem("cyan_stained_glass", builder())); + public static final Item PURPLE_STAINED_GLASS = register(new BlockItem("purple_stained_glass", builder())); + public static final Item BLUE_STAINED_GLASS = register(new BlockItem("blue_stained_glass", builder())); + public static final Item BROWN_STAINED_GLASS = register(new BlockItem("brown_stained_glass", builder())); + public static final Item GREEN_STAINED_GLASS = register(new BlockItem("green_stained_glass", builder())); + public static final Item RED_STAINED_GLASS = register(new BlockItem("red_stained_glass", builder())); + public static final Item BLACK_STAINED_GLASS = register(new BlockItem("black_stained_glass", builder())); + public static final Item WHITE_STAINED_GLASS_PANE = register(new BlockItem("white_stained_glass_pane", builder())); + public static final Item ORANGE_STAINED_GLASS_PANE = register(new BlockItem("orange_stained_glass_pane", builder())); + public static final Item MAGENTA_STAINED_GLASS_PANE = register(new BlockItem("magenta_stained_glass_pane", builder())); + public static final Item LIGHT_BLUE_STAINED_GLASS_PANE = register(new BlockItem("light_blue_stained_glass_pane", builder())); + public static final Item YELLOW_STAINED_GLASS_PANE = register(new BlockItem("yellow_stained_glass_pane", builder())); + public static final Item LIME_STAINED_GLASS_PANE = register(new BlockItem("lime_stained_glass_pane", builder())); + public static final Item PINK_STAINED_GLASS_PANE = register(new BlockItem("pink_stained_glass_pane", builder())); + public static final Item GRAY_STAINED_GLASS_PANE = register(new BlockItem("gray_stained_glass_pane", builder())); + public static final Item LIGHT_GRAY_STAINED_GLASS_PANE = register(new BlockItem("light_gray_stained_glass_pane", builder())); + public static final Item CYAN_STAINED_GLASS_PANE = register(new BlockItem("cyan_stained_glass_pane", builder())); + public static final Item PURPLE_STAINED_GLASS_PANE = register(new BlockItem("purple_stained_glass_pane", builder())); + public static final Item BLUE_STAINED_GLASS_PANE = register(new BlockItem("blue_stained_glass_pane", builder())); + public static final Item BROWN_STAINED_GLASS_PANE = register(new BlockItem("brown_stained_glass_pane", builder())); + public static final Item GREEN_STAINED_GLASS_PANE = register(new BlockItem("green_stained_glass_pane", builder())); + public static final Item RED_STAINED_GLASS_PANE = register(new BlockItem("red_stained_glass_pane", builder())); + public static final Item BLACK_STAINED_GLASS_PANE = register(new BlockItem("black_stained_glass_pane", builder())); + public static final Item PRISMARINE = register(new BlockItem("prismarine", builder())); + public static final Item PRISMARINE_BRICKS = register(new BlockItem("prismarine_bricks", builder())); + public static final Item DARK_PRISMARINE = register(new BlockItem("dark_prismarine", builder())); + public static final Item PRISMARINE_STAIRS = register(new BlockItem("prismarine_stairs", builder())); + public static final Item PRISMARINE_BRICK_STAIRS = register(new BlockItem("prismarine_brick_stairs", builder())); + public static final Item DARK_PRISMARINE_STAIRS = register(new BlockItem("dark_prismarine_stairs", builder())); + public static final Item SEA_LANTERN = register(new BlockItem("sea_lantern", builder())); + public static final Item RED_SANDSTONE = register(new BlockItem("red_sandstone", builder())); + public static final Item CHISELED_RED_SANDSTONE = register(new BlockItem("chiseled_red_sandstone", builder())); + public static final Item CUT_RED_SANDSTONE = register(new BlockItem("cut_red_sandstone", builder())); + public static final Item RED_SANDSTONE_STAIRS = register(new BlockItem("red_sandstone_stairs", builder())); + public static final Item REPEATING_COMMAND_BLOCK = register(new BlockItem("repeating_command_block", builder())); + public static final Item CHAIN_COMMAND_BLOCK = register(new BlockItem("chain_command_block", builder())); + public static final Item MAGMA_BLOCK = register(new BlockItem("magma_block", builder())); + public static final Item NETHER_WART_BLOCK = register(new BlockItem("nether_wart_block", builder())); + public static final Item WARPED_WART_BLOCK = register(new BlockItem("warped_wart_block", builder())); + public static final Item RED_NETHER_BRICKS = register(new BlockItem("red_nether_bricks", builder())); + public static final Item BONE_BLOCK = register(new BlockItem("bone_block", builder())); + public static final Item STRUCTURE_VOID = register(new BlockItem("structure_void", builder())); + public static final Item SHULKER_BOX = register(new ShulkerBoxItem("shulker_box", builder().stackSize(1))); + public static final Item WHITE_SHULKER_BOX = register(new ShulkerBoxItem("white_shulker_box", builder().stackSize(1))); + public static final Item ORANGE_SHULKER_BOX = register(new ShulkerBoxItem("orange_shulker_box", builder().stackSize(1))); + public static final Item MAGENTA_SHULKER_BOX = register(new ShulkerBoxItem("magenta_shulker_box", builder().stackSize(1))); + public static final Item LIGHT_BLUE_SHULKER_BOX = register(new ShulkerBoxItem("light_blue_shulker_box", builder().stackSize(1))); + public static final Item YELLOW_SHULKER_BOX = register(new ShulkerBoxItem("yellow_shulker_box", builder().stackSize(1))); + public static final Item LIME_SHULKER_BOX = register(new ShulkerBoxItem("lime_shulker_box", builder().stackSize(1))); + public static final Item PINK_SHULKER_BOX = register(new ShulkerBoxItem("pink_shulker_box", builder().stackSize(1))); + public static final Item GRAY_SHULKER_BOX = register(new ShulkerBoxItem("gray_shulker_box", builder().stackSize(1))); + public static final Item LIGHT_GRAY_SHULKER_BOX = register(new ShulkerBoxItem("light_gray_shulker_box", builder().stackSize(1))); + public static final Item CYAN_SHULKER_BOX = register(new ShulkerBoxItem("cyan_shulker_box", builder().stackSize(1))); + public static final Item PURPLE_SHULKER_BOX = register(new ShulkerBoxItem("purple_shulker_box", builder().stackSize(1))); + public static final Item BLUE_SHULKER_BOX = register(new ShulkerBoxItem("blue_shulker_box", builder().stackSize(1))); + public static final Item BROWN_SHULKER_BOX = register(new ShulkerBoxItem("brown_shulker_box", builder().stackSize(1))); + public static final Item GREEN_SHULKER_BOX = register(new ShulkerBoxItem("green_shulker_box", builder().stackSize(1))); + public static final Item RED_SHULKER_BOX = register(new ShulkerBoxItem("red_shulker_box", builder().stackSize(1))); + public static final Item BLACK_SHULKER_BOX = register(new ShulkerBoxItem("black_shulker_box", builder().stackSize(1))); + public static final Item WHITE_GLAZED_TERRACOTTA = register(new BlockItem("white_glazed_terracotta", builder())); + public static final Item ORANGE_GLAZED_TERRACOTTA = register(new BlockItem("orange_glazed_terracotta", builder())); + public static final Item MAGENTA_GLAZED_TERRACOTTA = register(new BlockItem("magenta_glazed_terracotta", builder())); + public static final Item LIGHT_BLUE_GLAZED_TERRACOTTA = register(new BlockItem("light_blue_glazed_terracotta", builder())); + public static final Item YELLOW_GLAZED_TERRACOTTA = register(new BlockItem("yellow_glazed_terracotta", builder())); + public static final Item LIME_GLAZED_TERRACOTTA = register(new BlockItem("lime_glazed_terracotta", builder())); + public static final Item PINK_GLAZED_TERRACOTTA = register(new BlockItem("pink_glazed_terracotta", builder())); + public static final Item GRAY_GLAZED_TERRACOTTA = register(new BlockItem("gray_glazed_terracotta", builder())); + public static final Item LIGHT_GRAY_GLAZED_TERRACOTTA = register(new BlockItem("light_gray_glazed_terracotta", builder())); + public static final Item CYAN_GLAZED_TERRACOTTA = register(new BlockItem("cyan_glazed_terracotta", builder())); + public static final Item PURPLE_GLAZED_TERRACOTTA = register(new BlockItem("purple_glazed_terracotta", builder())); + public static final Item BLUE_GLAZED_TERRACOTTA = register(new BlockItem("blue_glazed_terracotta", builder())); + public static final Item BROWN_GLAZED_TERRACOTTA = register(new BlockItem("brown_glazed_terracotta", builder())); + public static final Item GREEN_GLAZED_TERRACOTTA = register(new BlockItem("green_glazed_terracotta", builder())); + public static final Item RED_GLAZED_TERRACOTTA = register(new BlockItem("red_glazed_terracotta", builder())); + public static final Item BLACK_GLAZED_TERRACOTTA = register(new BlockItem("black_glazed_terracotta", builder())); + public static final Item WHITE_CONCRETE = register(new BlockItem("white_concrete", builder())); + public static final Item ORANGE_CONCRETE = register(new BlockItem("orange_concrete", builder())); + public static final Item MAGENTA_CONCRETE = register(new BlockItem("magenta_concrete", builder())); + public static final Item LIGHT_BLUE_CONCRETE = register(new BlockItem("light_blue_concrete", builder())); + public static final Item YELLOW_CONCRETE = register(new BlockItem("yellow_concrete", builder())); + public static final Item LIME_CONCRETE = register(new BlockItem("lime_concrete", builder())); + public static final Item PINK_CONCRETE = register(new BlockItem("pink_concrete", builder())); + public static final Item GRAY_CONCRETE = register(new BlockItem("gray_concrete", builder())); + public static final Item LIGHT_GRAY_CONCRETE = register(new BlockItem("light_gray_concrete", builder())); + public static final Item CYAN_CONCRETE = register(new BlockItem("cyan_concrete", builder())); + public static final Item PURPLE_CONCRETE = register(new BlockItem("purple_concrete", builder())); + public static final Item BLUE_CONCRETE = register(new BlockItem("blue_concrete", builder())); + public static final Item BROWN_CONCRETE = register(new BlockItem("brown_concrete", builder())); + public static final Item GREEN_CONCRETE = register(new BlockItem("green_concrete", builder())); + public static final Item RED_CONCRETE = register(new BlockItem("red_concrete", builder())); + public static final Item BLACK_CONCRETE = register(new BlockItem("black_concrete", builder())); + public static final Item WHITE_CONCRETE_POWDER = register(new BlockItem("white_concrete_powder", builder())); + public static final Item ORANGE_CONCRETE_POWDER = register(new BlockItem("orange_concrete_powder", builder())); + public static final Item MAGENTA_CONCRETE_POWDER = register(new BlockItem("magenta_concrete_powder", builder())); + public static final Item LIGHT_BLUE_CONCRETE_POWDER = register(new BlockItem("light_blue_concrete_powder", builder())); + public static final Item YELLOW_CONCRETE_POWDER = register(new BlockItem("yellow_concrete_powder", builder())); + public static final Item LIME_CONCRETE_POWDER = register(new BlockItem("lime_concrete_powder", builder())); + public static final Item PINK_CONCRETE_POWDER = register(new BlockItem("pink_concrete_powder", builder())); + public static final Item GRAY_CONCRETE_POWDER = register(new BlockItem("gray_concrete_powder", builder())); + public static final Item LIGHT_GRAY_CONCRETE_POWDER = register(new BlockItem("light_gray_concrete_powder", builder())); + public static final Item CYAN_CONCRETE_POWDER = register(new BlockItem("cyan_concrete_powder", builder())); + public static final Item PURPLE_CONCRETE_POWDER = register(new BlockItem("purple_concrete_powder", builder())); + public static final Item BLUE_CONCRETE_POWDER = register(new BlockItem("blue_concrete_powder", builder())); + public static final Item BROWN_CONCRETE_POWDER = register(new BlockItem("brown_concrete_powder", builder())); + public static final Item GREEN_CONCRETE_POWDER = register(new BlockItem("green_concrete_powder", builder())); + public static final Item RED_CONCRETE_POWDER = register(new BlockItem("red_concrete_powder", builder())); + public static final Item BLACK_CONCRETE_POWDER = register(new BlockItem("black_concrete_powder", builder())); + public static final Item TURTLE_EGG = register(new BlockItem("turtle_egg", builder())); + public static final Item DEAD_TUBE_CORAL_BLOCK = register(new BlockItem("dead_tube_coral_block", builder())); + public static final Item DEAD_BRAIN_CORAL_BLOCK = register(new BlockItem("dead_brain_coral_block", builder())); + public static final Item DEAD_BUBBLE_CORAL_BLOCK = register(new BlockItem("dead_bubble_coral_block", builder())); + public static final Item DEAD_FIRE_CORAL_BLOCK = register(new BlockItem("dead_fire_coral_block", builder())); + public static final Item DEAD_HORN_CORAL_BLOCK = register(new BlockItem("dead_horn_coral_block", builder())); + public static final Item TUBE_CORAL_BLOCK = register(new BlockItem("tube_coral_block", builder())); + public static final Item BRAIN_CORAL_BLOCK = register(new BlockItem("brain_coral_block", builder())); + public static final Item BUBBLE_CORAL_BLOCK = register(new BlockItem("bubble_coral_block", builder())); + public static final Item FIRE_CORAL_BLOCK = register(new BlockItem("fire_coral_block", builder())); + public static final Item HORN_CORAL_BLOCK = register(new BlockItem("horn_coral_block", builder())); + public static final Item TUBE_CORAL = register(new BlockItem("tube_coral", builder())); + public static final Item BRAIN_CORAL = register(new BlockItem("brain_coral", builder())); + public static final Item BUBBLE_CORAL = register(new BlockItem("bubble_coral", builder())); + public static final Item FIRE_CORAL = register(new BlockItem("fire_coral", builder())); + public static final Item HORN_CORAL = register(new BlockItem("horn_coral", builder())); + public static final Item DEAD_BRAIN_CORAL = register(new BlockItem("dead_brain_coral", builder())); + public static final Item DEAD_BUBBLE_CORAL = register(new BlockItem("dead_bubble_coral", builder())); + public static final Item DEAD_FIRE_CORAL = register(new BlockItem("dead_fire_coral", builder())); + public static final Item DEAD_HORN_CORAL = register(new BlockItem("dead_horn_coral", builder())); + public static final Item DEAD_TUBE_CORAL = register(new BlockItem("dead_tube_coral", builder())); + public static final Item TUBE_CORAL_FAN = register(new BlockItem("tube_coral_fan", builder())); + public static final Item BRAIN_CORAL_FAN = register(new BlockItem("brain_coral_fan", builder())); + public static final Item BUBBLE_CORAL_FAN = register(new BlockItem("bubble_coral_fan", builder())); + public static final Item FIRE_CORAL_FAN = register(new BlockItem("fire_coral_fan", builder())); + public static final Item HORN_CORAL_FAN = register(new BlockItem("horn_coral_fan", builder())); + public static final Item DEAD_TUBE_CORAL_FAN = register(new BlockItem("dead_tube_coral_fan", builder())); + public static final Item DEAD_BRAIN_CORAL_FAN = register(new BlockItem("dead_brain_coral_fan", builder())); + public static final Item DEAD_BUBBLE_CORAL_FAN = register(new BlockItem("dead_bubble_coral_fan", builder())); + public static final Item DEAD_FIRE_CORAL_FAN = register(new BlockItem("dead_fire_coral_fan", builder())); + public static final Item DEAD_HORN_CORAL_FAN = register(new BlockItem("dead_horn_coral_fan", builder())); + public static final Item BLUE_ICE = register(new BlockItem("blue_ice", builder())); + public static final Item CONDUIT = register(new BlockItem("conduit", builder())); + public static final Item POLISHED_GRANITE_STAIRS = register(new BlockItem("polished_granite_stairs", builder())); + public static final Item SMOOTH_RED_SANDSTONE_STAIRS = register(new BlockItem("smooth_red_sandstone_stairs", builder())); + public static final Item MOSSY_STONE_BRICK_STAIRS = register(new BlockItem("mossy_stone_brick_stairs", builder())); + public static final Item POLISHED_DIORITE_STAIRS = register(new BlockItem("polished_diorite_stairs", builder())); + public static final Item MOSSY_COBBLESTONE_STAIRS = register(new BlockItem("mossy_cobblestone_stairs", builder())); + public static final Item END_STONE_BRICK_STAIRS = register(new BlockItem("end_stone_brick_stairs", builder())); + public static final Item STONE_STAIRS = register(new BlockItem("stone_stairs", builder())); + public static final Item SMOOTH_SANDSTONE_STAIRS = register(new BlockItem("smooth_sandstone_stairs", builder())); + public static final Item SMOOTH_QUARTZ_STAIRS = register(new BlockItem("smooth_quartz_stairs", builder())); + public static final Item GRANITE_STAIRS = register(new BlockItem("granite_stairs", builder())); + public static final Item ANDESITE_STAIRS = register(new BlockItem("andesite_stairs", builder())); + public static final Item RED_NETHER_BRICK_STAIRS = register(new BlockItem("red_nether_brick_stairs", builder())); + public static final Item POLISHED_ANDESITE_STAIRS = register(new BlockItem("polished_andesite_stairs", builder())); + public static final Item DIORITE_STAIRS = register(new BlockItem("diorite_stairs", builder())); + public static final Item COBBLED_DEEPSLATE_STAIRS = register(new BlockItem("cobbled_deepslate_stairs", builder())); + public static final Item POLISHED_DEEPSLATE_STAIRS = register(new BlockItem("polished_deepslate_stairs", builder())); + public static final Item DEEPSLATE_BRICK_STAIRS = register(new BlockItem("deepslate_brick_stairs", builder())); + public static final Item DEEPSLATE_TILE_STAIRS = register(new BlockItem("deepslate_tile_stairs", builder())); + public static final Item POLISHED_GRANITE_SLAB = register(new BlockItem("polished_granite_slab", builder())); + public static final Item SMOOTH_RED_SANDSTONE_SLAB = register(new BlockItem("smooth_red_sandstone_slab", builder())); + public static final Item MOSSY_STONE_BRICK_SLAB = register(new BlockItem("mossy_stone_brick_slab", builder())); + public static final Item POLISHED_DIORITE_SLAB = register(new BlockItem("polished_diorite_slab", builder())); + public static final Item MOSSY_COBBLESTONE_SLAB = register(new BlockItem("mossy_cobblestone_slab", builder())); + public static final Item END_STONE_BRICK_SLAB = register(new BlockItem("end_stone_brick_slab", builder())); + public static final Item SMOOTH_SANDSTONE_SLAB = register(new BlockItem("smooth_sandstone_slab", builder())); + public static final Item SMOOTH_QUARTZ_SLAB = register(new BlockItem("smooth_quartz_slab", builder())); + public static final Item GRANITE_SLAB = register(new BlockItem("granite_slab", builder())); + public static final Item ANDESITE_SLAB = register(new BlockItem("andesite_slab", builder())); + public static final Item RED_NETHER_BRICK_SLAB = register(new BlockItem("red_nether_brick_slab", builder())); + public static final Item POLISHED_ANDESITE_SLAB = register(new BlockItem("polished_andesite_slab", builder())); + public static final Item DIORITE_SLAB = register(new BlockItem("diorite_slab", builder())); + public static final Item COBBLED_DEEPSLATE_SLAB = register(new BlockItem("cobbled_deepslate_slab", builder())); + public static final Item POLISHED_DEEPSLATE_SLAB = register(new BlockItem("polished_deepslate_slab", builder())); + public static final Item DEEPSLATE_BRICK_SLAB = register(new BlockItem("deepslate_brick_slab", builder())); + public static final Item DEEPSLATE_TILE_SLAB = register(new BlockItem("deepslate_tile_slab", builder())); + public static final Item SCAFFOLDING = register(new BlockItem("scaffolding", builder())); + public static final Item REDSTONE = register(new BlockItem("redstone", builder())); + public static final Item REDSTONE_TORCH = register(new BlockItem("redstone_torch", builder())); + public static final Item REDSTONE_BLOCK = register(new BlockItem("redstone_block", builder())); + public static final Item REPEATER = register(new BlockItem("repeater", builder())); + public static final Item COMPARATOR = register(new BlockItem("comparator", builder())); + public static final Item PISTON = register(new BlockItem("piston", builder())); + public static final Item STICKY_PISTON = register(new BlockItem("sticky_piston", builder())); + public static final Item SLIME_BLOCK = register(new BlockItem("slime_block", builder())); + public static final Item HONEY_BLOCK = register(new BlockItem("honey_block", builder())); + public static final Item OBSERVER = register(new BlockItem("observer", builder())); + public static final Item HOPPER = register(new BlockItem("hopper", builder())); + public static final Item DISPENSER = register(new BlockItem("dispenser", builder())); + public static final Item DROPPER = register(new BlockItem("dropper", builder())); + public static final Item LECTERN = register(new BlockItem("lectern", builder())); + public static final Item TARGET = register(new BlockItem("target", builder())); + public static final Item LEVER = register(new BlockItem("lever", builder())); + public static final Item LIGHTNING_ROD = register(new BlockItem("lightning_rod", builder())); + public static final Item DAYLIGHT_DETECTOR = register(new BlockItem("daylight_detector", builder())); + public static final Item SCULK_SENSOR = register(new BlockItem("sculk_sensor", builder())); + public static final Item TRIPWIRE_HOOK = register(new BlockItem("tripwire_hook", builder())); + public static final Item TRAPPED_CHEST = register(new BlockItem("trapped_chest", builder())); + public static final Item TNT = register(new BlockItem("tnt", builder())); + public static final Item REDSTONE_LAMP = register(new BlockItem("redstone_lamp", builder())); + public static final Item NOTE_BLOCK = register(new BlockItem("note_block", builder())); + public static final Item STONE_BUTTON = register(new BlockItem("stone_button", builder())); + public static final Item POLISHED_BLACKSTONE_BUTTON = register(new BlockItem("polished_blackstone_button", builder())); + public static final Item OAK_BUTTON = register(new BlockItem("oak_button", builder())); + public static final Item SPRUCE_BUTTON = register(new BlockItem("spruce_button", builder())); + public static final Item BIRCH_BUTTON = register(new BlockItem("birch_button", builder())); + public static final Item JUNGLE_BUTTON = register(new BlockItem("jungle_button", builder())); + public static final Item ACACIA_BUTTON = register(new BlockItem("acacia_button", builder())); + public static final Item CHERRY_BUTTON = register(new BlockItem("cherry_button", builder())); + public static final Item DARK_OAK_BUTTON = register(new BlockItem("dark_oak_button", builder())); + public static final Item MANGROVE_BUTTON = register(new BlockItem("mangrove_button", builder())); + public static final Item BAMBOO_BUTTON = register(new BlockItem("bamboo_button", builder())); + public static final Item CRIMSON_BUTTON = register(new BlockItem("crimson_button", builder())); + public static final Item WARPED_BUTTON = register(new BlockItem("warped_button", builder())); + public static final Item STONE_PRESSURE_PLATE = register(new BlockItem("stone_pressure_plate", builder())); + public static final Item POLISHED_BLACKSTONE_PRESSURE_PLATE = register(new BlockItem("polished_blackstone_pressure_plate", builder())); + public static final Item LIGHT_WEIGHTED_PRESSURE_PLATE = register(new BlockItem("light_weighted_pressure_plate", builder())); + public static final Item HEAVY_WEIGHTED_PRESSURE_PLATE = register(new BlockItem("heavy_weighted_pressure_plate", builder())); + public static final Item OAK_PRESSURE_PLATE = register(new BlockItem("oak_pressure_plate", builder())); + public static final Item SPRUCE_PRESSURE_PLATE = register(new BlockItem("spruce_pressure_plate", builder())); + public static final Item BIRCH_PRESSURE_PLATE = register(new BlockItem("birch_pressure_plate", builder())); + public static final Item JUNGLE_PRESSURE_PLATE = register(new BlockItem("jungle_pressure_plate", builder())); + public static final Item ACACIA_PRESSURE_PLATE = register(new BlockItem("acacia_pressure_plate", builder())); + public static final Item CHERRY_PRESSURE_PLATE = register(new BlockItem("cherry_pressure_plate", builder())); + public static final Item DARK_OAK_PRESSURE_PLATE = register(new BlockItem("dark_oak_pressure_plate", builder())); + public static final Item MANGROVE_PRESSURE_PLATE = register(new BlockItem("mangrove_pressure_plate", builder())); + public static final Item BAMBOO_PRESSURE_PLATE = register(new BlockItem("bamboo_pressure_plate", builder())); + public static final Item CRIMSON_PRESSURE_PLATE = register(new BlockItem("crimson_pressure_plate", builder())); + public static final Item WARPED_PRESSURE_PLATE = register(new BlockItem("warped_pressure_plate", builder())); + public static final Item IRON_DOOR = register(new BlockItem("iron_door", builder())); + public static final Item OAK_DOOR = register(new BlockItem("oak_door", builder())); + public static final Item SPRUCE_DOOR = register(new BlockItem("spruce_door", builder())); + public static final Item BIRCH_DOOR = register(new BlockItem("birch_door", builder())); + public static final Item JUNGLE_DOOR = register(new BlockItem("jungle_door", builder())); + public static final Item ACACIA_DOOR = register(new BlockItem("acacia_door", builder())); + public static final Item CHERRY_DOOR = register(new BlockItem("cherry_door", builder())); + public static final Item DARK_OAK_DOOR = register(new BlockItem("dark_oak_door", builder())); + public static final Item MANGROVE_DOOR = register(new BlockItem("mangrove_door", builder())); + public static final Item BAMBOO_DOOR = register(new BlockItem("bamboo_door", builder())); + public static final Item CRIMSON_DOOR = register(new BlockItem("crimson_door", builder())); + public static final Item WARPED_DOOR = register(new BlockItem("warped_door", builder())); + public static final Item IRON_TRAPDOOR = register(new BlockItem("iron_trapdoor", builder())); + public static final Item OAK_TRAPDOOR = register(new BlockItem("oak_trapdoor", builder())); + public static final Item SPRUCE_TRAPDOOR = register(new BlockItem("spruce_trapdoor", builder())); + public static final Item BIRCH_TRAPDOOR = register(new BlockItem("birch_trapdoor", builder())); + public static final Item JUNGLE_TRAPDOOR = register(new BlockItem("jungle_trapdoor", builder())); + public static final Item ACACIA_TRAPDOOR = register(new BlockItem("acacia_trapdoor", builder())); + public static final Item CHERRY_TRAPDOOR = register(new BlockItem("cherry_trapdoor", builder())); + public static final Item DARK_OAK_TRAPDOOR = register(new BlockItem("dark_oak_trapdoor", builder())); + public static final Item MANGROVE_TRAPDOOR = register(new BlockItem("mangrove_trapdoor", builder())); + public static final Item BAMBOO_TRAPDOOR = register(new BlockItem("bamboo_trapdoor", builder())); + public static final Item CRIMSON_TRAPDOOR = register(new BlockItem("crimson_trapdoor", builder())); + public static final Item WARPED_TRAPDOOR = register(new BlockItem("warped_trapdoor", builder())); + public static final Item OAK_FENCE_GATE = register(new BlockItem("oak_fence_gate", builder())); + public static final Item SPRUCE_FENCE_GATE = register(new BlockItem("spruce_fence_gate", builder())); + public static final Item BIRCH_FENCE_GATE = register(new BlockItem("birch_fence_gate", builder())); + public static final Item JUNGLE_FENCE_GATE = register(new BlockItem("jungle_fence_gate", builder())); + public static final Item ACACIA_FENCE_GATE = register(new BlockItem("acacia_fence_gate", builder())); + public static final Item CHERRY_FENCE_GATE = register(new BlockItem("cherry_fence_gate", builder())); + public static final Item DARK_OAK_FENCE_GATE = register(new BlockItem("dark_oak_fence_gate", builder())); + public static final Item MANGROVE_FENCE_GATE = register(new BlockItem("mangrove_fence_gate", builder())); + public static final Item BAMBOO_FENCE_GATE = register(new BlockItem("bamboo_fence_gate", builder())); + public static final Item CRIMSON_FENCE_GATE = register(new BlockItem("crimson_fence_gate", builder())); + public static final Item WARPED_FENCE_GATE = register(new BlockItem("warped_fence_gate", builder())); + public static final Item POWERED_RAIL = register(new BlockItem("powered_rail", builder())); + public static final Item DETECTOR_RAIL = register(new BlockItem("detector_rail", builder())); + public static final Item RAIL = register(new BlockItem("rail", builder())); + public static final Item ACTIVATOR_RAIL = register(new BlockItem("activator_rail", builder())); public static final Item SADDLE = register(new Item("saddle", builder().stackSize(1))); public static final Item MINECART = register(new Item("minecart", builder().stackSize(1))); public static final Item CHEST_MINECART = register(new Item("chest_minecart", builder().stackSize(1))); @@ -766,33 +767,33 @@ public final class Items { public static final Item HOPPER_MINECART = register(new Item("hopper_minecart", builder().stackSize(1))); public static final Item CARROT_ON_A_STICK = register(new Item("carrot_on_a_stick", builder().stackSize(1).maxDamage(25))); public static final Item WARPED_FUNGUS_ON_A_STICK = register(new Item("warped_fungus_on_a_stick", builder().stackSize(1).maxDamage(100))); - public static final ElytraItem ELYTRA = register(new ElytraItem("elytra", builder().stackSize(1).maxDamage(432))); - public static final Item OAK_BOAT = register(new Item("oak_boat", builder().stackSize(1))); - public static final Item OAK_CHEST_BOAT = register(new Item("oak_chest_boat", builder().stackSize(1))); - public static final Item SPRUCE_BOAT = register(new Item("spruce_boat", builder().stackSize(1))); - public static final Item SPRUCE_CHEST_BOAT = register(new Item("spruce_chest_boat", builder().stackSize(1))); - public static final Item BIRCH_BOAT = register(new Item("birch_boat", builder().stackSize(1))); - public static final Item BIRCH_CHEST_BOAT = register(new Item("birch_chest_boat", builder().stackSize(1))); - public static final Item JUNGLE_BOAT = register(new Item("jungle_boat", builder().stackSize(1))); - public static final Item JUNGLE_CHEST_BOAT = register(new Item("jungle_chest_boat", builder().stackSize(1))); - public static final Item ACACIA_BOAT = register(new Item("acacia_boat", builder().stackSize(1))); - public static final Item ACACIA_CHEST_BOAT = register(new Item("acacia_chest_boat", builder().stackSize(1))); - public static final Item CHERRY_BOAT = register(new Item("cherry_boat", builder().stackSize(1))); - public static final Item CHERRY_CHEST_BOAT = register(new Item("cherry_chest_boat", builder().stackSize(1))); - public static final Item DARK_OAK_BOAT = register(new Item("dark_oak_boat", builder().stackSize(1))); - public static final Item DARK_OAK_CHEST_BOAT = register(new Item("dark_oak_chest_boat", builder().stackSize(1))); - public static final Item MANGROVE_BOAT = register(new Item("mangrove_boat", builder().stackSize(1))); - public static final Item MANGROVE_CHEST_BOAT = register(new Item("mangrove_chest_boat", builder().stackSize(1))); - public static final Item BAMBOO_RAFT = register(new Item("bamboo_raft", builder().stackSize(1))); - public static final Item BAMBOO_CHEST_RAFT = register(new Item("bamboo_chest_raft", builder().stackSize(1))); - public static final Item STRUCTURE_BLOCK = register(new Item("structure_block", builder())); - public static final Item JIGSAW = register(new Item("jigsaw", builder())); - public static final ArmorItem TURTLE_HELMET = register(new ArmorItem("turtle_helmet", ArmorMaterial.TURTLE, builder().stackSize(1).maxDamage(275))); + public static final Item ELYTRA = register(new ElytraItem("elytra", builder().stackSize(1).maxDamage(432))); + public static final Item OAK_BOAT = register(new BoatItem("oak_boat", builder().stackSize(1))); + public static final Item OAK_CHEST_BOAT = register(new BoatItem("oak_chest_boat", builder().stackSize(1))); + public static final Item SPRUCE_BOAT = register(new BoatItem("spruce_boat", builder().stackSize(1))); + public static final Item SPRUCE_CHEST_BOAT = register(new BoatItem("spruce_chest_boat", builder().stackSize(1))); + public static final Item BIRCH_BOAT = register(new BoatItem("birch_boat", builder().stackSize(1))); + public static final Item BIRCH_CHEST_BOAT = register(new BoatItem("birch_chest_boat", builder().stackSize(1))); + public static final Item JUNGLE_BOAT = register(new BoatItem("jungle_boat", builder().stackSize(1))); + public static final Item JUNGLE_CHEST_BOAT = register(new BoatItem("jungle_chest_boat", builder().stackSize(1))); + public static final Item ACACIA_BOAT = register(new BoatItem("acacia_boat", builder().stackSize(1))); + public static final Item ACACIA_CHEST_BOAT = register(new BoatItem("acacia_chest_boat", builder().stackSize(1))); + public static final Item CHERRY_BOAT = register(new BoatItem("cherry_boat", builder().stackSize(1))); + public static final Item CHERRY_CHEST_BOAT = register(new BoatItem("cherry_chest_boat", builder().stackSize(1))); + public static final Item DARK_OAK_BOAT = register(new BoatItem("dark_oak_boat", builder().stackSize(1))); + public static final Item DARK_OAK_CHEST_BOAT = register(new BoatItem("dark_oak_chest_boat", builder().stackSize(1))); + public static final Item MANGROVE_BOAT = register(new BoatItem("mangrove_boat", builder().stackSize(1))); + public static final Item MANGROVE_CHEST_BOAT = register(new BoatItem("mangrove_chest_boat", builder().stackSize(1))); + public static final Item BAMBOO_RAFT = register(new BoatItem("bamboo_raft", builder().stackSize(1))); + public static final Item BAMBOO_CHEST_RAFT = register(new BoatItem("bamboo_chest_raft", builder().stackSize(1))); + public static final Item STRUCTURE_BLOCK = register(new BlockItem("structure_block", builder())); + public static final Item JIGSAW = register(new BlockItem("jigsaw", builder())); + public static final Item TURTLE_HELMET = register(new ArmorItem("turtle_helmet", ArmorMaterial.TURTLE, builder().stackSize(1).maxDamage(275))); public static final Item SCUTE = register(new Item("scute", builder())); public static final Item FLINT_AND_STEEL = register(new Item("flint_and_steel", builder().stackSize(1).maxDamage(64))); public static final Item APPLE = register(new Item("apple", builder())); public static final Item BOW = register(new Item("bow", builder().stackSize(1).maxDamage(384))); - public static final ArrowItem ARROW = register(new ArrowItem("arrow", builder())); + public static final Item ARROW = register(new ArrowItem("arrow", builder())); public static final Item COAL = register(new Item("coal", builder())); public static final Item CHARCOAL = register(new Item("charcoal", builder())); public static final Item DIAMOND = register(new Item("diamond", builder())); @@ -808,121 +809,121 @@ public final class Items { public static final Item GOLD_INGOT = register(new Item("gold_ingot", builder())); public static final Item NETHERITE_INGOT = register(new Item("netherite_ingot", builder())); public static final Item NETHERITE_SCRAP = register(new Item("netherite_scrap", builder())); - public static final TieredItem WOODEN_SWORD = register(new TieredItem("wooden_sword", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); - public static final TieredItem WOODEN_SHOVEL = register(new TieredItem("wooden_shovel", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); - public static final TieredItem WOODEN_PICKAXE = register(new TieredItem("wooden_pickaxe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); - public static final TieredItem WOODEN_AXE = register(new TieredItem("wooden_axe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); - public static final TieredItem WOODEN_HOE = register(new TieredItem("wooden_hoe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); - public static final TieredItem STONE_SWORD = register(new TieredItem("stone_sword", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); - public static final TieredItem STONE_SHOVEL = register(new TieredItem("stone_shovel", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); - public static final TieredItem STONE_PICKAXE = register(new TieredItem("stone_pickaxe", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); - public static final TieredItem STONE_AXE = register(new TieredItem("stone_axe", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); - public static final TieredItem STONE_HOE = register(new TieredItem("stone_hoe", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); - public static final TieredItem GOLDEN_SWORD = register(new TieredItem("golden_sword", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); - public static final TieredItem GOLDEN_SHOVEL = register(new TieredItem("golden_shovel", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); - public static final TieredItem GOLDEN_PICKAXE = register(new TieredItem("golden_pickaxe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); - public static final TieredItem GOLDEN_AXE = register(new TieredItem("golden_axe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); - public static final TieredItem GOLDEN_HOE = register(new TieredItem("golden_hoe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); - public static final TieredItem IRON_SWORD = register(new TieredItem("iron_sword", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); - public static final TieredItem IRON_SHOVEL = register(new TieredItem("iron_shovel", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); - public static final TieredItem IRON_PICKAXE = register(new TieredItem("iron_pickaxe", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); - public static final TieredItem IRON_AXE = register(new TieredItem("iron_axe", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); - public static final TieredItem IRON_HOE = register(new TieredItem("iron_hoe", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); - public static final TieredItem DIAMOND_SWORD = register(new TieredItem("diamond_sword", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); - public static final TieredItem DIAMOND_SHOVEL = register(new TieredItem("diamond_shovel", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); - public static final TieredItem DIAMOND_PICKAXE = register(new TieredItem("diamond_pickaxe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); - public static final TieredItem DIAMOND_AXE = register(new TieredItem("diamond_axe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); - public static final TieredItem DIAMOND_HOE = register(new TieredItem("diamond_hoe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); - public static final TieredItem NETHERITE_SWORD = register(new TieredItem("netherite_sword", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); - public static final TieredItem NETHERITE_SHOVEL = register(new TieredItem("netherite_shovel", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); - public static final TieredItem NETHERITE_PICKAXE = register(new TieredItem("netherite_pickaxe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); - public static final TieredItem NETHERITE_AXE = register(new TieredItem("netherite_axe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); - public static final TieredItem NETHERITE_HOE = register(new TieredItem("netherite_hoe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); + public static final Item WOODEN_SWORD = register(new TieredItem("wooden_sword", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); + public static final Item WOODEN_SHOVEL = register(new TieredItem("wooden_shovel", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); + public static final Item WOODEN_PICKAXE = register(new TieredItem("wooden_pickaxe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); + public static final Item WOODEN_AXE = register(new TieredItem("wooden_axe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); + public static final Item WOODEN_HOE = register(new TieredItem("wooden_hoe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59))); + public static final Item STONE_SWORD = register(new TieredItem("stone_sword", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); + public static final Item STONE_SHOVEL = register(new TieredItem("stone_shovel", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); + public static final Item STONE_PICKAXE = register(new TieredItem("stone_pickaxe", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); + public static final Item STONE_AXE = register(new TieredItem("stone_axe", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); + public static final Item STONE_HOE = register(new TieredItem("stone_hoe", ToolTier.STONE, builder().stackSize(1).maxDamage(131))); + public static final Item GOLDEN_SWORD = register(new TieredItem("golden_sword", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); + public static final Item GOLDEN_SHOVEL = register(new TieredItem("golden_shovel", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); + public static final Item GOLDEN_PICKAXE = register(new TieredItem("golden_pickaxe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); + public static final Item GOLDEN_AXE = register(new TieredItem("golden_axe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); + public static final Item GOLDEN_HOE = register(new TieredItem("golden_hoe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32))); + public static final Item IRON_SWORD = register(new TieredItem("iron_sword", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); + public static final Item IRON_SHOVEL = register(new TieredItem("iron_shovel", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); + public static final Item IRON_PICKAXE = register(new TieredItem("iron_pickaxe", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); + public static final Item IRON_AXE = register(new TieredItem("iron_axe", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); + public static final Item IRON_HOE = register(new TieredItem("iron_hoe", ToolTier.IRON, builder().stackSize(1).maxDamage(250))); + public static final Item DIAMOND_SWORD = register(new TieredItem("diamond_sword", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); + public static final Item DIAMOND_SHOVEL = register(new TieredItem("diamond_shovel", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); + public static final Item DIAMOND_PICKAXE = register(new TieredItem("diamond_pickaxe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); + public static final Item DIAMOND_AXE = register(new TieredItem("diamond_axe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); + public static final Item DIAMOND_HOE = register(new TieredItem("diamond_hoe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561))); + public static final Item NETHERITE_SWORD = register(new TieredItem("netherite_sword", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); + public static final Item NETHERITE_SHOVEL = register(new TieredItem("netherite_shovel", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); + public static final Item NETHERITE_PICKAXE = register(new TieredItem("netherite_pickaxe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); + public static final Item NETHERITE_AXE = register(new TieredItem("netherite_axe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); + public static final Item NETHERITE_HOE = register(new TieredItem("netherite_hoe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031))); public static final Item STICK = register(new Item("stick", builder())); public static final Item BOWL = register(new Item("bowl", builder())); public static final Item MUSHROOM_STEW = register(new Item("mushroom_stew", builder().stackSize(1))); - public static final Item STRING = register(new Item("string", builder())); + public static final Item STRING = register(new BlockItem("string", builder())); public static final Item FEATHER = register(new Item("feather", builder())); public static final Item GUNPOWDER = register(new Item("gunpowder", builder())); - public static final Item WHEAT_SEEDS = register(new Item("wheat_seeds", builder())); + public static final Item WHEAT_SEEDS = register(new BlockItem("wheat_seeds", builder())); public static final Item WHEAT = register(new Item("wheat", builder())); public static final Item BREAD = register(new Item("bread", builder())); - public static final ArmorItem LEATHER_HELMET = register(new ArmorItem("leather_helmet", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(55))); - public static final ArmorItem LEATHER_CHESTPLATE = register(new ArmorItem("leather_chestplate", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(80))); - public static final ArmorItem LEATHER_LEGGINGS = register(new ArmorItem("leather_leggings", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(75))); - public static final ArmorItem LEATHER_BOOTS = register(new ArmorItem("leather_boots", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(65))); - public static final ArmorItem CHAINMAIL_HELMET = register(new ArmorItem("chainmail_helmet", ArmorMaterial.CHAIN, builder().stackSize(1).maxDamage(165))); - public static final ArmorItem CHAINMAIL_CHESTPLATE = register(new ArmorItem("chainmail_chestplate", ArmorMaterial.CHAIN, builder().stackSize(1).maxDamage(240))); - public static final ArmorItem CHAINMAIL_LEGGINGS = register(new ArmorItem("chainmail_leggings", ArmorMaterial.CHAIN, builder().stackSize(1).maxDamage(225))); - public static final ArmorItem CHAINMAIL_BOOTS = register(new ArmorItem("chainmail_boots", ArmorMaterial.CHAIN, builder().stackSize(1).maxDamage(195))); - public static final ArmorItem IRON_HELMET = register(new ArmorItem("iron_helmet", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(165))); - public static final ArmorItem IRON_CHESTPLATE = register(new ArmorItem("iron_chestplate", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(240))); - public static final ArmorItem IRON_LEGGINGS = register(new ArmorItem("iron_leggings", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(225))); - public static final ArmorItem IRON_BOOTS = register(new ArmorItem("iron_boots", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(195))); - public static final ArmorItem DIAMOND_HELMET = register(new ArmorItem("diamond_helmet", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(363))); - public static final ArmorItem DIAMOND_CHESTPLATE = register(new ArmorItem("diamond_chestplate", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(528))); - public static final ArmorItem DIAMOND_LEGGINGS = register(new ArmorItem("diamond_leggings", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(495))); - public static final ArmorItem DIAMOND_BOOTS = register(new ArmorItem("diamond_boots", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(429))); - public static final ArmorItem GOLDEN_HELMET = register(new ArmorItem("golden_helmet", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(77))); - public static final ArmorItem GOLDEN_CHESTPLATE = register(new ArmorItem("golden_chestplate", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(112))); - public static final ArmorItem GOLDEN_LEGGINGS = register(new ArmorItem("golden_leggings", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(105))); - public static final ArmorItem GOLDEN_BOOTS = register(new ArmorItem("golden_boots", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(91))); - public static final ArmorItem NETHERITE_HELMET = register(new ArmorItem("netherite_helmet", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(407))); - public static final ArmorItem NETHERITE_CHESTPLATE = register(new ArmorItem("netherite_chestplate", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(592))); - public static final ArmorItem NETHERITE_LEGGINGS = register(new ArmorItem("netherite_leggings", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(555))); - public static final ArmorItem NETHERITE_BOOTS = register(new ArmorItem("netherite_boots", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(481))); + public static final Item LEATHER_HELMET = register(new DyeableArmorItem("leather_helmet", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(55))); + public static final Item LEATHER_CHESTPLATE = register(new DyeableArmorItem("leather_chestplate", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(80))); + public static final Item LEATHER_LEGGINGS = register(new DyeableArmorItem("leather_leggings", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(75))); + public static final Item LEATHER_BOOTS = register(new DyeableArmorItem("leather_boots", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(65))); + public static final Item CHAINMAIL_HELMET = register(new ArmorItem("chainmail_helmet", ArmorMaterial.CHAIN, builder().stackSize(1).maxDamage(165))); + public static final Item CHAINMAIL_CHESTPLATE = register(new ArmorItem("chainmail_chestplate", ArmorMaterial.CHAIN, builder().stackSize(1).maxDamage(240))); + public static final Item CHAINMAIL_LEGGINGS = register(new ArmorItem("chainmail_leggings", ArmorMaterial.CHAIN, builder().stackSize(1).maxDamage(225))); + public static final Item CHAINMAIL_BOOTS = register(new ArmorItem("chainmail_boots", ArmorMaterial.CHAIN, builder().stackSize(1).maxDamage(195))); + public static final Item IRON_HELMET = register(new ArmorItem("iron_helmet", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(165))); + public static final Item IRON_CHESTPLATE = register(new ArmorItem("iron_chestplate", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(240))); + public static final Item IRON_LEGGINGS = register(new ArmorItem("iron_leggings", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(225))); + public static final Item IRON_BOOTS = register(new ArmorItem("iron_boots", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(195))); + public static final Item DIAMOND_HELMET = register(new ArmorItem("diamond_helmet", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(363))); + public static final Item DIAMOND_CHESTPLATE = register(new ArmorItem("diamond_chestplate", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(528))); + public static final Item DIAMOND_LEGGINGS = register(new ArmorItem("diamond_leggings", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(495))); + public static final Item DIAMOND_BOOTS = register(new ArmorItem("diamond_boots", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(429))); + public static final Item GOLDEN_HELMET = register(new ArmorItem("golden_helmet", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(77))); + public static final Item GOLDEN_CHESTPLATE = register(new ArmorItem("golden_chestplate", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(112))); + public static final Item GOLDEN_LEGGINGS = register(new ArmorItem("golden_leggings", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(105))); + public static final Item GOLDEN_BOOTS = register(new ArmorItem("golden_boots", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(91))); + public static final Item NETHERITE_HELMET = register(new ArmorItem("netherite_helmet", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(407))); + public static final Item NETHERITE_CHESTPLATE = register(new ArmorItem("netherite_chestplate", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(592))); + public static final Item NETHERITE_LEGGINGS = register(new ArmorItem("netherite_leggings", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(555))); + public static final Item NETHERITE_BOOTS = register(new ArmorItem("netherite_boots", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(481))); public static final Item FLINT = register(new Item("flint", builder())); public static final Item PORKCHOP = register(new Item("porkchop", builder())); public static final Item COOKED_PORKCHOP = register(new Item("cooked_porkchop", builder())); public static final Item PAINTING = register(new Item("painting", builder())); public static final Item GOLDEN_APPLE = register(new Item("golden_apple", builder())); public static final Item ENCHANTED_GOLDEN_APPLE = register(new Item("enchanted_golden_apple", builder())); - public static final Item OAK_SIGN = register(new Item("oak_sign", builder().stackSize(16))); - public static final Item SPRUCE_SIGN = register(new Item("spruce_sign", builder().stackSize(16))); - public static final Item BIRCH_SIGN = register(new Item("birch_sign", builder().stackSize(16))); - public static final Item JUNGLE_SIGN = register(new Item("jungle_sign", builder().stackSize(16))); - public static final Item ACACIA_SIGN = register(new Item("acacia_sign", builder().stackSize(16))); - public static final Item CHERRY_SIGN = register(new Item("cherry_sign", builder().stackSize(16))); - public static final Item DARK_OAK_SIGN = register(new Item("dark_oak_sign", builder().stackSize(16))); - public static final Item MANGROVE_SIGN = register(new Item("mangrove_sign", builder().stackSize(16))); - public static final Item BAMBOO_SIGN = register(new Item("bamboo_sign", builder().stackSize(16))); - public static final Item CRIMSON_SIGN = register(new Item("crimson_sign", builder().stackSize(16))); - public static final Item WARPED_SIGN = register(new Item("warped_sign", builder().stackSize(16))); - public static final Item OAK_HANGING_SIGN = register(new Item("oak_hanging_sign", builder().stackSize(16))); - public static final Item SPRUCE_HANGING_SIGN = register(new Item("spruce_hanging_sign", builder().stackSize(16))); - public static final Item BIRCH_HANGING_SIGN = register(new Item("birch_hanging_sign", builder().stackSize(16))); - public static final Item JUNGLE_HANGING_SIGN = register(new Item("jungle_hanging_sign", builder().stackSize(16))); - public static final Item ACACIA_HANGING_SIGN = register(new Item("acacia_hanging_sign", builder().stackSize(16))); - public static final Item CHERRY_HANGING_SIGN = register(new Item("cherry_hanging_sign", builder().stackSize(16))); - public static final Item DARK_OAK_HANGING_SIGN = register(new Item("dark_oak_hanging_sign", builder().stackSize(16))); - public static final Item MANGROVE_HANGING_SIGN = register(new Item("mangrove_hanging_sign", builder().stackSize(16))); - public static final Item BAMBOO_HANGING_SIGN = register(new Item("bamboo_hanging_sign", builder().stackSize(16))); - public static final Item CRIMSON_HANGING_SIGN = register(new Item("crimson_hanging_sign", builder().stackSize(16))); - public static final Item WARPED_HANGING_SIGN = register(new Item("warped_hanging_sign", builder().stackSize(16))); + public static final Item OAK_SIGN = register(new BlockItem("oak_sign", builder().stackSize(16))); + public static final Item SPRUCE_SIGN = register(new BlockItem("spruce_sign", builder().stackSize(16))); + public static final Item BIRCH_SIGN = register(new BlockItem("birch_sign", builder().stackSize(16))); + public static final Item JUNGLE_SIGN = register(new BlockItem("jungle_sign", builder().stackSize(16))); + public static final Item ACACIA_SIGN = register(new BlockItem("acacia_sign", builder().stackSize(16))); + public static final Item CHERRY_SIGN = register(new BlockItem("cherry_sign", builder().stackSize(16))); + public static final Item DARK_OAK_SIGN = register(new BlockItem("dark_oak_sign", builder().stackSize(16))); + public static final Item MANGROVE_SIGN = register(new BlockItem("mangrove_sign", builder().stackSize(16))); + public static final Item BAMBOO_SIGN = register(new BlockItem("bamboo_sign", builder().stackSize(16))); + public static final Item CRIMSON_SIGN = register(new BlockItem("crimson_sign", builder().stackSize(16))); + public static final Item WARPED_SIGN = register(new BlockItem("warped_sign", builder().stackSize(16))); + public static final Item OAK_HANGING_SIGN = register(new BlockItem("oak_hanging_sign", builder().stackSize(16))); + public static final Item SPRUCE_HANGING_SIGN = register(new BlockItem("spruce_hanging_sign", builder().stackSize(16))); + public static final Item BIRCH_HANGING_SIGN = register(new BlockItem("birch_hanging_sign", builder().stackSize(16))); + public static final Item JUNGLE_HANGING_SIGN = register(new BlockItem("jungle_hanging_sign", builder().stackSize(16))); + public static final Item ACACIA_HANGING_SIGN = register(new BlockItem("acacia_hanging_sign", builder().stackSize(16))); + public static final Item CHERRY_HANGING_SIGN = register(new BlockItem("cherry_hanging_sign", builder().stackSize(16))); + public static final Item DARK_OAK_HANGING_SIGN = register(new BlockItem("dark_oak_hanging_sign", builder().stackSize(16))); + public static final Item MANGROVE_HANGING_SIGN = register(new BlockItem("mangrove_hanging_sign", builder().stackSize(16))); + public static final Item BAMBOO_HANGING_SIGN = register(new BlockItem("bamboo_hanging_sign", builder().stackSize(16))); + public static final Item CRIMSON_HANGING_SIGN = register(new BlockItem("crimson_hanging_sign", builder().stackSize(16))); + public static final Item WARPED_HANGING_SIGN = register(new BlockItem("warped_hanging_sign", builder().stackSize(16))); public static final Item BUCKET = register(new Item("bucket", builder().stackSize(16))); public static final Item WATER_BUCKET = register(new Item("water_bucket", builder().stackSize(1))); public static final Item LAVA_BUCKET = register(new Item("lava_bucket", builder().stackSize(1))); - public static final Item POWDER_SNOW_BUCKET = register(new Item("powder_snow_bucket", builder().stackSize(1))); + public static final Item POWDER_SNOW_BUCKET = register(new BlockItem("powder_snow_bucket", builder().stackSize(1))); public static final Item SNOWBALL = register(new Item("snowball", builder().stackSize(16))); public static final Item LEATHER = register(new Item("leather", builder())); public static final Item MILK_BUCKET = register(new Item("milk_bucket", builder().stackSize(1))); public static final Item PUFFERFISH_BUCKET = register(new Item("pufferfish_bucket", builder().stackSize(1))); public static final Item SALMON_BUCKET = register(new Item("salmon_bucket", builder().stackSize(1))); public static final Item COD_BUCKET = register(new Item("cod_bucket", builder().stackSize(1))); - public static final Item TROPICAL_FISH_BUCKET = register(new Item("tropical_fish_bucket", builder().stackSize(1))); - public static final Item AXOLOTL_BUCKET = register(new Item("axolotl_bucket", builder().stackSize(1))); + public static final Item TROPICAL_FISH_BUCKET = register(new TropicalFishBucketItem("tropical_fish_bucket", builder().stackSize(1))); + public static final Item AXOLOTL_BUCKET = register(new AxolotlBucketItem("axolotl_bucket", builder().stackSize(1))); public static final Item TADPOLE_BUCKET = register(new Item("tadpole_bucket", builder().stackSize(1))); public static final Item BRICK = register(new Item("brick", builder())); public static final Item CLAY_BALL = register(new Item("clay_ball", builder())); - public static final Item DRIED_KELP_BLOCK = register(new Item("dried_kelp_block", builder())); + public static final Item DRIED_KELP_BLOCK = register(new BlockItem("dried_kelp_block", builder())); public static final Item PAPER = register(new Item("paper", builder())); public static final Item BOOK = register(new Item("book", builder())); public static final Item SLIME_BALL = register(new Item("slime_ball", builder())); public static final Item EGG = register(new Item("egg", builder().stackSize(16))); - public static final CompassItem COMPASS = register(new CompassItem("compass", builder())); + public static final Item COMPASS = register(new CompassItem("compass", builder())); public static final Item RECOVERY_COMPASS = register(new Item("recovery_compass", builder())); public static final Item BUNDLE = register(new Item("bundle", builder().stackSize(1))); - public static final Item FISHING_ROD = register(new Item("fishing_rod", builder().stackSize(1).maxDamage(64))); + public static final Item FISHING_ROD = register(new FishingRodItem("fishing_rod", builder().stackSize(1).maxDamage(64))); public static final Item CLOCK = register(new Item("clock", builder())); public static final Item SPYGLASS = register(new Item("spyglass", builder().stackSize(1))); public static final Item GLOWSTONE_DUST = register(new Item("glowstone_dust", builder())); @@ -934,50 +935,50 @@ public final class Items { public static final Item COOKED_SALMON = register(new Item("cooked_salmon", builder())); public static final Item INK_SAC = register(new Item("ink_sac", builder())); public static final Item GLOW_INK_SAC = register(new Item("glow_ink_sac", builder())); - public static final Item COCOA_BEANS = register(new Item("cocoa_beans", builder())); - public static final DyeItem WHITE_DYE = register(new DyeItem("white_dye", 0, builder())); - public static final DyeItem ORANGE_DYE = register(new DyeItem("orange_dye", 1, builder())); - public static final DyeItem MAGENTA_DYE = register(new DyeItem("magenta_dye", 2, builder())); - public static final DyeItem LIGHT_BLUE_DYE = register(new DyeItem("light_blue_dye", 3, builder())); - public static final DyeItem YELLOW_DYE = register(new DyeItem("yellow_dye", 4, builder())); - public static final DyeItem LIME_DYE = register(new DyeItem("lime_dye", 5, builder())); - public static final DyeItem PINK_DYE = register(new DyeItem("pink_dye", 6, builder())); - public static final DyeItem GRAY_DYE = register(new DyeItem("gray_dye", 7, builder())); - public static final DyeItem LIGHT_GRAY_DYE = register(new DyeItem("light_gray_dye", 8, builder())); - public static final DyeItem CYAN_DYE = register(new DyeItem("cyan_dye", 9, builder())); - public static final DyeItem PURPLE_DYE = register(new DyeItem("purple_dye", 10, builder())); - public static final DyeItem BLUE_DYE = register(new DyeItem("blue_dye", 11, builder())); - public static final DyeItem BROWN_DYE = register(new DyeItem("brown_dye", 12, builder())); - public static final DyeItem GREEN_DYE = register(new DyeItem("green_dye", 13, builder())); - public static final DyeItem RED_DYE = register(new DyeItem("red_dye", 14, builder())); - public static final DyeItem BLACK_DYE = register(new DyeItem("black_dye", 15, builder())); + public static final Item COCOA_BEANS = register(new BlockItem("cocoa_beans", builder())); + public static final Item WHITE_DYE = register(new DyeItem("white_dye", 0, builder())); + public static final Item ORANGE_DYE = register(new DyeItem("orange_dye", 1, builder())); + public static final Item MAGENTA_DYE = register(new DyeItem("magenta_dye", 2, builder())); + public static final Item LIGHT_BLUE_DYE = register(new DyeItem("light_blue_dye", 3, builder())); + public static final Item YELLOW_DYE = register(new DyeItem("yellow_dye", 4, builder())); + public static final Item LIME_DYE = register(new DyeItem("lime_dye", 5, builder())); + public static final Item PINK_DYE = register(new DyeItem("pink_dye", 6, builder())); + public static final Item GRAY_DYE = register(new DyeItem("gray_dye", 7, builder())); + public static final Item LIGHT_GRAY_DYE = register(new DyeItem("light_gray_dye", 8, builder())); + public static final Item CYAN_DYE = register(new DyeItem("cyan_dye", 9, builder())); + public static final Item PURPLE_DYE = register(new DyeItem("purple_dye", 10, builder())); + public static final Item BLUE_DYE = register(new DyeItem("blue_dye", 11, builder())); + public static final Item BROWN_DYE = register(new DyeItem("brown_dye", 12, builder())); + public static final Item GREEN_DYE = register(new DyeItem("green_dye", 13, builder())); + public static final Item RED_DYE = register(new DyeItem("red_dye", 14, builder())); + public static final Item BLACK_DYE = register(new DyeItem("black_dye", 15, builder())); public static final Item BONE_MEAL = register(new Item("bone_meal", builder())); public static final Item BONE = register(new Item("bone", builder())); public static final Item SUGAR = register(new Item("sugar", builder())); - public static final Item CAKE = register(new Item("cake", builder().stackSize(1))); - public static final Item WHITE_BED = register(new Item("white_bed", builder().stackSize(1))); - public static final Item ORANGE_BED = register(new Item("orange_bed", builder().stackSize(1))); - public static final Item MAGENTA_BED = register(new Item("magenta_bed", builder().stackSize(1))); - public static final Item LIGHT_BLUE_BED = register(new Item("light_blue_bed", builder().stackSize(1))); - public static final Item YELLOW_BED = register(new Item("yellow_bed", builder().stackSize(1))); - public static final Item LIME_BED = register(new Item("lime_bed", builder().stackSize(1))); - public static final Item PINK_BED = register(new Item("pink_bed", builder().stackSize(1))); - public static final Item GRAY_BED = register(new Item("gray_bed", builder().stackSize(1))); - public static final Item LIGHT_GRAY_BED = register(new Item("light_gray_bed", builder().stackSize(1))); - public static final Item CYAN_BED = register(new Item("cyan_bed", builder().stackSize(1))); - public static final Item PURPLE_BED = register(new Item("purple_bed", builder().stackSize(1))); - public static final Item BLUE_BED = register(new Item("blue_bed", builder().stackSize(1))); - public static final Item BROWN_BED = register(new Item("brown_bed", builder().stackSize(1))); - public static final Item GREEN_BED = register(new Item("green_bed", builder().stackSize(1))); - public static final Item RED_BED = register(new Item("red_bed", builder().stackSize(1))); - public static final Item BLACK_BED = register(new Item("black_bed", builder().stackSize(1))); + public static final Item CAKE = register(new BlockItem("cake", builder().stackSize(1))); + public static final Item WHITE_BED = register(new BlockItem("white_bed", builder().stackSize(1))); + public static final Item ORANGE_BED = register(new BlockItem("orange_bed", builder().stackSize(1))); + public static final Item MAGENTA_BED = register(new BlockItem("magenta_bed", builder().stackSize(1))); + public static final Item LIGHT_BLUE_BED = register(new BlockItem("light_blue_bed", builder().stackSize(1))); + public static final Item YELLOW_BED = register(new BlockItem("yellow_bed", builder().stackSize(1))); + public static final Item LIME_BED = register(new BlockItem("lime_bed", builder().stackSize(1))); + public static final Item PINK_BED = register(new BlockItem("pink_bed", builder().stackSize(1))); + public static final Item GRAY_BED = register(new BlockItem("gray_bed", builder().stackSize(1))); + public static final Item LIGHT_GRAY_BED = register(new BlockItem("light_gray_bed", builder().stackSize(1))); + public static final Item CYAN_BED = register(new BlockItem("cyan_bed", builder().stackSize(1))); + public static final Item PURPLE_BED = register(new BlockItem("purple_bed", builder().stackSize(1))); + public static final Item BLUE_BED = register(new BlockItem("blue_bed", builder().stackSize(1))); + public static final Item BROWN_BED = register(new BlockItem("brown_bed", builder().stackSize(1))); + public static final Item GREEN_BED = register(new BlockItem("green_bed", builder().stackSize(1))); + public static final Item RED_BED = register(new BlockItem("red_bed", builder().stackSize(1))); + public static final Item BLACK_BED = register(new BlockItem("black_bed", builder().stackSize(1))); public static final Item COOKIE = register(new Item("cookie", builder())); - public static final FilledMapItem FILLED_MAP = register(new FilledMapItem("filled_map", builder())); + public static final Item FILLED_MAP = register(new FilledMapItem("filled_map", builder())); public static final Item SHEARS = register(new Item("shears", builder().stackSize(1).maxDamage(238))); public static final Item MELON_SLICE = register(new Item("melon_slice", builder())); public static final Item DRIED_KELP = register(new Item("dried_kelp", builder())); - public static final Item PUMPKIN_SEEDS = register(new Item("pumpkin_seeds", builder())); - public static final Item MELON_SEEDS = register(new Item("melon_seeds", builder())); + public static final Item PUMPKIN_SEEDS = register(new BlockItem("pumpkin_seeds", builder())); + public static final Item MELON_SEEDS = register(new BlockItem("melon_seeds", builder())); public static final Item BEEF = register(new Item("beef", builder())); public static final Item COOKED_BEEF = register(new Item("cooked_beef", builder())); public static final Item CHICKEN = register(new Item("chicken", builder())); @@ -987,119 +988,119 @@ public final class Items { public static final Item BLAZE_ROD = register(new Item("blaze_rod", builder())); public static final Item GHAST_TEAR = register(new Item("ghast_tear", builder())); public static final Item GOLD_NUGGET = register(new Item("gold_nugget", builder())); - public static final Item NETHER_WART = register(new Item("nether_wart", builder())); - public static final PotionItem POTION = register(new PotionItem("potion", builder().stackSize(1))); + public static final Item NETHER_WART = register(new BlockItem("nether_wart", builder())); + public static final Item POTION = register(new PotionItem("potion", builder().stackSize(1))); public static final Item GLASS_BOTTLE = register(new Item("glass_bottle", builder())); public static final Item SPIDER_EYE = register(new Item("spider_eye", builder())); public static final Item FERMENTED_SPIDER_EYE = register(new Item("fermented_spider_eye", builder())); public static final Item BLAZE_POWDER = register(new Item("blaze_powder", builder())); public static final Item MAGMA_CREAM = register(new Item("magma_cream", builder())); - public static final Item BREWING_STAND = register(new Item("brewing_stand", builder())); - public static final Item CAULDRON = register(new Item("cauldron", builder())); + public static final Item BREWING_STAND = register(new BlockItem("brewing_stand", builder())); + public static final Item CAULDRON = register(new BlockItem("cauldron", builder())); 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 SpawnEggItem ALLAY_SPAWN_EGG = register(new SpawnEggItem("allay_spawn_egg", builder())); - public static final SpawnEggItem AXOLOTL_SPAWN_EGG = register(new SpawnEggItem("axolotl_spawn_egg", builder())); - public static final SpawnEggItem BAT_SPAWN_EGG = register(new SpawnEggItem("bat_spawn_egg", builder())); - public static final SpawnEggItem BEE_SPAWN_EGG = register(new SpawnEggItem("bee_spawn_egg", builder())); - public static final SpawnEggItem BLAZE_SPAWN_EGG = register(new SpawnEggItem("blaze_spawn_egg", builder())); - public static final SpawnEggItem CAT_SPAWN_EGG = register(new SpawnEggItem("cat_spawn_egg", builder())); - public static final SpawnEggItem CAMEL_SPAWN_EGG = register(new SpawnEggItem("camel_spawn_egg", builder())); - public static final SpawnEggItem CAVE_SPIDER_SPAWN_EGG = register(new SpawnEggItem("cave_spider_spawn_egg", builder())); - public static final SpawnEggItem CHICKEN_SPAWN_EGG = register(new SpawnEggItem("chicken_spawn_egg", builder())); - public static final SpawnEggItem COD_SPAWN_EGG = register(new SpawnEggItem("cod_spawn_egg", builder())); - public static final SpawnEggItem COW_SPAWN_EGG = register(new SpawnEggItem("cow_spawn_egg", builder())); - public static final SpawnEggItem CREEPER_SPAWN_EGG = register(new SpawnEggItem("creeper_spawn_egg", builder())); - public static final SpawnEggItem DOLPHIN_SPAWN_EGG = register(new SpawnEggItem("dolphin_spawn_egg", builder())); - public static final SpawnEggItem DONKEY_SPAWN_EGG = register(new SpawnEggItem("donkey_spawn_egg", builder())); - public static final SpawnEggItem DROWNED_SPAWN_EGG = register(new SpawnEggItem("drowned_spawn_egg", builder())); - public static final SpawnEggItem ELDER_GUARDIAN_SPAWN_EGG = register(new SpawnEggItem("elder_guardian_spawn_egg", builder())); - public static final SpawnEggItem ENDER_DRAGON_SPAWN_EGG = register(new SpawnEggItem("ender_dragon_spawn_egg", builder())); - public static final SpawnEggItem ENDERMAN_SPAWN_EGG = register(new SpawnEggItem("enderman_spawn_egg", builder())); - public static final SpawnEggItem ENDERMITE_SPAWN_EGG = register(new SpawnEggItem("endermite_spawn_egg", builder())); - public static final SpawnEggItem EVOKER_SPAWN_EGG = register(new SpawnEggItem("evoker_spawn_egg", builder())); - public static final SpawnEggItem FOX_SPAWN_EGG = register(new SpawnEggItem("fox_spawn_egg", builder())); - public static final SpawnEggItem FROG_SPAWN_EGG = register(new SpawnEggItem("frog_spawn_egg", builder())); - public static final SpawnEggItem GHAST_SPAWN_EGG = register(new SpawnEggItem("ghast_spawn_egg", builder())); - public static final SpawnEggItem GLOW_SQUID_SPAWN_EGG = register(new SpawnEggItem("glow_squid_spawn_egg", builder())); - public static final SpawnEggItem GOAT_SPAWN_EGG = register(new SpawnEggItem("goat_spawn_egg", builder())); - public static final SpawnEggItem GUARDIAN_SPAWN_EGG = register(new SpawnEggItem("guardian_spawn_egg", builder())); - public static final SpawnEggItem HOGLIN_SPAWN_EGG = register(new SpawnEggItem("hoglin_spawn_egg", builder())); - public static final SpawnEggItem HORSE_SPAWN_EGG = register(new SpawnEggItem("horse_spawn_egg", builder())); - public static final SpawnEggItem HUSK_SPAWN_EGG = register(new SpawnEggItem("husk_spawn_egg", builder())); - public static final SpawnEggItem IRON_GOLEM_SPAWN_EGG = register(new SpawnEggItem("iron_golem_spawn_egg", builder())); - public static final SpawnEggItem LLAMA_SPAWN_EGG = register(new SpawnEggItem("llama_spawn_egg", builder())); - public static final SpawnEggItem MAGMA_CUBE_SPAWN_EGG = register(new SpawnEggItem("magma_cube_spawn_egg", builder())); - public static final SpawnEggItem MOOSHROOM_SPAWN_EGG = register(new SpawnEggItem("mooshroom_spawn_egg", builder())); - public static final SpawnEggItem MULE_SPAWN_EGG = register(new SpawnEggItem("mule_spawn_egg", builder())); - public static final SpawnEggItem OCELOT_SPAWN_EGG = register(new SpawnEggItem("ocelot_spawn_egg", builder())); - public static final SpawnEggItem PANDA_SPAWN_EGG = register(new SpawnEggItem("panda_spawn_egg", builder())); - public static final SpawnEggItem PARROT_SPAWN_EGG = register(new SpawnEggItem("parrot_spawn_egg", builder())); - public static final SpawnEggItem PHANTOM_SPAWN_EGG = register(new SpawnEggItem("phantom_spawn_egg", builder())); - public static final SpawnEggItem PIG_SPAWN_EGG = register(new SpawnEggItem("pig_spawn_egg", builder())); - public static final SpawnEggItem PIGLIN_SPAWN_EGG = register(new SpawnEggItem("piglin_spawn_egg", builder())); - public static final SpawnEggItem PIGLIN_BRUTE_SPAWN_EGG = register(new SpawnEggItem("piglin_brute_spawn_egg", builder())); - public static final SpawnEggItem PILLAGER_SPAWN_EGG = register(new SpawnEggItem("pillager_spawn_egg", builder())); - public static final SpawnEggItem POLAR_BEAR_SPAWN_EGG = register(new SpawnEggItem("polar_bear_spawn_egg", builder())); - public static final SpawnEggItem PUFFERFISH_SPAWN_EGG = register(new SpawnEggItem("pufferfish_spawn_egg", builder())); - public static final SpawnEggItem RABBIT_SPAWN_EGG = register(new SpawnEggItem("rabbit_spawn_egg", builder())); - public static final SpawnEggItem RAVAGER_SPAWN_EGG = register(new SpawnEggItem("ravager_spawn_egg", builder())); - public static final SpawnEggItem SALMON_SPAWN_EGG = register(new SpawnEggItem("salmon_spawn_egg", builder())); - public static final SpawnEggItem SHEEP_SPAWN_EGG = register(new SpawnEggItem("sheep_spawn_egg", builder())); - public static final SpawnEggItem SHULKER_SPAWN_EGG = register(new SpawnEggItem("shulker_spawn_egg", builder())); - public static final SpawnEggItem SILVERFISH_SPAWN_EGG = register(new SpawnEggItem("silverfish_spawn_egg", builder())); - public static final SpawnEggItem SKELETON_SPAWN_EGG = register(new SpawnEggItem("skeleton_spawn_egg", builder())); - public static final SpawnEggItem SKELETON_HORSE_SPAWN_EGG = register(new SpawnEggItem("skeleton_horse_spawn_egg", builder())); - public static final SpawnEggItem SLIME_SPAWN_EGG = register(new SpawnEggItem("slime_spawn_egg", builder())); - public static final SpawnEggItem SNIFFER_SPAWN_EGG = register(new SpawnEggItem("sniffer_spawn_egg", builder())); - public static final SpawnEggItem SNOW_GOLEM_SPAWN_EGG = register(new SpawnEggItem("snow_golem_spawn_egg", builder())); - public static final SpawnEggItem SPIDER_SPAWN_EGG = register(new SpawnEggItem("spider_spawn_egg", builder())); - public static final SpawnEggItem SQUID_SPAWN_EGG = register(new SpawnEggItem("squid_spawn_egg", builder())); - public static final SpawnEggItem STRAY_SPAWN_EGG = register(new SpawnEggItem("stray_spawn_egg", builder())); - public static final SpawnEggItem STRIDER_SPAWN_EGG = register(new SpawnEggItem("strider_spawn_egg", builder())); - public static final SpawnEggItem TADPOLE_SPAWN_EGG = register(new SpawnEggItem("tadpole_spawn_egg", builder())); - public static final SpawnEggItem TRADER_LLAMA_SPAWN_EGG = register(new SpawnEggItem("trader_llama_spawn_egg", builder())); - public static final SpawnEggItem TROPICAL_FISH_SPAWN_EGG = register(new SpawnEggItem("tropical_fish_spawn_egg", builder())); - public static final SpawnEggItem TURTLE_SPAWN_EGG = register(new SpawnEggItem("turtle_spawn_egg", builder())); - public static final SpawnEggItem VEX_SPAWN_EGG = register(new SpawnEggItem("vex_spawn_egg", builder())); - public static final SpawnEggItem VILLAGER_SPAWN_EGG = register(new SpawnEggItem("villager_spawn_egg", builder())); - public static final SpawnEggItem VINDICATOR_SPAWN_EGG = register(new SpawnEggItem("vindicator_spawn_egg", builder())); - public static final SpawnEggItem WANDERING_TRADER_SPAWN_EGG = register(new SpawnEggItem("wandering_trader_spawn_egg", builder())); - public static final SpawnEggItem WARDEN_SPAWN_EGG = register(new SpawnEggItem("warden_spawn_egg", builder())); - public static final SpawnEggItem WITCH_SPAWN_EGG = register(new SpawnEggItem("witch_spawn_egg", builder())); - public static final SpawnEggItem WITHER_SPAWN_EGG = register(new SpawnEggItem("wither_spawn_egg", builder())); - public static final SpawnEggItem WITHER_SKELETON_SPAWN_EGG = register(new SpawnEggItem("wither_skeleton_spawn_egg", builder())); - public static final SpawnEggItem WOLF_SPAWN_EGG = register(new SpawnEggItem("wolf_spawn_egg", builder())); - public static final SpawnEggItem ZOGLIN_SPAWN_EGG = register(new SpawnEggItem("zoglin_spawn_egg", builder())); - public static final SpawnEggItem ZOMBIE_SPAWN_EGG = register(new SpawnEggItem("zombie_spawn_egg", builder())); - public static final SpawnEggItem ZOMBIE_HORSE_SPAWN_EGG = register(new SpawnEggItem("zombie_horse_spawn_egg", builder())); - public static final SpawnEggItem ZOMBIE_VILLAGER_SPAWN_EGG = register(new SpawnEggItem("zombie_villager_spawn_egg", builder())); - public static final SpawnEggItem ZOMBIFIED_PIGLIN_SPAWN_EGG = register(new SpawnEggItem("zombified_piglin_spawn_egg", builder())); + public static final Item ALLAY_SPAWN_EGG = register(new SpawnEggItem("allay_spawn_egg", builder())); + public static final Item AXOLOTL_SPAWN_EGG = register(new SpawnEggItem("axolotl_spawn_egg", builder())); + public static final Item BAT_SPAWN_EGG = register(new SpawnEggItem("bat_spawn_egg", builder())); + public static final Item BEE_SPAWN_EGG = register(new SpawnEggItem("bee_spawn_egg", builder())); + public static final Item BLAZE_SPAWN_EGG = register(new SpawnEggItem("blaze_spawn_egg", builder())); + public static final Item CAT_SPAWN_EGG = register(new SpawnEggItem("cat_spawn_egg", builder())); + public static final Item CAMEL_SPAWN_EGG = register(new SpawnEggItem("camel_spawn_egg", builder())); + public static final Item CAVE_SPIDER_SPAWN_EGG = register(new SpawnEggItem("cave_spider_spawn_egg", builder())); + 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 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())); + public static final Item DONKEY_SPAWN_EGG = register(new SpawnEggItem("donkey_spawn_egg", builder())); + public static final Item DROWNED_SPAWN_EGG = register(new SpawnEggItem("drowned_spawn_egg", builder())); + public static final Item ELDER_GUARDIAN_SPAWN_EGG = register(new SpawnEggItem("elder_guardian_spawn_egg", builder())); + public static final Item ENDER_DRAGON_SPAWN_EGG = register(new SpawnEggItem("ender_dragon_spawn_egg", builder())); + public static final Item ENDERMAN_SPAWN_EGG = register(new SpawnEggItem("enderman_spawn_egg", builder())); + public static final Item ENDERMITE_SPAWN_EGG = register(new SpawnEggItem("endermite_spawn_egg", builder())); + public static final Item EVOKER_SPAWN_EGG = register(new SpawnEggItem("evoker_spawn_egg", builder())); + public static final Item FOX_SPAWN_EGG = register(new SpawnEggItem("fox_spawn_egg", builder())); + public static final Item FROG_SPAWN_EGG = register(new SpawnEggItem("frog_spawn_egg", builder())); + public static final Item GHAST_SPAWN_EGG = register(new SpawnEggItem("ghast_spawn_egg", builder())); + public static final Item GLOW_SQUID_SPAWN_EGG = register(new SpawnEggItem("glow_squid_spawn_egg", builder())); + public static final Item GOAT_SPAWN_EGG = register(new SpawnEggItem("goat_spawn_egg", builder())); + public static final Item GUARDIAN_SPAWN_EGG = register(new SpawnEggItem("guardian_spawn_egg", builder())); + public static final Item HOGLIN_SPAWN_EGG = register(new SpawnEggItem("hoglin_spawn_egg", builder())); + public static final Item HORSE_SPAWN_EGG = register(new SpawnEggItem("horse_spawn_egg", builder())); + public static final Item HUSK_SPAWN_EGG = register(new SpawnEggItem("husk_spawn_egg", builder())); + public static final Item IRON_GOLEM_SPAWN_EGG = register(new SpawnEggItem("iron_golem_spawn_egg", builder())); + public static final Item LLAMA_SPAWN_EGG = register(new SpawnEggItem("llama_spawn_egg", builder())); + public static final Item MAGMA_CUBE_SPAWN_EGG = register(new SpawnEggItem("magma_cube_spawn_egg", builder())); + public static final Item MOOSHROOM_SPAWN_EGG = register(new SpawnEggItem("mooshroom_spawn_egg", builder())); + public static final Item MULE_SPAWN_EGG = register(new SpawnEggItem("mule_spawn_egg", builder())); + public static final Item OCELOT_SPAWN_EGG = register(new SpawnEggItem("ocelot_spawn_egg", builder())); + public static final Item PANDA_SPAWN_EGG = register(new SpawnEggItem("panda_spawn_egg", builder())); + public static final Item PARROT_SPAWN_EGG = register(new SpawnEggItem("parrot_spawn_egg", builder())); + public static final Item PHANTOM_SPAWN_EGG = register(new SpawnEggItem("phantom_spawn_egg", builder())); + public static final Item PIG_SPAWN_EGG = register(new SpawnEggItem("pig_spawn_egg", builder())); + public static final Item PIGLIN_SPAWN_EGG = register(new SpawnEggItem("piglin_spawn_egg", builder())); + public static final Item PIGLIN_BRUTE_SPAWN_EGG = register(new SpawnEggItem("piglin_brute_spawn_egg", builder())); + public static final Item PILLAGER_SPAWN_EGG = register(new SpawnEggItem("pillager_spawn_egg", builder())); + public static final Item POLAR_BEAR_SPAWN_EGG = register(new SpawnEggItem("polar_bear_spawn_egg", builder())); + public static final Item PUFFERFISH_SPAWN_EGG = register(new SpawnEggItem("pufferfish_spawn_egg", builder())); + public static final Item RABBIT_SPAWN_EGG = register(new SpawnEggItem("rabbit_spawn_egg", builder())); + public static final Item RAVAGER_SPAWN_EGG = register(new SpawnEggItem("ravager_spawn_egg", builder())); + public static final Item SALMON_SPAWN_EGG = register(new SpawnEggItem("salmon_spawn_egg", builder())); + public static final Item SHEEP_SPAWN_EGG = register(new SpawnEggItem("sheep_spawn_egg", builder())); + public static final Item SHULKER_SPAWN_EGG = register(new SpawnEggItem("shulker_spawn_egg", builder())); + public static final Item SILVERFISH_SPAWN_EGG = register(new SpawnEggItem("silverfish_spawn_egg", builder())); + public static final Item SKELETON_SPAWN_EGG = register(new SpawnEggItem("skeleton_spawn_egg", builder())); + public static final Item SKELETON_HORSE_SPAWN_EGG = register(new SpawnEggItem("skeleton_horse_spawn_egg", builder())); + public static final Item SLIME_SPAWN_EGG = register(new SpawnEggItem("slime_spawn_egg", builder())); + public static final Item SNIFFER_SPAWN_EGG = register(new SpawnEggItem("sniffer_spawn_egg", builder())); + public static final Item SNOW_GOLEM_SPAWN_EGG = register(new SpawnEggItem("snow_golem_spawn_egg", builder())); + public static final Item SPIDER_SPAWN_EGG = register(new SpawnEggItem("spider_spawn_egg", builder())); + public static final Item SQUID_SPAWN_EGG = register(new SpawnEggItem("squid_spawn_egg", builder())); + public static final Item STRAY_SPAWN_EGG = register(new SpawnEggItem("stray_spawn_egg", builder())); + public static final Item STRIDER_SPAWN_EGG = register(new SpawnEggItem("strider_spawn_egg", builder())); + public static final Item TADPOLE_SPAWN_EGG = register(new SpawnEggItem("tadpole_spawn_egg", builder())); + public static final Item TRADER_LLAMA_SPAWN_EGG = register(new SpawnEggItem("trader_llama_spawn_egg", builder())); + public static final Item TROPICAL_FISH_SPAWN_EGG = register(new SpawnEggItem("tropical_fish_spawn_egg", builder())); + public static final Item TURTLE_SPAWN_EGG = register(new SpawnEggItem("turtle_spawn_egg", builder())); + public static final Item VEX_SPAWN_EGG = register(new SpawnEggItem("vex_spawn_egg", builder())); + public static final Item VILLAGER_SPAWN_EGG = register(new SpawnEggItem("villager_spawn_egg", builder())); + public static final Item VINDICATOR_SPAWN_EGG = register(new SpawnEggItem("vindicator_spawn_egg", builder())); + public static final Item WANDERING_TRADER_SPAWN_EGG = register(new SpawnEggItem("wandering_trader_spawn_egg", builder())); + public static final Item WARDEN_SPAWN_EGG = register(new SpawnEggItem("warden_spawn_egg", builder())); + public static final Item WITCH_SPAWN_EGG = register(new SpawnEggItem("witch_spawn_egg", builder())); + public static final Item WITHER_SPAWN_EGG = register(new SpawnEggItem("wither_spawn_egg", builder())); + public static final Item WITHER_SKELETON_SPAWN_EGG = register(new SpawnEggItem("wither_skeleton_spawn_egg", builder())); + public static final Item WOLF_SPAWN_EGG = register(new SpawnEggItem("wolf_spawn_egg", builder())); + public static final Item ZOGLIN_SPAWN_EGG = register(new SpawnEggItem("zoglin_spawn_egg", builder())); + public static final Item ZOMBIE_SPAWN_EGG = register(new SpawnEggItem("zombie_spawn_egg", builder())); + public static final Item ZOMBIE_HORSE_SPAWN_EGG = register(new SpawnEggItem("zombie_horse_spawn_egg", builder())); + public static final Item ZOMBIE_VILLAGER_SPAWN_EGG = register(new SpawnEggItem("zombie_villager_spawn_egg", builder())); + public static final Item ZOMBIFIED_PIGLIN_SPAWN_EGG = register(new SpawnEggItem("zombified_piglin_spawn_egg", builder())); public static final Item EXPERIENCE_BOTTLE = register(new Item("experience_bottle", builder())); public static final Item FIRE_CHARGE = register(new Item("fire_charge", builder())); - public static final Item WRITABLE_BOOK = register(new Item("writable_book", builder().stackSize(1))); - public static final Item WRITTEN_BOOK = register(new Item("written_book", builder().stackSize(16))); + public static final Item WRITABLE_BOOK = register(new ReadableBookItem("writable_book", builder().stackSize(1))); + public static final Item WRITTEN_BOOK = register(new ReadableBookItem("written_book", builder().stackSize(16))); public static final Item ITEM_FRAME = register(new Item("item_frame", builder())); public static final Item GLOW_ITEM_FRAME = register(new Item("glow_item_frame", builder())); - public static final Item FLOWER_POT = register(new Item("flower_pot", builder())); - public static final Item CARROT = register(new Item("carrot", builder())); - public static final Item POTATO = register(new Item("potato", builder())); + public static final Item FLOWER_POT = register(new BlockItem("flower_pot", builder())); + public static final Item CARROT = register(new BlockItem("carrot", builder())); + public static final Item POTATO = register(new BlockItem("potato", builder())); public static final Item BAKED_POTATO = register(new Item("baked_potato", builder())); public static final Item POISONOUS_POTATO = register(new Item("poisonous_potato", builder())); - public static final MapItem MAP = register(new MapItem("map", builder())); + public static final Item MAP = register(new MapItem("map", builder())); public static final Item GOLDEN_CARROT = register(new Item("golden_carrot", builder())); - public static final Item SKELETON_SKULL = register(new Item("skeleton_skull", builder())); - public static final Item WITHER_SKELETON_SKULL = register(new Item("wither_skeleton_skull", builder())); - public static final Item PLAYER_HEAD = register(new Item("player_head", builder())); - public static final Item ZOMBIE_HEAD = register(new Item("zombie_head", builder())); - public static final Item CREEPER_HEAD = register(new Item("creeper_head", builder())); - public static final Item DRAGON_HEAD = register(new Item("dragon_head", builder())); - public static final Item PIGLIN_HEAD = register(new Item("piglin_head", builder())); + public static final Item SKELETON_SKULL = register(new BlockItem("skeleton_skull", builder())); + public static final Item WITHER_SKELETON_SKULL = register(new BlockItem("wither_skeleton_skull", builder())); + public static final Item PLAYER_HEAD = register(new PlayerHeadItem("player_head", builder())); + public static final Item ZOMBIE_HEAD = register(new BlockItem("zombie_head", builder())); + public static final Item CREEPER_HEAD = register(new BlockItem("creeper_head", builder())); + public static final Item DRAGON_HEAD = register(new BlockItem("dragon_head", builder())); + public static final Item PIGLIN_HEAD = register(new BlockItem("piglin_head", builder())); public static final Item NETHER_STAR = register(new Item("nether_star", builder())); public static final Item PUMPKIN_PIE = register(new Item("pumpkin_pie", builder())); - public static final Item FIREWORK_ROCKET = register(new Item("firework_rocket", builder())); - public static final Item FIREWORK_STAR = register(new Item("firework_star", builder())); - public static final Item ENCHANTED_BOOK = register(new Item("enchanted_book", builder().stackSize(1))); + public static final Item FIREWORK_ROCKET = register(new FireworkRocketItem("firework_rocket", builder())); + public static final Item FIREWORK_STAR = register(new FireworkStarItem("firework_star", builder())); + public static final Item ENCHANTED_BOOK = register(new EnchantedBookItem("enchanted_book", builder().stackSize(1))); public static final Item NETHER_BRICK = register(new Item("nether_brick", builder())); public static final Item PRISMARINE_SHARD = register(new Item("prismarine_shard", builder())); public static final Item PRISMARINE_CRYSTALS = register(new Item("prismarine_crystals", builder())); @@ -1112,41 +1113,41 @@ public final class Items { public static final Item IRON_HORSE_ARMOR = register(new Item("iron_horse_armor", builder().stackSize(1))); public static final Item GOLDEN_HORSE_ARMOR = register(new Item("golden_horse_armor", builder().stackSize(1))); public static final Item DIAMOND_HORSE_ARMOR = register(new Item("diamond_horse_armor", builder().stackSize(1))); - public static final Item LEATHER_HORSE_ARMOR = register(new Item("leather_horse_armor", builder().stackSize(1))); + public static final Item LEATHER_HORSE_ARMOR = register(new DyeableHorseArmorItem("leather_horse_armor", builder().stackSize(1))); public static final Item LEAD = register(new Item("lead", builder())); public static final Item NAME_TAG = register(new Item("name_tag", builder())); public static final Item COMMAND_BLOCK_MINECART = register(new Item("command_block_minecart", builder().stackSize(1))); public static final Item MUTTON = register(new Item("mutton", builder())); public static final Item COOKED_MUTTON = register(new Item("cooked_mutton", builder())); - public static final Item WHITE_BANNER = register(new Item("white_banner", builder().stackSize(16))); - public static final Item ORANGE_BANNER = register(new Item("orange_banner", builder().stackSize(16))); - public static final Item MAGENTA_BANNER = register(new Item("magenta_banner", builder().stackSize(16))); - public static final Item LIGHT_BLUE_BANNER = register(new Item("light_blue_banner", builder().stackSize(16))); - public static final Item YELLOW_BANNER = register(new Item("yellow_banner", builder().stackSize(16))); - public static final Item LIME_BANNER = register(new Item("lime_banner", builder().stackSize(16))); - public static final Item PINK_BANNER = register(new Item("pink_banner", builder().stackSize(16))); - public static final Item GRAY_BANNER = register(new Item("gray_banner", builder().stackSize(16))); - public static final Item LIGHT_GRAY_BANNER = register(new Item("light_gray_banner", builder().stackSize(16))); - public static final Item CYAN_BANNER = register(new Item("cyan_banner", builder().stackSize(16))); - public static final Item PURPLE_BANNER = register(new Item("purple_banner", builder().stackSize(16))); - public static final Item BLUE_BANNER = register(new Item("blue_banner", builder().stackSize(16))); - public static final Item BROWN_BANNER = register(new Item("brown_banner", builder().stackSize(16))); - public static final Item GREEN_BANNER = register(new Item("green_banner", builder().stackSize(16))); - public static final Item RED_BANNER = register(new Item("red_banner", builder().stackSize(16))); - public static final Item BLACK_BANNER = register(new Item("black_banner", builder().stackSize(16))); + public static final Item WHITE_BANNER = register(new BannerItem("white_banner", builder().stackSize(16))); + public static final Item ORANGE_BANNER = register(new BannerItem("orange_banner", builder().stackSize(16))); + public static final Item MAGENTA_BANNER = register(new BannerItem("magenta_banner", builder().stackSize(16))); + public static final Item LIGHT_BLUE_BANNER = register(new BannerItem("light_blue_banner", builder().stackSize(16))); + public static final Item YELLOW_BANNER = register(new BannerItem("yellow_banner", builder().stackSize(16))); + public static final Item LIME_BANNER = register(new BannerItem("lime_banner", builder().stackSize(16))); + public static final Item PINK_BANNER = register(new BannerItem("pink_banner", builder().stackSize(16))); + public static final Item GRAY_BANNER = register(new BannerItem("gray_banner", builder().stackSize(16))); + public static final Item LIGHT_GRAY_BANNER = register(new BannerItem("light_gray_banner", builder().stackSize(16))); + public static final Item CYAN_BANNER = register(new BannerItem("cyan_banner", builder().stackSize(16))); + public static final Item PURPLE_BANNER = register(new BannerItem("purple_banner", builder().stackSize(16))); + public static final Item BLUE_BANNER = register(new BannerItem("blue_banner", builder().stackSize(16))); + public static final Item BROWN_BANNER = register(new BannerItem("brown_banner", builder().stackSize(16))); + public static final Item GREEN_BANNER = register(new BannerItem("green_banner", builder().stackSize(16))); + public static final Item RED_BANNER = register(new BannerItem("red_banner", builder().stackSize(16))); + public static final Item BLACK_BANNER = register(new BannerItem("black_banner", builder().stackSize(16))); public static final Item END_CRYSTAL = register(new Item("end_crystal", builder())); public static final Item CHORUS_FRUIT = register(new Item("chorus_fruit", builder())); public static final Item POPPED_CHORUS_FRUIT = register(new Item("popped_chorus_fruit", builder())); - public static final Item TORCHFLOWER_SEEDS = register(new Item("torchflower_seeds", builder())); + public static final Item TORCHFLOWER_SEEDS = register(new BlockItem("torchflower_seeds", builder())); public static final Item BEETROOT = register(new Item("beetroot", builder())); - public static final Item BEETROOT_SEEDS = register(new Item("beetroot_seeds", builder())); + public static final Item BEETROOT_SEEDS = register(new BlockItem("beetroot_seeds", builder())); public static final Item BEETROOT_SOUP = register(new Item("beetroot_soup", builder().stackSize(1))); public static final Item DRAGON_BREATH = register(new Item("dragon_breath", builder())); - public static final PotionItem SPLASH_POTION = register(new PotionItem("splash_potion", builder().stackSize(1))); + public static final Item SPLASH_POTION = register(new PotionItem("splash_potion", builder().stackSize(1))); public static final Item SPECTRAL_ARROW = register(new Item("spectral_arrow", builder())); - public static final TippedArrowItem TIPPED_ARROW = register(new TippedArrowItem("tipped_arrow", builder())); - public static final PotionItem LINGERING_POTION = register(new PotionItem("lingering_potion", builder().stackSize(1))); - public static final ShieldItem SHIELD = register(new ShieldItem("shield", builder().stackSize(1).maxDamage(336))); + public static final Item TIPPED_ARROW = register(new TippedArrowItem("tipped_arrow", builder())); + public static final Item LINGERING_POTION = register(new PotionItem("lingering_potion", builder().stackSize(1))); + public static final Item SHIELD = register(new ShieldItem("shield", builder().stackSize(1).maxDamage(336))); public static final Item TOTEM_OF_UNDYING = register(new Item("totem_of_undying", builder().stackSize(1))); public static final Item SHULKER_SHELL = register(new Item("shulker_shell", builder())); public static final Item IRON_NUGGET = register(new Item("iron_nugget", builder())); @@ -1172,79 +1173,79 @@ public final class Items { public static final Item PHANTOM_MEMBRANE = register(new Item("phantom_membrane", builder())); public static final Item NAUTILUS_SHELL = register(new Item("nautilus_shell", builder())); public static final Item HEART_OF_THE_SEA = register(new Item("heart_of_the_sea", builder())); - public static final Item CROSSBOW = register(new Item("crossbow", builder().stackSize(1).maxDamage(465))); + public static final Item CROSSBOW = register(new CrossbowItem("crossbow", builder().stackSize(1).maxDamage(465))); public static final Item SUSPICIOUS_STEW = register(new Item("suspicious_stew", builder().stackSize(1))); - public static final Item LOOM = register(new Item("loom", builder())); + public static final Item LOOM = register(new BlockItem("loom", builder())); public static final Item FLOWER_BANNER_PATTERN = register(new Item("flower_banner_pattern", builder().stackSize(1))); public static final Item CREEPER_BANNER_PATTERN = register(new Item("creeper_banner_pattern", builder().stackSize(1))); public static final Item SKULL_BANNER_PATTERN = register(new Item("skull_banner_pattern", builder().stackSize(1))); public static final Item MOJANG_BANNER_PATTERN = register(new Item("mojang_banner_pattern", builder().stackSize(1))); public static final Item GLOBE_BANNER_PATTERN = register(new Item("globe_banner_pattern", builder().stackSize(1))); public static final Item PIGLIN_BANNER_PATTERN = register(new Item("piglin_banner_pattern", builder().stackSize(1))); - public static final GoatHornItem GOAT_HORN = register(new GoatHornItem("goat_horn", builder().stackSize(1))); - public static final Item COMPOSTER = register(new Item("composter", builder())); - public static final Item BARREL = register(new Item("barrel", builder())); - public static final Item SMOKER = register(new Item("smoker", builder())); - public static final Item BLAST_FURNACE = register(new Item("blast_furnace", builder())); - public static final Item CARTOGRAPHY_TABLE = register(new Item("cartography_table", builder())); - public static final Item FLETCHING_TABLE = register(new Item("fletching_table", builder())); - public static final Item GRINDSTONE = register(new Item("grindstone", builder())); - public static final Item SMITHING_TABLE = register(new Item("smithing_table", builder())); - public static final Item STONECUTTER = register(new Item("stonecutter", builder())); - public static final Item BELL = register(new Item("bell", builder())); - public static final Item LANTERN = register(new Item("lantern", builder())); - public static final Item SOUL_LANTERN = register(new Item("soul_lantern", builder())); - public static final Item SWEET_BERRIES = register(new Item("sweet_berries", builder())); - public static final Item GLOW_BERRIES = register(new Item("glow_berries", builder())); - public static final Item CAMPFIRE = register(new Item("campfire", builder())); - public static final Item SOUL_CAMPFIRE = register(new Item("soul_campfire", builder())); - public static final Item SHROOMLIGHT = register(new Item("shroomlight", builder())); + public static final Item GOAT_HORN = register(new GoatHornItem("goat_horn", builder().stackSize(1))); + public static final Item COMPOSTER = register(new BlockItem("composter", builder())); + public static final Item BARREL = register(new BlockItem("barrel", builder())); + public static final Item SMOKER = register(new BlockItem("smoker", builder())); + public static final Item BLAST_FURNACE = register(new BlockItem("blast_furnace", builder())); + public static final Item CARTOGRAPHY_TABLE = register(new BlockItem("cartography_table", builder())); + public static final Item FLETCHING_TABLE = register(new BlockItem("fletching_table", builder())); + public static final Item GRINDSTONE = register(new BlockItem("grindstone", builder())); + public static final Item SMITHING_TABLE = register(new BlockItem("smithing_table", builder())); + public static final Item STONECUTTER = register(new BlockItem("stonecutter", builder())); + public static final Item BELL = register(new BlockItem("bell", builder())); + public static final Item LANTERN = register(new BlockItem("lantern", builder())); + public static final Item SOUL_LANTERN = register(new BlockItem("soul_lantern", builder())); + public static final Item SWEET_BERRIES = register(new BlockItem("sweet_berries", builder())); + public static final Item GLOW_BERRIES = register(new BlockItem("glow_berries", builder())); + public static final Item CAMPFIRE = register(new BlockItem("campfire", builder())); + public static final Item SOUL_CAMPFIRE = register(new BlockItem("soul_campfire", builder())); + public static final Item SHROOMLIGHT = register(new BlockItem("shroomlight", builder())); public static final Item HONEYCOMB = register(new Item("honeycomb", builder())); - public static final Item BEE_NEST = register(new Item("bee_nest", builder())); - public static final Item BEEHIVE = register(new Item("beehive", builder())); + public static final Item BEE_NEST = register(new BlockItem("bee_nest", builder())); + public static final Item BEEHIVE = register(new BlockItem("beehive", builder())); public static final Item HONEY_BOTTLE = register(new Item("honey_bottle", builder().stackSize(16))); - public static final Item HONEYCOMB_BLOCK = register(new Item("honeycomb_block", builder())); - public static final Item LODESTONE = register(new Item("lodestone", builder())); - public static final Item CRYING_OBSIDIAN = register(new Item("crying_obsidian", builder())); - public static final Item BLACKSTONE = register(new Item("blackstone", builder())); - public static final Item BLACKSTONE_SLAB = register(new Item("blackstone_slab", builder())); - public static final Item BLACKSTONE_STAIRS = register(new Item("blackstone_stairs", builder())); - public static final Item GILDED_BLACKSTONE = register(new Item("gilded_blackstone", builder())); - public static final Item POLISHED_BLACKSTONE = register(new Item("polished_blackstone", builder())); - public static final Item POLISHED_BLACKSTONE_SLAB = register(new Item("polished_blackstone_slab", builder())); - public static final Item POLISHED_BLACKSTONE_STAIRS = register(new Item("polished_blackstone_stairs", builder())); - public static final Item CHISELED_POLISHED_BLACKSTONE = register(new Item("chiseled_polished_blackstone", builder())); - public static final Item POLISHED_BLACKSTONE_BRICKS = register(new Item("polished_blackstone_bricks", builder())); - public static final Item POLISHED_BLACKSTONE_BRICK_SLAB = register(new Item("polished_blackstone_brick_slab", builder())); - public static final Item POLISHED_BLACKSTONE_BRICK_STAIRS = register(new Item("polished_blackstone_brick_stairs", builder())); - public static final Item CRACKED_POLISHED_BLACKSTONE_BRICKS = register(new Item("cracked_polished_blackstone_bricks", builder())); - public static final Item RESPAWN_ANCHOR = register(new Item("respawn_anchor", builder())); - public static final Item CANDLE = register(new Item("candle", builder())); - public static final Item WHITE_CANDLE = register(new Item("white_candle", builder())); - public static final Item ORANGE_CANDLE = register(new Item("orange_candle", builder())); - public static final Item MAGENTA_CANDLE = register(new Item("magenta_candle", builder())); - public static final Item LIGHT_BLUE_CANDLE = register(new Item("light_blue_candle", builder())); - public static final Item YELLOW_CANDLE = register(new Item("yellow_candle", builder())); - public static final Item LIME_CANDLE = register(new Item("lime_candle", builder())); - public static final Item PINK_CANDLE = register(new Item("pink_candle", builder())); - public static final Item GRAY_CANDLE = register(new Item("gray_candle", builder())); - public static final Item LIGHT_GRAY_CANDLE = register(new Item("light_gray_candle", builder())); - public static final Item CYAN_CANDLE = register(new Item("cyan_candle", builder())); - public static final Item PURPLE_CANDLE = register(new Item("purple_candle", builder())); - public static final Item BLUE_CANDLE = register(new Item("blue_candle", builder())); - public static final Item BROWN_CANDLE = register(new Item("brown_candle", builder())); - public static final Item GREEN_CANDLE = register(new Item("green_candle", builder())); - public static final Item RED_CANDLE = register(new Item("red_candle", builder())); - public static final Item BLACK_CANDLE = register(new Item("black_candle", builder())); - public static final Item SMALL_AMETHYST_BUD = register(new Item("small_amethyst_bud", builder())); - public static final Item MEDIUM_AMETHYST_BUD = register(new Item("medium_amethyst_bud", builder())); - public static final Item LARGE_AMETHYST_BUD = register(new Item("large_amethyst_bud", builder())); - public static final Item AMETHYST_CLUSTER = register(new Item("amethyst_cluster", builder())); - public static final Item POINTED_DRIPSTONE = register(new Item("pointed_dripstone", builder())); - public static final Item OCHRE_FROGLIGHT = register(new Item("ochre_froglight", builder())); - public static final Item VERDANT_FROGLIGHT = register(new Item("verdant_froglight", builder())); - public static final Item PEARLESCENT_FROGLIGHT = register(new Item("pearlescent_froglight", builder())); - public static final Item FROGSPAWN = register(new Item("frogspawn", builder())); + public static final Item HONEYCOMB_BLOCK = register(new BlockItem("honeycomb_block", builder())); + public static final Item LODESTONE = register(new BlockItem("lodestone", builder())); + public static final Item CRYING_OBSIDIAN = register(new BlockItem("crying_obsidian", builder())); + public static final Item BLACKSTONE = register(new BlockItem("blackstone", builder())); + public static final Item BLACKSTONE_SLAB = register(new BlockItem("blackstone_slab", builder())); + public static final Item BLACKSTONE_STAIRS = register(new BlockItem("blackstone_stairs", builder())); + public static final Item GILDED_BLACKSTONE = register(new BlockItem("gilded_blackstone", builder())); + public static final Item POLISHED_BLACKSTONE = register(new BlockItem("polished_blackstone", builder())); + public static final Item POLISHED_BLACKSTONE_SLAB = register(new BlockItem("polished_blackstone_slab", builder())); + public static final Item POLISHED_BLACKSTONE_STAIRS = register(new BlockItem("polished_blackstone_stairs", builder())); + public static final Item CHISELED_POLISHED_BLACKSTONE = register(new BlockItem("chiseled_polished_blackstone", builder())); + public static final Item POLISHED_BLACKSTONE_BRICKS = register(new BlockItem("polished_blackstone_bricks", builder())); + public static final Item POLISHED_BLACKSTONE_BRICK_SLAB = register(new BlockItem("polished_blackstone_brick_slab", builder())); + public static final Item POLISHED_BLACKSTONE_BRICK_STAIRS = register(new BlockItem("polished_blackstone_brick_stairs", builder())); + public static final Item CRACKED_POLISHED_BLACKSTONE_BRICKS = register(new BlockItem("cracked_polished_blackstone_bricks", builder())); + public static final Item RESPAWN_ANCHOR = register(new BlockItem("respawn_anchor", builder())); + public static final Item CANDLE = register(new BlockItem("candle", builder())); + public static final Item WHITE_CANDLE = register(new BlockItem("white_candle", builder())); + public static final Item ORANGE_CANDLE = register(new BlockItem("orange_candle", builder())); + public static final Item MAGENTA_CANDLE = register(new BlockItem("magenta_candle", builder())); + public static final Item LIGHT_BLUE_CANDLE = register(new BlockItem("light_blue_candle", builder())); + public static final Item YELLOW_CANDLE = register(new BlockItem("yellow_candle", builder())); + public static final Item LIME_CANDLE = register(new BlockItem("lime_candle", builder())); + public static final Item PINK_CANDLE = register(new BlockItem("pink_candle", builder())); + public static final Item GRAY_CANDLE = register(new BlockItem("gray_candle", builder())); + public static final Item LIGHT_GRAY_CANDLE = register(new BlockItem("light_gray_candle", builder())); + public static final Item CYAN_CANDLE = register(new BlockItem("cyan_candle", builder())); + public static final Item PURPLE_CANDLE = register(new BlockItem("purple_candle", builder())); + public static final Item BLUE_CANDLE = register(new BlockItem("blue_candle", builder())); + public static final Item BROWN_CANDLE = register(new BlockItem("brown_candle", builder())); + public static final Item GREEN_CANDLE = register(new BlockItem("green_candle", builder())); + public static final Item RED_CANDLE = register(new BlockItem("red_candle", builder())); + public static final Item BLACK_CANDLE = register(new BlockItem("black_candle", builder())); + public static final Item SMALL_AMETHYST_BUD = register(new BlockItem("small_amethyst_bud", builder())); + public static final Item MEDIUM_AMETHYST_BUD = register(new BlockItem("medium_amethyst_bud", builder())); + public static final Item LARGE_AMETHYST_BUD = register(new BlockItem("large_amethyst_bud", builder())); + public static final Item AMETHYST_CLUSTER = register(new BlockItem("amethyst_cluster", builder())); + public static final Item POINTED_DRIPSTONE = register(new BlockItem("pointed_dripstone", builder())); + public static final Item OCHRE_FROGLIGHT = register(new BlockItem("ochre_froglight", builder())); + public static final Item VERDANT_FROGLIGHT = register(new BlockItem("verdant_froglight", builder())); + public static final Item PEARLESCENT_FROGLIGHT = register(new BlockItem("pearlescent_froglight", builder())); + public static final Item FROGSPAWN = register(new BlockItem("frogspawn", builder())); public static final Item ECHO_SHARD = register(new Item("echo_shard", builder())); public static final Item BRUSH = register(new Item("brush", builder().stackSize(1).maxDamage(64))); public static final Item NETHERITE_UPGRADE_SMITHING_TEMPLATE = register(new Item("netherite_upgrade_smithing_template", builder())); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/AxolotlBucketTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/AxolotlBucketItem.java similarity index 65% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/AxolotlBucketTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/AxolotlBucketItem.java index 8f81f5b4e..d475fb5d8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/AxolotlBucketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/AxolotlBucketItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,35 +23,31 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.ByteTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.MinecraftLocale; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; +import org.jetbrains.annotations.NotNull; -@ItemRemapper -public class AxolotlBucketTranslator extends NbtItemStackTranslator { +public class AxolotlBucketItem extends Item { + public AxolotlBucketItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { + public void translateNbtToBedrock(@NotNull GeyserSession session, @NotNull CompoundTag tag, @NotNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + // Bedrock Edition displays the properties of the axolotl. Java does not. // To work around this, set the custom name to the Axolotl translation and it's displayed correctly - itemTag.put(new ByteTag("AppendCustomName", (byte) 1)); - itemTag.put(new StringTag("CustomName", MinecraftLocale.getLocaleString("entity.minecraft.axolotl", session.locale()))); + tag.put(new ByteTag("AppendCustomName", (byte) 1)); + tag.put(new StringTag("CustomName", MinecraftLocale.getLocaleString("entity.minecraft.axolotl", session.locale()))); // Boilerplate required so the nametag does not appear as "Bucket of " - itemTag.put(new StringTag("ColorID", "")); - itemTag.put(new StringTag("BodyID", "")); - } - - @Override - public boolean acceptItem(Item item) { - return item == Items.AXOLOTL_BUCKET; + tag.put(new StringTag("ColorID", "")); + tag.put(new StringTag("BodyID", "")); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BannerTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java similarity index 75% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BannerTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java index c43615d47..306bf2114 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BannerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,30 +23,26 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; -import com.github.steveice10.opennbt.tag.builtin.*; +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.IntTag; +import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; import org.cloudburstmc.nbt.NbtList; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; +import org.jetbrains.annotations.NotNull; import javax.annotation.Nonnull; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import static org.geysermc.erosion.util.BannerUtils.getJavaPatternTag; -@ItemRemapper -public class BannerTranslator extends NbtItemStackTranslator { +public class BannerItem extends BlockItem { /** * Holds what a Java ominous banner pattern looks like. * @@ -56,8 +52,6 @@ public class BannerTranslator extends NbtItemStackTranslator { */ public static final ListTag OMINOUS_BANNER_PATTERN; - private final List appliedItems; - static { OMINOUS_BANNER_PATTERN = new ListTag("Patterns"); // Construct what an ominous banner is supposed to look like @@ -71,12 +65,6 @@ public class BannerTranslator extends NbtItemStackTranslator { OMINOUS_BANNER_PATTERN.add(getJavaPatternTag("bo", 15)); } - public BannerTranslator() { - appliedItems = Registries.JAVA_ITEMS.get().stream() - .filter(entry -> entry.javaIdentifier().endsWith("banner")) - .collect(Collectors.toList()); - } - /** * Convert a list of patterns from Java nbt to Bedrock nbt * @@ -128,42 +116,44 @@ public class BannerTranslator extends NbtItemStackTranslator { } } + public BannerItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } + @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - CompoundTag blockEntityTag = itemTag.get("BlockEntityTag"); + public void translateNbtToBedrock(@NotNull GeyserSession session, @NotNull CompoundTag tag, @NotNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + CompoundTag blockEntityTag = tag.remove("BlockEntityTag"); if (blockEntityTag != null && blockEntityTag.get("Patterns") instanceof ListTag patterns) { if (patterns.equals(OMINOUS_BANNER_PATTERN)) { // Remove the current patterns and set the ominous banner type - itemTag.put(new IntTag("Type", 1)); + tag.put(new IntTag("Type", 1)); } else { invertBannerColors(patterns); - itemTag.put(patterns); + tag.put(patterns); } - itemTag.remove("BlockEntityTag"); } } @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - if (itemTag.get("Type") instanceof IntTag type && type.getValue() == 1) { + public void translateNbtToJava(@NotNull CompoundTag tag, @NotNull ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); + + if (tag.get("Type") instanceof IntTag type && type.getValue() == 1) { // Ominous banner pattern - itemTag.remove("Type"); + tag.remove("Type"); CompoundTag blockEntityTag = new CompoundTag("BlockEntityTag"); blockEntityTag.put(OMINOUS_BANNER_PATTERN); - itemTag.put(blockEntityTag); - } else if (itemTag.get("Patterns") instanceof ListTag patterns) { + tag.put(blockEntityTag); + } else if (tag.get("Patterns") instanceof ListTag patterns) { CompoundTag blockEntityTag = new CompoundTag("BlockEntityTag"); invertBannerColors(patterns); blockEntityTag.put(patterns); - itemTag.put(blockEntityTag); - itemTag.remove("Patterns"); // Remove the old Bedrock patterns list + tag.put(blockEntityTag); + tag.remove("Patterns"); // Remove the old Bedrock patterns list } } - - @Override - public boolean acceptItem(Item item) { - return appliedItems.contains(item); - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemRemapper.java b/core/src/main/java/org/geysermc/geyser/item/type/BoatItem.java similarity index 79% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemRemapper.java rename to core/src/main/java/org/geysermc/geyser/item/type/BoatItem.java index 937d6d062..766074f08 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemRemapper.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/BoatItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,12 +23,10 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item; +package org.geysermc.geyser.item.type; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -@Retention(value = RetentionPolicy.RUNTIME) -public @interface ItemRemapper { - int priority() default 0; +public class BoatItem extends Item { + public BoatItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java b/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java index e7922b9d3..a543c7df8 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java @@ -28,10 +28,12 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.ByteTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; public class CompassItem extends Item { public CompassItem(String javaIdentifier, Builder builder) { @@ -41,7 +43,6 @@ public class CompassItem extends Item { @Override public ItemData.Builder translateToBedrock(ItemStack itemStack, ItemMapping mapping, ItemMappings mappings) { if (isLodestoneCompass(itemStack.getNbt())) { - // NBT will be translated in nbt/LodestoneCompassTranslator if applicable return super.translateToBedrock(itemStack, mappings.getLodestoneCompass(), mappings); } return super.translateToBedrock(itemStack, mapping, mappings); @@ -55,6 +56,18 @@ public class CompassItem extends Item { return super.toBedrockDefinition(nbt, mappings); } + @Override + public void translateNbtToBedrock(GeyserSession session, CompoundTag tag, ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + Tag lodestoneTag = tag.get("LodestoneTracked"); + if (lodestoneTag instanceof ByteTag) { + int trackId = session.getLodestoneCache().store(tag); + // Set the bedrock tracking id - will return 0 if invalid + tag.put(new IntTag("trackingHandle", trackId)); + } + } + private boolean isLodestoneCompass(CompoundTag nbt) { if (nbt != null) { Tag lodestoneTag = nbt.get("LodestoneTracked"); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/CrossbowTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java similarity index 72% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/CrossbowTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java index 40c0466b5..b2ca3a449 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/CrossbowTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,33 +23,34 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.*; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; import org.geysermc.geyser.translator.inventory.item.ItemTranslator; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; -@ItemRemapper -public class CrossbowTranslator extends NbtItemStackTranslator { +public class CrossbowItem extends Item { + public CrossbowItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - ListTag chargedProjectiles = itemTag.get("ChargedProjectiles"); + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + ListTag chargedProjectiles = tag.get("ChargedProjectiles"); if (chargedProjectiles != null) { if (!chargedProjectiles.getValue().isEmpty()) { CompoundTag projectile = (CompoundTag) chargedProjectiles.getValue().get(0); ItemMapping projectileMapping = session.getItemMappings().getMapping((String) projectile.get("id").getValue()); if (projectileMapping == null) return; - CompoundTag tag = projectile.get("tag"); - ItemStack itemStack = new ItemStack(mapping.getJavaItem().javaId(), (byte) projectile.get("Count").getValue(), tag); + CompoundTag projectileTag = projectile.get("tag"); + ItemStack itemStack = new ItemStack(mapping.getJavaItem().javaId(), (byte) projectile.get("Count").getValue(), projectileTag); ItemData itemData = ItemTranslator.translateToBedrock(session, itemStack); CompoundTag newProjectile = new CompoundTag("chargedItem"); @@ -58,15 +59,17 @@ public class CrossbowTranslator extends NbtItemStackTranslator { newProjectile.put(new ShortTag("Damage", (short) itemData.getDamage())); - itemTag.put(newProjectile); + projectileTag.put(newProjectile); } } } @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - if (itemTag.get("chargedItem") != null) { - CompoundTag chargedItem = itemTag.get("chargedItem"); + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); + + if (tag.get("chargedItem") != null) { + CompoundTag chargedItem = tag.get("chargedItem"); CompoundTag newProjectile = new CompoundTag(""); newProjectile.put(new ByteTag("Count", (byte) chargedItem.get("Count").getValue())); @@ -75,12 +78,7 @@ public class CrossbowTranslator extends NbtItemStackTranslator { ListTag chargedProjectiles = new ListTag("ChargedProjectiles"); chargedProjectiles.add(newProjectile); - itemTag.put(chargedProjectiles); + tag.put(chargedProjectiles); } } - - @Override - public boolean acceptItem(Item item) { - return item == Items.CROSSBOW; - } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/DyeableArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/DyeableArmorItem.java new file mode 100644 index 000000000..71b8b35da --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/item/type/DyeableArmorItem.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.item.type; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.item.ArmorMaterial; +import org.geysermc.geyser.item.DyeableLeatherItem; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.session.GeyserSession; + +public class DyeableArmorItem extends ArmorItem implements DyeableLeatherItem { + public DyeableArmorItem(String javaIdentifier, ArmorMaterial material, Builder builder) { + super(javaIdentifier, material, builder); + } + + @Override + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + DyeableLeatherItem.translateNbtToBedrock(tag); + } + + @Override + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); + + DyeableLeatherItem.translateNbtToJava(tag); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/item/type/DyeableHorseArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/DyeableHorseArmorItem.java new file mode 100644 index 000000000..4312d7328 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/item/type/DyeableHorseArmorItem.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.item.type; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.item.DyeableLeatherItem; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.session.GeyserSession; + +public class DyeableHorseArmorItem extends Item implements DyeableLeatherItem { + public DyeableHorseArmorItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } + + @Override + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + DyeableLeatherItem.translateNbtToBedrock(tag); + } + + @Override + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); + + DyeableLeatherItem.translateNbtToJava(tag); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/EnchantedBookTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java similarity index 50% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/EnchantedBookTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java index f42885077..134c2c474 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/EnchantedBookTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,49 +23,40 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.Tag; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; -@ItemRemapper(priority = 1) -public class EnchantedBookTranslator extends NbtItemStackTranslator { +import java.util.ArrayList; +import java.util.List; - @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - if (!itemTag.contains("StoredEnchantments")) { - return; - } - Tag enchTag = itemTag.get("StoredEnchantments"); - if (enchTag instanceof ListTag) { - enchTag = new ListTag("Enchantments", ((ListTag) enchTag).getValue()); - itemTag.remove("StoredEnchantments"); - itemTag.put(enchTag); - } +public class EnchantedBookItem extends Item { + public EnchantedBookItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); } @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - if (!itemTag.contains("Enchantments")) { - return; - } - Tag enchTag = itemTag.get("Enchantments"); - if (enchTag instanceof ListTag) { - enchTag = new ListTag("StoredEnchantments", ((ListTag) enchTag).getValue()); - itemTag.remove("Enchantments"); - itemTag.put(enchTag); - } - } + public void translateNbtToBedrock(GeyserSession session, CompoundTag tag, ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); - @Override - public boolean acceptItem(Item item) { - return item == Items.ENCHANTED_BOOK; + List newTags = new ArrayList<>(); + Tag enchantmentTag = tag.remove("StoredEnchantments"); + if (enchantmentTag instanceof ListTag listTag) { + for (Tag subTag : listTag.getValue()) { + if (!(subTag instanceof CompoundTag)) continue; + CompoundTag bedrockTag = remapEnchantment(session, (CompoundTag) subTag, tag); + if (bedrockTag != null) { + newTags.add(bedrockTag); + } + } + } + + if (!newTags.isEmpty()) { + tag.put(new ListTag("ench", newTags)); + } } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java index d045f83e4..963373523 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; @@ -41,7 +42,10 @@ public class FilledMapItem extends MapItem { public ItemData.Builder translateToBedrock(ItemStack itemStack, ItemMapping mapping, ItemMappings mappings) { ItemData.Builder builder = super.translateToBedrock(itemStack, mapping, mappings); CompoundTag nbt = itemStack.getNbt(); - if (nbt != null && nbt.get("display") instanceof CompoundTag display) { + if (nbt == null) { + // This is a fallback for maps with no nbt (Change added back in June 2020; is it needed in 2023?) + return builder.tag(NbtMap.builder().putInt("map", 0).build()); + } else if (nbt.get("display") instanceof CompoundTag display) { // Note: damage 5 treasure map, 6 ??? Tag mapColor = display.get("MapColor"); if (mapColor != null && mapColor.getValue() instanceof Number color) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkBaseTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java similarity index 71% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkBaseTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java index b74a4f61e..9fb34e90b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkBaseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,22 +23,52 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; -import com.github.steveice10.opennbt.tag.builtin.ByteArrayTag; -import com.github.steveice10.opennbt.tag.builtin.ByteTag; -import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; +import com.github.steveice10.opennbt.tag.builtin.*; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.level.FireworkColor; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.MathUtils; -/** - * Stores common code for firework rockets and firework stars. - */ -public abstract class FireworkBaseTranslator extends NbtItemStackTranslator { +public class FireworkRocketItem extends Item { + public FireworkRocketItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } - protected CompoundTag translateExplosionToBedrock(CompoundTag explosion, String newName) { + @Override + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + CompoundTag fireworks = tag.get("Fireworks"); + if (fireworks == null) { + return; + } + + if (fireworks.get("Flight") != null) { + fireworks.put(new ByteTag("Flight", MathUtils.getNbtByte(fireworks.get("Flight").getValue()))); + } + + ListTag explosions = fireworks.get("Explosions"); + if (explosions == null) { + return; + } + for (Tag effect : explosions.getValue()) { + CompoundTag effectData = (CompoundTag) effect; + CompoundTag newEffectData = translateExplosionToBedrock(effectData, ""); + + explosions.remove(effectData); + explosions.add(newEffectData); + } + } + + @Override + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); + } + + static CompoundTag translateExplosionToBedrock(CompoundTag explosion, String newName) { CompoundTag newExplosionData = new CompoundTag(newName); if (explosion.get("Type") != null) { @@ -80,7 +110,7 @@ public abstract class FireworkBaseTranslator extends NbtItemStackTranslator { return newExplosionData; } - protected CompoundTag translateExplosionToJava(CompoundTag explosion, String newName) { + static CompoundTag translateExplosionToJava(CompoundTag explosion, String newName) { CompoundTag newExplosionData = new CompoundTag(newName); if (explosion.get("FireworkType") != null) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkStarTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/FireworkStarItem.java similarity index 70% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkStarTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/FireworkStarItem.java index 23fb74fcc..0a2d556e5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkStarTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FireworkStarItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,28 +23,29 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.Tag; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -@ItemRemapper -public class FireworkStarTranslator extends FireworkBaseTranslator { +public class FireworkStarItem extends Item { + public FireworkStarItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - Tag explosion = itemTag.get("Explosion"); + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + Tag explosion = tag.remove("Explosion"); if (explosion instanceof CompoundTag) { - CompoundTag newExplosion = translateExplosionToBedrock((CompoundTag) explosion, "FireworksItem"); - itemTag.remove("Explosion"); - itemTag.put(newExplosion); + CompoundTag newExplosion = FireworkRocketItem.translateExplosionToBedrock((CompoundTag) explosion, "FireworksItem"); + tag.put(newExplosion); Tag color = ((CompoundTag) explosion).get("Colors"); if (color instanceof IntArrayTag) { // Determine the custom color, if any. @@ -74,25 +75,21 @@ public class FireworkStarTranslator extends FireworkBaseTranslator { finalColor = r << 16 | g << 8 | b; } - itemTag.put(new IntTag("customColor", finalColor)); + tag.put(new IntTag("customColor", finalColor)); } } } @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - Tag explosion = itemTag.get("FireworksItem"); + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); + + Tag explosion = tag.remove("FireworksItem"); if (explosion instanceof CompoundTag) { - CompoundTag newExplosion = translateExplosionToJava((CompoundTag) explosion, "Explosion"); - itemTag.remove("FireworksItem"); - itemTag.put(newExplosion); + CompoundTag newExplosion = FireworkRocketItem.translateExplosionToJava((CompoundTag) explosion, "Explosion"); + tag.put(newExplosion); } // Remove custom color, if any, since this only exists on Bedrock - itemTag.remove("customColor"); - } - - @Override - public boolean acceptItem(Item item) { - return item == Items.FIREWORK_STAR; + tag.remove("customColor"); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/LodestoneCompassTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/FishingRodItem.java similarity index 54% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/LodestoneCompassTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/FishingRodItem.java index 33a841f85..c466df1af 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/LodestoneCompassTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FishingRodItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,38 +23,32 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; -import com.github.steveice10.opennbt.tag.builtin.ByteTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.Tag; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; -@ItemRemapper -public class LodestoneCompassTranslator extends NbtItemStackTranslator { +public class FishingRodItem extends Item { + public FishingRodItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - Tag lodestoneTag = itemTag.get("LodestoneTracked"); - if (lodestoneTag instanceof ByteTag) { - int trackId = session.getLodestoneCache().store(itemTag); - // Set the bedrock tracking id - will return 0 if invalid - itemTag.put(new IntTag("trackingHandle", trackId)); + public void translateNbtToBedrock(GeyserSession session, CompoundTag tag, ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + // Fix damage inconsistency + Tag damage = tag.get("Damage"); + if (damage instanceof IntTag) { + int originalDurability = ((IntTag) damage).getValue(); + tag.put(new IntTag("Damage", getBedrockDamage(originalDurability))); } } - // NBT does not need to be translated from Bedrock Edition to Java Edition. - // translateToJava is called in three places: extra recipe loading, creative menu, and stonecutters - // Lodestone compasses cannot be touched in any of those places. - - @Override - public boolean acceptItem(Item item) { - return item == Items.COMPASS; + public static int getBedrockDamage(int javaDamage) { + return javaDamage * 6; } } diff --git a/ap/src/main/java/org/geysermc/geyser/processor/ItemRemapperProcessor.java b/core/src/main/java/org/geysermc/geyser/item/type/FlowerItem.java similarity index 69% rename from ap/src/main/java/org/geysermc/geyser/processor/ItemRemapperProcessor.java rename to core/src/main/java/org/geysermc/geyser/item/type/FlowerItem.java index 2dd00506d..c65eec1d2 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/ItemRemapperProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FlowerItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,16 +23,11 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.processor; +package org.geysermc.geyser.item.type; -import javax.annotation.processing.SupportedAnnotationTypes; -import javax.annotation.processing.SupportedSourceVersion; -import javax.lang.model.SourceVersion; - -@SupportedAnnotationTypes("*") -@SupportedSourceVersion(SourceVersion.RELEASE_16) -public class ItemRemapperProcessor extends ClassProcessor { - public ItemRemapperProcessor() { - super("org.geysermc.geyser.translator.inventory.item.ItemRemapper"); +// If blocks are implemented, then this class is not needed. +public class FlowerItem extends BlockItem { + public FlowerItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); } } 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 7d3c70435..ba42f9d69 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 @@ -27,11 +27,22 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.Identifier; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; -import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.*; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.inventory.item.Enchantment; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.text.ChatColor; +import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.inventory.item.ItemTranslator; +import org.geysermc.geyser.translator.text.MessageTranslator; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; public class Item { private final String javaIdentifier; @@ -39,14 +50,12 @@ public class Item { private final int stackSize; private final String toolType; private final int maxDamage; - private final boolean hasSuspiciousStewEffect; public Item(String javaIdentifier, Builder builder) { this.javaIdentifier = Identifier.formalize(javaIdentifier).intern(); this.stackSize = builder.stackSize; this.toolType = builder.toolType; this.maxDamage = builder.maxDamage; - this.hasSuspiciousStewEffect = builder.hasSuspiciousStewEffect; } public String javaIdentifier() { @@ -102,13 +111,151 @@ public class Item { return mappings.getMapping(javaId); } + /** + * Takes NBT from Java Edition and converts any value that Bedrock parses differently. + */ + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + if (tag.get("display") instanceof CompoundTag displayTag) { + if (displayTag.get("Lore") instanceof ListTag listTag) { + List lore = new ArrayList<>(); + for (Tag subTag : listTag.getValue()) { + if (!(subTag instanceof StringTag)) continue; + lore.add(new StringTag("", MessageTranslator.convertMessageLenient(((StringTag) subTag).getValue(), session.locale()))); + } + displayTag.put(new ListTag("Lore", lore)); + } + } + + List newTags = new ArrayList<>(); + Tag enchantmentTag = tag.remove("Enchantments"); + if (enchantmentTag instanceof ListTag listTag) { + for (Tag subTag : listTag.getValue()) { + if (!(subTag instanceof CompoundTag)) continue; + CompoundTag bedrockTag = remapEnchantment(session, (CompoundTag) subTag, tag); + if (bedrockTag != null) { + newTags.add(bedrockTag); + } + } + } + + if (!newTags.isEmpty()) { + tag.put(new ListTag("ench", newTags)); + } + } + + /** + * Takes NBT from Java Edition and converts any value that Bedrock parses differently.
+ * Do note that this method is, these days, only called in three places (as of 2023/~1.19): + *
    + *
  • Extra recipe loading
  • + *
  • Creative menu
  • + *
  • Stonecutters
  • + *
+ * Therefore, if translation cannot be achieved for a certain item, it is not necessarily bad. + */ + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + CompoundTag displayTag = tag.get("display"); + if (displayTag != null) { + if (displayTag.contains("Name")) { + StringTag nameTag = displayTag.get("Name"); + displayTag.put(new StringTag("Name", MessageTranslator.convertToJavaMessage(nameTag.getValue()))); + } + + if (displayTag.contains("Lore")) { + ListTag loreTag = displayTag.get("Lore"); + List lore = new ArrayList<>(); + for (Tag subTag : loreTag.getValue()) { + if (!(subTag instanceof StringTag)) continue; + lore.add(new StringTag("", MessageTranslator.convertToJavaMessage(((StringTag) subTag).getValue()))); + } + displayTag.put(new ListTag("Lore", lore)); + } + } + + ListTag enchantmentTag = tag.remove("ench"); + if (enchantmentTag != null) { + List enchantments = new ArrayList<>(); + for (Tag value : enchantmentTag.getValue()) { + if (!(value instanceof CompoundTag tagValue)) + continue; + + ShortTag bedrockId = tagValue.get("id"); + if (bedrockId == null) continue; + + Enchantment enchantment = Enchantment.getByBedrockId(bedrockId.getValue()); + if (enchantment != null) { + CompoundTag javaTag = new CompoundTag(""); + Map javaValue = javaTag.getValue(); + javaValue.put("id", new StringTag("id", enchantment.getJavaIdentifier())); + ShortTag levelTag = tagValue.get("lvl"); + javaValue.put("lvl", new IntTag("lvl", levelTag != null ? levelTag.getValue() : 1)); + javaTag.setValue(javaValue); + + enchantments.add(javaTag); + } else { + GeyserImpl.getInstance().getLogger().debug("Unknown bedrock enchantment: " + bedrockId); + } + } + if (!enchantments.isEmpty()) { + tag.put(new ListTag("Enchantments", enchantments)); + } + } + } + + protected final CompoundTag remapEnchantment(GeyserSession session, CompoundTag tag, CompoundTag rootTag) { + Tag javaEnchId = tag.get("id"); + if (!(javaEnchId instanceof StringTag)) + return null; + + Enchantment enchantment = Enchantment.getByJavaIdentifier(((StringTag) javaEnchId).getValue()); + if (enchantment == null) { + if (Identifier.formalize((String) javaEnchId.getValue()).equals("minecraft:sweeping")) { + Tag javaEnchLvl = tag.get("lvl"); + int sweepingLvl = javaEnchLvl != null && javaEnchLvl.getValue() instanceof Number lvl ? lvl.intValue() : 0; + + addSweeping(session, rootTag, sweepingLvl); + return null; + } + GeyserImpl.getInstance().getLogger().debug("Unknown Java enchantment while NBT item translating: " + javaEnchId.getValue()); + return null; + } + + Tag javaEnchLvl = tag.get("lvl"); + + CompoundTag bedrockTag = new CompoundTag(""); + bedrockTag.put(new ShortTag("id", (short) enchantment.ordinal())); + // If the tag cannot parse, Java Edition 1.18.2 sets to 0 + bedrockTag.put(new ShortTag("lvl", javaEnchLvl != null && javaEnchLvl.getValue() instanceof Number lvl ? lvl.shortValue() : (short) 0)); + return bedrockTag; + } + + private void addSweeping(GeyserSession session, CompoundTag itemTag, int level) { + CompoundTag displayTag = itemTag.get("display"); + if (displayTag == null) { + displayTag = new CompoundTag("display"); + itemTag.put(displayTag); + } + ListTag loreTag = displayTag.get("Lore"); + if (loreTag == null) { + loreTag = new ListTag("Lore"); + displayTag.put(loreTag); + } + + String sweepingTranslation = MinecraftLocale.getLocaleString("enchantment.minecraft.sweeping", session.locale()); + String lvlTranslation = MinecraftLocale.getLocaleString("enchantment.level." + level, session.locale()); + + loreTag.add(new StringTag("", ChatColor.RESET + ChatColor.GRAY + sweepingTranslation + " " + lvlTranslation)); + } + + /* Translation methods end */ + public ItemStack newItemStack(int count, CompoundTag tag) { return new ItemStack(this.javaId, count, tag); } public void setJavaId(int javaId) { // TODO like this? - if (this.javaId != -1) { // ID has already been set. - throw new RuntimeException(); + if (this.javaId != -1) { + throw new RuntimeException("Item ID has already been set!"); } this.javaId = javaId; } @@ -129,7 +276,6 @@ public class Item { private int stackSize = 64; private String toolType; private int maxDamage; - private boolean hasSuspiciousStewEffect; public Builder stackSize(int stackSize) { this.stackSize = stackSize; @@ -146,11 +292,6 @@ public class Item { return this; } - public Builder setHasSuspiciousStewEffect(boolean hasSuspiciousStewEffect) { - this.hasSuspiciousStewEffect = hasSuspiciousStewEffect; - return this; - } - private Builder() { } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java index 3add04498..1eca75513 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java @@ -25,8 +25,37 @@ package org.geysermc.geyser.item.type; +import com.github.steveice10.opennbt.tag.builtin.*; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.session.GeyserSession; + public class MapItem extends Item { public MapItem(String javaIdentifier, Builder builder) { super(javaIdentifier, builder); } + + @Override + public void translateNbtToBedrock(GeyserSession session, CompoundTag tag, ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + Tag mapId = tag.remove("map"); + if (mapId == null || !(mapId.getValue() instanceof Number number)) return; + + int mapValue = number.intValue(); + + tag.put(new LongTag("map_uuid", mapValue)); + tag.put(new IntTag("map_name_index", mapValue)); + tag.put(new ByteTag("map_display_players", (byte) 1)); + } + + @Override + public void translateNbtToJava(CompoundTag tag, ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); + + IntTag mapNameIndex = tag.remove("map_name_index"); + if (mapNameIndex != null) { + tag.put(new IntTag("map", mapNameIndex.getValue())); + tag.remove("map_uuid"); + } + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/PlayerHeadTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java similarity index 68% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/PlayerHeadTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java index f9256ba99..4e98894ec 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/PlayerHeadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,29 +23,31 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; -@ItemRemapper -public class PlayerHeadTranslator extends NbtItemStackTranslator { +public class PlayerHeadItem extends Item { + public PlayerHeadItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - if (!itemTag.contains("display") || !((CompoundTag) itemTag.get("display")).contains("Name")) { - if (itemTag.contains("SkullOwner")) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + Tag display = tag.get("display"); + if (!(display instanceof CompoundTag) || !((CompoundTag) display).contains("Name")) { + Tag skullOwner = tag.get("SkullOwner"); + if (skullOwner != null) { StringTag name; - Tag skullOwner = itemTag.get("SkullOwner"); if (skullOwner instanceof StringTag) { name = (StringTag) skullOwner; } else { @@ -53,23 +55,18 @@ public class PlayerHeadTranslator extends NbtItemStackTranslator { if (skullOwner instanceof CompoundTag && (skullName = ((CompoundTag) skullOwner).get("Name")) != null) { name = skullName; } else { - session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + itemTag); + session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + tag); return; } } // Add correct name of player skull // TODO: It's always yellow, even with a custom name. Handle? String displayName = ChatColor.RESET + ChatColor.YELLOW + MinecraftLocale.getLocaleString("block.minecraft.player_head.named", session.locale()).replace("%s", name.getValue()); - if (!itemTag.contains("display")) { - itemTag.put(new CompoundTag("display")); + if (!(display instanceof CompoundTag)) { + tag.put(display = new CompoundTag("display")); } - ((CompoundTag) itemTag.get("display")).put(new StringTag("Name", displayName)); + ((CompoundTag) display).put(new StringTag("Name", displayName)); } } } - - @Override - public boolean acceptItem(Item item) { - return item == Items.PLAYER_HEAD; - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BookPagesTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/ReadableBookItem.java similarity index 64% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BookPagesTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/ReadableBookItem.java index 652d804fe..a19b0f79b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BookPagesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ReadableBookItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,33 +23,39 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; import java.util.ArrayList; import java.util.List; -@ItemRemapper -public class BookPagesTranslator extends NbtItemStackTranslator { +/** + * Encapsulates written books and writable books. Customly named class to share common code. + */ +public class ReadableBookItem extends Item { + public ReadableBookItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - if (!itemTag.contains("pages")) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + + ListTag pagesTag = tag.remove("pages"); + if (pagesTag == null) { return; } List pages = new ArrayList<>(); - ListTag pagesTag = itemTag.get("pages"); - for (Tag tag : pagesTag.getValue()) { - if (!(tag instanceof StringTag textTag)) + for (Tag subTag : pagesTag.getValue()) { + if (!(subTag instanceof StringTag textTag)) continue; CompoundTag pageTag = new CompoundTag(""); @@ -58,25 +64,26 @@ public class BookPagesTranslator extends NbtItemStackTranslator { pages.add(pageTag); } - itemTag.remove("pages"); - itemTag.put(new ListTag("pages", pages)); + tag.put(new ListTag("pages", pages)); } @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - if (!itemTag.contains("pages")) { + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); + + if (!tag.contains("pages")) { return; } List pages = new ArrayList<>(); - ListTag pagesTag = itemTag.get("pages"); - for (Tag tag : pagesTag.getValue()) { - if (!(tag instanceof CompoundTag pageTag)) + ListTag pagesTag = tag.get("pages"); + for (Tag subTag : pagesTag.getValue()) { + if (!(subTag instanceof CompoundTag pageTag)) continue; StringTag textTag = pageTag.get("text"); pages.add(new StringTag("", textTag.getValue())); } - itemTag.remove("pages"); - itemTag.put(new ListTag("pages", pages)); + tag.remove("pages"); + tag.put(new ListTag("pages", pages)); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/ShulkerBoxItemTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java similarity index 76% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/ShulkerBoxItemTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java index c6f0bdf1c..1df33574a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/ShulkerBoxItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,26 +23,30 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.Identifier; import com.github.steveice10.opennbt.tag.builtin.*; -import org.geysermc.geyser.item.type.Item; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; import org.geysermc.geyser.translator.inventory.item.ItemTranslator; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; import org.geysermc.geyser.util.MathUtils; -@ItemRemapper -public class ShulkerBoxItemTranslator extends NbtItemStackTranslator { +public class ShulkerBoxItem extends BlockItem { + public ShulkerBoxItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - if (!itemTag.contains("BlockEntityTag")) return; // Empty shulker box + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); - CompoundTag blockEntityTag = itemTag.get("BlockEntityTag"); + CompoundTag blockEntityTag = tag.get("BlockEntityTag"); + if (blockEntityTag == null) { + // Empty shulker box + return; + } if (blockEntityTag.get("Items") == null) return; ListTag itemsList = new ListTag("Items"); for (Tag item : (ListTag) blockEntityTag.get("Items")) { @@ -72,21 +76,17 @@ public class ShulkerBoxItemTranslator extends NbtItemStackTranslator { itemsList.add(boxItemTag); } - itemTag.put(itemsList); + tag.put(itemsList); // Don't actually bother with removing the block entity tag. Too risky to translate // if the user is on creative and messing with a shulker box //itemTag.remove("BlockEntityTag"); } @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - if (itemTag.contains("Items")) { // Remove any extraneous Bedrock tag and don't touch the Java one - itemTag.remove("Items"); - } - } + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToJava(tag, mapping); - @Override - public boolean acceptItem(Item item) { - return item.javaIdentifier().contains("shulker_box"); + // Remove any extraneous Bedrock tag and don't touch the Java one + tag.remove("Items"); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/TropicalFishBucketTranslator.java b/core/src/main/java/org/geysermc/geyser/item/type/TropicalFishBucketItem.java similarity index 79% rename from core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/TropicalFishBucketTranslator.java rename to core/src/main/java/org/geysermc/geyser/item/type/TropicalFishBucketItem.java index 77fbdfebf..4004a56e3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/TropicalFishBucketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TropicalFishBucketItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,43 +23,44 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.inventory.item.nbt; +package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.*; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextDecoration; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.entity.type.living.animal.TropicalFishEntity; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.MinecraftLocale; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; import java.util.ArrayList; import java.util.List; -@ItemRemapper -public class TropicalFishBucketTranslator extends NbtItemStackTranslator { - +public class TropicalFishBucketItem extends Item { private static final Style LORE_STYLE = Style.style(NamedTextColor.GRAY, TextDecoration.ITALIC); + public TropicalFishBucketItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); + } + @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag, @NonNull ItemMapping mapping) { + super.translateNbtToBedrock(session, tag, mapping); + // Prevent name from appearing as "Bucket of" - itemTag.put(new ByteTag("AppendCustomName", (byte) 1)); - itemTag.put(new StringTag("CustomName", MinecraftLocale.getLocaleString("entity.minecraft.tropical_fish", session.locale()))); + tag.put(new ByteTag("AppendCustomName", (byte) 1)); + tag.put(new StringTag("CustomName", MinecraftLocale.getLocaleString("entity.minecraft.tropical_fish", session.locale()))); // Add Java's client side lore tag - Tag bucketVariantTag = itemTag.get("BucketVariantTag"); + Tag bucketVariantTag = tag.get("BucketVariantTag"); if (bucketVariantTag instanceof IntTag) { - CompoundTag displayTag = itemTag.get("display"); + CompoundTag displayTag = tag.get("display"); if (displayTag == null) { displayTag = new CompoundTag("display"); - itemTag.put(displayTag); + tag.put(displayTag); } List lore = new ArrayList<>(); @@ -90,9 +91,4 @@ public class TropicalFishBucketTranslator extends NbtItemStackTranslator { displayTag.put(new ListTag("Lore", lore)); } } - - @Override - public boolean acceptItem(Item item) { - return item == Items.TROPICAL_FISH_BUCKET; - } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index f32366ef2..8a6c927fd 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -149,7 +149,6 @@ public class CustomItemRegistryPopulator { .toolType(customItemData.toolType()) .toolTier(customItemData.toolTier()) .translationString(customItemData.translationString()) - .hasSuspiciousStewEffect(false) .customItemOptions(Collections.emptyList()) .javaItem(item) .build(); 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 a43b4ec50..bb048d954 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 @@ -138,7 +138,6 @@ public class ItemRegistryPopulator { Object2ObjectMap bedrockBlockIdOverrides = new Object2ObjectOpenHashMap<>(); Object2IntMap blacklistedIdentifiers = new Object2IntOpenHashMap<>(); - List boats = new ObjectArrayList<>(); List buckets = new ObjectArrayList<>(); List carpets = new ObjectArrayList<>(); @@ -339,7 +338,6 @@ public class ItemRegistryPopulator { .bedrockDefinition(definition) .bedrockData(mappingItem.getBedrockData()) .bedrockBlockDefinition(bedrockBlock) - .hasSuspiciousStewEffect(mappingItem.isHasSuspiciousStewEffect()) .javaItem(javaItem); if (mappingItem.getToolType() != null) { @@ -394,12 +392,9 @@ public class ItemRegistryPopulator { ItemMapping mapping = mappingBuilder.build(); - /* - if (javaIdentifier.contains("boat")) { - boats.add(definition); - } else if (javaIdentifier.contains("bucket") && !javaIdentifier.contains("milk")) { + if (javaItem.javaIdentifier().contains("bucket") && !javaItem.javaIdentifier().contains("milk")) { buckets.add(definition); - } else if (javaIdentifier.contains("_carpet") && !javaIdentifier.contains("moss")) { + } else if (javaItem.javaIdentifier().contains("_carpet") && !javaItem.javaIdentifier().contains("moss")) { // This should be the numerical order Java sends as an integer value for llamas carpets.add(ItemData.builder() .definition(definition) @@ -407,12 +402,11 @@ public class ItemRegistryPopulator { .count(1) .blockDefinition(mapping.getBedrockBlockDefinition()) .build()); - } else if (javaIdentifier.startsWith("minecraft:music_disc_")) { + } else if (javaItem.javaIdentifier().startsWith("minecraft:music_disc_")) { // The Java record level event uses the item ID as the "key" to play the record Registries.RECORDS.register(javaItem.javaId(), SoundEvent.valueOf("RECORD_" + - javaIdentifier.replace("minecraft:music_disc_", "").toUpperCase(Locale.ENGLISH))); + javaItem.javaIdentifier().replace("minecraft:music_disc_", "").toUpperCase(Locale.ENGLISH))); } - */ mappings.add(mapping); javaItemToMapping.put(javaItem, mapping); @@ -495,7 +489,6 @@ public class ItemRegistryPopulator { .storedItems(new StoredItemMappings(javaItemToMapping)) .javaOnlyItems(javaOnlyItems) .buckets(buckets) - .boats(boats) .carpets(carpets) .componentItemData(componentItemData) .lodestoneCompass(lodestoneEntry) diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java index 480d1095d..6576ea144 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java @@ -28,8 +28,6 @@ package org.geysermc.geyser.registry.type; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; -import java.util.List; - /** * Represents Geyser's own serialized item information before being processed per-version */ @@ -45,9 +43,6 @@ public class GeyserMappingItem { @JsonProperty("armor_type") String armorType; @JsonProperty("protection_value") int protectionValue; @JsonProperty("max_damage") int maxDamage = 0; - @JsonProperty("repair_materials") List repairMaterials; - @JsonProperty("has_suspicious_stew_effect") boolean hasSuspiciousStewEffect = false; - @JsonProperty("dye_color") int dyeColor = -1; @JsonProperty("is_edible") boolean edible = false; @JsonProperty("is_entity_placer") boolean entityPlacer = false; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java index f14b2112e..4883b5ec1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java @@ -52,7 +52,6 @@ public class ItemMapping { null, null, Collections.emptyList(), - false, Items.AIR ); @@ -74,8 +73,6 @@ public class ItemMapping { @NonNull List> customItemOptions; - boolean hasSuspiciousStewEffect; - @NonNull Item javaItem; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index ed0eaaa13..8fb98a284 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -46,9 +46,9 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.SlotType; import org.geysermc.geyser.inventory.updater.UIInventoryUpdater; +import org.geysermc.geyser.item.type.BannerItem; import org.geysermc.geyser.item.type.DyeItem; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.nbt.BannerTranslator; import java.util.Collections; import java.util.List; @@ -158,7 +158,7 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { inputCopy.setNbt(new CompoundTag("")); } CompoundTag blockEntityTag = inputCopy.getNbt().get("BlockEntityTag"); - CompoundTag javaBannerPattern = BannerTranslator.getJavaBannerPattern(pattern); + CompoundTag javaBannerPattern = BannerItem.getJavaBannerPattern(pattern); if (blockEntityTag != null) { ListTag patternsList = blockEntityTag.get("Patterns"); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 4277665fc..07f5c2aeb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -37,9 +37,7 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.data.defintions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.GeyserItemStack; -import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; @@ -49,44 +47,16 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.geyser.util.FileUtils; import javax.annotation.Nonnull; -import java.lang.reflect.InvocationTargetException; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; public final class ItemTranslator { - private static final List NBT_TRANSLATORS; - private ItemTranslator() { } - public static void init() { - // no-op - } - - static { - /* Load item translators */ - Map loadedNbtItemTranslators = new HashMap<>(); - for (Class clazz : FileUtils.getGeneratedClassesForAnnotation(ItemRemapper.class)) { - int priority = clazz.getAnnotation(ItemRemapper.class).priority(); - - GeyserImpl.getInstance().getLogger().debug("Found annotated item translator: " + clazz.getCanonicalName()); - - try { - if (NbtItemStackTranslator.class.isAssignableFrom(clazz)) { - NbtItemStackTranslator nbtItemTranslator = (NbtItemStackTranslator) clazz.getDeclaredConstructor().newInstance(); - loadedNbtItemTranslators.put(nbtItemTranslator, priority); - } - } catch (InstantiationException | InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { - GeyserImpl.getInstance().getLogger().error("Could not instantiate annotated item translator " + clazz.getCanonicalName()); - } - } - - NBT_TRANSLATORS = loadedNbtItemTranslators.keySet().stream().sorted(Comparator.comparingInt(loadedNbtItemTranslators::get)).collect(Collectors.toList()); - } - /** * @param mappings item mappings to use while translating. This can't just be a Geyser session as this method is used * when loading recipes. @@ -102,11 +72,7 @@ public final class ItemTranslator { ItemStack itemStack = javaItem.translateToJava(data, bedrockItem, mappings); if (itemStack != null && itemStack.getNbt() != null) { - for (NbtItemStackTranslator translator : NBT_TRANSLATORS) { - if (translator.acceptItem(javaItem)) { - translator.translateToJava(itemStack.getNbt(), bedrockItem); - } - } + javaItem.translateNbtToJava(itemStack.getNbt(), bedrockItem); if (itemStack.getNbt().isEmpty()) { // Otherwise, seems to cause issues with villagers accepting books, and I don't see how this will break anything else. - Camotoy itemStack = new ItemStack(itemStack.getId(), itemStack.getAmount(), null); @@ -145,18 +111,8 @@ public final class ItemTranslator { private static ItemData.Builder translateToBedrock(GeyserSession session, Item javaItem, ItemMapping bedrockItem, int count, CompoundTag tag) { CompoundTag nbt = tag != null ? tag.clone() : null; - // This is a fallback for maps with no nbt - if (nbt == null && javaItem == Items.FILLED_MAP) { - nbt = new CompoundTag(""); - nbt.put(new IntTag("map", 0)); - } - if (nbt != null) { - for (NbtItemStackTranslator translator : NBT_TRANSLATORS) { - if (translator.acceptItem(javaItem)) { - translator.translateToBedrock(session, nbt, bedrockItem); - } - } + javaItem.translateNbtToBedrock(session, nbt, bedrockItem); } nbt = translateDisplayProperties(session, nbt, bedrockItem); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BasicItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BasicItemTranslator.java deleted file mode 100644 index da2a77979..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/BasicItemTranslator.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.translator.inventory.item.nbt; - -import com.github.steveice10.opennbt.tag.builtin.*; -import org.geysermc.geyser.registry.type.ItemMapping; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; -import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.geyser.util.ItemUtils; - -import java.util.ArrayList; -import java.util.List; - -@ItemRemapper(priority = -1) -public class BasicItemTranslator extends NbtItemStackTranslator { - - @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - Tag damage = itemTag.get("Damage"); - if (damage instanceof IntTag) { - int originalDurability = ((IntTag) damage).getValue(); - int durability = ItemUtils.getCorrectBedrockDurability(mapping.getJavaItem(), originalDurability); - if (durability != originalDurability) { - // Fix damage tag inconsistencies - itemTag.put(new IntTag("Damage", durability)); - } - } - - if (!(itemTag.get("display") instanceof CompoundTag displayTag)) { - return; - } - - if (displayTag.get("Lore") instanceof ListTag listTag) { - List lore = new ArrayList<>(); - for (Tag tag : listTag.getValue()) { - if (!(tag instanceof StringTag)) continue; - lore.add(new StringTag("", MessageTranslator.convertMessageLenient(((StringTag) tag).getValue(), session.locale()))); - } - displayTag.put(new ListTag("Lore", lore)); - } - } - - @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - CompoundTag displayTag = itemTag.get("display"); - if (displayTag == null) { - return; - } - - if (displayTag.contains("Name")) { - StringTag nameTag = displayTag.get("Name"); - displayTag.put(new StringTag("Name", MessageTranslator.convertToJavaMessage(nameTag.getValue()))); - } - - if (displayTag.contains("Lore")) { - ListTag loreTag = displayTag.get("Lore"); - List lore = new ArrayList<>(); - for (Tag tag : loreTag.getValue()) { - if (!(tag instanceof StringTag)) continue; - lore.add(new StringTag("", MessageTranslator.convertToJavaMessage(((StringTag) tag).getValue()))); - } - displayTag.put(new ListTag("Lore", lore)); - } - } -} diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/EnchantmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/EnchantmentTranslator.java deleted file mode 100644 index 5a61b483d..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/EnchantmentTranslator.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.translator.inventory.item.nbt; - -import com.github.steveice10.mc.protocol.data.game.Identifier; -import com.github.steveice10.opennbt.tag.builtin.*; -import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.inventory.item.Enchantment; -import org.geysermc.geyser.registry.type.ItemMapping; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.text.ChatColor; -import org.geysermc.geyser.text.MinecraftLocale; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -@ItemRemapper -public class EnchantmentTranslator extends NbtItemStackTranslator { - - @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - List newTags = new ArrayList<>(); - Tag enchantmentTag = itemTag.remove("Enchantments"); - if (enchantmentTag instanceof ListTag listTag) { - for (Tag tag : listTag.getValue()) { - if (!(tag instanceof CompoundTag)) continue; - CompoundTag bedrockTag = remapEnchantment(session, (CompoundTag) tag, itemTag); - if (bedrockTag != null) { - newTags.add(bedrockTag); - } - } - } - - // TODO consolidate this into EnchantedBookTranslator - enchantmentTag = itemTag.remove("StoredEnchantments"); - if (enchantmentTag instanceof ListTag listTag) { - for (Tag tag : listTag.getValue()) { - if (!(tag instanceof CompoundTag)) continue; - CompoundTag bedrockTag = remapEnchantment(session, (CompoundTag) tag, itemTag); - if (bedrockTag != null) { - newTags.add(bedrockTag); - } - } - } - - if (!newTags.isEmpty()) { - itemTag.put(new ListTag("ench", newTags)); - } - } - - @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - if (!itemTag.contains("ench")) { - return; - } - - ListTag enchantmentTag = itemTag.get("ench"); - List enchantments = new ArrayList<>(); - List storedEnchantments = new ArrayList<>(); - for (Tag value : enchantmentTag.getValue()) { - if (!(value instanceof CompoundTag tagValue)) - continue; - - ShortTag bedrockId = tagValue.get("id"); - if (bedrockId == null) continue; - - ShortTag geyserStoredEnchantmentTag = tagValue.get("GeyserStoredEnchantment"); - - Enchantment enchantment = Enchantment.getByBedrockId(bedrockId.getValue()); - if (enchantment != null) { - CompoundTag javaTag = new CompoundTag(""); - Map javaValue = javaTag.getValue(); - javaValue.put("id", new StringTag("id", enchantment.getJavaIdentifier())); - ShortTag levelTag = tagValue.get("lvl"); - javaValue.put("lvl", new IntTag("lvl", levelTag != null ? levelTag.getValue() : 1)); - javaTag.setValue(javaValue); - - if (geyserStoredEnchantmentTag != null) { - tagValue.remove("GeyserStoredEnchantment"); - storedEnchantments.add(javaTag); - } else { - enchantments.add(javaTag); - } - } else { - GeyserImpl.getInstance().getLogger().debug("Unknown bedrock enchantment: " + bedrockId); - } - } - if (!enchantments.isEmpty()) { - itemTag.put(new ListTag("Enchantments", enchantments)); - } - if (!storedEnchantments.isEmpty()) { - itemTag.put(new ListTag("StoredEnchantments", storedEnchantments)); - } - itemTag.remove("ench"); - } - - - private CompoundTag remapEnchantment(GeyserSession session, CompoundTag tag, CompoundTag rootTag) { - Tag javaEnchId = tag.get("id"); - if (!(javaEnchId instanceof StringTag)) - return null; - - Enchantment enchantment = Enchantment.getByJavaIdentifier(((StringTag) javaEnchId).getValue()); - if (enchantment == null) { - if (Identifier.formalize((String) javaEnchId.getValue()).equals("minecraft:sweeping")) { - Tag javaEnchLvl = tag.get("lvl"); - int sweepingLvl = javaEnchLvl != null && javaEnchLvl.getValue() instanceof Number lvl ? lvl.intValue() : 0; - - addSweeping(session, rootTag, sweepingLvl); - return null; - } - GeyserImpl.getInstance().getLogger().debug("Unknown Java enchantment while NBT item translating: " + javaEnchId.getValue()); - return null; - } - - Tag javaEnchLvl = tag.get("lvl"); - - CompoundTag bedrockTag = new CompoundTag(""); - bedrockTag.put(new ShortTag("id", (short) enchantment.ordinal())); - // If the tag cannot parse, Java Edition 1.18.2 sets to 0 - bedrockTag.put(new ShortTag("lvl", javaEnchLvl != null && javaEnchLvl.getValue() instanceof Number lvl ? lvl.shortValue() : (short) 0)); - return bedrockTag; - } - - private void addSweeping(GeyserSession session, CompoundTag itemTag, int level) { - CompoundTag displayTag = itemTag.get("display"); - if (displayTag == null) { - displayTag = new CompoundTag("display"); - itemTag.put(displayTag); - } - ListTag loreTag = displayTag.get("Lore"); - if (loreTag == null) { - loreTag = new ListTag("Lore"); - displayTag.put(loreTag); - } - - String sweepingTranslation = MinecraftLocale.getLocaleString("enchantment.minecraft.sweeping", session.locale()); - String lvlTranslation = MinecraftLocale.getLocaleString("enchantment.level." + level, session.locale()); - - loreTag.add(new StringTag("", ChatColor.RESET + ChatColor.GRAY + sweepingTranslation + " " + lvlTranslation)); - } -} \ No newline at end of file diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkRocketTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkRocketTranslator.java deleted file mode 100644 index 8b686f5ec..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/FireworkRocketTranslator.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.translator.inventory.item.nbt; - -import com.github.steveice10.opennbt.tag.builtin.ByteTag; -import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import com.github.steveice10.opennbt.tag.builtin.ListTag; -import com.github.steveice10.opennbt.tag.builtin.Tag; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.type.ItemMapping; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.util.MathUtils; - -@ItemRemapper -public class FireworkRocketTranslator extends FireworkBaseTranslator { - - @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - CompoundTag fireworks = itemTag.get("Fireworks"); - if (fireworks == null) { - return; - } - - if (fireworks.get("Flight") != null) { - fireworks.put(new ByteTag("Flight", MathUtils.getNbtByte(fireworks.get("Flight").getValue()))); - } - - ListTag explosions = fireworks.get("Explosions"); - if (explosions == null) { - return; - } - for (Tag effect : explosions.getValue()) { - CompoundTag effectData = (CompoundTag) effect; - CompoundTag newEffectData = translateExplosionToBedrock(effectData, ""); - - explosions.remove(effectData); - explosions.add(newEffectData); - } - } - - @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - CompoundTag fireworks = itemTag.get("Fireworks"); - if (fireworks == null) { - return; - } - - if (fireworks.contains("Flight")) { - fireworks.put(new ByteTag("Flight", MathUtils.getNbtByte(fireworks.get("Flight").getValue()))); - } - - ListTag explosions = fireworks.get("Explosions"); - if (explosions == null) { - return; - } - for (Tag effect : explosions.getValue()) { - CompoundTag effectData = (CompoundTag) effect; - CompoundTag newEffectData = translateExplosionToJava(effectData, ""); - - explosions.remove(effect); - explosions.add(newEffectData); - } - } - - @Override - public boolean acceptItem(Item item) { - return item == Items.FIREWORK_ROCKET; - } -} diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/MapItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/MapItemTranslator.java deleted file mode 100644 index 08b539167..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/MapItemTranslator.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.translator.inventory.item.nbt; - -import com.github.steveice10.opennbt.tag.builtin.*; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.type.ItemMapping; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.inventory.item.ItemRemapper; -import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; - -@ItemRemapper -public class MapItemTranslator extends NbtItemStackTranslator { - - @Override - public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - // Can be either an IntTag or ShortTag - Tag mapId = itemTag.get("map"); - if (mapId == null) return; - - int mapValue; - if (mapId.getValue() instanceof Short) { - // Convert to int if necessary - mapValue = (int) (short) mapId.getValue(); - } else { - mapValue = (int) mapId.getValue(); - } - - itemTag.put(new LongTag("map_uuid", mapValue)); - itemTag.put(new IntTag("map_name_index", mapValue)); - itemTag.put(new ByteTag("map_display_players", (byte) 1)); - itemTag.remove("map"); - } - - @Override - public void translateToJava(CompoundTag itemTag, ItemMapping mapping) { - IntTag tag = itemTag.get("map_name_index"); - if (tag != null) { - itemTag.put(new IntTag("map", tag.getValue())); - itemTag.remove("map_name_index"); - itemTag.remove("map_uuid"); - } - } - - @Override - public boolean acceptItem(Item item) { - return item == Items.FILLED_MAP; - } -} diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java index 56602856e..f23433bbe 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java @@ -30,8 +30,8 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import org.cloudburstmc.nbt.NbtMapBuilder; +import org.geysermc.geyser.item.type.BannerItem; import org.geysermc.geyser.level.block.BlockStateValues; -import org.geysermc.geyser.translator.inventory.item.nbt.BannerTranslator; @BlockEntity(type = BlockEntityType.BANNER) public class BannerBlockEntityTranslator extends BlockEntityTranslator implements RequiresBlockState { @@ -47,12 +47,12 @@ public class BannerBlockEntityTranslator extends BlockEntityTranslator implement } if (tag.get("Patterns") instanceof ListTag patterns) { - if (patterns.equals(BannerTranslator.OMINOUS_BANNER_PATTERN)) { + if (patterns.equals(BannerItem.OMINOUS_BANNER_PATTERN)) { // This is an ominous banner; don't try to translate the raw patterns (it doesn't translate correctly) // and tell the Bedrock client that this is an ominous banner builder.putInt("Type", 1); } else { - builder.put("Patterns", BannerTranslator.convertBannerPattern(patterns)); + builder.put("Patterns", BannerItem.convertBannerPattern(patterns)); } } 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 3977b6476..303fdb13a 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 @@ -57,10 +57,12 @@ import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.geyser.inventory.click.Click; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.BlockItem; +import org.geysermc.geyser.item.type.BoatItem; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.item.type.SpawnEggItem; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.InventoryTranslator; @@ -274,15 +276,14 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator 1) { - if (packet.getItemInHand().getDefinition() == session.getItemMappings().getStoredItems().bucket().getBedrockDefinition() || - packet.getItemInHand().getDefinition() == session.getItemMappings().getStoredItems().glassBottle().getBedrockDefinition()) { + GeyserItemStack itemStack = playerInventory.getItem(heldItemSlot); + if (itemStack.getAmount() > 1) { + if (itemStack.asItem() == Items.BUCKET || itemStack.asItem() == 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/util/EntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java index 88a100955..a6e0720b6 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -38,7 +38,6 @@ import org.geysermc.geyser.entity.type.living.ArmorStandEntity; import org.geysermc.geyser.entity.type.living.animal.AnimalEntity; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.session.GeyserSession; import java.util.Locale; @@ -217,7 +216,7 @@ public final class EntityUtils { /** * Determine if an action would result in a successful bucketing of the given entity. */ - public static boolean attemptToBucket(GeyserSession session, GeyserItemStack itemInHand) { + public static boolean attemptToBucket(GeyserItemStack itemInHand) { return itemInHand.asItem() == Items.WATER_BUCKET; } diff --git a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java index d44d16024..c528de741 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java @@ -30,6 +30,7 @@ import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.FishingRodItem; import org.geysermc.geyser.item.type.Item; import javax.annotation.Nullable; @@ -64,7 +65,7 @@ public class ItemUtils { // Java durability: 64 // Bedrock durability : 384 // 384 / 64 = 6 - return original * 6; + return FishingRodItem.getBedrockDamage(original); } return original; }