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<Item, ItemMapping> 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<Item> repairIngredient;
 
-    ArmorMaterial(Item repairIngredient) {
+    ArmorMaterial(Supplier<Item> 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<Item> 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<Item> 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<Tag> 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<Tag> 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<Tag> 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. <br />
+     * Do note that this method is, these days, only called in three places (as of 2023/~1.19):
+     * <ul>
+     *     <li>Extra recipe loading</li>
+     *     <li>Creative menu</li>
+     *     <li>Stonecutters</li>
+     * </ul>
+     * 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<Tag> 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<Tag> 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<String, Tag> 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<Tag> 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<Tag> 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<Tag> 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<String, BlockDefinition> bedrockBlockIdOverrides = new Object2ObjectOpenHashMap<>();
             Object2IntMap<String> blacklistedIdentifiers = new Object2IntOpenHashMap<>();
 
-            List<ItemDefinition> boats = new ObjectArrayList<>();
             List<ItemDefinition> buckets = new ObjectArrayList<>();
             List<ItemData> 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<String> 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<Pair<CustomItemOptions, ItemDefinition>> 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<NbtItemStackTranslator> NBT_TRANSLATORS;
-
     private ItemTranslator() {
     }
 
-    public static void init() {
-        // no-op
-    }
-
-    static {
-        /* Load item translators */
-        Map<NbtItemStackTranslator, Integer> 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<Tag> 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<Tag> 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<Tag> 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<Tag> enchantments = new ArrayList<>();
-        List<Tag> 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<String, Tag> 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<Inve
                                 session.getWorldCache().nextPredictionSequence());
                         session.sendDownstreamPacket(blockPacket);
 
+                        Item item = session.getPlayerInventory().getItemInHand().asItem();
                         if (packet.getItemInHand() != null) {
                             ItemDefinition definition = packet.getItemInHand().getDefinition();
                             int blockState = session.getGeyser().getWorldManager().getBlockAt(session, packet.getBlockPosition());
                             // Otherwise boats will not be able to be placed in survival and buckets, lily pads, frogspawn, and glass bottles won't work on mobile
-                            if (session.getItemMappings().getBoats().contains(definition) ||
-                                    definition == session.getItemMappings().getStoredItems().lilyPad().getBedrockDefinition() ||
-                                    definition == session.getItemMappings().getStoredItems().frogspawn().getBedrockDefinition()) {
+                            if (item instanceof BoatItem || item == Items.LILY_PAD || item == Items.FROGSPAWN) {
                                 useItem(session, packet, blockState);
-                            } else if (definition == session.getItemMappings().getStoredItems().glassBottle().getBedrockDefinition()) {
+                            } else if (item == Items.GLASS_BOTTLE) {
                                 if (!session.isSneaking() && BlockStateValues.isCauldron(blockState) && !BlockStateValues.isNonWaterCauldron(blockState)) {
                                     // ServerboundUseItemPacket is not sent for water cauldrons and glass bottles
                                     return;
@@ -315,10 +316,9 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
                                 }
                             }
                         }
-                        ItemMapping handItem = session.getPlayerInventory().getItemInHand().getMapping(session);
-                        if (handItem.isBlock()) {
+                        if (item instanceof BlockItem) {
                             session.setLastBlockPlacePosition(blockPos);
-                            session.setLastBlockPlacedId(handItem.getJavaItem().javaIdentifier());
+                            session.setLastBlockPlacedId(item.javaIdentifier());
                         }
                         session.setInteracting(true);
                     }
@@ -526,9 +526,9 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
         Inventory playerInventory = session.getPlayerInventory();
         int heldItemSlot = playerInventory.getOffsetForHotbar(packet.getHotbarSlot());
         InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, playerInventory, heldItemSlot);
-        if (playerInventory.getItem(heldItemSlot).getAmount() > 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;
     }