From 784a343c79f4000cd538f5f24cd7197ee44d1e69 Mon Sep 17 00:00:00 2001
From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
Date: Mon, 6 Jan 2025 13:23:46 +0100
Subject: [PATCH] Generators

---
 .editorconfig                                 |    4 +-
 .gitignore                                    |    2 +-
 paper-api-generator/build.gradle.kts          |   37 -
 .../java/io/papermc/generator/Generators.java |   96 -
 .../main/java/io/papermc/generator/Main.java  |   93 -
 .../generator/types/GeneratedKeyType.java     |  204 -
 .../generator/types/GeneratedTagKeyType.java  |  138 -
 .../papermc/generator/utils/Annotations.java  |   65 -
 .../papermc/generator/utils/Formatting.java   |   59 -
 .../io/papermc/generator/utils/Javadocs.java  |   27 -
 .../papermc/generator/utils/TagCollector.java |   79 -
 paper-api/build.gradle.kts                    |   28 +-
 .../paper/entity/ai/VanillaGoal.java          |    2 +-
 .../paper/registry/keys/AttributeKeys.java    |    2 +-
 .../registry/keys/BannerPatternKeys.java      |    4 +-
 .../paper/registry/keys/BiomeKeys.java        |    4 +-
 .../paper/registry/keys/BlockTypeKeys.java    |    2 +-
 .../paper/registry/keys/CatVariantKeys.java   |    2 +-
 .../paper/registry/keys/DamageTypeKeys.java   |    4 +-
 .../registry/keys/DataComponentTypeKeys.java  |  503 ++
 .../paper/registry/keys/EnchantmentKeys.java  |    4 +-
 .../paper/registry/keys/FluidKeys.java        |    2 +-
 .../paper/registry/keys/FrogVariantKeys.java  |    2 +-
 .../paper/registry/keys/GameEventKeys.java    |    4 +-
 .../paper/registry/keys/InstrumentKeys.java   |    4 +-
 .../paper/registry/keys/ItemTypeKeys.java     |    2 +-
 .../paper/registry/keys/JukeboxSongKeys.java  |    4 +-
 .../registry/keys/MapDecorationTypeKeys.java  |    2 +-
 .../paper/registry/keys/MenuTypeKeys.java     |    2 +-
 .../paper/registry/keys/MobEffectKeys.java    |    2 +-
 .../registry/keys/PaintingVariantKeys.java    |    4 +-
 .../paper/registry/keys/SoundEventKeys.java   |    2 +-
 .../paper/registry/keys/StructureKeys.java    |    4 +-
 .../registry/keys/StructureTypeKeys.java      |    2 +-
 .../paper/registry/keys/TrimMaterialKeys.java |    4 +-
 .../paper/registry/keys/TrimPatternKeys.java  |    4 +-
 .../registry/keys/VillagerProfessionKeys.java |    2 +-
 .../paper/registry/keys/VillagerTypeKeys.java |    2 +-
 .../paper/registry/keys/WolfVariantKeys.java  |    4 +-
 .../keys/tags/BannerPatternTagKeys.java       |    4 +-
 .../registry/keys/tags/BiomeTagKeys.java      |    4 +-
 .../registry/keys/tags/BlockTypeTagKeys.java  |    4 +-
 .../registry/keys/tags/CatVariantTagKeys.java |    4 +-
 .../registry/keys/tags/DamageTypeTagKeys.java |    4 +-
 .../keys/tags/EnchantmentTagKeys.java         |    4 +-
 .../registry/keys/tags/EntityTypeTagKeys.java |    4 +-
 .../registry/keys/tags/FluidTagKeys.java      |    4 +-
 .../registry/keys/tags/GameEventTagKeys.java  |    4 +-
 .../registry/keys/tags/InstrumentTagKeys.java |    4 +-
 .../registry/keys/tags/ItemTypeTagKeys.java   |    4 +-
 .../keys/tags/PaintingVariantTagKeys.java     |    4 +-
 .../registry/keys/tags/StructureTagKeys.java  |    4 +-
 .../datacomponent/DataComponentTypes.java     |  425 +-
 .../item/consumable/ItemUseAnimation.java     |    5 +-
 .../paper/registry/event/RegistryEvents.java  |    9 +-
 paper-api/src/main/java/org/bukkit/Art.java   |  118 +-
 .../src/main/java/org/bukkit/FeatureFlag.java |   41 +-
 paper-api/src/main/java/org/bukkit/Fluid.java |   28 +-
 .../src/main/java/org/bukkit/GameEvent.java   |  230 +-
 .../src/main/java/org/bukkit/JukeboxSong.java |   59 +-
 .../src/main/java/org/bukkit/Material.java    | 5296 +++++-----------
 .../main/java/org/bukkit/MusicInstrument.java |   20 +-
 .../src/main/java/org/bukkit/Registry.java    |    6 +-
 paper-api/src/main/java/org/bukkit/Sound.java | 2077 ++++++-
 .../src/main/java/org/bukkit/Statistic.java   |  145 +-
 paper-api/src/main/java/org/bukkit/Tag.java   | 2194 +++----
 .../java/org/bukkit/attribute/Attribute.java  |  182 +-
 .../src/main/java/org/bukkit/block/Biome.java |  189 +-
 .../main/java/org/bukkit/block/BlockType.java | 5406 +++++++----------
 .../java/org/bukkit/block/Orientation.java    |   20 +
 .../org/bukkit/block/banner/PatternType.java  |  122 +-
 .../block/data/type/CaveVinesPlant.java       |   13 +-
 .../org/bukkit/block/data/type/Crafter.java   |    9 +-
 .../bukkit/block/data/type/DecoratedPot.java  |   19 +-
 .../org/bukkit/block/data/type/Jigsaw.java    |    9 +-
 .../org/bukkit/block/data/type/Jukebox.java   |    7 +
 .../org/bukkit/block/data/type/Lectern.java   |    7 +
 .../bukkit/block/data/type/MossyCarpet.java   |    9 +-
 .../bukkit/block/data/type/SculkSensor.java   |   27 +-
 .../org/bukkit/block/data/type/Switch.java    |   13 +-
 .../org/bukkit/block/data/type/Vault.java     |    8 +-
 .../java/org/bukkit/damage/DamageType.java    |  149 +-
 .../enchantments/EnchantmentTarget.java       |    3 +
 .../src/main/java/org/bukkit/entity/Boat.java |    5 +-
 .../src/main/java/org/bukkit/entity/Cat.java  |   33 +-
 .../java/org/bukkit/entity/EntityType.java    |  409 +-
 .../src/main/java/org/bukkit/entity/Fox.java  |    3 +
 .../src/main/java/org/bukkit/entity/Frog.java |   18 +-
 .../main/java/org/bukkit/entity/Panda.java    |    3 +
 .../main/java/org/bukkit/entity/Salmon.java   |   12 +-
 .../main/java/org/bukkit/entity/Sniffer.java  |    3 +
 .../java/org/bukkit/entity/TropicalFish.java  |    3 +
 .../main/java/org/bukkit/entity/Villager.java |   28 +-
 .../src/main/java/org/bukkit/entity/Wolf.java |   23 +-
 .../org/bukkit/entity/memory/MemoryKey.java   |  107 +-
 .../bukkit/generator/structure/Structure.java |   98 +-
 .../generator/structure/StructureType.java    |   18 +
 .../java/org/bukkit/inventory/ItemRarity.java |   34 +-
 .../java/org/bukkit/inventory/ItemType.java   | 4882 ++++++++-------
 .../inventory/meta/trim/TrimMaterial.java     |   69 +-
 .../inventory/meta/trim/TrimPattern.java      |  110 +-
 .../inventory/recipe/CookingBookCategory.java |    3 +
 .../recipe/CraftingBookCategory.java          |    3 +
 .../main/java/org/bukkit/map/MapCursor.java   |  122 +-
 .../main/java/org/bukkit/map/MapPalette.java  |  327 +-
 .../java/org/bukkit/potion/PotionType.java    |   78 +-
 .../org/bukkit/scoreboard/DisplaySlot.java    |   44 +-
 .../java/org/bukkit/tag/DamageTypeTags.java   |  200 +-
 .../java/org/bukkit/BukkitMirrorTest.java     |   60 -
 .../java/org/bukkit/NamespacedKeyTest.java    |   14 -
 .../ConfigurationSectionTest.java             |   40 -
 .../bukkit/entity/memory/MemoryKeyTest.java   |   41 -
 paper-generator/.editorconfig                 |    3 +
 paper-generator/build.gradle.kts              |  129 +
 .../java/io/papermc/generator/Generators.java |   23 +
 .../main/java/io/papermc/generator/Main.java  |  117 +
 .../java/io/papermc/generator/Rewriters.java  |  217 +
 .../registry/RegistryBootstrapper.java        |   45 +
 .../generator/registry/RegistryEntries.java   |  204 +
 .../generator/registry/RegistryEntry.java     |  214 +
 .../generator/registry/RegistryKeyField.java  |    7 +
 .../PaperPatternSourceSetRewriter.java        |   75 +
 .../PatternSourceSetRewriter.java             |   23 +
 .../rewriter/registration/RewriterHolder.java |   27 +
 .../generator/rewriter/types/Types.java       |   28 +
 .../types/registry/EnumRegistryRewriter.java  |   82 +
 .../types/registry/FeatureFlagRewriter.java   |   61 +
 .../registry/PaperFeatureFlagMapping.java     |   30 +
 .../registry/PaperRegistriesRewriter.java     |   94 +
 .../registry/RegistryEventsRewriter.java      |   33 +
 .../types/registry/RegistryFieldRewriter.java |  135 +
 .../types/registry/RegistryTagRewriter.java   |   92 +
 .../rewriter/types/registry/TagRewriter.java  |   91 +
 .../types/simple/BlockTypeRewriter.java       |   27 +
 .../types/simple/CraftBlockDataMapping.java   |   19 +
 .../simple/CraftBlockEntityStateMapping.java  |   21 +
 .../types/simple/CraftPotionUtilRewriter.java |   32 +
 .../types/simple/EntityTypeRewriter.java      |  176 +
 .../types/simple/ItemTypeRewriter.java        |   27 +
 .../types/simple/MapPaletteRewriter.java      |   41 +
 .../types/simple/MaterialRewriter.java        |  111 +
 .../types/simple/MemoryKeyRewriter.java       |  116 +
 .../types/simple/StatisticRewriter.java       |  170 +
 .../rewriter/types/simple/package-info.java   |    4 +
 .../trial/DataComponentTypesRewriter.java     |  261 +
 .../types/simple/trial/ProtoConstant.java     |   30 +
 .../trial/VillagerProfessionRewriter.java     |  101 +
 .../types/simple/trial/package-info.java      |    6 +
 .../generator/rewriter/utils/Annotations.java |   48 +
 .../utils/ScanOldGeneratedSourceCode.java     |  109 +
 .../types/OverriddenClassGenerator.java       |   46 +
 .../generator/types/SimpleEnumGenerator.java  |   30 +
 .../generator/types/SimpleGenerator.java      |   12 +-
 .../generator/types/SourceGenerator.java      |    2 +
 .../io/papermc/generator/types/Types.java     |   14 +
 .../CraftBlockDataBootstrapper.java           |   23 +
 .../CraftBlockDataGenerator.java              |  243 +
 .../property/EnumPropertyWriter.java          |   46 +
 .../property/IntegerPropertyWriter.java       |   44 +
 .../property/PropertyMaker.java               |   25 +
 .../property/PropertyWriter.java              |   88 +
 .../property/appender/AppenderBase.java       |   13 +
 .../property/appender/EnumValuesAppender.java |   45 +
 .../property/appender/PropertyAppender.java   |   12 +
 .../property/appender/PropertyAppenders.java  |   33 +
 .../property/converter/Converter.java         |   13 +
 .../property/converter/ConverterBase.java     |   24 +
 .../property/converter/Converters.java        |   25 +
 .../property/converter/NoteConverter.java     |   37 +
 .../property/converter/RotationConverter.java |   45 +
 .../property/holder/DataHolderType.java       |    7 +
 .../property/holder/DataPropertyMaker.java    |   31 +
 .../property/holder/DataPropertyWriter.java   |  162 +
 .../holder/DataPropertyWriterBase.java        |   66 +
 .../holder/VirtualDataPropertyWriter.java     |   99 +
 .../property/holder/VirtualField.java         |   72 +
 .../holder/appender/ArrayAppender.java        |   54 +
 .../holder/appender/DataAppender.java         |   18 +
 .../holder/appender/DataAppenders.java        |   24 +
 .../holder/appender/ListAppender.java         |   61 +
 .../property/holder/appender/MapAppender.java |   58 +
 .../holder/converter/ArrayConverter.java      |   32 +
 .../holder/converter/DataConverter.java       |   18 +
 .../holder/converter/DataConverters.java      |   25 +
 .../holder/converter/ListConverter.java       |   32 +
 .../holder/converter/MapConverter.java        |   45 +
 .../types/goal/MobGoalGenerator.java          |   45 +-
 .../generator/types/goal/MobGoalNames.java    |  285 +-
 .../types/registry/GeneratedKeyType.java      |  133 +
 .../types/registry/GeneratedTagKeyType.java   |  103 +
 .../papermc/generator/utils/Annotations.java  |   48 +
 .../generator/utils/BlockEntityMapping.java   |   37 +
 .../generator/utils/BlockStateMapping.java    |  504 ++
 .../papermc/generator/utils/ClassHelper.java  |   72 +
 .../generator/utils/CommonVariable.java       |   10 +
 .../papermc/generator/utils/Formatting.java   |  111 +
 .../io/papermc/generator/utils/Javadocs.java  |   44 +
 .../generator/utils/NamingManager.java        |  141 +
 .../experimental}/CollectingContext.java      |   17 +-
 .../experimental/ExperimentalCollector.java   |  132 +
 .../utils/experimental/FlagHolder.java        |   16 +
 .../utils/experimental/FlagHolders.java       |   24 +
 .../utils/experimental/SingleFlagHolder.java  |   49 +
 .../generator/BlockStatePropertyTest.java     |   74 +
 .../generator/MobGoalConverterTest.java       |   12 +-
 .../generator/RegistryMigrationTest.java      |   50 +
 .../wideners.at                               |    6 +-
 paper-server/build.gradle.kts                 |   63 +-
 .../world/entity/ai/goal/Goal.java.patch      |   10 +-
 .../block/impl/CraftAmethystCluster.java      |   51 +
 .../craftbukkit/block/impl/CraftAnvil.java    |   38 +
 .../block/impl/CraftAttachedStem.java         |   38 +
 .../block/impl/CraftBambooStalk.java          |   65 +
 .../craftbukkit/block/impl/CraftBanner.java   |   35 +
 .../craftbukkit/block/impl/CraftBarrel.java   |   51 +
 .../craftbukkit/block/impl/CraftBarrier.java  |   27 +
 .../block/impl/CraftBaseCoralFan.java         |   27 +
 .../block/impl/CraftBaseCoralPlant.java       |   27 +
 .../block/impl/CraftBaseCoralWallFan.java     |   51 +
 .../craftbukkit/block/impl/CraftBed.java      |   65 +
 .../craftbukkit/block/impl/CraftBeehive.java  |   56 +
 .../craftbukkit/block/impl/CraftBeetroot.java |   32 +
 .../craftbukkit/block/impl/CraftBell.java     |   65 +
 .../block/impl/CraftBigDripleaf.java          |   65 +
 .../block/impl/CraftBigDripleafStem.java      |   52 +
 .../block/impl/CraftBlastFurnace.java         |   51 +
 .../block/impl/CraftBrewingStand.java         |   45 +
 .../block/impl/CraftBrushable.java            |   32 +
 .../block/impl/CraftBubbleColumn.java         |   27 +
 .../craftbukkit/block/impl/CraftButton.java   |   66 +
 .../craftbukkit/block/impl/CraftCactus.java   |   32 +
 .../craftbukkit/block/impl/CraftCake.java     |   32 +
 .../impl/CraftCalibratedSculkSensor.java      |   83 +
 .../craftbukkit/block/impl/CraftCampfire.java |   75 +
 .../craftbukkit/block/impl/CraftCandle.java   |   62 +
 .../block/impl/CraftCandleCake.java           |   27 +
 .../craftbukkit/block/impl/CraftCarrot.java   |   32 +
 .../block/impl/CraftCarvedPumpkin.java        |   38 +
 .../block/impl/CraftCaveVines.java            |   45 +
 .../block/impl/CraftCaveVinesPlant.java       |   27 +
 .../block/impl/CraftCeilingHangingSign.java   |   60 +
 .../craftbukkit/block/impl/CraftChain.java    |   50 +
 .../craftbukkit/block/impl/CraftChest.java    |   65 +
 .../block/impl/CraftChiseledBookShelf.java    |   70 +
 .../block/impl/CraftChorusFlower.java         |   32 +
 .../block/impl/CraftChorusPlant.java          |   58 +
 .../craftbukkit/block/impl/CraftCocoa.java    |   56 +
 .../block/impl/CraftCommandBlock.java         |   50 +
 .../block/impl/CraftComparator.java           |   65 +
 .../block/impl/CraftComposter.java            |   37 +
 .../craftbukkit/block/impl/CraftConduit.java  |   27 +
 .../block/impl/CraftCopperBulb.java           |   39 +
 .../craftbukkit/block/impl/CraftCoralFan.java |   27 +
 .../block/impl/CraftCoralPlant.java           |   27 +
 .../block/impl/CraftCoralWallFan.java         |   51 +
 .../craftbukkit/block/impl/CraftCrafter.java  |   56 +
 .../block/impl/CraftCreakingHeart.java        |   62 +
 .../craftbukkit/block/impl/CraftCrop.java     |   32 +
 .../block/impl/CraftDaylightDetector.java     |   45 +
 .../block/impl/CraftDecoratedPot.java         |   64 +
 .../block/impl/CraftDetectorRail.java         |   62 +
 .../block/impl/CraftDispenser.java            |   51 +
 .../craftbukkit/block/impl/CraftDoor.java     |   91 +
 .../block/impl/CraftDoublePlant.java          |   30 +
 .../craftbukkit/block/impl/CraftDropper.java  |   51 +
 .../block/impl/CraftEndPortalFrame.java       |   51 +
 .../craftbukkit/block/impl/CraftEndRod.java   |   38 +
 .../block/impl/CraftEnderChest.java           |   51 +
 .../craftbukkit/block/impl/CraftFarm.java     |   32 +
 .../craftbukkit/block/impl/CraftFence.java    |   73 +
 .../block/impl/CraftFenceGate.java            |   75 +
 .../craftbukkit/block/impl/CraftFire.java     |   80 +
 .../block/impl/CraftFrostedIce.java           |   32 +
 .../craftbukkit/block/impl/CraftFurnace.java  |   51 +
 .../block/impl/CraftGlazedTerracotta.java     |   38 +
 .../block/impl/CraftGlowLichen.java           |   76 +
 .../craftbukkit/block/impl/CraftGrass.java    |   27 +
 .../block/impl/CraftGrindstone.java           |   53 +
 .../block/impl/CraftHangingMoss.java          |   27 +
 .../block/impl/CraftHangingRoots.java         |   27 +
 .../craftbukkit/block/impl/CraftHay.java      |   37 +
 .../block/impl/CraftHeavyCore.java            |   27 +
 .../craftbukkit/block/impl/CraftHopper.java   |   51 +
 .../block/impl/CraftHugeMushroom.java         |   63 +
 .../impl/CraftInfestedRotatedPillar.java      |   37 +
 .../craftbukkit/block/impl/CraftIronBars.java |   73 +
 .../craftbukkit/block/impl/CraftJigsaw.java   |   30 +
 .../craftbukkit/block/impl/CraftJukebox.java  |   27 +
 .../craftbukkit/block/impl/CraftKelp.java     |   32 +
 .../craftbukkit/block/impl/CraftLadder.java   |   51 +
 .../craftbukkit/block/impl/CraftLantern.java  |   39 +
 .../block/impl/CraftLayeredCauldron.java      |   37 +
 .../craftbukkit/block/impl/CraftLeaves.java   |   62 +
 .../craftbukkit/block/impl/CraftLectern.java  |   63 +
 .../craftbukkit/block/impl/CraftLever.java    |   66 +
 .../craftbukkit/block/impl/CraftLight.java    |   50 +
 .../block/impl/CraftLightningRod.java         |   63 +
 .../craftbukkit/block/impl/CraftLiquid.java   |   37 +
 .../craftbukkit/block/impl/CraftLoom.java     |   38 +
 .../block/impl/CraftMangroveLeaves.java       |   62 +
 .../block/impl/CraftMangrovePropagule.java    |   75 +
 .../block/impl/CraftMangroveRoots.java        |   27 +
 .../block/impl/CraftMossyCarpet.java          |   65 +
 .../block/impl/CraftMovingPiston.java         |   52 +
 .../block/impl/CraftMultiface.java            |   76 +
 .../craftbukkit/block/impl/CraftMycelium.java |   27 +
 .../block/impl/CraftNetherPortal.java         |   38 +
 .../block/impl/CraftNetherWart.java           |   32 +
 .../block/impl/CraftNoteBlock.java            |   58 +
 .../craftbukkit/block/impl/CraftObserver.java |   51 +
 .../block/impl/CraftParticleLeaves.java       |   62 +
 .../block/impl/CraftPiglinWallSkull.java      |   51 +
 .../block/impl/CraftPinkPetals.java           |   61 +
 .../block/impl/CraftPistonBase.java           |   51 +
 .../block/impl/CraftPistonHead.java           |   65 +
 .../block/impl/CraftPitcherCrop.java          |   48 +
 .../block/impl/CraftPlayerHead.java           |   48 +
 .../block/impl/CraftPlayerWallHead.java       |   51 +
 .../block/impl/CraftPointedDripstone.java     |   65 +
 .../craftbukkit/block/impl/CraftPotato.java   |   32 +
 .../block/impl/CraftPoweredRail.java          |   62 +
 .../block/impl/CraftPressurePlate.java        |   27 +
 .../craftbukkit/block/impl/CraftRail.java     |   49 +
 .../block/impl/CraftRedStoneOre.java          |   27 +
 .../block/impl/CraftRedStoneWire.java         |   66 +
 .../block/impl/CraftRedstoneLamp.java         |   27 +
 .../block/impl/CraftRedstoneTorch.java        |   27 +
 .../block/impl/CraftRedstoneWallTorch.java    |   51 +
 .../craftbukkit/block/impl/CraftRepeater.java |   86 +
 .../block/impl/CraftRespawnAnchor.java        |   32 +
 .../block/impl/CraftRotatedPillar.java        |   37 +
 .../craftbukkit/block/impl/CraftSapling.java  |   32 +
 .../block/impl/CraftScaffolding.java          |   57 +
 .../block/impl/CraftSculkCatalyst.java        |   27 +
 .../block/impl/CraftSculkSensor.java          |   61 +
 .../block/impl/CraftSculkShrieker.java        |   51 +
 .../block/impl/CraftSculkVein.java            |   76 +
 .../block/impl/CraftSeaPickle.java            |   50 +
 .../block/impl/CraftShulkerBox.java           |   38 +
 .../craftbukkit/block/impl/CraftSkull.java    |   48 +
 .../craftbukkit/block/impl/CraftSlab.java     |   43 +
 .../block/impl/CraftSmallDripleaf.java        |   66 +
 .../craftbukkit/block/impl/CraftSmoker.java   |   51 +
 .../block/impl/CraftSnifferEgg.java           |   32 +
 .../block/impl/CraftSnowLayer.java            |   37 +
 .../block/impl/CraftSnowyDirt.java            |   27 +
 .../block/impl/CraftStainedGlassPane.java     |   73 +
 .../craftbukkit/block/impl/CraftStair.java    |   78 +
 .../block/impl/CraftStandingSign.java         |   48 +
 .../craftbukkit/block/impl/CraftStem.java     |   32 +
 .../block/impl/CraftStonecutter.java          |   38 +
 .../block/impl/CraftStructureBlock.java       |   29 +
 .../block/impl/CraftSugarCane.java            |   32 +
 .../block/impl/CraftSweetBerryBush.java       |   32 +
 .../block/impl/CraftTallFlower.java           |   30 +
 .../block/impl/CraftTallSeagrass.java         |   30 +
 .../craftbukkit/block/impl/CraftTarget.java   |   32 +
 .../craftbukkit/block/impl/CraftTnt.java      |   27 +
 .../block/impl/CraftTorchflowerCrop.java      |   32 +
 .../craftbukkit/block/impl/CraftTrapDoor.java |   88 +
 .../block/impl/CraftTrappedChest.java         |   65 +
 .../block/impl/CraftTrialSpawner.java         |   43 +
 .../craftbukkit/block/impl/CraftTripWire.java |   97 +
 .../block/impl/CraftTripWireHook.java         |   63 +
 .../block/impl/CraftTurtleEgg.java            |   54 +
 .../block/impl/CraftTwistingVines.java        |   32 +
 .../craftbukkit/block/impl/CraftVault.java    |   66 +
 .../craftbukkit/block/impl/CraftVine.java     |   58 +
 .../craftbukkit/block/impl/CraftWall.java     |   69 +
 .../block/impl/CraftWallBanner.java           |   38 +
 .../block/impl/CraftWallHangingSign.java      |   51 +
 .../craftbukkit/block/impl/CraftWallSign.java |   51 +
 .../block/impl/CraftWallSkull.java            |   51 +
 .../block/impl/CraftWallTorch.java            |   38 +
 .../impl/CraftWaterloggedTransparent.java     |   27 +
 .../block/impl/CraftWeatheringCopperBulb.java |   39 +
 .../block/impl/CraftWeatheringCopperDoor.java |   91 +
 .../impl/CraftWeatheringCopperGrate.java      |   27 +
 .../block/impl/CraftWeatheringCopperSlab.java |   43 +
 .../impl/CraftWeatheringCopperStair.java      |   78 +
 .../impl/CraftWeatheringCopperTrapDoor.java   |   88 +
 .../block/impl/CraftWeepingVines.java         |   32 +
 .../impl/CraftWeightedPressurePlate.java      |   32 +
 .../block/impl/CraftWitherSkull.java          |   48 +
 .../block/impl/CraftWitherWallSkull.java      |   51 +
 .../paper/entity/ai/MobGoalHelper.java        |  189 +-
 .../{PaperVanillaGoal.java => PaperGoal.java} |    4 +-
 .../paper/entity/ai/PaperMobGoals.java        |   16 +-
 .../paper/block/fluid/PaperFluidData.java     |   26 +-
 .../paper/registry/PaperRegistries.java       |    9 +-
 .../flag/PaperFeatureFlagProviderImpl.java    |    9 +-
 .../bukkit/craftbukkit/CraftStatistic.java    |  142 +-
 .../craftbukkit/block/CraftBlockStates.java   |   31 +-
 .../craftbukkit/block/data/CraftAgeable.java  |   23 -
 .../block/data/CraftAnaloguePowerable.java    |   23 -
 .../block/data/CraftAttachable.java           |   18 -
 .../craftbukkit/block/data/CraftBisected.java |   18 -
 .../block/data/CraftBlockData.java            |  259 +-
 .../block/data/CraftBrushable.java            |   23 -
 .../block/data/CraftDirectional.java          |   23 -
 .../block/data/CraftFaceAttachable.java       |   18 -
 .../craftbukkit/block/data/CraftHangable.java |   18 -
 .../block/data/CraftHatchable.java            |   23 -
 .../craftbukkit/block/data/CraftLevelled.java |   23 -
 .../block/data/CraftLightable.java            |   18 -
 .../block/data/CraftMultipleFacing.java       |   54 -
 .../craftbukkit/block/data/CraftOpenable.java |   18 -
 .../block/data/CraftOrientable.java           |   23 -
 .../block/data/CraftPowerable.java            |   18 -
 .../craftbukkit/block/data/CraftRail.java     |   23 -
 .../block/data/CraftRotatable.java            |  107 -
 .../craftbukkit/block/data/CraftSnowable.java |   18 -
 .../block/data/CraftWaterlogged.java          |   18 -
 .../block/data/type/CraftBamboo.java          |   19 -
 .../craftbukkit/block/data/type/CraftBed.java |   25 -
 .../block/data/type/CraftBeehive.java         |   24 -
 .../block/data/type/CraftBell.java            |   19 -
 .../block/data/type/CraftBigDripleaf.java     |   19 -
 .../block/data/type/CraftBrewingStand.java    |   39 -
 .../block/data/type/CraftBrushable.java       |   24 -
 .../block/data/type/CraftBubbleColumn.java    |   19 -
 .../block/data/type/CraftCake.java            |   24 -
 .../block/data/type/CraftCampfire.java        |   19 -
 .../block/data/type/CraftCandle.java          |   24 -
 .../block/data/type/CraftCaveVinesPlant.java  |   19 -
 .../block/data/type/CraftChest.java           |   19 -
 .../data/type/CraftChiseledBookshelf.java     |   40 -
 .../block/data/type/CraftCommandBlock.java    |   19 -
 .../block/data/type/CraftComparator.java      |   19 -
 .../block/data/type/CraftCrafter.java         |   41 -
 .../block/data/type/CraftCreakingHeart.java   |   30 -
 .../data/type/CraftDaylightDetector.java      |   19 -
 .../block/data/type/CraftDispenser.java       |   19 -
 .../block/data/type/CraftDoor.java            |   19 -
 .../block/data/type/CraftEndPortalFrame.java  |   19 -
 .../block/data/type/CraftFarmland.java        |   24 -
 .../block/data/type/CraftGate.java            |   19 -
 .../block/data/type/CraftHangingMoss.java     |   19 -
 .../block/data/type/CraftHopper.java          |   19 -
 .../block/data/type/CraftJigsaw.java          |   19 -
 .../block/data/type/CraftJukebox.java         |   14 -
 .../block/data/type/CraftLeaves.java          |   30 -
 .../block/data/type/CraftLectern.java         |   14 -
 .../block/data/type/CraftMossyCarpet.java     |   32 -
 .../block/data/type/CraftNoteBlock.java       |   30 -
 .../block/data/type/CraftPinkPetals.java      |   24 -
 .../block/data/type/CraftPiston.java          |   19 -
 .../block/data/type/CraftPistonHead.java      |   19 -
 .../data/type/CraftPointedDripstone.java      |   35 -
 .../block/data/type/CraftRedstoneWire.java    |   53 -
 .../block/data/type/CraftRepeater.java        |   40 -
 .../block/data/type/CraftRespawnAnchor.java   |   24 -
 .../block/data/type/CraftSapling.java         |   24 -
 .../block/data/type/CraftScaffolding.java     |   35 -
 .../block/data/type/CraftSculkCatalyst.java   |   19 -
 .../block/data/type/CraftSculkSensor.java     |   19 -
 .../block/data/type/CraftSculkShrieker.java   |   30 -
 .../block/data/type/CraftSeaPickle.java       |   29 -
 .../block/data/type/CraftSlab.java            |   19 -
 .../block/data/type/CraftSnow.java            |   29 -
 .../block/data/type/CraftStairs.java          |   19 -
 .../block/data/type/CraftStructureBlock.java  |   19 -
 .../block/data/type/CraftSwitch.java          |   19 -
 .../craftbukkit/block/data/type/CraftTNT.java |   19 -
 .../block/data/type/CraftTechnicalPiston.java |   19 -
 .../block/data/type/CraftTrialSpawner.java    |   30 -
 .../block/data/type/CraftTripwire.java        |   19 -
 .../block/data/type/CraftTurtleEgg.java       |   29 -
 .../block/data/type/CraftVault.java           |   40 -
 .../block/data/type/CraftWall.java            |   32 -
 .../block/impl/CraftAmethystCluster.java      |   48 -
 .../craftbukkit/block/impl/CraftAnvil.java    |   34 -
 .../craftbukkit/block/impl/CraftBamboo.java   |   67 -
 .../craftbukkit/block/impl/CraftBanner.java   |  118 -
 .../block/impl/CraftBannerWall.java           |   34 -
 .../craftbukkit/block/impl/CraftBarrel.java   |   48 -
 .../craftbukkit/block/impl/CraftBarrier.java  |   29 -
 .../craftbukkit/block/impl/CraftBed.java      |   61 -
 .../craftbukkit/block/impl/CraftBeehive.java  |   53 -
 .../craftbukkit/block/impl/CraftBeetroot.java |   34 -
 .../craftbukkit/block/impl/CraftBell.java     |   62 -
 .../block/impl/CraftBigDripleaf.java          |   62 -
 .../block/impl/CraftBigDripleafStem.java      |   48 -
 .../block/impl/CraftBlastFurnace.java         |   48 -
 .../block/impl/CraftBrewingStand.java         |   49 -
 .../block/impl/CraftBrushable.java            |   34 -
 .../block/impl/CraftBubbleColumn.java         |   29 -
 .../block/impl/CraftButtonAbstract.java       |   76 -
 .../craftbukkit/block/impl/CraftCactus.java   |   34 -
 .../craftbukkit/block/impl/CraftCake.java     |   34 -
 .../impl/CraftCalibratedSculkSensor.java      |   81 -
 .../craftbukkit/block/impl/CraftCampfire.java |   76 -
 .../craftbukkit/block/impl/CraftCandle.java   |   68 -
 .../block/impl/CraftCandleCake.java           |   29 -
 .../craftbukkit/block/impl/CraftCarrots.java  |   34 -
 .../block/impl/CraftCaveVines.java            |   48 -
 .../block/impl/CraftCaveVinesPlant.java       |   29 -
 .../block/impl/CraftCeilingHangingSign.java   |  146 -
 .../craftbukkit/block/impl/CraftChain.java    |   48 -
 .../craftbukkit/block/impl/CraftChest.java    |   62 -
 .../block/impl/CraftChestTrapped.java         |   62 -
 .../block/impl/CraftChiseledBookShelf.java    |   69 -
 .../block/impl/CraftChorusFlower.java         |   34 -
 .../block/impl/CraftChorusFruit.java          |   65 -
 .../block/impl/CraftCobbleWall.java           |   56 -
 .../craftbukkit/block/impl/CraftCocoa.java    |   53 -
 .../craftbukkit/block/impl/CraftCommand.java  |   48 -
 .../block/impl/CraftComposter.java            |   41 -
 .../craftbukkit/block/impl/CraftConduit.java  |   29 -
 .../block/impl/CraftCopperBulb.java           |   43 -
 .../block/impl/CraftCoralDead.java            |   29 -
 .../craftbukkit/block/impl/CraftCoralFan.java |   29 -
 .../block/impl/CraftCoralFanAbstract.java     |   29 -
 .../block/impl/CraftCoralFanWall.java         |   48 -
 .../block/impl/CraftCoralFanWallAbstract.java |   48 -
 .../block/impl/CraftCoralPlant.java           |   29 -
 .../craftbukkit/block/impl/CraftCrafter.java  |   51 -
 .../block/impl/CraftCreakingHeart.java        |   59 -
 .../craftbukkit/block/impl/CraftCrops.java    |   34 -
 .../block/impl/CraftDaylightDetector.java     |   48 -
 .../block/impl/CraftDecoratedPot.java         |   62 -
 .../craftbukkit/block/impl/CraftDirtSnow.java |   29 -
 .../block/impl/CraftDispenser.java            |   48 -
 .../craftbukkit/block/impl/CraftDoor.java     |   90 -
 .../craftbukkit/block/impl/CraftDropper.java  |   48 -
 .../craftbukkit/block/impl/CraftEndRod.java   |   34 -
 .../block/impl/CraftEnderChest.java           |   48 -
 .../block/impl/CraftEnderPortalFrame.java     |   48 -
 .../craftbukkit/block/impl/CraftFence.java    |   79 -
 .../block/impl/CraftFenceGate.java            |   76 -
 .../craftbukkit/block/impl/CraftFire.java     |   84 -
 .../block/impl/CraftFloorSign.java            |  132 -
 .../craftbukkit/block/impl/CraftFluids.java   |   41 -
 .../block/impl/CraftFurnaceFurace.java        |   48 -
 .../block/impl/CraftGlazedTerracotta.java     |   34 -
 .../block/impl/CraftGlowLichen.java           |   79 -
 .../craftbukkit/block/impl/CraftGrass.java    |   29 -
 .../block/impl/CraftGrindstone.java           |   48 -
 .../block/impl/CraftHangingMoss.java          |   29 -
 .../block/impl/CraftHangingRoots.java         |   29 -
 .../craftbukkit/block/impl/CraftHay.java      |   34 -
 .../block/impl/CraftHeavyCore.java            |   29 -
 .../craftbukkit/block/impl/CraftHopper.java   |   48 -
 .../block/impl/CraftHugeMushroom.java         |   65 -
 .../craftbukkit/block/impl/CraftIceFrost.java |   34 -
 .../impl/CraftInfestedRotatedPillar.java      |   34 -
 .../craftbukkit/block/impl/CraftIronBars.java |   79 -
 .../craftbukkit/block/impl/CraftJigsaw.java   |   29 -
 .../craftbukkit/block/impl/CraftJukeBox.java  |   24 -
 .../craftbukkit/block/impl/CraftKelp.java     |   34 -
 .../craftbukkit/block/impl/CraftLadder.java   |   48 -
 .../craftbukkit/block/impl/CraftLantern.java  |   43 -
 .../block/impl/CraftLayeredCauldron.java      |   41 -
 .../craftbukkit/block/impl/CraftLeaves.java   |   66 -
 .../craftbukkit/block/impl/CraftLectern.java  |   57 -
 .../craftbukkit/block/impl/CraftLever.java    |   76 -
 .../craftbukkit/block/impl/CraftLight.java    |   55 -
 .../block/impl/CraftLightningRod.java         |   62 -
 .../craftbukkit/block/impl/CraftLoom.java     |   34 -
 .../block/impl/CraftMangroveLeaves.java       |   66 -
 .../block/impl/CraftMangrovePropagule.java    |   81 -
 .../block/impl/CraftMangroveRoots.java        |   29 -
 .../block/impl/CraftMinecartDetector.java     |   62 -
 .../block/impl/CraftMinecartTrack.java        |   48 -
 .../block/impl/CraftMossyCarpet.java          |   42 -
 .../block/impl/CraftMultiface.java            |   79 -
 .../craftbukkit/block/impl/CraftMycel.java    |   29 -
 .../block/impl/CraftNetherWart.java           |   34 -
 .../craftbukkit/block/impl/CraftNote.java     |   54 -
 .../craftbukkit/block/impl/CraftObserver.java |   48 -
 .../block/impl/CraftParticleLeaves.java       |   66 -
 .../block/impl/CraftPiglinWallSkull.java      |   48 -
 .../block/impl/CraftPinkPetals.java           |   60 -
 .../craftbukkit/block/impl/CraftPiston.java   |   48 -
 .../block/impl/CraftPistonExtension.java      |   62 -
 .../block/impl/CraftPistonMoving.java         |   48 -
 .../block/impl/CraftPitcherCrop.java          |   48 -
 .../block/impl/CraftPointedDripstone.java     |   59 -
 .../craftbukkit/block/impl/CraftPortal.java   |   34 -
 .../craftbukkit/block/impl/CraftPotatoes.java |   34 -
 .../block/impl/CraftPoweredRail.java          |   62 -
 .../block/impl/CraftPressurePlateBinary.java  |   29 -
 .../impl/CraftPressurePlateWeighted.java      |   34 -
 .../block/impl/CraftPumpkinCarved.java        |   34 -
 .../block/impl/CraftRedstoneComparator.java   |   62 -
 .../block/impl/CraftRedstoneLamp.java         |   29 -
 .../block/impl/CraftRedstoneOre.java          |   29 -
 .../block/impl/CraftRedstoneTorch.java        |   29 -
 .../block/impl/CraftRedstoneTorchWall.java    |   48 -
 .../block/impl/CraftRedstoneWire.java         |   82 -
 .../craftbukkit/block/impl/CraftReed.java     |   34 -
 .../craftbukkit/block/impl/CraftRepeater.java |   83 -
 .../block/impl/CraftRespawnAnchor.java        |   34 -
 .../block/impl/CraftRotatable.java            |   34 -
 .../craftbukkit/block/impl/CraftSapling.java  |   34 -
 .../block/impl/CraftScaffolding.java          |   59 -
 .../block/impl/CraftSculkCatalyst.java        |   29 -
 .../block/impl/CraftSculkSensor.java          |   62 -
 .../block/impl/CraftSculkShrieker.java        |   54 -
 .../block/impl/CraftSculkVein.java            |   79 -
 .../block/impl/CraftSeaPickle.java            |   53 -
 .../block/impl/CraftShulkerBox.java           |   34 -
 .../craftbukkit/block/impl/CraftSkull.java    |  132 -
 .../block/impl/CraftSkullPlayer.java          |  132 -
 .../block/impl/CraftSkullPlayerWall.java      |   48 -
 .../block/impl/CraftSkullWall.java            |   48 -
 .../block/impl/CraftSmallDripleaf.java        |   62 -
 .../craftbukkit/block/impl/CraftSmoker.java   |   48 -
 .../block/impl/CraftSnifferEgg.java           |   34 -
 .../craftbukkit/block/impl/CraftSnow.java     |   39 -
 .../craftbukkit/block/impl/CraftSoil.java     |   34 -
 .../block/impl/CraftStainedGlassPane.java     |   79 -
 .../craftbukkit/block/impl/CraftStairs.java   |   76 -
 .../craftbukkit/block/impl/CraftStem.java     |   34 -
 .../block/impl/CraftStemAttached.java         |   34 -
 .../block/impl/CraftStepAbstract.java         |   43 -
 .../block/impl/CraftStonecutter.java          |   34 -
 .../block/impl/CraftStructure.java            |   29 -
 .../block/impl/CraftSweetBerryBush.java       |   34 -
 .../craftbukkit/block/impl/CraftTNT.java      |   29 -
 .../block/impl/CraftTallPlant.java            |   29 -
 .../block/impl/CraftTallPlantFlower.java      |   29 -
 .../block/impl/CraftTallSeagrass.java         |   29 -
 .../craftbukkit/block/impl/CraftTarget.java   |   34 -
 .../block/impl/CraftTorchWall.java            |   34 -
 .../block/impl/CraftTorchflowerCrop.java      |   34 -
 .../craftbukkit/block/impl/CraftTrapdoor.java |   90 -
 .../block/impl/CraftTrialSpawner.java         |   40 -
 .../craftbukkit/block/impl/CraftTripwire.java |  107 -
 .../block/impl/CraftTripwireHook.java         |   62 -
 .../block/impl/CraftTurtleEgg.java            |   58 -
 .../block/impl/CraftTwistingVines.java        |   34 -
 .../craftbukkit/block/impl/CraftVault.java    |   69 -
 .../craftbukkit/block/impl/CraftVine.java     |   65 -
 .../block/impl/CraftWallHangingSign.java      |   48 -
 .../craftbukkit/block/impl/CraftWallSign.java |   48 -
 .../impl/CraftWaterloggedTransparent.java     |   29 -
 .../block/impl/CraftWeatheringCopperBulb.java |   43 -
 .../block/impl/CraftWeatheringCopperDoor.java |   90 -
 .../impl/CraftWeatheringCopperGrate.java      |   29 -
 .../block/impl/CraftWeatheringCopperSlab.java |   43 -
 .../impl/CraftWeatheringCopperStair.java      |   76 -
 .../impl/CraftWeatheringCopperTrapDoor.java   |   90 -
 .../block/impl/CraftWeepingVines.java         |   34 -
 .../block/impl/CraftWitherSkull.java          |  132 -
 .../block/impl/CraftWitherSkullWall.java      |   48 -
 .../craftbukkit/entity/CraftTropicalFish.java |   48 +-
 .../entity/memory/CraftMemoryKey.java         |    2 +-
 .../craftbukkit/map/CraftMapColorCache.java   |   14 +-
 .../craftbukkit/potion/CraftPotionUtil.java   |   30 +-
 .../CraftScoreboardTranslations.java          |   14 +-
 .../bukkit/craftbukkit/util/Commodore.java    |    5 +-
 .../minecraft/datapacks/paper/pack.mcmeta     |    2 +-
 .../EntitySetItemSlotSilentOverrideTest.java  |    3 +-
 .../paper/scoreboard/DisplaySlotTest.java     |   26 -
 .../block/BlockPlayerDestroyOverrideTest.java |    3 +-
 .../src/test/java/org/bukkit/ArtTest.java     |   56 -
 .../src/test/java/org/bukkit/BiomeTest.java   |   32 -
 .../src/test/java/org/bukkit/EffectTest.java  |    2 -
 .../test/java/org/bukkit/EnchantmentTest.java |   25 -
 .../test/java/org/bukkit/GameEventTest.java   |   20 -
 .../test/java/org/bukkit/MaterialTest.java    |   29 -
 .../test/java/org/bukkit/PerMaterialTest.java |  266 +-
 .../src/test/java/org/bukkit/SoundTest.java   |   21 +-
 .../bukkit/StatisticsAndAchievementsTest.java |    5 +-
 .../bukkit/block/banner/PatternTypeTest.java  |   42 -
 .../craftbukkit/inventory/ItemTypeTest.java   |    2 +-
 .../org/bukkit/entity/EntityTypesTest.java    |   22 +-
 .../java/org/bukkit/entity/PandaGeneTest.java |   33 -
 .../entity/memory/CraftMemoryKeyTest.java     |   78 -
 .../generator/structure/StructureTest.java    |   53 -
 .../structure/StructureTypeTest.java          |   53 -
 .../src/test/java/org/bukkit/map/MapTest.java |   52 -
 .../java/org/bukkit/potion/PotionTest.java    |   18 -
 .../extension/AllFeaturesExtension.java       |    3 -
 .../support/extension/LegacyExtension.java    |    8 -
 .../support/extension/SlowExtension.java      |    8 -
 .../extension/VanillaFeatureExtension.java    |    8 -
 settings.gradle.kts                           |   11 +-
 679 files changed, 27089 insertions(+), 25776 deletions(-)
 delete mode 100644 paper-api-generator/build.gradle.kts
 delete mode 100644 paper-api-generator/src/main/java/io/papermc/generator/Generators.java
 delete mode 100644 paper-api-generator/src/main/java/io/papermc/generator/Main.java
 delete mode 100644 paper-api-generator/src/main/java/io/papermc/generator/types/GeneratedKeyType.java
 delete mode 100644 paper-api-generator/src/main/java/io/papermc/generator/types/GeneratedTagKeyType.java
 delete mode 100644 paper-api-generator/src/main/java/io/papermc/generator/utils/Annotations.java
 delete mode 100644 paper-api-generator/src/main/java/io/papermc/generator/utils/Formatting.java
 delete mode 100644 paper-api-generator/src/main/java/io/papermc/generator/utils/Javadocs.java
 delete mode 100644 paper-api-generator/src/main/java/io/papermc/generator/utils/TagCollector.java
 create mode 100644 paper-api/src/generated/java/io/papermc/paper/registry/keys/DataComponentTypeKeys.java
 create mode 100644 paper-api/src/main/java/org/bukkit/block/Orientation.java
 delete mode 100644 paper-api/src/test/java/org/bukkit/BukkitMirrorTest.java
 delete mode 100644 paper-api/src/test/java/org/bukkit/entity/memory/MemoryKeyTest.java
 create mode 100644 paper-generator/.editorconfig
 create mode 100644 paper-generator/build.gradle.kts
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/Generators.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/Main.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/Rewriters.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntry.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/registry/RegistryKeyField.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/registration/PaperPatternSourceSetRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/registration/PatternSourceSetRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/registration/RewriterHolder.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/Types.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/EnumRegistryRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/FeatureFlagRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperFeatureFlagMapping.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryEventsRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryFieldRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryTagRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/TagRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/BlockTypeRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftBlockDataMapping.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftBlockEntityStateMapping.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftPotionUtilRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/EntityTypeRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/ItemTypeRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MapPaletteRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MaterialRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/StatisticRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/package-info.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/DataComponentTypesRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/ProtoConstant.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/VillagerProfessionRewriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/package-info.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/utils/Annotations.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/utils/ScanOldGeneratedSourceCode.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/OverriddenClassGenerator.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/SimpleEnumGenerator.java
 rename {paper-api-generator => paper-generator}/src/main/java/io/papermc/generator/types/SimpleGenerator.java (78%)
 rename {paper-api-generator => paper-generator}/src/main/java/io/papermc/generator/types/SourceGenerator.java (76%)
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/Types.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/CraftBlockDataBootstrapper.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/CraftBlockDataGenerator.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/EnumPropertyWriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/IntegerPropertyWriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/PropertyMaker.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/PropertyWriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/AppenderBase.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/EnumValuesAppender.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/PropertyAppender.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/PropertyAppenders.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/Converter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/ConverterBase.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/Converters.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/NoteConverter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/RotationConverter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataHolderType.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyMaker.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyWriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyWriterBase.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/VirtualDataPropertyWriter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/VirtualField.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/ArrayAppender.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/DataAppender.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/DataAppenders.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/ListAppender.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/MapAppender.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/ArrayConverter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/DataConverter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/DataConverters.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/ListConverter.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/MapConverter.java
 rename {paper-api-generator => paper-generator}/src/main/java/io/papermc/generator/types/goal/MobGoalGenerator.java (76%)
 rename {paper-api-generator => paper-generator}/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java (51%)
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedKeyType.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedTagKeyType.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/Annotations.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/BlockEntityMapping.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/BlockStateMapping.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/ClassHelper.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/CommonVariable.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/Formatting.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/Javadocs.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/NamingManager.java
 rename {paper-api-generator/src/main/java/io/papermc/generator/utils => paper-generator/src/main/java/io/papermc/generator/utils/experimental}/CollectingContext.java (51%)
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/experimental/ExperimentalCollector.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/experimental/FlagHolder.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/experimental/FlagHolders.java
 create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/experimental/SingleFlagHolder.java
 create mode 100644 paper-generator/src/test/java/io/papermc/generator/BlockStatePropertyTest.java
 rename {paper-api-generator => paper-generator}/src/test/java/io/papermc/generator/MobGoalConverterTest.java (74%)
 create mode 100644 paper-generator/src/test/java/io/papermc/generator/RegistryMigrationTest.java
 rename {paper-api-generator => paper-generator}/wideners.at (52%)
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAmethystCluster.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAnvil.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAttachedStem.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBambooStalk.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBanner.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBarrel.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBarrier.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralFan.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralPlant.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralWallFan.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBeehive.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBeetroot.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBell.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleaf.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleafStem.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBlastFurnace.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBrewingStand.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBrushable.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBubbleColumn.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftButton.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCactus.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCake.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCalibratedSculkSensor.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCampfire.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCandleCake.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCarrot.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCarvedPumpkin.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCaveVines.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCaveVinesPlant.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCeilingHangingSign.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChain.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChest.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChiseledBookShelf.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChorusFlower.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChorusPlant.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCocoa.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCommandBlock.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftComparator.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftConduit.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCopperBulb.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralFan.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralPlant.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralWallFan.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCrafter.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCreakingHeart.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCrop.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDaylightDetector.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDetectorRail.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDispenser.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDoor.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDoublePlant.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDropper.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEndPortalFrame.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEndRod.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEnderChest.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFarm.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFence.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFenceGate.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFire.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFrostedIce.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFurnace.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGlazedTerracotta.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGlowLichen.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGrass.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGrindstone.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHangingMoss.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHangingRoots.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHay.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHeavyCore.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHopper.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHugeMushroom.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftInfestedRotatedPillar.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftIronBars.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftJigsaw.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftJukebox.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftKelp.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLadder.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLantern.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLectern.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLever.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLightningRod.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLiquid.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLoom.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangrovePropagule.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangroveRoots.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMossyCarpet.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMovingPiston.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMultiface.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMycelium.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNetherPortal.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNetherWart.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNoteBlock.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftObserver.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftParticleLeaves.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPiglinWallSkull.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPistonBase.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPistonHead.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPitcherCrop.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPlayerHead.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPlayerWallHead.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPointedDripstone.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPotato.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPoweredRail.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlate.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRail.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedStoneOre.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedStoneWire.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneLamp.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorch.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneWallTorch.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRepeater.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRespawnAnchor.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRotatedPillar.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSapling.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftScaffolding.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkCatalyst.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkSensor.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkShrieker.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSeaPickle.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftShulkerBox.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSkull.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSlab.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSmallDripleaf.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSmoker.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnifferEgg.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnowLayer.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnowyDirt.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStainedGlassPane.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStair.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStandingSign.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStem.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStonecutter.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStructureBlock.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSugarCane.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSweetBerryBush.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTallFlower.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTallSeagrass.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTarget.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTnt.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTorchflowerCrop.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrapDoor.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrappedChest.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrialSpawner.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTripWire.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTripWireHook.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTurtleEgg.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTwistingVines.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftVault.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftVine.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWall.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallBanner.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallHangingSign.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallSign.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallSkull.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallTorch.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWaterloggedTransparent.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperBulb.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperDoor.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperGrate.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperSlab.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperStair.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperTrapDoor.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeepingVines.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeightedPressurePlate.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkull.java
 create mode 100644 paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWitherWallSkull.java
 rename paper-server/src/main/java/com/destroystokyo/paper/entity/ai/{PaperVanillaGoal.java => PaperGoal.java} (89%)
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAgeable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAnaloguePowerable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAttachable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBisected.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBrushable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftDirectional.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftFaceAttachable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftHangable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftHatchable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftLevelled.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftLightable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftMultipleFacing.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftOpenable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftOrientable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftPowerable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftRail.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftRotatable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftSnowable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftWaterlogged.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBamboo.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBed.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBeehive.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBell.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBigDripleaf.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBrewingStand.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBrushable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBubbleColumn.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCake.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCampfire.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCandle.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCaveVinesPlant.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftChest.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftChiseledBookshelf.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCommandBlock.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftComparator.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCrafter.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCreakingHeart.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDaylightDetector.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDispenser.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDoor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftEndPortalFrame.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftFarmland.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftGate.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftHangingMoss.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftHopper.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftJigsaw.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftJukebox.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftLeaves.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftLectern.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftMossyCarpet.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftNoteBlock.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPinkPetals.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPiston.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPistonHead.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPointedDripstone.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRedstoneWire.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRepeater.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRespawnAnchor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSapling.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftScaffolding.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkCatalyst.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkSensor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkShrieker.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSeaPickle.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSlab.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSnow.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftStairs.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftStructureBlock.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSwitch.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTNT.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTechnicalPiston.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTrialSpawner.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTripwire.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTurtleEgg.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftVault.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftWall.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftAmethystCluster.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftAnvil.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBamboo.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBanner.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBannerWall.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBarrel.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBarrier.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBeehive.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBeetroot.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBell.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleaf.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleafStem.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBlastFurnace.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBrewingStand.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBrushable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBubbleColumn.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftButtonAbstract.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCactus.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCake.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCalibratedSculkSensor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCampfire.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandleCake.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCarrots.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCaveVines.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCaveVinesPlant.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCeilingHangingSign.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChain.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChest.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChestTrapped.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChiseledBookShelf.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChorusFlower.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChorusFruit.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCobbleWall.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCocoa.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCommand.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftConduit.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCopperBulb.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralDead.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFan.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanAbstract.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanWall.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanWallAbstract.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralPlant.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCrafter.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCreakingHeart.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCrops.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDaylightDetector.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDirtSnow.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDispenser.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDoor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDropper.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEndRod.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEnderChest.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEnderPortalFrame.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFence.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFenceGate.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFire.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFloorSign.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFluids.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFurnaceFurace.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGlazedTerracotta.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGlowLichen.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGrass.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGrindstone.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHangingMoss.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHangingRoots.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHay.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHeavyCore.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHopper.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHugeMushroom.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftIceFrost.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftInfestedRotatedPillar.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftIronBars.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftJigsaw.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftJukeBox.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftKelp.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLadder.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLantern.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLectern.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLever.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLightningRod.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLoom.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangrovePropagule.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveRoots.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMinecartDetector.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMinecartTrack.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMossyCarpet.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMultiface.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMycel.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftNetherWart.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftNote.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftObserver.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftParticleLeaves.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPiglinWallSkull.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPiston.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPistonExtension.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPistonMoving.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPitcherCrop.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPointedDripstone.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPortal.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPotatoes.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPoweredRail.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlateBinary.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlateWeighted.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPumpkinCarved.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneComparator.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneLamp.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneOre.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorch.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorchWall.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneWire.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftReed.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRepeater.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRespawnAnchor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRotatable.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSapling.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftScaffolding.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkCatalyst.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkSensor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkShrieker.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSeaPickle.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftShulkerBox.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkull.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullPlayer.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullPlayerWall.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullWall.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSmallDripleaf.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSmoker.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSnifferEgg.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSnow.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSoil.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStainedGlassPane.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStairs.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStem.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStemAttached.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStepAbstract.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStonecutter.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStructure.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSweetBerryBush.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTNT.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallPlant.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallPlantFlower.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallSeagrass.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTarget.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTorchWall.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTorchflowerCrop.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTrapdoor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTrialSpawner.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTripwire.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTripwireHook.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTurtleEgg.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTwistingVines.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftVault.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftVine.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWallHangingSign.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWallSign.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWaterloggedTransparent.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperBulb.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperDoor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperGrate.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperSlab.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperStair.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperTrapDoor.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeepingVines.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkull.java
 delete mode 100644 paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkullWall.java
 delete mode 100644 paper-server/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/ArtTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/BiomeTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/EnchantmentTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/GameEventTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/block/banner/PatternTypeTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/entity/PandaGeneTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/entity/memory/CraftMemoryKeyTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/generator/structure/StructureTest.java
 delete mode 100644 paper-server/src/test/java/org/bukkit/generator/structure/StructureTypeTest.java

diff --git a/.editorconfig b/.editorconfig
index 76c44f0655..600eac0fb9 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,3 +1,5 @@
+root = true
+
 [*]
 charset = utf-8
 end_of_line = lf
@@ -40,5 +42,5 @@ ij_java_use_fq_class_names = true
 [paper-server/src/minecraft/resources/data/**/*.json]
 indent_size = 2
 
-[paper-api/src/generated/java/**/*.java]
+[paper-{server,api}/src/generated/java/**/*.java]
 ij_java_imports_layout = $*, |, *
diff --git a/.gitignore b/.gitignore
index 53a798d16e..e46ae58b18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,7 +45,7 @@ logs/
 !gradle/wrapper/gradle-wrapper.jar
 
 test-plugin.settings.gradle.kts
-paper-api-generator.settings.gradle.kts
+paper-generator.settings.gradle.kts
 
 # Don't track patched vanilla submodules
 paper-server/src/minecraft/
diff --git a/paper-api-generator/build.gradle.kts b/paper-api-generator/build.gradle.kts
deleted file mode 100644
index 0eab98b0fe..0000000000
--- a/paper-api-generator/build.gradle.kts
+++ /dev/null
@@ -1,37 +0,0 @@
-import io.papermc.paperweight.util.defaultJavaLauncher
-
-plugins {
-    java
-    id("io.papermc.paperweight.source-generator")
-}
-
-paperweight {
-    atFile.set(layout.projectDirectory.file("wideners.at"))
-}
-
-dependencies {
-    minecraftJar(project(":paper-server", "mappedJarOutgoing"))
-    implementation(project(":paper-server", "macheMinecraftLibraries"))
-
-    implementation("com.squareup:javapoet:1.13.0")
-    implementation(project(":paper-api"))
-    implementation("io.github.classgraph:classgraph:4.8.47")
-    implementation("org.jetbrains:annotations:26.0.1")
-    testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
-    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
-}
-
-tasks.register<JavaExec>("generate") {
-    dependsOn(tasks.check)
-    mainClass.set("io.papermc.generator.Main")
-    classpath(sourceSets.main.map { it.runtimeClasspath })
-    args(rootProject.layout.projectDirectory.dir("paper-api/src/generated/java").asFile.absolutePath)
-    javaLauncher = javaToolchains.defaultJavaLauncher(project)
-}
-
-tasks.test {
-    useJUnitPlatform()
-}
-
-group = "io.papermc.paper"
-version = "1.0-SNAPSHOT"
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/Generators.java b/paper-api-generator/src/main/java/io/papermc/generator/Generators.java
deleted file mode 100644
index 677a1d449e..0000000000
--- a/paper-api-generator/src/main/java/io/papermc/generator/Generators.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package io.papermc.generator;
-
-import io.papermc.generator.types.GeneratedKeyType;
-import io.papermc.generator.types.GeneratedTagKeyType;
-import io.papermc.generator.types.SourceGenerator;
-import io.papermc.generator.types.goal.MobGoalGenerator;
-import io.papermc.paper.registry.RegistryKey;
-import net.minecraft.core.Registry;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.resources.ResourceKey;
-import org.bukkit.Art;
-import org.bukkit.Fluid;
-import org.bukkit.GameEvent;
-import org.bukkit.JukeboxSong;
-import org.bukkit.MusicInstrument;
-import org.bukkit.Sound;
-import org.bukkit.attribute.Attribute;
-import org.bukkit.block.Biome;
-import org.bukkit.block.BlockType;
-import org.bukkit.block.banner.PatternType;
-import org.bukkit.damage.DamageType;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.entity.Cat;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Frog;
-import org.bukkit.entity.Villager;
-import org.bukkit.entity.Wolf;
-import org.bukkit.generator.structure.Structure;
-import org.bukkit.generator.structure.StructureType;
-import org.bukkit.inventory.ItemType;
-import org.bukkit.inventory.MenuType;
-import org.bukkit.inventory.meta.trim.TrimMaterial;
-import org.bukkit.inventory.meta.trim.TrimPattern;
-import org.bukkit.map.MapCursor;
-import org.bukkit.potion.PotionEffectType;
-
-public interface Generators {
-
-    SourceGenerator[] API = {
-        // built-ins
-        simpleKey("GameEventKeys", GameEvent.class, Registries.GAME_EVENT, RegistryKey.GAME_EVENT, true),
-        simpleKey("StructureTypeKeys", StructureType.class, Registries.STRUCTURE_TYPE, RegistryKey.STRUCTURE_TYPE, false),
-        simpleKey("MobEffectKeys", PotionEffectType.class, Registries.MOB_EFFECT, RegistryKey.MOB_EFFECT, false),
-        simpleKey("BlockTypeKeys", BlockType.class, Registries.BLOCK, RegistryKey.BLOCK, false),
-        simpleKey("ItemTypeKeys", ItemType.class, Registries.ITEM, RegistryKey.ITEM, false),
-        simpleKey("CatVariantKeys", Cat.Type.class, Registries.CAT_VARIANT, RegistryKey.CAT_VARIANT, false),
-        simpleKey("FrogVariantKeys", Frog.Variant.class, Registries.FROG_VARIANT, RegistryKey.FROG_VARIANT, false),
-        simpleKey("VillagerProfessionKeys", Villager.Profession.class, Registries.VILLAGER_PROFESSION, RegistryKey.VILLAGER_PROFESSION, false),
-        simpleKey("VillagerTypeKeys", Villager.Type.class, Registries.VILLAGER_TYPE, RegistryKey.VILLAGER_TYPE, false),
-        simpleKey("MapDecorationTypeKeys", MapCursor.Type.class, Registries.MAP_DECORATION_TYPE, RegistryKey.MAP_DECORATION_TYPE, false),
-        simpleKey("MenuTypeKeys", MenuType.class, Registries.MENU, RegistryKey.MENU, false),
-        simpleKey("AttributeKeys", Attribute.class, Registries.ATTRIBUTE, RegistryKey.ATTRIBUTE, false),
-        simpleKey("FluidKeys", Fluid.class, Registries.FLUID, RegistryKey.FLUID, false),
-        simpleKey("SoundEventKeys", Sound.class, Registries.SOUND_EVENT, RegistryKey.SOUND_EVENT, false),
-
-        // data-driven
-        simpleKey("BiomeKeys", Biome.class, Registries.BIOME, RegistryKey.BIOME, true),
-        simpleKey("StructureKeys", Structure.class, Registries.STRUCTURE, RegistryKey.STRUCTURE, true),
-        simpleKey("TrimMaterialKeys", TrimMaterial.class, Registries.TRIM_MATERIAL, RegistryKey.TRIM_MATERIAL, true),
-        simpleKey("TrimPatternKeys", TrimPattern.class, Registries.TRIM_PATTERN, RegistryKey.TRIM_PATTERN, true),
-        simpleKey("DamageTypeKeys", DamageType.class, Registries.DAMAGE_TYPE, RegistryKey.DAMAGE_TYPE, true),
-        simpleKey("WolfVariantKeys", Wolf.Variant.class, Registries.WOLF_VARIANT, RegistryKey.WOLF_VARIANT, true),
-        simpleKey("EnchantmentKeys", Enchantment.class, Registries.ENCHANTMENT, RegistryKey.ENCHANTMENT, true),
-        simpleKey("JukeboxSongKeys", JukeboxSong.class, Registries.JUKEBOX_SONG, RegistryKey.JUKEBOX_SONG, true),
-        simpleKey("BannerPatternKeys", PatternType.class, Registries.BANNER_PATTERN, RegistryKey.BANNER_PATTERN, true),
-        simpleKey("PaintingVariantKeys", Art.class, Registries.PAINTING_VARIANT, RegistryKey.PAINTING_VARIANT, true),
-        simpleKey("InstrumentKeys", MusicInstrument.class, Registries.INSTRUMENT, RegistryKey.INSTRUMENT, true),
-
-        // tags
-        simpleTagKey("GameEventTagKeys", GameEvent.class, Registries.GAME_EVENT, RegistryKey.GAME_EVENT),
-        simpleTagKey("BlockTypeTagKeys", BlockType.class, Registries.BLOCK, RegistryKey.BLOCK),
-        simpleTagKey("ItemTypeTagKeys", ItemType.class, Registries.ITEM, RegistryKey.ITEM),
-        simpleTagKey("CatVariantTagKeys", Cat.Type.class, Registries.CAT_VARIANT, RegistryKey.CAT_VARIANT),
-        simpleTagKey("FluidTagKeys", Fluid.class, Registries.FLUID, RegistryKey.FLUID),
-
-        simpleTagKey("BiomeTagKeys", Biome.class, Registries.BIOME, RegistryKey.BIOME),
-        simpleTagKey("StructureTagKeys", Structure.class, Registries.STRUCTURE, RegistryKey.STRUCTURE),
-        simpleTagKey("DamageTypeTagKeys", DamageType.class, Registries.DAMAGE_TYPE, RegistryKey.DAMAGE_TYPE),
-        simpleTagKey("EnchantmentTagKeys", Enchantment.class, Registries.ENCHANTMENT, RegistryKey.ENCHANTMENT),
-        simpleTagKey("BannerPatternTagKeys", PatternType.class, Registries.BANNER_PATTERN, RegistryKey.BANNER_PATTERN),
-        simpleTagKey("PaintingVariantTagKeys", Art.class, Registries.PAINTING_VARIANT, RegistryKey.PAINTING_VARIANT),
-        simpleTagKey("InstrumentTagKeys", MusicInstrument.class, Registries.INSTRUMENT, RegistryKey.INSTRUMENT),
-
-        // api only
-        simpleTagKey("EntityTypeTagKeys", EntityType.class, Registries.ENTITY_TYPE, RegistryKey.ENTITY_TYPE),
-        new MobGoalGenerator("VanillaGoal", "com.destroystokyo.paper.entity.ai")
-    };
-
-    private static <T, A> SourceGenerator simpleKey(final String className, final Class<A> apiType, final ResourceKey<? extends Registry<T>> registryKey, final RegistryKey<A> apiRegistryKey, final boolean publicCreateKeyMethod) {
-        return new GeneratedKeyType<>(className, apiType, "io.papermc.paper.registry.keys", registryKey, apiRegistryKey, publicCreateKeyMethod);
-    }
-
-    private static <T, A> SourceGenerator simpleTagKey(final String className, final Class<A> apiType, final ResourceKey<? extends Registry<T>> registryKey, final RegistryKey<A> apiRegistryKey) {
-        return new GeneratedTagKeyType<>(className, apiType, "io.papermc.paper.registry.keys.tags", registryKey, apiRegistryKey, true);
-    }
-}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/Main.java b/paper-api-generator/src/main/java/io/papermc/generator/Main.java
deleted file mode 100644
index 129009f519..0000000000
--- a/paper-api-generator/src/main/java/io/papermc/generator/Main.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package io.papermc.generator;
-
-import com.google.common.util.concurrent.MoreExecutors;
-import com.mojang.logging.LogUtils;
-import io.papermc.generator.types.SourceGenerator;
-import io.papermc.generator.utils.TagCollector;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.Map;
-import net.minecraft.SharedConstants;
-import net.minecraft.commands.Commands;
-import net.minecraft.core.HolderLookup;
-import net.minecraft.core.LayeredRegistryAccess;
-import net.minecraft.core.Registry;
-import net.minecraft.core.RegistryAccess;
-import net.minecraft.resources.RegistryDataLoader;
-import net.minecraft.server.Bootstrap;
-import net.minecraft.server.RegistryLayer;
-import net.minecraft.server.ReloadableServerResources;
-import net.minecraft.server.packs.PackType;
-import net.minecraft.server.packs.repository.Pack;
-import net.minecraft.server.packs.repository.PackRepository;
-import net.minecraft.server.packs.repository.ServerPacksSource;
-import net.minecraft.server.packs.resources.MultiPackResourceManager;
-import net.minecraft.tags.TagKey;
-import net.minecraft.tags.TagLoader;
-import net.minecraft.world.flag.FeatureFlags;
-import org.apache.commons.io.file.PathUtils;
-import org.slf4j.Logger;
-
-public final class Main {
-
-    private static final Logger LOGGER = LogUtils.getLogger();
-    public static final RegistryAccess.Frozen REGISTRY_ACCESS;
-    public static final Map<TagKey<?>, String> EXPERIMENTAL_TAGS;
-
-    static {
-        SharedConstants.tryDetectVersion();
-        Bootstrap.bootStrap();
-        Bootstrap.validate();
-
-        final PackRepository resourceRepository = ServerPacksSource.createVanillaTrustedRepository();
-        resourceRepository.reload();
-        final MultiPackResourceManager resourceManager = new MultiPackResourceManager(PackType.SERVER_DATA, resourceRepository.getAvailablePacks().stream().map(Pack::open).toList());
-        LayeredRegistryAccess<RegistryLayer> layers = RegistryLayer.createRegistryAccess();
-        final List<Registry.PendingTags<?>> pendingTags = TagLoader.loadTagsForExistingRegistries(resourceManager, layers.getLayer(RegistryLayer.STATIC));
-        final List<HolderLookup.RegistryLookup<?>> worldGenLayer = TagLoader.buildUpdatedLookups(layers.getAccessForLoading(RegistryLayer.WORLDGEN), pendingTags);
-        final RegistryAccess.Frozen frozenWorldgenRegistries = RegistryDataLoader.load(resourceManager, worldGenLayer, RegistryDataLoader.WORLDGEN_REGISTRIES);
-        layers = layers.replaceFrom(RegistryLayer.WORLDGEN, frozenWorldgenRegistries);
-        REGISTRY_ACCESS = layers.compositeAccess().freeze();
-        final ReloadableServerResources reloadableServerResources = ReloadableServerResources.loadResources(
-            resourceManager,
-            layers,
-            pendingTags,
-            FeatureFlags.VANILLA_SET,
-            Commands.CommandSelection.DEDICATED,
-            0,
-            MoreExecutors.directExecutor(),
-            MoreExecutors.directExecutor()
-        ).join();
-        reloadableServerResources.updateStaticRegistryTags();
-        EXPERIMENTAL_TAGS = TagCollector.grabExperimental(resourceManager);
-    }
-
-    private Main() {
-    }
-
-    public static void main(final String[] args) {
-        LOGGER.info("Running API generators...");
-        generate(Paths.get(args[0]), Generators.API);
-        // LOGGER.info("Running Server generators...");
-        // generate(Paths.get(args[1]), Generators.SERVER);
-    }
-
-    private static void generate(Path output, SourceGenerator[] generators) {
-        try {
-            if (Files.exists(output)) {
-                PathUtils.deleteDirectory(output);
-            }
-            Files.createDirectories(output);
-
-            for (final SourceGenerator generator : generators) {
-                generator.writeToFile(output);
-            }
-
-            LOGGER.info("Files written to {}", output.toAbsolutePath());
-        } catch (final Exception ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/types/GeneratedKeyType.java b/paper-api-generator/src/main/java/io/papermc/generator/types/GeneratedKeyType.java
deleted file mode 100644
index a0a214920b..0000000000
--- a/paper-api-generator/src/main/java/io/papermc/generator/types/GeneratedKeyType.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package io.papermc.generator.types;
-
-import com.google.common.collect.Sets;
-import com.squareup.javapoet.FieldSpec;
-import com.squareup.javapoet.JavaFile;
-import com.squareup.javapoet.MethodSpec;
-import com.squareup.javapoet.ParameterSpec;
-import com.squareup.javapoet.ParameterizedTypeName;
-import com.squareup.javapoet.TypeName;
-import com.squareup.javapoet.TypeSpec;
-import io.papermc.generator.Main;
-import io.papermc.generator.utils.Annotations;
-import io.papermc.generator.utils.CollectingContext;
-import io.papermc.generator.utils.Formatting;
-import io.papermc.generator.utils.Javadocs;
-import io.papermc.paper.registry.RegistryKey;
-import io.papermc.paper.registry.TypedKey;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.IdentityHashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.lang.model.SourceVersion;
-import net.kyori.adventure.key.Key;
-import net.minecraft.core.Holder;
-import net.minecraft.core.HolderLookup;
-import net.minecraft.core.Registry;
-import net.minecraft.core.RegistrySetBuilder;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.data.registries.VanillaRegistries;
-import net.minecraft.resources.ResourceKey;
-import net.minecraft.world.flag.FeatureElement;
-import net.minecraft.world.flag.FeatureFlags;
-import org.bukkit.MinecraftExperimental;
-import org.checkerframework.checker.nullness.qual.NonNull;
-import org.checkerframework.checker.nullness.qual.Nullable;
-import org.checkerframework.framework.qual.DefaultQualifier;
-
-import static com.squareup.javapoet.TypeSpec.classBuilder;
-import static io.papermc.generator.utils.Annotations.EXPERIMENTAL_API_ANNOTATION;
-import static io.papermc.generator.utils.Annotations.experimentalAnnotations;
-import static java.util.Objects.requireNonNull;
-import static javax.lang.model.element.Modifier.FINAL;
-import static javax.lang.model.element.Modifier.PRIVATE;
-import static javax.lang.model.element.Modifier.PUBLIC;
-import static javax.lang.model.element.Modifier.STATIC;
-
-@DefaultQualifier(NonNull.class)
-public class GeneratedKeyType<T, A> extends SimpleGenerator {
-
-    private static final Map<ResourceKey<? extends Registry<?>>, RegistrySetBuilder.RegistryBootstrap<?>> VANILLA_REGISTRY_ENTRIES = VanillaRegistries.BUILDER.entries.stream()
-            .collect(Collectors.toMap(RegistrySetBuilder.RegistryStub::key, RegistrySetBuilder.RegistryStub::bootstrap));
-
-    private static final Map<ResourceKey<? extends Registry<?>>, RegistrySetBuilder.RegistryBootstrap<?>> EXPERIMENTAL_REGISTRY_ENTRIES = Map.of(); // Update for Experimental API
-    private static final Map<RegistryKey<?>, String> REGISTRY_KEY_FIELD_NAMES;
-    static {
-        final Map<RegistryKey<?>, String> map = new HashMap<>();
-        try {
-            for (final Field field : RegistryKey.class.getFields()) {
-                if (!Modifier.isStatic(field.getModifiers()) || !Modifier.isFinal(field.getModifiers()) || field.getType() != RegistryKey.class) {
-                    continue;
-                }
-                map.put((RegistryKey<?>) field.get(null), field.getName());
-            }
-            REGISTRY_KEY_FIELD_NAMES = Map.copyOf(map);
-        } catch (final ReflectiveOperationException ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private static final String CREATE_JAVADOC = """
-        Creates a key for {@link $T} in the registry {@code $L}.
-        
-        @param key the value's key in the registry
-        @return a new typed key
-        """;
-
-    private final Class<A> apiType;
-    private final ResourceKey<? extends Registry<T>> registryKey;
-    private final RegistryKey<A> apiRegistryKey;
-    private final boolean publicCreateKeyMethod;
-
-    public GeneratedKeyType(final String keysClassName, final Class<A> apiType, final String pkg, final ResourceKey<? extends Registry<T>> registryKey, final RegistryKey<A> apiRegistryKey, final boolean publicCreateKeyMethod) {
-        super(keysClassName, pkg);
-        this.apiType = apiType;
-        this.registryKey = registryKey;
-        this.apiRegistryKey = apiRegistryKey;
-        this.publicCreateKeyMethod = publicCreateKeyMethod;
-    }
-
-    private MethodSpec.Builder createMethod(final TypeName returnType) {
-        final TypeName keyType = TypeName.get(Key.class);
-
-        final ParameterSpec keyParam = ParameterSpec.builder(keyType, "key", FINAL).build();
-        final MethodSpec.Builder create = MethodSpec.methodBuilder("create")
-            .addModifiers(this.publicCreateKeyMethod ? PUBLIC : PRIVATE, STATIC)
-            .addParameter(keyParam)
-            .addCode("return $T.create($T.$L, $N);", TypedKey.class, RegistryKey.class, requireNonNull(REGISTRY_KEY_FIELD_NAMES.get(this.apiRegistryKey), "Missing field for " + this.apiRegistryKey), keyParam)
-            .returns(returnType);
-        if (this.publicCreateKeyMethod) {
-            create.addJavadoc(CREATE_JAVADOC, this.apiType, this.registryKey.location().toString());
-        }
-        return create;
-    }
-
-    private TypeSpec.Builder keyHolderType() {
-        return classBuilder(this.className)
-            .addModifiers(PUBLIC, FINAL)
-            .addJavadoc(Javadocs.getVersionDependentClassHeader("{@link $T#$L}"), RegistryKey.class, REGISTRY_KEY_FIELD_NAMES.get(this.apiRegistryKey))
-            .addAnnotations(Annotations.CLASS_HEADER)
-            .addMethod(MethodSpec.constructorBuilder()
-                .addModifiers(PRIVATE)
-                .build()
-            );
-    }
-
-    @Deprecated
-    private static final Map<String, String> JUKEBOX_SONG_NAMES = Map.of(
-        "5", "FIVE",
-        "11", "ELEVEN",
-        "13", "THIRTEEN"
-    );
-
-    @Override
-    protected TypeSpec getTypeSpec() {
-        final TypeName typedKey = ParameterizedTypeName.get(TypedKey.class, this.apiType);
-
-        final TypeSpec.Builder typeBuilder = this.keyHolderType();
-        final MethodSpec.Builder createMethod = this.createMethod(typedKey);
-
-        final Registry<T> registry = Main.REGISTRY_ACCESS.lookupOrThrow(this.registryKey);
-        final Set<ResourceKey<T>> experimental = this.collectExperimentalKeys(registry);
-
-        boolean allExperimental = true;
-        for (final Holder.Reference<T> reference : registry.listElements().sorted(Formatting.alphabeticKeyOrder(reference -> reference.key().location().getPath())).toList()) {
-            final ResourceKey<T> key = reference.key();
-            final String keyPath = key.location().getPath();
-            String fieldName = Formatting.formatKeyAsField(keyPath);
-            if (!SourceVersion.isIdentifier(fieldName) && this.registryKey.equals(Registries.JUKEBOX_SONG) && JUKEBOX_SONG_NAMES.containsKey(fieldName)) {
-                fieldName = JUKEBOX_SONG_NAMES.get(fieldName);
-            }
-
-            final FieldSpec.Builder fieldBuilder = FieldSpec.builder(typedKey, fieldName, PUBLIC, STATIC, FINAL)
-                .initializer("$N(key($S))", createMethod.build(), keyPath)
-                .addJavadoc(Javadocs.getVersionDependentField("{@code $L}"), key.location().toString());
-            if (experimental.contains(key)) {
-                fieldBuilder.addAnnotations(experimentalAnnotations(null)); // Update for Experimental API
-            } else {
-                allExperimental = false;
-            }
-            typeBuilder.addField(fieldBuilder.build());
-        }
-        if (allExperimental) {
-            typeBuilder.addAnnotations(experimentalAnnotations(null)); // Update for Experimental API
-            createMethod.addAnnotations(experimentalAnnotations(null)); // Update for Experimental API
-        }
-        return typeBuilder.addMethod(createMethod.build()).build();
-    }
-
-    // todo at some point this should be per feature data pack not all merged
-    private Set<ResourceKey<T>> collectExperimentalKeys(final Registry<T> registry) {
-        if (FeatureElement.FILTERED_REGISTRIES.contains(registry.key())) {
-            return this.collectExperimentalKeysBuiltIn(registry);
-        } else {
-            return this.collectExperimentalKeysDataDriven(registry);
-        }
-    }
-
-    private Set<ResourceKey<T>> collectExperimentalKeysBuiltIn(final Registry<T> registry) {
-        final HolderLookup.RegistryLookup<T> filteredLookup = registry.filterElements(v -> {
-            return v instanceof final FeatureElement featureElement && FeatureFlags.isExperimental(featureElement.requiredFeatures()); // Update for Experimental API
-        });
-        return filteredLookup.listElementIds().collect(Collectors.toUnmodifiableSet());
-    }
-
-    @SuppressWarnings("unchecked")
-    private Set<ResourceKey<T>> collectExperimentalKeysDataDriven(final Registry<T> registry) {
-        final RegistrySetBuilder.@Nullable RegistryBootstrap<T> experimentalBootstrap = (RegistrySetBuilder.RegistryBootstrap<T>) EXPERIMENTAL_REGISTRY_ENTRIES.get(this.registryKey);
-        if (experimentalBootstrap == null) {
-            return Collections.emptySet();
-        }
-        final Set<ResourceKey<T>> experimental = Collections.newSetFromMap(new IdentityHashMap<>());
-        final CollectingContext<T> experimentalCollector = new CollectingContext<>(experimental, registry);
-        experimentalBootstrap.run(experimentalCollector);
-
-        final RegistrySetBuilder.@Nullable RegistryBootstrap<T> vanillaBootstrap = (RegistrySetBuilder.RegistryBootstrap<T>) VANILLA_REGISTRY_ENTRIES.get(this.registryKey);
-        if (vanillaBootstrap != null) {
-            final Set<ResourceKey<T>> vanilla = Collections.newSetFromMap(new IdentityHashMap<>());
-            final CollectingContext<T> vanillaCollector = new CollectingContext<>(vanilla, registry);
-            vanillaBootstrap.run(vanillaCollector);
-            return Sets.difference(experimental, vanilla);
-        }
-        return experimental;
-    }
-
-    @Override
-    protected JavaFile.Builder file(final JavaFile.Builder builder) {
-        return builder
-            .addStaticImport(Key.class, "key");
-    }
-}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/types/GeneratedTagKeyType.java b/paper-api-generator/src/main/java/io/papermc/generator/types/GeneratedTagKeyType.java
deleted file mode 100644
index 60e15ea64a..0000000000
--- a/paper-api-generator/src/main/java/io/papermc/generator/types/GeneratedTagKeyType.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package io.papermc.generator.types;
-
-import com.squareup.javapoet.FieldSpec;
-import com.squareup.javapoet.JavaFile;
-import com.squareup.javapoet.MethodSpec;
-import com.squareup.javapoet.ParameterSpec;
-import com.squareup.javapoet.ParameterizedTypeName;
-import com.squareup.javapoet.TypeName;
-import com.squareup.javapoet.TypeSpec;
-import io.papermc.generator.Main;
-import io.papermc.generator.utils.Annotations;
-import io.papermc.generator.utils.Formatting;
-import io.papermc.generator.utils.Javadocs;
-import io.papermc.paper.registry.RegistryKey;
-import io.papermc.paper.registry.tag.TagKey;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
-import net.kyori.adventure.key.Key;
-import net.minecraft.core.Registry;
-import net.minecraft.resources.ResourceKey;
-import org.bukkit.MinecraftExperimental;
-
-import static com.squareup.javapoet.TypeSpec.classBuilder;
-import static io.papermc.generator.utils.Annotations.EXPERIMENTAL_API_ANNOTATION;
-import static io.papermc.generator.utils.Annotations.experimentalAnnotations;
-import static java.util.Objects.requireNonNull;
-import static javax.lang.model.element.Modifier.FINAL;
-import static javax.lang.model.element.Modifier.PRIVATE;
-import static javax.lang.model.element.Modifier.PUBLIC;
-import static javax.lang.model.element.Modifier.STATIC;
-
-public class GeneratedTagKeyType<T, A> extends SimpleGenerator {
-
-    private static final Map<RegistryKey<?>, String> REGISTRY_KEY_FIELD_NAMES;
-    static {
-        final Map<RegistryKey<?>, String> map = new HashMap<>();
-        try {
-            for (final Field field : RegistryKey.class.getFields()) {
-                if (!Modifier.isStatic(field.getModifiers()) || !Modifier.isFinal(field.getModifiers()) || field.getType() != RegistryKey.class) {
-                    continue;
-                }
-                map.put((RegistryKey<?>) field.get(null), field.getName());
-            }
-            REGISTRY_KEY_FIELD_NAMES = Map.copyOf(map);
-        } catch (final ReflectiveOperationException ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private static final String CREATE_JAVADOC = """
-        Creates a tag key for {@link $T} in the registry {@code $L}.
-        
-        @param key the tag key's key
-        @return a new tag key
-        """;
-
-    private final Class<A> apiType;
-    private final ResourceKey<? extends Registry<T>> registryKey;
-    private final RegistryKey<A> apiRegistryKey;
-    private final boolean publicCreateKeyMethod;
-
-    public GeneratedTagKeyType(final String keysClassName, final Class<A> apiType, final String pkg, final ResourceKey<? extends Registry<T>> registryKey, final RegistryKey<A> apiRegistryKey, final boolean publicCreateKeyMethod) {
-        super(keysClassName, pkg);
-        this.apiType = apiType;
-        this.registryKey = registryKey;
-        this.apiRegistryKey = apiRegistryKey;
-        this.publicCreateKeyMethod = publicCreateKeyMethod;
-    }
-
-    private MethodSpec.Builder createMethod(final TypeName returnType) {
-        final TypeName keyType = TypeName.get(Key.class);
-
-        final ParameterSpec keyParam = ParameterSpec.builder(keyType, "key", FINAL).build();
-        final MethodSpec.Builder create = MethodSpec.methodBuilder("create")
-            .addModifiers(this.publicCreateKeyMethod ? PUBLIC : PRIVATE, STATIC)
-            .addParameter(keyParam)
-            .addCode("return $T.create($T.$L, $N);", TagKey.class, RegistryKey.class, requireNonNull(REGISTRY_KEY_FIELD_NAMES.get(this.apiRegistryKey), "Missing field for " + this.apiRegistryKey), keyParam)
-            .returns(returnType);
-        if (this.publicCreateKeyMethod) {
-            create.addAnnotation(EXPERIMENTAL_API_ANNOTATION); // TODO remove once not experimental
-            create.addJavadoc(CREATE_JAVADOC, this.apiType, this.registryKey.location().toString());
-        }
-        return create;
-    }
-
-    private TypeSpec.Builder keyHolderType() {
-        return classBuilder(this.className)
-            .addModifiers(PUBLIC, FINAL)
-            .addJavadoc(Javadocs.getVersionDependentClassHeader("{@link $T#$L}"), RegistryKey.class, REGISTRY_KEY_FIELD_NAMES.get(this.apiRegistryKey))
-            .addAnnotations(Annotations.CLASS_HEADER)
-            .addMethod(MethodSpec.constructorBuilder()
-                .addModifiers(PRIVATE)
-                .build()
-            );
-    }
-
-    @Override
-    protected TypeSpec getTypeSpec() {
-        final TypeName tagKey = ParameterizedTypeName.get(TagKey.class, this.apiType);
-
-        final TypeSpec.Builder typeBuilder = this.keyHolderType();
-        final MethodSpec.Builder createMethod = this.createMethod(tagKey);
-
-        final Registry<T> registry = Main.REGISTRY_ACCESS.lookupOrThrow(this.registryKey);
-
-        final AtomicBoolean allExperimental = new AtomicBoolean(true);
-        registry.listTagIds().sorted(Formatting.alphabeticKeyOrder(nmsTagKey -> nmsTagKey.location().getPath())).forEach(nmsTagKey -> {
-            final String fieldName = Formatting.formatKeyAsField(nmsTagKey.location().getPath());
-            final FieldSpec.Builder fieldBuilder = FieldSpec.builder(tagKey, fieldName, PUBLIC, STATIC, FINAL)
-                .initializer("$N(key($S))", createMethod.build(), nmsTagKey.location().getPath())
-                .addJavadoc(Javadocs.getVersionDependentField("{@code $L}"), "#" + nmsTagKey.location());
-            final String featureFlagName = Main.EXPERIMENTAL_TAGS.get(nmsTagKey);
-            if (featureFlagName != null) {
-                fieldBuilder.addAnnotations(experimentalAnnotations(MinecraftExperimental.Requires.valueOf(featureFlagName.toUpperCase(Locale.ENGLISH)))); // Update for Experimental API
-            } else {
-                allExperimental.set(false);
-            }
-            typeBuilder.addField(fieldBuilder.build());
-        });
-        if (allExperimental.get()) {
-            typeBuilder.addAnnotations(experimentalAnnotations(null)); // Update for Experimental API
-            createMethod.addAnnotations(experimentalAnnotations(null)); // Update for Experimental API
-        } else {
-            typeBuilder.addAnnotation(EXPERIMENTAL_API_ANNOTATION); // TODO experimental API
-        }
-        return typeBuilder.addMethod(createMethod.build()).build();
-    }
-
-    @Override
-    protected JavaFile.Builder file(final JavaFile.Builder builder) {
-        return builder
-            .addStaticImport(Key.class, "key");
-    }
-}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/utils/Annotations.java b/paper-api-generator/src/main/java/io/papermc/generator/utils/Annotations.java
deleted file mode 100644
index 977e4a1334..0000000000
--- a/paper-api-generator/src/main/java/io/papermc/generator/utils/Annotations.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package io.papermc.generator.utils;
-
-import com.squareup.javapoet.AnnotationSpec;
-import java.util.ArrayList;
-import java.util.List;
-
-import io.papermc.paper.generated.GeneratedFrom;
-import net.minecraft.SharedConstants;
-import org.bukkit.MinecraftExperimental;
-import org.jetbrains.annotations.ApiStatus;
-import org.jetbrains.annotations.Nullable;
-import org.jspecify.annotations.NullMarked;
-
-public final class Annotations {
-
-    public static List<AnnotationSpec> experimentalAnnotations(final MinecraftExperimental.@Nullable Requires requiredFeatureFlag) {
-        final List<AnnotationSpec> annotationSpecs = new ArrayList<>();
-        annotationSpecs.add(AnnotationSpec.builder(ApiStatus.Experimental.class).build());
-        if (requiredFeatureFlag != null) {
-            annotationSpecs.add(AnnotationSpec.builder(MinecraftExperimental.class)
-                .addMember("value", "$T.$L", MinecraftExperimental.Requires.class, requiredFeatureFlag.name())
-                .build());
-        } else {
-            annotationSpecs.add(AnnotationSpec.builder(MinecraftExperimental.class).build());
-        }
-        return annotationSpecs;
-    }
-
-    public static AnnotationSpec deprecatedVersioned(final @Nullable String version, final boolean forRemoval) {
-        final AnnotationSpec.Builder annotationSpec = AnnotationSpec.builder(Deprecated.class);
-        if (forRemoval) {
-            annotationSpec.addMember("forRemoval", "$L", true);
-        }
-        if (version != null) {
-            annotationSpec.addMember("since", "$S", version);
-        }
-
-        return annotationSpec.build();
-    }
-
-    public static AnnotationSpec scheduledRemoval(final @Nullable String version) {
-        return AnnotationSpec.builder(ApiStatus.ScheduledForRemoval.class)
-            .addMember("inVersion", "$S", version)
-            .build();
-    }
-
-    @ApiStatus.Experimental
-    public static final AnnotationSpec EXPERIMENTAL_API_ANNOTATION = AnnotationSpec.builder(ApiStatus.Experimental.class).build();
-    public static final AnnotationSpec NULL_MARKED = AnnotationSpec.builder(NullMarked.class).build();
-    private static final AnnotationSpec SUPPRESS_WARNINGS = AnnotationSpec.builder(SuppressWarnings.class)
-        .addMember("value", "$S", "unused")
-        .addMember("value", "$S", "SpellCheckingInspection")
-        .build();
-    private static final AnnotationSpec GENERATED_FROM = AnnotationSpec.builder(GeneratedFrom.class)
-        .addMember("value", "$S", SharedConstants.getCurrentVersion().getName())
-        .build();
-    public static final Iterable<AnnotationSpec> CLASS_HEADER = List.of(
-        SUPPRESS_WARNINGS,
-        GENERATED_FROM,
-        NULL_MARKED
-    );
-
-    private Annotations() {
-    }
-}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/utils/Formatting.java b/paper-api-generator/src/main/java/io/papermc/generator/utils/Formatting.java
deleted file mode 100644
index b703a32455..0000000000
--- a/paper-api-generator/src/main/java/io/papermc/generator/utils/Formatting.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package io.papermc.generator.utils;
-
-import java.util.Optional;
-import org.apache.commons.lang3.math.NumberUtils;
-import java.util.Comparator;
-import java.util.Locale;
-import java.util.OptionalInt;
-import java.util.function.Function;
-import java.util.regex.Pattern;
-
-public final class Formatting {
-
-    private static final Pattern ILLEGAL_FIELD_CHARACTERS = Pattern.compile("[.-/]");
-
-    public static String formatKeyAsField(String path) {
-        return ILLEGAL_FIELD_CHARACTERS.matcher(path.toUpperCase(Locale.ROOT)).replaceAll("_");
-    }
-
-    public static Optional<String> formatTagKey(String tagDir, String resourcePath) {
-        int tagsIndex = resourcePath.indexOf(tagDir);
-        int dotIndex = resourcePath.lastIndexOf('.');
-        if (tagsIndex == -1 || dotIndex == -1) {
-            return Optional.empty();
-        }
-        return Optional.of(resourcePath.substring(tagsIndex + tagDir.length() + 1, dotIndex)); // namespace/tags/registry_key/[tag_key].json
-    }
-
-    public static Comparator<String> ALPHABETIC_KEY_ORDER = alphabeticKeyOrder(path -> path);
-
-    public static <T> Comparator<T> alphabeticKeyOrder(Function<T, String> mapper) {
-        return (o1, o2) -> {
-            String path1 = mapper.apply(o1);
-            String path2 = mapper.apply(o2);
-
-            OptionalInt trailingInt1 = tryParseTrailingInt(path1);
-            OptionalInt trailingInt2 = tryParseTrailingInt(path2);
-
-            if (trailingInt1.isPresent() && trailingInt2.isPresent()) {
-                return Integer.compare(trailingInt1.getAsInt(), trailingInt2.getAsInt());
-            }
-
-            return path1.compareTo(path2);
-        };
-    }
-
-    private static OptionalInt tryParseTrailingInt(String path) {
-        int delimiterIndex = path.lastIndexOf('_');
-        if (delimiterIndex != -1) {
-            String score = path.substring(delimiterIndex + 1);
-            if (NumberUtils.isDigits(score)) {
-                return OptionalInt.of(Integer.parseInt(score));
-            }
-        }
-        return OptionalInt.empty();
-    }
-
-    private Formatting() {
-    }
-}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/utils/Javadocs.java b/paper-api-generator/src/main/java/io/papermc/generator/utils/Javadocs.java
deleted file mode 100644
index 33536c8311..0000000000
--- a/paper-api-generator/src/main/java/io/papermc/generator/utils/Javadocs.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package io.papermc.generator.utils;
-
-public final class Javadocs {
-
-    public static String getVersionDependentClassHeader(String headerIdentifier) {
-        return """
-        Vanilla keys for %s.
-        
-        @apiNote The fields provided here are a direct representation of
-        what is available from the vanilla game source. They may be
-        changed (including removals) on any Minecraft version
-        bump, so cross-version compatibility is not provided on the
-        same level as it is on most of the other API.
-        """.formatted(headerIdentifier);
-    }
-
-    public static String getVersionDependentField(String headerIdentifier) {
-        return """
-        %s
-        
-        @apiNote This field is version-dependant and may be removed in future Minecraft versions
-        """.formatted(headerIdentifier);
-    }
-
-    private Javadocs() {
-    }
-}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/utils/TagCollector.java b/paper-api-generator/src/main/java/io/papermc/generator/utils/TagCollector.java
deleted file mode 100644
index 546e136b4a..0000000000
--- a/paper-api-generator/src/main/java/io/papermc/generator/utils/TagCollector.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package io.papermc.generator.utils;
-
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
-import com.mojang.logging.LogUtils;
-import io.papermc.generator.Main;
-import java.util.Collections;
-import java.util.IdentityHashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.BiConsumer;
-import net.minecraft.core.Registry;
-import net.minecraft.core.RegistryAccess;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.resources.ResourceKey;
-import net.minecraft.server.packs.PackResources;
-import net.minecraft.server.packs.PackType;
-import net.minecraft.server.packs.repository.BuiltInPackSource;
-import net.minecraft.server.packs.resources.MultiPackResourceManager;
-import net.minecraft.tags.TagKey;
-import org.slf4j.Logger;
-
-// collect all the tags by grabbing the json from the data-packs
-// another (probably) way is to hook into the data generator like the typed keys generator
-public final class TagCollector {
-
-    private static final Logger LOGGER = LogUtils.getLogger();
-
-    public static Map<TagKey<?>, String> grabExperimental(final MultiPackResourceManager resourceManager) {
-        Map<TagKey<?>, String> result = new IdentityHashMap<>();
-
-        // collect all vanilla tags
-        Multimap<ResourceKey<? extends Registry<?>>, String> vanillaTags = HashMultimap.create();
-        PackResources vanillaPack = resourceManager.listPacks()
-            .filter(packResources -> packResources.packId().equals(BuiltInPackSource.VANILLA_ID))
-            .findFirst()
-            .orElseThrow();
-        collectFromPack(vanillaPack, (entry, path) -> vanillaTags.put(entry.key(), path));
-
-        // then distinct with other data-pack tags to know for sure newly created tags and so experimental one
-        resourceManager.listPacks().forEach(pack -> {
-            String packId = pack.packId();
-            if (packId.equals(BuiltInPackSource.VANILLA_ID)) return;
-
-            collectFromPack(pack, (entry, path) -> {
-                if (vanillaTags.get(entry.key()).contains(path)) {
-                    return;
-                }
-
-                result.put(entry.value().listTagIds()
-                    .filter(tagKey -> tagKey.location().getPath().equals(path))
-                    .findFirst()
-                    .orElseThrow(), packId);
-            });
-        });
-        return Collections.unmodifiableMap(result);
-    }
-
-    private static void collectFromPack(PackResources pack, BiConsumer<RegistryAccess.RegistryEntry<?>, String> output) {
-        Set<String> namespaces = pack.getNamespaces(PackType.SERVER_DATA);
-
-        for (String namespace : namespaces) {
-            Main.REGISTRY_ACCESS.registries().forEach(entry -> {
-                // this is probably expensive but can't find another way around and data-pack loader has similar logic
-                // the issue is that registry key can have parent/key (and custom folder too) but tag key can also have parent/key so parsing become a mess
-                // without having at least one of the two values
-                String tagDir = Registries.tagsDirPath(entry.key());
-                pack.listResources(PackType.SERVER_DATA, namespace, tagDir, (id, supplier) -> {
-                    Formatting.formatTagKey(tagDir, id.getPath()).ifPresentOrElse(path -> output.accept(entry, path), () -> {
-                        LOGGER.warn("Unable to parse the path: {}/{}/{}.json in the data-pack {} into a tag key", namespace, tagDir, id.getPath(), pack.packId());
-                    });
-                });
-            });
-        }
-    }
-
-    private TagCollector() {
-    }
-}
diff --git a/paper-api/build.gradle.kts b/paper-api/build.gradle.kts
index e86b16b6ce..e0e42ad1d4 100644
--- a/paper-api/build.gradle.kts
+++ b/paper-api/build.gradle.kts
@@ -93,16 +93,16 @@ dependencies {
     testRuntimeOnly("org.junit.platform:junit-platform-launcher")
 }
 
-val generatedApiPath: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath()
+val generatedDir: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath()
 idea {
     module {
-        generatedSourceDirs.add(generatedApiPath.toFile())
+        generatedSourceDirs.add(generatedDir.toFile())
     }
 }
 sourceSets {
     main {
         java {
-            srcDir(generatedApiPath)
+            srcDir(generatedDir)
         }
     }
 }
@@ -228,21 +228,23 @@ tasks.compileTestJava {
     options.compilerArgs.add("-parameters")
 }
 
-val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks.ScanJarForBadCalls::class) {
+val scanJarForBadCalls by tasks.registering(io.papermc.paperweight.tasks.ScanJarForBadCalls::class) {
     badAnnotations.add("Lio/papermc/paper/annotation/DoNotUse;")
     jarToScan.set(tasks.jar.flatMap { it.archiveFile })
     classpath.from(configurations.compileClasspath)
 }
 tasks.check {
-    dependsOn(scanJar)
+    dependsOn(scanJarForBadCalls)
 }
 
-val scanJarForOldGeneratedCode = tasks.register("scanJarForOldGeneratedCode", io.papermc.paperweight.tasks.ScanJarForOldGeneratedCode::class) {
-    mcVersion.set(providers.gradleProperty("mcVersion"))
-    annotation.set("Lio/papermc/paper/generated/GeneratedFrom;")
-    jarToScan.set(tasks.jar.flatMap { it.archiveFile })
-    classpath.from(configurations.compileClasspath)
-}
-tasks.check {
-    dependsOn(scanJarForOldGeneratedCode)
+if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
+    val scanJarForOldGeneratedCode by tasks.registering(io.papermc.paperweight.tasks.ScanJarForOldGeneratedCode::class) {
+        mcVersion.set(providers.gradleProperty("mcVersion"))
+        annotation.set("Lio/papermc/paper/generated/GeneratedFrom;")
+        jarToScan.set(tasks.jar.flatMap { it.archiveFile })
+        classpath.from(configurations.compileClasspath)
+    }
+    tasks.check {
+        dependsOn(scanJarForOldGeneratedCode)
+    }
 }
diff --git a/paper-api/src/generated/java/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/paper-api/src/generated/java/com/destroystokyo/paper/entity/ai/VanillaGoal.java
index f15a7b4471..dd80d9f8fa 100644
--- a/paper-api/src/generated/java/com/destroystokyo/paper/entity/ai/VanillaGoal.java
+++ b/paper-api/src/generated/java/com/destroystokyo/paper/entity/ai/VanillaGoal.java
@@ -66,8 +66,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public interface VanillaGoal<T extends Mob> extends Goal<T> {
     GoalKey<AbstractHorse> RANDOM_STAND = create("random_stand", AbstractHorse.class);
 
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/AttributeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/AttributeKeys.java
index 3eef52b64f..a21f210825 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/AttributeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/AttributeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class AttributeKeys {
     /**
      * {@code minecraft:armor}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/BannerPatternKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/BannerPatternKeys.java
index bc1f64a8bb..c52e7ddb64 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/BannerPatternKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/BannerPatternKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class BannerPatternKeys {
     /**
      * {@code minecraft:base}
@@ -330,7 +330,7 @@ public final class BannerPatternKeys {
     }
 
     /**
-     * Creates a key for {@link PatternType} in the registry {@code minecraft:banner_pattern}.
+     * Creates a typed key for {@link PatternType} in the registry {@code minecraft:banner_pattern}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/BiomeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/BiomeKeys.java
index e87e00879f..d77de6b4ab 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/BiomeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/BiomeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class BiomeKeys {
     /**
      * {@code minecraft:badlands}
@@ -484,7 +484,7 @@ public final class BiomeKeys {
     }
 
     /**
-     * Creates a key for {@link Biome} in the registry {@code minecraft:worldgen/biome}.
+     * Creates a typed key for {@link Biome} in the registry {@code minecraft:worldgen/biome}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/BlockTypeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/BlockTypeKeys.java
index f0504b1526..43be064110 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/BlockTypeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/BlockTypeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class BlockTypeKeys {
     /**
      * {@code minecraft:acacia_button}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/CatVariantKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/CatVariantKeys.java
index 607aa1aee1..b836febfac 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/CatVariantKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/CatVariantKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class CatVariantKeys {
     /**
      * {@code minecraft:all_black}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/DamageTypeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/DamageTypeKeys.java
index 47e9afe540..b00db9c7c6 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/DamageTypeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/DamageTypeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class DamageTypeKeys {
     /**
      * {@code minecraft:arrow}
@@ -372,7 +372,7 @@ public final class DamageTypeKeys {
     }
 
     /**
-     * Creates a key for {@link DamageType} in the registry {@code minecraft:damage_type}.
+     * Creates a typed key for {@link DamageType} in the registry {@code minecraft:damage_type}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/DataComponentTypeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/DataComponentTypeKeys.java
new file mode 100644
index 0000000000..7471630571
--- /dev/null
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/DataComponentTypeKeys.java
@@ -0,0 +1,503 @@
+package io.papermc.paper.registry.keys;
+
+import static net.kyori.adventure.key.Key.key;
+
+import io.papermc.paper.datacomponent.DataComponentType;
+import io.papermc.paper.generated.GeneratedFrom;
+import io.papermc.paper.registry.RegistryKey;
+import io.papermc.paper.registry.TypedKey;
+import net.kyori.adventure.key.Key;
+import org.jspecify.annotations.NullMarked;
+
+/**
+ * Vanilla keys for {@link RegistryKey#DATA_COMPONENT_TYPE}.
+ *
+ * @apiNote The fields provided here are a direct representation of
+ * what is available from the vanilla game source. They may be
+ * changed (including removals) on any Minecraft version
+ * bump, so cross-version compatibility is not provided on the
+ * same level as it is on most of the other API.
+ */
+@SuppressWarnings({
+        "unused",
+        "SpellCheckingInspection"
+})
+@NullMarked
+@GeneratedFrom("1.21.4")
+public final class DataComponentTypeKeys {
+    /**
+     * {@code minecraft:attribute_modifiers}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> ATTRIBUTE_MODIFIERS = create(key("attribute_modifiers"));
+
+    /**
+     * {@code minecraft:banner_patterns}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> BANNER_PATTERNS = create(key("banner_patterns"));
+
+    /**
+     * {@code minecraft:base_color}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> BASE_COLOR = create(key("base_color"));
+
+    /**
+     * {@code minecraft:bees}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> BEES = create(key("bees"));
+
+    /**
+     * {@code minecraft:block_entity_data}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> BLOCK_ENTITY_DATA = create(key("block_entity_data"));
+
+    /**
+     * {@code minecraft:block_state}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> BLOCK_STATE = create(key("block_state"));
+
+    /**
+     * {@code minecraft:bucket_entity_data}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> BUCKET_ENTITY_DATA = create(key("bucket_entity_data"));
+
+    /**
+     * {@code minecraft:bundle_contents}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> BUNDLE_CONTENTS = create(key("bundle_contents"));
+
+    /**
+     * {@code minecraft:can_break}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CAN_BREAK = create(key("can_break"));
+
+    /**
+     * {@code minecraft:can_place_on}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CAN_PLACE_ON = create(key("can_place_on"));
+
+    /**
+     * {@code minecraft:charged_projectiles}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CHARGED_PROJECTILES = create(key("charged_projectiles"));
+
+    /**
+     * {@code minecraft:consumable}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CONSUMABLE = create(key("consumable"));
+
+    /**
+     * {@code minecraft:container}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CONTAINER = create(key("container"));
+
+    /**
+     * {@code minecraft:container_loot}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CONTAINER_LOOT = create(key("container_loot"));
+
+    /**
+     * {@code minecraft:creative_slot_lock}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CREATIVE_SLOT_LOCK = create(key("creative_slot_lock"));
+
+    /**
+     * {@code minecraft:custom_data}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CUSTOM_DATA = create(key("custom_data"));
+
+    /**
+     * {@code minecraft:custom_model_data}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CUSTOM_MODEL_DATA = create(key("custom_model_data"));
+
+    /**
+     * {@code minecraft:custom_name}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> CUSTOM_NAME = create(key("custom_name"));
+
+    /**
+     * {@code minecraft:damage}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> DAMAGE = create(key("damage"));
+
+    /**
+     * {@code minecraft:damage_resistant}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> DAMAGE_RESISTANT = create(key("damage_resistant"));
+
+    /**
+     * {@code minecraft:death_protection}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> DEATH_PROTECTION = create(key("death_protection"));
+
+    /**
+     * {@code minecraft:debug_stick_state}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> DEBUG_STICK_STATE = create(key("debug_stick_state"));
+
+    /**
+     * {@code minecraft:dyed_color}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> DYED_COLOR = create(key("dyed_color"));
+
+    /**
+     * {@code minecraft:enchantable}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> ENCHANTABLE = create(key("enchantable"));
+
+    /**
+     * {@code minecraft:enchantment_glint_override}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> ENCHANTMENT_GLINT_OVERRIDE = create(key("enchantment_glint_override"));
+
+    /**
+     * {@code minecraft:enchantments}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> ENCHANTMENTS = create(key("enchantments"));
+
+    /**
+     * {@code minecraft:entity_data}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> ENTITY_DATA = create(key("entity_data"));
+
+    /**
+     * {@code minecraft:equippable}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> EQUIPPABLE = create(key("equippable"));
+
+    /**
+     * {@code minecraft:firework_explosion}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> FIREWORK_EXPLOSION = create(key("firework_explosion"));
+
+    /**
+     * {@code minecraft:fireworks}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> FIREWORKS = create(key("fireworks"));
+
+    /**
+     * {@code minecraft:food}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> FOOD = create(key("food"));
+
+    /**
+     * {@code minecraft:glider}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> GLIDER = create(key("glider"));
+
+    /**
+     * {@code minecraft:hide_additional_tooltip}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> HIDE_ADDITIONAL_TOOLTIP = create(key("hide_additional_tooltip"));
+
+    /**
+     * {@code minecraft:hide_tooltip}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> HIDE_TOOLTIP = create(key("hide_tooltip"));
+
+    /**
+     * {@code minecraft:instrument}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> INSTRUMENT = create(key("instrument"));
+
+    /**
+     * {@code minecraft:intangible_projectile}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> INTANGIBLE_PROJECTILE = create(key("intangible_projectile"));
+
+    /**
+     * {@code minecraft:item_model}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> ITEM_MODEL = create(key("item_model"));
+
+    /**
+     * {@code minecraft:item_name}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> ITEM_NAME = create(key("item_name"));
+
+    /**
+     * {@code minecraft:jukebox_playable}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> JUKEBOX_PLAYABLE = create(key("jukebox_playable"));
+
+    /**
+     * {@code minecraft:lock}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> LOCK = create(key("lock"));
+
+    /**
+     * {@code minecraft:lodestone_tracker}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> LODESTONE_TRACKER = create(key("lodestone_tracker"));
+
+    /**
+     * {@code minecraft:lore}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> LORE = create(key("lore"));
+
+    /**
+     * {@code minecraft:map_color}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> MAP_COLOR = create(key("map_color"));
+
+    /**
+     * {@code minecraft:map_decorations}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> MAP_DECORATIONS = create(key("map_decorations"));
+
+    /**
+     * {@code minecraft:map_id}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> MAP_ID = create(key("map_id"));
+
+    /**
+     * {@code minecraft:map_post_processing}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> MAP_POST_PROCESSING = create(key("map_post_processing"));
+
+    /**
+     * {@code minecraft:max_damage}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> MAX_DAMAGE = create(key("max_damage"));
+
+    /**
+     * {@code minecraft:max_stack_size}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> MAX_STACK_SIZE = create(key("max_stack_size"));
+
+    /**
+     * {@code minecraft:note_block_sound}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> NOTE_BLOCK_SOUND = create(key("note_block_sound"));
+
+    /**
+     * {@code minecraft:ominous_bottle_amplifier}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> OMINOUS_BOTTLE_AMPLIFIER = create(key("ominous_bottle_amplifier"));
+
+    /**
+     * {@code minecraft:pot_decorations}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> POT_DECORATIONS = create(key("pot_decorations"));
+
+    /**
+     * {@code minecraft:potion_contents}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> POTION_CONTENTS = create(key("potion_contents"));
+
+    /**
+     * {@code minecraft:profile}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> PROFILE = create(key("profile"));
+
+    /**
+     * {@code minecraft:rarity}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> RARITY = create(key("rarity"));
+
+    /**
+     * {@code minecraft:recipes}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> RECIPES = create(key("recipes"));
+
+    /**
+     * {@code minecraft:repair_cost}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> REPAIR_COST = create(key("repair_cost"));
+
+    /**
+     * {@code minecraft:repairable}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> REPAIRABLE = create(key("repairable"));
+
+    /**
+     * {@code minecraft:stored_enchantments}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> STORED_ENCHANTMENTS = create(key("stored_enchantments"));
+
+    /**
+     * {@code minecraft:suspicious_stew_effects}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> SUSPICIOUS_STEW_EFFECTS = create(key("suspicious_stew_effects"));
+
+    /**
+     * {@code minecraft:tool}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> TOOL = create(key("tool"));
+
+    /**
+     * {@code minecraft:tooltip_style}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> TOOLTIP_STYLE = create(key("tooltip_style"));
+
+    /**
+     * {@code minecraft:trim}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> TRIM = create(key("trim"));
+
+    /**
+     * {@code minecraft:unbreakable}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> UNBREAKABLE = create(key("unbreakable"));
+
+    /**
+     * {@code minecraft:use_cooldown}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> USE_COOLDOWN = create(key("use_cooldown"));
+
+    /**
+     * {@code minecraft:use_remainder}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> USE_REMAINDER = create(key("use_remainder"));
+
+    /**
+     * {@code minecraft:writable_book_content}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> WRITABLE_BOOK_CONTENT = create(key("writable_book_content"));
+
+    /**
+     * {@code minecraft:written_book_content}
+     *
+     * @apiNote This field is version-dependant and may be removed in future Minecraft versions
+     */
+    public static final TypedKey<DataComponentType> WRITTEN_BOOK_CONTENT = create(key("written_book_content"));
+
+    private DataComponentTypeKeys() {
+    }
+
+    private static TypedKey<DataComponentType> create(final Key key) {
+        return TypedKey.create(RegistryKey.DATA_COMPONENT_TYPE, key);
+    }
+}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/EnchantmentKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/EnchantmentKeys.java
index ec7837c8ec..dd90725182 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/EnchantmentKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/EnchantmentKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class EnchantmentKeys {
     /**
      * {@code minecraft:aqua_affinity}
@@ -323,7 +323,7 @@ public final class EnchantmentKeys {
     }
 
     /**
-     * Creates a key for {@link Enchantment} in the registry {@code minecraft:enchantment}.
+     * Creates a typed key for {@link Enchantment} in the registry {@code minecraft:enchantment}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/FluidKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/FluidKeys.java
index faf98ef6d6..3a0a5a6a18 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/FluidKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/FluidKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class FluidKeys {
     /**
      * {@code minecraft:empty}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/FrogVariantKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/FrogVariantKeys.java
index b70f508ebc..d9c589da74 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/FrogVariantKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/FrogVariantKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class FrogVariantKeys {
     /**
      * {@code minecraft:cold}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/GameEventKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/GameEventKeys.java
index 3477ccb14c..276691aea4 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/GameEventKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/GameEventKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class GameEventKeys {
     /**
      * {@code minecraft:block_activate}
@@ -449,7 +449,7 @@ public final class GameEventKeys {
     }
 
     /**
-     * Creates a key for {@link GameEvent} in the registry {@code minecraft:game_event}.
+     * Creates a typed key for {@link GameEvent} in the registry {@code minecraft:game_event}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/InstrumentKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/InstrumentKeys.java
index 391d9b059f..e0eac44e6e 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/InstrumentKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/InstrumentKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class InstrumentKeys {
     /**
      * {@code minecraft:admire_goat_horn}
@@ -85,7 +85,7 @@ public final class InstrumentKeys {
     }
 
     /**
-     * Creates a key for {@link MusicInstrument} in the registry {@code minecraft:instrument}.
+     * Creates a typed key for {@link MusicInstrument} in the registry {@code minecraft:instrument}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/ItemTypeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/ItemTypeKeys.java
index 75f9a1cc63..3d000043bf 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/ItemTypeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/ItemTypeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class ItemTypeKeys {
     /**
      * {@code minecraft:acacia_boat}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/JukeboxSongKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/JukeboxSongKeys.java
index d86ad9bf29..0d0e6484c6 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/JukeboxSongKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/JukeboxSongKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class JukeboxSongKeys {
     /**
      * {@code minecraft:11}
@@ -162,7 +162,7 @@ public final class JukeboxSongKeys {
     }
 
     /**
-     * Creates a key for {@link JukeboxSong} in the registry {@code minecraft:jukebox_song}.
+     * Creates a typed key for {@link JukeboxSong} in the registry {@code minecraft:jukebox_song}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/MapDecorationTypeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/MapDecorationTypeKeys.java
index fbf67d6759..2d454bf31b 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/MapDecorationTypeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/MapDecorationTypeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class MapDecorationTypeKeys {
     /**
      * {@code minecraft:banner_black}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/MenuTypeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/MenuTypeKeys.java
index 06c94936f2..6362f4f169 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/MenuTypeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/MenuTypeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class MenuTypeKeys {
     /**
      * {@code minecraft:anvil}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/MobEffectKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/MobEffectKeys.java
index 58b9c179f0..fd9e18a610 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/MobEffectKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/MobEffectKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class MobEffectKeys {
     /**
      * {@code minecraft:absorption}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/PaintingVariantKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/PaintingVariantKeys.java
index 119dca4831..8377fc63bb 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/PaintingVariantKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/PaintingVariantKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class PaintingVariantKeys {
     /**
      * {@code minecraft:alban}
@@ -379,7 +379,7 @@ public final class PaintingVariantKeys {
     }
 
     /**
-     * Creates a key for {@link Art} in the registry {@code minecraft:painting_variant}.
+     * Creates a typed key for {@link Art} in the registry {@code minecraft:painting_variant}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/SoundEventKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/SoundEventKeys.java
index 9cc0ae85b8..6b4facb860 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/SoundEventKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/SoundEventKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class SoundEventKeys {
     /**
      * {@code minecraft:ambient.basalt_deltas.additions}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/StructureKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/StructureKeys.java
index 9919f556b3..9bec418741 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/StructureKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/StructureKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class StructureKeys {
     /**
      * {@code minecraft:ancient_city}
@@ -267,7 +267,7 @@ public final class StructureKeys {
     }
 
     /**
-     * Creates a key for {@link Structure} in the registry {@code minecraft:worldgen/structure}.
+     * Creates a typed key for {@link Structure} in the registry {@code minecraft:worldgen/structure}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/StructureTypeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/StructureTypeKeys.java
index 79be3249e5..54eed2a22e 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/StructureTypeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/StructureTypeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class StructureTypeKeys {
     /**
      * {@code minecraft:buried_treasure}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/TrimMaterialKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/TrimMaterialKeys.java
index c9a9759074..a6f87c759f 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/TrimMaterialKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/TrimMaterialKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class TrimMaterialKeys {
     /**
      * {@code minecraft:amethyst}
@@ -106,7 +106,7 @@ public final class TrimMaterialKeys {
     }
 
     /**
-     * Creates a key for {@link TrimMaterial} in the registry {@code minecraft:trim_material}.
+     * Creates a typed key for {@link TrimMaterial} in the registry {@code minecraft:trim_material}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/TrimPatternKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/TrimPatternKeys.java
index a7f2c63410..96e0893112 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/TrimPatternKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/TrimPatternKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class TrimPatternKeys {
     /**
      * {@code minecraft:bolt}
@@ -155,7 +155,7 @@ public final class TrimPatternKeys {
     }
 
     /**
-     * Creates a key for {@link TrimPattern} in the registry {@code minecraft:trim_pattern}.
+     * Creates a typed key for {@link TrimPattern} in the registry {@code minecraft:trim_pattern}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/VillagerProfessionKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/VillagerProfessionKeys.java
index 860e770d44..380cf78fbe 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/VillagerProfessionKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/VillagerProfessionKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class VillagerProfessionKeys {
     /**
      * {@code minecraft:armorer}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/VillagerTypeKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/VillagerTypeKeys.java
index 1b9a669d4c..2535ce57df 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/VillagerTypeKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/VillagerTypeKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class VillagerTypeKeys {
     /**
      * {@code minecraft:desert}
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/WolfVariantKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/WolfVariantKeys.java
index 7962d0fae3..97968091be 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/WolfVariantKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/WolfVariantKeys.java
@@ -22,8 +22,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 public final class WolfVariantKeys {
     /**
      * {@code minecraft:ashen}
@@ -92,7 +92,7 @@ public final class WolfVariantKeys {
     }
 
     /**
-     * Creates a key for {@link Wolf.Variant} in the registry {@code minecraft:wolf_variant}.
+     * Creates a typed key for {@link Wolf.Variant} in the registry {@code minecraft:wolf_variant}.
      *
      * @param key the value's key in the registry
      * @return a new typed key
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BannerPatternTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BannerPatternTagKeys.java
index 5e1c93327d..7ea99ea0d2 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BannerPatternTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BannerPatternTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#BANNER_PATTERN}.
+ * Vanilla tag keys for {@link RegistryKey#BANNER_PATTERN}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class BannerPatternTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BiomeTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BiomeTagKeys.java
index acc82a5dfb..7cfd7b2396 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BiomeTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BiomeTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#BIOME}.
+ * Vanilla tag keys for {@link RegistryKey#BIOME}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class BiomeTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BlockTypeTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BlockTypeTagKeys.java
index af2a45f63a..064d491d4d 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BlockTypeTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/BlockTypeTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#BLOCK}.
+ * Vanilla tag keys for {@link RegistryKey#BLOCK}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class BlockTypeTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/CatVariantTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/CatVariantTagKeys.java
index 17a43aa9eb..fb1d555d84 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/CatVariantTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/CatVariantTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#CAT_VARIANT}.
+ * Vanilla tag keys for {@link RegistryKey#CAT_VARIANT}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class CatVariantTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java
index d70cb03974..9056e1781e 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#DAMAGE_TYPE}.
+ * Vanilla tag keys for {@link RegistryKey#DAMAGE_TYPE}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class DamageTypeTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/EnchantmentTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/EnchantmentTagKeys.java
index cf5a921cdb..9df4e78b7b 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/EnchantmentTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/EnchantmentTagKeys.java
@@ -12,7 +12,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#ENCHANTMENT}.
+ * Vanilla tag keys for {@link RegistryKey#ENCHANTMENT}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -24,8 +24,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class EnchantmentTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/EntityTypeTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/EntityTypeTagKeys.java
index 5a671ff8be..5cf82fcaa3 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/EntityTypeTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/EntityTypeTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#ENTITY_TYPE}.
+ * Vanilla tag keys for {@link RegistryKey#ENTITY_TYPE}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class EntityTypeTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/FluidTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/FluidTagKeys.java
index 4a33d3e87e..9a9766b414 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/FluidTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/FluidTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#FLUID}.
+ * Vanilla tag keys for {@link RegistryKey#FLUID}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class FluidTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/GameEventTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/GameEventTagKeys.java
index 3cb6d6e1e0..9687694efa 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/GameEventTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/GameEventTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#GAME_EVENT}.
+ * Vanilla tag keys for {@link RegistryKey#GAME_EVENT}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class GameEventTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/InstrumentTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/InstrumentTagKeys.java
index 527fb77610..47efa1e94e 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/InstrumentTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/InstrumentTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#INSTRUMENT}.
+ * Vanilla tag keys for {@link RegistryKey#INSTRUMENT}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class InstrumentTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/ItemTypeTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/ItemTypeTagKeys.java
index bf43d9af90..a03c75eec8 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/ItemTypeTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/ItemTypeTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#ITEM}.
+ * Vanilla tag keys for {@link RegistryKey#ITEM}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class ItemTypeTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/PaintingVariantTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/PaintingVariantTagKeys.java
index 50dac36d1c..3c29df14e3 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/PaintingVariantTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/PaintingVariantTagKeys.java
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#PAINTING_VARIANT}.
+ * Vanilla tag keys for {@link RegistryKey#PAINTING_VARIANT}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -23,8 +23,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class PaintingVariantTagKeys {
     /**
diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/StructureTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/StructureTagKeys.java
index 5043b933d3..24de63baad 100644
--- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/StructureTagKeys.java
+++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/StructureTagKeys.java
@@ -12,7 +12,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jspecify.annotations.NullMarked;
 
 /**
- * Vanilla keys for {@link RegistryKey#STRUCTURE}.
+ * Vanilla tag keys for {@link RegistryKey#STRUCTURE}.
  *
  * @apiNote The fields provided here are a direct representation of
  * what is available from the vanilla game source. They may be
@@ -24,8 +24,8 @@ import org.jspecify.annotations.NullMarked;
         "unused",
         "SpellCheckingInspection"
 })
-@GeneratedFrom("1.21.4")
 @NullMarked
+@GeneratedFrom("1.21.4")
 @ApiStatus.Experimental
 public final class StructureTagKeys {
     /**
diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java
index aa71271632..c078c04e97 100644
--- a/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java
+++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java
@@ -63,21 +63,76 @@ import static java.util.Objects.requireNonNull;
 @ApiStatus.Experimental
 public final class DataComponentTypes {
 
+    // Start generate - DataComponentTypes
+    // @GeneratedFrom 1.21.4
     /**
-     * Controls the maximum stacking size of this item.
-     * <br>
-     * Values greater than 1 are mutually exclusive with the {@link #MAX_DAMAGE} component.
+     * Holds attribute modifiers applied to any item,
+     * if not set, has an implicit default value based on the item type's
+     * default attributes (e.g. attack damage for weapons).
      */
-    public static final DataComponentType.Valued<@IntRange(from = 1, to = 99) Integer> MAX_STACK_SIZE = valued("max_stack_size");
+    public static final DataComponentType.Valued<ItemAttributeModifiers> ATTRIBUTE_MODIFIERS = valued("attribute_modifiers");
+
     /**
-     * Controls the maximum amount of damage than an item can take,
-     * if not present, the item cannot be damaged.
-     * <br>
-     * Mutually exclusive with the {@link #MAX_STACK_SIZE} component greater than 1.
+     * Stores the additional patterns applied to a Banner or Shield.
+     */
+    public static final DataComponentType.Valued<BannerPatternLayers> BANNER_PATTERNS = valued("banner_patterns");
+
+    /**
+     * Stores the base color for a Shield.
+     */
+    public static final DataComponentType.Valued<DyeColor> BASE_COLOR = valued("base_color");
+
+    /**
+     * Holds block state properties to apply when placing a block.
+     */
+    public static final DataComponentType.Valued<BlockItemDataProperties> BLOCK_DATA = valued("block_state");
+
+    /**
+     * Holds all items stored inside a Bundle.
+     * If removed, items cannot be added to the Bundle.
+     */
+    public static final DataComponentType.Valued<BundleContents> BUNDLE_CONTENTS = valued("bundle_contents");
+
+    /**
+     * Controls which blocks a player in Adventure mode can break with this item.
+     */
+    public static final DataComponentType.Valued<ItemAdventurePredicate> CAN_BREAK = valued("can_break");
+
+    /**
+     * Controls which blocks a player in Adventure mode can place on with this item.
+     */
+    public static final DataComponentType.Valued<ItemAdventurePredicate> CAN_PLACE_ON = valued("can_place_on");
+
+    /**
+     * Holds all projectiles that have been loaded into a Crossbow.
+     * If not present, the Crossbow is not charged.
+     */
+    public static final DataComponentType.Valued<ChargedProjectiles> CHARGED_PROJECTILES = valued("charged_projectiles");
+
+    public static final DataComponentType.Valued<Consumable> CONSUMABLE = valued("consumable");
+
+    /**
+     * Holds the contents of container blocks (Chests, Shulker Boxes) in item form.
+     */
+    public static final DataComponentType.Valued<ItemContainerContents> CONTAINER = valued("container");
+
+    /**
+     * Holds the unresolved loot table and seed of a container-like block.
+     */
+    public static final DataComponentType.Valued<SeededContainerLoot> CONTAINER_LOOT = valued("container_loot");
+
+    /**
+     * Controls the minecraft:custom_model_data property in the item model.
+     */
+    public static final DataComponentType.Valued<CustomModelData> CUSTOM_MODEL_DATA = valued("custom_model_data");
+
+    /**
+     * Custom name override for an item (as set by renaming with an Anvil).
      *
-     * @see #DAMAGE
+     * @see #ITEM_NAME
      */
-    public static final DataComponentType.Valued<@Positive Integer> MAX_DAMAGE = valued("max_damage");
+    public static final DataComponentType.Valued<Component> CUSTOM_NAME = valued("custom_name");
+
     /**
      * The amount of durability removed from an item,
      * for damageable items (with the {@link #MAX_DAMAGE} component), has an implicit default value of: {@code 0}.
@@ -85,16 +140,80 @@ public final class DataComponentTypes {
      * @see #MAX_DAMAGE
      */
     public static final DataComponentType.Valued<@NonNegative Integer> DAMAGE = valued("damage");
+
     /**
-     * If set, the item will not lose any durability when used.
+     * If present, this item will not take damage from the specified damage types.
      */
-    public static final DataComponentType.Valued<Unbreakable> UNBREAKABLE = valued("unbreakable");
+    public static final DataComponentType.Valued<DamageResistant> DAMAGE_RESISTANT = valued("damage_resistant");
+
+    public static final DataComponentType.Valued<DeathProtection> DEATH_PROTECTION = valued("death_protection");
+
     /**
-     * Custom name override for an item (as set by renaming with an Anvil).
+     * Represents a color applied to a dyeable item (in the {@link io.papermc.paper.registry.keys.tags.ItemTypeTagKeys#DYEABLE} item tag).
+     */
+    public static final DataComponentType.Valued<DyedItemColor> DYED_COLOR = valued("dyed_color");
+
+    public static final DataComponentType.Valued<Enchantable> ENCHANTABLE = valued("enchantable");
+
+    /**
+     * Overrides the enchantment glint effect on an item.
+     * If not present, default behaviour is used.
+     */
+    public static final DataComponentType.Valued<Boolean> ENCHANTMENT_GLINT_OVERRIDE = valued("enchantment_glint_override");
+
+    /**
+     * Controls the enchantments on an item.
+     * <br>
+     * If not present on a non-enchantment book, this item will not work in an anvil.
      *
-     * @see #ITEM_NAME
+     * @see #STORED_ENCHANTMENTS
      */
-    public static final DataComponentType.Valued<Component> CUSTOM_NAME = valued("custom_name");
+    public static final DataComponentType.Valued<ItemEnchantments> ENCHANTMENTS = valued("enchantments");
+
+    public static final DataComponentType.Valued<Equippable> EQUIPPABLE = valued("equippable");
+
+    /**
+     * Stores the explosion crafted in a Firework Star.
+     */
+    public static final DataComponentType.Valued<FireworkEffect> FIREWORK_EXPLOSION = valued("firework_explosion");
+
+    /**
+     * Stores all explosions crafted into a Firework Rocket, as well as flight duration.
+     */
+    public static final DataComponentType.Valued<Fireworks> FIREWORKS = valued("fireworks");
+
+    /**
+     * Controls potential food benefits gained when consuming the item the component is applied on.
+     * Requires the {@link #CONSUMABLE} component to allow consumption in the first place.
+     */
+    public static final DataComponentType.Valued<FoodProperties> FOOD = valued("food");
+
+    public static final DataComponentType.NonValued GLIDER = unvalued("glider");
+
+    /**
+     * If set, disables 'additional' tooltip part which comes from the item type
+     * (e.g. content of a shulker).
+     */
+    public static final DataComponentType.NonValued HIDE_ADDITIONAL_TOOLTIP = unvalued("hide_additional_tooltip");
+
+    /**
+     * If set, it will completely hide whole item tooltip (that includes item name).
+     */
+    public static final DataComponentType.NonValued HIDE_TOOLTIP = unvalued("hide_tooltip");
+
+    /**
+     * Holds the instrument type used by a Goat Horn.
+     */
+    public static final DataComponentType.Valued<MusicInstrument> INSTRUMENT = valued("instrument");
+
+    /**
+     * Marks that a projectile item would be intangible when fired
+     * (i.e. can only be picked up by a creative mode player).
+     */
+    public static final DataComponentType.NonValued INTANGIBLE_PROJECTILE = unvalued("intangible_projectile");
+
+    public static final DataComponentType.Valued<Key> ITEM_MODEL = valued("item_model");
+
     /**
      * When present, replaces default item name with contained chat component.
      * <p>
@@ -109,91 +228,100 @@ public final class DataComponentTypes {
      * @see #CUSTOM_NAME
      */
     public static final DataComponentType.Valued<Component> ITEM_NAME = valued("item_name");
-    public static final DataComponentType.Valued<Key> ITEM_MODEL = valued("item_model");
+
+    public static final DataComponentType.Valued<JukeboxPlayable> JUKEBOX_PLAYABLE = valued("jukebox_playable");
+
+    /**
+     * If present, specifies that the Compass is a Lodestone Compass.
+     */
+    public static final DataComponentType.Valued<LodestoneTracker> LODESTONE_TRACKER = valued("lodestone_tracker");
+
     /**
      * Additional lines to include in an item's tooltip.
      */
     public static final DataComponentType.Valued<ItemLore> LORE = valued("lore");
+
+    /**
+     * Represents the tint of the decorations on the {@link org.bukkit.inventory.ItemType#FILLED_MAP} item.
+     */
+    public static final DataComponentType.Valued<MapItemColor> MAP_COLOR = valued("map_color");
+
+    /**
+     * Holds a list of markers to be placed on a {@link org.bukkit.inventory.ItemType#FILLED_MAP} (used for Explorer Maps).
+     */
+    public static final DataComponentType.Valued<MapDecorations> MAP_DECORATIONS = valued("map_decorations");
+
+    /**
+     * References the shared map state holding map contents and markers for a {@link org.bukkit.inventory.ItemType#FILLED_MAP}.
+     */
+    public static final DataComponentType.Valued<MapId> MAP_ID = valued("map_id");
+
+    /**
+     * Internal map item state used in the map crafting recipe.
+     */
+    public static final DataComponentType.Valued<MapPostProcessing> MAP_POST_PROCESSING = valued("map_post_processing");
+
+    /**
+     * Controls the maximum amount of damage than an item can take,
+     * if not present, the item cannot be damaged.
+     * <br>
+     * Mutually exclusive with the {@link #MAX_STACK_SIZE} component greater than 1.
+     *
+     * @see #DAMAGE
+     */
+    public static final DataComponentType.Valued<@Positive Integer> MAX_DAMAGE = valued("max_damage");
+
+    /**
+     * Controls the maximum stacking size of this item.
+     * <br>
+     * Values greater than 1 are mutually exclusive with the {@link #MAX_DAMAGE} component.
+     */
+    public static final DataComponentType.Valued<Integer> MAX_STACK_SIZE = valued("max_stack_size");
+
+    /**
+     * Controls the sound played by a Player Head when placed on a Note Block.
+     */
+    public static final DataComponentType.Valued<Key> NOTE_BLOCK_SOUND = valued("note_block_sound");
+
+    /**
+     * Controls the amplifier amount for an Ominous Bottle's Bad Omen effect.
+     */
+    public static final DataComponentType.Valued<OminousBottleAmplifier> OMINOUS_BOTTLE_AMPLIFIER = valued("ominous_bottle_amplifier");
+
+    /**
+     * Stores the Sherds applied to each side of a Decorated Pot.
+     */
+    public static final DataComponentType.Valued<PotDecorations> POT_DECORATIONS = valued("pot_decorations");
+
+    /**
+     * Holds the contents of a potion (Potion, Splash Potion, Lingering Potion),
+     * or potion applied to a Tipped Arrow.
+     */
+    public static final DataComponentType.Valued<PotionContents> POTION_CONTENTS = valued("potion_contents");
+
+    /**
+     * Controls the skin displayed on a Player Head.
+     */
+    public static final DataComponentType.Valued<ResolvableProfile> PROFILE = valued("profile");
+
     /**
      * Controls the color of the item name.
      */
     public static final DataComponentType.Valued<ItemRarity> RARITY = valued("rarity");
+
     /**
-     * Controls the enchantments on an item.
-     * <br>
-     * If not present on a non-enchantment book, this item will not work in an anvil.
-     *
-     * @see #STORED_ENCHANTMENTS
+     * List of recipes that should be unlocked when using the Knowledge Book item.
      */
-    public static final DataComponentType.Valued<ItemEnchantments> ENCHANTMENTS = valued("enchantments");
-    /**
-     * Controls which blocks a player in Adventure mode can place on with this item.
-     */
-    public static final DataComponentType.Valued<ItemAdventurePredicate> CAN_PLACE_ON = valued("can_place_on");
-    /**
-     * Controls which blocks a player in Adventure mode can break with this item.
-     */
-    public static final DataComponentType.Valued<ItemAdventurePredicate> CAN_BREAK = valued("can_break");
-    /**
-     * Holds attribute modifiers applied to any item,
-     * if not set, has an implicit default value based on the item type's
-     * default attributes (e.g. attack damage for weapons).
-     */
-    public static final DataComponentType.Valued<ItemAttributeModifiers> ATTRIBUTE_MODIFIERS = valued("attribute_modifiers");
-    /**
-     * Controls the minecraft:custom_model_data property in the item model.
-     */
-    public static final DataComponentType.Valued<CustomModelData> CUSTOM_MODEL_DATA = valued("custom_model_data");
-    /**
-     * If set, disables 'additional' tooltip part which comes from the item type
-     * (e.g. content of a shulker).
-     */
-    public static final DataComponentType.NonValued HIDE_ADDITIONAL_TOOLTIP = unvalued("hide_additional_tooltip");
-    /**
-     * If set, it will completely hide whole item tooltip (that includes item name).
-     */
-    public static final DataComponentType.NonValued HIDE_TOOLTIP = unvalued("hide_tooltip");
+    public static final DataComponentType.Valued<List<Key>> RECIPES = valued("recipes");
+
     /**
      * The additional experience cost required to modify an item in an Anvil.
      * If not present, has an implicit default value of: {@code 0}.
      */
     public static final DataComponentType.Valued<@NonNegative Integer> REPAIR_COST = valued("repair_cost");
-    // /**
-    //  * Causes an item to not be pickable in the creative menu, currently not very useful.
-    //  */
-    // public static final DataComponentType.NonValued CREATIVE_SLOT_LOCK = unvalued("creative_slot_lock");
-    /**
-     * Overrides the enchantment glint effect on an item.
-     * If not present, default behaviour is used.
-     */
-    public static final DataComponentType.Valued<Boolean> ENCHANTMENT_GLINT_OVERRIDE = valued("enchantment_glint_override");
-    /**
-     * Marks that a projectile item would be intangible when fired
-     * (i.e. can only be picked up by a creative mode player).
-     */
-    public static final DataComponentType.NonValued INTANGIBLE_PROJECTILE = unvalued("intangible_projectile");
-    /**
-     * Controls potential food benefits gained when consuming the item the component is applied on.
-     * Requires the {@link #CONSUMABLE} component to allow consumption in the first place.
-     */
-    public static final DataComponentType.Valued<FoodProperties> FOOD = valued("food");
-    public static final DataComponentType.Valued<Consumable> CONSUMABLE = valued("consumable");
-    public static final DataComponentType.Valued<UseRemainder> USE_REMAINDER = valued("use_remainder");
-    public static final DataComponentType.Valued<UseCooldown> USE_COOLDOWN = valued("use_cooldown");
-    /**
-     * If present, this item will not take damage from the specified damage types.
-     */
-    public static final DataComponentType.Valued<DamageResistant> DAMAGE_RESISTANT = valued("damage_resistant");
-    /**
-     * Controls the behavior of the item as a tool.
-     */
-    public static final DataComponentType.Valued<Tool> TOOL = valued("tool");
-    public static final DataComponentType.Valued<Enchantable> ENCHANTABLE = valued("enchantable");
-    public static final DataComponentType.Valued<Equippable> EQUIPPABLE = valued("equippable");
+
     public static final DataComponentType.Valued<Repairable> REPAIRABLE = valued("repairable");
-    public static final DataComponentType.NonValued GLIDER = unvalued("glider");
-    public static final DataComponentType.Valued<Key> TOOLTIP_STYLE = valued("tooltip_style");
-    public static final DataComponentType.Valued<DeathProtection> DEATH_PROTECTION = valued("death_protection");
+
     /**
      * Stores list of enchantments and their levels for an Enchanted Book.
      * Unlike {@link #ENCHANTMENTS}, the effects provided by enchantments
@@ -208,114 +336,51 @@ public final class DataComponentTypes {
      * @see #ENCHANTMENTS
      */
     public static final DataComponentType.Valued<ItemEnchantments> STORED_ENCHANTMENTS = valued("stored_enchantments");
-    /**
-     * Represents a color applied to a dyeable item (in the {@link io.papermc.paper.registry.keys.tags.ItemTypeTagKeys#DYEABLE} item tag).
-     */
-    public static final DataComponentType.Valued<DyedItemColor> DYED_COLOR = valued("dyed_color");
-    /**
-     * Represents the tint of the decorations on the {@link org.bukkit.inventory.ItemType#FILLED_MAP} item.
-     */
-    public static final DataComponentType.Valued<MapItemColor> MAP_COLOR = valued("map_color");
-    /**
-     * References the shared map state holding map contents and markers for a {@link org.bukkit.inventory.ItemType#FILLED_MAP}.
-     */
-    public static final DataComponentType.Valued<MapId> MAP_ID = valued("map_id");
-    /**
-     * Holds a list of markers to be placed on a {@link org.bukkit.inventory.ItemType#FILLED_MAP} (used for Explorer Maps).
-     */
-    public static final DataComponentType.Valued<MapDecorations> MAP_DECORATIONS = valued("map_decorations");
-    /**
-     * Internal map item state used in the map crafting recipe.
-     */
-    public static final DataComponentType.Valued<MapPostProcessing> MAP_POST_PROCESSING = valued("map_post_processing");
-    /**
-     * Holds all projectiles that have been loaded into a Crossbow.
-     * If not present, the Crossbow is not charged.
-     */
-    public static final DataComponentType.Valued<ChargedProjectiles> CHARGED_PROJECTILES = valued("charged_projectiles");
-    /**
-     * Holds all items stored inside a Bundle.
-     * If removed, items cannot be added to the Bundle.
-     */
-    public static final DataComponentType.Valued<BundleContents> BUNDLE_CONTENTS = valued("bundle_contents");
-    /**
-     * Holds the contents of a potion (Potion, Splash Potion, Lingering Potion),
-     * or potion applied to a Tipped Arrow.
-     */
-    public static final DataComponentType.Valued<PotionContents> POTION_CONTENTS = valued("potion_contents");
+
     /**
      * Holds the effects that will be applied when consuming Suspicious Stew.
      */
     public static final DataComponentType.Valued<SuspiciousStewEffects> SUSPICIOUS_STEW_EFFECTS = valued("suspicious_stew_effects");
+
     /**
-     * Holds the contents in a Book and Quill.
+     * Controls the behavior of the item as a tool.
      */
-    public static final DataComponentType.Valued<WritableBookContent> WRITABLE_BOOK_CONTENT = valued("writable_book_content");
-    /**
-     * Holds the contents and metadata of a Written Book.
-     */
-    public static final DataComponentType.Valued<WrittenBookContent> WRITTEN_BOOK_CONTENT = valued("written_book_content");
+    public static final DataComponentType.Valued<Tool> TOOL = valued("tool");
+
+    public static final DataComponentType.Valued<Key> TOOLTIP_STYLE = valued("tooltip_style");
+
     /**
      * Holds the trims applied to an item in recipes
      */
     public static final DataComponentType.Valued<ItemArmorTrim> TRIM = valued("trim");
+
+    /**
+     * If set, the item will not lose any durability when used.
+     */
+    public static final DataComponentType.Valued<Unbreakable> UNBREAKABLE = valued("unbreakable");
+
+    public static final DataComponentType.Valued<UseCooldown> USE_COOLDOWN = valued("use_cooldown");
+
+    public static final DataComponentType.Valued<UseRemainder> USE_REMAINDER = valued("use_remainder");
+
+    /**
+     * Holds the contents in a Book and Quill.
+     */
+    public static final DataComponentType.Valued<WritableBookContent> WRITABLE_BOOK_CONTENT = valued("writable_book_content");
+
+    /**
+     * Holds the contents and metadata of a Written Book.
+     */
+    public static final DataComponentType.Valued<WrittenBookContent> WRITTEN_BOOK_CONTENT = valued("written_book_content");
+    // End generate - DataComponentTypes
+    // /**
+    //  * Causes an item to not be pickable in the creative menu, currently not very useful.
+    //  */
+    // public static final DataComponentType.NonValued CREATIVE_SLOT_LOCK = unvalued("creative_slot_lock");
     // debug_stick_state - Block Property API
     // entity_data
     // bucket_entity_data
     // block_entity_data
-    /**
-     * Holds the instrument type used by a Goat Horn.
-     */
-    public static final DataComponentType.Valued<MusicInstrument> INSTRUMENT = valued("instrument");
-    /**
-     * Controls the amplifier amount for an Ominous Bottle's Bad Omen effect.
-     */
-    public static final DataComponentType.Valued<OminousBottleAmplifier> OMINOUS_BOTTLE_AMPLIFIER = valued("ominous_bottle_amplifier");
-    public static final DataComponentType.Valued<JukeboxPlayable> JUKEBOX_PLAYABLE = valued("jukebox_playable");
-    /**
-     * List of recipes that should be unlocked when using the Knowledge Book item.
-     */
-    public static final DataComponentType.Valued<List<Key>> RECIPES = valued("recipes");
-    /**
-     * If present, specifies that the Compass is a Lodestone Compass.
-     */
-    public static final DataComponentType.Valued<LodestoneTracker> LODESTONE_TRACKER = valued("lodestone_tracker");
-    /**
-     * Stores the explosion crafted in a Firework Star.
-     */
-    public static final DataComponentType.Valued<FireworkEffect> FIREWORK_EXPLOSION = valued("firework_explosion");
-    /**
-     * Stores all explosions crafted into a Firework Rocket, as well as flight duration.
-     */
-    public static final DataComponentType.Valued<Fireworks> FIREWORKS = valued("fireworks");
-    /**
-     * Controls the skin displayed on a Player Head.
-     */
-    public static final DataComponentType.Valued<ResolvableProfile> PROFILE = valued("profile");
-    /**
-     * Controls the sound played by a Player Head when placed on a Note Block.
-     */
-    public static final DataComponentType.Valued<Key> NOTE_BLOCK_SOUND = valued("note_block_sound");
-    /**
-     * Stores the additional patterns applied to a Banner or Shield.
-     */
-    public static final DataComponentType.Valued<BannerPatternLayers> BANNER_PATTERNS = valued("banner_patterns");
-    /**
-     * Stores the base color for a Shield.
-     */
-    public static final DataComponentType.Valued<DyeColor> BASE_COLOR = valued("base_color");
-    /**
-     * Stores the Sherds applied to each side of a Decorated Pot.
-     */
-    public static final DataComponentType.Valued<PotDecorations> POT_DECORATIONS = valued("pot_decorations");
-    /**
-     * Holds the contents of container blocks (Chests, Shulker Boxes) in item form.
-     */
-    public static final DataComponentType.Valued<ItemContainerContents> CONTAINER = valued("container");
-    /**
-     * Holds block state properties to apply when placing a block.
-     */
-    public static final DataComponentType.Valued<BlockItemDataProperties> BLOCK_DATA = valued("block_state");
     // bees
     // /**
     //  * Holds the lock state of a container-like block,
@@ -325,10 +390,6 @@ public final class DataComponentTypes {
     //  * to open this container.
     //  */
     // public static final DataComponentType.Valued<LockCode> LOCK = valued("lock");
-    /**
-     * Holds the unresolved loot table and seed of a container-like block.
-     */
-    public static final DataComponentType.Valued<SeededContainerLoot> CONTAINER_LOOT = valued("container_loot");
 
     private static DataComponentType.NonValued unvalued(final String name) {
         return (DataComponentType.NonValued) requireNonNull(Registry.DATA_COMPONENT_TYPE.get(NamespacedKey.minecraft(name)), name + " unvalued data component type couldn't be found, this is a bug.");
diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ItemUseAnimation.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ItemUseAnimation.java
index f8ffefc1e9..5d26ada105 100644
--- a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ItemUseAnimation.java
+++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ItemUseAnimation.java
@@ -4,6 +4,8 @@ package io.papermc.paper.datacomponent.item.consumable;
  * Represents the hand animation that is used when a player is consuming this item.
  */
 public enum ItemUseAnimation {
+    // Start generate - ItemUseAnimation
+    // @GeneratedFrom 1.21.4
     NONE,
     EAT,
     DRINK,
@@ -14,5 +16,6 @@ public enum ItemUseAnimation {
     SPYGLASS,
     TOOT_HORN,
     BRUSH,
-    BUNDLE
+    BUNDLE;
+    // End generate - ItemUseAnimation
 }
diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
index d155815794..13d8a170fe 100644
--- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
+++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
@@ -24,11 +24,14 @@ import static io.papermc.paper.registry.event.RegistryEventProviderImpl.create;
 @NullMarked
 public final class RegistryEvents {
 
+    // Start generate - RegistryEvents
+    // @GeneratedFrom 1.21.4
     public static final RegistryEventProvider<GameEvent, GameEventRegistryEntry.Builder> GAME_EVENT = create(RegistryKey.GAME_EVENT);
-    public static final RegistryEventProvider<Enchantment, EnchantmentRegistryEntry.Builder> ENCHANTMENT = create(RegistryKey.ENCHANTMENT);
-    public static final RegistryEventProvider<Art, PaintingVariantRegistryEntry.Builder> PAINTING_VARIANT = create(RegistryKey.PAINTING_VARIANT);
-    public static final RegistryEventProvider<PatternType, BannerPatternRegistryEntry.Builder> BANNER_PATTERN = create(RegistryKey.BANNER_PATTERN);
     public static final RegistryEventProvider<DamageType, DamageTypeRegistryEntry.Builder> DAMAGE_TYPE = create(RegistryKey.DAMAGE_TYPE);
+    public static final RegistryEventProvider<Enchantment, EnchantmentRegistryEntry.Builder> ENCHANTMENT = create(RegistryKey.ENCHANTMENT);
+    public static final RegistryEventProvider<PatternType, BannerPatternRegistryEntry.Builder> BANNER_PATTERN = create(RegistryKey.BANNER_PATTERN);
+    public static final RegistryEventProvider<Art, PaintingVariantRegistryEntry.Builder> PAINTING_VARIANT = create(RegistryKey.PAINTING_VARIANT);
+    // End generate - RegistryEvents
 
     private RegistryEvents() {
     }
diff --git a/paper-api/src/main/java/org/bukkit/Art.java b/paper-api/src/main/java/org/bukkit/Art.java
index 82daa6941c..68e0f9d81a 100644
--- a/paper-api/src/main/java/org/bukkit/Art.java
+++ b/paper-api/src/main/java/org/bukkit/Art.java
@@ -35,57 +35,109 @@ public interface Art extends OldEnum<Art>, Keyed {
         return InlinedRegistryBuilderProvider.instance().createPaintingVariant(value);
     }
 
-    Art KEBAB = getArt("kebab");
-    Art AZTEC = getArt("aztec");
+    // Start generate - Art
+    // @GeneratedFrom 1.21.4
     Art ALBAN = getArt("alban");
+
+    Art AZTEC = getArt("aztec");
+
     Art AZTEC2 = getArt("aztec2");
-    Art BOMB = getArt("bomb");
-    Art PLANT = getArt("plant");
-    Art WASTELAND = getArt("wasteland");
-    Art POOL = getArt("pool");
-    Art COURBET = getArt("courbet");
-    Art SEA = getArt("sea");
-    Art SUNSET = getArt("sunset");
-    Art CREEBET = getArt("creebet");
-    Art WANDERER = getArt("wanderer");
-    Art GRAHAM = getArt("graham");
-    Art MATCH = getArt("match");
-    Art BUST = getArt("bust");
-    Art STAGE = getArt("stage");
-    Art VOID = getArt("void");
-    Art SKULL_AND_ROSES = getArt("skull_and_roses");
-    Art WITHER = getArt("wither");
-    Art FIGHTERS = getArt("fighters");
-    Art POINTER = getArt("pointer");
-    Art PIGSCENE = getArt("pigscene");
-    Art BURNING_SKULL = getArt("burning_skull");
-    Art SKELETON = getArt("skeleton");
-    Art DONKEY_KONG = getArt("donkey_kong");
-    Art EARTH = getArt("earth");
-    Art WIND = getArt("wind");
-    Art WATER = getArt("water");
-    Art FIRE = getArt("fire");
-    Art BAROQUE = getArt("baroque");
-    Art HUMBLE = getArt("humble");
-    Art MEDITATIVE = getArt("meditative");
-    Art PRAIRIE_RIDE = getArt("prairie_ride");
-    Art UNPACKED = getArt("unpacked");
+
     Art BACKYARD = getArt("backyard");
+
+    Art BAROQUE = getArt("baroque");
+
+    Art BOMB = getArt("bomb");
+
     Art BOUQUET = getArt("bouquet");
+
+    Art BURNING_SKULL = getArt("burning_skull");
+
+    Art BUST = getArt("bust");
+
     Art CAVEBIRD = getArt("cavebird");
+
     Art CHANGING = getArt("changing");
+
     Art COTAN = getArt("cotan");
+
+    Art COURBET = getArt("courbet");
+
+    Art CREEBET = getArt("creebet");
+
+    Art DONKEY_KONG = getArt("donkey_kong");
+
+    Art EARTH = getArt("earth");
+
     Art ENDBOSS = getArt("endboss");
+
     Art FERN = getArt("fern");
+
+    Art FIGHTERS = getArt("fighters");
+
     Art FINDING = getArt("finding");
+
+    Art FIRE = getArt("fire");
+
+    Art GRAHAM = getArt("graham");
+
+    Art HUMBLE = getArt("humble");
+
+    Art KEBAB = getArt("kebab");
+
     Art LOWMIST = getArt("lowmist");
+
+    Art MATCH = getArt("match");
+
+    Art MEDITATIVE = getArt("meditative");
+
     Art ORB = getArt("orb");
+
     Art OWLEMONS = getArt("owlemons");
+
     Art PASSAGE = getArt("passage");
+
+    Art PIGSCENE = getArt("pigscene");
+
+    Art PLANT = getArt("plant");
+
+    Art POINTER = getArt("pointer");
+
     Art POND = getArt("pond");
+
+    Art POOL = getArt("pool");
+
+    Art PRAIRIE_RIDE = getArt("prairie_ride");
+
+    Art SEA = getArt("sea");
+
+    Art SKELETON = getArt("skeleton");
+
+    Art SKULL_AND_ROSES = getArt("skull_and_roses");
+
+    Art STAGE = getArt("stage");
+
     Art SUNFLOWERS = getArt("sunflowers");
+
+    Art SUNSET = getArt("sunset");
+
     Art TIDES = getArt("tides");
 
+    Art UNPACKED = getArt("unpacked");
+
+    Art VOID = getArt("void");
+
+    Art WANDERER = getArt("wanderer");
+
+    Art WASTELAND = getArt("wasteland");
+
+    Art WATER = getArt("water");
+
+    Art WIND = getArt("wind");
+
+    Art WITHER = getArt("wither");
+    // End generate - Art
+
     @NotNull
     private static Art getArt(@NotNull String key) {
         return RegistryAccess.registryAccess().getRegistry(RegistryKey.PAINTING_VARIANT).getOrThrow(NamespacedKey.minecraft(key));
diff --git a/paper-api/src/main/java/org/bukkit/FeatureFlag.java b/paper-api/src/main/java/org/bukkit/FeatureFlag.java
index a1e093c40c..79664e3bd0 100644
--- a/paper-api/src/main/java/org/bukkit/FeatureFlag.java
+++ b/paper-api/src/main/java/org/bukkit/FeatureFlag.java
@@ -14,19 +14,19 @@ import org.jetbrains.annotations.ApiStatus;
  */
 public interface FeatureFlag extends Keyed {
 
-    // Paper start - overhaul FeatureFlag API
-    /**
-     * The {@code vanilla} feature flag.
-     */
-    FeatureFlag VANILLA = create("vanilla");
+    // Start generate - FeatureFlag
+    // @GeneratedFrom 1.21.4
+    @ApiStatus.Experimental
+    FeatureFlag MINECART_IMPROVEMENTS = create("minecart_improvements");
 
-    /**
-     * <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.19.3 - 1.21.1
-     *
-     * @deprecated not available since 1.21.2
-     */
-    @Deprecated(since = "1.21.2")
-    FeatureFlag BUNDLE = deprecated("bundle");
+    @ApiStatus.Experimental
+    FeatureFlag REDSTONE_EXPERIMENTS = create("redstone_experiments");
+
+    @ApiStatus.Experimental
+    FeatureFlag TRADE_REBALANCE = create("trade_rebalance");
+
+    FeatureFlag VANILLA = create("vanilla");
+    // End generate - FeatureFlag
 
     /**
      * <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.19 - 1.19.4
@@ -37,9 +37,6 @@ public interface FeatureFlag extends Keyed {
     @Deprecated(since = "1.20")
     FeatureFlag UPDATE_1_20 = deprecated("update_1_20");
 
-    @ApiStatus.Experimental // Paper - add missing annotation
-    FeatureFlag TRADE_REBALANCE = create("trade_rebalance");
-
     /**
      * <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.20.5 - 1.20.6
      *
@@ -48,6 +45,14 @@ public interface FeatureFlag extends Keyed {
     @Deprecated(since = "1.21")
     FeatureFlag UPDATE_121 = deprecated("update_1_21");
 
+    /**
+     * <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.19.3 - 1.21.1
+     *
+     * @deprecated not available since 1.21.2
+     */
+    @Deprecated(since = "1.21.2")
+    FeatureFlag BUNDLE = deprecated("bundle");
+
     /**
      * <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.21.2 - 1.21.3
      *
@@ -56,12 +61,6 @@ public interface FeatureFlag extends Keyed {
     @Deprecated(since = "1.21.4")
     FeatureFlag WINTER_DROP = deprecated("winter_drop");
 
-    @ApiStatus.Experimental // Paper - add missing annotation
-    FeatureFlag REDSTONE_EXPERIMENTS = create("redstone_experiments");
-
-    @ApiStatus.Experimental // Paper - add missing annotation
-    FeatureFlag MINECART_IMPROVEMENTS = create("minecart_improvements");
-
     /**
      * An index of all feature flags.
      */
diff --git a/paper-api/src/main/java/org/bukkit/Fluid.java b/paper-api/src/main/java/org/bukkit/Fluid.java
index 45a095f16c..19b8078641 100644
--- a/paper-api/src/main/java/org/bukkit/Fluid.java
+++ b/paper-api/src/main/java/org/bukkit/Fluid.java
@@ -12,27 +12,19 @@ import org.jetbrains.annotations.NotNull;
  */
 public interface Fluid extends OldEnum<Fluid>, Keyed {
 
-    /**
-     * No fluid.
-     */
+    // Start generate - Fluid
+    // @GeneratedFrom 1.21.4
     Fluid EMPTY = getFluid("empty");
-    /**
-     * Stationary water.
-     */
-    Fluid WATER = getFluid("water");
-    /**
-     * Flowing water.
-     */
-    Fluid FLOWING_WATER = getFluid("flowing_water");
-    /**
-     * Stationary lava.
-     */
-    Fluid LAVA = getFluid("lava");
-    /**
-     * Flowing lava.
-     */
+
     Fluid FLOWING_LAVA = getFluid("flowing_lava");
 
+    Fluid FLOWING_WATER = getFluid("flowing_water");
+
+    Fluid LAVA = getFluid("lava");
+
+    Fluid WATER = getFluid("water");
+    // End generate - Fluid
+
     @NotNull
     private static Fluid getFluid(@NotNull String key) {
         return Registry.FLUID.getOrThrow(NamespacedKey.minecraft(key));
diff --git a/paper-api/src/main/java/org/bukkit/GameEvent.java b/paper-api/src/main/java/org/bukkit/GameEvent.java
index ac2601db73..ad9f893d46 100644
--- a/paper-api/src/main/java/org/bukkit/GameEvent.java
+++ b/paper-api/src/main/java/org/bukkit/GameEvent.java
@@ -11,107 +11,229 @@ import org.jetbrains.annotations.Nullable;
  */
 public abstract class GameEvent implements Keyed {
 
+    // Start generate - GameEvent
+    // @GeneratedFrom 1.21.4
     public static final GameEvent BLOCK_ACTIVATE = getEvent("block_activate");
+
     public static final GameEvent BLOCK_ATTACH = getEvent("block_attach");
+
     public static final GameEvent BLOCK_CHANGE = getEvent("block_change");
+
     public static final GameEvent BLOCK_CLOSE = getEvent("block_close");
+
     public static final GameEvent BLOCK_DEACTIVATE = getEvent("block_deactivate");
+
     public static final GameEvent BLOCK_DESTROY = getEvent("block_destroy");
+
     public static final GameEvent BLOCK_DETACH = getEvent("block_detach");
+
     public static final GameEvent BLOCK_OPEN = getEvent("block_open");
+
     public static final GameEvent BLOCK_PLACE = getEvent("block_place");
-    @Deprecated(since = "1.19")
-    public static final GameEvent BLOCK_PRESS = getEvent("block_activate");
-    @Deprecated(since = "1.19")
-    public static final GameEvent BLOCK_SWITCH = getEvent("block_activate");
-    @Deprecated(since = "1.19")
-    public static final GameEvent BLOCK_UNPRESS = getEvent("block_deactivate");
-    @Deprecated(since = "1.19")
-    public static final GameEvent BLOCK_UNSWITCH = getEvent("block_deactivate");
+
     public static final GameEvent CONTAINER_CLOSE = getEvent("container_close");
+
     public static final GameEvent CONTAINER_OPEN = getEvent("container_open");
-    @Deprecated(since = "1.20")
-    public static final GameEvent DISPENSE_FAIL = getEvent("block_activate");
+
     public static final GameEvent DRINK = getEvent("drink");
-    @Deprecated(since = "1.19")
-    public static final GameEvent DRINKING_FINISH = getEvent("drink");
+
     public static final GameEvent EAT = getEvent("eat");
-    @Deprecated(since = "1.19")
-    public static final GameEvent ELYTRA_FREE_FALL = getEvent("elytra_glide");
+
     public static final GameEvent ELYTRA_GLIDE = getEvent("elytra_glide");
-    public static final GameEvent ENTITY_DAMAGE = getEvent("entity_damage");
-    @Deprecated(since = "1.19")
-    public static final GameEvent ENTITY_DAMAGED = getEvent("entity_damage");
-    public static final GameEvent ENTITY_DIE = getEvent("entity_die");
-    public static final GameEvent ENTITY_DISMOUNT = getEvent("entity_dismount");
-    @Deprecated(since = "1.19")
-    public static final GameEvent ENTITY_DYING = getEvent("entity_die");
-    public static final GameEvent ENTITY_INTERACT = getEvent("entity_interact");
-    public static final GameEvent ENTITY_MOUNT = getEvent("entity_mount");
-    @Deprecated(since = "1.19")
-    public static final GameEvent ENTITY_KILLED = getEvent("entity_die");
-    public static final GameEvent ENTITY_PLACE = getEvent("entity_place");
+
     public static final GameEvent ENTITY_ACTION = getEvent("entity_action");
-    @Deprecated(since = "1.20.2")
-    public static final GameEvent ENTITY_ROAR = getEvent("entity_action");
-    @Deprecated(since = "1.20.2")
-    public static final GameEvent ENTITY_SHAKE = getEvent("entity_action");
+
+    public static final GameEvent ENTITY_DAMAGE = getEvent("entity_damage");
+
+    public static final GameEvent ENTITY_DIE = getEvent("entity_die");
+
+    public static final GameEvent ENTITY_DISMOUNT = getEvent("entity_dismount");
+
+    public static final GameEvent ENTITY_INTERACT = getEvent("entity_interact");
+
+    public static final GameEvent ENTITY_MOUNT = getEvent("entity_mount");
+
+    public static final GameEvent ENTITY_PLACE = getEvent("entity_place");
+
     public static final GameEvent EQUIP = getEvent("equip");
+
     public static final GameEvent EXPLODE = getEvent("explode");
+
     public static final GameEvent FLAP = getEvent("flap");
+
     public static final GameEvent FLUID_PICKUP = getEvent("fluid_pickup");
+
     public static final GameEvent FLUID_PLACE = getEvent("fluid_place");
+
     public static final GameEvent HIT_GROUND = getEvent("hit_ground");
+
     public static final GameEvent INSTRUMENT_PLAY = getEvent("instrument_play");
+
     public static final GameEvent ITEM_INTERACT_FINISH = getEvent("item_interact_finish");
+
     public static final GameEvent ITEM_INTERACT_START = getEvent("item_interact_start");
+
     public static final GameEvent JUKEBOX_PLAY = getEvent("jukebox_play");
+
     public static final GameEvent JUKEBOX_STOP_PLAY = getEvent("jukebox_stop_play");
+
     public static final GameEvent LIGHTNING_STRIKE = getEvent("lightning_strike");
-    @Deprecated(since = "1.19")
-    public static final GameEvent MOB_INTERACT = getEvent("entity_interact");
+
     public static final GameEvent NOTE_BLOCK_PLAY = getEvent("note_block_play");
-    @Deprecated(since = "1.20")
-    public static final GameEvent PISTON_CONTRACT = getEvent("block_deactivate");
-    @Deprecated(since = "1.20")
-    public static final GameEvent PISTON_EXTEND = getEvent("block_activate");
+
     public static final GameEvent PRIME_FUSE = getEvent("prime_fuse");
+
     public static final GameEvent PROJECTILE_LAND = getEvent("projectile_land");
+
     public static final GameEvent PROJECTILE_SHOOT = getEvent("projectile_shoot");
-    @Deprecated(since = "1.19")
-    public static final GameEvent RAVAGER_ROAR = getEvent("entity_action");
-    @Deprecated(since = "1.19")
-    public static final GameEvent RING_BELL = getEvent("block_change");
-    public static final GameEvent SCULK_SENSOR_TENDRILS_CLICKING = getEvent("sculk_sensor_tendrils_clicking");
-    public static final GameEvent SHEAR = getEvent("shear");
-    public static final GameEvent SHRIEK = getEvent("shriek");
-    @Deprecated(since = "1.19")
-    public static final GameEvent SHULKER_CLOSE = getEvent("container_close");
-    @Deprecated(since = "1.19")
-    public static final GameEvent SHULKER_OPEN = getEvent("container_open");
-    public static final GameEvent SPLASH = getEvent("splash");
-    public static final GameEvent STEP = getEvent("step");
-    public static final GameEvent SWIM = getEvent("swim");
-    public static final GameEvent TELEPORT = getEvent("teleport");
-    public static final GameEvent UNEQUIP = getEvent("unequip");
-    @Deprecated(since = "1.19")
-    public static final GameEvent WOLF_SHAKING = getEvent("entity_action");
+
     public static final GameEvent RESONATE_1 = getEvent("resonate_1");
+
     public static final GameEvent RESONATE_2 = getEvent("resonate_2");
+
     public static final GameEvent RESONATE_3 = getEvent("resonate_3");
+
     public static final GameEvent RESONATE_4 = getEvent("resonate_4");
+
     public static final GameEvent RESONATE_5 = getEvent("resonate_5");
+
     public static final GameEvent RESONATE_6 = getEvent("resonate_6");
+
     public static final GameEvent RESONATE_7 = getEvent("resonate_7");
+
     public static final GameEvent RESONATE_8 = getEvent("resonate_8");
+
     public static final GameEvent RESONATE_9 = getEvent("resonate_9");
+
     public static final GameEvent RESONATE_10 = getEvent("resonate_10");
+
     public static final GameEvent RESONATE_11 = getEvent("resonate_11");
+
     public static final GameEvent RESONATE_12 = getEvent("resonate_12");
+
     public static final GameEvent RESONATE_13 = getEvent("resonate_13");
+
     public static final GameEvent RESONATE_14 = getEvent("resonate_14");
+
     public static final GameEvent RESONATE_15 = getEvent("resonate_15");
 
+    public static final GameEvent SCULK_SENSOR_TENDRILS_CLICKING = getEvent("sculk_sensor_tendrils_clicking");
+
+    public static final GameEvent SHEAR = getEvent("shear");
+
+    public static final GameEvent SHRIEK = getEvent("shriek");
+
+    public static final GameEvent SPLASH = getEvent("splash");
+
+    public static final GameEvent STEP = getEvent("step");
+
+    public static final GameEvent SWIM = getEvent("swim");
+
+    public static final GameEvent TELEPORT = getEvent("teleport");
+
+    public static final GameEvent UNEQUIP = getEvent("unequip");
+    // End generate - GameEvent
+    /**
+     * @deprecated in favor of {@link #BLOCK_ACTIVATE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent BLOCK_PRESS = BLOCK_ACTIVATE;
+    /**
+     * @deprecated in favor of {@link #BLOCK_ACTIVATE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent BLOCK_SWITCH = BLOCK_ACTIVATE;
+    /**
+     * @deprecated in favor of {@link #BLOCK_DEACTIVATE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent BLOCK_UNPRESS = BLOCK_DEACTIVATE;
+    /**
+     * @deprecated in favor of {@link #BLOCK_DEACTIVATE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent BLOCK_UNSWITCH = BLOCK_DEACTIVATE;
+    /**
+     * @deprecated in favor of {@link #BLOCK_ACTIVATE}
+     */
+    @Deprecated(since = "1.20")
+    public static final GameEvent DISPENSE_FAIL = BLOCK_ACTIVATE;
+    /**
+     * @deprecated in favor of {@link #DRINK}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent DRINKING_FINISH = DRINK;
+    /**
+     * @deprecated in favor of {@link #ELYTRA_GLIDE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent ELYTRA_FREE_FALL = ELYTRA_GLIDE;
+    /**
+     * @deprecated in favor of {@link #ENTITY_DAMAGE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent ENTITY_DAMAGED = ENTITY_DAMAGE;
+    /**
+     * @deprecated in favor of {@link #ENTITY_DIE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent ENTITY_DYING = ENTITY_DIE;
+    /**
+     * @deprecated in favor of {@link #ENTITY_DIE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent ENTITY_KILLED = ENTITY_DIE;
+    /**
+     * @deprecated in favor of {@link #ENTITY_ACTION}
+     */
+    @Deprecated(since = "1.20.2")
+    public static final GameEvent ENTITY_ROAR = ENTITY_ACTION;
+    /**
+     * @deprecated in favor of {@link #ENTITY_ACTION}
+     */
+    @Deprecated(since = "1.20.2")
+    public static final GameEvent ENTITY_SHAKE = ENTITY_ACTION;
+    /**
+     * @deprecated in favor of {@link #ENTITY_INTERACT}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent MOB_INTERACT = ENTITY_INTERACT;
+    /**
+     * @deprecated in favor of {@link #BLOCK_DEACTIVATE}
+     */
+    @Deprecated(since = "1.20")
+    public static final GameEvent PISTON_CONTRACT = BLOCK_DEACTIVATE;
+    /**
+     * @deprecated in favor of {@link #BLOCK_ACTIVATE}
+     */
+    @Deprecated(since = "1.20")
+    public static final GameEvent PISTON_EXTEND = BLOCK_ACTIVATE;
+    /**
+     * @deprecated in favor of {@link #ENTITY_ACTION}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent RAVAGER_ROAR = ENTITY_ACTION;
+    /**
+     * @deprecated in favor of {@link #BLOCK_CHANGE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent RING_BELL = BLOCK_CHANGE;
+    /**
+     * @deprecated in favor of {@link #CONTAINER_CLOSE}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent SHULKER_CLOSE = CONTAINER_CLOSE;
+    /**
+     * @deprecated in favor of {@link #CONTAINER_OPEN}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent SHULKER_OPEN = CONTAINER_OPEN;
+    /**
+     * @deprecated in favor of {@link #ENTITY_ACTION}
+     */
+    @Deprecated(since = "1.19")
+    public static final GameEvent WOLF_SHAKING = ENTITY_ACTION;
+
     /**
      * Returns a {@link GameEvent} by a {@link NamespacedKey}.
      *
diff --git a/paper-api/src/main/java/org/bukkit/JukeboxSong.java b/paper-api/src/main/java/org/bukkit/JukeboxSong.java
index 7e3dca5023..a1e894543b 100644
--- a/paper-api/src/main/java/org/bukkit/JukeboxSong.java
+++ b/paper-api/src/main/java/org/bukkit/JukeboxSong.java
@@ -11,25 +11,46 @@ import org.jetbrains.annotations.NotNull;
 @ApiStatus.Experimental
 public interface JukeboxSong extends Keyed, Translatable {
 
-    public static final JukeboxSong THIRTEEN = get("13");
-    public static final JukeboxSong CAT = get("cat");
-    public static final JukeboxSong BLOCKS = get("blocks");
-    public static final JukeboxSong CHIRP = get("chirp");
-    public static final JukeboxSong FAR = get("far");
-    public static final JukeboxSong MALL = get("mall");
-    public static final JukeboxSong MELLOHI = get("mellohi");
-    public static final JukeboxSong STAL = get("stal");
-    public static final JukeboxSong STRAD = get("strad");
-    public static final JukeboxSong WARD = get("ward");
-    public static final JukeboxSong ELEVEN = get("11");
-    public static final JukeboxSong WAIT = get("wait");
-    public static final JukeboxSong PIGSTEP = get("pigstep");
-    public static final JukeboxSong OTHERSIDE = get("otherside");
-    public static final JukeboxSong FIVE = get("5");
-    public static final JukeboxSong RELIC = get("relic");
-    public static final JukeboxSong PRECIPICE = get("precipice");
-    public static final JukeboxSong CREATOR = get("creator");
-    public static final JukeboxSong CREATOR_MUSIC_BOX = get("creator_music_box");
+    // Start generate - JukeboxSong
+    // @GeneratedFrom 1.21.4
+    JukeboxSong ELEVEN = get("11");
+
+    JukeboxSong THIRTEEN = get("13");
+
+    JukeboxSong FIVE = get("5");
+
+    JukeboxSong BLOCKS = get("blocks");
+
+    JukeboxSong CAT = get("cat");
+
+    JukeboxSong CHIRP = get("chirp");
+
+    JukeboxSong CREATOR = get("creator");
+
+    JukeboxSong CREATOR_MUSIC_BOX = get("creator_music_box");
+
+    JukeboxSong FAR = get("far");
+
+    JukeboxSong MALL = get("mall");
+
+    JukeboxSong MELLOHI = get("mellohi");
+
+    JukeboxSong OTHERSIDE = get("otherside");
+
+    JukeboxSong PIGSTEP = get("pigstep");
+
+    JukeboxSong PRECIPICE = get("precipice");
+
+    JukeboxSong RELIC = get("relic");
+
+    JukeboxSong STAL = get("stal");
+
+    JukeboxSong STRAD = get("strad");
+
+    JukeboxSong WAIT = get("wait");
+
+    JukeboxSong WARD = get("ward");
+    // End generate - JukeboxSong
 
     @NotNull
     private static JukeboxSong get(@NotNull String key) {
diff --git a/paper-api/src/main/java/org/bukkit/Material.java b/paper-api/src/main/java/org/bukkit/Material.java
index 9afafc00e4..327dd6b380 100644
--- a/paper-api/src/main/java/org/bukkit/Material.java
+++ b/paper-api/src/main/java/org/bukkit/Material.java
@@ -9,6 +9,8 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
+import io.papermc.paper.datacomponent.DataComponentTypes;
+import io.papermc.paper.datacomponent.item.Equippable;
 import org.bukkit.attribute.Attribute;
 import org.bukkit.attribute.AttributeModifier;
 import org.bukkit.block.Block;
@@ -138,3682 +140,1549 @@ import org.jetbrains.annotations.Nullable;
 @SuppressWarnings({"DeprecatedIsStillUsed", "deprecation"}) // Paper
 public enum Material implements Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper
     //<editor-fold desc="Materials" defaultstate="collapsed">
-    AIR(9648, 64), // Paper - air stacks to 64
-    STONE(22948),
-    GRANITE(21091),
-    POLISHED_GRANITE(5477),
-    DIORITE(24688),
-    POLISHED_DIORITE(31615),
-    ANDESITE(25975),
-    POLISHED_ANDESITE(8335),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    DEEPSLATE(26842, Orientable.class),
-    COBBLED_DEEPSLATE(8021),
-    POLISHED_DEEPSLATE(31772),
-    CALCITE(20311),
-    TUFF(24364),
-    /**
-     * BlockData: {@link Slab}
-     */
-    TUFF_SLAB(19305, Slab.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    TUFF_STAIRS(11268, Stairs.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    TUFF_WALL(24395, Wall.class),
-    CHISELED_TUFF(15831),
-    POLISHED_TUFF(17801),
-    /**
-     * BlockData: {@link Slab}
-     */
-    POLISHED_TUFF_SLAB(31096, Slab.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    POLISHED_TUFF_STAIRS(7964, Stairs.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    POLISHED_TUFF_WALL(28886, Wall.class),
-    TUFF_BRICKS(26276),
-    /**
-     * BlockData: {@link Slab}
-     */
-    TUFF_BRICK_SLAB(11843, Slab.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    TUFF_BRICK_STAIRS(30753, Stairs.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    TUFF_BRICK_WALL(11761, Wall.class),
-    CHISELED_TUFF_BRICKS(8601),
-    DRIPSTONE_BLOCK(26227),
-    /**
-     * BlockData: {@link Snowable}
-     */
-    GRASS_BLOCK(28346, Snowable.class),
-    DIRT(10580),
-    COARSE_DIRT(15411),
-    /**
-     * BlockData: {@link Snowable}
-     */
-    PODZOL(24068, Snowable.class),
-    ROOTED_DIRT(11410),
-    MUD(32418),
-    CRIMSON_NYLIUM(18139),
-    WARPED_NYLIUM(26396),
-    COBBLESTONE(32147),
-    OAK_PLANKS(14905),
-    SPRUCE_PLANKS(14593),
-    BIRCH_PLANKS(29322),
-    JUNGLE_PLANKS(26445),
-    ACACIA_PLANKS(31312),
-    CHERRY_PLANKS(8354),
-    DARK_OAK_PLANKS(20869),
-    PALE_OAK_PLANKS(21660),
-    MANGROVE_PLANKS(7078),
-    BAMBOO_PLANKS(8520),
-    CRIMSON_PLANKS(18812),
-    WARPED_PLANKS(16045),
-    BAMBOO_MOSAIC(10715),
-    /**
-     * BlockData: {@link Sapling}
-     */
-    OAK_SAPLING(9636, Sapling.class),
-    /**
-     * BlockData: {@link Sapling}
-     */
-    SPRUCE_SAPLING(19874, Sapling.class),
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BIRCH_SAPLING(31533, Sapling.class),
-    /**
-     * BlockData: {@link Sapling}
-     */
-    JUNGLE_SAPLING(17951, Sapling.class),
-    /**
-     * BlockData: {@link Sapling}
-     */
-    ACACIA_SAPLING(20806, Sapling.class),
-    /**
-     * BlockData: {@link Sapling}
-     */
-    CHERRY_SAPLING(25204, Sapling.class),
-    /**
-     * BlockData: {@link Sapling}
-     */
-    DARK_OAK_SAPLING(14933, Sapling.class),
-    /**
-     * BlockData: {@link Sapling}
-     */
-    PALE_OAK_SAPLING(15508, Sapling.class),
-    /**
-     * BlockData: {@link MangrovePropagule}
-     */
-    MANGROVE_PROPAGULE(18688, MangrovePropagule.class),
-    BEDROCK(23130),
-    SAND(11542),
-    /**
-     * BlockData: {@link Brushable}
-     */
-    SUSPICIOUS_SAND(18410, Brushable.class),
-    /**
-     * BlockData: {@link Brushable}
-     */
-    SUSPICIOUS_GRAVEL(7353, Brushable.class),
-    RED_SAND(16279),
-    GRAVEL(7804),
-    COAL_ORE(30965),
-    DEEPSLATE_COAL_ORE(16823),
-    IRON_ORE(19834),
-    DEEPSLATE_IRON_ORE(26021),
-    COPPER_ORE(32666),
-    DEEPSLATE_COPPER_ORE(6588),
-    GOLD_ORE(32625),
-    DEEPSLATE_GOLD_ORE(13582),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    REDSTONE_ORE(10887, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    DEEPSLATE_REDSTONE_ORE(6331, Lightable.class),
-    EMERALD_ORE(16630),
-    DEEPSLATE_EMERALD_ORE(5299),
-    LAPIS_ORE(22934),
-    DEEPSLATE_LAPIS_ORE(13598),
-    DIAMOND_ORE(9292),
-    DEEPSLATE_DIAMOND_ORE(17792),
-    NETHER_GOLD_ORE(4185),
-    NETHER_QUARTZ_ORE(4807),
-    ANCIENT_DEBRIS(18198),
-    COAL_BLOCK(27968),
-    RAW_IRON_BLOCK(32210),
-    RAW_COPPER_BLOCK(17504),
-    RAW_GOLD_BLOCK(23246),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    HEAVY_CORE(15788, Waterlogged.class),
-    AMETHYST_BLOCK(18919),
-    BUDDING_AMETHYST(13963),
-    IRON_BLOCK(24754),
-    COPPER_BLOCK(12880),
-    GOLD_BLOCK(27392),
-    DIAMOND_BLOCK(5944),
-    NETHERITE_BLOCK(6527),
-    EXPOSED_COPPER(28488),
-    WEATHERED_COPPER(19699),
-    OXIDIZED_COPPER(19490),
-    CHISELED_COPPER(12143),
-    EXPOSED_CHISELED_COPPER(4570),
-    WEATHERED_CHISELED_COPPER(30876),
-    OXIDIZED_CHISELED_COPPER(27719),
-    CUT_COPPER(32519),
-    EXPOSED_CUT_COPPER(18000),
-    WEATHERED_CUT_COPPER(21158),
-    OXIDIZED_CUT_COPPER(5382),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    CUT_COPPER_STAIRS(25925, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    EXPOSED_CUT_COPPER_STAIRS(31621, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    WEATHERED_CUT_COPPER_STAIRS(5851, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    OXIDIZED_CUT_COPPER_STAIRS(25379, Stairs.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    CUT_COPPER_SLAB(28988, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    EXPOSED_CUT_COPPER_SLAB(26694, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    WEATHERED_CUT_COPPER_SLAB(4602, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    OXIDIZED_CUT_COPPER_SLAB(29642, Slab.class),
-    WAXED_COPPER_BLOCK(14638),
-    WAXED_EXPOSED_COPPER(27989),
-    WAXED_WEATHERED_COPPER(5960),
-    WAXED_OXIDIZED_COPPER(25626),
-    WAXED_CHISELED_COPPER(7500),
-    WAXED_EXPOSED_CHISELED_COPPER(30658),
-    WAXED_WEATHERED_CHISELED_COPPER(5970),
-    WAXED_OXIDIZED_CHISELED_COPPER(7735),
-    WAXED_CUT_COPPER(11030),
-    WAXED_EXPOSED_CUT_COPPER(30043),
-    WAXED_WEATHERED_CUT_COPPER(13823),
-    WAXED_OXIDIZED_CUT_COPPER(22582),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    WAXED_CUT_COPPER_STAIRS(23125, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    WAXED_EXPOSED_CUT_COPPER_STAIRS(15532, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    WAXED_WEATHERED_CUT_COPPER_STAIRS(29701, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    WAXED_OXIDIZED_CUT_COPPER_STAIRS(9842, Stairs.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    WAXED_CUT_COPPER_SLAB(6271, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    WAXED_EXPOSED_CUT_COPPER_SLAB(22091, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    WAXED_WEATHERED_CUT_COPPER_SLAB(20035, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    WAXED_OXIDIZED_CUT_COPPER_SLAB(11202, Slab.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    OAK_LOG(26723, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    SPRUCE_LOG(9726, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BIRCH_LOG(26727, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    JUNGLE_LOG(20721, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    ACACIA_LOG(8385, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    CHERRY_LOG(20847, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    PALE_OAK_LOG(13346, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    DARK_OAK_LOG(14831, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    MANGROVE_LOG(23890, Orientable.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    MANGROVE_ROOTS(22124, Waterlogged.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    MUDDY_MANGROVE_ROOTS(23244, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    CRIMSON_STEM(27920, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    WARPED_STEM(28920, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BAMBOO_BLOCK(20770, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_OAK_LOG(20523, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_SPRUCE_LOG(6140, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_BIRCH_LOG(8838, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_JUNGLE_LOG(15476, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_ACACIA_LOG(18167, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_CHERRY_LOG(18061, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_DARK_OAK_LOG(6492, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_PALE_OAK_LOG(25375, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_MANGROVE_LOG(15197, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_CRIMSON_STEM(16882, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_WARPED_STEM(15627, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_OAK_WOOD(31455, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_SPRUCE_WOOD(6467, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_BIRCH_WOOD(22350, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_JUNGLE_WOOD(30315, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_ACACIA_WOOD(27193, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_CHERRY_WOOD(19647, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_DARK_OAK_WOOD(16000, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_PALE_OAK_WOOD(20330, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_MANGROVE_WOOD(4828, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_CRIMSON_HYPHAE(27488, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_WARPED_HYPHAE(7422, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    STRIPPED_BAMBOO_BLOCK(14799, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    OAK_WOOD(7378, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    SPRUCE_WOOD(32328, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BIRCH_WOOD(20913, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    JUNGLE_WOOD(10341, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    ACACIA_WOOD(9541, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    CHERRY_WOOD(9826, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    PALE_OAK_WOOD(29429, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    DARK_OAK_WOOD(16995, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    MANGROVE_WOOD(25484, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    CRIMSON_HYPHAE(6550, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    WARPED_HYPHAE(18439, Orientable.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    OAK_LEAVES(4385, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    SPRUCE_LEAVES(20039, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BIRCH_LEAVES(12601, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    JUNGLE_LEAVES(5133, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    ACACIA_LEAVES(16606, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    CHERRY_LEAVES(20856, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    DARK_OAK_LEAVES(22254, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    PALE_OAK_LEAVES(6408, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    MANGROVE_LEAVES(15310, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    AZALEA_LEAVES(23001, Leaves.class),
-    /**
-     * BlockData: {@link Leaves}
-     */
-    FLOWERING_AZALEA_LEAVES(7139, Leaves.class),
-    SPONGE(15860),
-    WET_SPONGE(9043),
-    GLASS(6195),
-    TINTED_GLASS(19154),
-    LAPIS_BLOCK(14485),
-    SANDSTONE(13141),
-    CHISELED_SANDSTONE(31763),
-    CUT_SANDSTONE(6118),
-    COBWEB(9469),
-    SHORT_GRASS(16335),
-    FERN(15794),
-    AZALEA(29386),
-    FLOWERING_AZALEA(28270),
-    DEAD_BUSH(22888),
-    SEAGRASS(23942),
-    /**
-     * BlockData: {@link SeaPickle}
-     */
-    SEA_PICKLE(19562, SeaPickle.class),
-    WHITE_WOOL(8624),
-    ORANGE_WOOL(23957),
-    MAGENTA_WOOL(11853),
-    LIGHT_BLUE_WOOL(21073),
-    YELLOW_WOOL(29507),
-    LIME_WOOL(10443),
-    PINK_WOOL(7611),
-    GRAY_WOOL(27209),
-    LIGHT_GRAY_WOOL(22936),
-    CYAN_WOOL(12221),
-    PURPLE_WOOL(11922),
-    BLUE_WOOL(15738),
-    BROWN_WOOL(32638),
-    GREEN_WOOL(25085),
-    RED_WOOL(11621),
-    BLACK_WOOL(16693),
-    DANDELION(30558),
-    OPEN_EYEBLOSSOM(31238),
-    CLOSED_EYEBLOSSOM(29262),
-    POPPY(12851),
-    BLUE_ORCHID(13432),
-    ALLIUM(6871),
-    AZURE_BLUET(17608),
-    RED_TULIP(16781),
-    ORANGE_TULIP(26038),
-    WHITE_TULIP(31495),
-    PINK_TULIP(27319),
-    OXEYE_DAISY(11709),
-    CORNFLOWER(15405),
-    LILY_OF_THE_VALLEY(7185),
-    WITHER_ROSE(8619),
-    TORCHFLOWER(4501),
-    /**
-     * BlockData: {@link Bisected}
-     */
-    PITCHER_PLANT(28172, Bisected.class),
-    SPORE_BLOSSOM(20627),
-    BROWN_MUSHROOM(9665),
-    RED_MUSHROOM(19728),
-    CRIMSON_FUNGUS(26268),
-    WARPED_FUNGUS(19799),
-    CRIMSON_ROOTS(14064),
-    WARPED_ROOTS(13932),
-    NETHER_SPROUTS(10431),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    WEEPING_VINES(29267, Ageable.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    TWISTING_VINES(27283, Ageable.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    SUGAR_CANE(7726, Ageable.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    KELP(21916, Ageable.class),
-    /**
-     * BlockData: {@link PinkPetals}
-     */
-    PINK_PETALS(10420, PinkPetals.class),
-    MOSS_CARPET(8221),
-    MOSS_BLOCK(9175),
-    /**
-     * BlockData: {@link MossyCarpet}
-     */
-    PALE_MOSS_CARPET(24824, MossyCarpet.class),
-    /**
-     * BlockData: {@link HangingMoss}
-     */
-    PALE_HANGING_MOSS(13108, HangingMoss.class),
-    PALE_MOSS_BLOCK(5318),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    HANGING_ROOTS(15498, Waterlogged.class),
-    /**
-     * BlockData: {@link BigDripleaf}
-     */
-    BIG_DRIPLEAF(26173, BigDripleaf.class),
-    /**
-     * BlockData: {@link SmallDripleaf}
-     */
-    SMALL_DRIPLEAF(17540, SmallDripleaf.class),
-    /**
-     * BlockData: {@link Bamboo}
-     */
-    BAMBOO(18728, Bamboo.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    OAK_SLAB(12002, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    SPRUCE_SLAB(28798, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    BIRCH_SLAB(13807, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    JUNGLE_SLAB(19117, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    ACACIA_SLAB(23730, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    CHERRY_SLAB(16673, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    DARK_OAK_SLAB(28852, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    PALE_OAK_SLAB(22048, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    MANGROVE_SLAB(13704, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    BAMBOO_SLAB(17798, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    BAMBOO_MOSAIC_SLAB(22118, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    CRIMSON_SLAB(4691, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    WARPED_SLAB(27150, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    STONE_SLAB(19838, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    SMOOTH_STONE_SLAB(24129, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    SANDSTONE_SLAB(29830, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    CUT_SANDSTONE_SLAB(30944, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    PETRIFIED_OAK_SLAB(18658, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    COBBLESTONE_SLAB(6340, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    BRICK_SLAB(26333, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    STONE_BRICK_SLAB(19676, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    MUD_BRICK_SLAB(10611, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    NETHER_BRICK_SLAB(26586, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    QUARTZ_SLAB(4423, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    RED_SANDSTONE_SLAB(17550, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    CUT_RED_SANDSTONE_SLAB(7220, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    PURPUR_SLAB(11487, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    PRISMARINE_SLAB(31323, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    PRISMARINE_BRICK_SLAB(25624, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    DARK_PRISMARINE_SLAB(7577, Slab.class),
-    SMOOTH_QUARTZ(14415),
-    SMOOTH_RED_SANDSTONE(25180),
-    SMOOTH_SANDSTONE(30039),
-    SMOOTH_STONE(21910),
-    BRICKS(14165),
-    BOOKSHELF(10069),
-    /**
-     * BlockData: {@link ChiseledBookshelf}
-     */
-    CHISELED_BOOKSHELF(8099, ChiseledBookshelf.class),
-    /**
-     * BlockData: {@link DecoratedPot}
-     */
-    DECORATED_POT(8720, DecoratedPot.class),
-    MOSSY_COBBLESTONE(21900),
-    OBSIDIAN(32723),
-    TORCH(6063),
-    /**
-     * BlockData: {@link Directional}
-     */
-    END_ROD(24832, Directional.class),
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    CHORUS_PLANT(28243, MultipleFacing.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    CHORUS_FLOWER(28542, Ageable.class),
-    PURPUR_BLOCK(7538),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    PURPUR_PILLAR(26718, Orientable.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    PURPUR_STAIRS(8921, Stairs.class),
-    SPAWNER(7018),
-    /**
-     * BlockData: {@link CreakingHeart}
-     */
-    CREAKING_HEART(11442, CreakingHeart.class),
-    /**
-     * BlockData: {@link Chest}
-     */
-    CHEST(22969, Chest.class),
-    CRAFTING_TABLE(20706),
-    /**
-     * BlockData: {@link Farmland}
-     */
-    FARMLAND(31166, Farmland.class),
-    /**
-     * BlockData: {@link Furnace}
-     */
-    FURNACE(8133, Furnace.class),
-    /**
-     * BlockData: {@link Ladder}
-     */
-    LADDER(23599, Ladder.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    COBBLESTONE_STAIRS(24715, Stairs.class),
-    /**
-     * BlockData: {@link Snow}
-     */
-    SNOW(14146, Snow.class),
-    ICE(30428),
-    SNOW_BLOCK(19913),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    CACTUS(12191, Ageable.class),
-    CLAY(27880),
-    /**
-     * BlockData: {@link Jukebox}
-     */
-    JUKEBOX(19264, Jukebox.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    OAK_FENCE(6442, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    SPRUCE_FENCE(25416, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    BIRCH_FENCE(17347, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    JUNGLE_FENCE(14358, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    ACACIA_FENCE(4569, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    CHERRY_FENCE(32047, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    DARK_OAK_FENCE(21767, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    PALE_OAK_FENCE(10547, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    MANGROVE_FENCE(15021, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    BAMBOO_FENCE(17207, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    CRIMSON_FENCE(21075, Fence.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    WARPED_FENCE(18438, Fence.class),
-    PUMPKIN(19170),
-    /**
-     * BlockData: {@link Directional}
-     */
-    CARVED_PUMPKIN(25833, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    JACK_O_LANTERN(13758, Directional.class),
-    NETHERRACK(23425),
-    SOUL_SAND(16841),
-    SOUL_SOIL(31140),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BASALT(28478, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    POLISHED_BASALT(11659, Orientable.class),
-    SMOOTH_BASALT(13617),
-    SOUL_TORCH(14292),
-    GLOWSTONE(32713),
-    INFESTED_STONE(18440),
-    INFESTED_COBBLESTONE(4348),
-    INFESTED_STONE_BRICKS(19749),
-    INFESTED_MOSSY_STONE_BRICKS(9850),
-    INFESTED_CRACKED_STONE_BRICKS(7476),
-    INFESTED_CHISELED_STONE_BRICKS(4728),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    INFESTED_DEEPSLATE(9472, Orientable.class),
-    STONE_BRICKS(6962),
-    MOSSY_STONE_BRICKS(16415),
-    CRACKED_STONE_BRICKS(27869),
-    CHISELED_STONE_BRICKS(9087),
-    PACKED_MUD(7472),
-    MUD_BRICKS(29168),
-    DEEPSLATE_BRICKS(13193),
-    CRACKED_DEEPSLATE_BRICKS(17105),
-    DEEPSLATE_TILES(11250),
-    CRACKED_DEEPSLATE_TILES(26249),
-    CHISELED_DEEPSLATE(23825),
-    REINFORCED_DEEPSLATE(10949),
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    BROWN_MUSHROOM_BLOCK(6291, MultipleFacing.class),
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    RED_MUSHROOM_BLOCK(20766, MultipleFacing.class),
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    MUSHROOM_STEM(16543, MultipleFacing.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    IRON_BARS(9378, Fence.class),
-    /**
-     * BlockData: {@link Chain}
-     */
-    CHAIN(28265, Chain.class),
-    /**
-     * BlockData: {@link Fence}
-     */
-    GLASS_PANE(5709, Fence.class),
-    MELON(25172),
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    VINE(14564, MultipleFacing.class),
-    /**
-     * BlockData: {@link GlowLichen}
-     */
-    GLOW_LICHEN(19165, GlowLichen.class),
-    /**
-     * BlockData: {@link ResinClump}
-     */
-    RESIN_CLUMP(28662, ResinClump.class),
-    RESIN_BLOCK(26344),
-    RESIN_BRICKS(8331),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    RESIN_BRICK_STAIRS(31170, Stairs.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    RESIN_BRICK_SLAB(25553, Slab.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    RESIN_BRICK_WALL(8538, Wall.class),
-    CHISELED_RESIN_BRICKS(5529),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BRICK_STAIRS(21534, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    STONE_BRICK_STAIRS(27032, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    MUD_BRICK_STAIRS(13620, Stairs.class),
-    /**
-     * BlockData: {@link Snowable}
-     */
-    MYCELIUM(9913, Snowable.class),
-    LILY_PAD(19271),
-    NETHER_BRICKS(27802),
-    CRACKED_NETHER_BRICKS(10888),
-    CHISELED_NETHER_BRICKS(21613),
-    /**
-     * BlockData: {@link Fence}
-     */
-    NETHER_BRICK_FENCE(5286, Fence.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    NETHER_BRICK_STAIRS(12085, Stairs.class),
-    SCULK(17870),
-    /**
-     * BlockData: {@link SculkVein}
-     */
-    SCULK_VEIN(11615, SculkVein.class),
-    /**
-     * BlockData: {@link SculkCatalyst}
-     */
-    SCULK_CATALYST(12017, SculkCatalyst.class),
-    /**
-     * BlockData: {@link SculkShrieker}
-     */
-    SCULK_SHRIEKER(20985, SculkShrieker.class),
-    ENCHANTING_TABLE(16255),
-    /**
-     * BlockData: {@link EndPortalFrame}
-     */
-    END_PORTAL_FRAME(15480, EndPortalFrame.class),
-    END_STONE(29686),
-    END_STONE_BRICKS(20314),
-    DRAGON_EGG(29946),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    SANDSTONE_STAIRS(18474, Stairs.class),
-    /**
-     * BlockData: {@link EnderChest}
-     */
-    ENDER_CHEST(32349, EnderChest.class),
-    EMERALD_BLOCK(9914),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    OAK_STAIRS(5449, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    SPRUCE_STAIRS(11192, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BIRCH_STAIRS(7657, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    JUNGLE_STAIRS(20636, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    ACACIA_STAIRS(17453, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    CHERRY_STAIRS(18380, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    DARK_OAK_STAIRS(22921, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    PALE_OAK_STAIRS(20755, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    MANGROVE_STAIRS(27641, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BAMBOO_STAIRS(25674, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BAMBOO_MOSAIC_STAIRS(20977, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    CRIMSON_STAIRS(32442, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    WARPED_STAIRS(17721, Stairs.class),
-    /**
-     * BlockData: {@link CommandBlock}
-     */
-    COMMAND_BLOCK(4355, CommandBlock.class),
-    BEACON(6608),
-    /**
-     * BlockData: {@link Wall}
-     */
-    COBBLESTONE_WALL(12616, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    MOSSY_COBBLESTONE_WALL(11536, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    BRICK_WALL(18995, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    PRISMARINE_WALL(18184, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    RED_SANDSTONE_WALL(4753, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    MOSSY_STONE_BRICK_WALL(18259, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    GRANITE_WALL(23279, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    STONE_BRICK_WALL(29073, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    MUD_BRICK_WALL(18292, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    NETHER_BRICK_WALL(10398, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    ANDESITE_WALL(14938, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    RED_NETHER_BRICK_WALL(4580, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    SANDSTONE_WALL(18470, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    END_STONE_BRICK_WALL(27225, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    DIORITE_WALL(17412, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    BLACKSTONE_WALL(17327, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    POLISHED_BLACKSTONE_WALL(15119, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    POLISHED_BLACKSTONE_BRICK_WALL(9540, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    COBBLED_DEEPSLATE_WALL(21893, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    POLISHED_DEEPSLATE_WALL(6574, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    DEEPSLATE_BRICK_WALL(13304, Wall.class),
-    /**
-     * BlockData: {@link Wall}
-     */
-    DEEPSLATE_TILE_WALL(17077, Wall.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    ANVIL(18718, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    CHIPPED_ANVIL(10623, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    DAMAGED_ANVIL(10274, Directional.class),
-    CHISELED_QUARTZ_BLOCK(30964),
-    QUARTZ_BLOCK(11987),
-    QUARTZ_BRICKS(23358),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    QUARTZ_PILLAR(16452, Orientable.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    QUARTZ_STAIRS(24079, Stairs.class),
-    WHITE_TERRACOTTA(20975),
-    ORANGE_TERRACOTTA(18684),
-    MAGENTA_TERRACOTTA(25900),
-    LIGHT_BLUE_TERRACOTTA(31779),
-    YELLOW_TERRACOTTA(32129),
-    LIME_TERRACOTTA(24013),
-    PINK_TERRACOTTA(23727),
-    GRAY_TERRACOTTA(18004),
-    LIGHT_GRAY_TERRACOTTA(26388),
-    CYAN_TERRACOTTA(25940),
-    PURPLE_TERRACOTTA(10387),
-    BLUE_TERRACOTTA(5236),
-    BROWN_TERRACOTTA(23664),
-    GREEN_TERRACOTTA(4105),
-    RED_TERRACOTTA(5086),
-    BLACK_TERRACOTTA(26691),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BARRIER(26453, Waterlogged.class),
-    /**
-     * BlockData: {@link Light}
-     */
-    LIGHT(17829, Light.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    HAY_BLOCK(17461, Orientable.class),
-    WHITE_CARPET(15117),
-    ORANGE_CARPET(24752),
-    MAGENTA_CARPET(6180),
-    LIGHT_BLUE_CARPET(21194),
-    YELLOW_CARPET(18149),
-    LIME_CARPET(15443),
-    PINK_CARPET(27381),
-    GRAY_CARPET(26991),
-    LIGHT_GRAY_CARPET(11317),
-    CYAN_CARPET(9742),
-    PURPLE_CARPET(5574),
-    BLUE_CARPET(13292),
-    BROWN_CARPET(23352),
-    GREEN_CARPET(7780),
-    RED_CARPET(5424),
-    BLACK_CARPET(6056),
-    TERRACOTTA(16544),
-    PACKED_ICE(28993),
-    DIRT_PATH(10846),
-    /**
-     * BlockData: {@link Bisected}
-     */
-    SUNFLOWER(7408, Bisected.class),
-    /**
-     * BlockData: {@link Bisected}
-     */
-    LILAC(22837, Bisected.class),
-    /**
-     * BlockData: {@link Bisected}
-     */
-    ROSE_BUSH(6080, Bisected.class),
-    /**
-     * BlockData: {@link Bisected}
-     */
-    PEONY(21155, Bisected.class),
-    /**
-     * BlockData: {@link Bisected}
-     */
-    TALL_GRASS(21559, Bisected.class),
-    /**
-     * BlockData: {@link Bisected}
-     */
-    LARGE_FERN(30177, Bisected.class),
-    WHITE_STAINED_GLASS(31190),
-    ORANGE_STAINED_GLASS(25142),
-    MAGENTA_STAINED_GLASS(26814),
-    LIGHT_BLUE_STAINED_GLASS(17162),
-    YELLOW_STAINED_GLASS(12182),
-    LIME_STAINED_GLASS(24266),
-    PINK_STAINED_GLASS(16164),
-    GRAY_STAINED_GLASS(29979),
-    LIGHT_GRAY_STAINED_GLASS(5843),
-    CYAN_STAINED_GLASS(30604),
-    PURPLE_STAINED_GLASS(21845),
-    BLUE_STAINED_GLASS(7107),
-    BROWN_STAINED_GLASS(20945),
-    GREEN_STAINED_GLASS(22503),
-    RED_STAINED_GLASS(9717),
-    BLACK_STAINED_GLASS(13941),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    WHITE_STAINED_GLASS_PANE(10557, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    ORANGE_STAINED_GLASS_PANE(21089, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    MAGENTA_STAINED_GLASS_PANE(14082, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    LIGHT_BLUE_STAINED_GLASS_PANE(18721, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    YELLOW_STAINED_GLASS_PANE(20298, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    LIME_STAINED_GLASS_PANE(10610, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    PINK_STAINED_GLASS_PANE(24637, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    GRAY_STAINED_GLASS_PANE(25272, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    LIGHT_GRAY_STAINED_GLASS_PANE(19008, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    CYAN_STAINED_GLASS_PANE(11784, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    PURPLE_STAINED_GLASS_PANE(10948, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BLUE_STAINED_GLASS_PANE(28484, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BROWN_STAINED_GLASS_PANE(17557, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    GREEN_STAINED_GLASS_PANE(4767, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    RED_STAINED_GLASS_PANE(8630, GlassPane.class),
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BLACK_STAINED_GLASS_PANE(13201, GlassPane.class),
-    PRISMARINE(7539),
-    PRISMARINE_BRICKS(29118),
-    DARK_PRISMARINE(19940),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    PRISMARINE_STAIRS(19217, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    PRISMARINE_BRICK_STAIRS(15445, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    DARK_PRISMARINE_STAIRS(26511, Stairs.class),
-    SEA_LANTERN(20780),
-    RED_SANDSTONE(9092),
-    CHISELED_RED_SANDSTONE(15529),
-    CUT_RED_SANDSTONE(29108),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    RED_SANDSTONE_STAIRS(25466, Stairs.class),
-    /**
-     * BlockData: {@link CommandBlock}
-     */
-    REPEATING_COMMAND_BLOCK(12405, CommandBlock.class),
-    /**
-     * BlockData: {@link CommandBlock}
-     */
-    CHAIN_COMMAND_BLOCK(26798, CommandBlock.class),
-    MAGMA_BLOCK(25927),
-    NETHER_WART_BLOCK(15486),
-    WARPED_WART_BLOCK(15463),
-    RED_NETHER_BRICKS(18056),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BONE_BLOCK(17312, Orientable.class),
-    STRUCTURE_VOID(30806),
-    /**
-     * BlockData: {@link Directional}
-     */
-    SHULKER_BOX(7776, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    WHITE_SHULKER_BOX(31750, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    ORANGE_SHULKER_BOX(21673, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    MAGENTA_SHULKER_BOX(21566, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIGHT_BLUE_SHULKER_BOX(18226, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    YELLOW_SHULKER_BOX(28700, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIME_SHULKER_BOX(28360, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    PINK_SHULKER_BOX(24968, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    GRAY_SHULKER_BOX(12754, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIGHT_GRAY_SHULKER_BOX(21345, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    CYAN_SHULKER_BOX(28123, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    PURPLE_SHULKER_BOX(10373, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BLUE_SHULKER_BOX(11476, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BROWN_SHULKER_BOX(24230, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    GREEN_SHULKER_BOX(9377, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    RED_SHULKER_BOX(32448, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BLACK_SHULKER_BOX(24076, 1, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    WHITE_GLAZED_TERRACOTTA(11326, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    ORANGE_GLAZED_TERRACOTTA(27451, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    MAGENTA_GLAZED_TERRACOTTA(8067, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIGHT_BLUE_GLAZED_TERRACOTTA(4336, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    YELLOW_GLAZED_TERRACOTTA(10914, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIME_GLAZED_TERRACOTTA(13861, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    PINK_GLAZED_TERRACOTTA(10260, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    GRAY_GLAZED_TERRACOTTA(6256, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIGHT_GRAY_GLAZED_TERRACOTTA(10707, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    CYAN_GLAZED_TERRACOTTA(9550, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    PURPLE_GLAZED_TERRACOTTA(4818, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BLUE_GLAZED_TERRACOTTA(23823, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BROWN_GLAZED_TERRACOTTA(5655, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    GREEN_GLAZED_TERRACOTTA(6958, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    RED_GLAZED_TERRACOTTA(24989, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BLACK_GLAZED_TERRACOTTA(29678, Directional.class),
-    WHITE_CONCRETE(6281),
-    ORANGE_CONCRETE(19914),
-    MAGENTA_CONCRETE(20591),
-    LIGHT_BLUE_CONCRETE(29481),
-    YELLOW_CONCRETE(15722),
-    LIME_CONCRETE(5863),
-    PINK_CONCRETE(5227),
-    GRAY_CONCRETE(13959),
-    LIGHT_GRAY_CONCRETE(14453),
-    CYAN_CONCRETE(26522),
-    PURPLE_CONCRETE(20623),
-    BLUE_CONCRETE(18756),
-    BROWN_CONCRETE(19006),
-    GREEN_CONCRETE(17949),
-    RED_CONCRETE(8032),
-    BLACK_CONCRETE(13338),
-    WHITE_CONCRETE_POWDER(10363),
-    ORANGE_CONCRETE_POWDER(30159),
-    MAGENTA_CONCRETE_POWDER(8272),
-    LIGHT_BLUE_CONCRETE_POWDER(31206),
-    YELLOW_CONCRETE_POWDER(10655),
-    LIME_CONCRETE_POWDER(28859),
-    PINK_CONCRETE_POWDER(6421),
-    GRAY_CONCRETE_POWDER(13031),
-    LIGHT_GRAY_CONCRETE_POWDER(21589),
-    CYAN_CONCRETE_POWDER(15734),
-    PURPLE_CONCRETE_POWDER(26808),
-    BLUE_CONCRETE_POWDER(17773),
-    BROWN_CONCRETE_POWDER(21485),
-    GREEN_CONCRETE_POWDER(6904),
-    RED_CONCRETE_POWDER(13286),
-    BLACK_CONCRETE_POWDER(16150),
-    /**
-     * BlockData: {@link TurtleEgg}
-     */
-    TURTLE_EGG(32101, TurtleEgg.class),
-    /**
-     * BlockData: {@link Hatchable}
-     */
-    SNIFFER_EGG(12980, Hatchable.class),
-    DEAD_TUBE_CORAL_BLOCK(28350),
-    DEAD_BRAIN_CORAL_BLOCK(12979),
-    DEAD_BUBBLE_CORAL_BLOCK(28220),
-    DEAD_FIRE_CORAL_BLOCK(5307),
-    DEAD_HORN_CORAL_BLOCK(15103),
-    TUBE_CORAL_BLOCK(23723),
-    BRAIN_CORAL_BLOCK(30618),
-    BUBBLE_CORAL_BLOCK(15437),
-    FIRE_CORAL_BLOCK(12119),
-    HORN_CORAL_BLOCK(19958),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    TUBE_CORAL(23048, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BRAIN_CORAL(31316, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BUBBLE_CORAL(12464, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    FIRE_CORAL(29151, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    HORN_CORAL(19511, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_BRAIN_CORAL(9116, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_BUBBLE_CORAL(30583, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_FIRE_CORAL(8365, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_HORN_CORAL(5755, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_TUBE_CORAL(18028, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    TUBE_CORAL_FAN(19929, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BRAIN_CORAL_FAN(13849, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BUBBLE_CORAL_FAN(10795, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    FIRE_CORAL_FAN(11112, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    HORN_CORAL_FAN(13610, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_TUBE_CORAL_FAN(17628, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_BRAIN_CORAL_FAN(26150, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_BUBBLE_CORAL_FAN(17322, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_FIRE_CORAL_FAN(27073, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    DEAD_HORN_CORAL_FAN(11387, Waterlogged.class),
-    BLUE_ICE(22449),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    CONDUIT(5148, Waterlogged.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    POLISHED_GRANITE_STAIRS(29588, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    SMOOTH_RED_SANDSTONE_STAIRS(17561, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    MOSSY_STONE_BRICK_STAIRS(27578, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    POLISHED_DIORITE_STAIRS(4625, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    MOSSY_COBBLESTONE_STAIRS(29210, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    END_STONE_BRICK_STAIRS(28831, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    STONE_STAIRS(23784, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    SMOOTH_SANDSTONE_STAIRS(21183, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    SMOOTH_QUARTZ_STAIRS(19560, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    GRANITE_STAIRS(21840, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    ANDESITE_STAIRS(17747, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    RED_NETHER_BRICK_STAIRS(26374, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    POLISHED_ANDESITE_STAIRS(7573, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    DIORITE_STAIRS(13134, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    COBBLED_DEEPSLATE_STAIRS(20699, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    POLISHED_DEEPSLATE_STAIRS(19513, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    DEEPSLATE_BRICK_STAIRS(29624, Stairs.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    DEEPSLATE_TILE_STAIRS(6361, Stairs.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    POLISHED_GRANITE_SLAB(4521, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    SMOOTH_RED_SANDSTONE_SLAB(16304, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    MOSSY_STONE_BRICK_SLAB(14002, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    POLISHED_DIORITE_SLAB(18303, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    MOSSY_COBBLESTONE_SLAB(12139, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    END_STONE_BRICK_SLAB(23239, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    SMOOTH_SANDSTONE_SLAB(9030, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    SMOOTH_QUARTZ_SLAB(26543, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    GRANITE_SLAB(10901, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    ANDESITE_SLAB(32124, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    RED_NETHER_BRICK_SLAB(12462, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    POLISHED_ANDESITE_SLAB(24573, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    DIORITE_SLAB(25526, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    COBBLED_DEEPSLATE_SLAB(17388, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    POLISHED_DEEPSLATE_SLAB(32201, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    DEEPSLATE_BRICK_SLAB(23910, Slab.class),
-    /**
-     * BlockData: {@link Slab}
-     */
-    DEEPSLATE_TILE_SLAB(13315, Slab.class),
-    /**
-     * BlockData: {@link Scaffolding}
-     */
-    SCAFFOLDING(15757, Scaffolding.class),
-    REDSTONE(11233),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    REDSTONE_TORCH(22547, Lightable.class),
-    REDSTONE_BLOCK(19496),
-    /**
-     * BlockData: {@link Repeater}
-     */
-    REPEATER(28823, Repeater.class),
-    /**
-     * BlockData: {@link Comparator}
-     */
-    COMPARATOR(18911, Comparator.class),
-    /**
-     * BlockData: {@link Piston}
-     */
-    PISTON(21130, Piston.class),
-    /**
-     * BlockData: {@link Piston}
-     */
-    STICKY_PISTON(18127, Piston.class),
-    SLIME_BLOCK(31892),
-    HONEY_BLOCK(30615),
-    /**
-     * BlockData: {@link Observer}
-     */
-    OBSERVER(10726, Observer.class),
-    /**
-     * BlockData: {@link Hopper}
-     */
-    HOPPER(31974, Hopper.class),
-    /**
-     * BlockData: {@link Dispenser}
-     */
-    DISPENSER(20871, Dispenser.class),
-    /**
-     * BlockData: {@link Dispenser}
-     */
-    DROPPER(31273, Dispenser.class),
-    /**
-     * BlockData: {@link Lectern}
-     */
-    LECTERN(23490, Lectern.class),
-    /**
-     * BlockData: {@link AnaloguePowerable}
-     */
-    TARGET(22637, AnaloguePowerable.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    LEVER(15319, Switch.class),
-    /**
-     * BlockData: {@link LightningRod}
-     */
-    LIGHTNING_ROD(30770, LightningRod.class),
-    /**
-     * BlockData: {@link DaylightDetector}
-     */
-    DAYLIGHT_DETECTOR(8864, DaylightDetector.class),
-    /**
-     * BlockData: {@link SculkSensor}
-     */
-    SCULK_SENSOR(5598, SculkSensor.class),
-    /**
-     * BlockData: {@link CalibratedSculkSensor}
-     */
-    CALIBRATED_SCULK_SENSOR(21034, CalibratedSculkSensor.class),
-    /**
-     * BlockData: {@link TripwireHook}
-     */
-    TRIPWIRE_HOOK(8130, TripwireHook.class),
-    /**
-     * BlockData: {@link Chest}
-     */
-    TRAPPED_CHEST(18970, Chest.class),
-    /**
-     * BlockData: {@link TNT}
-     */
-    TNT(7896, TNT.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    REDSTONE_LAMP(8217, Lightable.class),
-    /**
-     * BlockData: {@link NoteBlock}
-     */
-    NOTE_BLOCK(20979, NoteBlock.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    STONE_BUTTON(12279, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    POLISHED_BLACKSTONE_BUTTON(20760, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    OAK_BUTTON(13510, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    SPRUCE_BUTTON(23281, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    BIRCH_BUTTON(26934, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    JUNGLE_BUTTON(25317, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    ACACIA_BUTTON(13993, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    CHERRY_BUTTON(9058, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    DARK_OAK_BUTTON(6214, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    PALE_OAK_BUTTON(5238, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    MANGROVE_BUTTON(9838, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    BAMBOO_BUTTON(21810, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    CRIMSON_BUTTON(26799, Switch.class),
-    /**
-     * BlockData: {@link Switch}
-     */
-    WARPED_BUTTON(25264, Switch.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    STONE_PRESSURE_PLATE(22591, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    POLISHED_BLACKSTONE_PRESSURE_PLATE(32340, Powerable.class),
-    /**
-     * BlockData: {@link AnaloguePowerable}
-     */
-    LIGHT_WEIGHTED_PRESSURE_PLATE(14875, AnaloguePowerable.class),
-    /**
-     * BlockData: {@link AnaloguePowerable}
-     */
-    HEAVY_WEIGHTED_PRESSURE_PLATE(16970, AnaloguePowerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    OAK_PRESSURE_PLATE(20108, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    SPRUCE_PRESSURE_PLATE(15932, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BIRCH_PRESSURE_PLATE(9664, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    JUNGLE_PRESSURE_PLATE(11376, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    ACACIA_PRESSURE_PLATE(17586, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    CHERRY_PRESSURE_PLATE(8651, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    DARK_OAK_PRESSURE_PLATE(31375, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    PALE_OAK_PRESSURE_PLATE(30527, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    MANGROVE_PRESSURE_PLATE(9748, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BAMBOO_PRESSURE_PLATE(26740, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    CRIMSON_PRESSURE_PLATE(18316, Powerable.class),
-    /**
-     * BlockData: {@link Powerable}
-     */
-    WARPED_PRESSURE_PLATE(29516, Powerable.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    IRON_DOOR(4788, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    OAK_DOOR(20341, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    SPRUCE_DOOR(10642, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    BIRCH_DOOR(14759, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    JUNGLE_DOOR(28163, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    ACACIA_DOOR(23797, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    CHERRY_DOOR(12684, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    DARK_OAK_DOOR(10669, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    PALE_OAK_DOOR(23817, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    MANGROVE_DOOR(18964, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    BAMBOO_DOOR(19971, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    CRIMSON_DOOR(19544, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    WARPED_DOOR(15062, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    COPPER_DOOR(26809, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    EXPOSED_COPPER_DOOR(13236, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    WEATHERED_COPPER_DOOR(10208, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    OXIDIZED_COPPER_DOOR(5348, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    WAXED_COPPER_DOOR(9954, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    WAXED_EXPOSED_COPPER_DOOR(20748, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    WAXED_WEATHERED_COPPER_DOOR(25073, Door.class),
-    /**
-     * BlockData: {@link Door}
-     */
-    WAXED_OXIDIZED_COPPER_DOOR(23888, Door.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    IRON_TRAPDOOR(17095, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    OAK_TRAPDOOR(16927, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    SPRUCE_TRAPDOOR(10289, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BIRCH_TRAPDOOR(32585, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    JUNGLE_TRAPDOOR(8626, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    ACACIA_TRAPDOOR(18343, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    CHERRY_TRAPDOOR(6293, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    DARK_OAK_TRAPDOOR(10355, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    PALE_OAK_TRAPDOOR(20647, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    MANGROVE_TRAPDOOR(17066, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BAMBOO_TRAPDOOR(9174, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    CRIMSON_TRAPDOOR(25056, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    WARPED_TRAPDOOR(7708, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    COPPER_TRAPDOOR(12110, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    EXPOSED_COPPER_TRAPDOOR(19219, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    WEATHERED_COPPER_TRAPDOOR(28254, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    OXIDIZED_COPPER_TRAPDOOR(26518, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    WAXED_COPPER_TRAPDOOR(12626, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    WAXED_EXPOSED_COPPER_TRAPDOOR(11010, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    WAXED_WEATHERED_COPPER_TRAPDOOR(30709, TrapDoor.class),
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    WAXED_OXIDIZED_COPPER_TRAPDOOR(21450, TrapDoor.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    OAK_FENCE_GATE(16689, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    SPRUCE_FENCE_GATE(26423, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    BIRCH_FENCE_GATE(6322, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    JUNGLE_FENCE_GATE(21360, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    ACACIA_FENCE_GATE(14145, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    CHERRY_FENCE_GATE(28222, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    DARK_OAK_FENCE_GATE(10679, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    PALE_OAK_FENCE_GATE(21221, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    MANGROVE_FENCE_GATE(28476, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    BAMBOO_FENCE_GATE(14290, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    CRIMSON_FENCE_GATE(15602, Gate.class),
-    /**
-     * BlockData: {@link Gate}
-     */
-    WARPED_FENCE_GATE(11115, Gate.class),
-    /**
-     * BlockData: {@link RedstoneRail}
-     */
-    POWERED_RAIL(11064, RedstoneRail.class),
-    /**
-     * BlockData: {@link RedstoneRail}
-     */
-    DETECTOR_RAIL(13475, RedstoneRail.class),
-    /**
-     * BlockData: {@link Rail}
-     */
-    RAIL(13285, Rail.class),
-    /**
-     * BlockData: {@link RedstoneRail}
-     */
-    ACTIVATOR_RAIL(5834, RedstoneRail.class),
-    SADDLE(30206, 1),
-    MINECART(14352, 1),
-    CHEST_MINECART(4497, 1),
-    FURNACE_MINECART(14196, 1),
-    TNT_MINECART(4277, 1),
-    HOPPER_MINECART(19024, 1),
-    CARROT_ON_A_STICK(27809, 1, 25),
-    WARPED_FUNGUS_ON_A_STICK(11706, 1, 100),
-    PHANTOM_MEMBRANE(18398),
-    ELYTRA(23829, 1, 432),
-    OAK_BOAT(17570, 1),
-    OAK_CHEST_BOAT(7765, 1),
-    SPRUCE_BOAT(31427, 1),
-    SPRUCE_CHEST_BOAT(30841, 1),
-    BIRCH_BOAT(28104, 1),
-    BIRCH_CHEST_BOAT(18546, 1),
-    JUNGLE_BOAT(4495, 1),
-    JUNGLE_CHEST_BOAT(20133, 1),
-    ACACIA_BOAT(27326, 1),
-    ACACIA_CHEST_BOAT(28455, 1),
-    CHERRY_BOAT(13628, 1),
-    CHERRY_CHEST_BOAT(7165, 1),
-    DARK_OAK_BOAT(28618, 1),
-    DARK_OAK_CHEST_BOAT(8733, 1),
-    PALE_OAK_BOAT(18534, 1),
-    PALE_OAK_CHEST_BOAT(26297, 1),
-    MANGROVE_BOAT(20792, 1),
-    MANGROVE_CHEST_BOAT(18572, 1),
-    BAMBOO_RAFT(25901, 1),
-    BAMBOO_CHEST_RAFT(20056, 1),
-    /**
-     * BlockData: {@link StructureBlock}
-     */
-    STRUCTURE_BLOCK(26831, StructureBlock.class),
-    /**
-     * BlockData: {@link Jigsaw}
-     */
-    JIGSAW(17398, Jigsaw.class),
-    TURTLE_HELMET(30120, 1, 275),
-    TURTLE_SCUTE(6766),
-    ARMADILLO_SCUTE(11497),
-    WOLF_ARMOR(17138, 1, 64),
-    FLINT_AND_STEEL(28620, 1, 64),
-    BOWL(32661),
-    APPLE(7720),
-    BOW(8745, 1, 384),
-    ARROW(31091),
-    COAL(29067),
-    CHARCOAL(5390),
-    DIAMOND(20865),
-    EMERALD(5654),
-    LAPIS_LAZULI(11075),
-    QUARTZ(23608),
-    AMETHYST_SHARD(7613),
-    RAW_IRON(5329),
-    IRON_INGOT(24895),
-    RAW_COPPER(6162),
-    COPPER_INGOT(12611),
-    RAW_GOLD(19564),
-    GOLD_INGOT(28927),
-    NETHERITE_INGOT(32457),
-    NETHERITE_SCRAP(29331),
-    WOODEN_SWORD(7175, 1, 59),
-    WOODEN_SHOVEL(28432, 1, 59),
-    WOODEN_PICKAXE(12792, 1, 59),
-    WOODEN_AXE(6292, 1, 59),
-    WOODEN_HOE(16043, 1, 59),
-    STONE_SWORD(25084, 1, 131),
-    STONE_SHOVEL(9520, 1, 131),
-    STONE_PICKAXE(14611, 1, 131),
-    STONE_AXE(6338, 1, 131),
-    STONE_HOE(22855, 1, 131),
-    GOLDEN_SWORD(10505, 1, 32),
-    GOLDEN_SHOVEL(15597, 1, 32),
-    GOLDEN_PICKAXE(25898, 1, 32),
-    GOLDEN_AXE(4878, 1, 32),
-    GOLDEN_HOE(19337, 1, 32),
-    IRON_SWORD(10904, 1, 250),
-    IRON_SHOVEL(30045, 1, 250),
-    IRON_PICKAXE(8842, 1, 250),
-    IRON_AXE(15894, 1, 250),
-    IRON_HOE(11339, 1, 250),
-    DIAMOND_SWORD(27707, 1, 1561),
-    DIAMOND_SHOVEL(25415, 1, 1561),
-    DIAMOND_PICKAXE(24291, 1, 1561),
-    DIAMOND_AXE(27277, 1, 1561),
-    DIAMOND_HOE(24050, 1, 1561),
-    NETHERITE_SWORD(23871, 1, 2031),
-    NETHERITE_SHOVEL(29728, 1, 2031),
-    NETHERITE_PICKAXE(9930, 1, 2031),
-    NETHERITE_AXE(29533, 1, 2031),
-    NETHERITE_HOE(27385, 1, 2031),
-    STICK(9773),
-    MUSHROOM_STEW(16336, 1),
-    STRING(12806),
-    FEATHER(30548),
-    GUNPOWDER(29974),
-    WHEAT_SEEDS(28742),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    WHEAT(27709, Ageable.class),
-    BREAD(32049),
-    LEATHER_HELMET(11624, 1, 55),
-    LEATHER_CHESTPLATE(29275, 1, 80),
-    LEATHER_LEGGINGS(28210, 1, 75),
-    LEATHER_BOOTS(15282, 1, 65),
-    CHAINMAIL_HELMET(26114, 1, 165),
-    CHAINMAIL_CHESTPLATE(23602, 1, 240),
-    CHAINMAIL_LEGGINGS(19087, 1, 225),
-    CHAINMAIL_BOOTS(17953, 1, 195),
-    IRON_HELMET(12025, 1, 165),
-    IRON_CHESTPLATE(28112, 1, 240),
-    IRON_LEGGINGS(18951, 1, 225),
-    IRON_BOOTS(8531, 1, 195),
-    DIAMOND_HELMET(10755, 1, 363),
-    DIAMOND_CHESTPLATE(32099, 1, 528),
-    DIAMOND_LEGGINGS(26500, 1, 495),
-    DIAMOND_BOOTS(16522, 1, 429),
-    GOLDEN_HELMET(7945, 1, 77),
-    GOLDEN_CHESTPLATE(4507, 1, 112),
-    GOLDEN_LEGGINGS(21002, 1, 105),
-    GOLDEN_BOOTS(7859, 1, 91),
-    NETHERITE_HELMET(15907, 1, 407),
-    NETHERITE_CHESTPLATE(6106, 1, 592),
-    NETHERITE_LEGGINGS(25605, 1, 555),
-    NETHERITE_BOOTS(8923, 1, 481),
-    FLINT(23596),
-    PORKCHOP(30896),
-    COOKED_PORKCHOP(27231),
-    PAINTING(23945),
-    GOLDEN_APPLE(27732),
-    ENCHANTED_GOLDEN_APPLE(8280),
-    /**
-     * BlockData: {@link Sign}
-     */
-    OAK_SIGN(8192, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    SPRUCE_SIGN(21502, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    BIRCH_SIGN(11351, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    JUNGLE_SIGN(24717, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    ACACIA_SIGN(29808, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    CHERRY_SIGN(16520, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    DARK_OAK_SIGN(15127, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    PALE_OAK_SIGN(12116, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    MANGROVE_SIGN(21975, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    BAMBOO_SIGN(26139, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    CRIMSON_SIGN(12162, 16, Sign.class),
-    /**
-     * BlockData: {@link Sign}
-     */
-    WARPED_SIGN(10407, 16, Sign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    OAK_HANGING_SIGN(20116, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    SPRUCE_HANGING_SIGN(24371, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BIRCH_HANGING_SIGN(17938, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    JUNGLE_HANGING_SIGN(27671, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    ACACIA_HANGING_SIGN(30257, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    CHERRY_HANGING_SIGN(5088, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    DARK_OAK_HANGING_SIGN(23360, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    PALE_OAK_HANGING_SIGN(7097, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    MANGROVE_HANGING_SIGN(25106, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BAMBOO_HANGING_SIGN(4726, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    CRIMSON_HANGING_SIGN(20696, 16, HangingSign.class),
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    WARPED_HANGING_SIGN(8195, 16, HangingSign.class),
-    BUCKET(15215, 16),
-    WATER_BUCKET(8802, 1),
-    LAVA_BUCKET(9228, 1),
-    POWDER_SNOW_BUCKET(31101, 1),
-    SNOWBALL(19487, 16),
-    LEATHER(16414),
-    MILK_BUCKET(9680, 1),
-    PUFFERFISH_BUCKET(8861, 1),
-    SALMON_BUCKET(9606, 1),
-    COD_BUCKET(28601, 1),
-    TROPICAL_FISH_BUCKET(29995, 1),
-    AXOLOTL_BUCKET(20669, 1),
-    TADPOLE_BUCKET(9731, 1),
-    BRICK(6820),
-    CLAY_BALL(24603),
-    DRIED_KELP_BLOCK(12966),
-    PAPER(9923),
-    BOOK(23097),
-    SLIME_BALL(5242),
-    EGG(21603, 16),
-    COMPASS(24139),
-    RECOVERY_COMPASS(12710),
-    BUNDLE(16835, 1),
-    WHITE_BUNDLE(12072, 1),
-    ORANGE_BUNDLE(18288, 1),
-    MAGENTA_BUNDLE(15328, 1),
-    LIGHT_BLUE_BUNDLE(18639, 1),
-    YELLOW_BUNDLE(27749, 1),
-    LIME_BUNDLE(30093, 1),
-    PINK_BUNDLE(21400, 1),
-    GRAY_BUNDLE(21262, 1),
-    LIGHT_GRAY_BUNDLE(26338, 1),
-    CYAN_BUNDLE(8942, 1),
-    PURPLE_BUNDLE(10319, 1),
-    BLUE_BUNDLE(31501, 1),
-    BROWN_BUNDLE(15464, 1),
-    GREEN_BUNDLE(4597, 1),
-    RED_BUNDLE(19986, 1),
-    BLACK_BUNDLE(22519, 1),
-    FISHING_ROD(4167, 1, 64),
-    CLOCK(14980),
-    SPYGLASS(27490, 1),
-    GLOWSTONE_DUST(6665),
-    COD(24691),
-    SALMON(18516),
-    TROPICAL_FISH(24879),
-    PUFFERFISH(8115),
-    COOKED_COD(9681),
-    COOKED_SALMON(5615),
-    INK_SAC(7184),
-    GLOW_INK_SAC(9686),
-    COCOA_BEANS(30186),
-    WHITE_DYE(10758),
-    ORANGE_DYE(13866),
-    MAGENTA_DYE(11788),
-    LIGHT_BLUE_DYE(28738),
-    YELLOW_DYE(5952),
-    LIME_DYE(6147),
-    PINK_DYE(31151),
-    GRAY_DYE(9184),
-    LIGHT_GRAY_DYE(27643),
-    CYAN_DYE(8043),
-    PURPLE_DYE(6347),
-    BLUE_DYE(11588),
-    BROWN_DYE(7648),
-    GREEN_DYE(23215),
-    RED_DYE(5728),
-    BLACK_DYE(6202),
-    BONE_MEAL(32458),
-    BONE(5686),
-    SUGAR(30638),
-    /**
-     * BlockData: {@link Cake}
-     */
-    CAKE(27048, 1, Cake.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    WHITE_BED(8185, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    ORANGE_BED(11194, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    MAGENTA_BED(20061, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    LIGHT_BLUE_BED(20957, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    YELLOW_BED(30410, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    LIME_BED(27860, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    PINK_BED(13795, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    GRAY_BED(15745, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    LIGHT_GRAY_BED(5090, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    CYAN_BED(16746, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    PURPLE_BED(29755, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    BLUE_BED(12714, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    BROWN_BED(26672, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    GREEN_BED(13797, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    RED_BED(30910, 1, Bed.class),
-    /**
-     * BlockData: {@link Bed}
-     */
-    BLACK_BED(20490, 1, Bed.class),
-    COOKIE(27431),
-    /**
-     * BlockData: {@link Crafter}
-     */
-    CRAFTER(25243, Crafter.class),
-    FILLED_MAP(23504),
-    SHEARS(27971, 1, 238),
-    MELON_SLICE(5347),
-    DRIED_KELP(21042),
-    PUMPKIN_SEEDS(28985),
-    MELON_SEEDS(18340),
-    BEEF(4803),
-    COOKED_BEEF(21595),
-    CHICKEN(17281),
-    COOKED_CHICKEN(16984),
-    ROTTEN_FLESH(21591),
-    ENDER_PEARL(5259, 16),
-    BLAZE_ROD(8289),
-    GHAST_TEAR(18222),
-    GOLD_NUGGET(28814),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    NETHER_WART(29227, Ageable.class),
-    GLASS_BOTTLE(6116),
-    POTION(24020, 1),
-    SPIDER_EYE(9318),
-    FERMENTED_SPIDER_EYE(19386),
-    BLAZE_POWDER(18941),
-    MAGMA_CREAM(25097),
-    /**
-     * BlockData: {@link BrewingStand}
-     */
-    BREWING_STAND(14539, BrewingStand.class),
-    CAULDRON(26531),
-    ENDER_EYE(24860),
-    GLISTERING_MELON_SLICE(20158),
-    ARMADILLO_SPAWN_EGG(22098),
-    ALLAY_SPAWN_EGG(7909),
-    AXOLOTL_SPAWN_EGG(30381),
-    BAT_SPAWN_EGG(14607),
-    BEE_SPAWN_EGG(22924),
-    BLAZE_SPAWN_EGG(4759),
-    BOGGED_SPAWN_EGG(12042),
-    BREEZE_SPAWN_EGG(7580),
-    CAT_SPAWN_EGG(29583),
-    CAMEL_SPAWN_EGG(14760),
-    CAVE_SPIDER_SPAWN_EGG(23341),
-    CHICKEN_SPAWN_EGG(5462),
-    COD_SPAWN_EGG(27248),
-    COW_SPAWN_EGG(14761),
-    CREEPER_SPAWN_EGG(9653),
-    DOLPHIN_SPAWN_EGG(20787),
-    DONKEY_SPAWN_EGG(14513),
-    DROWNED_SPAWN_EGG(19368),
-    ELDER_GUARDIAN_SPAWN_EGG(11418),
-    ENDER_DRAGON_SPAWN_EGG(28092),
-    ENDERMAN_SPAWN_EGG(29488),
-    ENDERMITE_SPAWN_EGG(16617),
-    EVOKER_SPAWN_EGG(21271),
-    FOX_SPAWN_EGG(22376),
-    FROG_SPAWN_EGG(26682),
-    GHAST_SPAWN_EGG(9970),
-    GLOW_SQUID_SPAWN_EGG(31578),
-    GOAT_SPAWN_EGG(30639),
-    GUARDIAN_SPAWN_EGG(20113),
-    HOGLIN_SPAWN_EGG(14088),
-    HORSE_SPAWN_EGG(25981),
-    HUSK_SPAWN_EGG(20178),
-    IRON_GOLEM_SPAWN_EGG(12781),
-    LLAMA_SPAWN_EGG(23640),
-    MAGMA_CUBE_SPAWN_EGG(26638),
-    MOOSHROOM_SPAWN_EGG(22125),
-    MULE_SPAWN_EGG(11229),
-    OCELOT_SPAWN_EGG(30080),
-    PANDA_SPAWN_EGG(23759),
-    PARROT_SPAWN_EGG(23614),
-    PHANTOM_SPAWN_EGG(24648),
-    PIG_SPAWN_EGG(22584),
-    PIGLIN_SPAWN_EGG(16193),
-    PIGLIN_BRUTE_SPAWN_EGG(30230),
-    PILLAGER_SPAWN_EGG(28659),
-    POLAR_BEAR_SPAWN_EGG(17015),
-    PUFFERFISH_SPAWN_EGG(24570),
-    RABBIT_SPAWN_EGG(26496),
-    RAVAGER_SPAWN_EGG(8726),
-    SALMON_SPAWN_EGG(18739),
-    SHEEP_SPAWN_EGG(24488),
-    SHULKER_SPAWN_EGG(31848),
-    SILVERFISH_SPAWN_EGG(14537),
-    SKELETON_SPAWN_EGG(15261),
-    SKELETON_HORSE_SPAWN_EGG(21356),
-    SLIME_SPAWN_EGG(17196),
-    SNIFFER_SPAWN_EGG(27473),
-    SNOW_GOLEM_SPAWN_EGG(24732),
-    SPIDER_SPAWN_EGG(14984),
-    SQUID_SPAWN_EGG(10682),
-    STRAY_SPAWN_EGG(30153),
-    STRIDER_SPAWN_EGG(6203),
-    TADPOLE_SPAWN_EGG(32467),
-    TRADER_LLAMA_SPAWN_EGG(8439),
-    TROPICAL_FISH_SPAWN_EGG(19713),
-    TURTLE_SPAWN_EGG(17324),
-    VEX_SPAWN_EGG(27751),
-    VILLAGER_SPAWN_EGG(30348),
-    VINDICATOR_SPAWN_EGG(25324),
-    WANDERING_TRADER_SPAWN_EGG(17904),
-    WARDEN_SPAWN_EGG(27553),
-    WITCH_SPAWN_EGG(11837),
-    WITHER_SPAWN_EGG(8024),
-    WITHER_SKELETON_SPAWN_EGG(10073),
-    WOLF_SPAWN_EGG(21692),
-    ZOGLIN_SPAWN_EGG(7442),
-    CREAKING_SPAWN_EGG(9598),
-    ZOMBIE_SPAWN_EGG(5814),
-    ZOMBIE_HORSE_SPAWN_EGG(4275),
-    ZOMBIE_VILLAGER_SPAWN_EGG(10311),
-    ZOMBIFIED_PIGLIN_SPAWN_EGG(6626),
-    EXPERIENCE_BOTTLE(12858),
-    FIRE_CHARGE(4842),
-    WIND_CHARGE(23928),
-    WRITABLE_BOOK(13393, 1),
-    WRITTEN_BOOK(24164, 16),
-    BREEZE_ROD(14281),
-    MACE(4771, 1, 500),
-    ITEM_FRAME(27318),
-    GLOW_ITEM_FRAME(26473),
-    FLOWER_POT(30567),
-    CARROT(22824),
-    POTATO(21088),
-    BAKED_POTATO(14624),
-    POISONOUS_POTATO(32640),
-    MAP(21655),
-    GOLDEN_CARROT(5300),
-    /**
-     * BlockData: {@link Skull}
-     */
-    SKELETON_SKULL(13270, Skull.class),
-    /**
-     * BlockData: {@link Skull}
-     */
-    WITHER_SKELETON_SKULL(31487, Skull.class),
-    /**
-     * BlockData: {@link Skull}
-     */
-    PLAYER_HEAD(21174, Skull.class),
-    /**
-     * BlockData: {@link Skull}
-     */
-    ZOMBIE_HEAD(9304, Skull.class),
-    /**
-     * BlockData: {@link Skull}
-     */
-    CREEPER_HEAD(29146, Skull.class),
-    /**
-     * BlockData: {@link Skull}
-     */
-    DRAGON_HEAD(20084, Skull.class),
-    /**
-     * BlockData: {@link Skull}
-     */
-    PIGLIN_HEAD(5512, Skull.class),
-    NETHER_STAR(12469),
-    PUMPKIN_PIE(28725),
-    FIREWORK_ROCKET(23841),
-    FIREWORK_STAR(12190),
-    ENCHANTED_BOOK(11741, 1),
-    NETHER_BRICK(19996),
-    RESIN_BRICK(19050),
-    PRISMARINE_SHARD(10993),
-    PRISMARINE_CRYSTALS(31546),
-    RABBIT(23068),
-    COOKED_RABBIT(4454),
-    RABBIT_STEW(25318, 1),
-    RABBIT_FOOT(13864),
-    RABBIT_HIDE(12467),
-    ARMOR_STAND(12852, 16),
-    IRON_HORSE_ARMOR(30108, 1),
-    GOLDEN_HORSE_ARMOR(7996, 1),
-    DIAMOND_HORSE_ARMOR(10321, 1),
-    LEATHER_HORSE_ARMOR(30667, 1),
-    LEAD(29539),
-    NAME_TAG(30731),
-    COMMAND_BLOCK_MINECART(7992, 1),
-    MUTTON(4792),
-    COOKED_MUTTON(31447),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    WHITE_BANNER(17562, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    ORANGE_BANNER(4839, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    MAGENTA_BANNER(15591, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    LIGHT_BLUE_BANNER(18060, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    YELLOW_BANNER(30382, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    LIME_BANNER(18887, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    PINK_BANNER(19439, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    GRAY_BANNER(12053, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    LIGHT_GRAY_BANNER(11417, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    CYAN_BANNER(9839, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    PURPLE_BANNER(29027, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BLUE_BANNER(18481, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BROWN_BANNER(11481, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    GREEN_BANNER(10698, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    RED_BANNER(26961, 16, Rotatable.class),
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BLACK_BANNER(9365, 16, Rotatable.class),
-    END_CRYSTAL(19090),
-    CHORUS_FRUIT(7652),
-    POPPED_CHORUS_FRUIT(27844),
-    TORCHFLOWER_SEEDS(18153),
-    PITCHER_POD(7977),
-    BEETROOT(23305),
-    BEETROOT_SEEDS(21282),
-    BEETROOT_SOUP(16036, 1),
-    DRAGON_BREATH(20154),
-    SPLASH_POTION(30248, 1),
-    SPECTRAL_ARROW(4568),
-    TIPPED_ARROW(25164),
-    LINGERING_POTION(25857, 1),
-    SHIELD(29943, 1, 336),
-    TOTEM_OF_UNDYING(10139, 1),
-    SHULKER_SHELL(27848),
-    IRON_NUGGET(13715),
-    KNOWLEDGE_BOOK(12646, 1),
-    DEBUG_STICK(24562, 1),
-    MUSIC_DISC_13(16359, 1),
-    MUSIC_DISC_CAT(16246, 1),
-    MUSIC_DISC_BLOCKS(26667, 1),
-    MUSIC_DISC_CHIRP(19436, 1),
-    MUSIC_DISC_CREATOR(20345, 1),
-    MUSIC_DISC_CREATOR_MUSIC_BOX(7202, 1),
-    MUSIC_DISC_FAR(31742, 1),
-    MUSIC_DISC_MALL(11517, 1),
-    MUSIC_DISC_MELLOHI(26117, 1),
-    MUSIC_DISC_STAL(14989, 1),
-    MUSIC_DISC_STRAD(16785, 1),
-    MUSIC_DISC_WARD(24026, 1),
-    MUSIC_DISC_11(27426, 1),
-    MUSIC_DISC_WAIT(26499, 1),
-    MUSIC_DISC_OTHERSIDE(12974, 1),
-    MUSIC_DISC_RELIC(8200, 1),
-    MUSIC_DISC_5(9212, 1),
-    MUSIC_DISC_PIGSTEP(21323, 1),
-    MUSIC_DISC_PRECIPICE(28677, 1),
-    DISC_FRAGMENT_5(29729),
-    TRIDENT(7534, 1, 250),
-    NAUTILUS_SHELL(19989),
-    HEART_OF_THE_SEA(11807),
-    CROSSBOW(4340, 1, 465),
-    SUSPICIOUS_STEW(8173, 1),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LOOM(14276, Directional.class),
-    FLOWER_BANNER_PATTERN(5762, 1),
-    CREEPER_BANNER_PATTERN(15774, 1),
-    SKULL_BANNER_PATTERN(7680, 1),
-    MOJANG_BANNER_PATTERN(11903, 1),
-    GLOBE_BANNER_PATTERN(27753, 1),
-    PIGLIN_BANNER_PATTERN(22028, 1),
-    FLOW_BANNER_PATTERN(32683, 1),
-    GUSTER_BANNER_PATTERN(27267, 1),
-    FIELD_MASONED_BANNER_PATTERN(19157, 1),
-    BORDURE_INDENTED_BANNER_PATTERN(25850, 1),
-    GOAT_HORN(28237, 1),
-    /**
-     * BlockData: {@link Levelled}
-     */
-    COMPOSTER(31247, Levelled.class),
-    /**
-     * BlockData: {@link Barrel}
-     */
-    BARREL(22396, Barrel.class),
-    /**
-     * BlockData: {@link Furnace}
-     */
-    SMOKER(24781, Furnace.class),
-    /**
-     * BlockData: {@link Furnace}
-     */
-    BLAST_FURNACE(31157, Furnace.class),
-    CARTOGRAPHY_TABLE(28529),
-    FLETCHING_TABLE(30838),
-    /**
-     * BlockData: {@link Grindstone}
-     */
-    GRINDSTONE(26260, Grindstone.class),
-    SMITHING_TABLE(9082),
-    /**
-     * BlockData: {@link Directional}
-     */
-    STONECUTTER(25170, Directional.class),
-    /**
-     * BlockData: {@link Bell}
-     */
-    BELL(20000, Bell.class),
-    /**
-     * BlockData: {@link Lantern}
-     */
-    LANTERN(5992, Lantern.class),
-    /**
-     * BlockData: {@link Lantern}
-     */
-    SOUL_LANTERN(27778, Lantern.class),
-    SWEET_BERRIES(19747),
-    GLOW_BERRIES(11584),
-    /**
-     * BlockData: {@link Campfire}
-     */
-    CAMPFIRE(8488, Campfire.class),
-    /**
-     * BlockData: {@link Campfire}
-     */
-    SOUL_CAMPFIRE(4238, Campfire.class),
-    SHROOMLIGHT(20424),
-    HONEYCOMB(9482),
-    /**
-     * BlockData: {@link Beehive}
-     */
-    BEE_NEST(8825, Beehive.class),
-    /**
-     * BlockData: {@link Beehive}
-     */
-    BEEHIVE(11830, Beehive.class),
-    HONEY_BOTTLE(22927, 16),
-    HONEYCOMB_BLOCK(28780),
-    LODESTONE(23127),
-    CRYING_OBSIDIAN(31545),
-    BLACKSTONE(7354),
-    /**
-     * BlockData: {@link Slab}
-     */
-    BLACKSTONE_SLAB(11948, Slab.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BLACKSTONE_STAIRS(14646, Stairs.class),
-    GILDED_BLACKSTONE(8498),
-    POLISHED_BLACKSTONE(18144),
-    /**
-     * BlockData: {@link Slab}
-     */
-    POLISHED_BLACKSTONE_SLAB(23430, Slab.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    POLISHED_BLACKSTONE_STAIRS(8653, Stairs.class),
-    CHISELED_POLISHED_BLACKSTONE(21942),
-    POLISHED_BLACKSTONE_BRICKS(19844),
-    /**
-     * BlockData: {@link Slab}
-     */
-    POLISHED_BLACKSTONE_BRICK_SLAB(12219, Slab.class),
-    /**
-     * BlockData: {@link Stairs}
-     */
-    POLISHED_BLACKSTONE_BRICK_STAIRS(17983, Stairs.class),
-    CRACKED_POLISHED_BLACKSTONE_BRICKS(16846),
-    /**
-     * BlockData: {@link RespawnAnchor}
-     */
-    RESPAWN_ANCHOR(4099, RespawnAnchor.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    CANDLE(16122, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    WHITE_CANDLE(26410, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    ORANGE_CANDLE(22668, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    MAGENTA_CANDLE(25467, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    LIGHT_BLUE_CANDLE(28681, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    YELLOW_CANDLE(14351, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    LIME_CANDLE(21778, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    PINK_CANDLE(28259, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    GRAY_CANDLE(10721, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    LIGHT_GRAY_CANDLE(10031, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    CYAN_CANDLE(24765, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    PURPLE_CANDLE(19606, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    BLUE_CANDLE(29047, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    BROWN_CANDLE(26145, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    GREEN_CANDLE(29756, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    RED_CANDLE(4214, Candle.class),
-    /**
-     * BlockData: {@link Candle}
-     */
-    BLACK_CANDLE(12617, Candle.class),
-    /**
-     * BlockData: {@link AmethystCluster}
-     */
-    SMALL_AMETHYST_BUD(14958, AmethystCluster.class),
-    /**
-     * BlockData: {@link AmethystCluster}
-     */
-    MEDIUM_AMETHYST_BUD(8429, AmethystCluster.class),
-    /**
-     * BlockData: {@link AmethystCluster}
-     */
-    LARGE_AMETHYST_BUD(7279, AmethystCluster.class),
-    /**
-     * BlockData: {@link AmethystCluster}
-     */
-    AMETHYST_CLUSTER(13142, AmethystCluster.class),
-    /**
-     * BlockData: {@link PointedDripstone}
-     */
-    POINTED_DRIPSTONE(18755, PointedDripstone.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    OCHRE_FROGLIGHT(25330, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    VERDANT_FROGLIGHT(22793, Orientable.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    PEARLESCENT_FROGLIGHT(21441, Orientable.class),
-    FROGSPAWN(8350),
-    ECHO_SHARD(12529),
-    BRUSH(30569, 1, 64),
-    NETHERITE_UPGRADE_SMITHING_TEMPLATE(7615),
-    SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE(16124),
-    DUNE_ARMOR_TRIM_SMITHING_TEMPLATE(30925),
-    COAST_ARMOR_TRIM_SMITHING_TEMPLATE(25501),
-    WILD_ARMOR_TRIM_SMITHING_TEMPLATE(5870),
-    WARD_ARMOR_TRIM_SMITHING_TEMPLATE(24534),
-    EYE_ARMOR_TRIM_SMITHING_TEMPLATE(14663),
-    VEX_ARMOR_TRIM_SMITHING_TEMPLATE(25818),
-    TIDE_ARMOR_TRIM_SMITHING_TEMPLATE(20420),
-    SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE(14386),
-    RIB_ARMOR_TRIM_SMITHING_TEMPLATE(6010),
-    SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE(29143),
-    WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE(4957),
-    SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE(20537),
-    SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE(7070),
-    RAISER_ARMOR_TRIM_SMITHING_TEMPLATE(29116),
-    HOST_ARMOR_TRIM_SMITHING_TEMPLATE(12165),
-    FLOW_ARMOR_TRIM_SMITHING_TEMPLATE(29175),
-    BOLT_ARMOR_TRIM_SMITHING_TEMPLATE(9698),
-    ANGLER_POTTERY_SHERD(9952),
-    ARCHER_POTTERY_SHERD(21629),
-    ARMS_UP_POTTERY_SHERD(5484),
-    BLADE_POTTERY_SHERD(25079),
-    BREWER_POTTERY_SHERD(23429),
-    BURN_POTTERY_SHERD(21259),
-    DANGER_POTTERY_SHERD(30506),
-    EXPLORER_POTTERY_SHERD(5124),
-    FLOW_POTTERY_SHERD(4896),
-    FRIEND_POTTERY_SHERD(18221),
-    GUSTER_POTTERY_SHERD(28193),
-    HEART_POTTERY_SHERD(17607),
-    HEARTBREAK_POTTERY_SHERD(21108),
-    HOWL_POTTERY_SHERD(24900),
-    MINER_POTTERY_SHERD(30602),
-    MOURNER_POTTERY_SHERD(23993),
-    PLENTY_POTTERY_SHERD(28236),
-    PRIZE_POTTERY_SHERD(4341),
-    SCRAPE_POTTERY_SHERD(30034),
-    SHEAF_POTTERY_SHERD(23652),
-    SHELTER_POTTERY_SHERD(28390),
-    SKULL_POTTERY_SHERD(16980),
-    SNORT_POTTERY_SHERD(15921),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    COPPER_GRATE(16221, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    EXPOSED_COPPER_GRATE(7783, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    WEATHERED_COPPER_GRATE(24954, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    OXIDIZED_COPPER_GRATE(14122, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    WAXED_COPPER_GRATE(11230, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    WAXED_EXPOSED_COPPER_GRATE(20520, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    WAXED_WEATHERED_COPPER_GRATE(16533, Waterlogged.class),
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    WAXED_OXIDIZED_COPPER_GRATE(32010, Waterlogged.class),
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    COPPER_BULB(21370, CopperBulb.class),
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    EXPOSED_COPPER_BULB(11944, CopperBulb.class),
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    WEATHERED_COPPER_BULB(10800, CopperBulb.class),
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    OXIDIZED_COPPER_BULB(22421, CopperBulb.class),
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    WAXED_COPPER_BULB(23756, CopperBulb.class),
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    WAXED_EXPOSED_COPPER_BULB(5530, CopperBulb.class),
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    WAXED_WEATHERED_COPPER_BULB(13239, CopperBulb.class),
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    WAXED_OXIDIZED_COPPER_BULB(26892, CopperBulb.class),
-    /**
-     * BlockData: {@link TrialSpawner}
-     */
-    TRIAL_SPAWNER(19902, TrialSpawner.class),
-    TRIAL_KEY(12725),
-    OMINOUS_TRIAL_KEY(4986),
-    /**
-     * BlockData: {@link Vault}
-     */
-    VAULT(6288, Vault.class),
-    OMINOUS_BOTTLE(26321),
-    /**
-     * BlockData: {@link Levelled}
-     */
-    WATER(24998, Levelled.class),
-    /**
-     * BlockData: {@link Levelled}
-     */
-    LAVA(8415, Levelled.class),
-    /**
-     * BlockData: {@link Bisected}
-     */
-    TALL_SEAGRASS(27189, Bisected.class),
-    /**
-     * BlockData: {@link PistonHead}
-     */
-    PISTON_HEAD(30226, PistonHead.class),
-    /**
-     * BlockData: {@link TechnicalPiston}
-     */
-    MOVING_PISTON(13831, TechnicalPiston.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    WALL_TORCH(25890, Directional.class),
-    /**
-     * BlockData: {@link Fire}
-     */
-    FIRE(16396, Fire.class),
-    SOUL_FIRE(30163),
-    /**
-     * BlockData: {@link RedstoneWire}
-     */
-    REDSTONE_WIRE(25984, RedstoneWire.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    OAK_WALL_SIGN(12984, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    SPRUCE_WALL_SIGN(7352, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BIRCH_WALL_SIGN(9887, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    ACACIA_WALL_SIGN(20316, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    CHERRY_WALL_SIGN(20188, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    JUNGLE_WALL_SIGN(29629, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    DARK_OAK_WALL_SIGN(9508, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    PALE_OAK_WALL_SIGN(23103, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    MANGROVE_WALL_SIGN(27203, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BAMBOO_WALL_SIGN(18857, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    OAK_WALL_HANGING_SIGN(15637, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    SPRUCE_WALL_HANGING_SIGN(18833, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BIRCH_WALL_HANGING_SIGN(15937, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    ACACIA_WALL_HANGING_SIGN(22477, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    CHERRY_WALL_HANGING_SIGN(10953, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    JUNGLE_WALL_HANGING_SIGN(16691, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    DARK_OAK_WALL_HANGING_SIGN(14296, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    PALE_OAK_WALL_HANGING_SIGN(23484, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    MANGROVE_WALL_HANGING_SIGN(16974, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    CRIMSON_WALL_HANGING_SIGN(28982, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    WARPED_WALL_HANGING_SIGN(20605, WallHangingSign.class),
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BAMBOO_WALL_HANGING_SIGN(6669, WallHangingSign.class),
-    /**
-     * BlockData: {@link RedstoneWallTorch}
-     */
-    REDSTONE_WALL_TORCH(7595, RedstoneWallTorch.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    SOUL_WALL_TORCH(27500, Directional.class),
-    /**
-     * BlockData: {@link Orientable}
-     */
-    NETHER_PORTAL(19469, Orientable.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    ATTACHED_PUMPKIN_STEM(12724, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    ATTACHED_MELON_STEM(30882, Directional.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    PUMPKIN_STEM(19021, Ageable.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    MELON_STEM(8247, Ageable.class),
-    /**
-     * BlockData: {@link Levelled}
-     */
-    WATER_CAULDRON(32008, Levelled.class),
-    LAVA_CAULDRON(4514),
-    /**
-     * BlockData: {@link Levelled}
-     */
-    POWDER_SNOW_CAULDRON(31571, Levelled.class),
-    END_PORTAL(16782),
-    /**
-     * BlockData: {@link Cocoa}
-     */
-    COCOA(29709, Cocoa.class),
-    /**
-     * BlockData: {@link Tripwire}
-     */
-    TRIPWIRE(8810, Tripwire.class),
-    POTTED_TORCHFLOWER(21278),
-    POTTED_OAK_SAPLING(11905),
-    POTTED_SPRUCE_SAPLING(29498),
-    POTTED_BIRCH_SAPLING(32484),
-    POTTED_JUNGLE_SAPLING(7525),
-    POTTED_ACACIA_SAPLING(14096),
-    POTTED_CHERRY_SAPLING(30785),
-    POTTED_DARK_OAK_SAPLING(6486),
-    POTTED_PALE_OAK_SAPLING(15538),
-    POTTED_MANGROVE_PROPAGULE(22003),
-    POTTED_FERN(23315),
-    POTTED_DANDELION(9727),
-    POTTED_POPPY(7457),
-    POTTED_BLUE_ORCHID(6599),
-    POTTED_ALLIUM(13184),
-    POTTED_AZURE_BLUET(8754),
-    POTTED_RED_TULIP(28594),
-    POTTED_ORANGE_TULIP(28807),
-    POTTED_WHITE_TULIP(24330),
-    POTTED_PINK_TULIP(10089),
-    POTTED_OXEYE_DAISY(19707),
-    POTTED_CORNFLOWER(28917),
-    POTTED_LILY_OF_THE_VALLEY(9364),
-    POTTED_WITHER_ROSE(26876),
-    POTTED_RED_MUSHROOM(22881),
-    POTTED_BROWN_MUSHROOM(14481),
-    POTTED_DEAD_BUSH(13020),
-    POTTED_CACTUS(8777),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    CARROTS(17258, Ageable.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    POTATOES(10879, Ageable.class),
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    SKELETON_WALL_SKULL(31650, WallSkull.class),
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    WITHER_SKELETON_WALL_SKULL(9326, WallSkull.class),
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    ZOMBIE_WALL_HEAD(16296, WallSkull.class),
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    PLAYER_WALL_HEAD(13164, WallSkull.class),
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    CREEPER_WALL_HEAD(30123, WallSkull.class),
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    DRAGON_WALL_HEAD(19818, WallSkull.class),
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    PIGLIN_WALL_HEAD(4446, WallSkull.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    WHITE_WALL_BANNER(15967, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    ORANGE_WALL_BANNER(9936, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    MAGENTA_WALL_BANNER(23291, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIGHT_BLUE_WALL_BANNER(12011, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    YELLOW_WALL_BANNER(32004, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIME_WALL_BANNER(21422, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    PINK_WALL_BANNER(9421, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    GRAY_WALL_BANNER(24275, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    LIGHT_GRAY_WALL_BANNER(31088, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    CYAN_WALL_BANNER(10889, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    PURPLE_WALL_BANNER(14298, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BLUE_WALL_BANNER(17757, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BROWN_WALL_BANNER(14731, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    GREEN_WALL_BANNER(15046, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    RED_WALL_BANNER(4378, Directional.class),
-    /**
-     * BlockData: {@link Directional}
-     */
-    BLACK_WALL_BANNER(4919, Directional.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    TORCHFLOWER_CROP(28460, Ageable.class),
-    /**
-     * BlockData: {@link PitcherCrop}
-     */
-    PITCHER_CROP(15420, PitcherCrop.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BEETROOTS(22075, Ageable.class),
-    END_GATEWAY(26605),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    FROSTED_ICE(21814, Ageable.class),
-    KELP_PLANT(29697),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    DEAD_TUBE_CORAL_WALL_FAN(5128, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    DEAD_BRAIN_CORAL_WALL_FAN(23718, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    DEAD_BUBBLE_CORAL_WALL_FAN(18453, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    DEAD_FIRE_CORAL_WALL_FAN(23375, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    DEAD_HORN_CORAL_WALL_FAN(27550, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    TUBE_CORAL_WALL_FAN(25282, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BRAIN_CORAL_WALL_FAN(22685, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BUBBLE_CORAL_WALL_FAN(20382, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    FIRE_CORAL_WALL_FAN(20100, CoralWallFan.class),
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    HORN_CORAL_WALL_FAN(28883, CoralWallFan.class),
-    BAMBOO_SAPLING(8478),
-    POTTED_BAMBOO(22542),
-    VOID_AIR(13668),
-    CAVE_AIR(17422),
-    /**
-     * BlockData: {@link BubbleColumn}
-     */
-    BUBBLE_COLUMN(31612, BubbleColumn.class),
-    /**
-     * BlockData: {@link Ageable}
-     */
-    SWEET_BERRY_BUSH(11958, Ageable.class),
-    WEEPING_VINES_PLANT(19437),
-    TWISTING_VINES_PLANT(25338),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    CRIMSON_WALL_SIGN(19242, 16, WallSign.class),
-    /**
-     * BlockData: {@link WallSign}
-     */
-    WARPED_WALL_SIGN(13534, 16, WallSign.class),
-    POTTED_CRIMSON_FUNGUS(5548),
-    POTTED_WARPED_FUNGUS(30800),
-    POTTED_CRIMSON_ROOTS(13852),
-    POTTED_WARPED_ROOTS(6403),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    CANDLE_CAKE(25423, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    WHITE_CANDLE_CAKE(12674, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    ORANGE_CANDLE_CAKE(24982, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    MAGENTA_CANDLE_CAKE(11022, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    LIGHT_BLUE_CANDLE_CAKE(7787, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    YELLOW_CANDLE_CAKE(17157, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    LIME_CANDLE_CAKE(14309, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    PINK_CANDLE_CAKE(20405, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    GRAY_CANDLE_CAKE(6777, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    LIGHT_GRAY_CANDLE_CAKE(11318, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    CYAN_CANDLE_CAKE(21202, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    PURPLE_CANDLE_CAKE(22663, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BLUE_CANDLE_CAKE(26425, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BROWN_CANDLE_CAKE(26024, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    GREEN_CANDLE_CAKE(16334, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    RED_CANDLE_CAKE(24151, Lightable.class),
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BLACK_CANDLE_CAKE(15191, Lightable.class),
-    POWDER_SNOW(24077),
-    /**
-     * BlockData: {@link CaveVines}
-     */
-    CAVE_VINES(7339, CaveVines.class),
-    /**
-     * BlockData: {@link CaveVinesPlant}
-     */
-    CAVE_VINES_PLANT(30645, CaveVinesPlant.class),
-    /**
-     * BlockData: {@link Dripleaf}
-     */
-    BIG_DRIPLEAF_STEM(13167, Dripleaf.class),
-    POTTED_AZALEA_BUSH(20430),
-    POTTED_FLOWERING_AZALEA_BUSH(10609),
-    POTTED_OPEN_EYEBLOSSOM(24999),
-    POTTED_CLOSED_EYEBLOSSOM(16694),
+    // Start generate - Items
+    // @GeneratedFrom 1.21.4
+    ACACIA_BOAT(-1, 1),
+    ACACIA_CHEST_BOAT(-1, 1),
+    AIR(-1),
+    ALLAY_SPAWN_EGG(-1),
+    AMETHYST_SHARD(-1),
+    ANGLER_POTTERY_SHERD(-1),
+    APPLE(-1),
+    ARCHER_POTTERY_SHERD(-1),
+    ARMADILLO_SCUTE(-1),
+    ARMADILLO_SPAWN_EGG(-1),
+    ARMOR_STAND(-1, 16),
+    ARMS_UP_POTTERY_SHERD(-1),
+    ARROW(-1),
+    AXOLOTL_BUCKET(-1, 1),
+    AXOLOTL_SPAWN_EGG(-1),
+    BAKED_POTATO(-1),
+    BAMBOO_CHEST_RAFT(-1, 1),
+    BAMBOO_RAFT(-1, 1),
+    BAT_SPAWN_EGG(-1),
+    BEE_SPAWN_EGG(-1),
+    BEEF(-1),
+    BEETROOT(-1),
+    BEETROOT_SEEDS(-1),
+    BEETROOT_SOUP(-1, 1),
+    BIRCH_BOAT(-1, 1),
+    BIRCH_CHEST_BOAT(-1, 1),
+    BLACK_BUNDLE(-1, 1),
+    BLACK_DYE(-1),
+    BLADE_POTTERY_SHERD(-1),
+    BLAZE_POWDER(-1),
+    BLAZE_ROD(-1),
+    BLAZE_SPAWN_EGG(-1),
+    BLUE_BUNDLE(-1, 1),
+    BLUE_DYE(-1),
+    BOGGED_SPAWN_EGG(-1),
+    BOLT_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    BONE(-1),
+    BONE_MEAL(-1),
+    BOOK(-1),
+    BORDURE_INDENTED_BANNER_PATTERN(-1, 1),
+    BOW(-1, 1, 384),
+    BOWL(-1),
+    BREAD(-1),
+    BREEZE_ROD(-1),
+    BREEZE_SPAWN_EGG(-1),
+    BREWER_POTTERY_SHERD(-1),
+    BRICK(-1),
+    BROWN_BUNDLE(-1, 1),
+    BROWN_DYE(-1),
+    BRUSH(-1, 1, 64),
+    BUCKET(-1, 16),
+    BUNDLE(-1, 1),
+    BURN_POTTERY_SHERD(-1),
+    CAMEL_SPAWN_EGG(-1),
+    CARROT(-1),
+    CARROT_ON_A_STICK(-1, 1, 25),
+    CAT_SPAWN_EGG(-1),
+    CAVE_SPIDER_SPAWN_EGG(-1),
+    CHAINMAIL_BOOTS(-1, 1, 195),
+    CHAINMAIL_CHESTPLATE(-1, 1, 240),
+    CHAINMAIL_HELMET(-1, 1, 165),
+    CHAINMAIL_LEGGINGS(-1, 1, 225),
+    CHARCOAL(-1),
+    CHERRY_BOAT(-1, 1),
+    CHERRY_CHEST_BOAT(-1, 1),
+    CHEST_MINECART(-1, 1),
+    CHICKEN(-1),
+    CHICKEN_SPAWN_EGG(-1),
+    CHORUS_FRUIT(-1),
+    CLAY_BALL(-1),
+    CLOCK(-1),
+    COAL(-1),
+    COAST_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    COCOA_BEANS(-1),
+    COD(-1),
+    COD_BUCKET(-1, 1),
+    COD_SPAWN_EGG(-1),
+    COMMAND_BLOCK_MINECART(-1, 1),
+    COMPASS(-1),
+    COOKED_BEEF(-1),
+    COOKED_CHICKEN(-1),
+    COOKED_COD(-1),
+    COOKED_MUTTON(-1),
+    COOKED_PORKCHOP(-1),
+    COOKED_RABBIT(-1),
+    COOKED_SALMON(-1),
+    COOKIE(-1),
+    COPPER_INGOT(-1),
+    COW_SPAWN_EGG(-1),
+    CREAKING_SPAWN_EGG(-1),
+    CREEPER_BANNER_PATTERN(-1, 1),
+    CREEPER_SPAWN_EGG(-1),
+    CROSSBOW(-1, 1, 465),
+    CYAN_BUNDLE(-1, 1),
+    CYAN_DYE(-1),
+    DANGER_POTTERY_SHERD(-1),
+    DARK_OAK_BOAT(-1, 1),
+    DARK_OAK_CHEST_BOAT(-1, 1),
+    DEBUG_STICK(-1, 1),
+    DIAMOND(-1),
+    DIAMOND_AXE(-1, 1, 1561),
+    DIAMOND_BOOTS(-1, 1, 429),
+    DIAMOND_CHESTPLATE(-1, 1, 528),
+    DIAMOND_HELMET(-1, 1, 363),
+    DIAMOND_HOE(-1, 1, 1561),
+    DIAMOND_HORSE_ARMOR(-1, 1),
+    DIAMOND_LEGGINGS(-1, 1, 495),
+    DIAMOND_PICKAXE(-1, 1, 1561),
+    DIAMOND_SHOVEL(-1, 1, 1561),
+    DIAMOND_SWORD(-1, 1, 1561),
+    DRAGON_BREATH(-1),
+    END_CRYSTAL(-1),
+    FIELD_MASONED_BANNER_PATTERN(-1, 1),
+    FLOW_BANNER_PATTERN(-1, 1),
+    GLOBE_BANNER_PATTERN(-1, 1),
+    GOAT_HORN(-1, 1),
+    IRON_NUGGET(-1),
+    KNOWLEDGE_BOOK(-1, 1),
+    LINGERING_POTION(-1, 1),
+    MUSIC_DISC_5(-1, 1),
+    DISC_FRAGMENT_5(-1),
+    DOLPHIN_SPAWN_EGG(-1),
+    DONKEY_SPAWN_EGG(-1),
+    DRIED_KELP(-1),
+    DROWNED_SPAWN_EGG(-1),
+    DUNE_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    ECHO_SHARD(-1),
+    EGG(-1, 16),
+    ELDER_GUARDIAN_SPAWN_EGG(-1),
+    ELYTRA(-1, 1, 432),
+    EMERALD(-1),
+    ENCHANTED_BOOK(-1, 1),
+    ENCHANTED_GOLDEN_APPLE(-1),
+    ENDER_DRAGON_SPAWN_EGG(-1),
+    ENDER_EYE(-1),
+    ENDER_PEARL(-1, 16),
+    ENDERMAN_SPAWN_EGG(-1),
+    ENDERMITE_SPAWN_EGG(-1),
+    EVOKER_SPAWN_EGG(-1),
+    EXPERIENCE_BOTTLE(-1),
+    EXPLORER_POTTERY_SHERD(-1),
+    EYE_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    FEATHER(-1),
+    FERMENTED_SPIDER_EYE(-1),
+    FILLED_MAP(-1),
+    FIRE_CHARGE(-1),
+    FIREWORK_ROCKET(-1),
+    FIREWORK_STAR(-1),
+    FISHING_ROD(-1, 1, 64),
+    FLINT(-1),
+    FLINT_AND_STEEL(-1, 1, 64),
+    FLOW_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    FLOW_POTTERY_SHERD(-1),
+    FLOWER_BANNER_PATTERN(-1, 1),
+    FOX_SPAWN_EGG(-1),
+    FRIEND_POTTERY_SHERD(-1),
+    FROG_SPAWN_EGG(-1),
+    FURNACE_MINECART(-1, 1),
+    GHAST_SPAWN_EGG(-1),
+    GHAST_TEAR(-1),
+    GLASS_BOTTLE(-1),
+    GLISTERING_MELON_SLICE(-1),
+    GLOW_BERRIES(-1),
+    GLOW_INK_SAC(-1),
+    GLOW_ITEM_FRAME(-1),
+    GLOW_SQUID_SPAWN_EGG(-1),
+    GLOWSTONE_DUST(-1),
+    GOAT_SPAWN_EGG(-1),
+    GOLD_INGOT(-1),
+    GOLD_NUGGET(-1),
+    GOLDEN_APPLE(-1),
+    GOLDEN_AXE(-1, 1, 32),
+    GOLDEN_BOOTS(-1, 1, 91),
+    GOLDEN_CARROT(-1),
+    GOLDEN_CHESTPLATE(-1, 1, 112),
+    GOLDEN_HELMET(-1, 1, 77),
+    GOLDEN_HOE(-1, 1, 32),
+    GOLDEN_HORSE_ARMOR(-1, 1),
+    GOLDEN_LEGGINGS(-1, 1, 105),
+    GOLDEN_PICKAXE(-1, 1, 32),
+    GOLDEN_SHOVEL(-1, 1, 32),
+    GOLDEN_SWORD(-1, 1, 32),
+    GRAY_BUNDLE(-1, 1),
+    GRAY_DYE(-1),
+    GREEN_BUNDLE(-1, 1),
+    GREEN_DYE(-1),
+    GUARDIAN_SPAWN_EGG(-1),
+    GUNPOWDER(-1),
+    GUSTER_BANNER_PATTERN(-1, 1),
+    GUSTER_POTTERY_SHERD(-1),
+    HEART_OF_THE_SEA(-1),
+    HEART_POTTERY_SHERD(-1),
+    HEARTBREAK_POTTERY_SHERD(-1),
+    HOGLIN_SPAWN_EGG(-1),
+    HONEY_BOTTLE(-1, 16),
+    HONEYCOMB(-1),
+    HOPPER_MINECART(-1, 1),
+    HORSE_SPAWN_EGG(-1),
+    HOST_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    HOWL_POTTERY_SHERD(-1),
+    HUSK_SPAWN_EGG(-1),
+    INK_SAC(-1),
+    IRON_AXE(-1, 1, 250),
+    IRON_BOOTS(-1, 1, 195),
+    IRON_CHESTPLATE(-1, 1, 240),
+    IRON_GOLEM_SPAWN_EGG(-1),
+    IRON_HELMET(-1, 1, 165),
+    IRON_HOE(-1, 1, 250),
+    IRON_HORSE_ARMOR(-1, 1),
+    IRON_INGOT(-1),
+    IRON_LEGGINGS(-1, 1, 225),
+    IRON_PICKAXE(-1, 1, 250),
+    IRON_SHOVEL(-1, 1, 250),
+    IRON_SWORD(-1, 1, 250),
+    ITEM_FRAME(-1),
+    JUNGLE_BOAT(-1, 1),
+    JUNGLE_CHEST_BOAT(-1, 1),
+    LAPIS_LAZULI(-1),
+    LAVA_BUCKET(-1, 1),
+    LEAD(-1),
+    LEATHER(-1),
+    LEATHER_BOOTS(-1, 1, 65),
+    LEATHER_CHESTPLATE(-1, 1, 80),
+    LEATHER_HELMET(-1, 1, 55),
+    LEATHER_HORSE_ARMOR(-1, 1),
+    LEATHER_LEGGINGS(-1, 1, 75),
+    LIGHT_BLUE_BUNDLE(-1, 1),
+    LIGHT_BLUE_DYE(-1),
+    LIGHT_GRAY_BUNDLE(-1, 1),
+    LIGHT_GRAY_DYE(-1),
+    LIME_BUNDLE(-1, 1),
+    LIME_DYE(-1),
+    LLAMA_SPAWN_EGG(-1),
+    MACE(-1, 1, 500),
+    MAGENTA_BUNDLE(-1, 1),
+    MAGENTA_DYE(-1),
+    MAGMA_CREAM(-1),
+    MAGMA_CUBE_SPAWN_EGG(-1),
+    MANGROVE_BOAT(-1, 1),
+    MANGROVE_CHEST_BOAT(-1, 1),
+    MAP(-1),
+    MELON_SEEDS(-1),
+    MELON_SLICE(-1),
+    MILK_BUCKET(-1, 1),
+    MINECART(-1, 1),
+    MINER_POTTERY_SHERD(-1),
+    MOJANG_BANNER_PATTERN(-1, 1),
+    MOOSHROOM_SPAWN_EGG(-1),
+    MOURNER_POTTERY_SHERD(-1),
+    MULE_SPAWN_EGG(-1),
+    MUSHROOM_STEW(-1, 1),
+    MUSIC_DISC_11(-1, 1),
+    MUSIC_DISC_13(-1, 1),
+    MUSIC_DISC_BLOCKS(-1, 1),
+    MUSIC_DISC_CAT(-1, 1),
+    MUSIC_DISC_CHIRP(-1, 1),
+    MUSIC_DISC_CREATOR(-1, 1),
+    MUSIC_DISC_CREATOR_MUSIC_BOX(-1, 1),
+    MUSIC_DISC_FAR(-1, 1),
+    MUSIC_DISC_MALL(-1, 1),
+    MUSIC_DISC_MELLOHI(-1, 1),
+    MUSIC_DISC_OTHERSIDE(-1, 1),
+    MUSIC_DISC_PIGSTEP(-1, 1),
+    MUSIC_DISC_PRECIPICE(-1, 1),
+    MUSIC_DISC_RELIC(-1, 1),
+    MUSIC_DISC_STAL(-1, 1),
+    MUSIC_DISC_STRAD(-1, 1),
+    MUSIC_DISC_WAIT(-1, 1),
+    MUSIC_DISC_WARD(-1, 1),
+    MUTTON(-1),
+    NAME_TAG(-1),
+    NAUTILUS_SHELL(-1),
+    NETHER_BRICK(-1),
+    NETHER_STAR(-1),
+    NETHERITE_AXE(-1, 1, 2031),
+    NETHERITE_BOOTS(-1, 1, 481),
+    NETHERITE_CHESTPLATE(-1, 1, 592),
+    NETHERITE_HELMET(-1, 1, 407),
+    NETHERITE_HOE(-1, 1, 2031),
+    NETHERITE_INGOT(-1),
+    NETHERITE_LEGGINGS(-1, 1, 555),
+    NETHERITE_PICKAXE(-1, 1, 2031),
+    NETHERITE_SCRAP(-1),
+    NETHERITE_SHOVEL(-1, 1, 2031),
+    NETHERITE_SWORD(-1, 1, 2031),
+    NETHERITE_UPGRADE_SMITHING_TEMPLATE(-1),
+    OAK_BOAT(-1, 1),
+    OAK_CHEST_BOAT(-1, 1),
+    OCELOT_SPAWN_EGG(-1),
+    OMINOUS_BOTTLE(-1),
+    OMINOUS_TRIAL_KEY(-1),
+    ORANGE_BUNDLE(-1, 1),
+    ORANGE_DYE(-1),
+    PAINTING(-1),
+    PALE_OAK_BOAT(-1, 1),
+    PALE_OAK_CHEST_BOAT(-1, 1),
+    PANDA_SPAWN_EGG(-1),
+    PAPER(-1),
+    PARROT_SPAWN_EGG(-1),
+    PHANTOM_MEMBRANE(-1),
+    PHANTOM_SPAWN_EGG(-1),
+    PIG_SPAWN_EGG(-1),
+    PIGLIN_BANNER_PATTERN(-1, 1),
+    PIGLIN_BRUTE_SPAWN_EGG(-1),
+    PIGLIN_SPAWN_EGG(-1),
+    PILLAGER_SPAWN_EGG(-1),
+    PINK_BUNDLE(-1, 1),
+    PINK_DYE(-1),
+    PITCHER_POD(-1),
+    PLENTY_POTTERY_SHERD(-1),
+    POISONOUS_POTATO(-1),
+    POLAR_BEAR_SPAWN_EGG(-1),
+    POPPED_CHORUS_FRUIT(-1),
+    PORKCHOP(-1),
+    POTATO(-1),
+    POTION(-1, 1),
+    POWDER_SNOW_BUCKET(-1, 1),
+    PRISMARINE_CRYSTALS(-1),
+    PRISMARINE_SHARD(-1),
+    PRIZE_POTTERY_SHERD(-1),
+    PUFFERFISH(-1),
+    PUFFERFISH_BUCKET(-1, 1),
+    PUFFERFISH_SPAWN_EGG(-1),
+    PUMPKIN_PIE(-1),
+    PUMPKIN_SEEDS(-1),
+    PURPLE_BUNDLE(-1, 1),
+    PURPLE_DYE(-1),
+    QUARTZ(-1),
+    RABBIT(-1),
+    RABBIT_FOOT(-1),
+    RABBIT_HIDE(-1),
+    RABBIT_SPAWN_EGG(-1),
+    RABBIT_STEW(-1, 1),
+    RAISER_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    RAVAGER_SPAWN_EGG(-1),
+    RAW_COPPER(-1),
+    RAW_GOLD(-1),
+    RAW_IRON(-1),
+    RECOVERY_COMPASS(-1),
+    RED_BUNDLE(-1, 1),
+    RED_DYE(-1),
+    REDSTONE(-1),
+    RESIN_BRICK(-1),
+    RIB_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    ROTTEN_FLESH(-1),
+    SADDLE(-1, 1),
+    SALMON(-1),
+    SALMON_BUCKET(-1, 1),
+    SALMON_SPAWN_EGG(-1),
+    SCRAPE_POTTERY_SHERD(-1),
+    SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    SHEAF_POTTERY_SHERD(-1),
+    SHEARS(-1, 1, 238),
+    SHEEP_SPAWN_EGG(-1),
+    SHELTER_POTTERY_SHERD(-1),
+    SHIELD(-1, 1, 336),
+    SHULKER_SHELL(-1),
+    SHULKER_SPAWN_EGG(-1),
+    SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    SILVERFISH_SPAWN_EGG(-1),
+    SKELETON_HORSE_SPAWN_EGG(-1),
+    SKELETON_SPAWN_EGG(-1),
+    SKULL_BANNER_PATTERN(-1, 1),
+    SKULL_POTTERY_SHERD(-1),
+    SLIME_BALL(-1),
+    SLIME_SPAWN_EGG(-1),
+    SNIFFER_SPAWN_EGG(-1),
+    SNORT_POTTERY_SHERD(-1),
+    SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    SNOW_GOLEM_SPAWN_EGG(-1),
+    SNOWBALL(-1, 16),
+    SPECTRAL_ARROW(-1),
+    SPIDER_EYE(-1),
+    SPIDER_SPAWN_EGG(-1),
+    SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    SPLASH_POTION(-1, 1),
+    SPRUCE_BOAT(-1, 1),
+    SPRUCE_CHEST_BOAT(-1, 1),
+    SPYGLASS(-1, 1),
+    SQUID_SPAWN_EGG(-1),
+    STICK(-1),
+    STONE_AXE(-1, 1, 131),
+    STONE_HOE(-1, 1, 131),
+    STONE_PICKAXE(-1, 1, 131),
+    STONE_SHOVEL(-1, 1, 131),
+    STONE_SWORD(-1, 1, 131),
+    STRAY_SPAWN_EGG(-1),
+    STRIDER_SPAWN_EGG(-1),
+    STRING(-1),
+    SUGAR(-1),
+    SUSPICIOUS_STEW(-1, 1),
+    SWEET_BERRIES(-1),
+    TADPOLE_BUCKET(-1, 1),
+    TADPOLE_SPAWN_EGG(-1),
+    TIDE_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    TIPPED_ARROW(-1),
+    TNT_MINECART(-1, 1),
+    TORCHFLOWER_SEEDS(-1),
+    TOTEM_OF_UNDYING(-1, 1),
+    TRADER_LLAMA_SPAWN_EGG(-1),
+    TRIAL_KEY(-1),
+    TRIDENT(-1, 1, 250),
+    TROPICAL_FISH(-1),
+    TROPICAL_FISH_BUCKET(-1, 1),
+    TROPICAL_FISH_SPAWN_EGG(-1),
+    TURTLE_HELMET(-1, 1, 275),
+    TURTLE_SCUTE(-1),
+    TURTLE_SPAWN_EGG(-1),
+    VEX_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    VEX_SPAWN_EGG(-1),
+    VILLAGER_SPAWN_EGG(-1),
+    VINDICATOR_SPAWN_EGG(-1),
+    WANDERING_TRADER_SPAWN_EGG(-1),
+    WARD_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    WARDEN_SPAWN_EGG(-1),
+    WARPED_FUNGUS_ON_A_STICK(-1, 1, 100),
+    WATER_BUCKET(-1, 1),
+    WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    WHEAT_SEEDS(-1),
+    WHITE_BUNDLE(-1, 1),
+    WHITE_DYE(-1),
+    WILD_ARMOR_TRIM_SMITHING_TEMPLATE(-1),
+    WIND_CHARGE(-1),
+    WITCH_SPAWN_EGG(-1),
+    WITHER_SKELETON_SPAWN_EGG(-1),
+    WITHER_SPAWN_EGG(-1),
+    WOLF_ARMOR(-1, 1, 64),
+    WOLF_SPAWN_EGG(-1),
+    WOODEN_AXE(-1, 1, 59),
+    WOODEN_HOE(-1, 1, 59),
+    WOODEN_PICKAXE(-1, 1, 59),
+    WOODEN_SHOVEL(-1, 1, 59),
+    WOODEN_SWORD(-1, 1, 59),
+    WRITABLE_BOOK(-1, 1),
+    WRITTEN_BOOK(-1, 16),
+    YELLOW_BUNDLE(-1, 1),
+    YELLOW_DYE(-1),
+    ZOGLIN_SPAWN_EGG(-1),
+    ZOMBIE_HORSE_SPAWN_EGG(-1),
+    ZOMBIE_SPAWN_EGG(-1),
+    ZOMBIE_VILLAGER_SPAWN_EGG(-1),
+    ZOMBIFIED_PIGLIN_SPAWN_EGG(-1),
+    // End generate - Items
+    // Start generate - Blocks
+    // @GeneratedFrom 1.21.4
+    ACACIA_BUTTON(-1, Switch.class),
+    ACACIA_DOOR(-1, Door.class),
+    ACACIA_FENCE(-1, Fence.class),
+    ACACIA_FENCE_GATE(-1, Gate.class),
+    ACACIA_HANGING_SIGN(-1, 16, HangingSign.class),
+    ACACIA_LEAVES(-1, Leaves.class),
+    ACACIA_LOG(-1, Orientable.class),
+    ACACIA_PLANKS(-1),
+    ACACIA_PRESSURE_PLATE(-1, Powerable.class),
+    ACACIA_SAPLING(-1, Sapling.class),
+    ACACIA_SIGN(-1, 16, Sign.class),
+    ACACIA_SLAB(-1, Slab.class),
+    ACACIA_STAIRS(-1, Stairs.class),
+    ACACIA_TRAPDOOR(-1, TrapDoor.class),
+    ACACIA_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    ACACIA_WALL_SIGN(-1, 16, WallSign.class),
+    ACACIA_WOOD(-1, Orientable.class),
+    ACTIVATOR_RAIL(-1, RedstoneRail.class),
+    ALLIUM(-1),
+    AMETHYST_BLOCK(-1),
+    AMETHYST_CLUSTER(-1, AmethystCluster.class),
+    ANCIENT_DEBRIS(-1),
+    ANDESITE(-1),
+    ANDESITE_SLAB(-1, Slab.class),
+    ANDESITE_STAIRS(-1, Stairs.class),
+    ANDESITE_WALL(-1, Wall.class),
+    ANVIL(-1, Directional.class),
+    ATTACHED_MELON_STEM(-1, Directional.class),
+    ATTACHED_PUMPKIN_STEM(-1, Directional.class),
+    AZALEA(-1),
+    AZALEA_LEAVES(-1, Leaves.class),
+    AZURE_BLUET(-1),
+    BAMBOO(-1, Bamboo.class),
+    BAMBOO_BLOCK(-1, Orientable.class),
+    BAMBOO_BUTTON(-1, Switch.class),
+    BAMBOO_DOOR(-1, Door.class),
+    BAMBOO_FENCE(-1, Fence.class),
+    BAMBOO_FENCE_GATE(-1, Gate.class),
+    BAMBOO_HANGING_SIGN(-1, 16, HangingSign.class),
+    BAMBOO_MOSAIC(-1),
+    BAMBOO_MOSAIC_SLAB(-1, Slab.class),
+    BAMBOO_MOSAIC_STAIRS(-1, Stairs.class),
+    BAMBOO_PLANKS(-1),
+    BAMBOO_PRESSURE_PLATE(-1, Powerable.class),
+    BAMBOO_SAPLING(-1),
+    BAMBOO_SIGN(-1, 16, Sign.class),
+    BAMBOO_SLAB(-1, Slab.class),
+    BAMBOO_STAIRS(-1, Stairs.class),
+    BAMBOO_TRAPDOOR(-1, TrapDoor.class),
+    BAMBOO_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    BAMBOO_WALL_SIGN(-1, 16, WallSign.class),
+    BARREL(-1, Barrel.class),
+    BARRIER(-1, Waterlogged.class),
+    BASALT(-1, Orientable.class),
+    BEACON(-1),
+    BEDROCK(-1),
+    BEE_NEST(-1, Beehive.class),
+    BEEHIVE(-1, Beehive.class),
+    BEETROOTS(-1, Ageable.class),
+    BELL(-1, Bell.class),
+    BIG_DRIPLEAF(-1, BigDripleaf.class),
+    BIG_DRIPLEAF_STEM(-1, Dripleaf.class),
+    BIRCH_BUTTON(-1, Switch.class),
+    BIRCH_DOOR(-1, Door.class),
+    BIRCH_FENCE(-1, Fence.class),
+    BIRCH_FENCE_GATE(-1, Gate.class),
+    BIRCH_HANGING_SIGN(-1, 16, HangingSign.class),
+    BIRCH_LEAVES(-1, Leaves.class),
+    BIRCH_LOG(-1, Orientable.class),
+    BIRCH_PLANKS(-1),
+    BIRCH_PRESSURE_PLATE(-1, Powerable.class),
+    BIRCH_SAPLING(-1, Sapling.class),
+    BIRCH_SIGN(-1, 16, Sign.class),
+    BIRCH_SLAB(-1, Slab.class),
+    BIRCH_STAIRS(-1, Stairs.class),
+    BIRCH_TRAPDOOR(-1, TrapDoor.class),
+    BIRCH_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    BIRCH_WALL_SIGN(-1, 16, WallSign.class),
+    BIRCH_WOOD(-1, Orientable.class),
+    BLACK_BANNER(-1, 16, Rotatable.class),
+    BLACK_BED(-1, 1, Bed.class),
+    BLACK_CANDLE(-1, Candle.class),
+    BLACK_CANDLE_CAKE(-1, Lightable.class),
+    BLACK_CARPET(-1),
+    BLACK_CONCRETE(-1),
+    BLACK_CONCRETE_POWDER(-1),
+    BLACK_GLAZED_TERRACOTTA(-1, Directional.class),
+    BLACK_SHULKER_BOX(-1, 1, Directional.class),
+    BLACK_STAINED_GLASS(-1),
+    BLACK_STAINED_GLASS_PANE(-1, GlassPane.class),
+    BLACK_TERRACOTTA(-1),
+    BLACK_WALL_BANNER(-1, Directional.class),
+    BLACK_WOOL(-1),
+    BLACKSTONE(-1),
+    BLACKSTONE_SLAB(-1, Slab.class),
+    BLACKSTONE_STAIRS(-1, Stairs.class),
+    BLACKSTONE_WALL(-1, Wall.class),
+    BLAST_FURNACE(-1, Furnace.class),
+    BLUE_BANNER(-1, 16, Rotatable.class),
+    BLUE_BED(-1, 1, Bed.class),
+    BLUE_CANDLE(-1, Candle.class),
+    BLUE_CANDLE_CAKE(-1, Lightable.class),
+    BLUE_CARPET(-1),
+    BLUE_CONCRETE(-1),
+    BLUE_CONCRETE_POWDER(-1),
+    BLUE_GLAZED_TERRACOTTA(-1, Directional.class),
+    BLUE_ICE(-1),
+    BLUE_ORCHID(-1),
+    BLUE_SHULKER_BOX(-1, 1, Directional.class),
+    BLUE_STAINED_GLASS(-1),
+    BLUE_STAINED_GLASS_PANE(-1, GlassPane.class),
+    BLUE_TERRACOTTA(-1),
+    BLUE_WALL_BANNER(-1, Directional.class),
+    BLUE_WOOL(-1),
+    BONE_BLOCK(-1, Orientable.class),
+    BOOKSHELF(-1),
+    BRAIN_CORAL(-1, Waterlogged.class),
+    BRAIN_CORAL_BLOCK(-1),
+    BRAIN_CORAL_FAN(-1, Waterlogged.class),
+    BRAIN_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    BREWING_STAND(-1, BrewingStand.class),
+    BRICK_SLAB(-1, Slab.class),
+    BRICK_STAIRS(-1, Stairs.class),
+    BRICK_WALL(-1, Wall.class),
+    BRICKS(-1),
+    BROWN_BANNER(-1, 16, Rotatable.class),
+    BROWN_BED(-1, 1, Bed.class),
+    BROWN_CANDLE(-1, Candle.class),
+    BROWN_CANDLE_CAKE(-1, Lightable.class),
+    BROWN_CARPET(-1),
+    BROWN_CONCRETE(-1),
+    BROWN_CONCRETE_POWDER(-1),
+    BROWN_GLAZED_TERRACOTTA(-1, Directional.class),
+    BROWN_MUSHROOM(-1),
+    BROWN_MUSHROOM_BLOCK(-1, MultipleFacing.class),
+    BROWN_SHULKER_BOX(-1, 1, Directional.class),
+    BROWN_STAINED_GLASS(-1),
+    BROWN_STAINED_GLASS_PANE(-1, GlassPane.class),
+    BROWN_TERRACOTTA(-1),
+    BROWN_WALL_BANNER(-1, Directional.class),
+    BROWN_WOOL(-1),
+    BUBBLE_COLUMN(-1, BubbleColumn.class),
+    BUBBLE_CORAL(-1, Waterlogged.class),
+    BUBBLE_CORAL_BLOCK(-1),
+    BUBBLE_CORAL_FAN(-1, Waterlogged.class),
+    BUBBLE_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    BUDDING_AMETHYST(-1),
+    CACTUS(-1, Ageable.class),
+    CAKE(-1, 1, Cake.class),
+    CALCITE(-1),
+    CALIBRATED_SCULK_SENSOR(-1, CalibratedSculkSensor.class),
+    CAMPFIRE(-1, Campfire.class),
+    CANDLE(-1, Candle.class),
+    CANDLE_CAKE(-1, Lightable.class),
+    CARROTS(-1, Ageable.class),
+    CARTOGRAPHY_TABLE(-1),
+    CARVED_PUMPKIN(-1, Directional.class),
+    CAULDRON(-1),
+    CAVE_AIR(-1),
+    CAVE_VINES(-1, CaveVines.class),
+    CAVE_VINES_PLANT(-1, CaveVinesPlant.class),
+    CHAIN(-1, Chain.class),
+    CHAIN_COMMAND_BLOCK(-1, CommandBlock.class),
+    CHERRY_BUTTON(-1, Switch.class),
+    CHERRY_DOOR(-1, Door.class),
+    CHERRY_FENCE(-1, Fence.class),
+    CHERRY_FENCE_GATE(-1, Gate.class),
+    CHERRY_HANGING_SIGN(-1, 16, HangingSign.class),
+    CHERRY_LEAVES(-1, Leaves.class),
+    CHERRY_LOG(-1, Orientable.class),
+    CHERRY_PLANKS(-1),
+    CHERRY_PRESSURE_PLATE(-1, Powerable.class),
+    CHERRY_SAPLING(-1, Sapling.class),
+    CHERRY_SIGN(-1, 16, Sign.class),
+    CHERRY_SLAB(-1, Slab.class),
+    CHERRY_STAIRS(-1, Stairs.class),
+    CHERRY_TRAPDOOR(-1, TrapDoor.class),
+    CHERRY_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    CHERRY_WALL_SIGN(-1, 16, WallSign.class),
+    CHERRY_WOOD(-1, Orientable.class),
+    CHEST(-1, Chest.class),
+    CHIPPED_ANVIL(-1, Directional.class),
+    CHISELED_BOOKSHELF(-1, ChiseledBookshelf.class),
+    CHISELED_COPPER(-1),
+    CHISELED_DEEPSLATE(-1),
+    CHISELED_NETHER_BRICKS(-1),
+    CHISELED_POLISHED_BLACKSTONE(-1),
+    CHISELED_QUARTZ_BLOCK(-1),
+    CHISELED_RED_SANDSTONE(-1),
+    CHISELED_RESIN_BRICKS(-1),
+    CHISELED_SANDSTONE(-1),
+    CHISELED_STONE_BRICKS(-1),
+    CHISELED_TUFF(-1),
+    CHISELED_TUFF_BRICKS(-1),
+    CHORUS_FLOWER(-1, Ageable.class),
+    CHORUS_PLANT(-1, MultipleFacing.class),
+    CLAY(-1),
+    CLOSED_EYEBLOSSOM(-1),
+    COAL_BLOCK(-1),
+    COAL_ORE(-1),
+    COARSE_DIRT(-1),
+    COBBLED_DEEPSLATE(-1),
+    COBBLED_DEEPSLATE_SLAB(-1, Slab.class),
+    COBBLED_DEEPSLATE_STAIRS(-1, Stairs.class),
+    COBBLED_DEEPSLATE_WALL(-1, Wall.class),
+    COBBLESTONE(-1),
+    COBBLESTONE_SLAB(-1, Slab.class),
+    COBBLESTONE_STAIRS(-1, Stairs.class),
+    COBBLESTONE_WALL(-1, Wall.class),
+    COBWEB(-1),
+    COCOA(-1, Cocoa.class),
+    COMMAND_BLOCK(-1, CommandBlock.class),
+    COMPARATOR(-1, Comparator.class),
+    COMPOSTER(-1, Levelled.class),
+    CONDUIT(-1, Waterlogged.class),
+    COPPER_BLOCK(-1),
+    COPPER_BULB(-1, CopperBulb.class),
+    COPPER_DOOR(-1, Door.class),
+    COPPER_GRATE(-1, Waterlogged.class),
+    COPPER_ORE(-1),
+    COPPER_TRAPDOOR(-1, TrapDoor.class),
+    CORNFLOWER(-1),
+    CRACKED_DEEPSLATE_BRICKS(-1),
+    CRACKED_DEEPSLATE_TILES(-1),
+    CRACKED_NETHER_BRICKS(-1),
+    CRACKED_POLISHED_BLACKSTONE_BRICKS(-1),
+    CRACKED_STONE_BRICKS(-1),
+    CRAFTER(-1, Crafter.class),
+    CRAFTING_TABLE(-1),
+    CREAKING_HEART(-1, CreakingHeart.class),
+    CREEPER_HEAD(-1, Skull.class),
+    CREEPER_WALL_HEAD(-1, WallSkull.class),
+    CRIMSON_BUTTON(-1, Switch.class),
+    CRIMSON_DOOR(-1, Door.class),
+    CRIMSON_FENCE(-1, Fence.class),
+    CRIMSON_FENCE_GATE(-1, Gate.class),
+    CRIMSON_FUNGUS(-1),
+    CRIMSON_HANGING_SIGN(-1, 16, HangingSign.class),
+    CRIMSON_HYPHAE(-1, Orientable.class),
+    CRIMSON_NYLIUM(-1),
+    CRIMSON_PLANKS(-1),
+    CRIMSON_PRESSURE_PLATE(-1, Powerable.class),
+    CRIMSON_ROOTS(-1),
+    CRIMSON_SIGN(-1, 16, Sign.class),
+    CRIMSON_SLAB(-1, Slab.class),
+    CRIMSON_STAIRS(-1, Stairs.class),
+    CRIMSON_STEM(-1, Orientable.class),
+    CRIMSON_TRAPDOOR(-1, TrapDoor.class),
+    CRIMSON_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    CRIMSON_WALL_SIGN(-1, 16, WallSign.class),
+    CRYING_OBSIDIAN(-1),
+    CUT_COPPER(-1),
+    CUT_COPPER_SLAB(-1, Slab.class),
+    CUT_COPPER_STAIRS(-1, Stairs.class),
+    CUT_RED_SANDSTONE(-1),
+    CUT_RED_SANDSTONE_SLAB(-1, Slab.class),
+    CUT_SANDSTONE(-1),
+    CUT_SANDSTONE_SLAB(-1, Slab.class),
+    CYAN_BANNER(-1, 16, Rotatable.class),
+    CYAN_BED(-1, 1, Bed.class),
+    CYAN_CANDLE(-1, Candle.class),
+    CYAN_CANDLE_CAKE(-1, Lightable.class),
+    CYAN_CARPET(-1),
+    CYAN_CONCRETE(-1),
+    CYAN_CONCRETE_POWDER(-1),
+    CYAN_GLAZED_TERRACOTTA(-1, Directional.class),
+    CYAN_SHULKER_BOX(-1, 1, Directional.class),
+    CYAN_STAINED_GLASS(-1),
+    CYAN_STAINED_GLASS_PANE(-1, GlassPane.class),
+    CYAN_TERRACOTTA(-1),
+    CYAN_WALL_BANNER(-1, Directional.class),
+    CYAN_WOOL(-1),
+    DAMAGED_ANVIL(-1, Directional.class),
+    DANDELION(-1),
+    DARK_OAK_BUTTON(-1, Switch.class),
+    DARK_OAK_DOOR(-1, Door.class),
+    DARK_OAK_FENCE(-1, Fence.class),
+    DARK_OAK_FENCE_GATE(-1, Gate.class),
+    DARK_OAK_HANGING_SIGN(-1, 16, HangingSign.class),
+    DARK_OAK_LEAVES(-1, Leaves.class),
+    DARK_OAK_LOG(-1, Orientable.class),
+    DARK_OAK_PLANKS(-1),
+    DARK_OAK_PRESSURE_PLATE(-1, Powerable.class),
+    DARK_OAK_SAPLING(-1, Sapling.class),
+    DARK_OAK_SIGN(-1, 16, Sign.class),
+    DARK_OAK_SLAB(-1, Slab.class),
+    DARK_OAK_STAIRS(-1, Stairs.class),
+    DARK_OAK_TRAPDOOR(-1, TrapDoor.class),
+    DARK_OAK_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    DARK_OAK_WALL_SIGN(-1, 16, WallSign.class),
+    DARK_OAK_WOOD(-1, Orientable.class),
+    DARK_PRISMARINE(-1),
+    DARK_PRISMARINE_SLAB(-1, Slab.class),
+    DARK_PRISMARINE_STAIRS(-1, Stairs.class),
+    DAYLIGHT_DETECTOR(-1, DaylightDetector.class),
+    DEAD_BRAIN_CORAL(-1, Waterlogged.class),
+    DEAD_BRAIN_CORAL_BLOCK(-1),
+    DEAD_BRAIN_CORAL_FAN(-1, Waterlogged.class),
+    DEAD_BRAIN_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    DEAD_BUBBLE_CORAL(-1, Waterlogged.class),
+    DEAD_BUBBLE_CORAL_BLOCK(-1),
+    DEAD_BUBBLE_CORAL_FAN(-1, Waterlogged.class),
+    DEAD_BUBBLE_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    DEAD_BUSH(-1),
+    DEAD_FIRE_CORAL(-1, Waterlogged.class),
+    DEAD_FIRE_CORAL_BLOCK(-1),
+    DEAD_FIRE_CORAL_FAN(-1, Waterlogged.class),
+    DEAD_FIRE_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    DEAD_HORN_CORAL(-1, Waterlogged.class),
+    DEAD_HORN_CORAL_BLOCK(-1),
+    DEAD_HORN_CORAL_FAN(-1, Waterlogged.class),
+    DEAD_HORN_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    DEAD_TUBE_CORAL(-1, Waterlogged.class),
+    DEAD_TUBE_CORAL_BLOCK(-1),
+    DEAD_TUBE_CORAL_FAN(-1, Waterlogged.class),
+    DEAD_TUBE_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    DECORATED_POT(-1, DecoratedPot.class),
+    DEEPSLATE(-1, Orientable.class),
+    DEEPSLATE_BRICK_SLAB(-1, Slab.class),
+    DEEPSLATE_BRICK_STAIRS(-1, Stairs.class),
+    DEEPSLATE_BRICK_WALL(-1, Wall.class),
+    DEEPSLATE_BRICKS(-1),
+    DEEPSLATE_COAL_ORE(-1),
+    DEEPSLATE_COPPER_ORE(-1),
+    DEEPSLATE_DIAMOND_ORE(-1),
+    DEEPSLATE_EMERALD_ORE(-1),
+    DEEPSLATE_GOLD_ORE(-1),
+    DEEPSLATE_IRON_ORE(-1),
+    DEEPSLATE_LAPIS_ORE(-1),
+    DEEPSLATE_REDSTONE_ORE(-1, Lightable.class),
+    DEEPSLATE_TILE_SLAB(-1, Slab.class),
+    DEEPSLATE_TILE_STAIRS(-1, Stairs.class),
+    DEEPSLATE_TILE_WALL(-1, Wall.class),
+    DEEPSLATE_TILES(-1),
+    DETECTOR_RAIL(-1, RedstoneRail.class),
+    DIAMOND_BLOCK(-1),
+    DIAMOND_ORE(-1),
+    DIORITE(-1),
+    DIORITE_SLAB(-1, Slab.class),
+    DIORITE_STAIRS(-1, Stairs.class),
+    DIORITE_WALL(-1, Wall.class),
+    DIRT(-1),
+    DIRT_PATH(-1),
+    DISPENSER(-1, Dispenser.class),
+    DRAGON_EGG(-1),
+    DRAGON_HEAD(-1, Skull.class),
+    DRAGON_WALL_HEAD(-1, WallSkull.class),
+    DRIED_KELP_BLOCK(-1),
+    DRIPSTONE_BLOCK(-1),
+    DROPPER(-1, Dispenser.class),
+    EMERALD_BLOCK(-1),
+    EMERALD_ORE(-1),
+    ENCHANTING_TABLE(-1),
+    END_GATEWAY(-1),
+    END_PORTAL(-1),
+    END_PORTAL_FRAME(-1, EndPortalFrame.class),
+    END_ROD(-1, Directional.class),
+    END_STONE(-1),
+    END_STONE_BRICK_SLAB(-1, Slab.class),
+    END_STONE_BRICK_STAIRS(-1, Stairs.class),
+    END_STONE_BRICK_WALL(-1, Wall.class),
+    END_STONE_BRICKS(-1),
+    ENDER_CHEST(-1, EnderChest.class),
+    EXPOSED_CHISELED_COPPER(-1),
+    EXPOSED_COPPER(-1),
+    EXPOSED_COPPER_BULB(-1, CopperBulb.class),
+    EXPOSED_COPPER_DOOR(-1, Door.class),
+    EXPOSED_COPPER_GRATE(-1, Waterlogged.class),
+    EXPOSED_COPPER_TRAPDOOR(-1, TrapDoor.class),
+    EXPOSED_CUT_COPPER(-1),
+    EXPOSED_CUT_COPPER_SLAB(-1, Slab.class),
+    EXPOSED_CUT_COPPER_STAIRS(-1, Stairs.class),
+    FARMLAND(-1, Farmland.class),
+    FERN(-1),
+    FIRE(-1, Fire.class),
+    FIRE_CORAL(-1, Waterlogged.class),
+    FIRE_CORAL_BLOCK(-1),
+    FIRE_CORAL_FAN(-1, Waterlogged.class),
+    FIRE_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    FLETCHING_TABLE(-1),
+    FLOWER_POT(-1),
+    FLOWERING_AZALEA(-1),
+    FLOWERING_AZALEA_LEAVES(-1, Leaves.class),
+    FROGSPAWN(-1),
+    FROSTED_ICE(-1, Ageable.class),
+    FURNACE(-1, Furnace.class),
+    GILDED_BLACKSTONE(-1),
+    GLASS(-1),
+    GLASS_PANE(-1, Fence.class),
+    GLOW_LICHEN(-1, GlowLichen.class),
+    GLOWSTONE(-1),
+    GOLD_BLOCK(-1),
+    GOLD_ORE(-1),
+    GRANITE(-1),
+    GRANITE_SLAB(-1, Slab.class),
+    GRANITE_STAIRS(-1, Stairs.class),
+    GRANITE_WALL(-1, Wall.class),
+    GRASS_BLOCK(-1, Snowable.class),
+    GRAVEL(-1),
+    GRAY_BANNER(-1, 16, Rotatable.class),
+    GRAY_BED(-1, 1, Bed.class),
+    GRAY_CANDLE(-1, Candle.class),
+    GRAY_CANDLE_CAKE(-1, Lightable.class),
+    GRAY_CARPET(-1),
+    GRAY_CONCRETE(-1),
+    GRAY_CONCRETE_POWDER(-1),
+    GRAY_GLAZED_TERRACOTTA(-1, Directional.class),
+    GRAY_SHULKER_BOX(-1, 1, Directional.class),
+    GRAY_STAINED_GLASS(-1),
+    GRAY_STAINED_GLASS_PANE(-1, GlassPane.class),
+    GRAY_TERRACOTTA(-1),
+    GRAY_WALL_BANNER(-1, Directional.class),
+    GRAY_WOOL(-1),
+    GREEN_BANNER(-1, 16, Rotatable.class),
+    GREEN_BED(-1, 1, Bed.class),
+    GREEN_CANDLE(-1, Candle.class),
+    GREEN_CANDLE_CAKE(-1, Lightable.class),
+    GREEN_CARPET(-1),
+    GREEN_CONCRETE(-1),
+    GREEN_CONCRETE_POWDER(-1),
+    GREEN_GLAZED_TERRACOTTA(-1, Directional.class),
+    GREEN_SHULKER_BOX(-1, 1, Directional.class),
+    GREEN_STAINED_GLASS(-1),
+    GREEN_STAINED_GLASS_PANE(-1, GlassPane.class),
+    GREEN_TERRACOTTA(-1),
+    GREEN_WALL_BANNER(-1, Directional.class),
+    GREEN_WOOL(-1),
+    GRINDSTONE(-1, Grindstone.class),
+    HANGING_ROOTS(-1, Waterlogged.class),
+    HAY_BLOCK(-1, Orientable.class),
+    HEAVY_CORE(-1, Waterlogged.class),
+    HEAVY_WEIGHTED_PRESSURE_PLATE(-1, AnaloguePowerable.class),
+    HONEY_BLOCK(-1),
+    HONEYCOMB_BLOCK(-1),
+    HOPPER(-1, Hopper.class),
+    HORN_CORAL(-1, Waterlogged.class),
+    HORN_CORAL_BLOCK(-1),
+    HORN_CORAL_FAN(-1, Waterlogged.class),
+    HORN_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    ICE(-1),
+    INFESTED_CHISELED_STONE_BRICKS(-1),
+    INFESTED_COBBLESTONE(-1),
+    INFESTED_CRACKED_STONE_BRICKS(-1),
+    INFESTED_DEEPSLATE(-1, Orientable.class),
+    INFESTED_MOSSY_STONE_BRICKS(-1),
+    INFESTED_STONE(-1),
+    INFESTED_STONE_BRICKS(-1),
+    IRON_BARS(-1, Fence.class),
+    IRON_BLOCK(-1),
+    IRON_DOOR(-1, Door.class),
+    IRON_ORE(-1),
+    IRON_TRAPDOOR(-1, TrapDoor.class),
+    JACK_O_LANTERN(-1, Directional.class),
+    JIGSAW(-1, Jigsaw.class),
+    JUKEBOX(-1, Jukebox.class),
+    JUNGLE_BUTTON(-1, Switch.class),
+    JUNGLE_DOOR(-1, Door.class),
+    JUNGLE_FENCE(-1, Fence.class),
+    JUNGLE_FENCE_GATE(-1, Gate.class),
+    JUNGLE_HANGING_SIGN(-1, 16, HangingSign.class),
+    JUNGLE_LEAVES(-1, Leaves.class),
+    JUNGLE_LOG(-1, Orientable.class),
+    JUNGLE_PLANKS(-1),
+    JUNGLE_PRESSURE_PLATE(-1, Powerable.class),
+    JUNGLE_SAPLING(-1, Sapling.class),
+    JUNGLE_SIGN(-1, 16, Sign.class),
+    JUNGLE_SLAB(-1, Slab.class),
+    JUNGLE_STAIRS(-1, Stairs.class),
+    JUNGLE_TRAPDOOR(-1, TrapDoor.class),
+    JUNGLE_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    JUNGLE_WALL_SIGN(-1, 16, WallSign.class),
+    JUNGLE_WOOD(-1, Orientable.class),
+    KELP(-1, Ageable.class),
+    KELP_PLANT(-1),
+    LADDER(-1, Ladder.class),
+    LANTERN(-1, Lantern.class),
+    LAPIS_BLOCK(-1),
+    LAPIS_ORE(-1),
+    LARGE_AMETHYST_BUD(-1, AmethystCluster.class),
+    LARGE_FERN(-1, Bisected.class),
+    LAVA(-1, Levelled.class),
+    LAVA_CAULDRON(-1),
+    LECTERN(-1, Lectern.class),
+    LEVER(-1, Switch.class),
+    LIGHT(-1, Light.class),
+    LIGHT_BLUE_BANNER(-1, 16, Rotatable.class),
+    LIGHT_BLUE_BED(-1, 1, Bed.class),
+    LIGHT_BLUE_CANDLE(-1, Candle.class),
+    LIGHT_BLUE_CANDLE_CAKE(-1, Lightable.class),
+    LIGHT_BLUE_CARPET(-1),
+    LIGHT_BLUE_CONCRETE(-1),
+    LIGHT_BLUE_CONCRETE_POWDER(-1),
+    LIGHT_BLUE_GLAZED_TERRACOTTA(-1, Directional.class),
+    LIGHT_BLUE_SHULKER_BOX(-1, 1, Directional.class),
+    LIGHT_BLUE_STAINED_GLASS(-1),
+    LIGHT_BLUE_STAINED_GLASS_PANE(-1, GlassPane.class),
+    LIGHT_BLUE_TERRACOTTA(-1),
+    LIGHT_BLUE_WALL_BANNER(-1, Directional.class),
+    LIGHT_BLUE_WOOL(-1),
+    LIGHT_GRAY_BANNER(-1, 16, Rotatable.class),
+    LIGHT_GRAY_BED(-1, 1, Bed.class),
+    LIGHT_GRAY_CANDLE(-1, Candle.class),
+    LIGHT_GRAY_CANDLE_CAKE(-1, Lightable.class),
+    LIGHT_GRAY_CARPET(-1),
+    LIGHT_GRAY_CONCRETE(-1),
+    LIGHT_GRAY_CONCRETE_POWDER(-1),
+    LIGHT_GRAY_GLAZED_TERRACOTTA(-1, Directional.class),
+    LIGHT_GRAY_SHULKER_BOX(-1, 1, Directional.class),
+    LIGHT_GRAY_STAINED_GLASS(-1),
+    LIGHT_GRAY_STAINED_GLASS_PANE(-1, GlassPane.class),
+    LIGHT_GRAY_TERRACOTTA(-1),
+    LIGHT_GRAY_WALL_BANNER(-1, Directional.class),
+    LIGHT_GRAY_WOOL(-1),
+    LIGHT_WEIGHTED_PRESSURE_PLATE(-1, AnaloguePowerable.class),
+    LIGHTNING_ROD(-1, LightningRod.class),
+    LILAC(-1, Bisected.class),
+    LILY_OF_THE_VALLEY(-1),
+    LILY_PAD(-1),
+    LIME_BANNER(-1, 16, Rotatable.class),
+    LIME_BED(-1, 1, Bed.class),
+    LIME_CANDLE(-1, Candle.class),
+    LIME_CANDLE_CAKE(-1, Lightable.class),
+    LIME_CARPET(-1),
+    LIME_CONCRETE(-1),
+    LIME_CONCRETE_POWDER(-1),
+    LIME_GLAZED_TERRACOTTA(-1, Directional.class),
+    LIME_SHULKER_BOX(-1, 1, Directional.class),
+    LIME_STAINED_GLASS(-1),
+    LIME_STAINED_GLASS_PANE(-1, GlassPane.class),
+    LIME_TERRACOTTA(-1),
+    LIME_WALL_BANNER(-1, Directional.class),
+    LIME_WOOL(-1),
+    LODESTONE(-1),
+    LOOM(-1, Directional.class),
+    MAGENTA_BANNER(-1, 16, Rotatable.class),
+    MAGENTA_BED(-1, 1, Bed.class),
+    MAGENTA_CANDLE(-1, Candle.class),
+    MAGENTA_CANDLE_CAKE(-1, Lightable.class),
+    MAGENTA_CARPET(-1),
+    MAGENTA_CONCRETE(-1),
+    MAGENTA_CONCRETE_POWDER(-1),
+    MAGENTA_GLAZED_TERRACOTTA(-1, Directional.class),
+    MAGENTA_SHULKER_BOX(-1, 1, Directional.class),
+    MAGENTA_STAINED_GLASS(-1),
+    MAGENTA_STAINED_GLASS_PANE(-1, GlassPane.class),
+    MAGENTA_TERRACOTTA(-1),
+    MAGENTA_WALL_BANNER(-1, Directional.class),
+    MAGENTA_WOOL(-1),
+    MAGMA_BLOCK(-1),
+    MANGROVE_BUTTON(-1, Switch.class),
+    MANGROVE_DOOR(-1, Door.class),
+    MANGROVE_FENCE(-1, Fence.class),
+    MANGROVE_FENCE_GATE(-1, Gate.class),
+    MANGROVE_HANGING_SIGN(-1, 16, HangingSign.class),
+    MANGROVE_LEAVES(-1, Leaves.class),
+    MANGROVE_LOG(-1, Orientable.class),
+    MANGROVE_PLANKS(-1),
+    MANGROVE_PRESSURE_PLATE(-1, Powerable.class),
+    MANGROVE_PROPAGULE(-1, MangrovePropagule.class),
+    MANGROVE_ROOTS(-1, Waterlogged.class),
+    MANGROVE_SIGN(-1, 16, Sign.class),
+    MANGROVE_SLAB(-1, Slab.class),
+    MANGROVE_STAIRS(-1, Stairs.class),
+    MANGROVE_TRAPDOOR(-1, TrapDoor.class),
+    MANGROVE_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    MANGROVE_WALL_SIGN(-1, 16, WallSign.class),
+    MANGROVE_WOOD(-1, Orientable.class),
+    MEDIUM_AMETHYST_BUD(-1, AmethystCluster.class),
+    MELON(-1),
+    MELON_STEM(-1, Ageable.class),
+    MOSS_BLOCK(-1),
+    MOSS_CARPET(-1),
+    MOSSY_COBBLESTONE(-1),
+    MOSSY_COBBLESTONE_SLAB(-1, Slab.class),
+    MOSSY_COBBLESTONE_STAIRS(-1, Stairs.class),
+    MOSSY_COBBLESTONE_WALL(-1, Wall.class),
+    MOSSY_STONE_BRICK_SLAB(-1, Slab.class),
+    MOSSY_STONE_BRICK_STAIRS(-1, Stairs.class),
+    MOSSY_STONE_BRICK_WALL(-1, Wall.class),
+    MOSSY_STONE_BRICKS(-1),
+    MOVING_PISTON(-1, TechnicalPiston.class),
+    MUD(-1),
+    MUD_BRICK_SLAB(-1, Slab.class),
+    MUD_BRICK_STAIRS(-1, Stairs.class),
+    MUD_BRICK_WALL(-1, Wall.class),
+    MUD_BRICKS(-1),
+    MUDDY_MANGROVE_ROOTS(-1, Orientable.class),
+    MUSHROOM_STEM(-1, MultipleFacing.class),
+    MYCELIUM(-1, Snowable.class),
+    NETHER_BRICK_FENCE(-1, Fence.class),
+    NETHER_BRICK_SLAB(-1, Slab.class),
+    NETHER_BRICK_STAIRS(-1, Stairs.class),
+    NETHER_BRICK_WALL(-1, Wall.class),
+    NETHER_BRICKS(-1),
+    NETHER_GOLD_ORE(-1),
+    NETHER_PORTAL(-1, Orientable.class),
+    NETHER_QUARTZ_ORE(-1),
+    NETHER_SPROUTS(-1),
+    NETHER_WART(-1, Ageable.class),
+    NETHER_WART_BLOCK(-1),
+    NETHERITE_BLOCK(-1),
+    NETHERRACK(-1),
+    NOTE_BLOCK(-1, NoteBlock.class),
+    OAK_BUTTON(-1, Switch.class),
+    OAK_DOOR(-1, Door.class),
+    OAK_FENCE(-1, Fence.class),
+    OAK_FENCE_GATE(-1, Gate.class),
+    OAK_HANGING_SIGN(-1, 16, HangingSign.class),
+    OAK_LEAVES(-1, Leaves.class),
+    OAK_LOG(-1, Orientable.class),
+    OAK_PLANKS(-1),
+    OAK_PRESSURE_PLATE(-1, Powerable.class),
+    OAK_SAPLING(-1, Sapling.class),
+    OAK_SIGN(-1, 16, Sign.class),
+    OAK_SLAB(-1, Slab.class),
+    OAK_STAIRS(-1, Stairs.class),
+    OAK_TRAPDOOR(-1, TrapDoor.class),
+    OAK_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    OAK_WALL_SIGN(-1, 16, WallSign.class),
+    OAK_WOOD(-1, Orientable.class),
+    OBSERVER(-1, Observer.class),
+    OBSIDIAN(-1),
+    OCHRE_FROGLIGHT(-1, Orientable.class),
+    OPEN_EYEBLOSSOM(-1),
+    ORANGE_BANNER(-1, 16, Rotatable.class),
+    ORANGE_BED(-1, 1, Bed.class),
+    ORANGE_CANDLE(-1, Candle.class),
+    ORANGE_CANDLE_CAKE(-1, Lightable.class),
+    ORANGE_CARPET(-1),
+    ORANGE_CONCRETE(-1),
+    ORANGE_CONCRETE_POWDER(-1),
+    ORANGE_GLAZED_TERRACOTTA(-1, Directional.class),
+    ORANGE_SHULKER_BOX(-1, 1, Directional.class),
+    ORANGE_STAINED_GLASS(-1),
+    ORANGE_STAINED_GLASS_PANE(-1, GlassPane.class),
+    ORANGE_TERRACOTTA(-1),
+    ORANGE_TULIP(-1),
+    ORANGE_WALL_BANNER(-1, Directional.class),
+    ORANGE_WOOL(-1),
+    OXEYE_DAISY(-1),
+    OXIDIZED_CHISELED_COPPER(-1),
+    OXIDIZED_COPPER(-1),
+    OXIDIZED_COPPER_BULB(-1, CopperBulb.class),
+    OXIDIZED_COPPER_DOOR(-1, Door.class),
+    OXIDIZED_COPPER_GRATE(-1, Waterlogged.class),
+    OXIDIZED_COPPER_TRAPDOOR(-1, TrapDoor.class),
+    OXIDIZED_CUT_COPPER(-1),
+    OXIDIZED_CUT_COPPER_SLAB(-1, Slab.class),
+    OXIDIZED_CUT_COPPER_STAIRS(-1, Stairs.class),
+    PACKED_ICE(-1),
+    PACKED_MUD(-1),
+    PALE_HANGING_MOSS(-1, HangingMoss.class),
+    PALE_MOSS_BLOCK(-1),
+    PALE_MOSS_CARPET(-1, MossyCarpet.class),
+    PALE_OAK_BUTTON(-1, Switch.class),
+    PALE_OAK_DOOR(-1, Door.class),
+    PALE_OAK_FENCE(-1, Fence.class),
+    PALE_OAK_FENCE_GATE(-1, Gate.class),
+    PALE_OAK_HANGING_SIGN(-1, 16, HangingSign.class),
+    PALE_OAK_LEAVES(-1, Leaves.class),
+    PALE_OAK_LOG(-1, Orientable.class),
+    PALE_OAK_PLANKS(-1),
+    PALE_OAK_PRESSURE_PLATE(-1, Powerable.class),
+    PALE_OAK_SAPLING(-1, Sapling.class),
+    PALE_OAK_SIGN(-1, 16, Sign.class),
+    PALE_OAK_SLAB(-1, Slab.class),
+    PALE_OAK_STAIRS(-1, Stairs.class),
+    PALE_OAK_TRAPDOOR(-1, TrapDoor.class),
+    PALE_OAK_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    PALE_OAK_WALL_SIGN(-1, 16, WallSign.class),
+    PALE_OAK_WOOD(-1, Orientable.class),
+    PEARLESCENT_FROGLIGHT(-1, Orientable.class),
+    PEONY(-1, Bisected.class),
+    PETRIFIED_OAK_SLAB(-1, Slab.class),
+    PIGLIN_HEAD(-1, Skull.class),
+    PIGLIN_WALL_HEAD(-1, WallSkull.class),
+    PINK_BANNER(-1, 16, Rotatable.class),
+    PINK_BED(-1, 1, Bed.class),
+    PINK_CANDLE(-1, Candle.class),
+    PINK_CANDLE_CAKE(-1, Lightable.class),
+    PINK_CARPET(-1),
+    PINK_CONCRETE(-1),
+    PINK_CONCRETE_POWDER(-1),
+    PINK_GLAZED_TERRACOTTA(-1, Directional.class),
+    PINK_PETALS(-1, PinkPetals.class),
+    PINK_SHULKER_BOX(-1, 1, Directional.class),
+    PINK_STAINED_GLASS(-1),
+    PINK_STAINED_GLASS_PANE(-1, GlassPane.class),
+    PINK_TERRACOTTA(-1),
+    PINK_TULIP(-1),
+    PINK_WALL_BANNER(-1, Directional.class),
+    PINK_WOOL(-1),
+    PISTON(-1, Piston.class),
+    PISTON_HEAD(-1, PistonHead.class),
+    PITCHER_CROP(-1, PitcherCrop.class),
+    PITCHER_PLANT(-1, Bisected.class),
+    PLAYER_HEAD(-1, Skull.class),
+    PLAYER_WALL_HEAD(-1, WallSkull.class),
+    PODZOL(-1, Snowable.class),
+    POINTED_DRIPSTONE(-1, PointedDripstone.class),
+    POLISHED_ANDESITE(-1),
+    POLISHED_ANDESITE_SLAB(-1, Slab.class),
+    POLISHED_ANDESITE_STAIRS(-1, Stairs.class),
+    POLISHED_BASALT(-1, Orientable.class),
+    POLISHED_BLACKSTONE(-1),
+    POLISHED_BLACKSTONE_BRICK_SLAB(-1, Slab.class),
+    POLISHED_BLACKSTONE_BRICK_STAIRS(-1, Stairs.class),
+    POLISHED_BLACKSTONE_BRICK_WALL(-1, Wall.class),
+    POLISHED_BLACKSTONE_BRICKS(-1),
+    POLISHED_BLACKSTONE_BUTTON(-1, Switch.class),
+    POLISHED_BLACKSTONE_PRESSURE_PLATE(-1, Powerable.class),
+    POLISHED_BLACKSTONE_SLAB(-1, Slab.class),
+    POLISHED_BLACKSTONE_STAIRS(-1, Stairs.class),
+    POLISHED_BLACKSTONE_WALL(-1, Wall.class),
+    POLISHED_DEEPSLATE(-1),
+    POLISHED_DEEPSLATE_SLAB(-1, Slab.class),
+    POLISHED_DEEPSLATE_STAIRS(-1, Stairs.class),
+    POLISHED_DEEPSLATE_WALL(-1, Wall.class),
+    POLISHED_DIORITE(-1),
+    POLISHED_DIORITE_SLAB(-1, Slab.class),
+    POLISHED_DIORITE_STAIRS(-1, Stairs.class),
+    POLISHED_GRANITE(-1),
+    POLISHED_GRANITE_SLAB(-1, Slab.class),
+    POLISHED_GRANITE_STAIRS(-1, Stairs.class),
+    POLISHED_TUFF(-1),
+    POLISHED_TUFF_SLAB(-1, Slab.class),
+    POLISHED_TUFF_STAIRS(-1, Stairs.class),
+    POLISHED_TUFF_WALL(-1, Wall.class),
+    POPPY(-1),
+    POTATOES(-1, Ageable.class),
+    POTTED_ACACIA_SAPLING(-1),
+    POTTED_ALLIUM(-1),
+    POTTED_AZALEA_BUSH(-1),
+    POTTED_AZURE_BLUET(-1),
+    POTTED_BAMBOO(-1),
+    POTTED_BIRCH_SAPLING(-1),
+    POTTED_BLUE_ORCHID(-1),
+    POTTED_BROWN_MUSHROOM(-1),
+    POTTED_CACTUS(-1),
+    POTTED_CHERRY_SAPLING(-1),
+    POTTED_CLOSED_EYEBLOSSOM(-1),
+    POTTED_CORNFLOWER(-1),
+    POTTED_CRIMSON_FUNGUS(-1),
+    POTTED_CRIMSON_ROOTS(-1),
+    POTTED_DANDELION(-1),
+    POTTED_DARK_OAK_SAPLING(-1),
+    POTTED_DEAD_BUSH(-1),
+    POTTED_FERN(-1),
+    POTTED_FLOWERING_AZALEA_BUSH(-1),
+    POTTED_JUNGLE_SAPLING(-1),
+    POTTED_LILY_OF_THE_VALLEY(-1),
+    POTTED_MANGROVE_PROPAGULE(-1),
+    POTTED_OAK_SAPLING(-1),
+    POTTED_OPEN_EYEBLOSSOM(-1),
+    POTTED_ORANGE_TULIP(-1),
+    POTTED_OXEYE_DAISY(-1),
+    POTTED_PALE_OAK_SAPLING(-1),
+    POTTED_PINK_TULIP(-1),
+    POTTED_POPPY(-1),
+    POTTED_RED_MUSHROOM(-1),
+    POTTED_RED_TULIP(-1),
+    POTTED_SPRUCE_SAPLING(-1),
+    POTTED_TORCHFLOWER(-1),
+    POTTED_WARPED_FUNGUS(-1),
+    POTTED_WARPED_ROOTS(-1),
+    POTTED_WHITE_TULIP(-1),
+    POTTED_WITHER_ROSE(-1),
+    POWDER_SNOW(-1),
+    POWDER_SNOW_CAULDRON(-1, Levelled.class),
+    POWERED_RAIL(-1, RedstoneRail.class),
+    PRISMARINE(-1),
+    PRISMARINE_BRICK_SLAB(-1, Slab.class),
+    PRISMARINE_BRICK_STAIRS(-1, Stairs.class),
+    PRISMARINE_BRICKS(-1),
+    PRISMARINE_SLAB(-1, Slab.class),
+    PRISMARINE_STAIRS(-1, Stairs.class),
+    PRISMARINE_WALL(-1, Wall.class),
+    PUMPKIN(-1),
+    PUMPKIN_STEM(-1, Ageable.class),
+    PURPLE_BANNER(-1, 16, Rotatable.class),
+    PURPLE_BED(-1, 1, Bed.class),
+    PURPLE_CANDLE(-1, Candle.class),
+    PURPLE_CANDLE_CAKE(-1, Lightable.class),
+    PURPLE_CARPET(-1),
+    PURPLE_CONCRETE(-1),
+    PURPLE_CONCRETE_POWDER(-1),
+    PURPLE_GLAZED_TERRACOTTA(-1, Directional.class),
+    PURPLE_SHULKER_BOX(-1, 1, Directional.class),
+    PURPLE_STAINED_GLASS(-1),
+    PURPLE_STAINED_GLASS_PANE(-1, GlassPane.class),
+    PURPLE_TERRACOTTA(-1),
+    PURPLE_WALL_BANNER(-1, Directional.class),
+    PURPLE_WOOL(-1),
+    PURPUR_BLOCK(-1),
+    PURPUR_PILLAR(-1, Orientable.class),
+    PURPUR_SLAB(-1, Slab.class),
+    PURPUR_STAIRS(-1, Stairs.class),
+    QUARTZ_BLOCK(-1),
+    QUARTZ_BRICKS(-1),
+    QUARTZ_PILLAR(-1, Orientable.class),
+    QUARTZ_SLAB(-1, Slab.class),
+    QUARTZ_STAIRS(-1, Stairs.class),
+    RAIL(-1, Rail.class),
+    RAW_COPPER_BLOCK(-1),
+    RAW_GOLD_BLOCK(-1),
+    RAW_IRON_BLOCK(-1),
+    RED_BANNER(-1, 16, Rotatable.class),
+    RED_BED(-1, 1, Bed.class),
+    RED_CANDLE(-1, Candle.class),
+    RED_CANDLE_CAKE(-1, Lightable.class),
+    RED_CARPET(-1),
+    RED_CONCRETE(-1),
+    RED_CONCRETE_POWDER(-1),
+    RED_GLAZED_TERRACOTTA(-1, Directional.class),
+    RED_MUSHROOM(-1),
+    RED_MUSHROOM_BLOCK(-1, MultipleFacing.class),
+    RED_NETHER_BRICK_SLAB(-1, Slab.class),
+    RED_NETHER_BRICK_STAIRS(-1, Stairs.class),
+    RED_NETHER_BRICK_WALL(-1, Wall.class),
+    RED_NETHER_BRICKS(-1),
+    RED_SAND(-1),
+    RED_SANDSTONE(-1),
+    RED_SANDSTONE_SLAB(-1, Slab.class),
+    RED_SANDSTONE_STAIRS(-1, Stairs.class),
+    RED_SANDSTONE_WALL(-1, Wall.class),
+    RED_SHULKER_BOX(-1, 1, Directional.class),
+    RED_STAINED_GLASS(-1),
+    RED_STAINED_GLASS_PANE(-1, GlassPane.class),
+    RED_TERRACOTTA(-1),
+    RED_TULIP(-1),
+    RED_WALL_BANNER(-1, Directional.class),
+    RED_WOOL(-1),
+    REDSTONE_BLOCK(-1),
+    REDSTONE_LAMP(-1, Lightable.class),
+    REDSTONE_ORE(-1, Lightable.class),
+    REDSTONE_TORCH(-1, Lightable.class),
+    REDSTONE_WALL_TORCH(-1, RedstoneWallTorch.class),
+    REDSTONE_WIRE(-1, RedstoneWire.class),
+    REINFORCED_DEEPSLATE(-1),
+    REPEATER(-1, Repeater.class),
+    REPEATING_COMMAND_BLOCK(-1, CommandBlock.class),
+    RESIN_BLOCK(-1),
+    RESIN_BRICK_SLAB(-1, Slab.class),
+    RESIN_BRICK_STAIRS(-1, Stairs.class),
+    RESIN_BRICK_WALL(-1, Wall.class),
+    RESIN_BRICKS(-1),
+    RESIN_CLUMP(-1, ResinClump.class),
+    RESPAWN_ANCHOR(-1, RespawnAnchor.class),
+    ROOTED_DIRT(-1),
+    ROSE_BUSH(-1, Bisected.class),
+    SAND(-1),
+    SANDSTONE(-1),
+    SANDSTONE_SLAB(-1, Slab.class),
+    SANDSTONE_STAIRS(-1, Stairs.class),
+    SANDSTONE_WALL(-1, Wall.class),
+    SCAFFOLDING(-1, Scaffolding.class),
+    SCULK(-1),
+    SCULK_CATALYST(-1, SculkCatalyst.class),
+    SCULK_SENSOR(-1, SculkSensor.class),
+    SCULK_SHRIEKER(-1, SculkShrieker.class),
+    SCULK_VEIN(-1, SculkVein.class),
+    SEA_LANTERN(-1),
+    SEA_PICKLE(-1, SeaPickle.class),
+    SEAGRASS(-1),
+    SHORT_GRASS(-1),
+    SHROOMLIGHT(-1),
+    SHULKER_BOX(-1, 1, Directional.class),
+    SKELETON_SKULL(-1, Skull.class),
+    SKELETON_WALL_SKULL(-1, WallSkull.class),
+    SLIME_BLOCK(-1),
+    SMALL_AMETHYST_BUD(-1, AmethystCluster.class),
+    SMALL_DRIPLEAF(-1, SmallDripleaf.class),
+    SMITHING_TABLE(-1),
+    SMOKER(-1, Furnace.class),
+    SMOOTH_BASALT(-1),
+    SMOOTH_QUARTZ(-1),
+    SMOOTH_QUARTZ_SLAB(-1, Slab.class),
+    SMOOTH_QUARTZ_STAIRS(-1, Stairs.class),
+    SMOOTH_RED_SANDSTONE(-1),
+    SMOOTH_RED_SANDSTONE_SLAB(-1, Slab.class),
+    SMOOTH_RED_SANDSTONE_STAIRS(-1, Stairs.class),
+    SMOOTH_SANDSTONE(-1),
+    SMOOTH_SANDSTONE_SLAB(-1, Slab.class),
+    SMOOTH_SANDSTONE_STAIRS(-1, Stairs.class),
+    SMOOTH_STONE(-1),
+    SMOOTH_STONE_SLAB(-1, Slab.class),
+    SNIFFER_EGG(-1, Hatchable.class),
+    SNOW(-1, Snow.class),
+    SNOW_BLOCK(-1),
+    SOUL_CAMPFIRE(-1, Campfire.class),
+    SOUL_FIRE(-1),
+    SOUL_LANTERN(-1, Lantern.class),
+    SOUL_SAND(-1),
+    SOUL_SOIL(-1),
+    SOUL_TORCH(-1),
+    SOUL_WALL_TORCH(-1, Directional.class),
+    SPAWNER(-1),
+    SPONGE(-1),
+    SPORE_BLOSSOM(-1),
+    SPRUCE_BUTTON(-1, Switch.class),
+    SPRUCE_DOOR(-1, Door.class),
+    SPRUCE_FENCE(-1, Fence.class),
+    SPRUCE_FENCE_GATE(-1, Gate.class),
+    SPRUCE_HANGING_SIGN(-1, 16, HangingSign.class),
+    SPRUCE_LEAVES(-1, Leaves.class),
+    SPRUCE_LOG(-1, Orientable.class),
+    SPRUCE_PLANKS(-1),
+    SPRUCE_PRESSURE_PLATE(-1, Powerable.class),
+    SPRUCE_SAPLING(-1, Sapling.class),
+    SPRUCE_SIGN(-1, 16, Sign.class),
+    SPRUCE_SLAB(-1, Slab.class),
+    SPRUCE_STAIRS(-1, Stairs.class),
+    SPRUCE_TRAPDOOR(-1, TrapDoor.class),
+    SPRUCE_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    SPRUCE_WALL_SIGN(-1, 16, WallSign.class),
+    SPRUCE_WOOD(-1, Orientable.class),
+    STICKY_PISTON(-1, Piston.class),
+    STONE(-1),
+    STONE_BRICK_SLAB(-1, Slab.class),
+    STONE_BRICK_STAIRS(-1, Stairs.class),
+    STONE_BRICK_WALL(-1, Wall.class),
+    STONE_BRICKS(-1),
+    STONE_BUTTON(-1, Switch.class),
+    STONE_PRESSURE_PLATE(-1, Powerable.class),
+    STONE_SLAB(-1, Slab.class),
+    STONE_STAIRS(-1, Stairs.class),
+    STONECUTTER(-1, Directional.class),
+    STRIPPED_ACACIA_LOG(-1, Orientable.class),
+    STRIPPED_ACACIA_WOOD(-1, Orientable.class),
+    STRIPPED_BAMBOO_BLOCK(-1, Orientable.class),
+    STRIPPED_BIRCH_LOG(-1, Orientable.class),
+    STRIPPED_BIRCH_WOOD(-1, Orientable.class),
+    STRIPPED_CHERRY_LOG(-1, Orientable.class),
+    STRIPPED_CHERRY_WOOD(-1, Orientable.class),
+    STRIPPED_CRIMSON_HYPHAE(-1, Orientable.class),
+    STRIPPED_CRIMSON_STEM(-1, Orientable.class),
+    STRIPPED_DARK_OAK_LOG(-1, Orientable.class),
+    STRIPPED_DARK_OAK_WOOD(-1, Orientable.class),
+    STRIPPED_JUNGLE_LOG(-1, Orientable.class),
+    STRIPPED_JUNGLE_WOOD(-1, Orientable.class),
+    STRIPPED_MANGROVE_LOG(-1, Orientable.class),
+    STRIPPED_MANGROVE_WOOD(-1, Orientable.class),
+    STRIPPED_OAK_LOG(-1, Orientable.class),
+    STRIPPED_OAK_WOOD(-1, Orientable.class),
+    STRIPPED_PALE_OAK_LOG(-1, Orientable.class),
+    STRIPPED_PALE_OAK_WOOD(-1, Orientable.class),
+    STRIPPED_SPRUCE_LOG(-1, Orientable.class),
+    STRIPPED_SPRUCE_WOOD(-1, Orientable.class),
+    STRIPPED_WARPED_HYPHAE(-1, Orientable.class),
+    STRIPPED_WARPED_STEM(-1, Orientable.class),
+    STRUCTURE_BLOCK(-1, StructureBlock.class),
+    STRUCTURE_VOID(-1),
+    SUGAR_CANE(-1, Ageable.class),
+    SUNFLOWER(-1, Bisected.class),
+    SUSPICIOUS_GRAVEL(-1, Brushable.class),
+    SUSPICIOUS_SAND(-1, Brushable.class),
+    SWEET_BERRY_BUSH(-1, Ageable.class),
+    TALL_GRASS(-1, Bisected.class),
+    TALL_SEAGRASS(-1, Bisected.class),
+    TARGET(-1, AnaloguePowerable.class),
+    TERRACOTTA(-1),
+    TINTED_GLASS(-1),
+    TNT(-1, TNT.class),
+    TORCH(-1),
+    TORCHFLOWER(-1),
+    TORCHFLOWER_CROP(-1, Ageable.class),
+    TRAPPED_CHEST(-1, Chest.class),
+    TRIAL_SPAWNER(-1, TrialSpawner.class),
+    TRIPWIRE(-1, Tripwire.class),
+    TRIPWIRE_HOOK(-1, TripwireHook.class),
+    TUBE_CORAL(-1, Waterlogged.class),
+    TUBE_CORAL_BLOCK(-1),
+    TUBE_CORAL_FAN(-1, Waterlogged.class),
+    TUBE_CORAL_WALL_FAN(-1, CoralWallFan.class),
+    TUFF(-1),
+    TUFF_BRICK_SLAB(-1, Slab.class),
+    TUFF_BRICK_STAIRS(-1, Stairs.class),
+    TUFF_BRICK_WALL(-1, Wall.class),
+    TUFF_BRICKS(-1),
+    TUFF_SLAB(-1, Slab.class),
+    TUFF_STAIRS(-1, Stairs.class),
+    TUFF_WALL(-1, Wall.class),
+    TURTLE_EGG(-1, TurtleEgg.class),
+    TWISTING_VINES(-1, Ageable.class),
+    TWISTING_VINES_PLANT(-1),
+    VAULT(-1, Vault.class),
+    VERDANT_FROGLIGHT(-1, Orientable.class),
+    VINE(-1, MultipleFacing.class),
+    VOID_AIR(-1),
+    WALL_TORCH(-1, Directional.class),
+    WARPED_BUTTON(-1, Switch.class),
+    WARPED_DOOR(-1, Door.class),
+    WARPED_FENCE(-1, Fence.class),
+    WARPED_FENCE_GATE(-1, Gate.class),
+    WARPED_FUNGUS(-1),
+    WARPED_HANGING_SIGN(-1, 16, HangingSign.class),
+    WARPED_HYPHAE(-1, Orientable.class),
+    WARPED_NYLIUM(-1),
+    WARPED_PLANKS(-1),
+    WARPED_PRESSURE_PLATE(-1, Powerable.class),
+    WARPED_ROOTS(-1),
+    WARPED_SIGN(-1, 16, Sign.class),
+    WARPED_SLAB(-1, Slab.class),
+    WARPED_STAIRS(-1, Stairs.class),
+    WARPED_STEM(-1, Orientable.class),
+    WARPED_TRAPDOOR(-1, TrapDoor.class),
+    WARPED_WALL_HANGING_SIGN(-1, WallHangingSign.class),
+    WARPED_WALL_SIGN(-1, 16, WallSign.class),
+    WARPED_WART_BLOCK(-1),
+    WATER(-1, Levelled.class),
+    WATER_CAULDRON(-1, Levelled.class),
+    WAXED_CHISELED_COPPER(-1),
+    WAXED_COPPER_BLOCK(-1),
+    WAXED_COPPER_BULB(-1, CopperBulb.class),
+    WAXED_COPPER_DOOR(-1, Door.class),
+    WAXED_COPPER_GRATE(-1, Waterlogged.class),
+    WAXED_COPPER_TRAPDOOR(-1, TrapDoor.class),
+    WAXED_CUT_COPPER(-1),
+    WAXED_CUT_COPPER_SLAB(-1, Slab.class),
+    WAXED_CUT_COPPER_STAIRS(-1, Stairs.class),
+    WAXED_EXPOSED_CHISELED_COPPER(-1),
+    WAXED_EXPOSED_COPPER(-1),
+    WAXED_EXPOSED_COPPER_BULB(-1, CopperBulb.class),
+    WAXED_EXPOSED_COPPER_DOOR(-1, Door.class),
+    WAXED_EXPOSED_COPPER_GRATE(-1, Waterlogged.class),
+    WAXED_EXPOSED_COPPER_TRAPDOOR(-1, TrapDoor.class),
+    WAXED_EXPOSED_CUT_COPPER(-1),
+    WAXED_EXPOSED_CUT_COPPER_SLAB(-1, Slab.class),
+    WAXED_EXPOSED_CUT_COPPER_STAIRS(-1, Stairs.class),
+    WAXED_OXIDIZED_CHISELED_COPPER(-1),
+    WAXED_OXIDIZED_COPPER(-1),
+    WAXED_OXIDIZED_COPPER_BULB(-1, CopperBulb.class),
+    WAXED_OXIDIZED_COPPER_DOOR(-1, Door.class),
+    WAXED_OXIDIZED_COPPER_GRATE(-1, Waterlogged.class),
+    WAXED_OXIDIZED_COPPER_TRAPDOOR(-1, TrapDoor.class),
+    WAXED_OXIDIZED_CUT_COPPER(-1),
+    WAXED_OXIDIZED_CUT_COPPER_SLAB(-1, Slab.class),
+    WAXED_OXIDIZED_CUT_COPPER_STAIRS(-1, Stairs.class),
+    WAXED_WEATHERED_CHISELED_COPPER(-1),
+    WAXED_WEATHERED_COPPER(-1),
+    WAXED_WEATHERED_COPPER_BULB(-1, CopperBulb.class),
+    WAXED_WEATHERED_COPPER_DOOR(-1, Door.class),
+    WAXED_WEATHERED_COPPER_GRATE(-1, Waterlogged.class),
+    WAXED_WEATHERED_COPPER_TRAPDOOR(-1, TrapDoor.class),
+    WAXED_WEATHERED_CUT_COPPER(-1),
+    WAXED_WEATHERED_CUT_COPPER_SLAB(-1, Slab.class),
+    WAXED_WEATHERED_CUT_COPPER_STAIRS(-1, Stairs.class),
+    WEATHERED_CHISELED_COPPER(-1),
+    WEATHERED_COPPER(-1),
+    WEATHERED_COPPER_BULB(-1, CopperBulb.class),
+    WEATHERED_COPPER_DOOR(-1, Door.class),
+    WEATHERED_COPPER_GRATE(-1, Waterlogged.class),
+    WEATHERED_COPPER_TRAPDOOR(-1, TrapDoor.class),
+    WEATHERED_CUT_COPPER(-1),
+    WEATHERED_CUT_COPPER_SLAB(-1, Slab.class),
+    WEATHERED_CUT_COPPER_STAIRS(-1, Stairs.class),
+    WEEPING_VINES(-1, Ageable.class),
+    WEEPING_VINES_PLANT(-1),
+    WET_SPONGE(-1),
+    WHEAT(-1, Ageable.class),
+    WHITE_BANNER(-1, 16, Rotatable.class),
+    WHITE_BED(-1, 1, Bed.class),
+    WHITE_CANDLE(-1, Candle.class),
+    WHITE_CANDLE_CAKE(-1, Lightable.class),
+    WHITE_CARPET(-1),
+    WHITE_CONCRETE(-1),
+    WHITE_CONCRETE_POWDER(-1),
+    WHITE_GLAZED_TERRACOTTA(-1, Directional.class),
+    WHITE_SHULKER_BOX(-1, 1, Directional.class),
+    WHITE_STAINED_GLASS(-1),
+    WHITE_STAINED_GLASS_PANE(-1, GlassPane.class),
+    WHITE_TERRACOTTA(-1),
+    WHITE_TULIP(-1),
+    WHITE_WALL_BANNER(-1, Directional.class),
+    WHITE_WOOL(-1),
+    WITHER_ROSE(-1),
+    WITHER_SKELETON_SKULL(-1, Skull.class),
+    WITHER_SKELETON_WALL_SKULL(-1, WallSkull.class),
+    YELLOW_BANNER(-1, 16, Rotatable.class),
+    YELLOW_BED(-1, 1, Bed.class),
+    YELLOW_CANDLE(-1, Candle.class),
+    YELLOW_CANDLE_CAKE(-1, Lightable.class),
+    YELLOW_CARPET(-1),
+    YELLOW_CONCRETE(-1),
+    YELLOW_CONCRETE_POWDER(-1),
+    YELLOW_GLAZED_TERRACOTTA(-1, Directional.class),
+    YELLOW_SHULKER_BOX(-1, 1, Directional.class),
+    YELLOW_STAINED_GLASS(-1),
+    YELLOW_STAINED_GLASS_PANE(-1, GlassPane.class),
+    YELLOW_TERRACOTTA(-1),
+    YELLOW_WALL_BANNER(-1, Directional.class),
+    YELLOW_WOOL(-1),
+    ZOMBIE_HEAD(-1, Skull.class),
+    ZOMBIE_WALL_HEAD(-1, WallSkull.class),
+    // End generate - Blocks
     // ----- Legacy Separator -----
     @Deprecated(since = "1.13")
     LEGACY_AIR(0, 0),
@@ -5174,6 +3043,7 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
         }
         switch (this) {
             //<editor-fold defaultstate="collapsed" desc="isTransparent">
+            // Start generate - Material#isTransparent
             case ACACIA_BUTTON:
             case ACACIA_SAPLING:
             case ACTIVATOR_RAIL:
@@ -5301,6 +3171,7 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
             case YELLOW_CARPET:
             case ZOMBIE_HEAD:
             case ZOMBIE_WALL_HEAD:
+            // End generate - Material#isTransparent
             // ----- Legacy Separator -----
             case LEGACY_AIR:
             case LEGACY_SAPLING:
@@ -5528,75 +3399,10 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
      */
     @NotNull
     public EquipmentSlot getEquipmentSlot() {
-        Preconditions.checkArgument(isItem(), "The Material is not an item!");
-        switch (this) {
-            // <editor-fold defaultstate="collapsed" desc="getEquipmentSlot">
-            case CARVED_PUMPKIN:
-            case CHAINMAIL_HELMET:
-            case CREEPER_HEAD:
-            case DIAMOND_HELMET:
-            case DRAGON_HEAD:
-            case GOLDEN_HELMET:
-            case IRON_HELMET:
-            case LEATHER_HELMET:
-            case NETHERITE_HELMET:
-            case PLAYER_HEAD:
-            case PIGLIN_HEAD:
-            case SKELETON_SKULL:
-            case TURTLE_HELMET:
-            case WITHER_SKELETON_SKULL:
-            case ZOMBIE_HEAD:
-                return EquipmentSlot.HEAD;
-            case CHAINMAIL_CHESTPLATE:
-            case DIAMOND_CHESTPLATE:
-            case ELYTRA:
-            case GOLDEN_CHESTPLATE:
-            case IRON_CHESTPLATE:
-            case LEATHER_CHESTPLATE:
-            case NETHERITE_CHESTPLATE:
-                return EquipmentSlot.CHEST;
-            case CHAINMAIL_LEGGINGS:
-            case DIAMOND_LEGGINGS:
-            case GOLDEN_LEGGINGS:
-            case IRON_LEGGINGS:
-            case LEATHER_LEGGINGS:
-            case NETHERITE_LEGGINGS:
-                return EquipmentSlot.LEGS;
-            case CHAINMAIL_BOOTS:
-            case DIAMOND_BOOTS:
-            case GOLDEN_BOOTS:
-            case IRON_BOOTS:
-            case LEATHER_BOOTS:
-            case NETHERITE_BOOTS:
-                return EquipmentSlot.FEET;
-            case SHIELD:
-                return EquipmentSlot.OFF_HAND;
-            case BLACK_CARPET:
-            case BLUE_CARPET:
-            case BROWN_CARPET:
-            case CYAN_CARPET:
-            case DIAMOND_HORSE_ARMOR:
-            case GOLDEN_HORSE_ARMOR:
-            case GRAY_CARPET:
-            case GREEN_CARPET:
-            case IRON_HORSE_ARMOR:
-            case LEATHER_HORSE_ARMOR:
-            case LIGHT_BLUE_CARPET:
-            case LIGHT_GRAY_CARPET:
-            case LIME_CARPET:
-            case MAGENTA_CARPET:
-            case ORANGE_CARPET:
-            case PINK_CARPET:
-            case PURPLE_CARPET:
-            case RED_CARPET:
-            case WHITE_CARPET:
-            case WOLF_ARMOR:
-            case YELLOW_CARPET:
-                return EquipmentSlot.BODY;
-            default:
-                return EquipmentSlot.HAND;
-            // </editor-fold>
-        }
+        ItemType type = asItemType();
+        Preconditions.checkArgument(type != null, "The Material is not an item!");
+        Equippable equippable = type.getDefaultData(DataComponentTypes.EQUIPPABLE);
+        return equippable == null ? EquipmentSlot.HAND : equippable.slot();
     }
 
     // Paper start - improve default item attribute API
diff --git a/paper-api/src/main/java/org/bukkit/MusicInstrument.java b/paper-api/src/main/java/org/bukkit/MusicInstrument.java
index bfe64b367d..bc36eb879c 100644
--- a/paper-api/src/main/java/org/bukkit/MusicInstrument.java
+++ b/paper-api/src/main/java/org/bukkit/MusicInstrument.java
@@ -10,15 +10,25 @@ import org.jetbrains.annotations.Nullable;
 
 public abstract class MusicInstrument implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - translation keys
 
-    public static final MusicInstrument PONDER_GOAT_HORN = getInstrument("ponder_goat_horn");
-    public static final MusicInstrument SING_GOAT_HORN = getInstrument("sing_goat_horn");
-    public static final MusicInstrument SEEK_GOAT_HORN = getInstrument("seek_goat_horn");
-    public static final MusicInstrument FEEL_GOAT_HORN = getInstrument("feel_goat_horn");
+    // Start generate - MusicInstrument
+    // @GeneratedFrom 1.21.4
     public static final MusicInstrument ADMIRE_GOAT_HORN = getInstrument("admire_goat_horn");
+
     public static final MusicInstrument CALL_GOAT_HORN = getInstrument("call_goat_horn");
-    public static final MusicInstrument YEARN_GOAT_HORN = getInstrument("yearn_goat_horn");
+
     public static final MusicInstrument DREAM_GOAT_HORN = getInstrument("dream_goat_horn");
 
+    public static final MusicInstrument FEEL_GOAT_HORN = getInstrument("feel_goat_horn");
+
+    public static final MusicInstrument PONDER_GOAT_HORN = getInstrument("ponder_goat_horn");
+
+    public static final MusicInstrument SEEK_GOAT_HORN = getInstrument("seek_goat_horn");
+
+    public static final MusicInstrument SING_GOAT_HORN = getInstrument("sing_goat_horn");
+
+    public static final MusicInstrument YEARN_GOAT_HORN = getInstrument("yearn_goat_horn");
+    // End generate - MusicInstrument
+
     /**
      * Returns a {@link MusicInstrument} by a {@link NamespacedKey}.
      *
diff --git a/paper-api/src/main/java/org/bukkit/Registry.java b/paper-api/src/main/java/org/bukkit/Registry.java
index 09d9998772..b958e917c2 100644
--- a/paper-api/src/main/java/org/bukkit/Registry.java
+++ b/paper-api/src/main/java/org/bukkit/Registry.java
@@ -291,10 +291,10 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
      *
      * @see MemoryKey
      */
-    Registry<MemoryKey> MEMORY_MODULE_TYPE = new NotARegistry<>() {
+    Registry<MemoryKey<?>> MEMORY_MODULE_TYPE = new NotARegistry<>() {
 
         @Override
-        public Iterator iterator() {
+        public Iterator<MemoryKey<?>> iterator() {
             return MemoryKey.values().iterator();
         }
 
@@ -304,7 +304,7 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
         }
 
         @Override
-        public @Nullable MemoryKey get(final NamespacedKey key) {
+        public @Nullable MemoryKey<?> get(final NamespacedKey key) {
             return MemoryKey.getByKey(key);
         }
     };
diff --git a/paper-api/src/main/java/org/bukkit/Sound.java b/paper-api/src/main/java/org/bukkit/Sound.java
index e2fb7cfba4..e1d5b2d916 100644
--- a/paper-api/src/main/java/org/bukkit/Sound.java
+++ b/paper-api/src/main/java/org/bukkit/Sound.java
@@ -23,1657 +23,3310 @@ import org.jetbrains.annotations.NotNull;
  */
 public interface Sound extends OldEnum<Sound>, Keyed, net.kyori.adventure.sound.Sound.Type { // Paper - implement Sound.Type
 
+    // Start generate - Sound
+    // @GeneratedFrom 1.21.4
     Sound AMBIENT_BASALT_DELTAS_ADDITIONS = getSound("ambient.basalt_deltas.additions");
+
     Sound AMBIENT_BASALT_DELTAS_LOOP = getSound("ambient.basalt_deltas.loop");
+
     Sound AMBIENT_BASALT_DELTAS_MOOD = getSound("ambient.basalt_deltas.mood");
+
     Sound AMBIENT_CAVE = getSound("ambient.cave");
+
     Sound AMBIENT_CRIMSON_FOREST_ADDITIONS = getSound("ambient.crimson_forest.additions");
+
     Sound AMBIENT_CRIMSON_FOREST_LOOP = getSound("ambient.crimson_forest.loop");
+
     Sound AMBIENT_CRIMSON_FOREST_MOOD = getSound("ambient.crimson_forest.mood");
+
     Sound AMBIENT_NETHER_WASTES_ADDITIONS = getSound("ambient.nether_wastes.additions");
+
     Sound AMBIENT_NETHER_WASTES_LOOP = getSound("ambient.nether_wastes.loop");
+
     Sound AMBIENT_NETHER_WASTES_MOOD = getSound("ambient.nether_wastes.mood");
+
     Sound AMBIENT_SOUL_SAND_VALLEY_ADDITIONS = getSound("ambient.soul_sand_valley.additions");
+
     Sound AMBIENT_SOUL_SAND_VALLEY_LOOP = getSound("ambient.soul_sand_valley.loop");
+
     Sound AMBIENT_SOUL_SAND_VALLEY_MOOD = getSound("ambient.soul_sand_valley.mood");
+
     Sound AMBIENT_UNDERWATER_ENTER = getSound("ambient.underwater.enter");
+
     Sound AMBIENT_UNDERWATER_EXIT = getSound("ambient.underwater.exit");
+
     Sound AMBIENT_UNDERWATER_LOOP = getSound("ambient.underwater.loop");
+
     Sound AMBIENT_UNDERWATER_LOOP_ADDITIONS = getSound("ambient.underwater.loop.additions");
+
     Sound AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE = getSound("ambient.underwater.loop.additions.rare");
+
     Sound AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE = getSound("ambient.underwater.loop.additions.ultra_rare");
+
     Sound AMBIENT_WARPED_FOREST_ADDITIONS = getSound("ambient.warped_forest.additions");
+
     Sound AMBIENT_WARPED_FOREST_LOOP = getSound("ambient.warped_forest.loop");
+
     Sound AMBIENT_WARPED_FOREST_MOOD = getSound("ambient.warped_forest.mood");
+
     Sound BLOCK_AMETHYST_BLOCK_BREAK = getSound("block.amethyst_block.break");
+
     Sound BLOCK_AMETHYST_BLOCK_CHIME = getSound("block.amethyst_block.chime");
+
     Sound BLOCK_AMETHYST_BLOCK_FALL = getSound("block.amethyst_block.fall");
+
     Sound BLOCK_AMETHYST_BLOCK_HIT = getSound("block.amethyst_block.hit");
+
     Sound BLOCK_AMETHYST_BLOCK_PLACE = getSound("block.amethyst_block.place");
+
     Sound BLOCK_AMETHYST_BLOCK_RESONATE = getSound("block.amethyst_block.resonate");
+
     Sound BLOCK_AMETHYST_BLOCK_STEP = getSound("block.amethyst_block.step");
+
     Sound BLOCK_AMETHYST_CLUSTER_BREAK = getSound("block.amethyst_cluster.break");
+
     Sound BLOCK_AMETHYST_CLUSTER_FALL = getSound("block.amethyst_cluster.fall");
+
     Sound BLOCK_AMETHYST_CLUSTER_HIT = getSound("block.amethyst_cluster.hit");
+
     Sound BLOCK_AMETHYST_CLUSTER_PLACE = getSound("block.amethyst_cluster.place");
+
     Sound BLOCK_AMETHYST_CLUSTER_STEP = getSound("block.amethyst_cluster.step");
+
     Sound BLOCK_ANCIENT_DEBRIS_BREAK = getSound("block.ancient_debris.break");
+
     Sound BLOCK_ANCIENT_DEBRIS_FALL = getSound("block.ancient_debris.fall");
+
     Sound BLOCK_ANCIENT_DEBRIS_HIT = getSound("block.ancient_debris.hit");
+
     Sound BLOCK_ANCIENT_DEBRIS_PLACE = getSound("block.ancient_debris.place");
+
     Sound BLOCK_ANCIENT_DEBRIS_STEP = getSound("block.ancient_debris.step");
+
     Sound BLOCK_ANVIL_BREAK = getSound("block.anvil.break");
+
     Sound BLOCK_ANVIL_DESTROY = getSound("block.anvil.destroy");
+
     Sound BLOCK_ANVIL_FALL = getSound("block.anvil.fall");
+
     Sound BLOCK_ANVIL_HIT = getSound("block.anvil.hit");
+
     Sound BLOCK_ANVIL_LAND = getSound("block.anvil.land");
+
     Sound BLOCK_ANVIL_PLACE = getSound("block.anvil.place");
+
     Sound BLOCK_ANVIL_STEP = getSound("block.anvil.step");
+
     Sound BLOCK_ANVIL_USE = getSound("block.anvil.use");
+
     Sound BLOCK_AZALEA_BREAK = getSound("block.azalea.break");
+
     Sound BLOCK_AZALEA_FALL = getSound("block.azalea.fall");
+
     Sound BLOCK_AZALEA_HIT = getSound("block.azalea.hit");
-    Sound BLOCK_AZALEA_LEAVES_BREAK = getSound("block.azalea_leaves.break");
-    Sound BLOCK_AZALEA_LEAVES_FALL = getSound("block.azalea_leaves.fall");
-    Sound BLOCK_AZALEA_LEAVES_HIT = getSound("block.azalea_leaves.hit");
-    Sound BLOCK_AZALEA_LEAVES_PLACE = getSound("block.azalea_leaves.place");
-    Sound BLOCK_AZALEA_LEAVES_STEP = getSound("block.azalea_leaves.step");
+
     Sound BLOCK_AZALEA_PLACE = getSound("block.azalea.place");
+
     Sound BLOCK_AZALEA_STEP = getSound("block.azalea.step");
+
+    Sound BLOCK_AZALEA_LEAVES_BREAK = getSound("block.azalea_leaves.break");
+
+    Sound BLOCK_AZALEA_LEAVES_FALL = getSound("block.azalea_leaves.fall");
+
+    Sound BLOCK_AZALEA_LEAVES_HIT = getSound("block.azalea_leaves.hit");
+
+    Sound BLOCK_AZALEA_LEAVES_PLACE = getSound("block.azalea_leaves.place");
+
+    Sound BLOCK_AZALEA_LEAVES_STEP = getSound("block.azalea_leaves.step");
+
     Sound BLOCK_BAMBOO_BREAK = getSound("block.bamboo.break");
+
     Sound BLOCK_BAMBOO_FALL = getSound("block.bamboo.fall");
+
     Sound BLOCK_BAMBOO_HIT = getSound("block.bamboo.hit");
+
     Sound BLOCK_BAMBOO_PLACE = getSound("block.bamboo.place");
-    Sound BLOCK_BAMBOO_SAPLING_BREAK = getSound("block.bamboo_sapling.break");
-    Sound BLOCK_BAMBOO_SAPLING_HIT = getSound("block.bamboo_sapling.hit");
-    Sound BLOCK_BAMBOO_SAPLING_PLACE = getSound("block.bamboo_sapling.place");
+
     Sound BLOCK_BAMBOO_STEP = getSound("block.bamboo.step");
+
+    Sound BLOCK_BAMBOO_SAPLING_BREAK = getSound("block.bamboo_sapling.break");
+
+    Sound BLOCK_BAMBOO_SAPLING_HIT = getSound("block.bamboo_sapling.hit");
+
+    Sound BLOCK_BAMBOO_SAPLING_PLACE = getSound("block.bamboo_sapling.place");
+
     Sound BLOCK_BAMBOO_WOOD_BREAK = getSound("block.bamboo_wood.break");
-    Sound BLOCK_BAMBOO_WOOD_BUTTON_CLICK_OFF = getSound("block.bamboo_wood_button.click_off");
-    Sound BLOCK_BAMBOO_WOOD_BUTTON_CLICK_ON = getSound("block.bamboo_wood_button.click_on");
-    Sound BLOCK_BAMBOO_WOOD_DOOR_CLOSE = getSound("block.bamboo_wood_door.close");
-    Sound BLOCK_BAMBOO_WOOD_DOOR_OPEN = getSound("block.bamboo_wood_door.open");
+
     Sound BLOCK_BAMBOO_WOOD_FALL = getSound("block.bamboo_wood.fall");
-    Sound BLOCK_BAMBOO_WOOD_FENCE_GATE_CLOSE = getSound("block.bamboo_wood_fence_gate.close");
-    Sound BLOCK_BAMBOO_WOOD_FENCE_GATE_OPEN = getSound("block.bamboo_wood_fence_gate.open");
-    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_BREAK = getSound("block.bamboo_wood_hanging_sign.break");
-    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL = getSound("block.bamboo_wood_hanging_sign.fall");
-    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT = getSound("block.bamboo_wood_hanging_sign.hit");
-    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE = getSound("block.bamboo_wood_hanging_sign.place");
-    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_STEP = getSound("block.bamboo_wood_hanging_sign.step");
+
     Sound BLOCK_BAMBOO_WOOD_HIT = getSound("block.bamboo_wood.hit");
+
     Sound BLOCK_BAMBOO_WOOD_PLACE = getSound("block.bamboo_wood.place");
-    Sound BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_OFF = getSound("block.bamboo_wood_pressure_plate.click_off");
-    Sound BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_ON = getSound("block.bamboo_wood_pressure_plate.click_on");
+
     Sound BLOCK_BAMBOO_WOOD_STEP = getSound("block.bamboo_wood.step");
+
+    Sound BLOCK_BAMBOO_WOOD_BUTTON_CLICK_OFF = getSound("block.bamboo_wood_button.click_off");
+
+    Sound BLOCK_BAMBOO_WOOD_BUTTON_CLICK_ON = getSound("block.bamboo_wood_button.click_on");
+
+    Sound BLOCK_BAMBOO_WOOD_DOOR_CLOSE = getSound("block.bamboo_wood_door.close");
+
+    Sound BLOCK_BAMBOO_WOOD_DOOR_OPEN = getSound("block.bamboo_wood_door.open");
+
+    Sound BLOCK_BAMBOO_WOOD_FENCE_GATE_CLOSE = getSound("block.bamboo_wood_fence_gate.close");
+
+    Sound BLOCK_BAMBOO_WOOD_FENCE_GATE_OPEN = getSound("block.bamboo_wood_fence_gate.open");
+
+    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_BREAK = getSound("block.bamboo_wood_hanging_sign.break");
+
+    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_FALL = getSound("block.bamboo_wood_hanging_sign.fall");
+
+    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_HIT = getSound("block.bamboo_wood_hanging_sign.hit");
+
+    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_PLACE = getSound("block.bamboo_wood_hanging_sign.place");
+
+    Sound BLOCK_BAMBOO_WOOD_HANGING_SIGN_STEP = getSound("block.bamboo_wood_hanging_sign.step");
+
+    Sound BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_OFF = getSound("block.bamboo_wood_pressure_plate.click_off");
+
+    Sound BLOCK_BAMBOO_WOOD_PRESSURE_PLATE_CLICK_ON = getSound("block.bamboo_wood_pressure_plate.click_on");
+
     Sound BLOCK_BAMBOO_WOOD_TRAPDOOR_CLOSE = getSound("block.bamboo_wood_trapdoor.close");
+
     Sound BLOCK_BAMBOO_WOOD_TRAPDOOR_OPEN = getSound("block.bamboo_wood_trapdoor.open");
+
     Sound BLOCK_BARREL_CLOSE = getSound("block.barrel.close");
+
     Sound BLOCK_BARREL_OPEN = getSound("block.barrel.open");
+
     Sound BLOCK_BASALT_BREAK = getSound("block.basalt.break");
+
     Sound BLOCK_BASALT_FALL = getSound("block.basalt.fall");
+
     Sound BLOCK_BASALT_HIT = getSound("block.basalt.hit");
+
     Sound BLOCK_BASALT_PLACE = getSound("block.basalt.place");
+
     Sound BLOCK_BASALT_STEP = getSound("block.basalt.step");
+
     Sound BLOCK_BEACON_ACTIVATE = getSound("block.beacon.activate");
+
     Sound BLOCK_BEACON_AMBIENT = getSound("block.beacon.ambient");
+
     Sound BLOCK_BEACON_DEACTIVATE = getSound("block.beacon.deactivate");
+
     Sound BLOCK_BEACON_POWER_SELECT = getSound("block.beacon.power_select");
+
     Sound BLOCK_BEEHIVE_DRIP = getSound("block.beehive.drip");
+
     Sound BLOCK_BEEHIVE_ENTER = getSound("block.beehive.enter");
+
     Sound BLOCK_BEEHIVE_EXIT = getSound("block.beehive.exit");
+
     Sound BLOCK_BEEHIVE_SHEAR = getSound("block.beehive.shear");
+
     Sound BLOCK_BEEHIVE_WORK = getSound("block.beehive.work");
+
     Sound BLOCK_BELL_RESONATE = getSound("block.bell.resonate");
+
     Sound BLOCK_BELL_USE = getSound("block.bell.use");
+
     Sound BLOCK_BIG_DRIPLEAF_BREAK = getSound("block.big_dripleaf.break");
+
     Sound BLOCK_BIG_DRIPLEAF_FALL = getSound("block.big_dripleaf.fall");
+
     Sound BLOCK_BIG_DRIPLEAF_HIT = getSound("block.big_dripleaf.hit");
+
     Sound BLOCK_BIG_DRIPLEAF_PLACE = getSound("block.big_dripleaf.place");
+
     Sound BLOCK_BIG_DRIPLEAF_STEP = getSound("block.big_dripleaf.step");
+
     Sound BLOCK_BIG_DRIPLEAF_TILT_DOWN = getSound("block.big_dripleaf.tilt_down");
+
     Sound BLOCK_BIG_DRIPLEAF_TILT_UP = getSound("block.big_dripleaf.tilt_up");
+
     Sound BLOCK_BLASTFURNACE_FIRE_CRACKLE = getSound("block.blastfurnace.fire_crackle");
+
     Sound BLOCK_BONE_BLOCK_BREAK = getSound("block.bone_block.break");
+
     Sound BLOCK_BONE_BLOCK_FALL = getSound("block.bone_block.fall");
+
     Sound BLOCK_BONE_BLOCK_HIT = getSound("block.bone_block.hit");
+
     Sound BLOCK_BONE_BLOCK_PLACE = getSound("block.bone_block.place");
+
     Sound BLOCK_BONE_BLOCK_STEP = getSound("block.bone_block.step");
+
     Sound BLOCK_BREWING_STAND_BREW = getSound("block.brewing_stand.brew");
+
     Sound BLOCK_BUBBLE_COLUMN_BUBBLE_POP = getSound("block.bubble_column.bubble_pop");
+
     Sound BLOCK_BUBBLE_COLUMN_UPWARDS_AMBIENT = getSound("block.bubble_column.upwards_ambient");
+
     Sound BLOCK_BUBBLE_COLUMN_UPWARDS_INSIDE = getSound("block.bubble_column.upwards_inside");
+
     Sound BLOCK_BUBBLE_COLUMN_WHIRLPOOL_AMBIENT = getSound("block.bubble_column.whirlpool_ambient");
+
     Sound BLOCK_BUBBLE_COLUMN_WHIRLPOOL_INSIDE = getSound("block.bubble_column.whirlpool_inside");
+
     Sound BLOCK_CAKE_ADD_CANDLE = getSound("block.cake.add_candle");
+
     Sound BLOCK_CALCITE_BREAK = getSound("block.calcite.break");
+
     Sound BLOCK_CALCITE_FALL = getSound("block.calcite.fall");
+
     Sound BLOCK_CALCITE_HIT = getSound("block.calcite.hit");
+
     Sound BLOCK_CALCITE_PLACE = getSound("block.calcite.place");
+
     Sound BLOCK_CALCITE_STEP = getSound("block.calcite.step");
+
     Sound BLOCK_CAMPFIRE_CRACKLE = getSound("block.campfire.crackle");
+
     Sound BLOCK_CANDLE_AMBIENT = getSound("block.candle.ambient");
+
     Sound BLOCK_CANDLE_BREAK = getSound("block.candle.break");
+
     Sound BLOCK_CANDLE_EXTINGUISH = getSound("block.candle.extinguish");
+
     Sound BLOCK_CANDLE_FALL = getSound("block.candle.fall");
+
     Sound BLOCK_CANDLE_HIT = getSound("block.candle.hit");
+
     Sound BLOCK_CANDLE_PLACE = getSound("block.candle.place");
+
     Sound BLOCK_CANDLE_STEP = getSound("block.candle.step");
+
     Sound BLOCK_CAVE_VINES_BREAK = getSound("block.cave_vines.break");
+
     Sound BLOCK_CAVE_VINES_FALL = getSound("block.cave_vines.fall");
+
     Sound BLOCK_CAVE_VINES_HIT = getSound("block.cave_vines.hit");
+
     Sound BLOCK_CAVE_VINES_PICK_BERRIES = getSound("block.cave_vines.pick_berries");
+
     Sound BLOCK_CAVE_VINES_PLACE = getSound("block.cave_vines.place");
+
     Sound BLOCK_CAVE_VINES_STEP = getSound("block.cave_vines.step");
+
     Sound BLOCK_CHAIN_BREAK = getSound("block.chain.break");
+
     Sound BLOCK_CHAIN_FALL = getSound("block.chain.fall");
+
     Sound BLOCK_CHAIN_HIT = getSound("block.chain.hit");
+
     Sound BLOCK_CHAIN_PLACE = getSound("block.chain.place");
+
     Sound BLOCK_CHAIN_STEP = getSound("block.chain.step");
+
     Sound BLOCK_CHERRY_LEAVES_BREAK = getSound("block.cherry_leaves.break");
+
     Sound BLOCK_CHERRY_LEAVES_FALL = getSound("block.cherry_leaves.fall");
+
     Sound BLOCK_CHERRY_LEAVES_HIT = getSound("block.cherry_leaves.hit");
+
     Sound BLOCK_CHERRY_LEAVES_PLACE = getSound("block.cherry_leaves.place");
+
     Sound BLOCK_CHERRY_LEAVES_STEP = getSound("block.cherry_leaves.step");
+
     Sound BLOCK_CHERRY_SAPLING_BREAK = getSound("block.cherry_sapling.break");
+
     Sound BLOCK_CHERRY_SAPLING_FALL = getSound("block.cherry_sapling.fall");
+
     Sound BLOCK_CHERRY_SAPLING_HIT = getSound("block.cherry_sapling.hit");
+
     Sound BLOCK_CHERRY_SAPLING_PLACE = getSound("block.cherry_sapling.place");
+
     Sound BLOCK_CHERRY_SAPLING_STEP = getSound("block.cherry_sapling.step");
+
     Sound BLOCK_CHERRY_WOOD_BREAK = getSound("block.cherry_wood.break");
-    Sound BLOCK_CHERRY_WOOD_BUTTON_CLICK_OFF = getSound("block.cherry_wood_button.click_off");
-    Sound BLOCK_CHERRY_WOOD_BUTTON_CLICK_ON = getSound("block.cherry_wood_button.click_on");
-    Sound BLOCK_CHERRY_WOOD_DOOR_CLOSE = getSound("block.cherry_wood_door.close");
-    Sound BLOCK_CHERRY_WOOD_DOOR_OPEN = getSound("block.cherry_wood_door.open");
+
     Sound BLOCK_CHERRY_WOOD_FALL = getSound("block.cherry_wood.fall");
-    Sound BLOCK_CHERRY_WOOD_FENCE_GATE_CLOSE = getSound("block.cherry_wood_fence_gate.close");
-    Sound BLOCK_CHERRY_WOOD_FENCE_GATE_OPEN = getSound("block.cherry_wood_fence_gate.open");
-    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_BREAK = getSound("block.cherry_wood_hanging_sign.break");
-    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_FALL = getSound("block.cherry_wood_hanging_sign.fall");
-    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_HIT = getSound("block.cherry_wood_hanging_sign.hit");
-    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_PLACE = getSound("block.cherry_wood_hanging_sign.place");
-    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_STEP = getSound("block.cherry_wood_hanging_sign.step");
+
     Sound BLOCK_CHERRY_WOOD_HIT = getSound("block.cherry_wood.hit");
+
     Sound BLOCK_CHERRY_WOOD_PLACE = getSound("block.cherry_wood.place");
-    Sound BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_OFF = getSound("block.cherry_wood_pressure_plate.click_off");
-    Sound BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_ON = getSound("block.cherry_wood_pressure_plate.click_on");
+
     Sound BLOCK_CHERRY_WOOD_STEP = getSound("block.cherry_wood.step");
+
+    Sound BLOCK_CHERRY_WOOD_BUTTON_CLICK_OFF = getSound("block.cherry_wood_button.click_off");
+
+    Sound BLOCK_CHERRY_WOOD_BUTTON_CLICK_ON = getSound("block.cherry_wood_button.click_on");
+
+    Sound BLOCK_CHERRY_WOOD_DOOR_CLOSE = getSound("block.cherry_wood_door.close");
+
+    Sound BLOCK_CHERRY_WOOD_DOOR_OPEN = getSound("block.cherry_wood_door.open");
+
+    Sound BLOCK_CHERRY_WOOD_FENCE_GATE_CLOSE = getSound("block.cherry_wood_fence_gate.close");
+
+    Sound BLOCK_CHERRY_WOOD_FENCE_GATE_OPEN = getSound("block.cherry_wood_fence_gate.open");
+
+    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_BREAK = getSound("block.cherry_wood_hanging_sign.break");
+
+    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_FALL = getSound("block.cherry_wood_hanging_sign.fall");
+
+    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_HIT = getSound("block.cherry_wood_hanging_sign.hit");
+
+    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_PLACE = getSound("block.cherry_wood_hanging_sign.place");
+
+    Sound BLOCK_CHERRY_WOOD_HANGING_SIGN_STEP = getSound("block.cherry_wood_hanging_sign.step");
+
+    Sound BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_OFF = getSound("block.cherry_wood_pressure_plate.click_off");
+
+    Sound BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_ON = getSound("block.cherry_wood_pressure_plate.click_on");
+
     Sound BLOCK_CHERRY_WOOD_TRAPDOOR_CLOSE = getSound("block.cherry_wood_trapdoor.close");
+
     Sound BLOCK_CHERRY_WOOD_TRAPDOOR_OPEN = getSound("block.cherry_wood_trapdoor.open");
+
     Sound BLOCK_CHEST_CLOSE = getSound("block.chest.close");
+
     Sound BLOCK_CHEST_LOCKED = getSound("block.chest.locked");
+
     Sound BLOCK_CHEST_OPEN = getSound("block.chest.open");
+
     Sound BLOCK_CHISELED_BOOKSHELF_BREAK = getSound("block.chiseled_bookshelf.break");
+
     Sound BLOCK_CHISELED_BOOKSHELF_FALL = getSound("block.chiseled_bookshelf.fall");
+
     Sound BLOCK_CHISELED_BOOKSHELF_HIT = getSound("block.chiseled_bookshelf.hit");
+
     Sound BLOCK_CHISELED_BOOKSHELF_INSERT = getSound("block.chiseled_bookshelf.insert");
+
     Sound BLOCK_CHISELED_BOOKSHELF_INSERT_ENCHANTED = getSound("block.chiseled_bookshelf.insert.enchanted");
+
     Sound BLOCK_CHISELED_BOOKSHELF_PICKUP = getSound("block.chiseled_bookshelf.pickup");
+
     Sound BLOCK_CHISELED_BOOKSHELF_PICKUP_ENCHANTED = getSound("block.chiseled_bookshelf.pickup.enchanted");
+
     Sound BLOCK_CHISELED_BOOKSHELF_PLACE = getSound("block.chiseled_bookshelf.place");
+
     Sound BLOCK_CHISELED_BOOKSHELF_STEP = getSound("block.chiseled_bookshelf.step");
+
     Sound BLOCK_CHORUS_FLOWER_DEATH = getSound("block.chorus_flower.death");
+
     Sound BLOCK_CHORUS_FLOWER_GROW = getSound("block.chorus_flower.grow");
+
     Sound BLOCK_COBWEB_BREAK = getSound("block.cobweb.break");
+
     Sound BLOCK_COBWEB_FALL = getSound("block.cobweb.fall");
+
     Sound BLOCK_COBWEB_HIT = getSound("block.cobweb.hit");
+
     Sound BLOCK_COBWEB_PLACE = getSound("block.cobweb.place");
+
     Sound BLOCK_COBWEB_STEP = getSound("block.cobweb.step");
+
     Sound BLOCK_COMPARATOR_CLICK = getSound("block.comparator.click");
+
     Sound BLOCK_COMPOSTER_EMPTY = getSound("block.composter.empty");
+
     Sound BLOCK_COMPOSTER_FILL = getSound("block.composter.fill");
+
     Sound BLOCK_COMPOSTER_FILL_SUCCESS = getSound("block.composter.fill_success");
+
     Sound BLOCK_COMPOSTER_READY = getSound("block.composter.ready");
+
     Sound BLOCK_CONDUIT_ACTIVATE = getSound("block.conduit.activate");
+
     Sound BLOCK_CONDUIT_AMBIENT = getSound("block.conduit.ambient");
+
     Sound BLOCK_CONDUIT_AMBIENT_SHORT = getSound("block.conduit.ambient.short");
+
     Sound BLOCK_CONDUIT_ATTACK_TARGET = getSound("block.conduit.attack.target");
+
     Sound BLOCK_CONDUIT_DEACTIVATE = getSound("block.conduit.deactivate");
+
     Sound BLOCK_COPPER_BREAK = getSound("block.copper.break");
-    Sound BLOCK_COPPER_BULB_BREAK = getSound("block.copper_bulb.break");
-    Sound BLOCK_COPPER_BULB_FALL = getSound("block.copper_bulb.fall");
-    Sound BLOCK_COPPER_BULB_HIT = getSound("block.copper_bulb.hit");
-    Sound BLOCK_COPPER_BULB_PLACE = getSound("block.copper_bulb.place");
-    Sound BLOCK_COPPER_BULB_STEP = getSound("block.copper_bulb.step");
-    Sound BLOCK_COPPER_BULB_TURN_OFF = getSound("block.copper_bulb.turn_off");
-    Sound BLOCK_COPPER_BULB_TURN_ON = getSound("block.copper_bulb.turn_on");
-    Sound BLOCK_COPPER_DOOR_CLOSE = getSound("block.copper_door.close");
-    Sound BLOCK_COPPER_DOOR_OPEN = getSound("block.copper_door.open");
+
     Sound BLOCK_COPPER_FALL = getSound("block.copper.fall");
-    Sound BLOCK_COPPER_GRATE_BREAK = getSound("block.copper_grate.break");
-    Sound BLOCK_COPPER_GRATE_FALL = getSound("block.copper_grate.fall");
-    Sound BLOCK_COPPER_GRATE_HIT = getSound("block.copper_grate.hit");
-    Sound BLOCK_COPPER_GRATE_PLACE = getSound("block.copper_grate.place");
-    Sound BLOCK_COPPER_GRATE_STEP = getSound("block.copper_grate.step");
+
     Sound BLOCK_COPPER_HIT = getSound("block.copper.hit");
+
     Sound BLOCK_COPPER_PLACE = getSound("block.copper.place");
+
     Sound BLOCK_COPPER_STEP = getSound("block.copper.step");
+
+    Sound BLOCK_COPPER_BULB_BREAK = getSound("block.copper_bulb.break");
+
+    Sound BLOCK_COPPER_BULB_FALL = getSound("block.copper_bulb.fall");
+
+    Sound BLOCK_COPPER_BULB_HIT = getSound("block.copper_bulb.hit");
+
+    Sound BLOCK_COPPER_BULB_PLACE = getSound("block.copper_bulb.place");
+
+    Sound BLOCK_COPPER_BULB_STEP = getSound("block.copper_bulb.step");
+
+    Sound BLOCK_COPPER_BULB_TURN_OFF = getSound("block.copper_bulb.turn_off");
+
+    Sound BLOCK_COPPER_BULB_TURN_ON = getSound("block.copper_bulb.turn_on");
+
+    Sound BLOCK_COPPER_DOOR_CLOSE = getSound("block.copper_door.close");
+
+    Sound BLOCK_COPPER_DOOR_OPEN = getSound("block.copper_door.open");
+
+    Sound BLOCK_COPPER_GRATE_BREAK = getSound("block.copper_grate.break");
+
+    Sound BLOCK_COPPER_GRATE_FALL = getSound("block.copper_grate.fall");
+
+    Sound BLOCK_COPPER_GRATE_HIT = getSound("block.copper_grate.hit");
+
+    Sound BLOCK_COPPER_GRATE_PLACE = getSound("block.copper_grate.place");
+
+    Sound BLOCK_COPPER_GRATE_STEP = getSound("block.copper_grate.step");
+
     Sound BLOCK_COPPER_TRAPDOOR_CLOSE = getSound("block.copper_trapdoor.close");
+
     Sound BLOCK_COPPER_TRAPDOOR_OPEN = getSound("block.copper_trapdoor.open");
+
     Sound BLOCK_CORAL_BLOCK_BREAK = getSound("block.coral_block.break");
+
     Sound BLOCK_CORAL_BLOCK_FALL = getSound("block.coral_block.fall");
+
     Sound BLOCK_CORAL_BLOCK_HIT = getSound("block.coral_block.hit");
+
     Sound BLOCK_CORAL_BLOCK_PLACE = getSound("block.coral_block.place");
+
     Sound BLOCK_CORAL_BLOCK_STEP = getSound("block.coral_block.step");
+
     Sound BLOCK_CRAFTER_CRAFT = getSound("block.crafter.craft");
+
     Sound BLOCK_CRAFTER_FAIL = getSound("block.crafter.fail");
+
     Sound BLOCK_CREAKING_HEART_BREAK = getSound("block.creaking_heart.break");
+
     Sound BLOCK_CREAKING_HEART_FALL = getSound("block.creaking_heart.fall");
+
     Sound BLOCK_CREAKING_HEART_HIT = getSound("block.creaking_heart.hit");
+
     Sound BLOCK_CREAKING_HEART_HURT = getSound("block.creaking_heart.hurt");
+
     Sound BLOCK_CREAKING_HEART_IDLE = getSound("block.creaking_heart.idle");
+
     Sound BLOCK_CREAKING_HEART_PLACE = getSound("block.creaking_heart.place");
+
     Sound BLOCK_CREAKING_HEART_SPAWN = getSound("block.creaking_heart.spawn");
+
     Sound BLOCK_CREAKING_HEART_STEP = getSound("block.creaking_heart.step");
+
     Sound BLOCK_CROP_BREAK = getSound("block.crop.break");
+
     Sound BLOCK_DECORATED_POT_BREAK = getSound("block.decorated_pot.break");
+
     Sound BLOCK_DECORATED_POT_FALL = getSound("block.decorated_pot.fall");
+
     Sound BLOCK_DECORATED_POT_HIT = getSound("block.decorated_pot.hit");
+
     Sound BLOCK_DECORATED_POT_INSERT = getSound("block.decorated_pot.insert");
+
     Sound BLOCK_DECORATED_POT_INSERT_FAIL = getSound("block.decorated_pot.insert_fail");
+
     Sound BLOCK_DECORATED_POT_PLACE = getSound("block.decorated_pot.place");
+
     Sound BLOCK_DECORATED_POT_SHATTER = getSound("block.decorated_pot.shatter");
+
     Sound BLOCK_DECORATED_POT_STEP = getSound("block.decorated_pot.step");
+
     Sound BLOCK_DEEPSLATE_BREAK = getSound("block.deepslate.break");
-    Sound BLOCK_DEEPSLATE_BRICKS_BREAK = getSound("block.deepslate_bricks.break");
-    Sound BLOCK_DEEPSLATE_BRICKS_FALL = getSound("block.deepslate_bricks.fall");
-    Sound BLOCK_DEEPSLATE_BRICKS_HIT = getSound("block.deepslate_bricks.hit");
-    Sound BLOCK_DEEPSLATE_BRICKS_PLACE = getSound("block.deepslate_bricks.place");
-    Sound BLOCK_DEEPSLATE_BRICKS_STEP = getSound("block.deepslate_bricks.step");
+
     Sound BLOCK_DEEPSLATE_FALL = getSound("block.deepslate.fall");
+
     Sound BLOCK_DEEPSLATE_HIT = getSound("block.deepslate.hit");
+
     Sound BLOCK_DEEPSLATE_PLACE = getSound("block.deepslate.place");
+
     Sound BLOCK_DEEPSLATE_STEP = getSound("block.deepslate.step");
+
+    Sound BLOCK_DEEPSLATE_BRICKS_BREAK = getSound("block.deepslate_bricks.break");
+
+    Sound BLOCK_DEEPSLATE_BRICKS_FALL = getSound("block.deepslate_bricks.fall");
+
+    Sound BLOCK_DEEPSLATE_BRICKS_HIT = getSound("block.deepslate_bricks.hit");
+
+    Sound BLOCK_DEEPSLATE_BRICKS_PLACE = getSound("block.deepslate_bricks.place");
+
+    Sound BLOCK_DEEPSLATE_BRICKS_STEP = getSound("block.deepslate_bricks.step");
+
     Sound BLOCK_DEEPSLATE_TILES_BREAK = getSound("block.deepslate_tiles.break");
+
     Sound BLOCK_DEEPSLATE_TILES_FALL = getSound("block.deepslate_tiles.fall");
+
     Sound BLOCK_DEEPSLATE_TILES_HIT = getSound("block.deepslate_tiles.hit");
+
     Sound BLOCK_DEEPSLATE_TILES_PLACE = getSound("block.deepslate_tiles.place");
+
     Sound BLOCK_DEEPSLATE_TILES_STEP = getSound("block.deepslate_tiles.step");
+
     Sound BLOCK_DISPENSER_DISPENSE = getSound("block.dispenser.dispense");
+
     Sound BLOCK_DISPENSER_FAIL = getSound("block.dispenser.fail");
+
     Sound BLOCK_DISPENSER_LAUNCH = getSound("block.dispenser.launch");
+
     Sound BLOCK_DRIPSTONE_BLOCK_BREAK = getSound("block.dripstone_block.break");
+
     Sound BLOCK_DRIPSTONE_BLOCK_FALL = getSound("block.dripstone_block.fall");
+
     Sound BLOCK_DRIPSTONE_BLOCK_HIT = getSound("block.dripstone_block.hit");
+
     Sound BLOCK_DRIPSTONE_BLOCK_PLACE = getSound("block.dripstone_block.place");
+
     Sound BLOCK_DRIPSTONE_BLOCK_STEP = getSound("block.dripstone_block.step");
+
     Sound BLOCK_ENCHANTMENT_TABLE_USE = getSound("block.enchantment_table.use");
-    Sound BLOCK_ENDER_CHEST_CLOSE = getSound("block.ender_chest.close");
-    Sound BLOCK_ENDER_CHEST_OPEN = getSound("block.ender_chest.open");
+
     Sound BLOCK_END_GATEWAY_SPAWN = getSound("block.end_gateway.spawn");
-    Sound BLOCK_END_PORTAL_FRAME_FILL = getSound("block.end_portal_frame.fill");
+
     Sound BLOCK_END_PORTAL_SPAWN = getSound("block.end_portal.spawn");
+
+    Sound BLOCK_END_PORTAL_FRAME_FILL = getSound("block.end_portal_frame.fill");
+
+    Sound BLOCK_ENDER_CHEST_CLOSE = getSound("block.ender_chest.close");
+
+    Sound BLOCK_ENDER_CHEST_OPEN = getSound("block.ender_chest.open");
+
     Sound BLOCK_EYEBLOSSOM_CLOSE = getSound("block.eyeblossom.close");
+
     Sound BLOCK_EYEBLOSSOM_CLOSE_LONG = getSound("block.eyeblossom.close_long");
+
     Sound BLOCK_EYEBLOSSOM_IDLE = getSound("block.eyeblossom.idle");
+
     Sound BLOCK_EYEBLOSSOM_OPEN = getSound("block.eyeblossom.open");
+
     Sound BLOCK_EYEBLOSSOM_OPEN_LONG = getSound("block.eyeblossom.open_long");
+
     Sound BLOCK_FENCE_GATE_CLOSE = getSound("block.fence_gate.close");
+
     Sound BLOCK_FENCE_GATE_OPEN = getSound("block.fence_gate.open");
+
     Sound BLOCK_FIRE_AMBIENT = getSound("block.fire.ambient");
+
     Sound BLOCK_FIRE_EXTINGUISH = getSound("block.fire.extinguish");
+
     Sound BLOCK_FLOWERING_AZALEA_BREAK = getSound("block.flowering_azalea.break");
+
     Sound BLOCK_FLOWERING_AZALEA_FALL = getSound("block.flowering_azalea.fall");
+
     Sound BLOCK_FLOWERING_AZALEA_HIT = getSound("block.flowering_azalea.hit");
+
     Sound BLOCK_FLOWERING_AZALEA_PLACE = getSound("block.flowering_azalea.place");
+
     Sound BLOCK_FLOWERING_AZALEA_STEP = getSound("block.flowering_azalea.step");
+
     Sound BLOCK_FROGLIGHT_BREAK = getSound("block.froglight.break");
+
     Sound BLOCK_FROGLIGHT_FALL = getSound("block.froglight.fall");
+
     Sound BLOCK_FROGLIGHT_HIT = getSound("block.froglight.hit");
+
     Sound BLOCK_FROGLIGHT_PLACE = getSound("block.froglight.place");
+
     Sound BLOCK_FROGLIGHT_STEP = getSound("block.froglight.step");
+
     Sound BLOCK_FROGSPAWN_BREAK = getSound("block.frogspawn.break");
+
     Sound BLOCK_FROGSPAWN_FALL = getSound("block.frogspawn.fall");
+
     Sound BLOCK_FROGSPAWN_HATCH = getSound("block.frogspawn.hatch");
+
     Sound BLOCK_FROGSPAWN_HIT = getSound("block.frogspawn.hit");
+
     Sound BLOCK_FROGSPAWN_PLACE = getSound("block.frogspawn.place");
+
     Sound BLOCK_FROGSPAWN_STEP = getSound("block.frogspawn.step");
+
     Sound BLOCK_FUNGUS_BREAK = getSound("block.fungus.break");
+
     Sound BLOCK_FUNGUS_FALL = getSound("block.fungus.fall");
+
     Sound BLOCK_FUNGUS_HIT = getSound("block.fungus.hit");
+
     Sound BLOCK_FUNGUS_PLACE = getSound("block.fungus.place");
+
     Sound BLOCK_FUNGUS_STEP = getSound("block.fungus.step");
+
     Sound BLOCK_FURNACE_FIRE_CRACKLE = getSound("block.furnace.fire_crackle");
+
     Sound BLOCK_GILDED_BLACKSTONE_BREAK = getSound("block.gilded_blackstone.break");
+
     Sound BLOCK_GILDED_BLACKSTONE_FALL = getSound("block.gilded_blackstone.fall");
+
     Sound BLOCK_GILDED_BLACKSTONE_HIT = getSound("block.gilded_blackstone.hit");
+
     Sound BLOCK_GILDED_BLACKSTONE_PLACE = getSound("block.gilded_blackstone.place");
+
     Sound BLOCK_GILDED_BLACKSTONE_STEP = getSound("block.gilded_blackstone.step");
+
     Sound BLOCK_GLASS_BREAK = getSound("block.glass.break");
+
     Sound BLOCK_GLASS_FALL = getSound("block.glass.fall");
+
     Sound BLOCK_GLASS_HIT = getSound("block.glass.hit");
+
     Sound BLOCK_GLASS_PLACE = getSound("block.glass.place");
+
     Sound BLOCK_GLASS_STEP = getSound("block.glass.step");
+
     Sound BLOCK_GRASS_BREAK = getSound("block.grass.break");
+
     Sound BLOCK_GRASS_FALL = getSound("block.grass.fall");
+
     Sound BLOCK_GRASS_HIT = getSound("block.grass.hit");
+
     Sound BLOCK_GRASS_PLACE = getSound("block.grass.place");
+
     Sound BLOCK_GRASS_STEP = getSound("block.grass.step");
+
     Sound BLOCK_GRAVEL_BREAK = getSound("block.gravel.break");
+
     Sound BLOCK_GRAVEL_FALL = getSound("block.gravel.fall");
+
     Sound BLOCK_GRAVEL_HIT = getSound("block.gravel.hit");
+
     Sound BLOCK_GRAVEL_PLACE = getSound("block.gravel.place");
+
     Sound BLOCK_GRAVEL_STEP = getSound("block.gravel.step");
+
     Sound BLOCK_GRINDSTONE_USE = getSound("block.grindstone.use");
+
     Sound BLOCK_GROWING_PLANT_CROP = getSound("block.growing_plant.crop");
+
     Sound BLOCK_HANGING_ROOTS_BREAK = getSound("block.hanging_roots.break");
+
     Sound BLOCK_HANGING_ROOTS_FALL = getSound("block.hanging_roots.fall");
+
     Sound BLOCK_HANGING_ROOTS_HIT = getSound("block.hanging_roots.hit");
+
     Sound BLOCK_HANGING_ROOTS_PLACE = getSound("block.hanging_roots.place");
+
     Sound BLOCK_HANGING_ROOTS_STEP = getSound("block.hanging_roots.step");
+
     Sound BLOCK_HANGING_SIGN_BREAK = getSound("block.hanging_sign.break");
+
     Sound BLOCK_HANGING_SIGN_FALL = getSound("block.hanging_sign.fall");
+
     Sound BLOCK_HANGING_SIGN_HIT = getSound("block.hanging_sign.hit");
+
     Sound BLOCK_HANGING_SIGN_PLACE = getSound("block.hanging_sign.place");
+
     Sound BLOCK_HANGING_SIGN_STEP = getSound("block.hanging_sign.step");
+
     Sound BLOCK_HANGING_SIGN_WAXED_INTERACT_FAIL = getSound("block.hanging_sign.waxed_interact_fail");
+
     Sound BLOCK_HEAVY_CORE_BREAK = getSound("block.heavy_core.break");
+
     Sound BLOCK_HEAVY_CORE_FALL = getSound("block.heavy_core.fall");
+
     Sound BLOCK_HEAVY_CORE_HIT = getSound("block.heavy_core.hit");
+
     Sound BLOCK_HEAVY_CORE_PLACE = getSound("block.heavy_core.place");
+
     Sound BLOCK_HEAVY_CORE_STEP = getSound("block.heavy_core.step");
+
     Sound BLOCK_HONEY_BLOCK_BREAK = getSound("block.honey_block.break");
+
     Sound BLOCK_HONEY_BLOCK_FALL = getSound("block.honey_block.fall");
+
     Sound BLOCK_HONEY_BLOCK_HIT = getSound("block.honey_block.hit");
+
     Sound BLOCK_HONEY_BLOCK_PLACE = getSound("block.honey_block.place");
+
     Sound BLOCK_HONEY_BLOCK_SLIDE = getSound("block.honey_block.slide");
+
     Sound BLOCK_HONEY_BLOCK_STEP = getSound("block.honey_block.step");
+
     Sound BLOCK_IRON_DOOR_CLOSE = getSound("block.iron_door.close");
+
     Sound BLOCK_IRON_DOOR_OPEN = getSound("block.iron_door.open");
+
     Sound BLOCK_IRON_TRAPDOOR_CLOSE = getSound("block.iron_trapdoor.close");
+
     Sound BLOCK_IRON_TRAPDOOR_OPEN = getSound("block.iron_trapdoor.open");
+
     Sound BLOCK_LADDER_BREAK = getSound("block.ladder.break");
+
     Sound BLOCK_LADDER_FALL = getSound("block.ladder.fall");
+
     Sound BLOCK_LADDER_HIT = getSound("block.ladder.hit");
+
     Sound BLOCK_LADDER_PLACE = getSound("block.ladder.place");
+
     Sound BLOCK_LADDER_STEP = getSound("block.ladder.step");
+
     Sound BLOCK_LANTERN_BREAK = getSound("block.lantern.break");
+
     Sound BLOCK_LANTERN_FALL = getSound("block.lantern.fall");
+
     Sound BLOCK_LANTERN_HIT = getSound("block.lantern.hit");
+
     Sound BLOCK_LANTERN_PLACE = getSound("block.lantern.place");
+
     Sound BLOCK_LANTERN_STEP = getSound("block.lantern.step");
+
     Sound BLOCK_LARGE_AMETHYST_BUD_BREAK = getSound("block.large_amethyst_bud.break");
+
     Sound BLOCK_LARGE_AMETHYST_BUD_PLACE = getSound("block.large_amethyst_bud.place");
+
     Sound BLOCK_LAVA_AMBIENT = getSound("block.lava.ambient");
+
     Sound BLOCK_LAVA_EXTINGUISH = getSound("block.lava.extinguish");
+
     Sound BLOCK_LAVA_POP = getSound("block.lava.pop");
+
     Sound BLOCK_LEVER_CLICK = getSound("block.lever.click");
+
     Sound BLOCK_LILY_PAD_PLACE = getSound("block.lily_pad.place");
+
     Sound BLOCK_LODESTONE_BREAK = getSound("block.lodestone.break");
+
     Sound BLOCK_LODESTONE_FALL = getSound("block.lodestone.fall");
+
     Sound BLOCK_LODESTONE_HIT = getSound("block.lodestone.hit");
+
     Sound BLOCK_LODESTONE_PLACE = getSound("block.lodestone.place");
+
     Sound BLOCK_LODESTONE_STEP = getSound("block.lodestone.step");
+
     Sound BLOCK_MANGROVE_ROOTS_BREAK = getSound("block.mangrove_roots.break");
+
     Sound BLOCK_MANGROVE_ROOTS_FALL = getSound("block.mangrove_roots.fall");
+
     Sound BLOCK_MANGROVE_ROOTS_HIT = getSound("block.mangrove_roots.hit");
+
     Sound BLOCK_MANGROVE_ROOTS_PLACE = getSound("block.mangrove_roots.place");
+
     Sound BLOCK_MANGROVE_ROOTS_STEP = getSound("block.mangrove_roots.step");
+
     Sound BLOCK_MEDIUM_AMETHYST_BUD_BREAK = getSound("block.medium_amethyst_bud.break");
+
     Sound BLOCK_MEDIUM_AMETHYST_BUD_PLACE = getSound("block.medium_amethyst_bud.place");
+
     Sound BLOCK_METAL_BREAK = getSound("block.metal.break");
+
     Sound BLOCK_METAL_FALL = getSound("block.metal.fall");
+
     Sound BLOCK_METAL_HIT = getSound("block.metal.hit");
+
     Sound BLOCK_METAL_PLACE = getSound("block.metal.place");
-    Sound BLOCK_METAL_PRESSURE_PLATE_CLICK_OFF = getSound("block.metal_pressure_plate.click_off");
-    Sound BLOCK_METAL_PRESSURE_PLATE_CLICK_ON = getSound("block.metal_pressure_plate.click_on");
+
     Sound BLOCK_METAL_STEP = getSound("block.metal.step");
+
+    Sound BLOCK_METAL_PRESSURE_PLATE_CLICK_OFF = getSound("block.metal_pressure_plate.click_off");
+
+    Sound BLOCK_METAL_PRESSURE_PLATE_CLICK_ON = getSound("block.metal_pressure_plate.click_on");
+
     Sound BLOCK_MOSS_BREAK = getSound("block.moss.break");
-    Sound BLOCK_MOSS_CARPET_BREAK = getSound("block.moss_carpet.break");
-    Sound BLOCK_MOSS_CARPET_FALL = getSound("block.moss_carpet.fall");
-    Sound BLOCK_MOSS_CARPET_HIT = getSound("block.moss_carpet.hit");
-    Sound BLOCK_MOSS_CARPET_PLACE = getSound("block.moss_carpet.place");
-    Sound BLOCK_MOSS_CARPET_STEP = getSound("block.moss_carpet.step");
+
     Sound BLOCK_MOSS_FALL = getSound("block.moss.fall");
+
     Sound BLOCK_MOSS_HIT = getSound("block.moss.hit");
+
     Sound BLOCK_MOSS_PLACE = getSound("block.moss.place");
+
     Sound BLOCK_MOSS_STEP = getSound("block.moss.step");
-    Sound BLOCK_MUDDY_MANGROVE_ROOTS_BREAK = getSound("block.muddy_mangrove_roots.break");
-    Sound BLOCK_MUDDY_MANGROVE_ROOTS_FALL = getSound("block.muddy_mangrove_roots.fall");
-    Sound BLOCK_MUDDY_MANGROVE_ROOTS_HIT = getSound("block.muddy_mangrove_roots.hit");
-    Sound BLOCK_MUDDY_MANGROVE_ROOTS_PLACE = getSound("block.muddy_mangrove_roots.place");
-    Sound BLOCK_MUDDY_MANGROVE_ROOTS_STEP = getSound("block.muddy_mangrove_roots.step");
+
+    Sound BLOCK_MOSS_CARPET_BREAK = getSound("block.moss_carpet.break");
+
+    Sound BLOCK_MOSS_CARPET_FALL = getSound("block.moss_carpet.fall");
+
+    Sound BLOCK_MOSS_CARPET_HIT = getSound("block.moss_carpet.hit");
+
+    Sound BLOCK_MOSS_CARPET_PLACE = getSound("block.moss_carpet.place");
+
+    Sound BLOCK_MOSS_CARPET_STEP = getSound("block.moss_carpet.step");
+
     Sound BLOCK_MUD_BREAK = getSound("block.mud.break");
-    Sound BLOCK_MUD_BRICKS_BREAK = getSound("block.mud_bricks.break");
-    Sound BLOCK_MUD_BRICKS_FALL = getSound("block.mud_bricks.fall");
-    Sound BLOCK_MUD_BRICKS_HIT = getSound("block.mud_bricks.hit");
-    Sound BLOCK_MUD_BRICKS_PLACE = getSound("block.mud_bricks.place");
-    Sound BLOCK_MUD_BRICKS_STEP = getSound("block.mud_bricks.step");
+
     Sound BLOCK_MUD_FALL = getSound("block.mud.fall");
+
     Sound BLOCK_MUD_HIT = getSound("block.mud.hit");
+
     Sound BLOCK_MUD_PLACE = getSound("block.mud.place");
+
     Sound BLOCK_MUD_STEP = getSound("block.mud.step");
-    Sound BLOCK_NETHERITE_BLOCK_BREAK = getSound("block.netherite_block.break");
-    Sound BLOCK_NETHERITE_BLOCK_FALL = getSound("block.netherite_block.fall");
-    Sound BLOCK_NETHERITE_BLOCK_HIT = getSound("block.netherite_block.hit");
-    Sound BLOCK_NETHERITE_BLOCK_PLACE = getSound("block.netherite_block.place");
-    Sound BLOCK_NETHERITE_BLOCK_STEP = getSound("block.netherite_block.step");
-    Sound BLOCK_NETHERRACK_BREAK = getSound("block.netherrack.break");
-    Sound BLOCK_NETHERRACK_FALL = getSound("block.netherrack.fall");
-    Sound BLOCK_NETHERRACK_HIT = getSound("block.netherrack.hit");
-    Sound BLOCK_NETHERRACK_PLACE = getSound("block.netherrack.place");
-    Sound BLOCK_NETHERRACK_STEP = getSound("block.netherrack.step");
+
+    Sound BLOCK_MUD_BRICKS_BREAK = getSound("block.mud_bricks.break");
+
+    Sound BLOCK_MUD_BRICKS_FALL = getSound("block.mud_bricks.fall");
+
+    Sound BLOCK_MUD_BRICKS_HIT = getSound("block.mud_bricks.hit");
+
+    Sound BLOCK_MUD_BRICKS_PLACE = getSound("block.mud_bricks.place");
+
+    Sound BLOCK_MUD_BRICKS_STEP = getSound("block.mud_bricks.step");
+
+    Sound BLOCK_MUDDY_MANGROVE_ROOTS_BREAK = getSound("block.muddy_mangrove_roots.break");
+
+    Sound BLOCK_MUDDY_MANGROVE_ROOTS_FALL = getSound("block.muddy_mangrove_roots.fall");
+
+    Sound BLOCK_MUDDY_MANGROVE_ROOTS_HIT = getSound("block.muddy_mangrove_roots.hit");
+
+    Sound BLOCK_MUDDY_MANGROVE_ROOTS_PLACE = getSound("block.muddy_mangrove_roots.place");
+
+    Sound BLOCK_MUDDY_MANGROVE_ROOTS_STEP = getSound("block.muddy_mangrove_roots.step");
+
     Sound BLOCK_NETHER_BRICKS_BREAK = getSound("block.nether_bricks.break");
+
     Sound BLOCK_NETHER_BRICKS_FALL = getSound("block.nether_bricks.fall");
+
     Sound BLOCK_NETHER_BRICKS_HIT = getSound("block.nether_bricks.hit");
+
     Sound BLOCK_NETHER_BRICKS_PLACE = getSound("block.nether_bricks.place");
+
     Sound BLOCK_NETHER_BRICKS_STEP = getSound("block.nether_bricks.step");
+
     Sound BLOCK_NETHER_GOLD_ORE_BREAK = getSound("block.nether_gold_ore.break");
+
     Sound BLOCK_NETHER_GOLD_ORE_FALL = getSound("block.nether_gold_ore.fall");
+
     Sound BLOCK_NETHER_GOLD_ORE_HIT = getSound("block.nether_gold_ore.hit");
+
     Sound BLOCK_NETHER_GOLD_ORE_PLACE = getSound("block.nether_gold_ore.place");
+
     Sound BLOCK_NETHER_GOLD_ORE_STEP = getSound("block.nether_gold_ore.step");
+
     Sound BLOCK_NETHER_ORE_BREAK = getSound("block.nether_ore.break");
+
     Sound BLOCK_NETHER_ORE_FALL = getSound("block.nether_ore.fall");
+
     Sound BLOCK_NETHER_ORE_HIT = getSound("block.nether_ore.hit");
+
     Sound BLOCK_NETHER_ORE_PLACE = getSound("block.nether_ore.place");
+
     Sound BLOCK_NETHER_ORE_STEP = getSound("block.nether_ore.step");
+
     Sound BLOCK_NETHER_SPROUTS_BREAK = getSound("block.nether_sprouts.break");
+
     Sound BLOCK_NETHER_SPROUTS_FALL = getSound("block.nether_sprouts.fall");
+
     Sound BLOCK_NETHER_SPROUTS_HIT = getSound("block.nether_sprouts.hit");
+
     Sound BLOCK_NETHER_SPROUTS_PLACE = getSound("block.nether_sprouts.place");
+
     Sound BLOCK_NETHER_SPROUTS_STEP = getSound("block.nether_sprouts.step");
+
     Sound BLOCK_NETHER_WART_BREAK = getSound("block.nether_wart.break");
+
     Sound BLOCK_NETHER_WOOD_BREAK = getSound("block.nether_wood.break");
-    Sound BLOCK_NETHER_WOOD_BUTTON_CLICK_OFF = getSound("block.nether_wood_button.click_off");
-    Sound BLOCK_NETHER_WOOD_BUTTON_CLICK_ON = getSound("block.nether_wood_button.click_on");
-    Sound BLOCK_NETHER_WOOD_DOOR_CLOSE = getSound("block.nether_wood_door.close");
-    Sound BLOCK_NETHER_WOOD_DOOR_OPEN = getSound("block.nether_wood_door.open");
+
     Sound BLOCK_NETHER_WOOD_FALL = getSound("block.nether_wood.fall");
-    Sound BLOCK_NETHER_WOOD_FENCE_GATE_CLOSE = getSound("block.nether_wood_fence_gate.close");
-    Sound BLOCK_NETHER_WOOD_FENCE_GATE_OPEN = getSound("block.nether_wood_fence_gate.open");
-    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK = getSound("block.nether_wood_hanging_sign.break");
-    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_FALL = getSound("block.nether_wood_hanging_sign.fall");
-    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_HIT = getSound("block.nether_wood_hanging_sign.hit");
-    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_PLACE = getSound("block.nether_wood_hanging_sign.place");
-    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_STEP = getSound("block.nether_wood_hanging_sign.step");
+
     Sound BLOCK_NETHER_WOOD_HIT = getSound("block.nether_wood.hit");
+
     Sound BLOCK_NETHER_WOOD_PLACE = getSound("block.nether_wood.place");
-    Sound BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_OFF = getSound("block.nether_wood_pressure_plate.click_off");
-    Sound BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_ON = getSound("block.nether_wood_pressure_plate.click_on");
+
     Sound BLOCK_NETHER_WOOD_STEP = getSound("block.nether_wood.step");
+
+    Sound BLOCK_NETHER_WOOD_BUTTON_CLICK_OFF = getSound("block.nether_wood_button.click_off");
+
+    Sound BLOCK_NETHER_WOOD_BUTTON_CLICK_ON = getSound("block.nether_wood_button.click_on");
+
+    Sound BLOCK_NETHER_WOOD_DOOR_CLOSE = getSound("block.nether_wood_door.close");
+
+    Sound BLOCK_NETHER_WOOD_DOOR_OPEN = getSound("block.nether_wood_door.open");
+
+    Sound BLOCK_NETHER_WOOD_FENCE_GATE_CLOSE = getSound("block.nether_wood_fence_gate.close");
+
+    Sound BLOCK_NETHER_WOOD_FENCE_GATE_OPEN = getSound("block.nether_wood_fence_gate.open");
+
+    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_BREAK = getSound("block.nether_wood_hanging_sign.break");
+
+    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_FALL = getSound("block.nether_wood_hanging_sign.fall");
+
+    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_HIT = getSound("block.nether_wood_hanging_sign.hit");
+
+    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_PLACE = getSound("block.nether_wood_hanging_sign.place");
+
+    Sound BLOCK_NETHER_WOOD_HANGING_SIGN_STEP = getSound("block.nether_wood_hanging_sign.step");
+
+    Sound BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_OFF = getSound("block.nether_wood_pressure_plate.click_off");
+
+    Sound BLOCK_NETHER_WOOD_PRESSURE_PLATE_CLICK_ON = getSound("block.nether_wood_pressure_plate.click_on");
+
     Sound BLOCK_NETHER_WOOD_TRAPDOOR_CLOSE = getSound("block.nether_wood_trapdoor.close");
+
     Sound BLOCK_NETHER_WOOD_TRAPDOOR_OPEN = getSound("block.nether_wood_trapdoor.open");
+
+    Sound BLOCK_NETHERITE_BLOCK_BREAK = getSound("block.netherite_block.break");
+
+    Sound BLOCK_NETHERITE_BLOCK_FALL = getSound("block.netherite_block.fall");
+
+    Sound BLOCK_NETHERITE_BLOCK_HIT = getSound("block.netherite_block.hit");
+
+    Sound BLOCK_NETHERITE_BLOCK_PLACE = getSound("block.netherite_block.place");
+
+    Sound BLOCK_NETHERITE_BLOCK_STEP = getSound("block.netherite_block.step");
+
+    Sound BLOCK_NETHERRACK_BREAK = getSound("block.netherrack.break");
+
+    Sound BLOCK_NETHERRACK_FALL = getSound("block.netherrack.fall");
+
+    Sound BLOCK_NETHERRACK_HIT = getSound("block.netherrack.hit");
+
+    Sound BLOCK_NETHERRACK_PLACE = getSound("block.netherrack.place");
+
+    Sound BLOCK_NETHERRACK_STEP = getSound("block.netherrack.step");
+
     Sound BLOCK_NOTE_BLOCK_BANJO = getSound("block.note_block.banjo");
+
     Sound BLOCK_NOTE_BLOCK_BASEDRUM = getSound("block.note_block.basedrum");
+
     Sound BLOCK_NOTE_BLOCK_BASS = getSound("block.note_block.bass");
+
     Sound BLOCK_NOTE_BLOCK_BELL = getSound("block.note_block.bell");
+
     Sound BLOCK_NOTE_BLOCK_BIT = getSound("block.note_block.bit");
+
     Sound BLOCK_NOTE_BLOCK_CHIME = getSound("block.note_block.chime");
+
     Sound BLOCK_NOTE_BLOCK_COW_BELL = getSound("block.note_block.cow_bell");
+
     Sound BLOCK_NOTE_BLOCK_DIDGERIDOO = getSound("block.note_block.didgeridoo");
+
     Sound BLOCK_NOTE_BLOCK_FLUTE = getSound("block.note_block.flute");
+
     Sound BLOCK_NOTE_BLOCK_GUITAR = getSound("block.note_block.guitar");
+
     Sound BLOCK_NOTE_BLOCK_HARP = getSound("block.note_block.harp");
+
     Sound BLOCK_NOTE_BLOCK_HAT = getSound("block.note_block.hat");
+
     Sound BLOCK_NOTE_BLOCK_IMITATE_CREEPER = getSound("block.note_block.imitate.creeper");
+
     Sound BLOCK_NOTE_BLOCK_IMITATE_ENDER_DRAGON = getSound("block.note_block.imitate.ender_dragon");
+
     Sound BLOCK_NOTE_BLOCK_IMITATE_PIGLIN = getSound("block.note_block.imitate.piglin");
+
     Sound BLOCK_NOTE_BLOCK_IMITATE_SKELETON = getSound("block.note_block.imitate.skeleton");
+
     Sound BLOCK_NOTE_BLOCK_IMITATE_WITHER_SKELETON = getSound("block.note_block.imitate.wither_skeleton");
+
     Sound BLOCK_NOTE_BLOCK_IMITATE_ZOMBIE = getSound("block.note_block.imitate.zombie");
+
     Sound BLOCK_NOTE_BLOCK_IRON_XYLOPHONE = getSound("block.note_block.iron_xylophone");
+
     Sound BLOCK_NOTE_BLOCK_PLING = getSound("block.note_block.pling");
+
     Sound BLOCK_NOTE_BLOCK_SNARE = getSound("block.note_block.snare");
+
     Sound BLOCK_NOTE_BLOCK_XYLOPHONE = getSound("block.note_block.xylophone");
+
     Sound BLOCK_NYLIUM_BREAK = getSound("block.nylium.break");
+
     Sound BLOCK_NYLIUM_FALL = getSound("block.nylium.fall");
+
     Sound BLOCK_NYLIUM_HIT = getSound("block.nylium.hit");
+
     Sound BLOCK_NYLIUM_PLACE = getSound("block.nylium.place");
+
     Sound BLOCK_NYLIUM_STEP = getSound("block.nylium.step");
+
     Sound BLOCK_PACKED_MUD_BREAK = getSound("block.packed_mud.break");
+
     Sound BLOCK_PACKED_MUD_FALL = getSound("block.packed_mud.fall");
+
     Sound BLOCK_PACKED_MUD_HIT = getSound("block.packed_mud.hit");
+
     Sound BLOCK_PACKED_MUD_PLACE = getSound("block.packed_mud.place");
+
     Sound BLOCK_PACKED_MUD_STEP = getSound("block.packed_mud.step");
+
     Sound BLOCK_PALE_HANGING_MOSS_IDLE = getSound("block.pale_hanging_moss.idle");
+
     Sound BLOCK_PINK_PETALS_BREAK = getSound("block.pink_petals.break");
+
     Sound BLOCK_PINK_PETALS_FALL = getSound("block.pink_petals.fall");
+
     Sound BLOCK_PINK_PETALS_HIT = getSound("block.pink_petals.hit");
+
     Sound BLOCK_PINK_PETALS_PLACE = getSound("block.pink_petals.place");
+
     Sound BLOCK_PINK_PETALS_STEP = getSound("block.pink_petals.step");
+
     Sound BLOCK_PISTON_CONTRACT = getSound("block.piston.contract");
+
     Sound BLOCK_PISTON_EXTEND = getSound("block.piston.extend");
+
     Sound BLOCK_POINTED_DRIPSTONE_BREAK = getSound("block.pointed_dripstone.break");
+
     Sound BLOCK_POINTED_DRIPSTONE_DRIP_LAVA = getSound("block.pointed_dripstone.drip_lava");
+
     Sound BLOCK_POINTED_DRIPSTONE_DRIP_LAVA_INTO_CAULDRON = getSound("block.pointed_dripstone.drip_lava_into_cauldron");
+
     Sound BLOCK_POINTED_DRIPSTONE_DRIP_WATER = getSound("block.pointed_dripstone.drip_water");
+
     Sound BLOCK_POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON = getSound("block.pointed_dripstone.drip_water_into_cauldron");
+
     Sound BLOCK_POINTED_DRIPSTONE_FALL = getSound("block.pointed_dripstone.fall");
+
     Sound BLOCK_POINTED_DRIPSTONE_HIT = getSound("block.pointed_dripstone.hit");
+
     Sound BLOCK_POINTED_DRIPSTONE_LAND = getSound("block.pointed_dripstone.land");
+
     Sound BLOCK_POINTED_DRIPSTONE_PLACE = getSound("block.pointed_dripstone.place");
+
     Sound BLOCK_POINTED_DRIPSTONE_STEP = getSound("block.pointed_dripstone.step");
+
     Sound BLOCK_POLISHED_DEEPSLATE_BREAK = getSound("block.polished_deepslate.break");
+
     Sound BLOCK_POLISHED_DEEPSLATE_FALL = getSound("block.polished_deepslate.fall");
+
     Sound BLOCK_POLISHED_DEEPSLATE_HIT = getSound("block.polished_deepslate.hit");
+
     Sound BLOCK_POLISHED_DEEPSLATE_PLACE = getSound("block.polished_deepslate.place");
+
     Sound BLOCK_POLISHED_DEEPSLATE_STEP = getSound("block.polished_deepslate.step");
+
     Sound BLOCK_POLISHED_TUFF_BREAK = getSound("block.polished_tuff.break");
+
     Sound BLOCK_POLISHED_TUFF_FALL = getSound("block.polished_tuff.fall");
+
     Sound BLOCK_POLISHED_TUFF_HIT = getSound("block.polished_tuff.hit");
+
     Sound BLOCK_POLISHED_TUFF_PLACE = getSound("block.polished_tuff.place");
+
     Sound BLOCK_POLISHED_TUFF_STEP = getSound("block.polished_tuff.step");
+
     Sound BLOCK_PORTAL_AMBIENT = getSound("block.portal.ambient");
+
     Sound BLOCK_PORTAL_TRAVEL = getSound("block.portal.travel");
+
     Sound BLOCK_PORTAL_TRIGGER = getSound("block.portal.trigger");
+
     Sound BLOCK_POWDER_SNOW_BREAK = getSound("block.powder_snow.break");
+
     Sound BLOCK_POWDER_SNOW_FALL = getSound("block.powder_snow.fall");
+
     Sound BLOCK_POWDER_SNOW_HIT = getSound("block.powder_snow.hit");
+
     Sound BLOCK_POWDER_SNOW_PLACE = getSound("block.powder_snow.place");
+
     Sound BLOCK_POWDER_SNOW_STEP = getSound("block.powder_snow.step");
+
     Sound BLOCK_PUMPKIN_CARVE = getSound("block.pumpkin.carve");
+
     Sound BLOCK_REDSTONE_TORCH_BURNOUT = getSound("block.redstone_torch.burnout");
+
     Sound BLOCK_RESIN_BREAK = getSound("block.resin.break");
-    Sound BLOCK_RESIN_BRICKS_BREAK = getSound("block.resin_bricks.break");
-    Sound BLOCK_RESIN_BRICKS_FALL = getSound("block.resin_bricks.fall");
-    Sound BLOCK_RESIN_BRICKS_HIT = getSound("block.resin_bricks.hit");
-    Sound BLOCK_RESIN_BRICKS_PLACE = getSound("block.resin_bricks.place");
-    Sound BLOCK_RESIN_BRICKS_STEP = getSound("block.resin_bricks.step");
+
     Sound BLOCK_RESIN_FALL = getSound("block.resin.fall");
+
     Sound BLOCK_RESIN_PLACE = getSound("block.resin.place");
+
     Sound BLOCK_RESIN_STEP = getSound("block.resin.step");
+
+    Sound BLOCK_RESIN_BRICKS_BREAK = getSound("block.resin_bricks.break");
+
+    Sound BLOCK_RESIN_BRICKS_FALL = getSound("block.resin_bricks.fall");
+
+    Sound BLOCK_RESIN_BRICKS_HIT = getSound("block.resin_bricks.hit");
+
+    Sound BLOCK_RESIN_BRICKS_PLACE = getSound("block.resin_bricks.place");
+
+    Sound BLOCK_RESIN_BRICKS_STEP = getSound("block.resin_bricks.step");
+
     Sound BLOCK_RESPAWN_ANCHOR_AMBIENT = getSound("block.respawn_anchor.ambient");
+
     Sound BLOCK_RESPAWN_ANCHOR_CHARGE = getSound("block.respawn_anchor.charge");
+
     Sound BLOCK_RESPAWN_ANCHOR_DEPLETE = getSound("block.respawn_anchor.deplete");
+
     Sound BLOCK_RESPAWN_ANCHOR_SET_SPAWN = getSound("block.respawn_anchor.set_spawn");
+
     Sound BLOCK_ROOTED_DIRT_BREAK = getSound("block.rooted_dirt.break");
+
     Sound BLOCK_ROOTED_DIRT_FALL = getSound("block.rooted_dirt.fall");
+
     Sound BLOCK_ROOTED_DIRT_HIT = getSound("block.rooted_dirt.hit");
+
     Sound BLOCK_ROOTED_DIRT_PLACE = getSound("block.rooted_dirt.place");
+
     Sound BLOCK_ROOTED_DIRT_STEP = getSound("block.rooted_dirt.step");
+
     Sound BLOCK_ROOTS_BREAK = getSound("block.roots.break");
+
     Sound BLOCK_ROOTS_FALL = getSound("block.roots.fall");
+
     Sound BLOCK_ROOTS_HIT = getSound("block.roots.hit");
+
     Sound BLOCK_ROOTS_PLACE = getSound("block.roots.place");
+
     Sound BLOCK_ROOTS_STEP = getSound("block.roots.step");
+
     Sound BLOCK_SAND_BREAK = getSound("block.sand.break");
+
     Sound BLOCK_SAND_FALL = getSound("block.sand.fall");
+
     Sound BLOCK_SAND_HIT = getSound("block.sand.hit");
+
     Sound BLOCK_SAND_PLACE = getSound("block.sand.place");
+
     Sound BLOCK_SAND_STEP = getSound("block.sand.step");
+
     Sound BLOCK_SCAFFOLDING_BREAK = getSound("block.scaffolding.break");
+
     Sound BLOCK_SCAFFOLDING_FALL = getSound("block.scaffolding.fall");
+
     Sound BLOCK_SCAFFOLDING_HIT = getSound("block.scaffolding.hit");
+
     Sound BLOCK_SCAFFOLDING_PLACE = getSound("block.scaffolding.place");
+
     Sound BLOCK_SCAFFOLDING_STEP = getSound("block.scaffolding.step");
+
     Sound BLOCK_SCULK_BREAK = getSound("block.sculk.break");
-    Sound BLOCK_SCULK_CATALYST_BLOOM = getSound("block.sculk_catalyst.bloom");
-    Sound BLOCK_SCULK_CATALYST_BREAK = getSound("block.sculk_catalyst.break");
-    Sound BLOCK_SCULK_CATALYST_FALL = getSound("block.sculk_catalyst.fall");
-    Sound BLOCK_SCULK_CATALYST_HIT = getSound("block.sculk_catalyst.hit");
-    Sound BLOCK_SCULK_CATALYST_PLACE = getSound("block.sculk_catalyst.place");
-    Sound BLOCK_SCULK_CATALYST_STEP = getSound("block.sculk_catalyst.step");
+
     Sound BLOCK_SCULK_CHARGE = getSound("block.sculk.charge");
+
     Sound BLOCK_SCULK_FALL = getSound("block.sculk.fall");
+
     Sound BLOCK_SCULK_HIT = getSound("block.sculk.hit");
+
     Sound BLOCK_SCULK_PLACE = getSound("block.sculk.place");
-    Sound BLOCK_SCULK_SENSOR_BREAK = getSound("block.sculk_sensor.break");
-    Sound BLOCK_SCULK_SENSOR_CLICKING = getSound("block.sculk_sensor.clicking");
-    Sound BLOCK_SCULK_SENSOR_CLICKING_STOP = getSound("block.sculk_sensor.clicking_stop");
-    Sound BLOCK_SCULK_SENSOR_FALL = getSound("block.sculk_sensor.fall");
-    Sound BLOCK_SCULK_SENSOR_HIT = getSound("block.sculk_sensor.hit");
-    Sound BLOCK_SCULK_SENSOR_PLACE = getSound("block.sculk_sensor.place");
-    Sound BLOCK_SCULK_SENSOR_STEP = getSound("block.sculk_sensor.step");
-    Sound BLOCK_SCULK_SHRIEKER_BREAK = getSound("block.sculk_shrieker.break");
-    Sound BLOCK_SCULK_SHRIEKER_FALL = getSound("block.sculk_shrieker.fall");
-    Sound BLOCK_SCULK_SHRIEKER_HIT = getSound("block.sculk_shrieker.hit");
-    Sound BLOCK_SCULK_SHRIEKER_PLACE = getSound("block.sculk_shrieker.place");
-    Sound BLOCK_SCULK_SHRIEKER_SHRIEK = getSound("block.sculk_shrieker.shriek");
-    Sound BLOCK_SCULK_SHRIEKER_STEP = getSound("block.sculk_shrieker.step");
+
     Sound BLOCK_SCULK_SPREAD = getSound("block.sculk.spread");
+
     Sound BLOCK_SCULK_STEP = getSound("block.sculk.step");
+
+    Sound BLOCK_SCULK_CATALYST_BLOOM = getSound("block.sculk_catalyst.bloom");
+
+    Sound BLOCK_SCULK_CATALYST_BREAK = getSound("block.sculk_catalyst.break");
+
+    Sound BLOCK_SCULK_CATALYST_FALL = getSound("block.sculk_catalyst.fall");
+
+    Sound BLOCK_SCULK_CATALYST_HIT = getSound("block.sculk_catalyst.hit");
+
+    Sound BLOCK_SCULK_CATALYST_PLACE = getSound("block.sculk_catalyst.place");
+
+    Sound BLOCK_SCULK_CATALYST_STEP = getSound("block.sculk_catalyst.step");
+
+    Sound BLOCK_SCULK_SENSOR_BREAK = getSound("block.sculk_sensor.break");
+
+    Sound BLOCK_SCULK_SENSOR_CLICKING = getSound("block.sculk_sensor.clicking");
+
+    Sound BLOCK_SCULK_SENSOR_CLICKING_STOP = getSound("block.sculk_sensor.clicking_stop");
+
+    Sound BLOCK_SCULK_SENSOR_FALL = getSound("block.sculk_sensor.fall");
+
+    Sound BLOCK_SCULK_SENSOR_HIT = getSound("block.sculk_sensor.hit");
+
+    Sound BLOCK_SCULK_SENSOR_PLACE = getSound("block.sculk_sensor.place");
+
+    Sound BLOCK_SCULK_SENSOR_STEP = getSound("block.sculk_sensor.step");
+
+    Sound BLOCK_SCULK_SHRIEKER_BREAK = getSound("block.sculk_shrieker.break");
+
+    Sound BLOCK_SCULK_SHRIEKER_FALL = getSound("block.sculk_shrieker.fall");
+
+    Sound BLOCK_SCULK_SHRIEKER_HIT = getSound("block.sculk_shrieker.hit");
+
+    Sound BLOCK_SCULK_SHRIEKER_PLACE = getSound("block.sculk_shrieker.place");
+
+    Sound BLOCK_SCULK_SHRIEKER_SHRIEK = getSound("block.sculk_shrieker.shriek");
+
+    Sound BLOCK_SCULK_SHRIEKER_STEP = getSound("block.sculk_shrieker.step");
+
     Sound BLOCK_SCULK_VEIN_BREAK = getSound("block.sculk_vein.break");
+
     Sound BLOCK_SCULK_VEIN_FALL = getSound("block.sculk_vein.fall");
+
     Sound BLOCK_SCULK_VEIN_HIT = getSound("block.sculk_vein.hit");
+
     Sound BLOCK_SCULK_VEIN_PLACE = getSound("block.sculk_vein.place");
+
     Sound BLOCK_SCULK_VEIN_STEP = getSound("block.sculk_vein.step");
+
     Sound BLOCK_SHROOMLIGHT_BREAK = getSound("block.shroomlight.break");
+
     Sound BLOCK_SHROOMLIGHT_FALL = getSound("block.shroomlight.fall");
+
     Sound BLOCK_SHROOMLIGHT_HIT = getSound("block.shroomlight.hit");
+
     Sound BLOCK_SHROOMLIGHT_PLACE = getSound("block.shroomlight.place");
+
     Sound BLOCK_SHROOMLIGHT_STEP = getSound("block.shroomlight.step");
+
     Sound BLOCK_SHULKER_BOX_CLOSE = getSound("block.shulker_box.close");
+
     Sound BLOCK_SHULKER_BOX_OPEN = getSound("block.shulker_box.open");
+
     Sound BLOCK_SIGN_WAXED_INTERACT_FAIL = getSound("block.sign.waxed_interact_fail");
+
     Sound BLOCK_SLIME_BLOCK_BREAK = getSound("block.slime_block.break");
+
     Sound BLOCK_SLIME_BLOCK_FALL = getSound("block.slime_block.fall");
+
     Sound BLOCK_SLIME_BLOCK_HIT = getSound("block.slime_block.hit");
+
     Sound BLOCK_SLIME_BLOCK_PLACE = getSound("block.slime_block.place");
+
     Sound BLOCK_SLIME_BLOCK_STEP = getSound("block.slime_block.step");
+
     Sound BLOCK_SMALL_AMETHYST_BUD_BREAK = getSound("block.small_amethyst_bud.break");
+
     Sound BLOCK_SMALL_AMETHYST_BUD_PLACE = getSound("block.small_amethyst_bud.place");
+
     Sound BLOCK_SMALL_DRIPLEAF_BREAK = getSound("block.small_dripleaf.break");
+
     Sound BLOCK_SMALL_DRIPLEAF_FALL = getSound("block.small_dripleaf.fall");
+
     Sound BLOCK_SMALL_DRIPLEAF_HIT = getSound("block.small_dripleaf.hit");
+
     Sound BLOCK_SMALL_DRIPLEAF_PLACE = getSound("block.small_dripleaf.place");
+
     Sound BLOCK_SMALL_DRIPLEAF_STEP = getSound("block.small_dripleaf.step");
+
     Sound BLOCK_SMITHING_TABLE_USE = getSound("block.smithing_table.use");
+
     Sound BLOCK_SMOKER_SMOKE = getSound("block.smoker.smoke");
+
     Sound BLOCK_SNIFFER_EGG_CRACK = getSound("block.sniffer_egg.crack");
+
     Sound BLOCK_SNIFFER_EGG_HATCH = getSound("block.sniffer_egg.hatch");
+
     Sound BLOCK_SNIFFER_EGG_PLOP = getSound("block.sniffer_egg.plop");
+
     Sound BLOCK_SNOW_BREAK = getSound("block.snow.break");
+
     Sound BLOCK_SNOW_FALL = getSound("block.snow.fall");
+
     Sound BLOCK_SNOW_HIT = getSound("block.snow.hit");
+
     Sound BLOCK_SNOW_PLACE = getSound("block.snow.place");
+
     Sound BLOCK_SNOW_STEP = getSound("block.snow.step");
+
     Sound BLOCK_SOUL_SAND_BREAK = getSound("block.soul_sand.break");
+
     Sound BLOCK_SOUL_SAND_FALL = getSound("block.soul_sand.fall");
+
     Sound BLOCK_SOUL_SAND_HIT = getSound("block.soul_sand.hit");
+
     Sound BLOCK_SOUL_SAND_PLACE = getSound("block.soul_sand.place");
+
     Sound BLOCK_SOUL_SAND_STEP = getSound("block.soul_sand.step");
+
     Sound BLOCK_SOUL_SOIL_BREAK = getSound("block.soul_soil.break");
+
     Sound BLOCK_SOUL_SOIL_FALL = getSound("block.soul_soil.fall");
+
     Sound BLOCK_SOUL_SOIL_HIT = getSound("block.soul_soil.hit");
+
     Sound BLOCK_SOUL_SOIL_PLACE = getSound("block.soul_soil.place");
+
     Sound BLOCK_SOUL_SOIL_STEP = getSound("block.soul_soil.step");
+
     Sound BLOCK_SPAWNER_BREAK = getSound("block.spawner.break");
+
     Sound BLOCK_SPAWNER_FALL = getSound("block.spawner.fall");
+
     Sound BLOCK_SPAWNER_HIT = getSound("block.spawner.hit");
+
     Sound BLOCK_SPAWNER_PLACE = getSound("block.spawner.place");
+
     Sound BLOCK_SPAWNER_STEP = getSound("block.spawner.step");
+
     Sound BLOCK_SPONGE_ABSORB = getSound("block.sponge.absorb");
+
     Sound BLOCK_SPONGE_BREAK = getSound("block.sponge.break");
+
     Sound BLOCK_SPONGE_FALL = getSound("block.sponge.fall");
+
     Sound BLOCK_SPONGE_HIT = getSound("block.sponge.hit");
+
     Sound BLOCK_SPONGE_PLACE = getSound("block.sponge.place");
+
     Sound BLOCK_SPONGE_STEP = getSound("block.sponge.step");
+
     Sound BLOCK_SPORE_BLOSSOM_BREAK = getSound("block.spore_blossom.break");
+
     Sound BLOCK_SPORE_BLOSSOM_FALL = getSound("block.spore_blossom.fall");
+
     Sound BLOCK_SPORE_BLOSSOM_HIT = getSound("block.spore_blossom.hit");
+
     Sound BLOCK_SPORE_BLOSSOM_PLACE = getSound("block.spore_blossom.place");
+
     Sound BLOCK_SPORE_BLOSSOM_STEP = getSound("block.spore_blossom.step");
+
     Sound BLOCK_STEM_BREAK = getSound("block.stem.break");
+
     Sound BLOCK_STEM_FALL = getSound("block.stem.fall");
+
     Sound BLOCK_STEM_HIT = getSound("block.stem.hit");
+
     Sound BLOCK_STEM_PLACE = getSound("block.stem.place");
+
     Sound BLOCK_STEM_STEP = getSound("block.stem.step");
+
     Sound BLOCK_STONE_BREAK = getSound("block.stone.break");
-    Sound BLOCK_STONE_BUTTON_CLICK_OFF = getSound("block.stone_button.click_off");
-    Sound BLOCK_STONE_BUTTON_CLICK_ON = getSound("block.stone_button.click_on");
+
     Sound BLOCK_STONE_FALL = getSound("block.stone.fall");
+
     Sound BLOCK_STONE_HIT = getSound("block.stone.hit");
+
     Sound BLOCK_STONE_PLACE = getSound("block.stone.place");
-    Sound BLOCK_STONE_PRESSURE_PLATE_CLICK_OFF = getSound("block.stone_pressure_plate.click_off");
-    Sound BLOCK_STONE_PRESSURE_PLATE_CLICK_ON = getSound("block.stone_pressure_plate.click_on");
+
     Sound BLOCK_STONE_STEP = getSound("block.stone.step");
+
+    Sound BLOCK_STONE_BUTTON_CLICK_OFF = getSound("block.stone_button.click_off");
+
+    Sound BLOCK_STONE_BUTTON_CLICK_ON = getSound("block.stone_button.click_on");
+
+    Sound BLOCK_STONE_PRESSURE_PLATE_CLICK_OFF = getSound("block.stone_pressure_plate.click_off");
+
+    Sound BLOCK_STONE_PRESSURE_PLATE_CLICK_ON = getSound("block.stone_pressure_plate.click_on");
+
     Sound BLOCK_SUSPICIOUS_GRAVEL_BREAK = getSound("block.suspicious_gravel.break");
+
     Sound BLOCK_SUSPICIOUS_GRAVEL_FALL = getSound("block.suspicious_gravel.fall");
+
     Sound BLOCK_SUSPICIOUS_GRAVEL_HIT = getSound("block.suspicious_gravel.hit");
+
     Sound BLOCK_SUSPICIOUS_GRAVEL_PLACE = getSound("block.suspicious_gravel.place");
+
     Sound BLOCK_SUSPICIOUS_GRAVEL_STEP = getSound("block.suspicious_gravel.step");
+
     Sound BLOCK_SUSPICIOUS_SAND_BREAK = getSound("block.suspicious_sand.break");
+
     Sound BLOCK_SUSPICIOUS_SAND_FALL = getSound("block.suspicious_sand.fall");
+
     Sound BLOCK_SUSPICIOUS_SAND_HIT = getSound("block.suspicious_sand.hit");
+
     Sound BLOCK_SUSPICIOUS_SAND_PLACE = getSound("block.suspicious_sand.place");
+
     Sound BLOCK_SUSPICIOUS_SAND_STEP = getSound("block.suspicious_sand.step");
+
     Sound BLOCK_SWEET_BERRY_BUSH_BREAK = getSound("block.sweet_berry_bush.break");
+
     Sound BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES = getSound("block.sweet_berry_bush.pick_berries");
+
     Sound BLOCK_SWEET_BERRY_BUSH_PLACE = getSound("block.sweet_berry_bush.place");
+
     Sound BLOCK_TRIAL_SPAWNER_ABOUT_TO_SPAWN_ITEM = getSound("block.trial_spawner.about_to_spawn_item");
+
     Sound BLOCK_TRIAL_SPAWNER_AMBIENT = getSound("block.trial_spawner.ambient");
+
     Sound BLOCK_TRIAL_SPAWNER_AMBIENT_OMINOUS = getSound("block.trial_spawner.ambient_ominous");
+
     Sound BLOCK_TRIAL_SPAWNER_BREAK = getSound("block.trial_spawner.break");
+
     Sound BLOCK_TRIAL_SPAWNER_CLOSE_SHUTTER = getSound("block.trial_spawner.close_shutter");
+
     Sound BLOCK_TRIAL_SPAWNER_DETECT_PLAYER = getSound("block.trial_spawner.detect_player");
+
     Sound BLOCK_TRIAL_SPAWNER_EJECT_ITEM = getSound("block.trial_spawner.eject_item");
+
     Sound BLOCK_TRIAL_SPAWNER_FALL = getSound("block.trial_spawner.fall");
+
     Sound BLOCK_TRIAL_SPAWNER_HIT = getSound("block.trial_spawner.hit");
+
     Sound BLOCK_TRIAL_SPAWNER_OMINOUS_ACTIVATE = getSound("block.trial_spawner.ominous_activate");
+
     Sound BLOCK_TRIAL_SPAWNER_OPEN_SHUTTER = getSound("block.trial_spawner.open_shutter");
+
     Sound BLOCK_TRIAL_SPAWNER_PLACE = getSound("block.trial_spawner.place");
+
     Sound BLOCK_TRIAL_SPAWNER_SPAWN_ITEM = getSound("block.trial_spawner.spawn_item");
+
     Sound BLOCK_TRIAL_SPAWNER_SPAWN_ITEM_BEGIN = getSound("block.trial_spawner.spawn_item_begin");
+
     Sound BLOCK_TRIAL_SPAWNER_SPAWN_MOB = getSound("block.trial_spawner.spawn_mob");
+
     Sound BLOCK_TRIAL_SPAWNER_STEP = getSound("block.trial_spawner.step");
+
     Sound BLOCK_TRIPWIRE_ATTACH = getSound("block.tripwire.attach");
+
     Sound BLOCK_TRIPWIRE_CLICK_OFF = getSound("block.tripwire.click_off");
+
     Sound BLOCK_TRIPWIRE_CLICK_ON = getSound("block.tripwire.click_on");
+
     Sound BLOCK_TRIPWIRE_DETACH = getSound("block.tripwire.detach");
+
     Sound BLOCK_TUFF_BREAK = getSound("block.tuff.break");
-    Sound BLOCK_TUFF_BRICKS_BREAK = getSound("block.tuff_bricks.break");
-    Sound BLOCK_TUFF_BRICKS_FALL = getSound("block.tuff_bricks.fall");
-    Sound BLOCK_TUFF_BRICKS_HIT = getSound("block.tuff_bricks.hit");
-    Sound BLOCK_TUFF_BRICKS_PLACE = getSound("block.tuff_bricks.place");
-    Sound BLOCK_TUFF_BRICKS_STEP = getSound("block.tuff_bricks.step");
+
     Sound BLOCK_TUFF_FALL = getSound("block.tuff.fall");
+
     Sound BLOCK_TUFF_HIT = getSound("block.tuff.hit");
+
     Sound BLOCK_TUFF_PLACE = getSound("block.tuff.place");
+
     Sound BLOCK_TUFF_STEP = getSound("block.tuff.step");
+
+    Sound BLOCK_TUFF_BRICKS_BREAK = getSound("block.tuff_bricks.break");
+
+    Sound BLOCK_TUFF_BRICKS_FALL = getSound("block.tuff_bricks.fall");
+
+    Sound BLOCK_TUFF_BRICKS_HIT = getSound("block.tuff_bricks.hit");
+
+    Sound BLOCK_TUFF_BRICKS_PLACE = getSound("block.tuff_bricks.place");
+
+    Sound BLOCK_TUFF_BRICKS_STEP = getSound("block.tuff_bricks.step");
+
     Sound BLOCK_VAULT_ACTIVATE = getSound("block.vault.activate");
+
     Sound BLOCK_VAULT_AMBIENT = getSound("block.vault.ambient");
+
     Sound BLOCK_VAULT_BREAK = getSound("block.vault.break");
+
     Sound BLOCK_VAULT_CLOSE_SHUTTER = getSound("block.vault.close_shutter");
+
     Sound BLOCK_VAULT_DEACTIVATE = getSound("block.vault.deactivate");
+
     Sound BLOCK_VAULT_EJECT_ITEM = getSound("block.vault.eject_item");
+
     Sound BLOCK_VAULT_FALL = getSound("block.vault.fall");
+
     Sound BLOCK_VAULT_HIT = getSound("block.vault.hit");
+
     Sound BLOCK_VAULT_INSERT_ITEM = getSound("block.vault.insert_item");
+
     Sound BLOCK_VAULT_INSERT_ITEM_FAIL = getSound("block.vault.insert_item_fail");
+
     Sound BLOCK_VAULT_OPEN_SHUTTER = getSound("block.vault.open_shutter");
+
     Sound BLOCK_VAULT_PLACE = getSound("block.vault.place");
+
     Sound BLOCK_VAULT_REJECT_REWARDED_PLAYER = getSound("block.vault.reject_rewarded_player");
+
     Sound BLOCK_VAULT_STEP = getSound("block.vault.step");
+
     Sound BLOCK_VINE_BREAK = getSound("block.vine.break");
+
     Sound BLOCK_VINE_FALL = getSound("block.vine.fall");
+
     Sound BLOCK_VINE_HIT = getSound("block.vine.hit");
+
     Sound BLOCK_VINE_PLACE = getSound("block.vine.place");
+
     Sound BLOCK_VINE_STEP = getSound("block.vine.step");
+
     Sound BLOCK_WART_BLOCK_BREAK = getSound("block.wart_block.break");
+
     Sound BLOCK_WART_BLOCK_FALL = getSound("block.wart_block.fall");
+
     Sound BLOCK_WART_BLOCK_HIT = getSound("block.wart_block.hit");
+
     Sound BLOCK_WART_BLOCK_PLACE = getSound("block.wart_block.place");
+
     Sound BLOCK_WART_BLOCK_STEP = getSound("block.wart_block.step");
+
     Sound BLOCK_WATER_AMBIENT = getSound("block.water.ambient");
+
     Sound BLOCK_WEEPING_VINES_BREAK = getSound("block.weeping_vines.break");
+
     Sound BLOCK_WEEPING_VINES_FALL = getSound("block.weeping_vines.fall");
+
     Sound BLOCK_WEEPING_VINES_HIT = getSound("block.weeping_vines.hit");
+
     Sound BLOCK_WEEPING_VINES_PLACE = getSound("block.weeping_vines.place");
+
     Sound BLOCK_WEEPING_VINES_STEP = getSound("block.weeping_vines.step");
+
     Sound BLOCK_WET_GRASS_BREAK = getSound("block.wet_grass.break");
+
     Sound BLOCK_WET_GRASS_FALL = getSound("block.wet_grass.fall");
+
     Sound BLOCK_WET_GRASS_HIT = getSound("block.wet_grass.hit");
+
     Sound BLOCK_WET_GRASS_PLACE = getSound("block.wet_grass.place");
+
     Sound BLOCK_WET_GRASS_STEP = getSound("block.wet_grass.step");
+
     Sound BLOCK_WET_SPONGE_BREAK = getSound("block.wet_sponge.break");
+
     Sound BLOCK_WET_SPONGE_DRIES = getSound("block.wet_sponge.dries");
+
     Sound BLOCK_WET_SPONGE_FALL = getSound("block.wet_sponge.fall");
+
     Sound BLOCK_WET_SPONGE_HIT = getSound("block.wet_sponge.hit");
+
     Sound BLOCK_WET_SPONGE_PLACE = getSound("block.wet_sponge.place");
+
     Sound BLOCK_WET_SPONGE_STEP = getSound("block.wet_sponge.step");
-    Sound BLOCK_WOODEN_BUTTON_CLICK_OFF = getSound("block.wooden_button.click_off");
-    Sound BLOCK_WOODEN_BUTTON_CLICK_ON = getSound("block.wooden_button.click_on");
-    Sound BLOCK_WOODEN_DOOR_CLOSE = getSound("block.wooden_door.close");
-    Sound BLOCK_WOODEN_DOOR_OPEN = getSound("block.wooden_door.open");
-    Sound BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF = getSound("block.wooden_pressure_plate.click_off");
-    Sound BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON = getSound("block.wooden_pressure_plate.click_on");
-    Sound BLOCK_WOODEN_TRAPDOOR_CLOSE = getSound("block.wooden_trapdoor.close");
-    Sound BLOCK_WOODEN_TRAPDOOR_OPEN = getSound("block.wooden_trapdoor.open");
+
     Sound BLOCK_WOOD_BREAK = getSound("block.wood.break");
+
     Sound BLOCK_WOOD_FALL = getSound("block.wood.fall");
+
     Sound BLOCK_WOOD_HIT = getSound("block.wood.hit");
+
     Sound BLOCK_WOOD_PLACE = getSound("block.wood.place");
+
     Sound BLOCK_WOOD_STEP = getSound("block.wood.step");
+
+    Sound BLOCK_WOODEN_BUTTON_CLICK_OFF = getSound("block.wooden_button.click_off");
+
+    Sound BLOCK_WOODEN_BUTTON_CLICK_ON = getSound("block.wooden_button.click_on");
+
+    Sound BLOCK_WOODEN_DOOR_CLOSE = getSound("block.wooden_door.close");
+
+    Sound BLOCK_WOODEN_DOOR_OPEN = getSound("block.wooden_door.open");
+
+    Sound BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF = getSound("block.wooden_pressure_plate.click_off");
+
+    Sound BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON = getSound("block.wooden_pressure_plate.click_on");
+
+    Sound BLOCK_WOODEN_TRAPDOOR_CLOSE = getSound("block.wooden_trapdoor.close");
+
+    Sound BLOCK_WOODEN_TRAPDOOR_OPEN = getSound("block.wooden_trapdoor.open");
+
     Sound BLOCK_WOOL_BREAK = getSound("block.wool.break");
+
     Sound BLOCK_WOOL_FALL = getSound("block.wool.fall");
+
     Sound BLOCK_WOOL_HIT = getSound("block.wool.hit");
+
     Sound BLOCK_WOOL_PLACE = getSound("block.wool.place");
+
     Sound BLOCK_WOOL_STEP = getSound("block.wool.step");
+
     Sound ENCHANT_THORNS_HIT = getSound("enchant.thorns.hit");
-    Sound ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM = getSound("entity.allay.ambient_without_item");
+
     Sound ENTITY_ALLAY_AMBIENT_WITH_ITEM = getSound("entity.allay.ambient_with_item");
+
+    Sound ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM = getSound("entity.allay.ambient_without_item");
+
     Sound ENTITY_ALLAY_DEATH = getSound("entity.allay.death");
+
     Sound ENTITY_ALLAY_HURT = getSound("entity.allay.hurt");
+
     Sound ENTITY_ALLAY_ITEM_GIVEN = getSound("entity.allay.item_given");
+
     Sound ENTITY_ALLAY_ITEM_TAKEN = getSound("entity.allay.item_taken");
+
     Sound ENTITY_ALLAY_ITEM_THROWN = getSound("entity.allay.item_thrown");
+
     Sound ENTITY_ARMADILLO_AMBIENT = getSound("entity.armadillo.ambient");
+
     Sound ENTITY_ARMADILLO_BRUSH = getSound("entity.armadillo.brush");
+
     Sound ENTITY_ARMADILLO_DEATH = getSound("entity.armadillo.death");
+
     Sound ENTITY_ARMADILLO_EAT = getSound("entity.armadillo.eat");
+
     Sound ENTITY_ARMADILLO_HURT = getSound("entity.armadillo.hurt");
+
     Sound ENTITY_ARMADILLO_HURT_REDUCED = getSound("entity.armadillo.hurt_reduced");
+
     Sound ENTITY_ARMADILLO_LAND = getSound("entity.armadillo.land");
+
     Sound ENTITY_ARMADILLO_PEEK = getSound("entity.armadillo.peek");
+
     Sound ENTITY_ARMADILLO_ROLL = getSound("entity.armadillo.roll");
+
     Sound ENTITY_ARMADILLO_SCUTE_DROP = getSound("entity.armadillo.scute_drop");
+
     Sound ENTITY_ARMADILLO_STEP = getSound("entity.armadillo.step");
+
     Sound ENTITY_ARMADILLO_UNROLL_FINISH = getSound("entity.armadillo.unroll_finish");
+
     Sound ENTITY_ARMADILLO_UNROLL_START = getSound("entity.armadillo.unroll_start");
+
     Sound ENTITY_ARMOR_STAND_BREAK = getSound("entity.armor_stand.break");
+
     Sound ENTITY_ARMOR_STAND_FALL = getSound("entity.armor_stand.fall");
+
     Sound ENTITY_ARMOR_STAND_HIT = getSound("entity.armor_stand.hit");
+
     Sound ENTITY_ARMOR_STAND_PLACE = getSound("entity.armor_stand.place");
+
     Sound ENTITY_ARROW_HIT = getSound("entity.arrow.hit");
+
     Sound ENTITY_ARROW_HIT_PLAYER = getSound("entity.arrow.hit_player");
+
     Sound ENTITY_ARROW_SHOOT = getSound("entity.arrow.shoot");
+
     Sound ENTITY_AXOLOTL_ATTACK = getSound("entity.axolotl.attack");
+
     Sound ENTITY_AXOLOTL_DEATH = getSound("entity.axolotl.death");
+
     Sound ENTITY_AXOLOTL_HURT = getSound("entity.axolotl.hurt");
+
     Sound ENTITY_AXOLOTL_IDLE_AIR = getSound("entity.axolotl.idle_air");
+
     Sound ENTITY_AXOLOTL_IDLE_WATER = getSound("entity.axolotl.idle_water");
+
     Sound ENTITY_AXOLOTL_SPLASH = getSound("entity.axolotl.splash");
+
     Sound ENTITY_AXOLOTL_SWIM = getSound("entity.axolotl.swim");
+
     Sound ENTITY_BAT_AMBIENT = getSound("entity.bat.ambient");
+
     Sound ENTITY_BAT_DEATH = getSound("entity.bat.death");
+
     Sound ENTITY_BAT_HURT = getSound("entity.bat.hurt");
+
     Sound ENTITY_BAT_LOOP = getSound("entity.bat.loop");
+
     Sound ENTITY_BAT_TAKEOFF = getSound("entity.bat.takeoff");
+
     Sound ENTITY_BEE_DEATH = getSound("entity.bee.death");
+
     Sound ENTITY_BEE_HURT = getSound("entity.bee.hurt");
+
     Sound ENTITY_BEE_LOOP = getSound("entity.bee.loop");
+
     Sound ENTITY_BEE_LOOP_AGGRESSIVE = getSound("entity.bee.loop_aggressive");
+
     Sound ENTITY_BEE_POLLINATE = getSound("entity.bee.pollinate");
+
     Sound ENTITY_BEE_STING = getSound("entity.bee.sting");
+
     Sound ENTITY_BLAZE_AMBIENT = getSound("entity.blaze.ambient");
+
     Sound ENTITY_BLAZE_BURN = getSound("entity.blaze.burn");
+
     Sound ENTITY_BLAZE_DEATH = getSound("entity.blaze.death");
+
     Sound ENTITY_BLAZE_HURT = getSound("entity.blaze.hurt");
+
     Sound ENTITY_BLAZE_SHOOT = getSound("entity.blaze.shoot");
+
     Sound ENTITY_BOAT_PADDLE_LAND = getSound("entity.boat.paddle_land");
+
     Sound ENTITY_BOAT_PADDLE_WATER = getSound("entity.boat.paddle_water");
+
     Sound ENTITY_BOGGED_AMBIENT = getSound("entity.bogged.ambient");
+
     Sound ENTITY_BOGGED_DEATH = getSound("entity.bogged.death");
+
     Sound ENTITY_BOGGED_HURT = getSound("entity.bogged.hurt");
+
     Sound ENTITY_BOGGED_SHEAR = getSound("entity.bogged.shear");
+
     Sound ENTITY_BOGGED_STEP = getSound("entity.bogged.step");
+
     Sound ENTITY_BREEZE_CHARGE = getSound("entity.breeze.charge");
+
     Sound ENTITY_BREEZE_DEATH = getSound("entity.breeze.death");
+
     Sound ENTITY_BREEZE_DEFLECT = getSound("entity.breeze.deflect");
+
     Sound ENTITY_BREEZE_HURT = getSound("entity.breeze.hurt");
+
     Sound ENTITY_BREEZE_IDLE_AIR = getSound("entity.breeze.idle_air");
+
     Sound ENTITY_BREEZE_IDLE_GROUND = getSound("entity.breeze.idle_ground");
+
     Sound ENTITY_BREEZE_INHALE = getSound("entity.breeze.inhale");
+
     Sound ENTITY_BREEZE_JUMP = getSound("entity.breeze.jump");
+
     Sound ENTITY_BREEZE_LAND = getSound("entity.breeze.land");
+
     Sound ENTITY_BREEZE_SHOOT = getSound("entity.breeze.shoot");
+
     Sound ENTITY_BREEZE_SLIDE = getSound("entity.breeze.slide");
+
     Sound ENTITY_BREEZE_WHIRL = getSound("entity.breeze.whirl");
+
     Sound ENTITY_BREEZE_WIND_BURST = getSound("entity.breeze.wind_burst");
+
     Sound ENTITY_CAMEL_AMBIENT = getSound("entity.camel.ambient");
+
     Sound ENTITY_CAMEL_DASH = getSound("entity.camel.dash");
+
     Sound ENTITY_CAMEL_DASH_READY = getSound("entity.camel.dash_ready");
+
     Sound ENTITY_CAMEL_DEATH = getSound("entity.camel.death");
+
     Sound ENTITY_CAMEL_EAT = getSound("entity.camel.eat");
+
     Sound ENTITY_CAMEL_HURT = getSound("entity.camel.hurt");
+
     Sound ENTITY_CAMEL_SADDLE = getSound("entity.camel.saddle");
+
     Sound ENTITY_CAMEL_SIT = getSound("entity.camel.sit");
+
     Sound ENTITY_CAMEL_STAND = getSound("entity.camel.stand");
+
     Sound ENTITY_CAMEL_STEP = getSound("entity.camel.step");
+
     Sound ENTITY_CAMEL_STEP_SAND = getSound("entity.camel.step_sand");
+
     Sound ENTITY_CAT_AMBIENT = getSound("entity.cat.ambient");
+
     Sound ENTITY_CAT_BEG_FOR_FOOD = getSound("entity.cat.beg_for_food");
+
     Sound ENTITY_CAT_DEATH = getSound("entity.cat.death");
+
     Sound ENTITY_CAT_EAT = getSound("entity.cat.eat");
+
     Sound ENTITY_CAT_HISS = getSound("entity.cat.hiss");
+
     Sound ENTITY_CAT_HURT = getSound("entity.cat.hurt");
+
     Sound ENTITY_CAT_PURR = getSound("entity.cat.purr");
+
     Sound ENTITY_CAT_PURREOW = getSound("entity.cat.purreow");
+
     Sound ENTITY_CAT_STRAY_AMBIENT = getSound("entity.cat.stray_ambient");
+
     Sound ENTITY_CHICKEN_AMBIENT = getSound("entity.chicken.ambient");
+
     Sound ENTITY_CHICKEN_DEATH = getSound("entity.chicken.death");
+
     Sound ENTITY_CHICKEN_EGG = getSound("entity.chicken.egg");
+
     Sound ENTITY_CHICKEN_HURT = getSound("entity.chicken.hurt");
+
     Sound ENTITY_CHICKEN_STEP = getSound("entity.chicken.step");
+
     Sound ENTITY_COD_AMBIENT = getSound("entity.cod.ambient");
+
     Sound ENTITY_COD_DEATH = getSound("entity.cod.death");
+
     Sound ENTITY_COD_FLOP = getSound("entity.cod.flop");
+
     Sound ENTITY_COD_HURT = getSound("entity.cod.hurt");
+
     Sound ENTITY_COW_AMBIENT = getSound("entity.cow.ambient");
+
     Sound ENTITY_COW_DEATH = getSound("entity.cow.death");
+
     Sound ENTITY_COW_HURT = getSound("entity.cow.hurt");
+
     Sound ENTITY_COW_MILK = getSound("entity.cow.milk");
+
     Sound ENTITY_COW_STEP = getSound("entity.cow.step");
+
     Sound ENTITY_CREAKING_ACTIVATE = getSound("entity.creaking.activate");
+
     Sound ENTITY_CREAKING_AMBIENT = getSound("entity.creaking.ambient");
+
     Sound ENTITY_CREAKING_ATTACK = getSound("entity.creaking.attack");
+
     Sound ENTITY_CREAKING_DEACTIVATE = getSound("entity.creaking.deactivate");
+
     Sound ENTITY_CREAKING_DEATH = getSound("entity.creaking.death");
+
     Sound ENTITY_CREAKING_FREEZE = getSound("entity.creaking.freeze");
+
     Sound ENTITY_CREAKING_SPAWN = getSound("entity.creaking.spawn");
+
     Sound ENTITY_CREAKING_STEP = getSound("entity.creaking.step");
+
     Sound ENTITY_CREAKING_SWAY = getSound("entity.creaking.sway");
+
     Sound ENTITY_CREAKING_TWITCH = getSound("entity.creaking.twitch");
+
     Sound ENTITY_CREAKING_UNFREEZE = getSound("entity.creaking.unfreeze");
+
     Sound ENTITY_CREEPER_DEATH = getSound("entity.creeper.death");
+
     Sound ENTITY_CREEPER_HURT = getSound("entity.creeper.hurt");
+
     Sound ENTITY_CREEPER_PRIMED = getSound("entity.creeper.primed");
+
     Sound ENTITY_DOLPHIN_AMBIENT = getSound("entity.dolphin.ambient");
+
     Sound ENTITY_DOLPHIN_AMBIENT_WATER = getSound("entity.dolphin.ambient_water");
+
     Sound ENTITY_DOLPHIN_ATTACK = getSound("entity.dolphin.attack");
+
     Sound ENTITY_DOLPHIN_DEATH = getSound("entity.dolphin.death");
+
     Sound ENTITY_DOLPHIN_EAT = getSound("entity.dolphin.eat");
+
     Sound ENTITY_DOLPHIN_HURT = getSound("entity.dolphin.hurt");
+
     Sound ENTITY_DOLPHIN_JUMP = getSound("entity.dolphin.jump");
+
     Sound ENTITY_DOLPHIN_PLAY = getSound("entity.dolphin.play");
+
     Sound ENTITY_DOLPHIN_SPLASH = getSound("entity.dolphin.splash");
+
     Sound ENTITY_DOLPHIN_SWIM = getSound("entity.dolphin.swim");
+
     Sound ENTITY_DONKEY_AMBIENT = getSound("entity.donkey.ambient");
+
     Sound ENTITY_DONKEY_ANGRY = getSound("entity.donkey.angry");
+
     Sound ENTITY_DONKEY_CHEST = getSound("entity.donkey.chest");
+
     Sound ENTITY_DONKEY_DEATH = getSound("entity.donkey.death");
+
     Sound ENTITY_DONKEY_EAT = getSound("entity.donkey.eat");
+
     Sound ENTITY_DONKEY_HURT = getSound("entity.donkey.hurt");
+
     Sound ENTITY_DONKEY_JUMP = getSound("entity.donkey.jump");
+
     Sound ENTITY_DRAGON_FIREBALL_EXPLODE = getSound("entity.dragon_fireball.explode");
+
     Sound ENTITY_DROWNED_AMBIENT = getSound("entity.drowned.ambient");
+
     Sound ENTITY_DROWNED_AMBIENT_WATER = getSound("entity.drowned.ambient_water");
+
     Sound ENTITY_DROWNED_DEATH = getSound("entity.drowned.death");
+
     Sound ENTITY_DROWNED_DEATH_WATER = getSound("entity.drowned.death_water");
+
     Sound ENTITY_DROWNED_HURT = getSound("entity.drowned.hurt");
+
     Sound ENTITY_DROWNED_HURT_WATER = getSound("entity.drowned.hurt_water");
+
     Sound ENTITY_DROWNED_SHOOT = getSound("entity.drowned.shoot");
+
     Sound ENTITY_DROWNED_STEP = getSound("entity.drowned.step");
+
     Sound ENTITY_DROWNED_SWIM = getSound("entity.drowned.swim");
+
     Sound ENTITY_EGG_THROW = getSound("entity.egg.throw");
+
     Sound ENTITY_ELDER_GUARDIAN_AMBIENT = getSound("entity.elder_guardian.ambient");
+
     Sound ENTITY_ELDER_GUARDIAN_AMBIENT_LAND = getSound("entity.elder_guardian.ambient_land");
+
     Sound ENTITY_ELDER_GUARDIAN_CURSE = getSound("entity.elder_guardian.curse");
+
     Sound ENTITY_ELDER_GUARDIAN_DEATH = getSound("entity.elder_guardian.death");
+
     Sound ENTITY_ELDER_GUARDIAN_DEATH_LAND = getSound("entity.elder_guardian.death_land");
+
     Sound ENTITY_ELDER_GUARDIAN_FLOP = getSound("entity.elder_guardian.flop");
+
     Sound ENTITY_ELDER_GUARDIAN_HURT = getSound("entity.elder_guardian.hurt");
+
     Sound ENTITY_ELDER_GUARDIAN_HURT_LAND = getSound("entity.elder_guardian.hurt_land");
-    Sound ENTITY_ENDERMAN_AMBIENT = getSound("entity.enderman.ambient");
-    Sound ENTITY_ENDERMAN_DEATH = getSound("entity.enderman.death");
-    Sound ENTITY_ENDERMAN_HURT = getSound("entity.enderman.hurt");
-    Sound ENTITY_ENDERMAN_SCREAM = getSound("entity.enderman.scream");
-    Sound ENTITY_ENDERMAN_STARE = getSound("entity.enderman.stare");
-    Sound ENTITY_ENDERMAN_TELEPORT = getSound("entity.enderman.teleport");
-    Sound ENTITY_ENDERMITE_AMBIENT = getSound("entity.endermite.ambient");
-    Sound ENTITY_ENDERMITE_DEATH = getSound("entity.endermite.death");
-    Sound ENTITY_ENDERMITE_HURT = getSound("entity.endermite.hurt");
-    Sound ENTITY_ENDERMITE_STEP = getSound("entity.endermite.step");
+
     Sound ENTITY_ENDER_DRAGON_AMBIENT = getSound("entity.ender_dragon.ambient");
+
     Sound ENTITY_ENDER_DRAGON_DEATH = getSound("entity.ender_dragon.death");
+
     Sound ENTITY_ENDER_DRAGON_FLAP = getSound("entity.ender_dragon.flap");
+
     Sound ENTITY_ENDER_DRAGON_GROWL = getSound("entity.ender_dragon.growl");
+
     Sound ENTITY_ENDER_DRAGON_HURT = getSound("entity.ender_dragon.hurt");
+
     Sound ENTITY_ENDER_DRAGON_SHOOT = getSound("entity.ender_dragon.shoot");
+
     Sound ENTITY_ENDER_EYE_DEATH = getSound("entity.ender_eye.death");
+
     Sound ENTITY_ENDER_EYE_LAUNCH = getSound("entity.ender_eye.launch");
+
     Sound ENTITY_ENDER_PEARL_THROW = getSound("entity.ender_pearl.throw");
+
+    Sound ENTITY_ENDERMAN_AMBIENT = getSound("entity.enderman.ambient");
+
+    Sound ENTITY_ENDERMAN_DEATH = getSound("entity.enderman.death");
+
+    Sound ENTITY_ENDERMAN_HURT = getSound("entity.enderman.hurt");
+
+    Sound ENTITY_ENDERMAN_SCREAM = getSound("entity.enderman.scream");
+
+    Sound ENTITY_ENDERMAN_STARE = getSound("entity.enderman.stare");
+
+    Sound ENTITY_ENDERMAN_TELEPORT = getSound("entity.enderman.teleport");
+
+    Sound ENTITY_ENDERMITE_AMBIENT = getSound("entity.endermite.ambient");
+
+    Sound ENTITY_ENDERMITE_DEATH = getSound("entity.endermite.death");
+
+    Sound ENTITY_ENDERMITE_HURT = getSound("entity.endermite.hurt");
+
+    Sound ENTITY_ENDERMITE_STEP = getSound("entity.endermite.step");
+
     Sound ENTITY_EVOKER_AMBIENT = getSound("entity.evoker.ambient");
+
     Sound ENTITY_EVOKER_CAST_SPELL = getSound("entity.evoker.cast_spell");
+
     Sound ENTITY_EVOKER_CELEBRATE = getSound("entity.evoker.celebrate");
+
     Sound ENTITY_EVOKER_DEATH = getSound("entity.evoker.death");
-    Sound ENTITY_EVOKER_FANGS_ATTACK = getSound("entity.evoker_fangs.attack");
+
     Sound ENTITY_EVOKER_HURT = getSound("entity.evoker.hurt");
+
     Sound ENTITY_EVOKER_PREPARE_ATTACK = getSound("entity.evoker.prepare_attack");
+
     Sound ENTITY_EVOKER_PREPARE_SUMMON = getSound("entity.evoker.prepare_summon");
+
     Sound ENTITY_EVOKER_PREPARE_WOLOLO = getSound("entity.evoker.prepare_wololo");
+
+    Sound ENTITY_EVOKER_FANGS_ATTACK = getSound("entity.evoker_fangs.attack");
+
     Sound ENTITY_EXPERIENCE_BOTTLE_THROW = getSound("entity.experience_bottle.throw");
+
     Sound ENTITY_EXPERIENCE_ORB_PICKUP = getSound("entity.experience_orb.pickup");
+
     Sound ENTITY_FIREWORK_ROCKET_BLAST = getSound("entity.firework_rocket.blast");
+
     Sound ENTITY_FIREWORK_ROCKET_BLAST_FAR = getSound("entity.firework_rocket.blast_far");
+
     Sound ENTITY_FIREWORK_ROCKET_LARGE_BLAST = getSound("entity.firework_rocket.large_blast");
+
     Sound ENTITY_FIREWORK_ROCKET_LARGE_BLAST_FAR = getSound("entity.firework_rocket.large_blast_far");
+
     Sound ENTITY_FIREWORK_ROCKET_LAUNCH = getSound("entity.firework_rocket.launch");
+
     Sound ENTITY_FIREWORK_ROCKET_SHOOT = getSound("entity.firework_rocket.shoot");
+
     Sound ENTITY_FIREWORK_ROCKET_TWINKLE = getSound("entity.firework_rocket.twinkle");
+
     Sound ENTITY_FIREWORK_ROCKET_TWINKLE_FAR = getSound("entity.firework_rocket.twinkle_far");
-    Sound ENTITY_FISHING_BOBBER_RETRIEVE = getSound("entity.fishing_bobber.retrieve");
-    Sound ENTITY_FISHING_BOBBER_SPLASH = getSound("entity.fishing_bobber.splash");
-    Sound ENTITY_FISHING_BOBBER_THROW = getSound("entity.fishing_bobber.throw");
+
     Sound ENTITY_FISH_SWIM = getSound("entity.fish.swim");
+
+    Sound ENTITY_FISHING_BOBBER_RETRIEVE = getSound("entity.fishing_bobber.retrieve");
+
+    Sound ENTITY_FISHING_BOBBER_SPLASH = getSound("entity.fishing_bobber.splash");
+
+    Sound ENTITY_FISHING_BOBBER_THROW = getSound("entity.fishing_bobber.throw");
+
     Sound ENTITY_FOX_AGGRO = getSound("entity.fox.aggro");
+
     Sound ENTITY_FOX_AMBIENT = getSound("entity.fox.ambient");
+
     Sound ENTITY_FOX_BITE = getSound("entity.fox.bite");
+
     Sound ENTITY_FOX_DEATH = getSound("entity.fox.death");
+
     Sound ENTITY_FOX_EAT = getSound("entity.fox.eat");
+
     Sound ENTITY_FOX_HURT = getSound("entity.fox.hurt");
+
     Sound ENTITY_FOX_SCREECH = getSound("entity.fox.screech");
+
     Sound ENTITY_FOX_SLEEP = getSound("entity.fox.sleep");
+
     Sound ENTITY_FOX_SNIFF = getSound("entity.fox.sniff");
+
     Sound ENTITY_FOX_SPIT = getSound("entity.fox.spit");
+
     Sound ENTITY_FOX_TELEPORT = getSound("entity.fox.teleport");
+
     Sound ENTITY_FROG_AMBIENT = getSound("entity.frog.ambient");
+
     Sound ENTITY_FROG_DEATH = getSound("entity.frog.death");
+
     Sound ENTITY_FROG_EAT = getSound("entity.frog.eat");
+
     Sound ENTITY_FROG_HURT = getSound("entity.frog.hurt");
+
     Sound ENTITY_FROG_LAY_SPAWN = getSound("entity.frog.lay_spawn");
+
     Sound ENTITY_FROG_LONG_JUMP = getSound("entity.frog.long_jump");
+
     Sound ENTITY_FROG_STEP = getSound("entity.frog.step");
+
     Sound ENTITY_FROG_TONGUE = getSound("entity.frog.tongue");
+
     Sound ENTITY_GENERIC_BIG_FALL = getSound("entity.generic.big_fall");
+
     Sound ENTITY_GENERIC_BURN = getSound("entity.generic.burn");
+
     Sound ENTITY_GENERIC_DEATH = getSound("entity.generic.death");
+
     Sound ENTITY_GENERIC_DRINK = getSound("entity.generic.drink");
+
     Sound ENTITY_GENERIC_EAT = getSound("entity.generic.eat");
+
     Sound ENTITY_GENERIC_EXPLODE = getSound("entity.generic.explode");
+
     Sound ENTITY_GENERIC_EXTINGUISH_FIRE = getSound("entity.generic.extinguish_fire");
+
     Sound ENTITY_GENERIC_HURT = getSound("entity.generic.hurt");
+
     Sound ENTITY_GENERIC_SMALL_FALL = getSound("entity.generic.small_fall");
+
     Sound ENTITY_GENERIC_SPLASH = getSound("entity.generic.splash");
+
     Sound ENTITY_GENERIC_SWIM = getSound("entity.generic.swim");
+
     Sound ENTITY_GHAST_AMBIENT = getSound("entity.ghast.ambient");
+
     Sound ENTITY_GHAST_DEATH = getSound("entity.ghast.death");
+
     Sound ENTITY_GHAST_HURT = getSound("entity.ghast.hurt");
+
     Sound ENTITY_GHAST_SCREAM = getSound("entity.ghast.scream");
+
     Sound ENTITY_GHAST_SHOOT = getSound("entity.ghast.shoot");
+
     Sound ENTITY_GHAST_WARN = getSound("entity.ghast.warn");
+
     Sound ENTITY_GLOW_ITEM_FRAME_ADD_ITEM = getSound("entity.glow_item_frame.add_item");
+
     Sound ENTITY_GLOW_ITEM_FRAME_BREAK = getSound("entity.glow_item_frame.break");
+
     Sound ENTITY_GLOW_ITEM_FRAME_PLACE = getSound("entity.glow_item_frame.place");
+
     Sound ENTITY_GLOW_ITEM_FRAME_REMOVE_ITEM = getSound("entity.glow_item_frame.remove_item");
+
     Sound ENTITY_GLOW_ITEM_FRAME_ROTATE_ITEM = getSound("entity.glow_item_frame.rotate_item");
+
     Sound ENTITY_GLOW_SQUID_AMBIENT = getSound("entity.glow_squid.ambient");
+
     Sound ENTITY_GLOW_SQUID_DEATH = getSound("entity.glow_squid.death");
+
     Sound ENTITY_GLOW_SQUID_HURT = getSound("entity.glow_squid.hurt");
+
     Sound ENTITY_GLOW_SQUID_SQUIRT = getSound("entity.glow_squid.squirt");
+
     Sound ENTITY_GOAT_AMBIENT = getSound("entity.goat.ambient");
+
     Sound ENTITY_GOAT_DEATH = getSound("entity.goat.death");
+
     Sound ENTITY_GOAT_EAT = getSound("entity.goat.eat");
+
     Sound ENTITY_GOAT_HORN_BREAK = getSound("entity.goat.horn_break");
+
     Sound ENTITY_GOAT_HURT = getSound("entity.goat.hurt");
+
     Sound ENTITY_GOAT_LONG_JUMP = getSound("entity.goat.long_jump");
+
     Sound ENTITY_GOAT_MILK = getSound("entity.goat.milk");
+
     Sound ENTITY_GOAT_PREPARE_RAM = getSound("entity.goat.prepare_ram");
+
     Sound ENTITY_GOAT_RAM_IMPACT = getSound("entity.goat.ram_impact");
+
     Sound ENTITY_GOAT_SCREAMING_AMBIENT = getSound("entity.goat.screaming.ambient");
+
     Sound ENTITY_GOAT_SCREAMING_DEATH = getSound("entity.goat.screaming.death");
+
     Sound ENTITY_GOAT_SCREAMING_EAT = getSound("entity.goat.screaming.eat");
+
     Sound ENTITY_GOAT_SCREAMING_HURT = getSound("entity.goat.screaming.hurt");
+
     Sound ENTITY_GOAT_SCREAMING_LONG_JUMP = getSound("entity.goat.screaming.long_jump");
+
     Sound ENTITY_GOAT_SCREAMING_MILK = getSound("entity.goat.screaming.milk");
+
     Sound ENTITY_GOAT_SCREAMING_PREPARE_RAM = getSound("entity.goat.screaming.prepare_ram");
+
     Sound ENTITY_GOAT_SCREAMING_RAM_IMPACT = getSound("entity.goat.screaming.ram_impact");
+
     Sound ENTITY_GOAT_STEP = getSound("entity.goat.step");
+
     Sound ENTITY_GUARDIAN_AMBIENT = getSound("entity.guardian.ambient");
+
     Sound ENTITY_GUARDIAN_AMBIENT_LAND = getSound("entity.guardian.ambient_land");
+
     Sound ENTITY_GUARDIAN_ATTACK = getSound("entity.guardian.attack");
+
     Sound ENTITY_GUARDIAN_DEATH = getSound("entity.guardian.death");
+
     Sound ENTITY_GUARDIAN_DEATH_LAND = getSound("entity.guardian.death_land");
+
     Sound ENTITY_GUARDIAN_FLOP = getSound("entity.guardian.flop");
+
     Sound ENTITY_GUARDIAN_HURT = getSound("entity.guardian.hurt");
+
     Sound ENTITY_GUARDIAN_HURT_LAND = getSound("entity.guardian.hurt_land");
+
     Sound ENTITY_HOGLIN_AMBIENT = getSound("entity.hoglin.ambient");
+
     Sound ENTITY_HOGLIN_ANGRY = getSound("entity.hoglin.angry");
+
     Sound ENTITY_HOGLIN_ATTACK = getSound("entity.hoglin.attack");
+
     Sound ENTITY_HOGLIN_CONVERTED_TO_ZOMBIFIED = getSound("entity.hoglin.converted_to_zombified");
+
     Sound ENTITY_HOGLIN_DEATH = getSound("entity.hoglin.death");
+
     Sound ENTITY_HOGLIN_HURT = getSound("entity.hoglin.hurt");
+
     Sound ENTITY_HOGLIN_RETREAT = getSound("entity.hoglin.retreat");
+
     Sound ENTITY_HOGLIN_STEP = getSound("entity.hoglin.step");
+
     Sound ENTITY_HORSE_AMBIENT = getSound("entity.horse.ambient");
+
     Sound ENTITY_HORSE_ANGRY = getSound("entity.horse.angry");
+
     Sound ENTITY_HORSE_ARMOR = getSound("entity.horse.armor");
+
     Sound ENTITY_HORSE_BREATHE = getSound("entity.horse.breathe");
+
     Sound ENTITY_HORSE_DEATH = getSound("entity.horse.death");
+
     Sound ENTITY_HORSE_EAT = getSound("entity.horse.eat");
+
     Sound ENTITY_HORSE_GALLOP = getSound("entity.horse.gallop");
+
     Sound ENTITY_HORSE_HURT = getSound("entity.horse.hurt");
+
     Sound ENTITY_HORSE_JUMP = getSound("entity.horse.jump");
+
     Sound ENTITY_HORSE_LAND = getSound("entity.horse.land");
+
     Sound ENTITY_HORSE_SADDLE = getSound("entity.horse.saddle");
+
     Sound ENTITY_HORSE_STEP = getSound("entity.horse.step");
+
     Sound ENTITY_HORSE_STEP_WOOD = getSound("entity.horse.step_wood");
+
     Sound ENTITY_HOSTILE_BIG_FALL = getSound("entity.hostile.big_fall");
+
     Sound ENTITY_HOSTILE_DEATH = getSound("entity.hostile.death");
+
     Sound ENTITY_HOSTILE_HURT = getSound("entity.hostile.hurt");
+
     Sound ENTITY_HOSTILE_SMALL_FALL = getSound("entity.hostile.small_fall");
+
     Sound ENTITY_HOSTILE_SPLASH = getSound("entity.hostile.splash");
+
     Sound ENTITY_HOSTILE_SWIM = getSound("entity.hostile.swim");
+
     Sound ENTITY_HUSK_AMBIENT = getSound("entity.husk.ambient");
+
     Sound ENTITY_HUSK_CONVERTED_TO_ZOMBIE = getSound("entity.husk.converted_to_zombie");
+
     Sound ENTITY_HUSK_DEATH = getSound("entity.husk.death");
+
     Sound ENTITY_HUSK_HURT = getSound("entity.husk.hurt");
+
     Sound ENTITY_HUSK_STEP = getSound("entity.husk.step");
+
     Sound ENTITY_ILLUSIONER_AMBIENT = getSound("entity.illusioner.ambient");
+
     Sound ENTITY_ILLUSIONER_CAST_SPELL = getSound("entity.illusioner.cast_spell");
+
     Sound ENTITY_ILLUSIONER_DEATH = getSound("entity.illusioner.death");
+
     Sound ENTITY_ILLUSIONER_HURT = getSound("entity.illusioner.hurt");
+
     Sound ENTITY_ILLUSIONER_MIRROR_MOVE = getSound("entity.illusioner.mirror_move");
+
     Sound ENTITY_ILLUSIONER_PREPARE_BLINDNESS = getSound("entity.illusioner.prepare_blindness");
+
     Sound ENTITY_ILLUSIONER_PREPARE_MIRROR = getSound("entity.illusioner.prepare_mirror");
+
     Sound ENTITY_IRON_GOLEM_ATTACK = getSound("entity.iron_golem.attack");
+
     Sound ENTITY_IRON_GOLEM_DAMAGE = getSound("entity.iron_golem.damage");
+
     Sound ENTITY_IRON_GOLEM_DEATH = getSound("entity.iron_golem.death");
+
     Sound ENTITY_IRON_GOLEM_HURT = getSound("entity.iron_golem.hurt");
+
     Sound ENTITY_IRON_GOLEM_REPAIR = getSound("entity.iron_golem.repair");
+
     Sound ENTITY_IRON_GOLEM_STEP = getSound("entity.iron_golem.step");
+
     Sound ENTITY_ITEM_BREAK = getSound("entity.item.break");
-    Sound ENTITY_ITEM_FRAME_ADD_ITEM = getSound("entity.item_frame.add_item");
-    Sound ENTITY_ITEM_FRAME_BREAK = getSound("entity.item_frame.break");
-    Sound ENTITY_ITEM_FRAME_PLACE = getSound("entity.item_frame.place");
-    Sound ENTITY_ITEM_FRAME_REMOVE_ITEM = getSound("entity.item_frame.remove_item");
-    Sound ENTITY_ITEM_FRAME_ROTATE_ITEM = getSound("entity.item_frame.rotate_item");
+
     Sound ENTITY_ITEM_PICKUP = getSound("entity.item.pickup");
+
+    Sound ENTITY_ITEM_FRAME_ADD_ITEM = getSound("entity.item_frame.add_item");
+
+    Sound ENTITY_ITEM_FRAME_BREAK = getSound("entity.item_frame.break");
+
+    Sound ENTITY_ITEM_FRAME_PLACE = getSound("entity.item_frame.place");
+
+    Sound ENTITY_ITEM_FRAME_REMOVE_ITEM = getSound("entity.item_frame.remove_item");
+
+    Sound ENTITY_ITEM_FRAME_ROTATE_ITEM = getSound("entity.item_frame.rotate_item");
+
     Sound ENTITY_LEASH_KNOT_BREAK = getSound("entity.leash_knot.break");
+
     Sound ENTITY_LEASH_KNOT_PLACE = getSound("entity.leash_knot.place");
+
     Sound ENTITY_LIGHTNING_BOLT_IMPACT = getSound("entity.lightning_bolt.impact");
+
     Sound ENTITY_LIGHTNING_BOLT_THUNDER = getSound("entity.lightning_bolt.thunder");
+
     Sound ENTITY_LINGERING_POTION_THROW = getSound("entity.lingering_potion.throw");
+
     Sound ENTITY_LLAMA_AMBIENT = getSound("entity.llama.ambient");
+
     Sound ENTITY_LLAMA_ANGRY = getSound("entity.llama.angry");
+
     Sound ENTITY_LLAMA_CHEST = getSound("entity.llama.chest");
+
     Sound ENTITY_LLAMA_DEATH = getSound("entity.llama.death");
+
     Sound ENTITY_LLAMA_EAT = getSound("entity.llama.eat");
+
     Sound ENTITY_LLAMA_HURT = getSound("entity.llama.hurt");
+
     Sound ENTITY_LLAMA_SPIT = getSound("entity.llama.spit");
+
     Sound ENTITY_LLAMA_STEP = getSound("entity.llama.step");
+
     Sound ENTITY_LLAMA_SWAG = getSound("entity.llama.swag");
+
     Sound ENTITY_MAGMA_CUBE_DEATH = getSound("entity.magma_cube.death");
+
     Sound ENTITY_MAGMA_CUBE_DEATH_SMALL = getSound("entity.magma_cube.death_small");
+
     Sound ENTITY_MAGMA_CUBE_HURT = getSound("entity.magma_cube.hurt");
+
     Sound ENTITY_MAGMA_CUBE_HURT_SMALL = getSound("entity.magma_cube.hurt_small");
+
     Sound ENTITY_MAGMA_CUBE_JUMP = getSound("entity.magma_cube.jump");
+
     Sound ENTITY_MAGMA_CUBE_SQUISH = getSound("entity.magma_cube.squish");
+
     Sound ENTITY_MAGMA_CUBE_SQUISH_SMALL = getSound("entity.magma_cube.squish_small");
+
     Sound ENTITY_MINECART_INSIDE = getSound("entity.minecart.inside");
+
     Sound ENTITY_MINECART_INSIDE_UNDERWATER = getSound("entity.minecart.inside.underwater");
+
     Sound ENTITY_MINECART_RIDING = getSound("entity.minecart.riding");
+
     Sound ENTITY_MOOSHROOM_CONVERT = getSound("entity.mooshroom.convert");
+
     Sound ENTITY_MOOSHROOM_EAT = getSound("entity.mooshroom.eat");
+
     Sound ENTITY_MOOSHROOM_MILK = getSound("entity.mooshroom.milk");
+
     Sound ENTITY_MOOSHROOM_SHEAR = getSound("entity.mooshroom.shear");
+
     Sound ENTITY_MOOSHROOM_SUSPICIOUS_MILK = getSound("entity.mooshroom.suspicious_milk");
+
     Sound ENTITY_MULE_AMBIENT = getSound("entity.mule.ambient");
+
     Sound ENTITY_MULE_ANGRY = getSound("entity.mule.angry");
+
     Sound ENTITY_MULE_CHEST = getSound("entity.mule.chest");
+
     Sound ENTITY_MULE_DEATH = getSound("entity.mule.death");
+
     Sound ENTITY_MULE_EAT = getSound("entity.mule.eat");
+
     Sound ENTITY_MULE_HURT = getSound("entity.mule.hurt");
+
     Sound ENTITY_MULE_JUMP = getSound("entity.mule.jump");
+
     Sound ENTITY_OCELOT_AMBIENT = getSound("entity.ocelot.ambient");
+
     Sound ENTITY_OCELOT_DEATH = getSound("entity.ocelot.death");
+
     Sound ENTITY_OCELOT_HURT = getSound("entity.ocelot.hurt");
+
     Sound ENTITY_PAINTING_BREAK = getSound("entity.painting.break");
+
     Sound ENTITY_PAINTING_PLACE = getSound("entity.painting.place");
+
     Sound ENTITY_PANDA_AGGRESSIVE_AMBIENT = getSound("entity.panda.aggressive_ambient");
+
     Sound ENTITY_PANDA_AMBIENT = getSound("entity.panda.ambient");
+
     Sound ENTITY_PANDA_BITE = getSound("entity.panda.bite");
+
     Sound ENTITY_PANDA_CANT_BREED = getSound("entity.panda.cant_breed");
+
     Sound ENTITY_PANDA_DEATH = getSound("entity.panda.death");
+
     Sound ENTITY_PANDA_EAT = getSound("entity.panda.eat");
+
     Sound ENTITY_PANDA_HURT = getSound("entity.panda.hurt");
+
     Sound ENTITY_PANDA_PRE_SNEEZE = getSound("entity.panda.pre_sneeze");
+
     Sound ENTITY_PANDA_SNEEZE = getSound("entity.panda.sneeze");
+
     Sound ENTITY_PANDA_STEP = getSound("entity.panda.step");
+
     Sound ENTITY_PANDA_WORRIED_AMBIENT = getSound("entity.panda.worried_ambient");
+
     Sound ENTITY_PARROT_AMBIENT = getSound("entity.parrot.ambient");
+
     Sound ENTITY_PARROT_DEATH = getSound("entity.parrot.death");
+
     Sound ENTITY_PARROT_EAT = getSound("entity.parrot.eat");
+
     Sound ENTITY_PARROT_FLY = getSound("entity.parrot.fly");
+
     Sound ENTITY_PARROT_HURT = getSound("entity.parrot.hurt");
+
     Sound ENTITY_PARROT_IMITATE_BLAZE = getSound("entity.parrot.imitate.blaze");
+
     Sound ENTITY_PARROT_IMITATE_BOGGED = getSound("entity.parrot.imitate.bogged");
+
     Sound ENTITY_PARROT_IMITATE_BREEZE = getSound("entity.parrot.imitate.breeze");
+
     Sound ENTITY_PARROT_IMITATE_CREAKING = getSound("entity.parrot.imitate.creaking");
+
     Sound ENTITY_PARROT_IMITATE_CREEPER = getSound("entity.parrot.imitate.creeper");
+
     Sound ENTITY_PARROT_IMITATE_DROWNED = getSound("entity.parrot.imitate.drowned");
+
     Sound ENTITY_PARROT_IMITATE_ELDER_GUARDIAN = getSound("entity.parrot.imitate.elder_guardian");
-    Sound ENTITY_PARROT_IMITATE_ENDERMITE = getSound("entity.parrot.imitate.endermite");
+
     Sound ENTITY_PARROT_IMITATE_ENDER_DRAGON = getSound("entity.parrot.imitate.ender_dragon");
+
+    Sound ENTITY_PARROT_IMITATE_ENDERMITE = getSound("entity.parrot.imitate.endermite");
+
     Sound ENTITY_PARROT_IMITATE_EVOKER = getSound("entity.parrot.imitate.evoker");
+
     Sound ENTITY_PARROT_IMITATE_GHAST = getSound("entity.parrot.imitate.ghast");
+
     Sound ENTITY_PARROT_IMITATE_GUARDIAN = getSound("entity.parrot.imitate.guardian");
+
     Sound ENTITY_PARROT_IMITATE_HOGLIN = getSound("entity.parrot.imitate.hoglin");
+
     Sound ENTITY_PARROT_IMITATE_HUSK = getSound("entity.parrot.imitate.husk");
+
     Sound ENTITY_PARROT_IMITATE_ILLUSIONER = getSound("entity.parrot.imitate.illusioner");
+
     Sound ENTITY_PARROT_IMITATE_MAGMA_CUBE = getSound("entity.parrot.imitate.magma_cube");
+
     Sound ENTITY_PARROT_IMITATE_PHANTOM = getSound("entity.parrot.imitate.phantom");
+
     Sound ENTITY_PARROT_IMITATE_PIGLIN = getSound("entity.parrot.imitate.piglin");
+
     Sound ENTITY_PARROT_IMITATE_PIGLIN_BRUTE = getSound("entity.parrot.imitate.piglin_brute");
+
     Sound ENTITY_PARROT_IMITATE_PILLAGER = getSound("entity.parrot.imitate.pillager");
+
     Sound ENTITY_PARROT_IMITATE_RAVAGER = getSound("entity.parrot.imitate.ravager");
+
     Sound ENTITY_PARROT_IMITATE_SHULKER = getSound("entity.parrot.imitate.shulker");
+
     Sound ENTITY_PARROT_IMITATE_SILVERFISH = getSound("entity.parrot.imitate.silverfish");
+
     Sound ENTITY_PARROT_IMITATE_SKELETON = getSound("entity.parrot.imitate.skeleton");
+
     Sound ENTITY_PARROT_IMITATE_SLIME = getSound("entity.parrot.imitate.slime");
+
     Sound ENTITY_PARROT_IMITATE_SPIDER = getSound("entity.parrot.imitate.spider");
+
     Sound ENTITY_PARROT_IMITATE_STRAY = getSound("entity.parrot.imitate.stray");
+
     Sound ENTITY_PARROT_IMITATE_VEX = getSound("entity.parrot.imitate.vex");
+
     Sound ENTITY_PARROT_IMITATE_VINDICATOR = getSound("entity.parrot.imitate.vindicator");
+
     Sound ENTITY_PARROT_IMITATE_WARDEN = getSound("entity.parrot.imitate.warden");
+
     Sound ENTITY_PARROT_IMITATE_WITCH = getSound("entity.parrot.imitate.witch");
+
     Sound ENTITY_PARROT_IMITATE_WITHER = getSound("entity.parrot.imitate.wither");
+
     Sound ENTITY_PARROT_IMITATE_WITHER_SKELETON = getSound("entity.parrot.imitate.wither_skeleton");
+
     Sound ENTITY_PARROT_IMITATE_ZOGLIN = getSound("entity.parrot.imitate.zoglin");
+
     Sound ENTITY_PARROT_IMITATE_ZOMBIE = getSound("entity.parrot.imitate.zombie");
+
     Sound ENTITY_PARROT_IMITATE_ZOMBIE_VILLAGER = getSound("entity.parrot.imitate.zombie_villager");
+
     Sound ENTITY_PARROT_STEP = getSound("entity.parrot.step");
+
     Sound ENTITY_PHANTOM_AMBIENT = getSound("entity.phantom.ambient");
+
     Sound ENTITY_PHANTOM_BITE = getSound("entity.phantom.bite");
+
     Sound ENTITY_PHANTOM_DEATH = getSound("entity.phantom.death");
+
     Sound ENTITY_PHANTOM_FLAP = getSound("entity.phantom.flap");
+
     Sound ENTITY_PHANTOM_HURT = getSound("entity.phantom.hurt");
+
     Sound ENTITY_PHANTOM_SWOOP = getSound("entity.phantom.swoop");
-    Sound ENTITY_PIGLIN_ADMIRING_ITEM = getSound("entity.piglin.admiring_item");
-    Sound ENTITY_PIGLIN_AMBIENT = getSound("entity.piglin.ambient");
-    Sound ENTITY_PIGLIN_ANGRY = getSound("entity.piglin.angry");
-    Sound ENTITY_PIGLIN_BRUTE_AMBIENT = getSound("entity.piglin_brute.ambient");
-    Sound ENTITY_PIGLIN_BRUTE_ANGRY = getSound("entity.piglin_brute.angry");
-    Sound ENTITY_PIGLIN_BRUTE_CONVERTED_TO_ZOMBIFIED = getSound("entity.piglin_brute.converted_to_zombified");
-    Sound ENTITY_PIGLIN_BRUTE_DEATH = getSound("entity.piglin_brute.death");
-    Sound ENTITY_PIGLIN_BRUTE_HURT = getSound("entity.piglin_brute.hurt");
-    Sound ENTITY_PIGLIN_BRUTE_STEP = getSound("entity.piglin_brute.step");
-    Sound ENTITY_PIGLIN_CELEBRATE = getSound("entity.piglin.celebrate");
-    Sound ENTITY_PIGLIN_CONVERTED_TO_ZOMBIFIED = getSound("entity.piglin.converted_to_zombified");
-    Sound ENTITY_PIGLIN_DEATH = getSound("entity.piglin.death");
-    Sound ENTITY_PIGLIN_HURT = getSound("entity.piglin.hurt");
-    Sound ENTITY_PIGLIN_JEALOUS = getSound("entity.piglin.jealous");
-    Sound ENTITY_PIGLIN_RETREAT = getSound("entity.piglin.retreat");
-    Sound ENTITY_PIGLIN_STEP = getSound("entity.piglin.step");
+
     Sound ENTITY_PIG_AMBIENT = getSound("entity.pig.ambient");
+
     Sound ENTITY_PIG_DEATH = getSound("entity.pig.death");
+
     Sound ENTITY_PIG_HURT = getSound("entity.pig.hurt");
+
     Sound ENTITY_PIG_SADDLE = getSound("entity.pig.saddle");
+
     Sound ENTITY_PIG_STEP = getSound("entity.pig.step");
+
+    Sound ENTITY_PIGLIN_ADMIRING_ITEM = getSound("entity.piglin.admiring_item");
+
+    Sound ENTITY_PIGLIN_AMBIENT = getSound("entity.piglin.ambient");
+
+    Sound ENTITY_PIGLIN_ANGRY = getSound("entity.piglin.angry");
+
+    Sound ENTITY_PIGLIN_CELEBRATE = getSound("entity.piglin.celebrate");
+
+    Sound ENTITY_PIGLIN_CONVERTED_TO_ZOMBIFIED = getSound("entity.piglin.converted_to_zombified");
+
+    Sound ENTITY_PIGLIN_DEATH = getSound("entity.piglin.death");
+
+    Sound ENTITY_PIGLIN_HURT = getSound("entity.piglin.hurt");
+
+    Sound ENTITY_PIGLIN_JEALOUS = getSound("entity.piglin.jealous");
+
+    Sound ENTITY_PIGLIN_RETREAT = getSound("entity.piglin.retreat");
+
+    Sound ENTITY_PIGLIN_STEP = getSound("entity.piglin.step");
+
+    Sound ENTITY_PIGLIN_BRUTE_AMBIENT = getSound("entity.piglin_brute.ambient");
+
+    Sound ENTITY_PIGLIN_BRUTE_ANGRY = getSound("entity.piglin_brute.angry");
+
+    Sound ENTITY_PIGLIN_BRUTE_CONVERTED_TO_ZOMBIFIED = getSound("entity.piglin_brute.converted_to_zombified");
+
+    Sound ENTITY_PIGLIN_BRUTE_DEATH = getSound("entity.piglin_brute.death");
+
+    Sound ENTITY_PIGLIN_BRUTE_HURT = getSound("entity.piglin_brute.hurt");
+
+    Sound ENTITY_PIGLIN_BRUTE_STEP = getSound("entity.piglin_brute.step");
+
     Sound ENTITY_PILLAGER_AMBIENT = getSound("entity.pillager.ambient");
+
     Sound ENTITY_PILLAGER_CELEBRATE = getSound("entity.pillager.celebrate");
+
     Sound ENTITY_PILLAGER_DEATH = getSound("entity.pillager.death");
+
     Sound ENTITY_PILLAGER_HURT = getSound("entity.pillager.hurt");
+
     Sound ENTITY_PLAYER_ATTACK_CRIT = getSound("entity.player.attack.crit");
+
     Sound ENTITY_PLAYER_ATTACK_KNOCKBACK = getSound("entity.player.attack.knockback");
+
     Sound ENTITY_PLAYER_ATTACK_NODAMAGE = getSound("entity.player.attack.nodamage");
+
     Sound ENTITY_PLAYER_ATTACK_STRONG = getSound("entity.player.attack.strong");
+
     Sound ENTITY_PLAYER_ATTACK_SWEEP = getSound("entity.player.attack.sweep");
+
     Sound ENTITY_PLAYER_ATTACK_WEAK = getSound("entity.player.attack.weak");
+
     Sound ENTITY_PLAYER_BIG_FALL = getSound("entity.player.big_fall");
+
     Sound ENTITY_PLAYER_BREATH = getSound("entity.player.breath");
+
     Sound ENTITY_PLAYER_BURP = getSound("entity.player.burp");
+
     Sound ENTITY_PLAYER_DEATH = getSound("entity.player.death");
+
     Sound ENTITY_PLAYER_HURT = getSound("entity.player.hurt");
+
     Sound ENTITY_PLAYER_HURT_DROWN = getSound("entity.player.hurt_drown");
+
     Sound ENTITY_PLAYER_HURT_FREEZE = getSound("entity.player.hurt_freeze");
+
     Sound ENTITY_PLAYER_HURT_ON_FIRE = getSound("entity.player.hurt_on_fire");
+
     Sound ENTITY_PLAYER_HURT_SWEET_BERRY_BUSH = getSound("entity.player.hurt_sweet_berry_bush");
+
     Sound ENTITY_PLAYER_LEVELUP = getSound("entity.player.levelup");
+
     Sound ENTITY_PLAYER_SMALL_FALL = getSound("entity.player.small_fall");
+
     Sound ENTITY_PLAYER_SPLASH = getSound("entity.player.splash");
+
     Sound ENTITY_PLAYER_SPLASH_HIGH_SPEED = getSound("entity.player.splash.high_speed");
+
     Sound ENTITY_PLAYER_SWIM = getSound("entity.player.swim");
+
     Sound ENTITY_PLAYER_TELEPORT = getSound("entity.player.teleport");
+
     Sound ENTITY_POLAR_BEAR_AMBIENT = getSound("entity.polar_bear.ambient");
+
     Sound ENTITY_POLAR_BEAR_AMBIENT_BABY = getSound("entity.polar_bear.ambient_baby");
+
     Sound ENTITY_POLAR_BEAR_DEATH = getSound("entity.polar_bear.death");
+
     Sound ENTITY_POLAR_BEAR_HURT = getSound("entity.polar_bear.hurt");
+
     Sound ENTITY_POLAR_BEAR_STEP = getSound("entity.polar_bear.step");
+
     Sound ENTITY_POLAR_BEAR_WARNING = getSound("entity.polar_bear.warning");
+
     Sound ENTITY_PUFFER_FISH_AMBIENT = getSound("entity.puffer_fish.ambient");
+
     Sound ENTITY_PUFFER_FISH_BLOW_OUT = getSound("entity.puffer_fish.blow_out");
+
     Sound ENTITY_PUFFER_FISH_BLOW_UP = getSound("entity.puffer_fish.blow_up");
+
     Sound ENTITY_PUFFER_FISH_DEATH = getSound("entity.puffer_fish.death");
+
     Sound ENTITY_PUFFER_FISH_FLOP = getSound("entity.puffer_fish.flop");
+
     Sound ENTITY_PUFFER_FISH_HURT = getSound("entity.puffer_fish.hurt");
+
     Sound ENTITY_PUFFER_FISH_STING = getSound("entity.puffer_fish.sting");
+
     Sound ENTITY_RABBIT_AMBIENT = getSound("entity.rabbit.ambient");
+
     Sound ENTITY_RABBIT_ATTACK = getSound("entity.rabbit.attack");
+
     Sound ENTITY_RABBIT_DEATH = getSound("entity.rabbit.death");
+
     Sound ENTITY_RABBIT_HURT = getSound("entity.rabbit.hurt");
+
     Sound ENTITY_RABBIT_JUMP = getSound("entity.rabbit.jump");
+
     Sound ENTITY_RAVAGER_AMBIENT = getSound("entity.ravager.ambient");
+
     Sound ENTITY_RAVAGER_ATTACK = getSound("entity.ravager.attack");
+
     Sound ENTITY_RAVAGER_CELEBRATE = getSound("entity.ravager.celebrate");
+
     Sound ENTITY_RAVAGER_DEATH = getSound("entity.ravager.death");
+
     Sound ENTITY_RAVAGER_HURT = getSound("entity.ravager.hurt");
+
     Sound ENTITY_RAVAGER_ROAR = getSound("entity.ravager.roar");
+
     Sound ENTITY_RAVAGER_STEP = getSound("entity.ravager.step");
+
     Sound ENTITY_RAVAGER_STUNNED = getSound("entity.ravager.stunned");
+
     Sound ENTITY_SALMON_AMBIENT = getSound("entity.salmon.ambient");
+
     Sound ENTITY_SALMON_DEATH = getSound("entity.salmon.death");
+
     Sound ENTITY_SALMON_FLOP = getSound("entity.salmon.flop");
+
     Sound ENTITY_SALMON_HURT = getSound("entity.salmon.hurt");
+
     Sound ENTITY_SHEEP_AMBIENT = getSound("entity.sheep.ambient");
+
     Sound ENTITY_SHEEP_DEATH = getSound("entity.sheep.death");
+
     Sound ENTITY_SHEEP_HURT = getSound("entity.sheep.hurt");
+
     Sound ENTITY_SHEEP_SHEAR = getSound("entity.sheep.shear");
+
     Sound ENTITY_SHEEP_STEP = getSound("entity.sheep.step");
+
     Sound ENTITY_SHULKER_AMBIENT = getSound("entity.shulker.ambient");
-    Sound ENTITY_SHULKER_BULLET_HIT = getSound("entity.shulker_bullet.hit");
-    Sound ENTITY_SHULKER_BULLET_HURT = getSound("entity.shulker_bullet.hurt");
+
     Sound ENTITY_SHULKER_CLOSE = getSound("entity.shulker.close");
+
     Sound ENTITY_SHULKER_DEATH = getSound("entity.shulker.death");
+
     Sound ENTITY_SHULKER_HURT = getSound("entity.shulker.hurt");
+
     Sound ENTITY_SHULKER_HURT_CLOSED = getSound("entity.shulker.hurt_closed");
+
     Sound ENTITY_SHULKER_OPEN = getSound("entity.shulker.open");
+
     Sound ENTITY_SHULKER_SHOOT = getSound("entity.shulker.shoot");
+
     Sound ENTITY_SHULKER_TELEPORT = getSound("entity.shulker.teleport");
+
+    Sound ENTITY_SHULKER_BULLET_HIT = getSound("entity.shulker_bullet.hit");
+
+    Sound ENTITY_SHULKER_BULLET_HURT = getSound("entity.shulker_bullet.hurt");
+
     Sound ENTITY_SILVERFISH_AMBIENT = getSound("entity.silverfish.ambient");
+
     Sound ENTITY_SILVERFISH_DEATH = getSound("entity.silverfish.death");
+
     Sound ENTITY_SILVERFISH_HURT = getSound("entity.silverfish.hurt");
+
     Sound ENTITY_SILVERFISH_STEP = getSound("entity.silverfish.step");
+
     Sound ENTITY_SKELETON_AMBIENT = getSound("entity.skeleton.ambient");
+
     Sound ENTITY_SKELETON_CONVERTED_TO_STRAY = getSound("entity.skeleton.converted_to_stray");
+
     Sound ENTITY_SKELETON_DEATH = getSound("entity.skeleton.death");
-    Sound ENTITY_SKELETON_HORSE_AMBIENT = getSound("entity.skeleton_horse.ambient");
-    Sound ENTITY_SKELETON_HORSE_AMBIENT_WATER = getSound("entity.skeleton_horse.ambient_water");
-    Sound ENTITY_SKELETON_HORSE_DEATH = getSound("entity.skeleton_horse.death");
-    Sound ENTITY_SKELETON_HORSE_GALLOP_WATER = getSound("entity.skeleton_horse.gallop_water");
-    Sound ENTITY_SKELETON_HORSE_HURT = getSound("entity.skeleton_horse.hurt");
-    Sound ENTITY_SKELETON_HORSE_JUMP_WATER = getSound("entity.skeleton_horse.jump_water");
-    Sound ENTITY_SKELETON_HORSE_STEP_WATER = getSound("entity.skeleton_horse.step_water");
-    Sound ENTITY_SKELETON_HORSE_SWIM = getSound("entity.skeleton_horse.swim");
+
     Sound ENTITY_SKELETON_HURT = getSound("entity.skeleton.hurt");
+
     Sound ENTITY_SKELETON_SHOOT = getSound("entity.skeleton.shoot");
+
     Sound ENTITY_SKELETON_STEP = getSound("entity.skeleton.step");
+
+    Sound ENTITY_SKELETON_HORSE_AMBIENT = getSound("entity.skeleton_horse.ambient");
+
+    Sound ENTITY_SKELETON_HORSE_AMBIENT_WATER = getSound("entity.skeleton_horse.ambient_water");
+
+    Sound ENTITY_SKELETON_HORSE_DEATH = getSound("entity.skeleton_horse.death");
+
+    Sound ENTITY_SKELETON_HORSE_GALLOP_WATER = getSound("entity.skeleton_horse.gallop_water");
+
+    Sound ENTITY_SKELETON_HORSE_HURT = getSound("entity.skeleton_horse.hurt");
+
+    Sound ENTITY_SKELETON_HORSE_JUMP_WATER = getSound("entity.skeleton_horse.jump_water");
+
+    Sound ENTITY_SKELETON_HORSE_STEP_WATER = getSound("entity.skeleton_horse.step_water");
+
+    Sound ENTITY_SKELETON_HORSE_SWIM = getSound("entity.skeleton_horse.swim");
+
     Sound ENTITY_SLIME_ATTACK = getSound("entity.slime.attack");
+
     Sound ENTITY_SLIME_DEATH = getSound("entity.slime.death");
+
     Sound ENTITY_SLIME_DEATH_SMALL = getSound("entity.slime.death_small");
+
     Sound ENTITY_SLIME_HURT = getSound("entity.slime.hurt");
+
     Sound ENTITY_SLIME_HURT_SMALL = getSound("entity.slime.hurt_small");
+
     Sound ENTITY_SLIME_JUMP = getSound("entity.slime.jump");
+
     Sound ENTITY_SLIME_JUMP_SMALL = getSound("entity.slime.jump_small");
+
     Sound ENTITY_SLIME_SQUISH = getSound("entity.slime.squish");
+
     Sound ENTITY_SLIME_SQUISH_SMALL = getSound("entity.slime.squish_small");
+
     Sound ENTITY_SNIFFER_DEATH = getSound("entity.sniffer.death");
+
     Sound ENTITY_SNIFFER_DIGGING = getSound("entity.sniffer.digging");
+
     Sound ENTITY_SNIFFER_DIGGING_STOP = getSound("entity.sniffer.digging_stop");
+
     Sound ENTITY_SNIFFER_DROP_SEED = getSound("entity.sniffer.drop_seed");
+
     Sound ENTITY_SNIFFER_EAT = getSound("entity.sniffer.eat");
+
     Sound ENTITY_SNIFFER_HAPPY = getSound("entity.sniffer.happy");
+
     Sound ENTITY_SNIFFER_HURT = getSound("entity.sniffer.hurt");
+
     Sound ENTITY_SNIFFER_IDLE = getSound("entity.sniffer.idle");
+
     Sound ENTITY_SNIFFER_SCENTING = getSound("entity.sniffer.scenting");
+
     Sound ENTITY_SNIFFER_SEARCHING = getSound("entity.sniffer.searching");
+
     Sound ENTITY_SNIFFER_SNIFFING = getSound("entity.sniffer.sniffing");
+
     Sound ENTITY_SNIFFER_STEP = getSound("entity.sniffer.step");
-    Sound ENTITY_SNOWBALL_THROW = getSound("entity.snowball.throw");
+
     Sound ENTITY_SNOW_GOLEM_AMBIENT = getSound("entity.snow_golem.ambient");
+
     Sound ENTITY_SNOW_GOLEM_DEATH = getSound("entity.snow_golem.death");
+
     Sound ENTITY_SNOW_GOLEM_HURT = getSound("entity.snow_golem.hurt");
+
     Sound ENTITY_SNOW_GOLEM_SHEAR = getSound("entity.snow_golem.shear");
+
     Sound ENTITY_SNOW_GOLEM_SHOOT = getSound("entity.snow_golem.shoot");
+
+    Sound ENTITY_SNOWBALL_THROW = getSound("entity.snowball.throw");
+
     Sound ENTITY_SPIDER_AMBIENT = getSound("entity.spider.ambient");
+
     Sound ENTITY_SPIDER_DEATH = getSound("entity.spider.death");
+
     Sound ENTITY_SPIDER_HURT = getSound("entity.spider.hurt");
+
     Sound ENTITY_SPIDER_STEP = getSound("entity.spider.step");
+
     Sound ENTITY_SPLASH_POTION_BREAK = getSound("entity.splash_potion.break");
+
     Sound ENTITY_SPLASH_POTION_THROW = getSound("entity.splash_potion.throw");
+
     Sound ENTITY_SQUID_AMBIENT = getSound("entity.squid.ambient");
+
     Sound ENTITY_SQUID_DEATH = getSound("entity.squid.death");
+
     Sound ENTITY_SQUID_HURT = getSound("entity.squid.hurt");
+
     Sound ENTITY_SQUID_SQUIRT = getSound("entity.squid.squirt");
+
     Sound ENTITY_STRAY_AMBIENT = getSound("entity.stray.ambient");
+
     Sound ENTITY_STRAY_DEATH = getSound("entity.stray.death");
+
     Sound ENTITY_STRAY_HURT = getSound("entity.stray.hurt");
+
     Sound ENTITY_STRAY_STEP = getSound("entity.stray.step");
+
     Sound ENTITY_STRIDER_AMBIENT = getSound("entity.strider.ambient");
+
     Sound ENTITY_STRIDER_DEATH = getSound("entity.strider.death");
+
     Sound ENTITY_STRIDER_EAT = getSound("entity.strider.eat");
+
     Sound ENTITY_STRIDER_HAPPY = getSound("entity.strider.happy");
+
     Sound ENTITY_STRIDER_HURT = getSound("entity.strider.hurt");
+
     Sound ENTITY_STRIDER_RETREAT = getSound("entity.strider.retreat");
+
     Sound ENTITY_STRIDER_SADDLE = getSound("entity.strider.saddle");
+
     Sound ENTITY_STRIDER_STEP = getSound("entity.strider.step");
+
     Sound ENTITY_STRIDER_STEP_LAVA = getSound("entity.strider.step_lava");
+
     Sound ENTITY_TADPOLE_DEATH = getSound("entity.tadpole.death");
+
     Sound ENTITY_TADPOLE_FLOP = getSound("entity.tadpole.flop");
+
     Sound ENTITY_TADPOLE_GROW_UP = getSound("entity.tadpole.grow_up");
+
     Sound ENTITY_TADPOLE_HURT = getSound("entity.tadpole.hurt");
+
     Sound ENTITY_TNT_PRIMED = getSound("entity.tnt.primed");
+
     Sound ENTITY_TROPICAL_FISH_AMBIENT = getSound("entity.tropical_fish.ambient");
+
     Sound ENTITY_TROPICAL_FISH_DEATH = getSound("entity.tropical_fish.death");
+
     Sound ENTITY_TROPICAL_FISH_FLOP = getSound("entity.tropical_fish.flop");
+
     Sound ENTITY_TROPICAL_FISH_HURT = getSound("entity.tropical_fish.hurt");
+
     Sound ENTITY_TURTLE_AMBIENT_LAND = getSound("entity.turtle.ambient_land");
+
     Sound ENTITY_TURTLE_DEATH = getSound("entity.turtle.death");
+
     Sound ENTITY_TURTLE_DEATH_BABY = getSound("entity.turtle.death_baby");
+
     Sound ENTITY_TURTLE_EGG_BREAK = getSound("entity.turtle.egg_break");
+
     Sound ENTITY_TURTLE_EGG_CRACK = getSound("entity.turtle.egg_crack");
+
     Sound ENTITY_TURTLE_EGG_HATCH = getSound("entity.turtle.egg_hatch");
+
     Sound ENTITY_TURTLE_HURT = getSound("entity.turtle.hurt");
+
     Sound ENTITY_TURTLE_HURT_BABY = getSound("entity.turtle.hurt_baby");
+
     Sound ENTITY_TURTLE_LAY_EGG = getSound("entity.turtle.lay_egg");
+
     Sound ENTITY_TURTLE_SHAMBLE = getSound("entity.turtle.shamble");
+
     Sound ENTITY_TURTLE_SHAMBLE_BABY = getSound("entity.turtle.shamble_baby");
+
     Sound ENTITY_TURTLE_SWIM = getSound("entity.turtle.swim");
+
     Sound ENTITY_VEX_AMBIENT = getSound("entity.vex.ambient");
+
     Sound ENTITY_VEX_CHARGE = getSound("entity.vex.charge");
+
     Sound ENTITY_VEX_DEATH = getSound("entity.vex.death");
+
     Sound ENTITY_VEX_HURT = getSound("entity.vex.hurt");
+
     Sound ENTITY_VILLAGER_AMBIENT = getSound("entity.villager.ambient");
+
     Sound ENTITY_VILLAGER_CELEBRATE = getSound("entity.villager.celebrate");
+
     Sound ENTITY_VILLAGER_DEATH = getSound("entity.villager.death");
+
     Sound ENTITY_VILLAGER_HURT = getSound("entity.villager.hurt");
+
     Sound ENTITY_VILLAGER_NO = getSound("entity.villager.no");
+
     Sound ENTITY_VILLAGER_TRADE = getSound("entity.villager.trade");
+
     Sound ENTITY_VILLAGER_WORK_ARMORER = getSound("entity.villager.work_armorer");
+
     Sound ENTITY_VILLAGER_WORK_BUTCHER = getSound("entity.villager.work_butcher");
+
     Sound ENTITY_VILLAGER_WORK_CARTOGRAPHER = getSound("entity.villager.work_cartographer");
+
     Sound ENTITY_VILLAGER_WORK_CLERIC = getSound("entity.villager.work_cleric");
+
     Sound ENTITY_VILLAGER_WORK_FARMER = getSound("entity.villager.work_farmer");
+
     Sound ENTITY_VILLAGER_WORK_FISHERMAN = getSound("entity.villager.work_fisherman");
+
     Sound ENTITY_VILLAGER_WORK_FLETCHER = getSound("entity.villager.work_fletcher");
+
     Sound ENTITY_VILLAGER_WORK_LEATHERWORKER = getSound("entity.villager.work_leatherworker");
+
     Sound ENTITY_VILLAGER_WORK_LIBRARIAN = getSound("entity.villager.work_librarian");
+
     Sound ENTITY_VILLAGER_WORK_MASON = getSound("entity.villager.work_mason");
+
     Sound ENTITY_VILLAGER_WORK_SHEPHERD = getSound("entity.villager.work_shepherd");
+
     Sound ENTITY_VILLAGER_WORK_TOOLSMITH = getSound("entity.villager.work_toolsmith");
+
     Sound ENTITY_VILLAGER_WORK_WEAPONSMITH = getSound("entity.villager.work_weaponsmith");
+
     Sound ENTITY_VILLAGER_YES = getSound("entity.villager.yes");
+
     Sound ENTITY_VINDICATOR_AMBIENT = getSound("entity.vindicator.ambient");
+
     Sound ENTITY_VINDICATOR_CELEBRATE = getSound("entity.vindicator.celebrate");
+
     Sound ENTITY_VINDICATOR_DEATH = getSound("entity.vindicator.death");
+
     Sound ENTITY_VINDICATOR_HURT = getSound("entity.vindicator.hurt");
+
     Sound ENTITY_WANDERING_TRADER_AMBIENT = getSound("entity.wandering_trader.ambient");
+
     Sound ENTITY_WANDERING_TRADER_DEATH = getSound("entity.wandering_trader.death");
+
     Sound ENTITY_WANDERING_TRADER_DISAPPEARED = getSound("entity.wandering_trader.disappeared");
+
     Sound ENTITY_WANDERING_TRADER_DRINK_MILK = getSound("entity.wandering_trader.drink_milk");
+
     Sound ENTITY_WANDERING_TRADER_DRINK_POTION = getSound("entity.wandering_trader.drink_potion");
+
     Sound ENTITY_WANDERING_TRADER_HURT = getSound("entity.wandering_trader.hurt");
+
     Sound ENTITY_WANDERING_TRADER_NO = getSound("entity.wandering_trader.no");
+
     Sound ENTITY_WANDERING_TRADER_REAPPEARED = getSound("entity.wandering_trader.reappeared");
+
     Sound ENTITY_WANDERING_TRADER_TRADE = getSound("entity.wandering_trader.trade");
+
     Sound ENTITY_WANDERING_TRADER_YES = getSound("entity.wandering_trader.yes");
+
     Sound ENTITY_WARDEN_AGITATED = getSound("entity.warden.agitated");
+
     Sound ENTITY_WARDEN_AMBIENT = getSound("entity.warden.ambient");
+
     Sound ENTITY_WARDEN_ANGRY = getSound("entity.warden.angry");
+
     Sound ENTITY_WARDEN_ATTACK_IMPACT = getSound("entity.warden.attack_impact");
+
     Sound ENTITY_WARDEN_DEATH = getSound("entity.warden.death");
+
     Sound ENTITY_WARDEN_DIG = getSound("entity.warden.dig");
+
     Sound ENTITY_WARDEN_EMERGE = getSound("entity.warden.emerge");
+
     Sound ENTITY_WARDEN_HEARTBEAT = getSound("entity.warden.heartbeat");
+
     Sound ENTITY_WARDEN_HURT = getSound("entity.warden.hurt");
+
     Sound ENTITY_WARDEN_LISTENING = getSound("entity.warden.listening");
+
     Sound ENTITY_WARDEN_LISTENING_ANGRY = getSound("entity.warden.listening_angry");
+
     Sound ENTITY_WARDEN_NEARBY_CLOSE = getSound("entity.warden.nearby_close");
+
     Sound ENTITY_WARDEN_NEARBY_CLOSER = getSound("entity.warden.nearby_closer");
+
     Sound ENTITY_WARDEN_NEARBY_CLOSEST = getSound("entity.warden.nearby_closest");
+
     Sound ENTITY_WARDEN_ROAR = getSound("entity.warden.roar");
+
     Sound ENTITY_WARDEN_SNIFF = getSound("entity.warden.sniff");
+
     Sound ENTITY_WARDEN_SONIC_BOOM = getSound("entity.warden.sonic_boom");
+
     Sound ENTITY_WARDEN_SONIC_CHARGE = getSound("entity.warden.sonic_charge");
+
     Sound ENTITY_WARDEN_STEP = getSound("entity.warden.step");
+
     Sound ENTITY_WARDEN_TENDRIL_CLICKS = getSound("entity.warden.tendril_clicks");
+
     Sound ENTITY_WIND_CHARGE_THROW = getSound("entity.wind_charge.throw");
+
     Sound ENTITY_WIND_CHARGE_WIND_BURST = getSound("entity.wind_charge.wind_burst");
+
     Sound ENTITY_WITCH_AMBIENT = getSound("entity.witch.ambient");
+
     Sound ENTITY_WITCH_CELEBRATE = getSound("entity.witch.celebrate");
+
     Sound ENTITY_WITCH_DEATH = getSound("entity.witch.death");
+
     Sound ENTITY_WITCH_DRINK = getSound("entity.witch.drink");
+
     Sound ENTITY_WITCH_HURT = getSound("entity.witch.hurt");
+
     Sound ENTITY_WITCH_THROW = getSound("entity.witch.throw");
+
     Sound ENTITY_WITHER_AMBIENT = getSound("entity.wither.ambient");
+
     Sound ENTITY_WITHER_BREAK_BLOCK = getSound("entity.wither.break_block");
+
     Sound ENTITY_WITHER_DEATH = getSound("entity.wither.death");
+
     Sound ENTITY_WITHER_HURT = getSound("entity.wither.hurt");
+
     Sound ENTITY_WITHER_SHOOT = getSound("entity.wither.shoot");
-    Sound ENTITY_WITHER_SKELETON_AMBIENT = getSound("entity.wither_skeleton.ambient");
-    Sound ENTITY_WITHER_SKELETON_DEATH = getSound("entity.wither_skeleton.death");
-    Sound ENTITY_WITHER_SKELETON_HURT = getSound("entity.wither_skeleton.hurt");
-    Sound ENTITY_WITHER_SKELETON_STEP = getSound("entity.wither_skeleton.step");
+
     Sound ENTITY_WITHER_SPAWN = getSound("entity.wither.spawn");
+
+    Sound ENTITY_WITHER_SKELETON_AMBIENT = getSound("entity.wither_skeleton.ambient");
+
+    Sound ENTITY_WITHER_SKELETON_DEATH = getSound("entity.wither_skeleton.death");
+
+    Sound ENTITY_WITHER_SKELETON_HURT = getSound("entity.wither_skeleton.hurt");
+
+    Sound ENTITY_WITHER_SKELETON_STEP = getSound("entity.wither_skeleton.step");
+
     Sound ENTITY_WOLF_AMBIENT = getSound("entity.wolf.ambient");
+
     Sound ENTITY_WOLF_DEATH = getSound("entity.wolf.death");
+
     Sound ENTITY_WOLF_GROWL = getSound("entity.wolf.growl");
+
     Sound ENTITY_WOLF_HOWL = getSound("entity.wolf.howl");
+
     Sound ENTITY_WOLF_HURT = getSound("entity.wolf.hurt");
+
     Sound ENTITY_WOLF_PANT = getSound("entity.wolf.pant");
+
     Sound ENTITY_WOLF_SHAKE = getSound("entity.wolf.shake");
+
     Sound ENTITY_WOLF_STEP = getSound("entity.wolf.step");
+
     Sound ENTITY_WOLF_WHINE = getSound("entity.wolf.whine");
+
     Sound ENTITY_ZOGLIN_AMBIENT = getSound("entity.zoglin.ambient");
+
     Sound ENTITY_ZOGLIN_ANGRY = getSound("entity.zoglin.angry");
+
     Sound ENTITY_ZOGLIN_ATTACK = getSound("entity.zoglin.attack");
+
     Sound ENTITY_ZOGLIN_DEATH = getSound("entity.zoglin.death");
+
     Sound ENTITY_ZOGLIN_HURT = getSound("entity.zoglin.hurt");
+
     Sound ENTITY_ZOGLIN_STEP = getSound("entity.zoglin.step");
+
     Sound ENTITY_ZOMBIE_AMBIENT = getSound("entity.zombie.ambient");
+
     Sound ENTITY_ZOMBIE_ATTACK_IRON_DOOR = getSound("entity.zombie.attack_iron_door");
+
     Sound ENTITY_ZOMBIE_ATTACK_WOODEN_DOOR = getSound("entity.zombie.attack_wooden_door");
+
     Sound ENTITY_ZOMBIE_BREAK_WOODEN_DOOR = getSound("entity.zombie.break_wooden_door");
+
     Sound ENTITY_ZOMBIE_CONVERTED_TO_DROWNED = getSound("entity.zombie.converted_to_drowned");
+
     Sound ENTITY_ZOMBIE_DEATH = getSound("entity.zombie.death");
+
     Sound ENTITY_ZOMBIE_DESTROY_EGG = getSound("entity.zombie.destroy_egg");
-    Sound ENTITY_ZOMBIE_HORSE_AMBIENT = getSound("entity.zombie_horse.ambient");
-    Sound ENTITY_ZOMBIE_HORSE_DEATH = getSound("entity.zombie_horse.death");
-    Sound ENTITY_ZOMBIE_HORSE_HURT = getSound("entity.zombie_horse.hurt");
+
     Sound ENTITY_ZOMBIE_HURT = getSound("entity.zombie.hurt");
+
     Sound ENTITY_ZOMBIE_INFECT = getSound("entity.zombie.infect");
+
     Sound ENTITY_ZOMBIE_STEP = getSound("entity.zombie.step");
+
+    Sound ENTITY_ZOMBIE_HORSE_AMBIENT = getSound("entity.zombie_horse.ambient");
+
+    Sound ENTITY_ZOMBIE_HORSE_DEATH = getSound("entity.zombie_horse.death");
+
+    Sound ENTITY_ZOMBIE_HORSE_HURT = getSound("entity.zombie_horse.hurt");
+
     Sound ENTITY_ZOMBIE_VILLAGER_AMBIENT = getSound("entity.zombie_villager.ambient");
+
     Sound ENTITY_ZOMBIE_VILLAGER_CONVERTED = getSound("entity.zombie_villager.converted");
+
     Sound ENTITY_ZOMBIE_VILLAGER_CURE = getSound("entity.zombie_villager.cure");
+
     Sound ENTITY_ZOMBIE_VILLAGER_DEATH = getSound("entity.zombie_villager.death");
+
     Sound ENTITY_ZOMBIE_VILLAGER_HURT = getSound("entity.zombie_villager.hurt");
+
     Sound ENTITY_ZOMBIE_VILLAGER_STEP = getSound("entity.zombie_villager.step");
+
     Sound ENTITY_ZOMBIFIED_PIGLIN_AMBIENT = getSound("entity.zombified_piglin.ambient");
+
     Sound ENTITY_ZOMBIFIED_PIGLIN_ANGRY = getSound("entity.zombified_piglin.angry");
+
     Sound ENTITY_ZOMBIFIED_PIGLIN_DEATH = getSound("entity.zombified_piglin.death");
+
     Sound ENTITY_ZOMBIFIED_PIGLIN_HURT = getSound("entity.zombified_piglin.hurt");
+
     Sound EVENT_MOB_EFFECT_BAD_OMEN = getSound("event.mob_effect.bad_omen");
+
     Sound EVENT_MOB_EFFECT_RAID_OMEN = getSound("event.mob_effect.raid_omen");
+
     Sound EVENT_MOB_EFFECT_TRIAL_OMEN = getSound("event.mob_effect.trial_omen");
+
     Sound EVENT_RAID_HORN = getSound("event.raid.horn");
+
     Sound INTENTIONALLY_EMPTY = getSound("intentionally_empty");
+
     Sound ITEM_ARMOR_EQUIP_CHAIN = getSound("item.armor.equip_chain");
+
     Sound ITEM_ARMOR_EQUIP_DIAMOND = getSound("item.armor.equip_diamond");
+
     Sound ITEM_ARMOR_EQUIP_ELYTRA = getSound("item.armor.equip_elytra");
+
     Sound ITEM_ARMOR_EQUIP_GENERIC = getSound("item.armor.equip_generic");
+
     Sound ITEM_ARMOR_EQUIP_GOLD = getSound("item.armor.equip_gold");
+
     Sound ITEM_ARMOR_EQUIP_IRON = getSound("item.armor.equip_iron");
+
     Sound ITEM_ARMOR_EQUIP_LEATHER = getSound("item.armor.equip_leather");
+
     Sound ITEM_ARMOR_EQUIP_NETHERITE = getSound("item.armor.equip_netherite");
+
     Sound ITEM_ARMOR_EQUIP_TURTLE = getSound("item.armor.equip_turtle");
+
     Sound ITEM_ARMOR_EQUIP_WOLF = getSound("item.armor.equip_wolf");
+
     Sound ITEM_ARMOR_UNEQUIP_WOLF = getSound("item.armor.unequip_wolf");
+
     Sound ITEM_AXE_SCRAPE = getSound("item.axe.scrape");
+
     Sound ITEM_AXE_STRIP = getSound("item.axe.strip");
+
     Sound ITEM_AXE_WAX_OFF = getSound("item.axe.wax_off");
+
     Sound ITEM_BONE_MEAL_USE = getSound("item.bone_meal.use");
+
     Sound ITEM_BOOK_PAGE_TURN = getSound("item.book.page_turn");
+
     Sound ITEM_BOOK_PUT = getSound("item.book.put");
+
     Sound ITEM_BOTTLE_EMPTY = getSound("item.bottle.empty");
+
     Sound ITEM_BOTTLE_FILL = getSound("item.bottle.fill");
+
     Sound ITEM_BOTTLE_FILL_DRAGONBREATH = getSound("item.bottle.fill_dragonbreath");
+
     Sound ITEM_BRUSH_BRUSHING_GENERIC = getSound("item.brush.brushing.generic");
+
     Sound ITEM_BRUSH_BRUSHING_GRAVEL = getSound("item.brush.brushing.gravel");
+
     Sound ITEM_BRUSH_BRUSHING_GRAVEL_COMPLETE = getSound("item.brush.brushing.gravel.complete");
+
     Sound ITEM_BRUSH_BRUSHING_SAND = getSound("item.brush.brushing.sand");
+
     Sound ITEM_BRUSH_BRUSHING_SAND_COMPLETE = getSound("item.brush.brushing.sand.complete");
+
     Sound ITEM_BUCKET_EMPTY = getSound("item.bucket.empty");
+
     Sound ITEM_BUCKET_EMPTY_AXOLOTL = getSound("item.bucket.empty_axolotl");
+
     Sound ITEM_BUCKET_EMPTY_FISH = getSound("item.bucket.empty_fish");
+
     Sound ITEM_BUCKET_EMPTY_LAVA = getSound("item.bucket.empty_lava");
+
     Sound ITEM_BUCKET_EMPTY_POWDER_SNOW = getSound("item.bucket.empty_powder_snow");
+
     Sound ITEM_BUCKET_EMPTY_TADPOLE = getSound("item.bucket.empty_tadpole");
+
     Sound ITEM_BUCKET_FILL = getSound("item.bucket.fill");
+
     Sound ITEM_BUCKET_FILL_AXOLOTL = getSound("item.bucket.fill_axolotl");
+
     Sound ITEM_BUCKET_FILL_FISH = getSound("item.bucket.fill_fish");
+
     Sound ITEM_BUCKET_FILL_LAVA = getSound("item.bucket.fill_lava");
+
     Sound ITEM_BUCKET_FILL_POWDER_SNOW = getSound("item.bucket.fill_powder_snow");
+
     Sound ITEM_BUCKET_FILL_TADPOLE = getSound("item.bucket.fill_tadpole");
+
     Sound ITEM_BUNDLE_DROP_CONTENTS = getSound("item.bundle.drop_contents");
+
     Sound ITEM_BUNDLE_INSERT = getSound("item.bundle.insert");
+
     Sound ITEM_BUNDLE_INSERT_FAIL = getSound("item.bundle.insert_fail");
+
     Sound ITEM_BUNDLE_REMOVE_ONE = getSound("item.bundle.remove_one");
+
     Sound ITEM_CHORUS_FRUIT_TELEPORT = getSound("item.chorus_fruit.teleport");
+
     Sound ITEM_CROP_PLANT = getSound("item.crop.plant");
+
     Sound ITEM_CROSSBOW_HIT = getSound("item.crossbow.hit");
+
     Sound ITEM_CROSSBOW_LOADING_END = getSound("item.crossbow.loading_end");
+
     Sound ITEM_CROSSBOW_LOADING_MIDDLE = getSound("item.crossbow.loading_middle");
+
     Sound ITEM_CROSSBOW_LOADING_START = getSound("item.crossbow.loading_start");
+
     Sound ITEM_CROSSBOW_QUICK_CHARGE_1 = getSound("item.crossbow.quick_charge_1");
+
     Sound ITEM_CROSSBOW_QUICK_CHARGE_2 = getSound("item.crossbow.quick_charge_2");
+
     Sound ITEM_CROSSBOW_QUICK_CHARGE_3 = getSound("item.crossbow.quick_charge_3");
+
     Sound ITEM_CROSSBOW_SHOOT = getSound("item.crossbow.shoot");
+
     Sound ITEM_DYE_USE = getSound("item.dye.use");
+
     Sound ITEM_ELYTRA_FLYING = getSound("item.elytra.flying");
+
     Sound ITEM_FIRECHARGE_USE = getSound("item.firecharge.use");
+
     Sound ITEM_FLINTANDSTEEL_USE = getSound("item.flintandsteel.use");
+
     Sound ITEM_GLOW_INK_SAC_USE = getSound("item.glow_ink_sac.use");
+
     Sound ITEM_GOAT_HORN_SOUND_0 = getSound("item.goat_horn.sound.0");
+
     Sound ITEM_GOAT_HORN_SOUND_1 = getSound("item.goat_horn.sound.1");
+
     Sound ITEM_GOAT_HORN_SOUND_2 = getSound("item.goat_horn.sound.2");
+
     Sound ITEM_GOAT_HORN_SOUND_3 = getSound("item.goat_horn.sound.3");
+
     Sound ITEM_GOAT_HORN_SOUND_4 = getSound("item.goat_horn.sound.4");
+
     Sound ITEM_GOAT_HORN_SOUND_5 = getSound("item.goat_horn.sound.5");
+
     Sound ITEM_GOAT_HORN_SOUND_6 = getSound("item.goat_horn.sound.6");
+
     Sound ITEM_GOAT_HORN_SOUND_7 = getSound("item.goat_horn.sound.7");
+
     Sound ITEM_HOE_TILL = getSound("item.hoe.till");
-    Sound ITEM_HONEYCOMB_WAX_ON = getSound("item.honeycomb.wax_on");
+
     Sound ITEM_HONEY_BOTTLE_DRINK = getSound("item.honey_bottle.drink");
+
+    Sound ITEM_HONEYCOMB_WAX_ON = getSound("item.honeycomb.wax_on");
+
     Sound ITEM_INK_SAC_USE = getSound("item.ink_sac.use");
+
     Sound ITEM_LODESTONE_COMPASS_LOCK = getSound("item.lodestone_compass.lock");
+
     Sound ITEM_MACE_SMASH_AIR = getSound("item.mace.smash_air");
+
     Sound ITEM_MACE_SMASH_GROUND = getSound("item.mace.smash_ground");
+
     Sound ITEM_MACE_SMASH_GROUND_HEAVY = getSound("item.mace.smash_ground_heavy");
+
     Sound ITEM_NETHER_WART_PLANT = getSound("item.nether_wart.plant");
+
     Sound ITEM_OMINOUS_BOTTLE_DISPOSE = getSound("item.ominous_bottle.dispose");
+
     Sound ITEM_SHIELD_BLOCK = getSound("item.shield.block");
+
     Sound ITEM_SHIELD_BREAK = getSound("item.shield.break");
+
     Sound ITEM_SHOVEL_FLATTEN = getSound("item.shovel.flatten");
+
     Sound ITEM_SPYGLASS_STOP_USING = getSound("item.spyglass.stop_using");
+
     Sound ITEM_SPYGLASS_USE = getSound("item.spyglass.use");
+
     Sound ITEM_TOTEM_USE = getSound("item.totem.use");
+
     Sound ITEM_TRIDENT_HIT = getSound("item.trident.hit");
+
     Sound ITEM_TRIDENT_HIT_GROUND = getSound("item.trident.hit_ground");
+
     Sound ITEM_TRIDENT_RETURN = getSound("item.trident.return");
+
     Sound ITEM_TRIDENT_RIPTIDE_1 = getSound("item.trident.riptide_1");
+
     Sound ITEM_TRIDENT_RIPTIDE_2 = getSound("item.trident.riptide_2");
+
     Sound ITEM_TRIDENT_RIPTIDE_3 = getSound("item.trident.riptide_3");
+
     Sound ITEM_TRIDENT_THROW = getSound("item.trident.throw");
+
     Sound ITEM_TRIDENT_THUNDER = getSound("item.trident.thunder");
+
     Sound ITEM_WOLF_ARMOR_BREAK = getSound("item.wolf_armor.break");
+
     Sound ITEM_WOLF_ARMOR_CRACK = getSound("item.wolf_armor.crack");
+
     Sound ITEM_WOLF_ARMOR_DAMAGE = getSound("item.wolf_armor.damage");
+
     Sound ITEM_WOLF_ARMOR_REPAIR = getSound("item.wolf_armor.repair");
+
     Sound MUSIC_CREATIVE = getSound("music.creative");
+
     Sound MUSIC_CREDITS = getSound("music.credits");
-    Sound MUSIC_DISC_11 = getSound("music_disc.11");
-    Sound MUSIC_DISC_13 = getSound("music_disc.13");
-    Sound MUSIC_DISC_5 = getSound("music_disc.5");
-    Sound MUSIC_DISC_BLOCKS = getSound("music_disc.blocks");
-    Sound MUSIC_DISC_CAT = getSound("music_disc.cat");
-    Sound MUSIC_DISC_CHIRP = getSound("music_disc.chirp");
-    Sound MUSIC_DISC_CREATOR = getSound("music_disc.creator");
-    Sound MUSIC_DISC_CREATOR_MUSIC_BOX = getSound("music_disc.creator_music_box");
-    Sound MUSIC_DISC_FAR = getSound("music_disc.far");
-    Sound MUSIC_DISC_MALL = getSound("music_disc.mall");
-    Sound MUSIC_DISC_MELLOHI = getSound("music_disc.mellohi");
-    Sound MUSIC_DISC_OTHERSIDE = getSound("music_disc.otherside");
-    Sound MUSIC_DISC_PIGSTEP = getSound("music_disc.pigstep");
-    Sound MUSIC_DISC_PRECIPICE = getSound("music_disc.precipice");
-    Sound MUSIC_DISC_RELIC = getSound("music_disc.relic");
-    Sound MUSIC_DISC_STAL = getSound("music_disc.stal");
-    Sound MUSIC_DISC_STRAD = getSound("music_disc.strad");
-    Sound MUSIC_DISC_WAIT = getSound("music_disc.wait");
-    Sound MUSIC_DISC_WARD = getSound("music_disc.ward");
+
     Sound MUSIC_DRAGON = getSound("music.dragon");
+
     Sound MUSIC_END = getSound("music.end");
+
     Sound MUSIC_GAME = getSound("music.game");
+
     Sound MUSIC_MENU = getSound("music.menu");
+
     Sound MUSIC_NETHER_BASALT_DELTAS = getSound("music.nether.basalt_deltas");
+
     Sound MUSIC_NETHER_CRIMSON_FOREST = getSound("music.nether.crimson_forest");
+
     Sound MUSIC_NETHER_NETHER_WASTES = getSound("music.nether.nether_wastes");
+
     Sound MUSIC_NETHER_SOUL_SAND_VALLEY = getSound("music.nether.soul_sand_valley");
+
     Sound MUSIC_NETHER_WARPED_FOREST = getSound("music.nether.warped_forest");
+
     Sound MUSIC_OVERWORLD_BADLANDS = getSound("music.overworld.badlands");
+
     Sound MUSIC_OVERWORLD_BAMBOO_JUNGLE = getSound("music.overworld.bamboo_jungle");
+
     Sound MUSIC_OVERWORLD_CHERRY_GROVE = getSound("music.overworld.cherry_grove");
+
     Sound MUSIC_OVERWORLD_DEEP_DARK = getSound("music.overworld.deep_dark");
+
     Sound MUSIC_OVERWORLD_DESERT = getSound("music.overworld.desert");
+
     Sound MUSIC_OVERWORLD_DRIPSTONE_CAVES = getSound("music.overworld.dripstone_caves");
+
     Sound MUSIC_OVERWORLD_FLOWER_FOREST = getSound("music.overworld.flower_forest");
+
     Sound MUSIC_OVERWORLD_FOREST = getSound("music.overworld.forest");
+
     Sound MUSIC_OVERWORLD_FROZEN_PEAKS = getSound("music.overworld.frozen_peaks");
+
     Sound MUSIC_OVERWORLD_GROVE = getSound("music.overworld.grove");
+
     Sound MUSIC_OVERWORLD_JAGGED_PEAKS = getSound("music.overworld.jagged_peaks");
+
     Sound MUSIC_OVERWORLD_JUNGLE = getSound("music.overworld.jungle");
+
     Sound MUSIC_OVERWORLD_LUSH_CAVES = getSound("music.overworld.lush_caves");
+
     Sound MUSIC_OVERWORLD_MEADOW = getSound("music.overworld.meadow");
+
     Sound MUSIC_OVERWORLD_OLD_GROWTH_TAIGA = getSound("music.overworld.old_growth_taiga");
+
     Sound MUSIC_OVERWORLD_SNOWY_SLOPES = getSound("music.overworld.snowy_slopes");
+
     Sound MUSIC_OVERWORLD_SPARSE_JUNGLE = getSound("music.overworld.sparse_jungle");
+
     Sound MUSIC_OVERWORLD_STONY_PEAKS = getSound("music.overworld.stony_peaks");
+
     Sound MUSIC_OVERWORLD_SWAMP = getSound("music.overworld.swamp");
+
     Sound MUSIC_UNDER_WATER = getSound("music.under_water");
+
+    Sound MUSIC_DISC_11 = getSound("music_disc.11");
+
+    Sound MUSIC_DISC_13 = getSound("music_disc.13");
+
+    Sound MUSIC_DISC_5 = getSound("music_disc.5");
+
+    Sound MUSIC_DISC_BLOCKS = getSound("music_disc.blocks");
+
+    Sound MUSIC_DISC_CAT = getSound("music_disc.cat");
+
+    Sound MUSIC_DISC_CHIRP = getSound("music_disc.chirp");
+
+    Sound MUSIC_DISC_CREATOR = getSound("music_disc.creator");
+
+    Sound MUSIC_DISC_CREATOR_MUSIC_BOX = getSound("music_disc.creator_music_box");
+
+    Sound MUSIC_DISC_FAR = getSound("music_disc.far");
+
+    Sound MUSIC_DISC_MALL = getSound("music_disc.mall");
+
+    Sound MUSIC_DISC_MELLOHI = getSound("music_disc.mellohi");
+
+    Sound MUSIC_DISC_OTHERSIDE = getSound("music_disc.otherside");
+
+    Sound MUSIC_DISC_PIGSTEP = getSound("music_disc.pigstep");
+
+    Sound MUSIC_DISC_PRECIPICE = getSound("music_disc.precipice");
+
+    Sound MUSIC_DISC_RELIC = getSound("music_disc.relic");
+
+    Sound MUSIC_DISC_STAL = getSound("music_disc.stal");
+
+    Sound MUSIC_DISC_STRAD = getSound("music_disc.strad");
+
+    Sound MUSIC_DISC_WAIT = getSound("music_disc.wait");
+
+    Sound MUSIC_DISC_WARD = getSound("music_disc.ward");
+
     Sound PARTICLE_SOUL_ESCAPE = getSound("particle.soul_escape");
+
     Sound UI_BUTTON_CLICK = getSound("ui.button.click");
+
     Sound UI_CARTOGRAPHY_TABLE_TAKE_RESULT = getSound("ui.cartography_table.take_result");
+
     Sound UI_HUD_BUBBLE_POP = getSound("ui.hud.bubble_pop");
+
     Sound UI_LOOM_SELECT_PATTERN = getSound("ui.loom.select_pattern");
+
     Sound UI_LOOM_TAKE_RESULT = getSound("ui.loom.take_result");
+
     Sound UI_STONECUTTER_SELECT_RECIPE = getSound("ui.stonecutter.select_recipe");
+
     Sound UI_STONECUTTER_TAKE_RESULT = getSound("ui.stonecutter.take_result");
+
     Sound UI_TOAST_CHALLENGE_COMPLETE = getSound("ui.toast.challenge_complete");
+
     Sound UI_TOAST_IN = getSound("ui.toast.in");
+
     Sound UI_TOAST_OUT = getSound("ui.toast.out");
+
     Sound WEATHER_RAIN = getSound("weather.rain");
+
     Sound WEATHER_RAIN_ABOVE = getSound("weather.rain.above");
+    // End generate - Sound
 
     @NotNull
     private static Sound getSound(@NotNull String key) {
diff --git a/paper-api/src/main/java/org/bukkit/Statistic.java b/paper-api/src/main/java/org/bukkit/Statistic.java
index 4ce888688d..fa324a820d 100644
--- a/paper-api/src/main/java/org/bukkit/Statistic.java
+++ b/paper-api/src/main/java/org/bukkit/Statistic.java
@@ -7,92 +7,95 @@ import org.jetbrains.annotations.NotNull;
  * Represents a countable statistic, which is tracked by the server.
  */
 public enum Statistic implements Keyed {
-    DAMAGE_DEALT,
-    DAMAGE_TAKEN,
-    DEATHS,
-    MOB_KILLS,
-    PLAYER_KILLS,
-    FISH_CAUGHT,
+    // Start generate - StatisticCustom
+    // @GeneratedFrom 1.21.4
     ANIMALS_BRED,
-    LEAVE_GAME,
-    JUMP,
-    DROP_COUNT,
-    DROP(Type.ITEM),
-    PICKUP(Type.ITEM),
-    /**
-     * Name is misleading, actually records ticks played.
-     */
-    PLAY_ONE_MINUTE,
-    TOTAL_WORLD_TIME,
-    WALK_ONE_CM,
-    WALK_ON_WATER_ONE_CM,
-    FALL_ONE_CM,
-    SNEAK_TIME,
-    CLIMB_ONE_CM,
-    FLY_ONE_CM,
-    WALK_UNDER_WATER_ONE_CM,
-    MINECART_ONE_CM,
-    BOAT_ONE_CM,
-    PIG_ONE_CM,
-    HORSE_ONE_CM,
-    SPRINT_ONE_CM,
-    CROUCH_ONE_CM,
     AVIATE_ONE_CM,
-    MINE_BLOCK(Type.BLOCK),
-    USE_ITEM(Type.ITEM),
-    BREAK_ITEM(Type.ITEM),
-    CRAFT_ITEM(Type.ITEM),
-    KILL_ENTITY(Type.ENTITY),
-    ENTITY_KILLED_BY(Type.ENTITY),
-    TIME_SINCE_DEATH,
-    TALKED_TO_VILLAGER,
-    TRADED_WITH_VILLAGER,
-    CAKE_SLICES_EATEN,
-    CAULDRON_FILLED,
-    CAULDRON_USED,
+    BELL_RING,
+    BOAT_ONE_CM,
     ARMOR_CLEANED,
     BANNER_CLEANED,
-    BREWINGSTAND_INTERACTION,
-    BEACON_INTERACTION,
-    DROPPER_INSPECTED,
-    HOPPER_INSPECTED,
-    DISPENSER_INSPECTED,
-    NOTEBLOCK_PLAYED,
-    NOTEBLOCK_TUNED,
-    FLOWER_POTTED,
-    TRAPPED_CHEST_TRIGGERED,
-    ENDERCHEST_OPENED,
-    ITEM_ENCHANTED,
-    RECORD_PLAYED,
-    FURNACE_INTERACTION,
-    CRAFTING_TABLE_INTERACTION,
-    CHEST_OPENED,
-    SLEEP_IN_BED,
-    SHULKER_BOX_OPENED,
-    TIME_SINCE_REST,
-    SWIM_ONE_CM,
+    CLEAN_SHULKER_BOX,
+    CLIMB_ONE_CM,
+    CROUCH_ONE_CM,
+    DAMAGE_ABSORBED,
+    DAMAGE_BLOCKED_BY_SHIELD,
+    DAMAGE_DEALT,
     DAMAGE_DEALT_ABSORBED,
     DAMAGE_DEALT_RESISTED,
-    DAMAGE_BLOCKED_BY_SHIELD,
-    DAMAGE_ABSORBED,
     DAMAGE_RESISTED,
-    CLEAN_SHULKER_BOX,
-    OPEN_BARREL,
+    DAMAGE_TAKEN,
+    DEATHS,
+    DROP_COUNT,
+    CAKE_SLICES_EATEN,
+    ITEM_ENCHANTED,
+    FALL_ONE_CM,
+    CAULDRON_FILLED,
+    FISH_CAUGHT,
+    FLY_ONE_CM,
+    HORSE_ONE_CM,
+    DISPENSER_INSPECTED,
+    DROPPER_INSPECTED,
+    HOPPER_INSPECTED,
+    INTERACT_WITH_ANVIL,
+    BEACON_INTERACTION,
     INTERACT_WITH_BLAST_FURNACE,
-    INTERACT_WITH_SMOKER,
-    INTERACT_WITH_LECTERN,
+    BREWINGSTAND_INTERACTION,
     INTERACT_WITH_CAMPFIRE,
     INTERACT_WITH_CARTOGRAPHY_TABLE,
+    CRAFTING_TABLE_INTERACTION,
+    FURNACE_INTERACTION,
+    INTERACT_WITH_GRINDSTONE,
+    INTERACT_WITH_LECTERN,
     INTERACT_WITH_LOOM,
+    INTERACT_WITH_SMITHING_TABLE,
+    INTERACT_WITH_SMOKER,
     INTERACT_WITH_STONECUTTER,
-    BELL_RING,
+    JUMP,
+    LEAVE_GAME,
+    MINECART_ONE_CM,
+    MOB_KILLS,
+    OPEN_BARREL,
+    CHEST_OPENED,
+    ENDERCHEST_OPENED,
+    SHULKER_BOX_OPENED,
+    PIG_ONE_CM,
+    NOTEBLOCK_PLAYED,
+    RECORD_PLAYED,
+    PLAY_ONE_MINUTE,
+    PLAYER_KILLS,
+    FLOWER_POTTED,
     RAID_TRIGGER,
     RAID_WIN,
-    INTERACT_WITH_ANVIL,
-    INTERACT_WITH_GRINDSTONE,
+    SLEEP_IN_BED,
+    SNEAK_TIME,
+    SPRINT_ONE_CM,
+    STRIDER_ONE_CM,
+    SWIM_ONE_CM,
+    TALKED_TO_VILLAGER,
     TARGET_HIT,
-    INTERACT_WITH_SMITHING_TABLE,
-    STRIDER_ONE_CM;
+    TIME_SINCE_DEATH,
+    TIME_SINCE_REST,
+    TOTAL_WORLD_TIME,
+    TRADED_WITH_VILLAGER,
+    TRAPPED_CHEST_TRIGGERED,
+    NOTEBLOCK_TUNED,
+    CAULDRON_USED,
+    WALK_ON_WATER_ONE_CM,
+    WALK_ONE_CM,
+    WALK_UNDER_WATER_ONE_CM,
+    // End generate - StatisticCustom
+    // Start generate - StatisticType
+    // @GeneratedFrom 1.21.4
+    BREAK_ITEM(Type.ITEM),
+    CRAFT_ITEM(Type.ITEM),
+    DROP(Type.ITEM),
+    KILL_ENTITY(Type.ENTITY),
+    ENTITY_KILLED_BY(Type.ENTITY),
+    MINE_BLOCK(Type.BLOCK),
+    PICKUP(Type.ITEM),
+    USE_ITEM(Type.ITEM);
+    // End generate - StatisticType
 
     private final Type type;
     private final NamespacedKey key;
diff --git a/paper-api/src/main/java/org/bukkit/Tag.java b/paper-api/src/main/java/org/bukkit/Tag.java
index 193858a281..b8a42bba0a 100644
--- a/paper-api/src/main/java/org/bukkit/Tag.java
+++ b/paper-api/src/main/java/org/bukkit/Tag.java
@@ -19,814 +19,833 @@ import org.jetbrains.annotations.NotNull;
  */
 public interface Tag<T extends Keyed> extends Keyed {
 
-    /**
-     * Key for the built in block registry.
-     */
+    // Start generate - Tag
+    // @GeneratedFrom 1.21.4
     String REGISTRY_BLOCKS = "blocks";
-    /**
-     * Vanilla block tag representing all colors of wool.
-     */
-    Tag<Material> WOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wool"), Material.class);
-    /**
-     * Vanilla block tag representing all plank variants.
-     */
-    Tag<Material> PLANKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("planks"), Material.class);
-    /**
-     * Vanilla block tag representing all regular/mossy/cracked/chiseled stone
-     * bricks.
-     */
-    Tag<Material> STONE_BRICKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stone_bricks"), Material.class);
-    /**
-     * Vanilla block tag representing all wooden buttons.
-     */
-    Tag<Material> WOODEN_BUTTONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_buttons"), Material.class);
-    /**
-     * Vanilla block tag representing all stone buttons.
-     */
-    Tag<Material> STONE_BUTTONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stone_buttons"), Material.class);
-    /**
-     * Vanilla block tag representing all buttons (inherits from
-     * {@link #WOODEN_BUTTONS}.
-     */
+
+    Tag<Material> ACACIA_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("acacia_logs"), Material.class);
+
+    Tag<Material> AIR = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("air"), Material.class);
+
+    Tag<Material> ALL_HANGING_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("all_hanging_signs"), Material.class);
+
+    Tag<Material> ALL_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("all_signs"), Material.class);
+
+    Tag<Material> ANCIENT_CITY_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("ancient_city_replaceable"), Material.class);
+
+    Tag<Material> ANIMALS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("animals_spawnable_on"), Material.class);
+
+    Tag<Material> ANVIL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("anvil"), Material.class);
+
+    Tag<Material> ARMADILLO_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("armadillo_spawnable_on"), Material.class);
+
+    Tag<Material> AXOLOTLS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("axolotls_spawnable_on"), Material.class);
+
+    Tag<Material> AZALEA_GROWS_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("azalea_grows_on"), Material.class);
+
+    Tag<Material> AZALEA_ROOT_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("azalea_root_replaceable"), Material.class);
+
+    Tag<Material> BADLANDS_TERRACOTTA = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("badlands_terracotta"), Material.class);
+
+    Tag<Material> BAMBOO_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bamboo_blocks"), Material.class);
+
+    Tag<Material> BAMBOO_PLANTABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bamboo_plantable_on"), Material.class);
+
+    Tag<Material> BANNERS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("banners"), Material.class);
+
+    Tag<Material> BASE_STONE_NETHER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("base_stone_nether"), Material.class);
+
+    Tag<Material> BASE_STONE_OVERWORLD = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("base_stone_overworld"), Material.class);
+
+    Tag<Material> BATS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bats_spawnable_on"), Material.class);
+
+    Tag<Material> BEACON_BASE_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("beacon_base_blocks"), Material.class);
+
+    Tag<Material> BEDS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("beds"), Material.class);
+
+    Tag<Material> BEE_ATTRACTIVE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bee_attractive"), Material.class);
+
+    Tag<Material> BEE_GROWABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bee_growables"), Material.class);
+
+    Tag<Material> BEEHIVES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("beehives"), Material.class);
+
+    Tag<Material> BIG_DRIPLEAF_PLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("big_dripleaf_placeable"), Material.class);
+
+    Tag<Material> BIRCH_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("birch_logs"), Material.class);
+
+    Tag<Material> BLOCKS_WIND_CHARGE_EXPLOSIONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("blocks_wind_charge_explosions"), Material.class);
+
     Tag<Material> BUTTONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("buttons"), Material.class);
-    /**
-     * Vanilla block tag representing all colors of carpet.
-     */
+
+    Tag<Material> CAMEL_SAND_STEP_SOUND_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("camel_sand_step_sound_blocks"), Material.class);
+
+    Tag<Material> CAMPFIRES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("campfires"), Material.class);
+
+    Tag<Material> CANDLE_CAKES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("candle_cakes"), Material.class);
+
+    Tag<Material> CANDLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("candles"), Material.class);
+
+    Tag<Material> CAULDRONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("cauldrons"), Material.class);
+
+    Tag<Material> CAVE_VINES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("cave_vines"), Material.class);
+
+    Tag<Material> CEILING_HANGING_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("ceiling_hanging_signs"), Material.class);
+
+    Tag<Material> CHERRY_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("cherry_logs"), Material.class);
+
+    Tag<Material> CLIMBABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("climbable"), Material.class);
+
+    Tag<Material> COAL_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("coal_ores"), Material.class);
+
+    Tag<Material> COMBINATION_STEP_SOUND_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("combination_step_sound_blocks"), Material.class);
+
+    Tag<Material> COMPLETES_FIND_TREE_TUTORIAL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("completes_find_tree_tutorial"), Material.class);
+
+    Tag<Material> CONCRETE_POWDER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("concrete_powder"), Material.class);
+
+    Tag<Material> CONVERTABLE_TO_MUD = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("convertable_to_mud"), Material.class);
+
+    Tag<Material> COPPER_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("copper_ores"), Material.class);
+
+    Tag<Material> CORAL_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("coral_blocks"), Material.class);
+
+    Tag<Material> CORAL_PLANTS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("coral_plants"), Material.class);
+
+    Tag<Material> CORALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("corals"), Material.class);
+
+    Tag<Material> CRIMSON_STEMS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("crimson_stems"), Material.class);
+
+    Tag<Material> CROPS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("crops"), Material.class);
+
+    Tag<Material> CRYSTAL_SOUND_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("crystal_sound_blocks"), Material.class);
+
+    Tag<Material> DAMPENS_VIBRATIONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dampens_vibrations"), Material.class);
+
+    Tag<Material> DARK_OAK_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dark_oak_logs"), Material.class);
+
+    Tag<Material> DEAD_BUSH_MAY_PLACE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dead_bush_may_place_on"), Material.class);
+
+    Tag<Material> DEEPSLATE_ORE_REPLACEABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("deepslate_ore_replaceables"), Material.class);
+
+    Tag<Material> DIAMOND_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("diamond_ores"), Material.class);
+
+    Tag<Material> DIRT = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dirt"), Material.class);
+
+    Tag<Material> DOES_NOT_BLOCK_HOPPERS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("does_not_block_hoppers"), Material.class);
+
+    Tag<Material> DOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("doors"), Material.class);
+
+    Tag<Material> DRAGON_IMMUNE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dragon_immune"), Material.class);
+
+    Tag<Material> DRAGON_TRANSPARENT = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dragon_transparent"), Material.class);
+
+    Tag<Material> DRIPSTONE_REPLACEABLE_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dripstone_replaceable_blocks"), Material.class);
+
+    Tag<Material> EMERALD_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("emerald_ores"), Material.class);
+
+    Tag<Material> ENCHANTMENT_POWER_PROVIDER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("enchantment_power_provider"), Material.class);
+
+    Tag<Material> ENCHANTMENT_POWER_TRANSMITTER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("enchantment_power_transmitter"), Material.class);
+
+    Tag<Material> ENDERMAN_HOLDABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("enderman_holdable"), Material.class);
+
+    Tag<Material> FALL_DAMAGE_RESETTING = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("fall_damage_resetting"), Material.class);
+
+    Tag<Material> FEATURES_CANNOT_REPLACE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("features_cannot_replace"), Material.class);
+
+    Tag<Material> FENCE_GATES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("fence_gates"), Material.class);
+
+    Tag<Material> FENCES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("fences"), Material.class);
+
+    Tag<Material> FIRE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("fire"), Material.class);
+
+    Tag<Material> FLOWER_POTS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("flower_pots"), Material.class);
+
+    Tag<Material> FLOWERS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("flowers"), Material.class);
+
+    Tag<Material> FOXES_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("foxes_spawnable_on"), Material.class);
+
+    Tag<Material> FROG_PREFER_JUMP_TO = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("frog_prefer_jump_to"), Material.class);
+
+    Tag<Material> FROGS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("frogs_spawnable_on"), Material.class);
+
+    Tag<Material> GEODE_INVALID_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("geode_invalid_blocks"), Material.class);
+
+    Tag<Material> GOATS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("goats_spawnable_on"), Material.class);
+
+    Tag<Material> GOLD_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("gold_ores"), Material.class);
+
+    Tag<Material> GUARDED_BY_PIGLINS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("guarded_by_piglins"), Material.class);
+
+    Tag<Material> HOGLIN_REPELLENTS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("hoglin_repellents"), Material.class);
+
+    Tag<Material> ICE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("ice"), Material.class);
+
+    Tag<Material> IMPERMEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("impermeable"), Material.class);
+
+    Tag<Material> INCORRECT_FOR_DIAMOND_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_diamond_tool"), Material.class);
+
+    Tag<Material> INCORRECT_FOR_GOLD_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_gold_tool"), Material.class);
+
+    Tag<Material> INCORRECT_FOR_IRON_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_iron_tool"), Material.class);
+
+    Tag<Material> INCORRECT_FOR_NETHERITE_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_netherite_tool"), Material.class);
+
+    Tag<Material> INCORRECT_FOR_STONE_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_stone_tool"), Material.class);
+
+    Tag<Material> INCORRECT_FOR_WOODEN_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_wooden_tool"), Material.class);
+
+    Tag<Material> INFINIBURN_END = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("infiniburn_end"), Material.class);
+
+    Tag<Material> INFINIBURN_NETHER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("infiniburn_nether"), Material.class);
+
+    Tag<Material> INFINIBURN_OVERWORLD = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("infiniburn_overworld"), Material.class);
+
+    Tag<Material> INSIDE_STEP_SOUND_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("inside_step_sound_blocks"), Material.class);
+
+    Tag<Material> INVALID_SPAWN_INSIDE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("invalid_spawn_inside"), Material.class);
+
+    Tag<Material> IRON_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("iron_ores"), Material.class);
+
+    Tag<Material> JUNGLE_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("jungle_logs"), Material.class);
+
+    Tag<Material> LAPIS_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("lapis_ores"), Material.class);
+
+    Tag<Material> LAVA_POOL_STONE_CANNOT_REPLACE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("lava_pool_stone_cannot_replace"), Material.class);
+
+    Tag<Material> LEAVES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("leaves"), Material.class);
+
+    Tag<Material> LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("logs"), Material.class);
+
+    Tag<Material> LOGS_THAT_BURN = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("logs_that_burn"), Material.class);
+
+    Tag<Material> LUSH_GROUND_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("lush_ground_replaceable"), Material.class);
+
+    Tag<Material> MAINTAINS_FARMLAND = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("maintains_farmland"), Material.class);
+
+    Tag<Material> MANGROVE_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mangrove_logs"), Material.class);
+
+    Tag<Material> MANGROVE_LOGS_CAN_GROW_THROUGH = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mangrove_logs_can_grow_through"), Material.class);
+
+    Tag<Material> MANGROVE_ROOTS_CAN_GROW_THROUGH = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mangrove_roots_can_grow_through"), Material.class);
+
+    Tag<Material> MINEABLE_AXE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mineable/axe"), Material.class);
+
+    Tag<Material> MINEABLE_HOE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mineable/hoe"), Material.class);
+
+    Tag<Material> MINEABLE_PICKAXE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mineable/pickaxe"), Material.class);
+
+    Tag<Material> MINEABLE_SHOVEL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mineable/shovel"), Material.class);
+
+    Tag<Material> MOB_INTERACTABLE_DOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mob_interactable_doors"), Material.class);
+
+    Tag<Material> MOOSHROOMS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mooshrooms_spawnable_on"), Material.class);
+
+    Tag<Material> MOSS_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("moss_replaceable"), Material.class);
+
+    Tag<Material> MUSHROOM_GROW_BLOCK = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mushroom_grow_block"), Material.class);
+
+    Tag<Material> NEEDS_DIAMOND_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("needs_diamond_tool"), Material.class);
+
+    Tag<Material> NEEDS_IRON_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("needs_iron_tool"), Material.class);
+
+    Tag<Material> NEEDS_STONE_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("needs_stone_tool"), Material.class);
+
+    Tag<Material> NETHER_CARVER_REPLACEABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("nether_carver_replaceables"), Material.class);
+
+    Tag<Material> NYLIUM = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("nylium"), Material.class);
+
+    Tag<Material> OAK_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("oak_logs"), Material.class);
+
+    Tag<Material> OCCLUDES_VIBRATION_SIGNALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("occludes_vibration_signals"), Material.class);
+
+    Tag<Material> OVERWORLD_CARVER_REPLACEABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("overworld_carver_replaceables"), Material.class);
+
+    Tag<Material> OVERWORLD_NATURAL_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("overworld_natural_logs"), Material.class);
+
+    Tag<Material> PALE_OAK_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("pale_oak_logs"), Material.class);
+
+    Tag<Material> PARROTS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("parrots_spawnable_on"), Material.class);
+
+    Tag<Material> PIGLIN_REPELLENTS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("piglin_repellents"), Material.class);
+
+    Tag<Material> PLANKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("planks"), Material.class);
+
+    Tag<Material> POLAR_BEARS_SPAWNABLE_ON_ALTERNATE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("polar_bears_spawnable_on_alternate"), Material.class);
+
+    Tag<Material> PORTALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("portals"), Material.class);
+
+    Tag<Material> PRESSURE_PLATES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("pressure_plates"), Material.class);
+
+    Tag<Material> PREVENT_MOB_SPAWNING_INSIDE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("prevent_mob_spawning_inside"), Material.class);
+
+    Tag<Material> RABBITS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("rabbits_spawnable_on"), Material.class);
+
+    Tag<Material> RAILS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("rails"), Material.class);
+
+    Tag<Material> REDSTONE_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("redstone_ores"), Material.class);
+
+    Tag<Material> REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("replaceable"), Material.class);
+
+    Tag<Material> REPLACEABLE_BY_TREES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("replaceable_by_trees"), Material.class);
+
+    Tag<Material> SAND = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sand"), Material.class);
+
+    Tag<Material> SAPLINGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("saplings"), Material.class);
+
+    Tag<Material> SCULK_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sculk_replaceable"), Material.class);
+
+    Tag<Material> SCULK_REPLACEABLE_WORLD_GEN = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sculk_replaceable_world_gen"), Material.class);
+
+    Tag<Material> SHULKER_BOXES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("shulker_boxes"), Material.class);
+
+    Tag<Material> SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("signs"), Material.class);
+
+    Tag<Material> SLABS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("slabs"), Material.class);
+
+    Tag<Material> SMALL_DRIPLEAF_PLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("small_dripleaf_placeable"), Material.class);
+
+    Tag<Material> SMALL_FLOWERS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("small_flowers"), Material.class);
+
+    Tag<Material> SMELTS_TO_GLASS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("smelts_to_glass"), Material.class);
+
+    Tag<Material> SNAPS_GOAT_HORN = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("snaps_goat_horn"), Material.class);
+
+    Tag<Material> SNIFFER_DIGGABLE_BLOCK = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sniffer_diggable_block"), Material.class);
+
+    Tag<Material> SNIFFER_EGG_HATCH_BOOST = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sniffer_egg_hatch_boost"), Material.class);
+
+    Tag<Material> SNOW = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("snow"), Material.class);
+
+    Tag<Material> SNOW_LAYER_CAN_SURVIVE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("snow_layer_can_survive_on"), Material.class);
+
+    Tag<Material> SNOW_LAYER_CANNOT_SURVIVE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("snow_layer_cannot_survive_on"), Material.class);
+
+    Tag<Material> SOUL_FIRE_BASE_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("soul_fire_base_blocks"), Material.class);
+
+    Tag<Material> SOUL_SPEED_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("soul_speed_blocks"), Material.class);
+
+    Tag<Material> SPRUCE_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("spruce_logs"), Material.class);
+
+    Tag<Material> STAIRS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stairs"), Material.class);
+
+    Tag<Material> STANDING_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("standing_signs"), Material.class);
+
+    Tag<Material> STONE_BRICKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stone_bricks"), Material.class);
+
+    Tag<Material> STONE_BUTTONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stone_buttons"), Material.class);
+
+    Tag<Material> STONE_ORE_REPLACEABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stone_ore_replaceables"), Material.class);
+
+    Tag<Material> STONE_PRESSURE_PLATES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stone_pressure_plates"), Material.class);
+
+    Tag<Material> STRIDER_WARM_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("strider_warm_blocks"), Material.class);
+
+    Tag<Material> SWORD_EFFICIENT = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sword_efficient"), Material.class);
+
+    Tag<Material> TERRACOTTA = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("terracotta"), Material.class);
+
+    Tag<Material> TRAIL_RUINS_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("trail_ruins_replaceable"), Material.class);
+
+    Tag<Material> TRAPDOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("trapdoors"), Material.class);
+
+    Tag<Material> UNDERWATER_BONEMEALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("underwater_bonemeals"), Material.class);
+
+    Tag<Material> UNSTABLE_BOTTOM_CENTER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("unstable_bottom_center"), Material.class);
+
+    Tag<Material> VALID_SPAWN = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("valid_spawn"), Material.class);
+
+    Tag<Material> VIBRATION_RESONATORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("vibration_resonators"), Material.class);
+
+    Tag<Material> WALL_CORALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wall_corals"), Material.class);
+
+    Tag<Material> WALL_HANGING_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wall_hanging_signs"), Material.class);
+
+    Tag<Material> WALL_POST_OVERRIDE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wall_post_override"), Material.class);
+
+    Tag<Material> WALL_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wall_signs"), Material.class);
+
+    Tag<Material> WALLS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("walls"), Material.class);
+
+    Tag<Material> WARPED_STEMS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("warped_stems"), Material.class);
+
+    Tag<Material> WART_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wart_blocks"), Material.class);
+
+    Tag<Material> WITHER_IMMUNE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wither_immune"), Material.class);
+
+    Tag<Material> WITHER_SUMMON_BASE_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wither_summon_base_blocks"), Material.class);
+
+    Tag<Material> WOLVES_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wolves_spawnable_on"), Material.class);
+
+    Tag<Material> WOODEN_BUTTONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_buttons"), Material.class);
+
+    Tag<Material> WOODEN_DOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_doors"), Material.class);
+
+    Tag<Material> WOODEN_FENCES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_fences"), Material.class);
+
+    Tag<Material> WOODEN_PRESSURE_PLATES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_pressure_plates"), Material.class);
+
+    Tag<Material> WOODEN_SLABS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_slabs"), Material.class);
+
+    Tag<Material> WOODEN_STAIRS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_stairs"), Material.class);
+
+    Tag<Material> WOODEN_TRAPDOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_trapdoors"), Material.class);
+
+    Tag<Material> WOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wool"), Material.class);
+
     Tag<Material> WOOL_CARPETS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wool_carpets"), Material.class);
+
+    String REGISTRY_ITEMS = "items";
+
+    Tag<Material> ITEMS_ACACIA_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("acacia_logs"), Material.class);
+
+    Tag<Material> ITEMS_ANVIL = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("anvil"), Material.class);
+
+    Tag<Material> ITEMS_ARMADILLO_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("armadillo_food"), Material.class);
+
+    Tag<Material> ITEMS_ARROWS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("arrows"), Material.class);
+
+    Tag<Material> ITEMS_AXES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("axes"), Material.class);
+
+    Tag<Material> ITEMS_AXOLOTL_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("axolotl_food"), Material.class);
+
+    Tag<Material> ITEMS_BAMBOO_BLOCKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("bamboo_blocks"), Material.class);
+
+    Tag<Material> ITEMS_BANNERS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("banners"), Material.class);
+
+    Tag<Material> ITEMS_BEACON_PAYMENT_ITEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("beacon_payment_items"), Material.class);
+
+    Tag<Material> ITEMS_BEDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("beds"), Material.class);
+
+    Tag<Material> ITEMS_BEE_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("bee_food"), Material.class);
+
+    Tag<Material> ITEMS_BIRCH_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("birch_logs"), Material.class);
+
+    Tag<Material> ITEMS_BOATS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("boats"), Material.class);
+
+    Tag<Material> ITEMS_BOOKSHELF_BOOKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("bookshelf_books"), Material.class);
+
+    Tag<Material> ITEMS_BREAKS_DECORATED_POTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("breaks_decorated_pots"), Material.class);
+
+    Tag<Material> ITEMS_BREWING_FUEL = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("brewing_fuel"), Material.class);
+
+    Tag<Material> ITEMS_BUNDLES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("bundles"), Material.class);
+
+    Tag<Material> ITEMS_BUTTONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("buttons"), Material.class);
+
+    Tag<Material> ITEMS_CAMEL_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("camel_food"), Material.class);
+
+    Tag<Material> ITEMS_CANDLES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("candles"), Material.class);
+
+    Tag<Material> ITEMS_CAT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("cat_food"), Material.class);
+
+    Tag<Material> ITEMS_CHERRY_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("cherry_logs"), Material.class);
+
+    Tag<Material> ITEMS_CHEST_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("chest_armor"), Material.class);
+
+    Tag<Material> ITEMS_CHEST_BOATS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("chest_boats"), Material.class);
+
+    Tag<Material> ITEMS_CHICKEN_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("chicken_food"), Material.class);
+
+    Tag<Material> ITEMS_CLUSTER_MAX_HARVESTABLES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("cluster_max_harvestables"), Material.class);
+
+    Tag<Material> ITEMS_COAL_ORES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("coal_ores"), Material.class);
+
+    Tag<Material> ITEMS_COALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("coals"), Material.class);
+
+    Tag<Material> ITEMS_COMPASSES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("compasses"), Material.class);
+
+    Tag<Material> ITEMS_COMPLETES_FIND_TREE_TUTORIAL = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("completes_find_tree_tutorial"), Material.class);
+
+    Tag<Material> ITEMS_COPPER_ORES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("copper_ores"), Material.class);
+
+    Tag<Material> ITEMS_COW_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("cow_food"), Material.class);
+
+    Tag<Material> ITEMS_CREEPER_DROP_MUSIC_DISCS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("creeper_drop_music_discs"), Material.class);
+
+    Tag<Material> ITEMS_CREEPER_IGNITERS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("creeper_igniters"), Material.class);
+
+    Tag<Material> ITEMS_CRIMSON_STEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("crimson_stems"), Material.class);
+
+    Tag<Material> ITEMS_DAMPENS_VIBRATIONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("dampens_vibrations"), Material.class);
+
+    Tag<Material> ITEMS_DARK_OAK_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("dark_oak_logs"), Material.class);
+
+    Tag<Material> ITEMS_DECORATED_POT_INGREDIENTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("decorated_pot_ingredients"), Material.class);
+
+    Tag<Material> ITEMS_DECORATED_POT_SHERDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("decorated_pot_sherds"), Material.class);
+
+    Tag<Material> ITEMS_DIAMOND_ORES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("diamond_ores"), Material.class);
+
+    Tag<Material> ITEMS_DIAMOND_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("diamond_tool_materials"), Material.class);
+
+    Tag<Material> ITEMS_DIRT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("dirt"), Material.class);
+
+    Tag<Material> ITEMS_DOORS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("doors"), Material.class);
+
+    Tag<Material> ITEMS_DROWNED_PREFERRED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("drowned_preferred_weapons"), Material.class);
+
+    Tag<Material> ITEMS_DUPLICATES_ALLAYS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("duplicates_allays"), Material.class);
+
+    Tag<Material> ITEMS_DYEABLE = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("dyeable"), Material.class);
+
+    Tag<Material> ITEMS_EMERALD_ORES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("emerald_ores"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/armor"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_BOW = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/bow"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_CHEST_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/chest_armor"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_CROSSBOW = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/crossbow"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_DURABILITY = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/durability"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_EQUIPPABLE = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/equippable"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_FIRE_ASPECT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/fire_aspect"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_FISHING = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/fishing"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_FOOT_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/foot_armor"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_HEAD_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/head_armor"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_LEG_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/leg_armor"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_MACE = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/mace"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_MINING = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/mining"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_MINING_LOOT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/mining_loot"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_SHARP_WEAPON = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/sharp_weapon"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_SWORD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/sword"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_TRIDENT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/trident"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_VANISHING = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/vanishing"), Material.class);
+
+    Tag<Material> ITEMS_ENCHANTABLE_WEAPON = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/weapon"), Material.class);
+
+    Tag<Material> ITEMS_FENCE_GATES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("fence_gates"), Material.class);
+
+    Tag<Material> ITEMS_FENCES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("fences"), Material.class);
+
+    Tag<Material> ITEMS_FISHES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("fishes"), Material.class);
+
+    Tag<Material> ITEMS_FOOT_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("foot_armor"), Material.class);
+
+    Tag<Material> ITEMS_FOX_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("fox_food"), Material.class);
+
+    Tag<Material> ITEMS_FREEZE_IMMUNE_WEARABLES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("freeze_immune_wearables"), Material.class);
+
+    Tag<Material> ITEMS_FROG_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("frog_food"), Material.class);
+
+    Tag<Material> ITEMS_FURNACE_MINECART_FUEL = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("furnace_minecart_fuel"), Material.class);
+
+    Tag<Material> ITEMS_GAZE_DISGUISE_EQUIPMENT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("gaze_disguise_equipment"), Material.class);
+
+    Tag<Material> ITEMS_GOAT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("goat_food"), Material.class);
+
+    Tag<Material> ITEMS_GOLD_ORES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("gold_ores"), Material.class);
+
+    Tag<Material> ITEMS_GOLD_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("gold_tool_materials"), Material.class);
+
+    Tag<Material> ITEMS_HANGING_SIGNS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("hanging_signs"), Material.class);
+
+    Tag<Material> ITEMS_HEAD_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("head_armor"), Material.class);
+
+    Tag<Material> ITEMS_HOES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("hoes"), Material.class);
+
+    Tag<Material> ITEMS_HOGLIN_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("hoglin_food"), Material.class);
+
+    Tag<Material> ITEMS_HORSE_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("horse_food"), Material.class);
+
+    Tag<Material> ITEMS_HORSE_TEMPT_ITEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("horse_tempt_items"), Material.class);
+
+    Tag<Material> ITEMS_IGNORED_BY_PIGLIN_BABIES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("ignored_by_piglin_babies"), Material.class);
+
+    Tag<Material> ITEMS_IRON_ORES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("iron_ores"), Material.class);
+
+    Tag<Material> ITEMS_IRON_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("iron_tool_materials"), Material.class);
+
+    Tag<Material> ITEMS_JUNGLE_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("jungle_logs"), Material.class);
+
+    Tag<Material> ITEMS_LAPIS_ORES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("lapis_ores"), Material.class);
+
+    Tag<Material> ITEMS_LEAVES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("leaves"), Material.class);
+
+    Tag<Material> ITEMS_LECTERN_BOOKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("lectern_books"), Material.class);
+
+    Tag<Material> ITEMS_LEG_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("leg_armor"), Material.class);
+
+    Tag<Material> ITEMS_LLAMA_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("llama_food"), Material.class);
+
+    Tag<Material> ITEMS_LLAMA_TEMPT_ITEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("llama_tempt_items"), Material.class);
+
+    Tag<Material> ITEMS_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("logs"), Material.class);
+
+    Tag<Material> ITEMS_LOGS_THAT_BURN = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("logs_that_burn"), Material.class);
+
+    Tag<Material> ITEMS_MANGROVE_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("mangrove_logs"), Material.class);
+
+    Tag<Material> ITEMS_MAP_INVISIBILITY_EQUIPMENT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("map_invisibility_equipment"), Material.class);
+
+    Tag<Material> ITEMS_MEAT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("meat"), Material.class);
+
+    Tag<Material> ITEMS_NETHERITE_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("netherite_tool_materials"), Material.class);
+
+    Tag<Material> ITEMS_NON_FLAMMABLE_WOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("non_flammable_wood"), Material.class);
+
+    Tag<Material> ITEMS_NOTEBLOCK_TOP_INSTRUMENTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("noteblock_top_instruments"), Material.class);
+
+    Tag<Material> ITEMS_OAK_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("oak_logs"), Material.class);
+
+    Tag<Material> ITEMS_OCELOT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("ocelot_food"), Material.class);
+
+    Tag<Material> ITEMS_PALE_OAK_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("pale_oak_logs"), Material.class);
+
+    Tag<Material> ITEMS_PANDA_EATS_FROM_GROUND = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("panda_eats_from_ground"), Material.class);
+
+    Tag<Material> ITEMS_PANDA_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("panda_food"), Material.class);
+
+    Tag<Material> ITEMS_PARROT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("parrot_food"), Material.class);
+
+    Tag<Material> ITEMS_PARROT_POISONOUS_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("parrot_poisonous_food"), Material.class);
+
+    Tag<Material> ITEMS_PICKAXES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("pickaxes"), Material.class);
+
+    Tag<Material> ITEMS_PIG_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("pig_food"), Material.class);
+
+    Tag<Material> ITEMS_PIGLIN_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_food"), Material.class);
+
+    Tag<Material> ITEMS_PIGLIN_LOVED = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_loved"), Material.class);
+
+    Tag<Material> ITEMS_PIGLIN_PREFERRED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_preferred_weapons"), Material.class);
+
+    Tag<Material> ITEMS_PIGLIN_REPELLENTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_repellents"), Material.class);
+
+    Tag<Material> ITEMS_PIGLIN_SAFE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_safe_armor"), Material.class);
+
+    Tag<Material> ITEMS_PILLAGER_PREFERRED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("pillager_preferred_weapons"), Material.class);
+
+    Tag<Material> ITEMS_PLANKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("planks"), Material.class);
+
+    Tag<Material> ITEMS_RABBIT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("rabbit_food"), Material.class);
+
+    Tag<Material> ITEMS_RAILS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("rails"), Material.class);
+
+    Tag<Material> ITEMS_REDSTONE_ORES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("redstone_ores"), Material.class);
+
+    Tag<Material> ITEMS_REPAIRS_CHAIN_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_chain_armor"), Material.class);
+
+    Tag<Material> ITEMS_REPAIRS_DIAMOND_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_diamond_armor"), Material.class);
+
+    Tag<Material> ITEMS_REPAIRS_GOLD_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_gold_armor"), Material.class);
+
+    Tag<Material> ITEMS_REPAIRS_IRON_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_iron_armor"), Material.class);
+
+    Tag<Material> ITEMS_REPAIRS_LEATHER_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_leather_armor"), Material.class);
+
+    Tag<Material> ITEMS_REPAIRS_NETHERITE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_netherite_armor"), Material.class);
+
+    Tag<Material> ITEMS_REPAIRS_TURTLE_HELMET = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_turtle_helmet"), Material.class);
+
+    Tag<Material> ITEMS_REPAIRS_WOLF_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_wolf_armor"), Material.class);
+
+    Tag<Material> ITEMS_SAND = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("sand"), Material.class);
+
+    Tag<Material> ITEMS_SAPLINGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("saplings"), Material.class);
+
+    Tag<Material> ITEMS_SHEEP_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("sheep_food"), Material.class);
+
+    Tag<Material> ITEMS_SHOVELS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("shovels"), Material.class);
+
+    Tag<Material> ITEMS_SHULKER_BOXES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("shulker_boxes"), Material.class);
+
+    Tag<Material> ITEMS_SIGNS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("signs"), Material.class);
+
+    Tag<Material> ITEMS_SKELETON_PREFERRED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("skeleton_preferred_weapons"), Material.class);
+
+    Tag<Material> ITEMS_SKULLS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("skulls"), Material.class);
+
+    Tag<Material> ITEMS_SLABS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("slabs"), Material.class);
+
+    Tag<Material> ITEMS_SMALL_FLOWERS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("small_flowers"), Material.class);
+
+    Tag<Material> ITEMS_SMELTS_TO_GLASS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("smelts_to_glass"), Material.class);
+
+    Tag<Material> ITEMS_SNIFFER_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("sniffer_food"), Material.class);
+
+    Tag<Material> ITEMS_SOUL_FIRE_BASE_BLOCKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("soul_fire_base_blocks"), Material.class);
+
+    Tag<Material> ITEMS_SPRUCE_LOGS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("spruce_logs"), Material.class);
+
+    Tag<Material> ITEMS_STAIRS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("stairs"), Material.class);
+
+    Tag<Material> ITEMS_STONE_BRICKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("stone_bricks"), Material.class);
+
+    Tag<Material> ITEMS_STONE_BUTTONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("stone_buttons"), Material.class);
+
+    Tag<Material> ITEMS_STONE_CRAFTING_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("stone_crafting_materials"), Material.class);
+
+    Tag<Material> ITEMS_STONE_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("stone_tool_materials"), Material.class);
+
+    Tag<Material> ITEMS_STRIDER_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("strider_food"), Material.class);
+
+    Tag<Material> ITEMS_STRIDER_TEMPT_ITEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("strider_tempt_items"), Material.class);
+
+    Tag<Material> ITEMS_SWORDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("swords"), Material.class);
+
+    Tag<Material> ITEMS_TERRACOTTA = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("terracotta"), Material.class);
+
+    Tag<Material> ITEMS_TRAPDOORS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("trapdoors"), Material.class);
+
+    Tag<Material> ITEMS_TRIM_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("trim_materials"), Material.class);
+
+    Tag<Material> ITEMS_TRIMMABLE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("trimmable_armor"), Material.class);
+
+    Tag<Material> ITEMS_TURTLE_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("turtle_food"), Material.class);
+
+    Tag<Material> ITEMS_VILLAGER_PICKS_UP = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("villager_picks_up"), Material.class);
+
+    Tag<Material> ITEMS_VILLAGER_PLANTABLE_SEEDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("villager_plantable_seeds"), Material.class);
+
+    Tag<Material> ITEMS_WALLS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("walls"), Material.class);
+
+    Tag<Material> ITEMS_WARPED_STEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("warped_stems"), Material.class);
+
+    Tag<Material> ITEMS_WART_BLOCKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wart_blocks"), Material.class);
+
+    Tag<Material> ITEMS_WITHER_SKELETON_DISLIKED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wither_skeleton_disliked_weapons"), Material.class);
+
+    Tag<Material> ITEMS_WOLF_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wolf_food"), Material.class);
+
+    Tag<Material> ITEMS_WOODEN_BUTTONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_buttons"), Material.class);
+
+    Tag<Material> ITEMS_WOODEN_DOORS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_doors"), Material.class);
+
+    Tag<Material> ITEMS_WOODEN_FENCES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_fences"), Material.class);
+
+    Tag<Material> ITEMS_WOODEN_PRESSURE_PLATES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_pressure_plates"), Material.class);
+
+    Tag<Material> ITEMS_WOODEN_SLABS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_slabs"), Material.class);
+
+    Tag<Material> ITEMS_WOODEN_STAIRS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_stairs"), Material.class);
+
+    Tag<Material> ITEMS_WOODEN_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_tool_materials"), Material.class);
+
+    Tag<Material> ITEMS_WOODEN_TRAPDOORS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_trapdoors"), Material.class);
+
+    Tag<Material> ITEMS_WOOL = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wool"), Material.class);
+
+    Tag<Material> ITEMS_WOOL_CARPETS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wool_carpets"), Material.class);
+
+    String REGISTRY_FLUIDS = "fluids";
+
+    Tag<Fluid> FLUIDS_LAVA = Bukkit.getTag(REGISTRY_FLUIDS, NamespacedKey.minecraft("lava"), Fluid.class);
+
+    Tag<Fluid> FLUIDS_WATER = Bukkit.getTag(REGISTRY_FLUIDS, NamespacedKey.minecraft("water"), Fluid.class);
+
+    String REGISTRY_ENTITY_TYPES = "entity_types";
+
+    Tag<EntityType> ENTITY_TYPES_AQUATIC = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("aquatic"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_ARROWS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("arrows"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_ARTHROPOD = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("arthropod"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_AXOLOTL_ALWAYS_HOSTILES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("axolotl_always_hostiles"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_AXOLOTL_HUNT_TARGETS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("axolotl_hunt_targets"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_BEEHIVE_INHABITORS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("beehive_inhabitors"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_BOAT = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("boat"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_CAN_BREATHE_UNDER_WATER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("can_breathe_under_water"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_CAN_TURN_IN_BOATS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("can_turn_in_boats"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_DEFLECTS_PROJECTILES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("deflects_projectiles"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_DISMOUNTS_UNDERWATER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("dismounts_underwater"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_FALL_DAMAGE_IMMUNE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("fall_damage_immune"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_FREEZE_HURTS_EXTRA_TYPES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("freeze_hurts_extra_types"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_FREEZE_IMMUNE_ENTITY_TYPES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("freeze_immune_entity_types"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_FROG_FOOD = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("frog_food"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_IGNORES_POISON_AND_REGEN = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("ignores_poison_and_regen"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_ILLAGER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("illager"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_ILLAGER_FRIENDS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("illager_friends"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_IMMUNE_TO_INFESTED = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("immune_to_infested"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_IMMUNE_TO_OOZING = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("immune_to_oozing"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_IMPACT_PROJECTILES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("impact_projectiles"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_INVERTED_HEALING_AND_HARM = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("inverted_healing_and_harm"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_NO_ANGER_FROM_WIND_CHARGE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("no_anger_from_wind_charge"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_NON_CONTROLLING_RIDER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("non_controlling_rider"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_NOT_SCARY_FOR_PUFFERFISH = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("not_scary_for_pufferfish"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_POWDER_SNOW_WALKABLE_MOBS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("powder_snow_walkable_mobs"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_RAIDERS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("raiders"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_REDIRECTABLE_PROJECTILE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("redirectable_projectile"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_SENSITIVE_TO_BANE_OF_ARTHROPODS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("sensitive_to_bane_of_arthropods"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_SENSITIVE_TO_IMPALING = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("sensitive_to_impaling"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_SENSITIVE_TO_SMITE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("sensitive_to_smite"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_SKELETONS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("skeletons"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_UNDEAD = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("undead"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_WITHER_FRIENDS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("wither_friends"), EntityType.class);
+
+    Tag<EntityType> ENTITY_TYPES_ZOMBIES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("zombies"), EntityType.class);
+
+    String REGISTRY_GAME_EVENTS = "game_events";
+
+    Tag<GameEvent> GAME_EVENT_ALLAY_CAN_LISTEN = Bukkit.getTag(REGISTRY_GAME_EVENTS, NamespacedKey.minecraft("allay_can_listen"), GameEvent.class);
+
+    Tag<GameEvent> GAME_EVENT_IGNORE_VIBRATIONS_SNEAKING = Bukkit.getTag(REGISTRY_GAME_EVENTS, NamespacedKey.minecraft("ignore_vibrations_sneaking"), GameEvent.class);
+
+    Tag<GameEvent> GAME_EVENT_SHRIEKER_CAN_LISTEN = Bukkit.getTag(REGISTRY_GAME_EVENTS, NamespacedKey.minecraft("shrieker_can_listen"), GameEvent.class);
+
+    Tag<GameEvent> GAME_EVENT_VIBRATIONS = Bukkit.getTag(REGISTRY_GAME_EVENTS, NamespacedKey.minecraft("vibrations"), GameEvent.class);
+
+    Tag<GameEvent> GAME_EVENT_WARDEN_CAN_LISTEN = Bukkit.getTag(REGISTRY_GAME_EVENTS, NamespacedKey.minecraft("warden_can_listen"), GameEvent.class);
+    // End generate - Tag
     /**
      * @deprecated {@link #WOOL_CARPETS}.
      */
     @Deprecated(since = "1.19")
     Tag<Material> CARPETS = WOOL_CARPETS;
-    /**
-     * Vanilla block tag representing all wooden doors.
-     */
-    Tag<Material> WOODEN_DOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_doors"), Material.class);
-    /**
-     * Vanilla block tag representing all doors which can be opened by mobs.
-     */
-    Tag<Material> MOB_INTERACTABLE_DOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mob_interactable_doors"), Material.class);
-    /**
-     * Vanilla block tag representing all wooden stairs.
-     */
-    Tag<Material> WOODEN_STAIRS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_stairs"), Material.class);
-    /**
-     * Vanilla block tag representing all wooden slabs.
-     */
-    Tag<Material> WOODEN_SLABS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_slabs"), Material.class);
-    /**
-     * Vanilla block tag representing all wooden fences.
-     */
-    Tag<Material> WOODEN_FENCES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_fences"), Material.class);
-    /**
-     * Vanilla block tag representing all pressure plates.
-     */
-    Tag<Material> PRESSURE_PLATES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("pressure_plates"), Material.class);
-    /**
-     * Vanilla block tag representing all wooden pressure plates.
-     */
-    Tag<Material> WOODEN_PRESSURE_PLATES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_pressure_plates"), Material.class);
-    /**
-     * Vanilla block tag representing all stone pressure plates.
-     */
-    Tag<Material> STONE_PRESSURE_PLATES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stone_pressure_plates"), Material.class);
-    /**
-     * Vanilla block tag representing all wooden trapdoors.
-     */
-    Tag<Material> WOODEN_TRAPDOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wooden_trapdoors"), Material.class);
-    /**
-     * Vanilla block tag representing all doors (inherits from
-     * {@link #WOODEN_DOORS}.
-     */
-    Tag<Material> DOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("doors"), Material.class);
-    /**
-     * Vanilla block tag representing all sapling variants.
-     */
-    Tag<Material> SAPLINGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("saplings"), Material.class);
-    /**
-     * Vanilla block tag representing all log and bark variants that burn.
-     */
-    Tag<Material> LOGS_THAT_BURN = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("logs_that_burn"), Material.class);
-    /**
-     * Vanilla block tag representing all log and bark variants.
-     */
-    Tag<Material> LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("logs"), Material.class);
-    /**
-     * Vanilla block tag representing all dark oak log and bark variants.
-     */
-    Tag<Material> DARK_OAK_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dark_oak_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all pale oak log and bark variants.
-     */
-    Tag<Material> PALE_OAK_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("pale_oak_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all oak log and bark variants.
-     */
-    Tag<Material> OAK_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("oak_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all birch log and bark variants.
-     */
-    Tag<Material> BIRCH_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("birch_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all acacia log and bark variants.
-     */
-    Tag<Material> ACACIA_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("acacia_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all cherry log and bark variants.
-     */
-    Tag<Material> CHERRY_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("cherry_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all jungle log and bark variants.
-     */
-    Tag<Material> JUNGLE_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("jungle_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all spruce log and bark variants.
-     */
-    Tag<Material> SPRUCE_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("spruce_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all mangrove log and bark variants.
-     */
-    Tag<Material> MANGROVE_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mangrove_logs"), Material.class);
-    /**
-     * Vanilla block tag representing all crimson stems.
-     */
-    Tag<Material> CRIMSON_STEMS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("crimson_stems"), Material.class);
-    /**
-     * Vanilla block tag representing all warped stems.
-     */
-    Tag<Material> WARPED_STEMS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("warped_stems"), Material.class);
-    /**
-     * Vanilla block tag representing all bamboo blocks.
-     */
-    Tag<Material> BAMBOO_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bamboo_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all banner blocks.
-     */
-    Tag<Material> BANNERS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("banners"), Material.class);
-    /**
-     * Vanilla block tag representing all sand blocks.
-     */
-    Tag<Material> SAND = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sand"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which smelt to glass in a furnace.
-     */
-    Tag<Material> SMELTS_TO_GLASS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("smelts_to_glass"), Material.class);
-    /**
-     * Vanilla block tag representing all stairs.
-     */
-    Tag<Material> STAIRS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stairs"), Material.class);
-    /**
-     * Vanilla block tag representing all slabs.
-     */
-    Tag<Material> SLABS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("slabs"), Material.class);
-    /**
-     * Vanilla block tag representing all walls.
-     */
-    Tag<Material> WALLS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("walls"), Material.class);
-    /**
-     * Vanilla block tag representing all damaged and undamaged anvils.
-     */
-    Tag<Material> ANVIL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("anvil"), Material.class);
-    /**
-     * Vanilla block tag representing all Minecart rails.
-     */
-    Tag<Material> RAILS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("rails"), Material.class);
-    /**
-     * Vanilla block tag representing all leaves fans.
-     */
-    Tag<Material> LEAVES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("leaves"), Material.class);
-    /**
-     * Vanilla block tag representing all trapdoors (inherits from
-     * {@link #WOODEN_TRAPDOORS}.
-     */
-    Tag<Material> TRAPDOORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("trapdoors"), Material.class);
-    /**
-     * Vanilla block tag representing all empty and filled flower pots.
-     */
-    Tag<Material> FLOWER_POTS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("flower_pots"), Material.class);
-    /**
-     * Vanilla block tag representing all small flowers.
-     */
-    Tag<Material> SMALL_FLOWERS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("small_flowers"), Material.class);
-    /**
-     * Vanilla block tag representing all beds.
-     */
-    Tag<Material> BEDS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("beds"), Material.class);
-    /**
-     * Vanilla block tag representing all fences.
-     */
-    Tag<Material> FENCES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("fences"), Material.class);
-    /**
-     * Vanilla block tag representing all flowers.
-     */
-    Tag<Material> FLOWERS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("flowers"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which attract bees.
-     */
-    Tag<Material> BEE_ATTRACTIVE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bee_attractive"), Material.class);
-    /**
-     * Vanilla block tag representing all piglin repellents.
-     */
-    Tag<Material> PIGLIN_REPELLENTS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("piglin_repellents"), Material.class);
-    /**
-     * Vanilla block tag representing all gold ores.
-     */
-    Tag<Material> GOLD_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("gold_ores"), Material.class);
-    /**
-     * Vanilla block tag representing all iron ores.
-     */
-    Tag<Material> IRON_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("iron_ores"), Material.class);
-    /**
-     * Vanilla block tag representing all diamond ores.
-     */
-    Tag<Material> DIAMOND_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("diamond_ores"), Material.class);
-    /**
-     * Vanilla block tag representing all redstone ores.
-     */
-    Tag<Material> REDSTONE_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("redstone_ores"), Material.class);
-    /**
-     * Vanilla block tag representing all lapis ores.
-     */
-    Tag<Material> LAPIS_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("lapis_ores"), Material.class);
-    /**
-     * Vanilla block tag representing all coal ores.
-     */
-    Tag<Material> COAL_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("coal_ores"), Material.class);
-    /**
-     * Vanilla block tag representing all emerald ores.
-     */
-    Tag<Material> EMERALD_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("emerald_ores"), Material.class);
-    /**
-     * Vanilla block tag representing all copper ores.
-     */
-    Tag<Material> COPPER_ORES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("copper_ores"), Material.class);
-    /**
-     * Vanilla block tag representing all candles.
-     */
-    Tag<Material> CANDLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("candles"), Material.class);
-    /**
-     * Vanilla block tag representing all dirt.
-     */
-    Tag<Material> DIRT = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dirt"), Material.class);
-    /**
-     * Vanilla block tag representing all terracotta.
-     */
-    Tag<Material> TERRACOTTA = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("terracotta"), Material.class);
-    /**
-     * Vanilla block tag representing all badlands terracotta.
-     */
-    Tag<Material> BADLANDS_TERRACOTTA = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("badlands_terracotta"), Material.class);
-    /**
-     * Vanilla block tag representing all concrete powder.
-     */
-    Tag<Material> CONCRETE_POWDER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("concrete_powder"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which complete the find tree
-     * tutorial.
-     */
-    Tag<Material> COMPLETES_FIND_TREE_TUTORIAL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("completes_find_tree_tutorial"), Material.class);
-    /**
-     * Vanilla block tag denoting blocks that enderman may pick up and hold.
-     */
-    Tag<Material> ENDERMAN_HOLDABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("enderman_holdable"), Material.class);
-    /**
-     * Vanilla block tag denoting ice blocks.
-     */
-    Tag<Material> ICE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("ice"), Material.class);
-    /**
-     * Vanilla block tag denoting all valid mob spawn positions.
-     */
-    Tag<Material> VALID_SPAWN = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("valid_spawn"), Material.class);
-    /**
-     * Vanilla block tag denoting impermeable blocks which do not drip fluids.
-     */
-    Tag<Material> IMPERMEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("impermeable"), Material.class);
-    /**
-     * Vanilla block tag denoting all underwater blocks which may be bonemealed.
-     */
-    Tag<Material> UNDERWATER_BONEMEALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("underwater_bonemeals"), Material.class);
-    /**
-     * Vanilla block tag representing all coral blocks.
-     */
-    Tag<Material> CORAL_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("coral_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all wall corals.
-     */
-    Tag<Material> WALL_CORALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wall_corals"), Material.class);
-    /**
-     * Vanilla block tag representing all coral plants.
-     */
-    Tag<Material> CORAL_PLANTS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("coral_plants"), Material.class);
-    /**
-     * Vanilla block tag representing all coral.
-     */
-    Tag<Material> CORALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("corals"), Material.class);
-    /**
-     * Vanilla block tag denoting all blocks bamboo may be planted on.
-     */
-    Tag<Material> BAMBOO_PLANTABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bamboo_plantable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all standing signs.
-     */
-    Tag<Material> STANDING_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("standing_signs"), Material.class);
-    /**
-     * Vanilla block tag representing all wall signs.
-     */
-    Tag<Material> WALL_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wall_signs"), Material.class);
-    /**
-     * Vanilla block tag representing all regular signs.
-     */
-    Tag<Material> SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("signs"), Material.class);
-    /**
-     * Vanilla block tag representing all ceiling signs.
-     */
-    Tag<Material> CEILING_HANGING_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("ceiling_hanging_signs"), Material.class);
-    /**
-     * Vanilla block tag representing all wall hanging signs.
-     */
-    Tag<Material> WALL_HANGING_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wall_hanging_signs"), Material.class);
-    /**
-     * Vanilla block tag representing all hanging signs.
-     */
-    Tag<Material> ALL_HANGING_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("all_hanging_signs"), Material.class);
-    /**
-     * Vanilla block tag representing all signs, regardless of type.
-     */
-    Tag<Material> ALL_SIGNS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("all_signs"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks immune to dragons.
-     */
-    Tag<Material> DRAGON_IMMUNE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dragon_immune"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks transparent to the ender
-     * dragon.
-     */
-    Tag<Material> DRAGON_TRANSPARENT = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dragon_transparent"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks immune to withers.
-     */
-    Tag<Material> WITHER_IMMUNE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wither_immune"), Material.class);
-    /**
-     * Vanilla block tag representing all base blocks used for wither summoning.
-     */
-    Tag<Material> WITHER_SUMMON_BASE_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wither_summon_base_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all beehives.
-     */
-    Tag<Material> BEEHIVES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("beehives"), Material.class);
-    /**
-     * Vanilla block tag representing all crops.
-     */
-    Tag<Material> CROPS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("crops"), Material.class);
-    /**
-     * Vanilla block tag representing all bee growables.
-     */
-    Tag<Material> BEE_GROWABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bee_growables"), Material.class);
-    /**
-     * Vanilla block tag representing all portals.
-     */
-    Tag<Material> PORTALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("portals"), Material.class);
-    /**
-     * Vanilla block tag representing all fire blocks.
-     */
-    Tag<Material> FIRE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("fire"), Material.class);
-    /**
-     * Vanilla block tag representing all nylium blocks.
-     */
-    Tag<Material> NYLIUM = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("nylium"), Material.class);
-    /**
-     * Vanilla block tag representing all wart blocks.
-     */
-    Tag<Material> WART_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wart_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all beacon base blocks.
-     */
-    Tag<Material> BEACON_BASE_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("beacon_base_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks affected by the soul speed
-     * enchantment.
-     */
-    Tag<Material> SOUL_SPEED_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("soul_speed_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all wall post overrides.
-     */
-    Tag<Material> WALL_POST_OVERRIDE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wall_post_override"), Material.class);
-    /**
-     * Vanilla block tag representing all climbable blocks.
-     */
-    Tag<Material> CLIMBABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("climbable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which reset fall damage.
-     */
-    Tag<Material> FALL_DAMAGE_RESETTING = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("fall_damage_resetting"), Material.class);
-    /**
-     * Vanilla block tag representing all shulker boxes.
-     */
-    Tag<Material> SHULKER_BOXES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("shulker_boxes"), Material.class);
-    /**
-     * Vanilla block tag representing all hoglin repellents.
-     */
-    Tag<Material> HOGLIN_REPELLENTS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("hoglin_repellents"), Material.class);
-    /**
-     * Vanilla block tag representing all soul fire base blocks.
-     */
-    Tag<Material> SOUL_FIRE_BASE_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("soul_fire_base_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all warm strider blocks.
-     */
-    Tag<Material> STRIDER_WARM_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("strider_warm_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all campfires.
-     */
-    Tag<Material> CAMPFIRES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("campfires"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks guarded by piglins.
-     */
-    Tag<Material> GUARDED_BY_PIGLINS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("guarded_by_piglins"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that prevent inside mob
-     * spawning.
-     */
-    Tag<Material> PREVENT_MOB_SPAWNING_INSIDE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("prevent_mob_spawning_inside"), Material.class);
-    /**
-     * Vanilla block tag representing all fence gates.
-     */
-    Tag<Material> FENCE_GATES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("fence_gates"), Material.class);
-    /**
-     * Vanilla block tag representing all unstable bottom center blocks.
-     */
-    Tag<Material> UNSTABLE_BOTTOM_CENTER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("unstable_bottom_center"), Material.class);
-    Tag<Material> MUSHROOM_GROW_BLOCK = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mushroom_grow_block"), Material.class);
-
-    /**
-     * Vanilla block tag representing all blocks that burn forever in the
-     * overworld.
-     */
-    Tag<Material> INFINIBURN_OVERWORLD = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("infiniburn_overworld"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that burn forever in the
-     * nether.
-     */
-    Tag<Material> INFINIBURN_NETHER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("infiniburn_nether"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that burn forever in the end.
-     */
-    Tag<Material> INFINIBURN_END = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("infiniburn_end"), Material.class);
-    /**
-     * Vanilla block tag representing the overworld base material.
-     */
-    Tag<Material> BASE_STONE_OVERWORLD = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("base_stone_overworld"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that may be replaced by ores.
-     */
-    Tag<Material> STONE_ORE_REPLACEABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("stone_ore_replaceables"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that may be replaced by
-     * deepslate ores.
-     */
-    Tag<Material> DEEPSLATE_ORE_REPLACEABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("deepslate_ore_replaceables"), Material.class);
-    /**
-     * Vanilla block tag representing the nether base material.
-     */
-    Tag<Material> BASE_STONE_NETHER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("base_stone_nether"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks replaceable by the overworld
-     * carver.
-     */
-    Tag<Material> OVERWORLD_CARVER_REPLACEABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("overworld_carver_replaceables"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks replaceable by the nether
-     * carver.
-     */
-    Tag<Material> NETHER_CARVER_REPLACEABLES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("nether_carver_replaceables"), Material.class);
-    /**
-     * Vanilla block tag representing all candle cakes.
-     */
-    Tag<Material> CANDLE_CAKES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("candle_cakes"), Material.class);
-    /**
-     * Vanilla block tag representing all cauldrons.
-     */
-    Tag<Material> CAULDRONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("cauldrons"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that make crystal sounds.
-     */
-    Tag<Material> CRYSTAL_SOUND_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("crystal_sound_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that play muffled step sounds.
-     */
-    Tag<Material> INSIDE_STEP_SOUND_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("inside_step_sound_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that play combination step sounds.
-     */
-    Tag<Material> COMBINATION_STEP_SOUND_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("combination_step_sound_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that play step sounds with camels on sand.
-     */
-    Tag<Material> CAMEL_SAND_STEP_SOUND_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("camel_sand_step_sound_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that block vibration signals.
-     */
-    Tag<Material> OCCLUDES_VIBRATION_SIGNALS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("occludes_vibration_signals"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that dampen the propagation of
-     * vibration signals.
-     */
-    Tag<Material> DAMPENS_VIBRATIONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dampens_vibrations"), Material.class);
     /**
      * Vanilla block tag representing all blocks that are replaceable by
      * dripstone.
+     *
+     * @deprecated use {@link #DRIPSTONE_REPLACEABLE_BLOCKS}
      */
-    Tag<Material> DRIPSTONE_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dripstone_replaceable_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all cave vines.
-     */
-    Tag<Material> CAVE_VINES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("cave_vines"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks replaceable by moss.
-     */
-    Tag<Material> MOSS_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("moss_replaceable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks replaceable by lush ground.
-     */
-    Tag<Material> LUSH_GROUND_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("lush_ground_replaceable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks replaceable by azalea root.
-     */
-    Tag<Material> AZALEA_ROOT_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("azalea_root_replaceable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which small dripleaf can be
-     * placed on.
-     */
-    Tag<Material> SMALL_DRIPLEAF_PLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("small_dripleaf_placeable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which big dripleaf can be
-     * placed on.
-     */
-    Tag<Material> BIG_DRIPLEAF_PLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("big_dripleaf_placeable"), Material.class);
-    /**
-     * Vanilla block tag representing all snow blocks.
-     */
-    Tag<Material> SNOW = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("snow"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks mineable with an axe.
-     */
-    Tag<Material> MINEABLE_AXE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mineable/axe"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks mineable with a hoe.
-     */
-    Tag<Material> MINEABLE_HOE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mineable/hoe"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks mineable with a pickaxe.
-     */
-    Tag<Material> MINEABLE_PICKAXE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mineable/pickaxe"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks mineable with a shovel.
-     */
-    Tag<Material> MINEABLE_SHOVEL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mineable/shovel"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that can be efficiently mined with a sword.
-     */
-    Tag<Material> SWORD_EFFICIENT = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sword_efficient"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which require a diamond tool.
-     */
-    Tag<Material> NEEDS_DIAMOND_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("needs_diamond_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which require an iron tool.
-     */
-    Tag<Material> NEEDS_IRON_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("needs_iron_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which require a stone tool.
-     */
-    Tag<Material> NEEDS_STONE_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("needs_stone_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which will not drop items with a netherite tool.
-     */
-    Tag<Material> INCORRECT_FOR_NETHERITE_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_netherite_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which will not drop items with a diamond tool.
-     */
-    Tag<Material> INCORRECT_FOR_DIAMOND_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_diamond_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which will not drop items with a iron tool.
-     */
-    Tag<Material> INCORRECT_FOR_IRON_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_iron_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which will not drop items with a stone tool.
-     */
-    Tag<Material> INCORRECT_FOR_STONE_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_stone_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which will not drop items with a gold tool.
-     */
-    Tag<Material> INCORRECT_FOR_GOLD_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_gold_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which will not drop items with a wooden tool.
-     */
-    Tag<Material> INCORRECT_FOR_WOODEN_TOOL = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("incorrect_for_wooden_tool"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which will not be replaced by
-     * world generation features.
-     */
-    Tag<Material> FEATURES_CANNOT_REPLACE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("features_cannot_replace"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which lava pools will not
-     * replace.
-     */
-    Tag<Material> LAVA_POOL_STONE_CANNOT_REPLACE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("lava_pool_stone_cannot_replace"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which geodes will not spawn in.
-     */
-    Tag<Material> GEODE_INVALID_BLOCKS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("geode_invalid_blocks"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which frogs prefer to jump to.
-     */
-    Tag<Material> FROG_PREFER_JUMP_TO = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("frog_prefer_jump_to"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which can be replaced by skulk.
-     */
-    Tag<Material> SCULK_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sculk_replaceable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which can be replaced by skulk
-     * during world generation.
-     */
-    Tag<Material> SCULK_REPLACEABLE_WORLD_GEN = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sculk_replaceable_world_gen"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which can be replaced by
-     * ancient cities.
-     */
-    Tag<Material> ANCIENT_CITY_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("ancient_city_replaceable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which resonate vibrations.
-     */
-    Tag<Material> VIBRATION_RESONATORS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("vibration_resonators"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which animals will spawn on.
-     */
-    Tag<Material> ANIMALS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("animals_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which armadillos will spawn on.
-     */
-    Tag<Material> ARMADILLO_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("armadillo_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which axolotls will spawn on.
-     */
-    Tag<Material> AXOLOTLS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("axolotls_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which goats will spawn on.
-     */
-    Tag<Material> GOATS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("goats_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which mooshrooms will spawn on.
-     */
-    Tag<Material> MOOSHROOMS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mooshrooms_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which parrots will spawn on.
-     */
-    Tag<Material> PARROTS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("parrots_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which polar bears will spawn
-     * on.
-     */
-    Tag<Material> POLAR_BEARS_SPAWNABLE_ON_ALTERNATE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("polar_bears_spawnable_on_alternate"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which rabbits will spawn on.
-     */
-    Tag<Material> RABBITS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("rabbits_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which foxes will spawn on.
-     */
-    Tag<Material> FOXES_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("foxes_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which wolves will spawn on.
-     */
-    Tag<Material> WOLVES_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("wolves_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which frogs will spawn on.
-     */
-    Tag<Material> FROGS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("frogs_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which bats will spawn on.
-     */
-    Tag<Material> BATS_SPAWNABLE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("bats_spawnable_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which azaleas will grow on.
-     */
-    Tag<Material> AZALEA_GROWS_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("azalea_grows_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which may be converted to mud.
-     */
-    Tag<Material> CONVERTABLE_TO_MUD = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("convertable_to_mud"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which mangrove logs can grow
-     * through.
-     */
-    Tag<Material> MANGROVE_LOGS_CAN_GROW_THROUGH = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mangrove_logs_can_grow_through"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which mangrove roots can grow
-     * through.
-     */
-    Tag<Material> MANGROVE_ROOTS_CAN_GROW_THROUGH = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("mangrove_roots_can_grow_through"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which dead bushes may be placed
-     * on.
-     */
-    Tag<Material> DEAD_BUSH_MAY_PLACE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("dead_bush_may_place_on"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which snap dropped goat horns.
-     */
-    Tag<Material> SNAPS_GOAT_HORN = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("snaps_goat_horn"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks replaceable by growing trees.
-     */
-    Tag<Material> REPLACEABLE_BY_TREES = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("replaceable_by_trees"), Material.class);
-    /**
-     * Vanilla block tag representing blocks which snow cannot survive on.
-     */
-    Tag<Material> SNOW_LAYER_CANNOT_SURVIVE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("snow_layer_cannot_survive_on"), Material.class);
-    /**
-     * Vanilla block tag representing blocks which snow can survive on.
-     */
-    Tag<Material> SNOW_LAYER_CAN_SURVIVE_ON = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("snow_layer_can_survive_on"), Material.class);
-    /**
-     * Vanilla block tag representing blocks which cannot be dismounted into.
-     */
-    Tag<Material> INVALID_SPAWN_INSIDE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("invalid_spawn_inside"), Material.class);
-    /**
-     * Vanilla block tag representing blocks which can be dug by sniffers.
-     */
-    Tag<Material> SNIFFER_DIGGABLE_BLOCK = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sniffer_diggable_block"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which booster sniffer egg hatching.
-     */
-    Tag<Material> SNIFFER_EGG_HATCH_BOOST = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sniffer_egg_hatch_boost"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which can be replaced by trail ruins.
-     */
-    Tag<Material> TRAIL_RUINS_REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("trail_ruins_replaceable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which are replaceable.
-     */
-    Tag<Material> REPLACEABLE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("replaceable"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which provide enchantment power.
-     */
-    Tag<Material> ENCHANTMENT_POWER_PROVIDER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("enchantment_power_provider"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which transmit enchantment power.
-     */
-    Tag<Material> ENCHANTMENT_POWER_TRANSMITTER = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("enchantment_power_transmitter"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which do not destroy farmland when placed.
-     */
-    Tag<Material> MAINTAINS_FARMLAND = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("maintains_farmland"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks which block wind charge explosions.
-     */
-    Tag<Material> BLOCKS_WIND_CHARGE_EXPLOSIONS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("blocks_wind_charge_explosions"), Material.class);
-    /**
-     * Vanilla block tag representing solid blocks which do not block hopper operation.
-     */
-    Tag<Material> DOES_NOT_BLOCK_HOPPERS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("does_not_block_hoppers"), Material.class);
-    /**
-     * Vanilla block tag representing all blocks that resemble air.
-     */
-    Tag<Material> AIR = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("air"), Material.class);
-    /**
-     * Key for the built in item registry.
-     */
-    String REGISTRY_ITEMS = "items";
-    /**
-     * Vanilla item tag representing all items loved by piglins.
-     */
-    Tag<Material> ITEMS_PIGLIN_LOVED = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_loved"), Material.class);
-    /**
-     * Vanilla item tag representing all items ignored by piglin babies.
-     */
-    Tag<Material> IGNORED_BY_PIGLIN_BABIES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("ignored_by_piglin_babies"), Material.class);
-    /**
-     * Vanilla item tag representing all items which will prevent piglins from being angered.
-     */
-    Tag<Material> ITEMS_PIGLIN_SAFE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_safe_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all items which can be used to duplicate Allays when they are dancing.
-     */
-    Tag<Material> ITEMS_DUPLICATES_ALLAYS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("duplicates_allays"), Material.class);
-    /**
-     * Vanilla item tag representing all brewing stand fuel items.
-     */
-    Tag<Material> ITEMS_BREWING_FUEL = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("brewing_fuel"), Material.class);
-    /**
-     * Vanilla item tag representing all meat.
-     */
-    Tag<Material> ITEMS_MEAT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("meat"), Material.class);
-    /**
-     * Vanilla item tag representing all sniffer food.
-     */
-    Tag<Material> ITEMS_SNIFFER_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("sniffer_food"), Material.class);
-    /**
-     * Vanilla item tag representing all piglin food.
-     */
-    Tag<Material> ITEMS_PIGLIN_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_food"), Material.class);
+    @Deprecated(since = "1.21.4", forRemoval = true)
+    Tag<Material> DRIPSTONE_REPLACEABLE = DRIPSTONE_REPLACEABLE_BLOCKS;
     /**
      * Vanilla item tag representing all piglin food.
      *
@@ -834,10 +853,6 @@ public interface Tag<T extends Keyed> extends Keyed {
      */
     @Deprecated(since = "1.20.5")
     Tag<Material> PIGLIN_FOOD = ITEMS_PIGLIN_FOOD;
-    /**
-     * Vanilla item tag representing all fox food.
-     */
-    Tag<Material> ITEMS_FOX_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("fox_food"), Material.class);
     /**
      * Vanilla item tag representing all fox food.
      *
@@ -845,214 +860,6 @@ public interface Tag<T extends Keyed> extends Keyed {
      */
     @Deprecated(since = "1.20.5")
     Tag<Material> FOX_FOOD = ITEMS_FOX_FOOD;
-    /**
-     * Vanilla item tag representing all cow food.
-     */
-    Tag<Material> ITEMS_COW_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("cow_food"), Material.class);
-    /**
-     * Vanilla item tag representing all goat food.
-     */
-    Tag<Material> ITEMS_GOAT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("goat_food"), Material.class);
-    /**
-     * Vanilla item tag representing all sheep food.
-     */
-    Tag<Material> ITEMS_SHEEP_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("sheep_food"), Material.class);
-    /**
-     * Vanilla item tag representing all wolf food.
-     */
-    Tag<Material> ITEMS_WOLF_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wolf_food"), Material.class);
-    /**
-     * Vanilla item tag representing all cat food.
-     */
-    Tag<Material> ITEMS_CAT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("cat_food"), Material.class);
-    /**
-     * Vanilla item tag representing all horse food.
-     */
-    Tag<Material> ITEMS_HORSE_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("horse_food"), Material.class);
-    /**
-     * Vanilla item tag representing all horse tempt items.
-     */
-    Tag<Material> ITEMS_HORSE_TEMPT_ITEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("horse_tempt_items"), Material.class);
-    /**
-     * Vanilla item tag representing all camel food.
-     */
-    Tag<Material> ITEMS_CAMEL_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("camel_food"), Material.class);
-    /**
-     * Vanilla item tag representing all armadillo food.
-     */
-    Tag<Material> ITEMS_ARMADILLO_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("armadillo_food"), Material.class);
-    /**
-     * Vanilla item tag representing all bee food.
-     */
-    Tag<Material> ITEMS_BEE_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("bee_food"), Material.class);
-    /**
-     * Vanilla item tag representing all chicken food.
-     */
-    Tag<Material> ITEMS_CHICKEN_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("chicken_food"), Material.class);
-    /**
-     * Vanilla item tag representing all frog food.
-     */
-    Tag<Material> ITEMS_FROG_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("frog_food"), Material.class);
-    /**
-     * Vanilla item tag representing all hoglin food.
-     */
-    Tag<Material> ITEMS_HOGLIN_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("hoglin_food"), Material.class);
-    /**
-     * Vanilla item tag representing all llama food.
-     */
-    Tag<Material> ITEMS_LLAMA_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("llama_food"), Material.class);
-    /**
-     * Vanilla item tag representing all llama tempt items.
-     */
-    Tag<Material> ITEMS_LLAMA_TEMPT_ITEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("llama_tempt_items"), Material.class);
-    /**
-     * Vanilla item tag representing all ocelot food.
-     */
-    Tag<Material> ITEMS_OCELOT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("ocelot_food"), Material.class);
-    /**
-     * Vanilla item tag representing all panda food.
-     */
-    Tag<Material> ITEMS_PANDA_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("panda_food"), Material.class);
-    /**
-     * Vanilla item tag representing all items that a panda will pick up and eat from the ground.
-     */
-    Tag<Material> ITEMS_PANDA_EATS_FROM_GROUND = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("panda_eats_from_ground"), Material.class);
-    /**
-     * Vanilla item tag representing all pig food.
-     */
-    Tag<Material> ITEMS_PIG_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("pig_food"), Material.class);
-    /**
-     * Vanilla item tag representing all rabbit food.
-     */
-    Tag<Material> ITEMS_RABBIT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("rabbit_food"), Material.class);
-    /**
-     * Vanilla item tag representing all strider food.
-     */
-    Tag<Material> ITEMS_STRIDER_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("strider_food"), Material.class);
-    /**
-     * Vanilla item tag representing all strider tempt items.
-     */
-    Tag<Material> ITEMS_STRIDER_TEMPT_ITEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("strider_tempt_items"), Material.class);
-    /**
-     * Vanilla item tag representing all turtle food.
-     */
-    Tag<Material> ITEMS_TURTLE_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("turtle_food"), Material.class);
-    /**
-     * Vanilla item tag representing all parrot food.
-     */
-    Tag<Material> ITEMS_PARROT_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("parrot_food"), Material.class);
-    /**
-     * Vanilla item tag representing all parrot poisonous food.
-     */
-    Tag<Material> ITEMS_PARROT_POISONOUS_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("parrot_poisonous_food"), Material.class);
-    /**
-     * Vanilla item tag representing all axolotl food.
-     */
-    Tag<Material> ITEMS_AXOLOTL_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("axolotl_food"), Material.class);
-    /**
-     * Vanilla item tag representing all banner items.
-     */
-    Tag<Material> ITEMS_BANNERS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("banners"), Material.class);
-    /**
-     * Vanilla item tag representing all non flammable wood items.
-     */
-    Tag<Material> ITEMS_NON_FLAMMABLE_WOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("non_flammable_wood"), Material.class);
-    /**
-     * Vanilla item tag representing all boat items.
-     */
-    Tag<Material> ITEMS_BOATS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("boats"), Material.class);
-    /**
-     * Vanilla item tag representing all chest boat items.
-     */
-    Tag<Material> ITEMS_CHEST_BOATS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("chest_boats"), Material.class);
-    /**
-     * Vanilla item tag representing all fish items.
-     */
-    Tag<Material> ITEMS_FISHES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("fishes"), Material.class);
-    /**
-     * Vanilla item tag representing all music disc items dropped by creepers.
-     */
-    Tag<Material> ITEMS_CREEPER_DROP_MUSIC_DISCS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("creeper_drop_music_discs"), Material.class);
-    /**
-     * Vanilla item tag representing all coal items.
-     */
-    Tag<Material> ITEMS_COALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("coals"), Material.class);
-    /**
-     * Vanilla item tag representing all arrow items.
-     */
-    Tag<Material> ITEMS_ARROWS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("arrows"), Material.class);
-    /**
-     * Vanilla item tag representing all books that may be placed on lecterns.
-     */
-    Tag<Material> ITEMS_LECTERN_BOOKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("lectern_books"), Material.class);
-    /**
-     * Vanilla item tag representing all books that may be placed on bookshelves.
-     */
-    Tag<Material> ITEMS_BOOKSHELF_BOOKS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("bookshelf_books"), Material.class);
-    /**
-     * Vanilla item tag representing all items that may be placed in beacons.
-     */
-    Tag<Material> ITEMS_BEACON_PAYMENT_ITEMS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("beacon_payment_items"), Material.class);
-    /**
-     * Vanilla item tag representing all wooden tool materials.
-     */
-    Tag<Material> ITEMS_WOODEN_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wooden_tool_materials"), Material.class);
-    /**
-     * Vanilla item tag representing all stone tool materials.
-     */
-    Tag<Material> ITEMS_STONE_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("stone_tool_materials"), Material.class);
-    /**
-     * Vanilla item tag representing all iron tool materials.
-     */
-    Tag<Material> ITEMS_IRON_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("iron_tool_materials"), Material.class);
-    /**
-     * Vanilla item tag representing all gold tool materials.
-     */
-    Tag<Material> ITEMS_GOLD_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("gold_tool_materials"), Material.class);
-    /**
-     * Vanilla item tag representing all diamond tool materials.
-     */
-    Tag<Material> ITEMS_DIAMOND_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("diamond_tool_materials"), Material.class);
-    /**
-     * Vanilla item tag representing all netherite tool materials.
-     */
-    Tag<Material> ITEMS_NETHERITE_TOOL_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("netherite_tool_materials"), Material.class);
-    /**
-     * Vanilla item tag representing all items which repair leather armor.
-     */
-    Tag<Material> ITEMS_REPAIRS_LEATHER_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_leather_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all items which repair chain armor.
-     */
-    Tag<Material> ITEMS_REPAIRS_CHAIN_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_chain_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all items which repair iron armor.
-     */
-    Tag<Material> ITEMS_REPAIRS_IRON_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_iron_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all items which repair gold armor.
-     */
-    Tag<Material> ITEMS_REPAIRS_GOLD_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_gold_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all items which repair diamond armor.
-     */
-    Tag<Material> ITEMS_REPAIRS_DIAMOND_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_diamond_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all items which repair netherite armor.
-     */
-    Tag<Material> ITEMS_REPAIRS_NETHERITE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_netherite_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all items which repair turtle helmets.
-     */
-    Tag<Material> ITEMS_REPAIRS_TURTLE_HELMET = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_turtle_helmet"), Material.class);
-    /**
-     * Vanilla item tag representing all items which repair wolf armor.
-     */
-    Tag<Material> ITEMS_REPAIRS_WOLF_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("repairs_wolf_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all stone based materials for crafting.
-     */
-    Tag<Material> ITEMS_STONE_CRAFTING_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("stone_crafting_materials"), Material.class);
     /**
      * Vanilla item tag representing all furnace materials.
      *
@@ -1060,83 +867,13 @@ public interface Tag<T extends Keyed> extends Keyed {
      */
     @Deprecated(since = "1.16.2", forRemoval = true)
     Tag<Material> ITEMS_FURNACE_MATERIALS = ITEMS_STONE_CRAFTING_MATERIALS;
-    /**
-     * Vanilla item tag representing all compasses.
-     */
-    Tag<Material> ITEMS_COMPASSES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("compasses"), Material.class);
-    /**
-     * Vanilla item tag representing all hanging signs.
-     */
-    Tag<Material> ITEMS_HANGING_SIGNS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("hanging_signs"), Material.class);
-    /**
-     * Vanilla item tag representing all items which will ignite creepers when
-     * interacted with.
-     */
-    Tag<Material> ITEMS_CREEPER_IGNITERS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("creeper_igniters"), Material.class);
     /**
      * Vanilla item tag representing all items which modify note block sounds when placed on top.
+     *
+     * @deprecated use {@link #ITEMS_NOTEBLOCK_TOP_INSTRUMENTS}
      */
-    Tag<Material> ITEMS_NOTE_BLOCK_TOP_INSTRUMENTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("noteblock_top_instruments"), Material.class);
-    /**
-     * Vanilla item tag representing all foot armor.
-     */
-    Tag<Material> ITEMS_FOOT_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("foot_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all leg armor.
-     */
-    Tag<Material> ITEMS_LEG_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("leg_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all chest armor.
-     */
-    Tag<Material> ITEMS_CHEST_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("chest_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all head armor.
-     */
-    Tag<Material> ITEMS_HEAD_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("head_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all skulls.
-     */
-    Tag<Material> ITEMS_SKULLS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("skulls"), Material.class);
-    /**
-     * Vanilla item tag representing all trimmable armor items.
-     */
-    Tag<Material> ITEMS_TRIMMABLE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("trimmable_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all materials which can be used for trimming armor.
-     */
-    Tag<Material> ITEMS_TRIM_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("trim_materials"), Material.class);
-    /**
-     * Vanilla item tag representing all decorated pot sherds.
-     */
-    Tag<Material> ITEMS_DECORATED_POT_SHERDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("decorated_pot_sherds"), Material.class);
-    /**
-     * Vanilla item tag representing all decorated pot ingredients.
-     */
-    Tag<Material> ITEMS_DECORATED_POT_INGREDIENTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("decorated_pot_ingredients"), Material.class);
-    /**
-     * Vanilla item tag representing all swords.
-     */
-    Tag<Material> ITEMS_SWORDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("swords"), Material.class);
-    /**
-     * Vanilla item tag representing all axes.
-     */
-    Tag<Material> ITEMS_AXES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("axes"), Material.class);
-    /**
-     * Vanilla item tag representing all hoes.
-     */
-    Tag<Material> ITEMS_HOES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("hoes"), Material.class);
-    /**
-     * Vanilla item tag representing all pickaxes.
-     */
-    Tag<Material> ITEMS_PICKAXES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("pickaxes"), Material.class);
-    /**
-     * Vanilla item tag representing all shovels.
-     */
-    Tag<Material> ITEMS_SHOVELS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("shovels"), Material.class);
-    /**
-     * Vanilla item tag representing all items which break decorated pots.
-     */
-    Tag<Material> ITEMS_BREAKS_DECORATED_POTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("breaks_decorated_pots"), Material.class);
+    @Deprecated(since = "1.21.4", forRemoval = true)
+    Tag<Material> ITEMS_NOTE_BLOCK_TOP_INSTRUMENTS = ITEMS_NOTEBLOCK_TOP_INSTRUMENTS;
     /**
      * Vanilla item tag representing all tools.
      *
@@ -1146,135 +883,6 @@ public interface Tag<T extends Keyed> extends Keyed {
      */
     @Deprecated(since = "1.20.6", forRemoval = true)
     Tag<Material> ITEMS_TOOLS = ITEMS_BREAKS_DECORATED_POTS;
-    /**
-     * Vanilla item tag representing all seeds plantable by villagers.
-     */
-    Tag<Material> ITEMS_VILLAGER_PLANTABLE_SEEDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("villager_plantable_seeds"), Material.class);
-    /**
-     * Vanilla item tag representing all items which villagers pick up.
-     */
-    Tag<Material> ITEMS_VILLAGER_PICKS_UP = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("villager_picks_up"), Material.class);
-    /**
-     * Vanilla item tag representing all dyeable items.
-     */
-    Tag<Material> ITEMS_DYEABLE = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("dyeable"), Material.class);
-    /**
-     * Vanilla item tag representing all furnace minecart fuel.
-     */
-    Tag<Material> ITEMS_FURNACE_MINECART_FUEL = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("furnace_minecart_fuel"), Material.class);
-    /**
-     * Vanilla item tag representing all bundle items.
-     */
-    Tag<Material> ITEMS_BUNDLES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("bundles"), Material.class);
-    /**
-     * Vanilla item tag representing all skeleton preferred weapons.
-     */
-    Tag<Material> ITEMS_SKELETON_PREFERRED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("skeleton_preferred_weapons"), Material.class);
-    /**
-     * Vanilla item tag representing all drowned preferred weapons.
-     */
-    Tag<Material> ITEMS_DROWNED_PREFERRED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("drowned_preferred_weapons"), Material.class);
-    /**
-     * Vanilla item tag representing all piglin preferred weapons.
-     */
-    Tag<Material> ITEMS_PIGLIN_PREFERRED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("piglin_preferred_weapons"), Material.class);
-    /**
-     * Vanilla item tag representing all pillager preferred weapons.
-     */
-    Tag<Material> ITEMS_PILLAGER_PREFERRED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("pillager_preferred_weapons"), Material.class);
-    /**
-     * Vanilla item tag representing all wither skeleton disliked weapons.
-     */
-    Tag<Material> ITEMS_WITHER_SKELETON_DISLIKED_WEAPONS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("wither_skeleton_disliked_weapons"), Material.class);
-    /**
-     * Vanilla item tag representing all enchantable foot armor.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_FOOT_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/foot_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all enchantable leg armor.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_LEG_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/leg_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all enchantable chest armor.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_CHEST_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/chest_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all enchantable head armor.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_HEAD_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/head_armor"), Material.class);
-    /**
-     * Vanilla item tag representing all enchantable armor.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/armor"), Material.class);
-    /**
-     * Vanilla item tag representing all enchantable swords.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_SWORD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/sword"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with the fire aspect enchantment.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_FIRE_ASPECT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/fire_aspect"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with the sharpness enchantment.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_SHARP_WEAPON = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/sharp_weapon"), Material.class);
-    /**
-     * Vanilla item tag representing all enchantable weapons.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_WEAPON = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/weapon"), Material.class);
-    /**
-     * Vanilla item tag representing all enchantable mining tools.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_MINING = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/mining"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with the mining_loot enchantment.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_MINING_LOOT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/mining_loot"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with fishing enchantments.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_FISHING = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/fishing"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with trident enchantments.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_TRIDENT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/trident"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with durability enchantments.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_DURABILITY = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/durability"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with bow enchantments.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_BOW = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/bow"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with the binding enchantment.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_EQUIPPABLE = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/equippable"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with crossbow enchantments.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_CROSSBOW = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/crossbow"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with the vanishing enchantment.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_VANISHING = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/vanishing"), Material.class);
-    /**
-     * Vanilla item tag representing all items enchantable with mace enchantments.
-     */
-    Tag<Material> ITEMS_ENCHANTABLE_MACE = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("enchantable/mace"), Material.class);
-        /**
-     * Vanilla item tag representing all items which when equipped will hide the entity from maps.
-     */
-    Tag<Material> ITEMS_MAP_INVISIBILITY_EQUIPMENT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("map_invisibility_equipment"), Material.class);
-        /**
-     * Vanilla item tag representing all items which disguise the wearer's gaze from other entities.
-     */
-    Tag<Material> ITEMS_GAZE_DISGUISE_EQUIPMENT = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("gaze_disguise_equipment"), Material.class);
-    /**
-     * Vanilla item tag representing all items that confer freeze immunity on
-     * the wearer.
-     */
-    Tag<Material> FREEZE_IMMUNE_WEARABLES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("freeze_immune_wearables"), Material.class);
     /**
      * Vanilla item tag representing all items which tempt axolotls.
      *
@@ -1282,176 +890,12 @@ public interface Tag<T extends Keyed> extends Keyed {
      */
     @Deprecated(since = "1.20.5")
     Tag<Material> AXOLOTL_TEMPT_ITEMS = ITEMS_AXOLOTL_FOOD;
-    /**
-     * Vanilla item tag representing all items which are preferred for
-     * harvesting clusters (unused).
-     */
-    Tag<Material> CLUSTER_MAX_HARVESTABLES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("cluster_max_harvestables"), Material.class);
-    /**
-     * Key for the built in fluid registry.
-     */
-    String REGISTRY_FLUIDS = "fluids";
-    /**
-     * Vanilla fluid tag representing lava and flowing lava.
-     */
-    Tag<Fluid> FLUIDS_LAVA = Bukkit.getTag(REGISTRY_FLUIDS, NamespacedKey.minecraft("lava"), Fluid.class);
-    /**
-     * Vanilla fluid tag representing water and flowing water.
-     */
-    Tag<Fluid> FLUIDS_WATER = Bukkit.getTag(REGISTRY_FLUIDS, NamespacedKey.minecraft("water"), Fluid.class);
-    /**
-     * Key for the built in entity registry.
-     */
-    String REGISTRY_ENTITY_TYPES = "entity_types";
-    /**
-     * Vanilla tag representing skeletons.
-     */
-    Tag<EntityType> ENTITY_TYPES_SKELETONS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("skeletons"), EntityType.class);
-    /**
-     * Vanilla tag representing raiders.
-     */
-    Tag<EntityType> ENTITY_TYPES_RAIDERS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("raiders"), EntityType.class);
-    /**
-     * Vanilla tag representing entities which can live in beehives.
-     */
-    Tag<EntityType> ENTITY_TYPES_BEEHIVE_INHABITORS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("beehive_inhabitors"), EntityType.class);
-    /**
-     * Vanilla tag representing arrows.
-     */
-    Tag<EntityType> ENTITY_TYPES_ARROWS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("arrows"), EntityType.class);
-    /**
-     * Vanilla tag representing projectiles.
-     */
-    Tag<EntityType> ENTITY_TYPES_IMPACT_PROJECTILES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("impact_projectiles"), EntityType.class);
-    /**
-     * Vanilla tag representing mobs which can walk on powder snow.
-     */
-    Tag<EntityType> ENTITY_TYPES_POWDER_SNOW_WALKABLE_MOBS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("powder_snow_walkable_mobs"), EntityType.class);
-    /**
-     * Vanilla tag representing which entities axolotls are always hostile to.
-     */
-    Tag<EntityType> ENTITY_TYPES_AXOLOTL_ALWAYS_HOSTILES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("axolotl_always_hostiles"), EntityType.class);
-    /**
-     * Vanilla tag representing axolotl targets.
-     */
-    Tag<EntityType> ENTITY_TYPES_AXOLOTL_HUNT_TARGETS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("axolotl_hunt_targets"), EntityType.class);
-    /**
-     * Vanilla tag representing entities immune from freezing.
-     */
-    Tag<EntityType> ENTITY_TYPES_FREEZE_IMMUNE_ENTITY_TYPES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("freeze_immune_entity_types"), EntityType.class);
-    /**
-     * Vanilla tag representing entities extra susceptible to freezing.
-     */
-    Tag<EntityType> ENTITY_TYPES_FREEZE_HURTS_EXTRA_TYPES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("freeze_hurts_extra_types"), EntityType.class);
-    /**
-     * Vanilla tag representing entities which can be eaten by frogs.
-     */
-    Tag<EntityType> ENTITY_TYPES_FROG_FOOD = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("frog_food"), EntityType.class);
-    /**
-     * Vanilla tag representing entities which are immune from fall damage.
-     */
-    Tag<EntityType> ENTITY_TYPES_FALL_DAMAGE_IMMUNE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("fall_damage_immune"), EntityType.class);
-    /**
-     * Vanilla tag representing entities which are dismounted when underwater.
-     */
-    Tag<EntityType> ENTITY_TYPES_DISMOUNTS_UNDERWATER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("dismounts_underwater"), EntityType.class);
-    /**
-     * Vanilla tag representing entities which are not controlled by their mount.
-     */
-    Tag<EntityType> ENTITY_TYPES_NON_CONTROLLING_RIDER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("non_controlling_rider"), EntityType.class);
-    /**
-     * Vanilla tag representing entities which deflect projectiles.
-     */
-    Tag<EntityType> ENTITY_TYPES_DEFLECTS_PROJECTILES = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("deflects_projectiles"), EntityType.class);
     /**
      * Vanilla tag representing entities which deflect arrows.
      * @deprecated use {@link #ENTITY_TYPES_DEFLECTS_PROJECTILES}
      */
     @Deprecated(since = "1.20.5")
     Tag<EntityType> ENTITY_TYPES_DEFLECTS_ARROWS = ENTITY_TYPES_DEFLECTS_PROJECTILES;
-    /**
-     * Vanilla tag representing entities which can turn in boats.
-     */
-    Tag<EntityType> ENTITY_TYPES_CAN_TURN_IN_BOATS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("can_turn_in_boats"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities sensitive to illager enchantments.
-     */
-    Tag<EntityType> ENTITY_TYPES_ILLAGER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("illager"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities sensitive to aquatic enchantments..
-     */
-    Tag<EntityType> ENTITY_TYPES_AQUATIC = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("aquatic"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities sensitive to arthropod enchantments..
-     */
-    Tag<EntityType> ENTITY_TYPES_ARTHROPOD = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("arthropod"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which ignores poison and regeneration effects.
-     */
-    Tag<EntityType> ENTITY_TYPES_IGNORES_POISON_AND_REGEN = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("ignores_poison_and_regen"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are sensitive to inverted healing and harm potion effects.
-     */
-    Tag<EntityType> ENTITY_TYPES_INVERTED_HEALING_AND_HARM = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("inverted_healing_and_harm"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are friendly with withers.
-     */
-    Tag<EntityType> ENTITY_TYPES_WITHER_FRIENDS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("wither_friends"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are friendly with illagers.
-     */
-    Tag<EntityType> ENTITY_TYPES_ILLAGER_FRIENDS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("illager_friends"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are not scary for pufferfish.
-     */
-    Tag<EntityType> ENTITY_TYPES_NOT_SCARY_FOR_PUFFERFISH = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("not_scary_for_pufferfish"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are sensitive to impaling.
-     */
-    Tag<EntityType> ENTITY_TYPES_SENSITIVE_TO_IMPALING = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("sensitive_to_impaling"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are sensitive to the bane_of_arthropods enchantment.
-     */
-    Tag<EntityType> ENTITY_TYPES_SENSITIVE_TO_BANE_OF_ARTHROPODS = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("sensitive_to_bane_of_arthropods"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are sensitive to the smite enchantment.
-     */
-    Tag<EntityType> ENTITY_TYPES_SENSITIVE_TO_SMITE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("sensitive_to_smite"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which do not receive anger from wind charges.
-     */
-    Tag<EntityType> ENTITY_TYPES_NO_ANGER_FROM_WIND_CHARGE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("no_anger_from_wind_charge"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are immune from the oozing effect.
-     */
-    Tag<EntityType> ENTITY_TYPES_IMMUNE_TO_OOZING = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("immune_to_oozing"), EntityType.class);
-    /**
-     * Vanilla tag representing all entities which are immune from the infested effect.
-     */
-    Tag<EntityType> ENTITY_TYPES_IMMUNE_TO_INFESTED = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("immune_to_infested"), EntityType.class);
-    /**
-     * Vanilla tag representing all projectiles which can be punched back.
-     */
-    Tag<EntityType> ENTITY_TYPES_REDIRECTABLE_PROJECTILE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("redirectable_projectile"), EntityType.class);
-
-    // Paper start
-    String REGISTRY_GAME_EVENTS = "game_events";
-
-    /**
-     * Tag for game events that trigger sculk sensors
-     */
-    Tag<GameEvent> GAME_EVENT_VIBRATIONS = Bukkit.getTag(REGISTRY_GAME_EVENTS, NamespacedKey.minecraft("vibrations"), GameEvent.class);
-
-    /**
-     * Tag for game events that are ignored if the entity is sneaking
-     */
-    Tag<GameEvent> GAME_EVENT_IGNORE_VIBRATIONS_SNEAKING = Bukkit.getTag(REGISTRY_GAME_EVENTS, NamespacedKey.minecraft("ignore_vibrations_sneaking"), GameEvent.class);
-
-    /**
-     * Tag for game events that an allay can listen to
-     */
-    Tag<GameEvent> GAME_EVENT_ALLAY_CAN_LISTEN = Bukkit.getTag(REGISTRY_GAME_EVENTS, NamespacedKey.minecraft("allay_can_listen"), GameEvent.class);
-    // Paper end
 
     /**
      * Returns whether or not this tag has an entry for the specified item.
diff --git a/paper-api/src/main/java/org/bukkit/attribute/Attribute.java b/paper-api/src/main/java/org/bukkit/attribute/Attribute.java
index 978b0e779e..6928f489fe 100644
--- a/paper-api/src/main/java/org/bukkit/attribute/Attribute.java
+++ b/paper-api/src/main/java/org/bukkit/attribute/Attribute.java
@@ -17,135 +17,73 @@ import org.jetbrains.annotations.NotNull;
  */
 public interface Attribute extends OldEnum<Attribute>, Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
 
-    /**
-     * Maximum health of an Entity.
-     */
-    Attribute MAX_HEALTH = getAttribute("max_health");
-    /**
-     * Range at which an Entity will follow others.
-     */
-    Attribute FOLLOW_RANGE = getAttribute("follow_range");
-    /**
-     * Resistance of an Entity to knockback.
-     */
-    Attribute KNOCKBACK_RESISTANCE = getAttribute("knockback_resistance");
-    /**
-     * Movement speed of an Entity.
-     */
-    Attribute MOVEMENT_SPEED = getAttribute("movement_speed");
-    /**
-     * Flying speed of an Entity.
-     */
-    Attribute FLYING_SPEED = getAttribute("flying_speed");
-    /**
-     * Attack damage of an Entity.
-     */
-    Attribute ATTACK_DAMAGE = getAttribute("attack_damage");
-    /**
-     * Attack knockback of an Entity.
-     */
-    Attribute ATTACK_KNOCKBACK = getAttribute("attack_knockback");
-    /**
-     * Attack speed of an Entity.
-     */
-    Attribute ATTACK_SPEED = getAttribute("attack_speed");
-    /**
-     * Armor bonus of an Entity.
-     */
+    // Start generate - Attribute
+    // @GeneratedFrom 1.21.4
     Attribute ARMOR = getAttribute("armor");
-    /**
-     * Armor durability bonus of an Entity.
-     */
+
     Attribute ARMOR_TOUGHNESS = getAttribute("armor_toughness");
-    /**
-     * The fall damage multiplier of an Entity.
-     */
-    Attribute FALL_DAMAGE_MULTIPLIER = getAttribute("fall_damage_multiplier");
-    /**
-     * Luck bonus of an Entity.
-     */
-    Attribute LUCK = getAttribute("luck");
-    /**
-     * Maximum absorption of an Entity.
-     */
-    Attribute MAX_ABSORPTION = getAttribute("max_absorption");
-    /**
-     * The distance which an Entity can fall without damage.
-     */
-    Attribute SAFE_FALL_DISTANCE = getAttribute("safe_fall_distance");
-    /**
-     * The relative scale of an Entity.
-     */
-    Attribute SCALE = getAttribute("scale");
-    /**
-     * The height which an Entity can walk over.
-     */
-    Attribute STEP_HEIGHT = getAttribute("step_height");
-    /**
-     * The gravity applied to an Entity.
-     */
-    Attribute GRAVITY = getAttribute("gravity");
-    /**
-     * Strength with which an Entity will jump.
-     */
-    Attribute JUMP_STRENGTH = getAttribute("jump_strength");
-    /**
-     * How long an entity remains burning after ignition.
-     */
-    Attribute BURNING_TIME = getAttribute("burning_time");
-    /**
-     * Resistance to knockback from explosions.
-     */
-    Attribute EXPLOSION_KNOCKBACK_RESISTANCE = getAttribute("explosion_knockback_resistance");
-    /**
-     * Movement speed through difficult terrain.
-     */
-    Attribute MOVEMENT_EFFICIENCY = getAttribute("movement_efficiency");
-    /**
-     * Oxygen use underwater.
-     */
-    Attribute OXYGEN_BONUS = getAttribute("oxygen_bonus");
-    /**
-     * Movement speed through water.
-     */
-    Attribute WATER_MOVEMENT_EFFICIENCY = getAttribute("water_movement_efficiency");
-    /**
-     * Range at which mobs will be tempted by items.
-     */
-    Attribute TEMPT_RANGE = getAttribute("tempt_range");
-    /**
-     * The block reach distance of a Player.
-     */
-    Attribute BLOCK_INTERACTION_RANGE = getAttribute("block_interaction_range");
-    /**
-     * The entity reach distance of a Player.
-     */
-    Attribute ENTITY_INTERACTION_RANGE = getAttribute("entity_interaction_range");
-    /**
-     * Block break speed of a Player.
-     */
+
+    Attribute ATTACK_DAMAGE = getAttribute("attack_damage");
+
+    Attribute ATTACK_KNOCKBACK = getAttribute("attack_knockback");
+
+    Attribute ATTACK_SPEED = getAttribute("attack_speed");
+
     Attribute BLOCK_BREAK_SPEED = getAttribute("block_break_speed");
-    /**
-     * Mining speed for correct tools.
-     */
+
+    Attribute BLOCK_INTERACTION_RANGE = getAttribute("block_interaction_range");
+
+    Attribute BURNING_TIME = getAttribute("burning_time");
+
+    Attribute ENTITY_INTERACTION_RANGE = getAttribute("entity_interaction_range");
+
+    Attribute EXPLOSION_KNOCKBACK_RESISTANCE = getAttribute("explosion_knockback_resistance");
+
+    Attribute FALL_DAMAGE_MULTIPLIER = getAttribute("fall_damage_multiplier");
+
+    Attribute FLYING_SPEED = getAttribute("flying_speed");
+
+    Attribute FOLLOW_RANGE = getAttribute("follow_range");
+
+    Attribute GRAVITY = getAttribute("gravity");
+
+    Attribute JUMP_STRENGTH = getAttribute("jump_strength");
+
+    Attribute KNOCKBACK_RESISTANCE = getAttribute("knockback_resistance");
+
+    Attribute LUCK = getAttribute("luck");
+
+    Attribute MAX_ABSORPTION = getAttribute("max_absorption");
+
+    Attribute MAX_HEALTH = getAttribute("max_health");
+
     Attribute MINING_EFFICIENCY = getAttribute("mining_efficiency");
-    /**
-     * Sneaking speed.
-     */
+
+    Attribute MOVEMENT_EFFICIENCY = getAttribute("movement_efficiency");
+
+    Attribute MOVEMENT_SPEED = getAttribute("movement_speed");
+
+    Attribute OXYGEN_BONUS = getAttribute("oxygen_bonus");
+
+    Attribute SAFE_FALL_DISTANCE = getAttribute("safe_fall_distance");
+
+    Attribute SCALE = getAttribute("scale");
+
     Attribute SNEAKING_SPEED = getAttribute("sneaking_speed");
-    /**
-     * Underwater mining speed.
-     */
-    Attribute SUBMERGED_MINING_SPEED = getAttribute("submerged_mining_speed");
-    /**
-     * Sweeping damage.
-     */
-    Attribute SWEEPING_DAMAGE_RATIO = getAttribute("sweeping_damage_ratio");
-    /**
-     * Chance of a zombie to spawn reinforcements.
-     */
+
     Attribute SPAWN_REINFORCEMENTS = getAttribute("spawn_reinforcements");
 
+    Attribute STEP_HEIGHT = getAttribute("step_height");
+
+    Attribute SUBMERGED_MINING_SPEED = getAttribute("submerged_mining_speed");
+
+    Attribute SWEEPING_DAMAGE_RATIO = getAttribute("sweeping_damage_ratio");
+
+    Attribute TEMPT_RANGE = getAttribute("tempt_range");
+
+    Attribute WATER_MOVEMENT_EFFICIENCY = getAttribute("water_movement_efficiency");
+    // End generate - Attribute
+
     @NotNull
     private static Attribute getAttribute(@NotNull String key) {
         return Registry.ATTRIBUTE.getOrThrow(NamespacedKey.minecraft(key));
diff --git a/paper-api/src/main/java/org/bukkit/block/Biome.java b/paper-api/src/main/java/org/bukkit/block/Biome.java
index 1387559c3a..c0bc41b7e0 100644
--- a/paper-api/src/main/java/org/bukkit/block/Biome.java
+++ b/paper-api/src/main/java/org/bukkit/block/Biome.java
@@ -23,72 +23,139 @@ import org.jetbrains.annotations.NotNull;
  */
 public interface Biome extends OldEnum<Biome>, Keyed, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
 
-    Biome OCEAN = getBiome("ocean");
-    Biome PLAINS = getBiome("plains");
-    Biome DESERT = getBiome("desert");
-    Biome WINDSWEPT_HILLS = getBiome("windswept_hills");
-    Biome FOREST = getBiome("forest");
-    Biome TAIGA = getBiome("taiga");
-    Biome SWAMP = getBiome("swamp");
-    Biome MANGROVE_SWAMP = getBiome("mangrove_swamp");
-    Biome RIVER = getBiome("river");
-    Biome NETHER_WASTES = getBiome("nether_wastes");
-    Biome THE_END = getBiome("the_end");
-    Biome FROZEN_OCEAN = getBiome("frozen_ocean");
-    Biome FROZEN_RIVER = getBiome("frozen_river");
-    Biome SNOWY_PLAINS = getBiome("snowy_plains");
-    Biome MUSHROOM_FIELDS = getBiome("mushroom_fields");
-    Biome BEACH = getBiome("beach");
-    Biome JUNGLE = getBiome("jungle");
-    Biome SPARSE_JUNGLE = getBiome("sparse_jungle");
-    Biome DEEP_OCEAN = getBiome("deep_ocean");
-    Biome STONY_SHORE = getBiome("stony_shore");
-    Biome SNOWY_BEACH = getBiome("snowy_beach");
-    Biome BIRCH_FOREST = getBiome("birch_forest");
-    Biome DARK_FOREST = getBiome("dark_forest");
-    Biome PALE_GARDEN = getBiome("pale_garden");
-    Biome SNOWY_TAIGA = getBiome("snowy_taiga");
-    Biome OLD_GROWTH_PINE_TAIGA = getBiome("old_growth_pine_taiga");
-    Biome WINDSWEPT_FOREST = getBiome("windswept_forest");
-    Biome SAVANNA = getBiome("savanna");
-    Biome SAVANNA_PLATEAU = getBiome("savanna_plateau");
+    // Start generate - Biome
+    // @GeneratedFrom 1.21.4
     Biome BADLANDS = getBiome("badlands");
-    Biome WOODED_BADLANDS = getBiome("wooded_badlands");
-    Biome SMALL_END_ISLANDS = getBiome("small_end_islands");
-    Biome END_MIDLANDS = getBiome("end_midlands");
-    Biome END_HIGHLANDS = getBiome("end_highlands");
-    Biome END_BARRENS = getBiome("end_barrens");
-    Biome WARM_OCEAN = getBiome("warm_ocean");
-    Biome LUKEWARM_OCEAN = getBiome("lukewarm_ocean");
-    Biome COLD_OCEAN = getBiome("cold_ocean");
-    Biome DEEP_LUKEWARM_OCEAN = getBiome("deep_lukewarm_ocean");
-    Biome DEEP_COLD_OCEAN = getBiome("deep_cold_ocean");
-    Biome DEEP_FROZEN_OCEAN = getBiome("deep_frozen_ocean");
-    Biome THE_VOID = getBiome("the_void");
-    Biome SUNFLOWER_PLAINS = getBiome("sunflower_plains");
-    Biome WINDSWEPT_GRAVELLY_HILLS = getBiome("windswept_gravelly_hills");
-    Biome FLOWER_FOREST = getBiome("flower_forest");
-    Biome ICE_SPIKES = getBiome("ice_spikes");
-    Biome OLD_GROWTH_BIRCH_FOREST = getBiome("old_growth_birch_forest");
-    Biome OLD_GROWTH_SPRUCE_TAIGA = getBiome("old_growth_spruce_taiga");
-    Biome WINDSWEPT_SAVANNA = getBiome("windswept_savanna");
-    Biome ERODED_BADLANDS = getBiome("eroded_badlands");
+
     Biome BAMBOO_JUNGLE = getBiome("bamboo_jungle");
-    Biome SOUL_SAND_VALLEY = getBiome("soul_sand_valley");
-    Biome CRIMSON_FOREST = getBiome("crimson_forest");
-    Biome WARPED_FOREST = getBiome("warped_forest");
+
     Biome BASALT_DELTAS = getBiome("basalt_deltas");
-    Biome DRIPSTONE_CAVES = getBiome("dripstone_caves");
-    Biome LUSH_CAVES = getBiome("lush_caves");
-    Biome DEEP_DARK = getBiome("deep_dark");
-    Biome MEADOW = getBiome("meadow");
-    Biome GROVE = getBiome("grove");
-    Biome SNOWY_SLOPES = getBiome("snowy_slopes");
-    Biome FROZEN_PEAKS = getBiome("frozen_peaks");
-    Biome JAGGED_PEAKS = getBiome("jagged_peaks");
-    Biome STONY_PEAKS = getBiome("stony_peaks");
+
+    Biome BEACH = getBiome("beach");
+
+    Biome BIRCH_FOREST = getBiome("birch_forest");
+
     Biome CHERRY_GROVE = getBiome("cherry_grove");
 
+    Biome COLD_OCEAN = getBiome("cold_ocean");
+
+    Biome CRIMSON_FOREST = getBiome("crimson_forest");
+
+    Biome DARK_FOREST = getBiome("dark_forest");
+
+    Biome DEEP_COLD_OCEAN = getBiome("deep_cold_ocean");
+
+    Biome DEEP_DARK = getBiome("deep_dark");
+
+    Biome DEEP_FROZEN_OCEAN = getBiome("deep_frozen_ocean");
+
+    Biome DEEP_LUKEWARM_OCEAN = getBiome("deep_lukewarm_ocean");
+
+    Biome DEEP_OCEAN = getBiome("deep_ocean");
+
+    Biome DESERT = getBiome("desert");
+
+    Biome DRIPSTONE_CAVES = getBiome("dripstone_caves");
+
+    Biome END_BARRENS = getBiome("end_barrens");
+
+    Biome END_HIGHLANDS = getBiome("end_highlands");
+
+    Biome END_MIDLANDS = getBiome("end_midlands");
+
+    Biome ERODED_BADLANDS = getBiome("eroded_badlands");
+
+    Biome FLOWER_FOREST = getBiome("flower_forest");
+
+    Biome FOREST = getBiome("forest");
+
+    Biome FROZEN_OCEAN = getBiome("frozen_ocean");
+
+    Biome FROZEN_PEAKS = getBiome("frozen_peaks");
+
+    Biome FROZEN_RIVER = getBiome("frozen_river");
+
+    Biome GROVE = getBiome("grove");
+
+    Biome ICE_SPIKES = getBiome("ice_spikes");
+
+    Biome JAGGED_PEAKS = getBiome("jagged_peaks");
+
+    Biome JUNGLE = getBiome("jungle");
+
+    Biome LUKEWARM_OCEAN = getBiome("lukewarm_ocean");
+
+    Biome LUSH_CAVES = getBiome("lush_caves");
+
+    Biome MANGROVE_SWAMP = getBiome("mangrove_swamp");
+
+    Biome MEADOW = getBiome("meadow");
+
+    Biome MUSHROOM_FIELDS = getBiome("mushroom_fields");
+
+    Biome NETHER_WASTES = getBiome("nether_wastes");
+
+    Biome OCEAN = getBiome("ocean");
+
+    Biome OLD_GROWTH_BIRCH_FOREST = getBiome("old_growth_birch_forest");
+
+    Biome OLD_GROWTH_PINE_TAIGA = getBiome("old_growth_pine_taiga");
+
+    Biome OLD_GROWTH_SPRUCE_TAIGA = getBiome("old_growth_spruce_taiga");
+
+    Biome PALE_GARDEN = getBiome("pale_garden");
+
+    Biome PLAINS = getBiome("plains");
+
+    Biome RIVER = getBiome("river");
+
+    Biome SAVANNA = getBiome("savanna");
+
+    Biome SAVANNA_PLATEAU = getBiome("savanna_plateau");
+
+    Biome SMALL_END_ISLANDS = getBiome("small_end_islands");
+
+    Biome SNOWY_BEACH = getBiome("snowy_beach");
+
+    Biome SNOWY_PLAINS = getBiome("snowy_plains");
+
+    Biome SNOWY_SLOPES = getBiome("snowy_slopes");
+
+    Biome SNOWY_TAIGA = getBiome("snowy_taiga");
+
+    Biome SOUL_SAND_VALLEY = getBiome("soul_sand_valley");
+
+    Biome SPARSE_JUNGLE = getBiome("sparse_jungle");
+
+    Biome STONY_PEAKS = getBiome("stony_peaks");
+
+    Biome STONY_SHORE = getBiome("stony_shore");
+
+    Biome SUNFLOWER_PLAINS = getBiome("sunflower_plains");
+
+    Biome SWAMP = getBiome("swamp");
+
+    Biome TAIGA = getBiome("taiga");
+
+    Biome THE_END = getBiome("the_end");
+
+    Biome THE_VOID = getBiome("the_void");
+
+    Biome WARM_OCEAN = getBiome("warm_ocean");
+
+    Biome WARPED_FOREST = getBiome("warped_forest");
+
+    Biome WINDSWEPT_FOREST = getBiome("windswept_forest");
+
+    Biome WINDSWEPT_GRAVELLY_HILLS = getBiome("windswept_gravelly_hills");
+
+    Biome WINDSWEPT_HILLS = getBiome("windswept_hills");
+
+    Biome WINDSWEPT_SAVANNA = getBiome("windswept_savanna");
+
+    Biome WOODED_BADLANDS = getBiome("wooded_badlands");
+    // End generate - Biome
+
     /**
      * Represents a custom Biome
      *
diff --git a/paper-api/src/main/java/org/bukkit/block/BlockType.java b/paper-api/src/main/java/org/bukkit/block/BlockType.java
index d8fde88e3b..07e8ac9440 100644
--- a/paper-api/src/main/java/org/bukkit/block/BlockType.java
+++ b/paper-api/src/main/java/org/bukkit/block/BlockType.java
@@ -194,3240 +194,2198 @@ public interface BlockType extends Keyed, Translatable, net.kyori.adventure.tran
     }
 
     //<editor-fold desc="BlockTypes" defaultstate="collapsed">
-    BlockType.Typed<BlockData> AIR = getBlockType("air");
-    BlockType.Typed<BlockData> STONE = getBlockType("stone");
-    BlockType.Typed<BlockData> GRANITE = getBlockType("granite");
-    BlockType.Typed<BlockData> POLISHED_GRANITE = getBlockType("polished_granite");
-    BlockType.Typed<BlockData> DIORITE = getBlockType("diorite");
-    BlockType.Typed<BlockData> POLISHED_DIORITE = getBlockType("polished_diorite");
-    BlockType.Typed<BlockData> ANDESITE = getBlockType("andesite");
-    BlockType.Typed<BlockData> POLISHED_ANDESITE = getBlockType("polished_andesite");
-    /**
-     * BlockData: {@link Snowable}
-     */
-    BlockType.Typed<Snowable> GRASS_BLOCK = getBlockType("grass_block");
-    BlockType.Typed<BlockData> DIRT = getBlockType("dirt");
-    BlockType.Typed<BlockData> COARSE_DIRT = getBlockType("coarse_dirt");
-    /**
-     * BlockData: {@link Snowable}
-     */
-    BlockType.Typed<Snowable> PODZOL = getBlockType("podzol");
-    BlockType.Typed<BlockData> COBBLESTONE = getBlockType("cobblestone");
-    BlockType.Typed<BlockData> OAK_PLANKS = getBlockType("oak_planks");
-    BlockType.Typed<BlockData> SPRUCE_PLANKS = getBlockType("spruce_planks");
-    BlockType.Typed<BlockData> BIRCH_PLANKS = getBlockType("birch_planks");
-    BlockType.Typed<BlockData> JUNGLE_PLANKS = getBlockType("jungle_planks");
-    BlockType.Typed<BlockData> ACACIA_PLANKS = getBlockType("acacia_planks");
-    BlockType.Typed<BlockData> CHERRY_PLANKS = getBlockType("cherry_planks");
-    BlockType.Typed<BlockData> DARK_OAK_PLANKS = getBlockType("dark_oak_planks");
-    BlockType.Typed<BlockData> PALE_OAK_PLANKS = getBlockType("pale_oak_planks");
-    BlockType.Typed<BlockData> MANGROVE_PLANKS = getBlockType("mangrove_planks");
-    BlockType.Typed<BlockData> BAMBOO_PLANKS = getBlockType("bamboo_planks");
-    BlockType.Typed<BlockData> BAMBOO_MOSAIC = getBlockType("bamboo_mosaic");
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BlockType.Typed<Sapling> OAK_SAPLING = getBlockType("oak_sapling");
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BlockType.Typed<Sapling> SPRUCE_SAPLING = getBlockType("spruce_sapling");
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BlockType.Typed<Sapling> BIRCH_SAPLING = getBlockType("birch_sapling");
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BlockType.Typed<Sapling> JUNGLE_SAPLING = getBlockType("jungle_sapling");
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BlockType.Typed<Sapling> ACACIA_SAPLING = getBlockType("acacia_sapling");
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BlockType.Typed<Sapling> CHERRY_SAPLING = getBlockType("cherry_sapling");
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BlockType.Typed<Sapling> DARK_OAK_SAPLING = getBlockType("dark_oak_sapling");
-    /**
-     * BlockData: {@link Sapling}
-     */
-    BlockType.Typed<Sapling> PALE_OAK_SAPLING = getBlockType("pale_oak_sapling");
-    /**
-     * BlockData: {@link MangrovePropagule}
-     */
-    BlockType.Typed<MangrovePropagule> MANGROVE_PROPAGULE = getBlockType("mangrove_propagule");
-    BlockType.Typed<BlockData> BEDROCK = getBlockType("bedrock");
-    /**
-     * BlockData: {@link Levelled}
-     */
-    BlockType.Typed<Levelled> WATER = getBlockType("water");
-    /**
-     * BlockData: {@link Levelled}
-     */
-    BlockType.Typed<Levelled> LAVA = getBlockType("lava");
-    BlockType.Typed<BlockData> SAND = getBlockType("sand");
-    /**
-     * BlockData: {@link Brushable}
-     */
-    BlockType.Typed<Brushable> SUSPICIOUS_SAND = getBlockType("suspicious_sand");
-    BlockType.Typed<BlockData> RED_SAND = getBlockType("red_sand");
-    BlockType.Typed<BlockData> GRAVEL = getBlockType("gravel");
-    /**
-     * BlockData: {@link Brushable}
-     */
-    BlockType.Typed<Brushable> SUSPICIOUS_GRAVEL = getBlockType("suspicious_gravel");
-    BlockType.Typed<BlockData> GOLD_ORE = getBlockType("gold_ore");
-    BlockType.Typed<BlockData> DEEPSLATE_GOLD_ORE = getBlockType("deepslate_gold_ore");
-    BlockType.Typed<BlockData> IRON_ORE = getBlockType("iron_ore");
-    BlockType.Typed<BlockData> DEEPSLATE_IRON_ORE = getBlockType("deepslate_iron_ore");
-    BlockType.Typed<BlockData> COAL_ORE = getBlockType("coal_ore");
-    BlockType.Typed<BlockData> DEEPSLATE_COAL_ORE = getBlockType("deepslate_coal_ore");
-    BlockType.Typed<BlockData> NETHER_GOLD_ORE = getBlockType("nether_gold_ore");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> OAK_LOG = getBlockType("oak_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> SPRUCE_LOG = getBlockType("spruce_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> BIRCH_LOG = getBlockType("birch_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> JUNGLE_LOG = getBlockType("jungle_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> ACACIA_LOG = getBlockType("acacia_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> CHERRY_LOG = getBlockType("cherry_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> DARK_OAK_LOG = getBlockType("dark_oak_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> PALE_OAK_LOG = getBlockType("pale_oak_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> MANGROVE_LOG = getBlockType("mangrove_log");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> MANGROVE_ROOTS = getBlockType("mangrove_roots");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> MUDDY_MANGROVE_ROOTS = getBlockType("muddy_mangrove_roots");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> BAMBOO_BLOCK = getBlockType("bamboo_block");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_SPRUCE_LOG = getBlockType("stripped_spruce_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_BIRCH_LOG = getBlockType("stripped_birch_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_JUNGLE_LOG = getBlockType("stripped_jungle_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_ACACIA_LOG = getBlockType("stripped_acacia_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_CHERRY_LOG = getBlockType("stripped_cherry_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_DARK_OAK_LOG = getBlockType("stripped_dark_oak_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_PALE_OAK_LOG = getBlockType("stripped_pale_oak_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_OAK_LOG = getBlockType("stripped_oak_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_MANGROVE_LOG = getBlockType("stripped_mangrove_log");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_BAMBOO_BLOCK = getBlockType("stripped_bamboo_block");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> OAK_WOOD = getBlockType("oak_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> SPRUCE_WOOD = getBlockType("spruce_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> BIRCH_WOOD = getBlockType("birch_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> JUNGLE_WOOD = getBlockType("jungle_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> ACACIA_WOOD = getBlockType("acacia_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> CHERRY_WOOD = getBlockType("cherry_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> DARK_OAK_WOOD = getBlockType("dark_oak_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> PALE_OAK_WOOD = getBlockType("pale_oak_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> MANGROVE_WOOD = getBlockType("mangrove_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_OAK_WOOD = getBlockType("stripped_oak_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_SPRUCE_WOOD = getBlockType("stripped_spruce_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_BIRCH_WOOD = getBlockType("stripped_birch_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_JUNGLE_WOOD = getBlockType("stripped_jungle_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_ACACIA_WOOD = getBlockType("stripped_acacia_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_CHERRY_WOOD = getBlockType("stripped_cherry_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_DARK_OAK_WOOD = getBlockType("stripped_dark_oak_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_PALE_OAK_WOOD = getBlockType("stripped_pale_oak_wood");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_MANGROVE_WOOD = getBlockType("stripped_mangrove_wood");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> OAK_LEAVES = getBlockType("oak_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> SPRUCE_LEAVES = getBlockType("spruce_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> BIRCH_LEAVES = getBlockType("birch_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> JUNGLE_LEAVES = getBlockType("jungle_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> ACACIA_LEAVES = getBlockType("acacia_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> CHERRY_LEAVES = getBlockType("cherry_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> DARK_OAK_LEAVES = getBlockType("dark_oak_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> PALE_OAK_LEAVES = getBlockType("pale_oak_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> MANGROVE_LEAVES = getBlockType("mangrove_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> AZALEA_LEAVES = getBlockType("azalea_leaves");
-    /**
-     * BlockData: {@link Leaves}
-     */
-    BlockType.Typed<Leaves> FLOWERING_AZALEA_LEAVES = getBlockType("flowering_azalea_leaves");
-    BlockType.Typed<BlockData> SPONGE = getBlockType("sponge");
-    BlockType.Typed<BlockData> WET_SPONGE = getBlockType("wet_sponge");
-    BlockType.Typed<BlockData> GLASS = getBlockType("glass");
-    BlockType.Typed<BlockData> LAPIS_ORE = getBlockType("lapis_ore");
-    BlockType.Typed<BlockData> DEEPSLATE_LAPIS_ORE = getBlockType("deepslate_lapis_ore");
-    BlockType.Typed<BlockData> LAPIS_BLOCK = getBlockType("lapis_block");
-    /**
-     * BlockData: {@link Dispenser}
-     */
-    BlockType.Typed<Dispenser> DISPENSER = getBlockType("dispenser");
-    BlockType.Typed<BlockData> SANDSTONE = getBlockType("sandstone");
-    BlockType.Typed<BlockData> CHISELED_SANDSTONE = getBlockType("chiseled_sandstone");
-    BlockType.Typed<BlockData> CUT_SANDSTONE = getBlockType("cut_sandstone");
-    /**
-     * BlockData: {@link NoteBlock}
-     */
-    BlockType.Typed<NoteBlock> NOTE_BLOCK = getBlockType("note_block");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> WHITE_BED = getBlockType("white_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> ORANGE_BED = getBlockType("orange_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> MAGENTA_BED = getBlockType("magenta_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> LIGHT_BLUE_BED = getBlockType("light_blue_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> YELLOW_BED = getBlockType("yellow_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> LIME_BED = getBlockType("lime_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> PINK_BED = getBlockType("pink_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> GRAY_BED = getBlockType("gray_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> LIGHT_GRAY_BED = getBlockType("light_gray_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> CYAN_BED = getBlockType("cyan_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> PURPLE_BED = getBlockType("purple_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> BLUE_BED = getBlockType("blue_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> BROWN_BED = getBlockType("brown_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> GREEN_BED = getBlockType("green_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> RED_BED = getBlockType("red_bed");
-    /**
-     * BlockData: {@link Bed}
-     */
-    BlockType.Typed<Bed> BLACK_BED = getBlockType("black_bed");
-    /**
-     * BlockData: {@link RedstoneRail}
-     */
-    BlockType.Typed<RedstoneRail> POWERED_RAIL = getBlockType("powered_rail");
-    /**
-     * BlockData: {@link RedstoneRail}
-     */
-    BlockType.Typed<RedstoneRail> DETECTOR_RAIL = getBlockType("detector_rail");
-    /**
-     * BlockData: {@link Piston}
-     */
-    BlockType.Typed<Piston> STICKY_PISTON = getBlockType("sticky_piston");
-    BlockType.Typed<BlockData> COBWEB = getBlockType("cobweb");
-    BlockType.Typed<BlockData> SHORT_GRASS = getBlockType("short_grass");
-    BlockType.Typed<BlockData> FERN = getBlockType("fern");
-    BlockType.Typed<BlockData> DEAD_BUSH = getBlockType("dead_bush");
-    BlockType.Typed<BlockData> SEAGRASS = getBlockType("seagrass");
-    /**
-     * BlockData: {@link Bisected}
-     */
-    BlockType.Typed<Bisected> TALL_SEAGRASS = getBlockType("tall_seagrass");
-    /**
-     * BlockData: {@link Piston}
-     */
-    BlockType.Typed<Piston> PISTON = getBlockType("piston");
-    /**
-     * BlockData: {@link PistonHead}
-     */
-    BlockType.Typed<PistonHead> PISTON_HEAD = getBlockType("piston_head");
-    BlockType.Typed<BlockData> WHITE_WOOL = getBlockType("white_wool");
-    BlockType.Typed<BlockData> ORANGE_WOOL = getBlockType("orange_wool");
-    BlockType.Typed<BlockData> MAGENTA_WOOL = getBlockType("magenta_wool");
-    BlockType.Typed<BlockData> LIGHT_BLUE_WOOL = getBlockType("light_blue_wool");
-    BlockType.Typed<BlockData> YELLOW_WOOL = getBlockType("yellow_wool");
-    BlockType.Typed<BlockData> LIME_WOOL = getBlockType("lime_wool");
-    BlockType.Typed<BlockData> PINK_WOOL = getBlockType("pink_wool");
-    BlockType.Typed<BlockData> GRAY_WOOL = getBlockType("gray_wool");
-    BlockType.Typed<BlockData> LIGHT_GRAY_WOOL = getBlockType("light_gray_wool");
-    BlockType.Typed<BlockData> CYAN_WOOL = getBlockType("cyan_wool");
-    BlockType.Typed<BlockData> PURPLE_WOOL = getBlockType("purple_wool");
-    BlockType.Typed<BlockData> BLUE_WOOL = getBlockType("blue_wool");
-    BlockType.Typed<BlockData> BROWN_WOOL = getBlockType("brown_wool");
-    BlockType.Typed<BlockData> GREEN_WOOL = getBlockType("green_wool");
-    BlockType.Typed<BlockData> RED_WOOL = getBlockType("red_wool");
-    BlockType.Typed<BlockData> BLACK_WOOL = getBlockType("black_wool");
-    /**
-     * BlockData: {@link TechnicalPiston}
-     */
-    BlockType.Typed<TechnicalPiston> MOVING_PISTON = getBlockType("moving_piston");
-    BlockType.Typed<BlockData> DANDELION = getBlockType("dandelion");
-    BlockType.Typed<BlockData> TORCHFLOWER = getBlockType("torchflower");
-    BlockType.Typed<BlockData> POPPY = getBlockType("poppy");
-    BlockType.Typed<BlockData> BLUE_ORCHID = getBlockType("blue_orchid");
-    BlockType.Typed<BlockData> ALLIUM = getBlockType("allium");
-    BlockType.Typed<BlockData> AZURE_BLUET = getBlockType("azure_bluet");
-    BlockType.Typed<BlockData> RED_TULIP = getBlockType("red_tulip");
-    BlockType.Typed<BlockData> ORANGE_TULIP = getBlockType("orange_tulip");
-    BlockType.Typed<BlockData> WHITE_TULIP = getBlockType("white_tulip");
-    BlockType.Typed<BlockData> PINK_TULIP = getBlockType("pink_tulip");
-    BlockType.Typed<BlockData> OXEYE_DAISY = getBlockType("oxeye_daisy");
-    BlockType.Typed<BlockData> CORNFLOWER = getBlockType("cornflower");
-    BlockType.Typed<BlockData> WITHER_ROSE = getBlockType("wither_rose");
-    BlockType.Typed<BlockData> LILY_OF_THE_VALLEY = getBlockType("lily_of_the_valley");
-    BlockType.Typed<BlockData> BROWN_MUSHROOM = getBlockType("brown_mushroom");
-    BlockType.Typed<BlockData> RED_MUSHROOM = getBlockType("red_mushroom");
-    BlockType.Typed<BlockData> GOLD_BLOCK = getBlockType("gold_block");
-    BlockType.Typed<BlockData> IRON_BLOCK = getBlockType("iron_block");
-    BlockType.Typed<BlockData> BRICKS = getBlockType("bricks");
-    /**
-     * BlockData: {@link TNT}
-     */
-    BlockType.Typed<TNT> TNT = getBlockType("tnt");
-    BlockType.Typed<BlockData> BOOKSHELF = getBlockType("bookshelf");
-    /**
-     * BlockData: {@link ChiseledBookshelf}
-     */
-    BlockType.Typed<ChiseledBookshelf> CHISELED_BOOKSHELF = getBlockType("chiseled_bookshelf");
-    BlockType.Typed<BlockData> MOSSY_COBBLESTONE = getBlockType("mossy_cobblestone");
-    BlockType.Typed<BlockData> OBSIDIAN = getBlockType("obsidian");
-    BlockType.Typed<BlockData> TORCH = getBlockType("torch");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> WALL_TORCH = getBlockType("wall_torch");
-    /**
-     * BlockData: {@link Fire}
-     */
-    BlockType.Typed<Fire> FIRE = getBlockType("fire");
-    BlockType.Typed<BlockData> SOUL_FIRE = getBlockType("soul_fire");
-    BlockType.Typed<BlockData> SPAWNER = getBlockType("spawner");
-    /**
-     * BlockData: {@link Fire}
-     */
-    BlockType.Typed<CreakingHeart> CREAKING_HEART = getBlockType("creaking_heart");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> OAK_STAIRS = getBlockType("oak_stairs");
-    /**
-     * BlockData: {@link Chest}
-     */
-    BlockType.Typed<Chest> CHEST = getBlockType("chest");
-    /**
-     * BlockData: {@link RedstoneWire}
-     */
-    BlockType.Typed<RedstoneWire> REDSTONE_WIRE = getBlockType("redstone_wire");
-    BlockType.Typed<BlockData> DIAMOND_ORE = getBlockType("diamond_ore");
-    BlockType.Typed<BlockData> DEEPSLATE_DIAMOND_ORE = getBlockType("deepslate_diamond_ore");
-    BlockType.Typed<BlockData> DIAMOND_BLOCK = getBlockType("diamond_block");
-    BlockType.Typed<BlockData> CRAFTING_TABLE = getBlockType("crafting_table");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> WHEAT = getBlockType("wheat");
-    /**
-     * BlockData: {@link Farmland}
-     */
-    BlockType.Typed<Farmland> FARMLAND = getBlockType("farmland");
-    /**
-     * BlockData: {@link Furnace}
-     */
-    BlockType.Typed<Furnace> FURNACE = getBlockType("furnace");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> OAK_SIGN = getBlockType("oak_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> SPRUCE_SIGN = getBlockType("spruce_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> BIRCH_SIGN = getBlockType("birch_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> ACACIA_SIGN = getBlockType("acacia_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> CHERRY_SIGN = getBlockType("cherry_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> JUNGLE_SIGN = getBlockType("jungle_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> DARK_OAK_SIGN = getBlockType("dark_oak_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> PALE_OAK_SIGN = getBlockType("pale_oak_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> MANGROVE_SIGN = getBlockType("mangrove_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> BAMBOO_SIGN = getBlockType("bamboo_sign");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> OAK_DOOR = getBlockType("oak_door");
-    /**
-     * BlockData: {@link Ladder}
-     */
-    BlockType.Typed<Ladder> LADDER = getBlockType("ladder");
-    /**
-     * BlockData: {@link Rail}
-     */
-    BlockType.Typed<Rail> RAIL = getBlockType("rail");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> COBBLESTONE_STAIRS = getBlockType("cobblestone_stairs");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> OAK_WALL_SIGN = getBlockType("oak_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> SPRUCE_WALL_SIGN = getBlockType("spruce_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> BIRCH_WALL_SIGN = getBlockType("birch_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> ACACIA_WALL_SIGN = getBlockType("acacia_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> CHERRY_WALL_SIGN = getBlockType("cherry_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> JUNGLE_WALL_SIGN = getBlockType("jungle_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> DARK_OAK_WALL_SIGN = getBlockType("dark_oak_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> PALE_OAK_WALL_SIGN = getBlockType("pale_oak_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> MANGROVE_WALL_SIGN = getBlockType("mangrove_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> BAMBOO_WALL_SIGN = getBlockType("bamboo_wall_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> OAK_HANGING_SIGN = getBlockType("oak_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> SPRUCE_HANGING_SIGN = getBlockType("spruce_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> BIRCH_HANGING_SIGN = getBlockType("birch_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> ACACIA_HANGING_SIGN = getBlockType("acacia_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> CHERRY_HANGING_SIGN = getBlockType("cherry_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> JUNGLE_HANGING_SIGN = getBlockType("jungle_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> DARK_OAK_HANGING_SIGN = getBlockType("dark_oak_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> PALE_OAK_HANGING_SIGN = getBlockType("pale_oak_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> CRIMSON_HANGING_SIGN = getBlockType("crimson_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> WARPED_HANGING_SIGN = getBlockType("warped_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> MANGROVE_HANGING_SIGN = getBlockType("mangrove_hanging_sign");
-    /**
-     * BlockData: {@link HangingSign}
-     */
-    BlockType.Typed<HangingSign> BAMBOO_HANGING_SIGN = getBlockType("bamboo_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> OAK_WALL_HANGING_SIGN = getBlockType("oak_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> SPRUCE_WALL_HANGING_SIGN = getBlockType("spruce_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> BIRCH_WALL_HANGING_SIGN = getBlockType("birch_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> ACACIA_WALL_HANGING_SIGN = getBlockType("acacia_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> CHERRY_WALL_HANGING_SIGN = getBlockType("cherry_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> JUNGLE_WALL_HANGING_SIGN = getBlockType("jungle_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> DARK_OAK_WALL_HANGING_SIGN = getBlockType("dark_oak_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> PALE_OAK_WALL_HANGING_SIGN = getBlockType("pale_oak_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> MANGROVE_WALL_HANGING_SIGN = getBlockType("mangrove_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> CRIMSON_WALL_HANGING_SIGN = getBlockType("crimson_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> WARPED_WALL_HANGING_SIGN = getBlockType("warped_wall_hanging_sign");
-    /**
-     * BlockData: {@link WallHangingSign}
-     */
-    BlockType.Typed<WallHangingSign> BAMBOO_WALL_HANGING_SIGN = getBlockType("bamboo_wall_hanging_sign");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> LEVER = getBlockType("lever");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> STONE_PRESSURE_PLATE = getBlockType("stone_pressure_plate");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> IRON_DOOR = getBlockType("iron_door");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> OAK_PRESSURE_PLATE = getBlockType("oak_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> SPRUCE_PRESSURE_PLATE = getBlockType("spruce_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> BIRCH_PRESSURE_PLATE = getBlockType("birch_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> JUNGLE_PRESSURE_PLATE = getBlockType("jungle_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> ACACIA_PRESSURE_PLATE = getBlockType("acacia_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> CHERRY_PRESSURE_PLATE = getBlockType("cherry_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> DARK_OAK_PRESSURE_PLATE = getBlockType("dark_oak_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> PALE_OAK_PRESSURE_PLATE = getBlockType("pale_oak_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> MANGROVE_PRESSURE_PLATE = getBlockType("mangrove_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> BAMBOO_PRESSURE_PLATE = getBlockType("bamboo_pressure_plate");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> REDSTONE_ORE = getBlockType("redstone_ore");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> DEEPSLATE_REDSTONE_ORE = getBlockType("deepslate_redstone_ore");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> REDSTONE_TORCH = getBlockType("redstone_torch");
-    /**
-     * BlockData: {@link RedstoneWallTorch}
-     */
-    BlockType.Typed<RedstoneWallTorch> REDSTONE_WALL_TORCH = getBlockType("redstone_wall_torch");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> STONE_BUTTON = getBlockType("stone_button");
-    /**
-     * BlockData: {@link Snow}
-     */
-    BlockType.Typed<Snow> SNOW = getBlockType("snow");
-    BlockType.Typed<BlockData> ICE = getBlockType("ice");
-    BlockType.Typed<BlockData> SNOW_BLOCK = getBlockType("snow_block");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> CACTUS = getBlockType("cactus");
-    BlockType.Typed<BlockData> CLAY = getBlockType("clay");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> SUGAR_CANE = getBlockType("sugar_cane");
-    /**
-     * BlockData: {@link Jukebox}
-     */
-    BlockType.Typed<Jukebox> JUKEBOX = getBlockType("jukebox");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> OAK_FENCE = getBlockType("oak_fence");
-    BlockType.Typed<BlockData> NETHERRACK = getBlockType("netherrack");
-    BlockType.Typed<BlockData> SOUL_SAND = getBlockType("soul_sand");
-    BlockType.Typed<BlockData> SOUL_SOIL = getBlockType("soul_soil");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> BASALT = getBlockType("basalt");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> POLISHED_BASALT = getBlockType("polished_basalt");
-    BlockType.Typed<BlockData> SOUL_TORCH = getBlockType("soul_torch");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> SOUL_WALL_TORCH = getBlockType("soul_wall_torch");
-    BlockType.Typed<BlockData> GLOWSTONE = getBlockType("glowstone");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> NETHER_PORTAL = getBlockType("nether_portal");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> CARVED_PUMPKIN = getBlockType("carved_pumpkin");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> JACK_O_LANTERN = getBlockType("jack_o_lantern");
-    /**
-     * BlockData: {@link Cake}
-     */
-    BlockType.Typed<Cake> CAKE = getBlockType("cake");
-    /**
-     * BlockData: {@link Repeater}
-     */
-    BlockType.Typed<Repeater> REPEATER = getBlockType("repeater");
-    BlockType.Typed<BlockData> WHITE_STAINED_GLASS = getBlockType("white_stained_glass");
-    BlockType.Typed<BlockData> ORANGE_STAINED_GLASS = getBlockType("orange_stained_glass");
-    BlockType.Typed<BlockData> MAGENTA_STAINED_GLASS = getBlockType("magenta_stained_glass");
-    BlockType.Typed<BlockData> LIGHT_BLUE_STAINED_GLASS = getBlockType("light_blue_stained_glass");
-    BlockType.Typed<BlockData> YELLOW_STAINED_GLASS = getBlockType("yellow_stained_glass");
-    BlockType.Typed<BlockData> LIME_STAINED_GLASS = getBlockType("lime_stained_glass");
-    BlockType.Typed<BlockData> PINK_STAINED_GLASS = getBlockType("pink_stained_glass");
-    BlockType.Typed<BlockData> GRAY_STAINED_GLASS = getBlockType("gray_stained_glass");
-    BlockType.Typed<BlockData> LIGHT_GRAY_STAINED_GLASS = getBlockType("light_gray_stained_glass");
-    BlockType.Typed<BlockData> CYAN_STAINED_GLASS = getBlockType("cyan_stained_glass");
-    BlockType.Typed<BlockData> PURPLE_STAINED_GLASS = getBlockType("purple_stained_glass");
-    BlockType.Typed<BlockData> BLUE_STAINED_GLASS = getBlockType("blue_stained_glass");
-    BlockType.Typed<BlockData> BROWN_STAINED_GLASS = getBlockType("brown_stained_glass");
-    BlockType.Typed<BlockData> GREEN_STAINED_GLASS = getBlockType("green_stained_glass");
-    BlockType.Typed<BlockData> RED_STAINED_GLASS = getBlockType("red_stained_glass");
-    BlockType.Typed<BlockData> BLACK_STAINED_GLASS = getBlockType("black_stained_glass");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> OAK_TRAPDOOR = getBlockType("oak_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> SPRUCE_TRAPDOOR = getBlockType("spruce_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> BIRCH_TRAPDOOR = getBlockType("birch_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> JUNGLE_TRAPDOOR = getBlockType("jungle_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> ACACIA_TRAPDOOR = getBlockType("acacia_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> CHERRY_TRAPDOOR = getBlockType("cherry_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> DARK_OAK_TRAPDOOR = getBlockType("dark_oak_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> PALE_OAK_TRAPDOOR = getBlockType("pale_oak_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> MANGROVE_TRAPDOOR = getBlockType("mangrove_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> BAMBOO_TRAPDOOR = getBlockType("bamboo_trapdoor");
-    BlockType.Typed<BlockData> STONE_BRICKS = getBlockType("stone_bricks");
-    BlockType.Typed<BlockData> MOSSY_STONE_BRICKS = getBlockType("mossy_stone_bricks");
-    BlockType.Typed<BlockData> CRACKED_STONE_BRICKS = getBlockType("cracked_stone_bricks");
-    BlockType.Typed<BlockData> CHISELED_STONE_BRICKS = getBlockType("chiseled_stone_bricks");
-    BlockType.Typed<BlockData> PACKED_MUD = getBlockType("packed_mud");
-    BlockType.Typed<BlockData> MUD_BRICKS = getBlockType("mud_bricks");
-    BlockType.Typed<BlockData> INFESTED_STONE = getBlockType("infested_stone");
-    BlockType.Typed<BlockData> INFESTED_COBBLESTONE = getBlockType("infested_cobblestone");
-    BlockType.Typed<BlockData> INFESTED_STONE_BRICKS = getBlockType("infested_stone_bricks");
-    BlockType.Typed<BlockData> INFESTED_MOSSY_STONE_BRICKS = getBlockType("infested_mossy_stone_bricks");
-    BlockType.Typed<BlockData> INFESTED_CRACKED_STONE_BRICKS = getBlockType("infested_cracked_stone_bricks");
-    BlockType.Typed<BlockData> INFESTED_CHISELED_STONE_BRICKS = getBlockType("infested_chiseled_stone_bricks");
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    BlockType.Typed<MultipleFacing> BROWN_MUSHROOM_BLOCK = getBlockType("brown_mushroom_block");
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    BlockType.Typed<MultipleFacing> RED_MUSHROOM_BLOCK = getBlockType("red_mushroom_block");
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    BlockType.Typed<MultipleFacing> MUSHROOM_STEM = getBlockType("mushroom_stem");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> IRON_BARS = getBlockType("iron_bars");
-    /**
-     * BlockData: {@link Chain}
-     */
-    BlockType.Typed<Chain> CHAIN = getBlockType("chain");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> GLASS_PANE = getBlockType("glass_pane");
-    BlockType.Typed<BlockData> PUMPKIN = getBlockType("pumpkin");
-    BlockType.Typed<BlockData> MELON = getBlockType("melon");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> ATTACHED_PUMPKIN_STEM = getBlockType("attached_pumpkin_stem");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> ATTACHED_MELON_STEM = getBlockType("attached_melon_stem");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> PUMPKIN_STEM = getBlockType("pumpkin_stem");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> MELON_STEM = getBlockType("melon_stem");
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    BlockType.Typed<MultipleFacing> VINE = getBlockType("vine");
-    /**
-     * BlockData: {@link GlowLichen}
-     */
-    BlockType.Typed<GlowLichen> GLOW_LICHEN = getBlockType("glow_lichen");
-    /**
-     * BlockData: {@link ResinClump}
-     */
-    BlockType.Typed<ResinClump> RESIN_CLUMP = getBlockType("resin_clump");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> OAK_FENCE_GATE = getBlockType("oak_fence_gate");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> BRICK_STAIRS = getBlockType("brick_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> STONE_BRICK_STAIRS = getBlockType("stone_brick_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> MUD_BRICK_STAIRS = getBlockType("mud_brick_stairs");
-    /**
-     * BlockData: {@link Snowable}
-     */
-    BlockType.Typed<Snowable> MYCELIUM = getBlockType("mycelium");
-    BlockType.Typed<BlockData> LILY_PAD = getBlockType("lily_pad");
-    BlockType.Typed<BlockData> RESIN_BLOCK = getBlockType("resin_block");
-    BlockType.Typed<BlockData> RESIN_BRICKS = getBlockType("resin_bricks");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> RESIN_BRICK_STAIRS = getBlockType("resin_brick_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> RESIN_BRICK_SLAB = getBlockType("resin_brick_slab");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> RESIN_BRICK_WALL = getBlockType("resin_brick_wall");
-    BlockType.Typed<BlockData> CHISELED_RESIN_BRICKS = getBlockType("chiseled_resin_bricks");
-    BlockType.Typed<BlockData> NETHER_BRICKS = getBlockType("nether_bricks");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> NETHER_BRICK_FENCE = getBlockType("nether_brick_fence");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> NETHER_BRICK_STAIRS = getBlockType("nether_brick_stairs");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> NETHER_WART = getBlockType("nether_wart");
-    BlockType.Typed<BlockData> ENCHANTING_TABLE = getBlockType("enchanting_table");
-    /**
-     * BlockData: {@link BrewingStand}
-     */
-    BlockType.Typed<BrewingStand> BREWING_STAND = getBlockType("brewing_stand");
-    BlockType.Typed<BlockData> CAULDRON = getBlockType("cauldron");
-    /**
-     * BlockData: {@link Levelled}
-     */
-    BlockType.Typed<Levelled> WATER_CAULDRON = getBlockType("water_cauldron");
-    BlockType.Typed<BlockData> LAVA_CAULDRON = getBlockType("lava_cauldron");
-    /**
-     * BlockData: {@link Levelled}
-     */
-    BlockType.Typed<Levelled> POWDER_SNOW_CAULDRON = getBlockType("powder_snow_cauldron");
-    BlockType.Typed<BlockData> END_PORTAL = getBlockType("end_portal");
-    /**
-     * BlockData: {@link EndPortalFrame}
-     */
-    BlockType.Typed<EndPortalFrame> END_PORTAL_FRAME = getBlockType("end_portal_frame");
-    BlockType.Typed<BlockData> END_STONE = getBlockType("end_stone");
-    BlockType.Typed<BlockData> DRAGON_EGG = getBlockType("dragon_egg");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> REDSTONE_LAMP = getBlockType("redstone_lamp");
-    /**
-     * BlockData: {@link Cocoa}
-     */
-    BlockType.Typed<Cocoa> COCOA = getBlockType("cocoa");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> SANDSTONE_STAIRS = getBlockType("sandstone_stairs");
-    BlockType.Typed<BlockData> EMERALD_ORE = getBlockType("emerald_ore");
-    BlockType.Typed<BlockData> DEEPSLATE_EMERALD_ORE = getBlockType("deepslate_emerald_ore");
-    /**
-     * BlockData: {@link EnderChest}
-     */
-    BlockType.Typed<EnderChest> ENDER_CHEST = getBlockType("ender_chest");
-    /**
-     * BlockData: {@link TripwireHook}
-     */
-    BlockType.Typed<TripwireHook> TRIPWIRE_HOOK = getBlockType("tripwire_hook");
-    /**
-     * BlockData: {@link Tripwire}
-     */
-    BlockType.Typed<Tripwire> TRIPWIRE = getBlockType("tripwire");
-    BlockType.Typed<BlockData> EMERALD_BLOCK = getBlockType("emerald_block");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> SPRUCE_STAIRS = getBlockType("spruce_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> BIRCH_STAIRS = getBlockType("birch_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> JUNGLE_STAIRS = getBlockType("jungle_stairs");
-    /**
-     * BlockData: {@link CommandBlock}
-     */
-    BlockType.Typed<CommandBlock> COMMAND_BLOCK = getBlockType("command_block");
-    BlockType.Typed<BlockData> BEACON = getBlockType("beacon");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> COBBLESTONE_WALL = getBlockType("cobblestone_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> MOSSY_COBBLESTONE_WALL = getBlockType("mossy_cobblestone_wall");
-    BlockType.Typed<BlockData> FLOWER_POT = getBlockType("flower_pot");
-    BlockType.Typed<BlockData> POTTED_TORCHFLOWER = getBlockType("potted_torchflower");
-    BlockType.Typed<BlockData> POTTED_OAK_SAPLING = getBlockType("potted_oak_sapling");
-    BlockType.Typed<BlockData> POTTED_SPRUCE_SAPLING = getBlockType("potted_spruce_sapling");
-    BlockType.Typed<BlockData> POTTED_BIRCH_SAPLING = getBlockType("potted_birch_sapling");
-    BlockType.Typed<BlockData> POTTED_JUNGLE_SAPLING = getBlockType("potted_jungle_sapling");
-    BlockType.Typed<BlockData> POTTED_ACACIA_SAPLING = getBlockType("potted_acacia_sapling");
-    BlockType.Typed<BlockData> POTTED_CHERRY_SAPLING = getBlockType("potted_cherry_sapling");
-    BlockType.Typed<BlockData> POTTED_DARK_OAK_SAPLING = getBlockType("potted_dark_oak_sapling");
-    BlockType.Typed<BlockData> POTTED_PALE_OAK_SAPLING = getBlockType("potted_pale_oak_sapling");
-    BlockType.Typed<BlockData> POTTED_MANGROVE_PROPAGULE = getBlockType("potted_mangrove_propagule");
-    BlockType.Typed<BlockData> POTTED_FERN = getBlockType("potted_fern");
-    BlockType.Typed<BlockData> POTTED_DANDELION = getBlockType("potted_dandelion");
-    BlockType.Typed<BlockData> POTTED_POPPY = getBlockType("potted_poppy");
-    BlockType.Typed<BlockData> POTTED_BLUE_ORCHID = getBlockType("potted_blue_orchid");
-    BlockType.Typed<BlockData> POTTED_ALLIUM = getBlockType("potted_allium");
-    BlockType.Typed<BlockData> POTTED_AZURE_BLUET = getBlockType("potted_azure_bluet");
-    BlockType.Typed<BlockData> POTTED_RED_TULIP = getBlockType("potted_red_tulip");
-    BlockType.Typed<BlockData> POTTED_ORANGE_TULIP = getBlockType("potted_orange_tulip");
-    BlockType.Typed<BlockData> POTTED_WHITE_TULIP = getBlockType("potted_white_tulip");
-    BlockType.Typed<BlockData> POTTED_PINK_TULIP = getBlockType("potted_pink_tulip");
-    BlockType.Typed<BlockData> POTTED_OXEYE_DAISY = getBlockType("potted_oxeye_daisy");
-    BlockType.Typed<BlockData> POTTED_CORNFLOWER = getBlockType("potted_cornflower");
-    BlockType.Typed<BlockData> POTTED_LILY_OF_THE_VALLEY = getBlockType("potted_lily_of_the_valley");
-    BlockType.Typed<BlockData> POTTED_WITHER_ROSE = getBlockType("potted_wither_rose");
-    BlockType.Typed<BlockData> POTTED_RED_MUSHROOM = getBlockType("potted_red_mushroom");
-    BlockType.Typed<BlockData> POTTED_BROWN_MUSHROOM = getBlockType("potted_brown_mushroom");
-    BlockType.Typed<BlockData> POTTED_DEAD_BUSH = getBlockType("potted_dead_bush");
-    BlockType.Typed<BlockData> POTTED_CACTUS = getBlockType("potted_cactus");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> CARROTS = getBlockType("carrots");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> POTATOES = getBlockType("potatoes");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> OAK_BUTTON = getBlockType("oak_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> SPRUCE_BUTTON = getBlockType("spruce_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> BIRCH_BUTTON = getBlockType("birch_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> JUNGLE_BUTTON = getBlockType("jungle_button");
-    /**
-     * BlockData: {@link Switch}
-     */
+    // Start generate - BlockType
+    // @GeneratedFrom 1.21.4
     BlockType.Typed<Switch> ACACIA_BUTTON = getBlockType("acacia_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> CHERRY_BUTTON = getBlockType("cherry_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> DARK_OAK_BUTTON = getBlockType("dark_oak_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> PALE_OAK_BUTTON = getBlockType("pale_oak_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> MANGROVE_BUTTON = getBlockType("mangrove_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> BAMBOO_BUTTON = getBlockType("bamboo_button");
-    /**
-     * BlockData: {@link Skull}
-     */
-    BlockType.Typed<Skull> SKELETON_SKULL = getBlockType("skeleton_skull");
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    BlockType.Typed<WallSkull> SKELETON_WALL_SKULL = getBlockType("skeleton_wall_skull");
-    /**
-     * BlockData: {@link Skull}
-     */
-    BlockType.Typed<Skull> WITHER_SKELETON_SKULL = getBlockType("wither_skeleton_skull");
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    BlockType.Typed<WallSkull> WITHER_SKELETON_WALL_SKULL = getBlockType("wither_skeleton_wall_skull");
-    /**
-     * BlockData: {@link Skull}
-     */
-    BlockType.Typed<Skull> ZOMBIE_HEAD = getBlockType("zombie_head");
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    BlockType.Typed<WallSkull> ZOMBIE_WALL_HEAD = getBlockType("zombie_wall_head");
-    /**
-     * BlockData: {@link Skull}
-     */
-    BlockType.Typed<Skull> PLAYER_HEAD = getBlockType("player_head");
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    BlockType.Typed<WallSkull> PLAYER_WALL_HEAD = getBlockType("player_wall_head");
-    /**
-     * BlockData: {@link Skull}
-     */
-    BlockType.Typed<Skull> CREEPER_HEAD = getBlockType("creeper_head");
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    BlockType.Typed<WallSkull> CREEPER_WALL_HEAD = getBlockType("creeper_wall_head");
-    /**
-     * BlockData: {@link Skull}
-     */
-    BlockType.Typed<Skull> DRAGON_HEAD = getBlockType("dragon_head");
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    BlockType.Typed<WallSkull> DRAGON_WALL_HEAD = getBlockType("dragon_wall_head");
-    /**
-     * BlockData: {@link Skull}
-     */
-    BlockType.Typed<Skull> PIGLIN_HEAD = getBlockType("piglin_head");
-    /**
-     * BlockData: {@link WallSkull}
-     */
-    BlockType.Typed<WallSkull> PIGLIN_WALL_HEAD = getBlockType("piglin_wall_head");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> ANVIL = getBlockType("anvil");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> CHIPPED_ANVIL = getBlockType("chipped_anvil");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> DAMAGED_ANVIL = getBlockType("damaged_anvil");
-    /**
-     * BlockData: {@link Chest}
-     */
-    BlockType.Typed<Chest> TRAPPED_CHEST = getBlockType("trapped_chest");
-    /**
-     * BlockData: {@link AnaloguePowerable}
-     */
-    BlockType.Typed<AnaloguePowerable> LIGHT_WEIGHTED_PRESSURE_PLATE = getBlockType("light_weighted_pressure_plate");
-    /**
-     * BlockData: {@link AnaloguePowerable}
-     */
-    BlockType.Typed<AnaloguePowerable> HEAVY_WEIGHTED_PRESSURE_PLATE = getBlockType("heavy_weighted_pressure_plate");
-    /**
-     * BlockData: {@link Comparator}
-     */
-    BlockType.Typed<Comparator> COMPARATOR = getBlockType("comparator");
-    /**
-     * BlockData: {@link DaylightDetector}
-     */
-    BlockType.Typed<DaylightDetector> DAYLIGHT_DETECTOR = getBlockType("daylight_detector");
-    BlockType.Typed<BlockData> REDSTONE_BLOCK = getBlockType("redstone_block");
-    BlockType.Typed<BlockData> NETHER_QUARTZ_ORE = getBlockType("nether_quartz_ore");
-    /**
-     * BlockData: {@link Hopper}
-     */
-    BlockType.Typed<Hopper> HOPPER = getBlockType("hopper");
-    BlockType.Typed<BlockData> QUARTZ_BLOCK = getBlockType("quartz_block");
-    BlockType.Typed<BlockData> CHISELED_QUARTZ_BLOCK = getBlockType("chiseled_quartz_block");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> QUARTZ_PILLAR = getBlockType("quartz_pillar");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> QUARTZ_STAIRS = getBlockType("quartz_stairs");
-    /**
-     * BlockData: {@link RedstoneRail}
-     */
-    BlockType.Typed<RedstoneRail> ACTIVATOR_RAIL = getBlockType("activator_rail");
-    /**
-     * BlockData: {@link Dispenser}
-     */
-    BlockType.Typed<Dispenser> DROPPER = getBlockType("dropper");
-    BlockType.Typed<BlockData> WHITE_TERRACOTTA = getBlockType("white_terracotta");
-    BlockType.Typed<BlockData> ORANGE_TERRACOTTA = getBlockType("orange_terracotta");
-    BlockType.Typed<BlockData> MAGENTA_TERRACOTTA = getBlockType("magenta_terracotta");
-    BlockType.Typed<BlockData> LIGHT_BLUE_TERRACOTTA = getBlockType("light_blue_terracotta");
-    BlockType.Typed<BlockData> YELLOW_TERRACOTTA = getBlockType("yellow_terracotta");
-    BlockType.Typed<BlockData> LIME_TERRACOTTA = getBlockType("lime_terracotta");
-    BlockType.Typed<BlockData> PINK_TERRACOTTA = getBlockType("pink_terracotta");
-    BlockType.Typed<BlockData> GRAY_TERRACOTTA = getBlockType("gray_terracotta");
-    BlockType.Typed<BlockData> LIGHT_GRAY_TERRACOTTA = getBlockType("light_gray_terracotta");
-    BlockType.Typed<BlockData> CYAN_TERRACOTTA = getBlockType("cyan_terracotta");
-    BlockType.Typed<BlockData> PURPLE_TERRACOTTA = getBlockType("purple_terracotta");
-    BlockType.Typed<BlockData> BLUE_TERRACOTTA = getBlockType("blue_terracotta");
-    BlockType.Typed<BlockData> BROWN_TERRACOTTA = getBlockType("brown_terracotta");
-    BlockType.Typed<BlockData> GREEN_TERRACOTTA = getBlockType("green_terracotta");
-    BlockType.Typed<BlockData> RED_TERRACOTTA = getBlockType("red_terracotta");
-    BlockType.Typed<BlockData> BLACK_TERRACOTTA = getBlockType("black_terracotta");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> WHITE_STAINED_GLASS_PANE = getBlockType("white_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> ORANGE_STAINED_GLASS_PANE = getBlockType("orange_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> MAGENTA_STAINED_GLASS_PANE = getBlockType("magenta_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> LIGHT_BLUE_STAINED_GLASS_PANE = getBlockType("light_blue_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> YELLOW_STAINED_GLASS_PANE = getBlockType("yellow_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> LIME_STAINED_GLASS_PANE = getBlockType("lime_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> PINK_STAINED_GLASS_PANE = getBlockType("pink_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> GRAY_STAINED_GLASS_PANE = getBlockType("gray_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> LIGHT_GRAY_STAINED_GLASS_PANE = getBlockType("light_gray_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> CYAN_STAINED_GLASS_PANE = getBlockType("cyan_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> PURPLE_STAINED_GLASS_PANE = getBlockType("purple_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> BLUE_STAINED_GLASS_PANE = getBlockType("blue_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> BROWN_STAINED_GLASS_PANE = getBlockType("brown_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> GREEN_STAINED_GLASS_PANE = getBlockType("green_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> RED_STAINED_GLASS_PANE = getBlockType("red_stained_glass_pane");
-    /**
-     * BlockData: {@link GlassPane}
-     */
-    BlockType.Typed<GlassPane> BLACK_STAINED_GLASS_PANE = getBlockType("black_stained_glass_pane");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> ACACIA_STAIRS = getBlockType("acacia_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> CHERRY_STAIRS = getBlockType("cherry_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> DARK_OAK_STAIRS = getBlockType("dark_oak_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> PALE_OAK_STAIRS = getBlockType("pale_oak_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> MANGROVE_STAIRS = getBlockType("mangrove_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> BAMBOO_STAIRS = getBlockType("bamboo_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> BAMBOO_MOSAIC_STAIRS = getBlockType("bamboo_mosaic_stairs");
-    BlockType.Typed<BlockData> SLIME_BLOCK = getBlockType("slime_block");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> BARRIER = getBlockType("barrier");
-    /**
-     * BlockData: {@link Light}
-     */
-    BlockType.Typed<Light> LIGHT = getBlockType("light");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> IRON_TRAPDOOR = getBlockType("iron_trapdoor");
-    BlockType.Typed<BlockData> PRISMARINE = getBlockType("prismarine");
-    BlockType.Typed<BlockData> PRISMARINE_BRICKS = getBlockType("prismarine_bricks");
-    BlockType.Typed<BlockData> DARK_PRISMARINE = getBlockType("dark_prismarine");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> PRISMARINE_STAIRS = getBlockType("prismarine_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> PRISMARINE_BRICK_STAIRS = getBlockType("prismarine_brick_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> DARK_PRISMARINE_STAIRS = getBlockType("dark_prismarine_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> PRISMARINE_SLAB = getBlockType("prismarine_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> PRISMARINE_BRICK_SLAB = getBlockType("prismarine_brick_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> DARK_PRISMARINE_SLAB = getBlockType("dark_prismarine_slab");
-    BlockType.Typed<BlockData> SEA_LANTERN = getBlockType("sea_lantern");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> HAY_BLOCK = getBlockType("hay_block");
-    BlockType.Typed<BlockData> WHITE_CARPET = getBlockType("white_carpet");
-    BlockType.Typed<BlockData> ORANGE_CARPET = getBlockType("orange_carpet");
-    BlockType.Typed<BlockData> MAGENTA_CARPET = getBlockType("magenta_carpet");
-    BlockType.Typed<BlockData> LIGHT_BLUE_CARPET = getBlockType("light_blue_carpet");
-    BlockType.Typed<BlockData> YELLOW_CARPET = getBlockType("yellow_carpet");
-    BlockType.Typed<BlockData> LIME_CARPET = getBlockType("lime_carpet");
-    BlockType.Typed<BlockData> PINK_CARPET = getBlockType("pink_carpet");
-    BlockType.Typed<BlockData> GRAY_CARPET = getBlockType("gray_carpet");
-    BlockType.Typed<BlockData> LIGHT_GRAY_CARPET = getBlockType("light_gray_carpet");
-    BlockType.Typed<BlockData> CYAN_CARPET = getBlockType("cyan_carpet");
-    BlockType.Typed<BlockData> PURPLE_CARPET = getBlockType("purple_carpet");
-    BlockType.Typed<BlockData> BLUE_CARPET = getBlockType("blue_carpet");
-    BlockType.Typed<BlockData> BROWN_CARPET = getBlockType("brown_carpet");
-    BlockType.Typed<BlockData> GREEN_CARPET = getBlockType("green_carpet");
-    BlockType.Typed<BlockData> RED_CARPET = getBlockType("red_carpet");
-    BlockType.Typed<BlockData> BLACK_CARPET = getBlockType("black_carpet");
-    BlockType.Typed<BlockData> TERRACOTTA = getBlockType("terracotta");
-    BlockType.Typed<BlockData> COAL_BLOCK = getBlockType("coal_block");
-    BlockType.Typed<BlockData> PACKED_ICE = getBlockType("packed_ice");
-    /**
-     * BlockData: {@link Bisected}
-     */
-    BlockType.Typed<Bisected> SUNFLOWER = getBlockType("sunflower");
-    /**
-     * BlockData: {@link Bisected}
-     */
-    BlockType.Typed<Bisected> LILAC = getBlockType("lilac");
-    /**
-     * BlockData: {@link Bisected}
-     */
-    BlockType.Typed<Bisected> ROSE_BUSH = getBlockType("rose_bush");
-    /**
-     * BlockData: {@link Bisected}
-     */
-    BlockType.Typed<Bisected> PEONY = getBlockType("peony");
-    /**
-     * BlockData: {@link Bisected}
-     */
-    BlockType.Typed<Bisected> TALL_GRASS = getBlockType("tall_grass");
-    /**
-     * BlockData: {@link Bisected}
-     */
-    BlockType.Typed<Bisected> LARGE_FERN = getBlockType("large_fern");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> WHITE_BANNER = getBlockType("white_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> ORANGE_BANNER = getBlockType("orange_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> MAGENTA_BANNER = getBlockType("magenta_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> LIGHT_BLUE_BANNER = getBlockType("light_blue_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> YELLOW_BANNER = getBlockType("yellow_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> LIME_BANNER = getBlockType("lime_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> PINK_BANNER = getBlockType("pink_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> GRAY_BANNER = getBlockType("gray_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> LIGHT_GRAY_BANNER = getBlockType("light_gray_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> CYAN_BANNER = getBlockType("cyan_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> PURPLE_BANNER = getBlockType("purple_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> BLUE_BANNER = getBlockType("blue_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> BROWN_BANNER = getBlockType("brown_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> GREEN_BANNER = getBlockType("green_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> RED_BANNER = getBlockType("red_banner");
-    /**
-     * BlockData: {@link Rotatable}
-     */
-    BlockType.Typed<Rotatable> BLACK_BANNER = getBlockType("black_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> WHITE_WALL_BANNER = getBlockType("white_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> ORANGE_WALL_BANNER = getBlockType("orange_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> MAGENTA_WALL_BANNER = getBlockType("magenta_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIGHT_BLUE_WALL_BANNER = getBlockType("light_blue_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> YELLOW_WALL_BANNER = getBlockType("yellow_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIME_WALL_BANNER = getBlockType("lime_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> PINK_WALL_BANNER = getBlockType("pink_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> GRAY_WALL_BANNER = getBlockType("gray_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIGHT_GRAY_WALL_BANNER = getBlockType("light_gray_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> CYAN_WALL_BANNER = getBlockType("cyan_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> PURPLE_WALL_BANNER = getBlockType("purple_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BLUE_WALL_BANNER = getBlockType("blue_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BROWN_WALL_BANNER = getBlockType("brown_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> GREEN_WALL_BANNER = getBlockType("green_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> RED_WALL_BANNER = getBlockType("red_wall_banner");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BLACK_WALL_BANNER = getBlockType("black_wall_banner");
-    BlockType.Typed<BlockData> RED_SANDSTONE = getBlockType("red_sandstone");
-    BlockType.Typed<BlockData> CHISELED_RED_SANDSTONE = getBlockType("chiseled_red_sandstone");
-    BlockType.Typed<BlockData> CUT_RED_SANDSTONE = getBlockType("cut_red_sandstone");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> RED_SANDSTONE_STAIRS = getBlockType("red_sandstone_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> OAK_SLAB = getBlockType("oak_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> SPRUCE_SLAB = getBlockType("spruce_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> BIRCH_SLAB = getBlockType("birch_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> JUNGLE_SLAB = getBlockType("jungle_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> ACACIA_SLAB = getBlockType("acacia_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> CHERRY_SLAB = getBlockType("cherry_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> DARK_OAK_SLAB = getBlockType("dark_oak_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> PALE_OAK_SLAB = getBlockType("pale_oak_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> MANGROVE_SLAB = getBlockType("mangrove_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> BAMBOO_SLAB = getBlockType("bamboo_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> BAMBOO_MOSAIC_SLAB = getBlockType("bamboo_mosaic_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> STONE_SLAB = getBlockType("stone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> SMOOTH_STONE_SLAB = getBlockType("smooth_stone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> SANDSTONE_SLAB = getBlockType("sandstone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> CUT_SANDSTONE_SLAB = getBlockType("cut_sandstone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> PETRIFIED_OAK_SLAB = getBlockType("petrified_oak_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> COBBLESTONE_SLAB = getBlockType("cobblestone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> BRICK_SLAB = getBlockType("brick_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> STONE_BRICK_SLAB = getBlockType("stone_brick_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> MUD_BRICK_SLAB = getBlockType("mud_brick_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> NETHER_BRICK_SLAB = getBlockType("nether_brick_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> QUARTZ_SLAB = getBlockType("quartz_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> RED_SANDSTONE_SLAB = getBlockType("red_sandstone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> CUT_RED_SANDSTONE_SLAB = getBlockType("cut_red_sandstone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> PURPUR_SLAB = getBlockType("purpur_slab");
-    BlockType.Typed<BlockData> SMOOTH_STONE = getBlockType("smooth_stone");
-    BlockType.Typed<BlockData> SMOOTH_SANDSTONE = getBlockType("smooth_sandstone");
-    BlockType.Typed<BlockData> SMOOTH_QUARTZ = getBlockType("smooth_quartz");
-    BlockType.Typed<BlockData> SMOOTH_RED_SANDSTONE = getBlockType("smooth_red_sandstone");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> SPRUCE_FENCE_GATE = getBlockType("spruce_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> BIRCH_FENCE_GATE = getBlockType("birch_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> JUNGLE_FENCE_GATE = getBlockType("jungle_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> ACACIA_FENCE_GATE = getBlockType("acacia_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> CHERRY_FENCE_GATE = getBlockType("cherry_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> DARK_OAK_FENCE_GATE = getBlockType("dark_oak_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> PALE_OAK_FENCE_GATE = getBlockType("pale_oak_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> MANGROVE_FENCE_GATE = getBlockType("mangrove_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> BAMBOO_FENCE_GATE = getBlockType("bamboo_fence_gate");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> SPRUCE_FENCE = getBlockType("spruce_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> BIRCH_FENCE = getBlockType("birch_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> JUNGLE_FENCE = getBlockType("jungle_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> ACACIA_FENCE = getBlockType("acacia_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> CHERRY_FENCE = getBlockType("cherry_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> DARK_OAK_FENCE = getBlockType("dark_oak_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> PALE_OAK_FENCE = getBlockType("pale_oak_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> MANGROVE_FENCE = getBlockType("mangrove_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> BAMBOO_FENCE = getBlockType("bamboo_fence");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> SPRUCE_DOOR = getBlockType("spruce_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> BIRCH_DOOR = getBlockType("birch_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> JUNGLE_DOOR = getBlockType("jungle_door");
-    /**
-     * BlockData: {@link Door}
-     */
+
     BlockType.Typed<Door> ACACIA_DOOR = getBlockType("acacia_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> CHERRY_DOOR = getBlockType("cherry_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> DARK_OAK_DOOR = getBlockType("dark_oak_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> PALE_OAK_DOOR = getBlockType("pale_oak_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> MANGROVE_DOOR = getBlockType("mangrove_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> BAMBOO_DOOR = getBlockType("bamboo_door");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> END_ROD = getBlockType("end_rod");
-    /**
-     * BlockData: {@link MultipleFacing}
-     */
-    BlockType.Typed<MultipleFacing> CHORUS_PLANT = getBlockType("chorus_plant");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> CHORUS_FLOWER = getBlockType("chorus_flower");
-    BlockType.Typed<BlockData> PURPUR_BLOCK = getBlockType("purpur_block");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> PURPUR_PILLAR = getBlockType("purpur_pillar");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> PURPUR_STAIRS = getBlockType("purpur_stairs");
-    BlockType.Typed<BlockData> END_STONE_BRICKS = getBlockType("end_stone_bricks");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> TORCHFLOWER_CROP = getBlockType("torchflower_crop");
-    /**
-     * BlockData: {@link PitcherCrop}
-     */
-    BlockType.Typed<PitcherCrop> PITCHER_CROP = getBlockType("pitcher_crop");
-    /**
-     * BlockData: {@link Bisected}
-     */
-    BlockType.Typed<Bisected> PITCHER_PLANT = getBlockType("pitcher_plant");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> BEETROOTS = getBlockType("beetroots");
-    BlockType.Typed<BlockData> DIRT_PATH = getBlockType("dirt_path");
-    BlockType.Typed<BlockData> END_GATEWAY = getBlockType("end_gateway");
-    /**
-     * BlockData: {@link CommandBlock}
-     */
-    BlockType.Typed<CommandBlock> REPEATING_COMMAND_BLOCK = getBlockType("repeating_command_block");
-    /**
-     * BlockData: {@link CommandBlock}
-     */
-    BlockType.Typed<CommandBlock> CHAIN_COMMAND_BLOCK = getBlockType("chain_command_block");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> FROSTED_ICE = getBlockType("frosted_ice");
-    BlockType.Typed<BlockData> MAGMA_BLOCK = getBlockType("magma_block");
-    BlockType.Typed<BlockData> NETHER_WART_BLOCK = getBlockType("nether_wart_block");
-    BlockType.Typed<BlockData> RED_NETHER_BRICKS = getBlockType("red_nether_bricks");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> BONE_BLOCK = getBlockType("bone_block");
-    BlockType.Typed<BlockData> STRUCTURE_VOID = getBlockType("structure_void");
-    /**
-     * BlockData: {@link Observer}
-     */
-    BlockType.Typed<Observer> OBSERVER = getBlockType("observer");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> SHULKER_BOX = getBlockType("shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> WHITE_SHULKER_BOX = getBlockType("white_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> ORANGE_SHULKER_BOX = getBlockType("orange_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> MAGENTA_SHULKER_BOX = getBlockType("magenta_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIGHT_BLUE_SHULKER_BOX = getBlockType("light_blue_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> YELLOW_SHULKER_BOX = getBlockType("yellow_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIME_SHULKER_BOX = getBlockType("lime_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> PINK_SHULKER_BOX = getBlockType("pink_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> GRAY_SHULKER_BOX = getBlockType("gray_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIGHT_GRAY_SHULKER_BOX = getBlockType("light_gray_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> CYAN_SHULKER_BOX = getBlockType("cyan_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> PURPLE_SHULKER_BOX = getBlockType("purple_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BLUE_SHULKER_BOX = getBlockType("blue_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BROWN_SHULKER_BOX = getBlockType("brown_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> GREEN_SHULKER_BOX = getBlockType("green_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> RED_SHULKER_BOX = getBlockType("red_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BLACK_SHULKER_BOX = getBlockType("black_shulker_box");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> WHITE_GLAZED_TERRACOTTA = getBlockType("white_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> ORANGE_GLAZED_TERRACOTTA = getBlockType("orange_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> MAGENTA_GLAZED_TERRACOTTA = getBlockType("magenta_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIGHT_BLUE_GLAZED_TERRACOTTA = getBlockType("light_blue_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> YELLOW_GLAZED_TERRACOTTA = getBlockType("yellow_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIME_GLAZED_TERRACOTTA = getBlockType("lime_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> PINK_GLAZED_TERRACOTTA = getBlockType("pink_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> GRAY_GLAZED_TERRACOTTA = getBlockType("gray_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LIGHT_GRAY_GLAZED_TERRACOTTA = getBlockType("light_gray_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> CYAN_GLAZED_TERRACOTTA = getBlockType("cyan_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> PURPLE_GLAZED_TERRACOTTA = getBlockType("purple_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BLUE_GLAZED_TERRACOTTA = getBlockType("blue_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BROWN_GLAZED_TERRACOTTA = getBlockType("brown_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> GREEN_GLAZED_TERRACOTTA = getBlockType("green_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> RED_GLAZED_TERRACOTTA = getBlockType("red_glazed_terracotta");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> BLACK_GLAZED_TERRACOTTA = getBlockType("black_glazed_terracotta");
-    BlockType.Typed<BlockData> WHITE_CONCRETE = getBlockType("white_concrete");
-    BlockType.Typed<BlockData> ORANGE_CONCRETE = getBlockType("orange_concrete");
-    BlockType.Typed<BlockData> MAGENTA_CONCRETE = getBlockType("magenta_concrete");
-    BlockType.Typed<BlockData> LIGHT_BLUE_CONCRETE = getBlockType("light_blue_concrete");
-    BlockType.Typed<BlockData> YELLOW_CONCRETE = getBlockType("yellow_concrete");
-    BlockType.Typed<BlockData> LIME_CONCRETE = getBlockType("lime_concrete");
-    BlockType.Typed<BlockData> PINK_CONCRETE = getBlockType("pink_concrete");
-    BlockType.Typed<BlockData> GRAY_CONCRETE = getBlockType("gray_concrete");
-    BlockType.Typed<BlockData> LIGHT_GRAY_CONCRETE = getBlockType("light_gray_concrete");
-    BlockType.Typed<BlockData> CYAN_CONCRETE = getBlockType("cyan_concrete");
-    BlockType.Typed<BlockData> PURPLE_CONCRETE = getBlockType("purple_concrete");
-    BlockType.Typed<BlockData> BLUE_CONCRETE = getBlockType("blue_concrete");
-    BlockType.Typed<BlockData> BROWN_CONCRETE = getBlockType("brown_concrete");
-    BlockType.Typed<BlockData> GREEN_CONCRETE = getBlockType("green_concrete");
-    BlockType.Typed<BlockData> RED_CONCRETE = getBlockType("red_concrete");
-    BlockType.Typed<BlockData> BLACK_CONCRETE = getBlockType("black_concrete");
-    BlockType.Typed<BlockData> WHITE_CONCRETE_POWDER = getBlockType("white_concrete_powder");
-    BlockType.Typed<BlockData> ORANGE_CONCRETE_POWDER = getBlockType("orange_concrete_powder");
-    BlockType.Typed<BlockData> MAGENTA_CONCRETE_POWDER = getBlockType("magenta_concrete_powder");
-    BlockType.Typed<BlockData> LIGHT_BLUE_CONCRETE_POWDER = getBlockType("light_blue_concrete_powder");
-    BlockType.Typed<BlockData> YELLOW_CONCRETE_POWDER = getBlockType("yellow_concrete_powder");
-    BlockType.Typed<BlockData> LIME_CONCRETE_POWDER = getBlockType("lime_concrete_powder");
-    BlockType.Typed<BlockData> PINK_CONCRETE_POWDER = getBlockType("pink_concrete_powder");
-    BlockType.Typed<BlockData> GRAY_CONCRETE_POWDER = getBlockType("gray_concrete_powder");
-    BlockType.Typed<BlockData> LIGHT_GRAY_CONCRETE_POWDER = getBlockType("light_gray_concrete_powder");
-    BlockType.Typed<BlockData> CYAN_CONCRETE_POWDER = getBlockType("cyan_concrete_powder");
-    BlockType.Typed<BlockData> PURPLE_CONCRETE_POWDER = getBlockType("purple_concrete_powder");
-    BlockType.Typed<BlockData> BLUE_CONCRETE_POWDER = getBlockType("blue_concrete_powder");
-    BlockType.Typed<BlockData> BROWN_CONCRETE_POWDER = getBlockType("brown_concrete_powder");
-    BlockType.Typed<BlockData> GREEN_CONCRETE_POWDER = getBlockType("green_concrete_powder");
-    BlockType.Typed<BlockData> RED_CONCRETE_POWDER = getBlockType("red_concrete_powder");
-    BlockType.Typed<BlockData> BLACK_CONCRETE_POWDER = getBlockType("black_concrete_powder");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> KELP = getBlockType("kelp");
-    BlockType.Typed<BlockData> KELP_PLANT = getBlockType("kelp_plant");
-    BlockType.Typed<BlockData> DRIED_KELP_BLOCK = getBlockType("dried_kelp_block");
-    /**
-     * BlockData: {@link TurtleEgg}
-     */
-    BlockType.Typed<TurtleEgg> TURTLE_EGG = getBlockType("turtle_egg");
-    /**
-     * BlockData: {@link Hatchable}
-     */
-    BlockType.Typed<Hatchable> SNIFFER_EGG = getBlockType("sniffer_egg");
-    BlockType.Typed<BlockData> DEAD_TUBE_CORAL_BLOCK = getBlockType("dead_tube_coral_block");
-    BlockType.Typed<BlockData> DEAD_BRAIN_CORAL_BLOCK = getBlockType("dead_brain_coral_block");
-    BlockType.Typed<BlockData> DEAD_BUBBLE_CORAL_BLOCK = getBlockType("dead_bubble_coral_block");
-    BlockType.Typed<BlockData> DEAD_FIRE_CORAL_BLOCK = getBlockType("dead_fire_coral_block");
-    BlockType.Typed<BlockData> DEAD_HORN_CORAL_BLOCK = getBlockType("dead_horn_coral_block");
-    BlockType.Typed<BlockData> TUBE_CORAL_BLOCK = getBlockType("tube_coral_block");
-    BlockType.Typed<BlockData> BRAIN_CORAL_BLOCK = getBlockType("brain_coral_block");
-    BlockType.Typed<BlockData> BUBBLE_CORAL_BLOCK = getBlockType("bubble_coral_block");
-    BlockType.Typed<BlockData> FIRE_CORAL_BLOCK = getBlockType("fire_coral_block");
-    BlockType.Typed<BlockData> HORN_CORAL_BLOCK = getBlockType("horn_coral_block");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_TUBE_CORAL = getBlockType("dead_tube_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_BRAIN_CORAL = getBlockType("dead_brain_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_BUBBLE_CORAL = getBlockType("dead_bubble_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_FIRE_CORAL = getBlockType("dead_fire_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_HORN_CORAL = getBlockType("dead_horn_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> TUBE_CORAL = getBlockType("tube_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> BRAIN_CORAL = getBlockType("brain_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> BUBBLE_CORAL = getBlockType("bubble_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> FIRE_CORAL = getBlockType("fire_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> HORN_CORAL = getBlockType("horn_coral");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_TUBE_CORAL_FAN = getBlockType("dead_tube_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_BRAIN_CORAL_FAN = getBlockType("dead_brain_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_BUBBLE_CORAL_FAN = getBlockType("dead_bubble_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_FIRE_CORAL_FAN = getBlockType("dead_fire_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> DEAD_HORN_CORAL_FAN = getBlockType("dead_horn_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> TUBE_CORAL_FAN = getBlockType("tube_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> BRAIN_CORAL_FAN = getBlockType("brain_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> BUBBLE_CORAL_FAN = getBlockType("bubble_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> FIRE_CORAL_FAN = getBlockType("fire_coral_fan");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> HORN_CORAL_FAN = getBlockType("horn_coral_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> DEAD_TUBE_CORAL_WALL_FAN = getBlockType("dead_tube_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> DEAD_BRAIN_CORAL_WALL_FAN = getBlockType("dead_brain_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> DEAD_BUBBLE_CORAL_WALL_FAN = getBlockType("dead_bubble_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> DEAD_FIRE_CORAL_WALL_FAN = getBlockType("dead_fire_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> DEAD_HORN_CORAL_WALL_FAN = getBlockType("dead_horn_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> TUBE_CORAL_WALL_FAN = getBlockType("tube_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> BRAIN_CORAL_WALL_FAN = getBlockType("brain_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> BUBBLE_CORAL_WALL_FAN = getBlockType("bubble_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> FIRE_CORAL_WALL_FAN = getBlockType("fire_coral_wall_fan");
-    /**
-     * BlockData: {@link CoralWallFan}
-     */
-    BlockType.Typed<CoralWallFan> HORN_CORAL_WALL_FAN = getBlockType("horn_coral_wall_fan");
-    /**
-     * BlockData: {@link SeaPickle}
-     */
-    BlockType.Typed<SeaPickle> SEA_PICKLE = getBlockType("sea_pickle");
-    BlockType.Typed<BlockData> BLUE_ICE = getBlockType("blue_ice");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> CONDUIT = getBlockType("conduit");
-    BlockType.Typed<BlockData> BAMBOO_SAPLING = getBlockType("bamboo_sapling");
-    /**
-     * BlockData: {@link Bamboo}
-     */
-    BlockType.Typed<Bamboo> BAMBOO = getBlockType("bamboo");
-    BlockType.Typed<BlockData> POTTED_BAMBOO = getBlockType("potted_bamboo");
-    BlockType.Typed<BlockData> VOID_AIR = getBlockType("void_air");
-    BlockType.Typed<BlockData> CAVE_AIR = getBlockType("cave_air");
-    /**
-     * BlockData: {@link BubbleColumn}
-     */
-    BlockType.Typed<BubbleColumn> BUBBLE_COLUMN = getBlockType("bubble_column");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> POLISHED_GRANITE_STAIRS = getBlockType("polished_granite_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> SMOOTH_RED_SANDSTONE_STAIRS = getBlockType("smooth_red_sandstone_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> MOSSY_STONE_BRICK_STAIRS = getBlockType("mossy_stone_brick_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> POLISHED_DIORITE_STAIRS = getBlockType("polished_diorite_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> MOSSY_COBBLESTONE_STAIRS = getBlockType("mossy_cobblestone_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> END_STONE_BRICK_STAIRS = getBlockType("end_stone_brick_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> STONE_STAIRS = getBlockType("stone_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> SMOOTH_SANDSTONE_STAIRS = getBlockType("smooth_sandstone_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> SMOOTH_QUARTZ_STAIRS = getBlockType("smooth_quartz_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> GRANITE_STAIRS = getBlockType("granite_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> ANDESITE_STAIRS = getBlockType("andesite_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> RED_NETHER_BRICK_STAIRS = getBlockType("red_nether_brick_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> POLISHED_ANDESITE_STAIRS = getBlockType("polished_andesite_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> DIORITE_STAIRS = getBlockType("diorite_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> POLISHED_GRANITE_SLAB = getBlockType("polished_granite_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> SMOOTH_RED_SANDSTONE_SLAB = getBlockType("smooth_red_sandstone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> MOSSY_STONE_BRICK_SLAB = getBlockType("mossy_stone_brick_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> POLISHED_DIORITE_SLAB = getBlockType("polished_diorite_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> MOSSY_COBBLESTONE_SLAB = getBlockType("mossy_cobblestone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> END_STONE_BRICK_SLAB = getBlockType("end_stone_brick_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> SMOOTH_SANDSTONE_SLAB = getBlockType("smooth_sandstone_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> SMOOTH_QUARTZ_SLAB = getBlockType("smooth_quartz_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> GRANITE_SLAB = getBlockType("granite_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> ANDESITE_SLAB = getBlockType("andesite_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> RED_NETHER_BRICK_SLAB = getBlockType("red_nether_brick_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> POLISHED_ANDESITE_SLAB = getBlockType("polished_andesite_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> DIORITE_SLAB = getBlockType("diorite_slab");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> BRICK_WALL = getBlockType("brick_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> PRISMARINE_WALL = getBlockType("prismarine_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> RED_SANDSTONE_WALL = getBlockType("red_sandstone_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> MOSSY_STONE_BRICK_WALL = getBlockType("mossy_stone_brick_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> GRANITE_WALL = getBlockType("granite_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> STONE_BRICK_WALL = getBlockType("stone_brick_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> MUD_BRICK_WALL = getBlockType("mud_brick_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> NETHER_BRICK_WALL = getBlockType("nether_brick_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> ANDESITE_WALL = getBlockType("andesite_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> RED_NETHER_BRICK_WALL = getBlockType("red_nether_brick_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> SANDSTONE_WALL = getBlockType("sandstone_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> END_STONE_BRICK_WALL = getBlockType("end_stone_brick_wall");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> DIORITE_WALL = getBlockType("diorite_wall");
-    /**
-     * BlockData: {@link Scaffolding}
-     */
-    BlockType.Typed<Scaffolding> SCAFFOLDING = getBlockType("scaffolding");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> LOOM = getBlockType("loom");
-    /**
-     * BlockData: {@link Barrel}
-     */
-    BlockType.Typed<Barrel> BARREL = getBlockType("barrel");
-    /**
-     * BlockData: {@link Furnace}
-     */
-    BlockType.Typed<Furnace> SMOKER = getBlockType("smoker");
-    /**
-     * BlockData: {@link Furnace}
-     */
-    BlockType.Typed<Furnace> BLAST_FURNACE = getBlockType("blast_furnace");
-    BlockType.Typed<BlockData> CARTOGRAPHY_TABLE = getBlockType("cartography_table");
-    BlockType.Typed<BlockData> FLETCHING_TABLE = getBlockType("fletching_table");
-    /**
-     * BlockData: {@link Grindstone}
-     */
-    BlockType.Typed<Grindstone> GRINDSTONE = getBlockType("grindstone");
-    /**
-     * BlockData: {@link Lectern}
-     */
-    BlockType.Typed<Lectern> LECTERN = getBlockType("lectern");
-    BlockType.Typed<BlockData> SMITHING_TABLE = getBlockType("smithing_table");
-    /**
-     * BlockData: {@link Directional}
-     */
-    BlockType.Typed<Directional> STONECUTTER = getBlockType("stonecutter");
-    /**
-     * BlockData: {@link Bell}
-     */
-    BlockType.Typed<Bell> BELL = getBlockType("bell");
-    /**
-     * BlockData: {@link Lantern}
-     */
-    BlockType.Typed<Lantern> LANTERN = getBlockType("lantern");
-    /**
-     * BlockData: {@link Lantern}
-     */
-    BlockType.Typed<Lantern> SOUL_LANTERN = getBlockType("soul_lantern");
-    /**
-     * BlockData: {@link Campfire}
-     */
-    BlockType.Typed<Campfire> CAMPFIRE = getBlockType("campfire");
-    /**
-     * BlockData: {@link Campfire}
-     */
-    BlockType.Typed<Campfire> SOUL_CAMPFIRE = getBlockType("soul_campfire");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> SWEET_BERRY_BUSH = getBlockType("sweet_berry_bush");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> WARPED_STEM = getBlockType("warped_stem");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_WARPED_STEM = getBlockType("stripped_warped_stem");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> WARPED_HYPHAE = getBlockType("warped_hyphae");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_WARPED_HYPHAE = getBlockType("stripped_warped_hyphae");
-    BlockType.Typed<BlockData> WARPED_NYLIUM = getBlockType("warped_nylium");
-    BlockType.Typed<BlockData> WARPED_FUNGUS = getBlockType("warped_fungus");
-    BlockType.Typed<BlockData> WARPED_WART_BLOCK = getBlockType("warped_wart_block");
-    BlockType.Typed<BlockData> WARPED_ROOTS = getBlockType("warped_roots");
-    BlockType.Typed<BlockData> NETHER_SPROUTS = getBlockType("nether_sprouts");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> CRIMSON_STEM = getBlockType("crimson_stem");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_CRIMSON_STEM = getBlockType("stripped_crimson_stem");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> CRIMSON_HYPHAE = getBlockType("crimson_hyphae");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> STRIPPED_CRIMSON_HYPHAE = getBlockType("stripped_crimson_hyphae");
-    BlockType.Typed<BlockData> CRIMSON_NYLIUM = getBlockType("crimson_nylium");
-    BlockType.Typed<BlockData> CRIMSON_FUNGUS = getBlockType("crimson_fungus");
-    BlockType.Typed<BlockData> SHROOMLIGHT = getBlockType("shroomlight");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> WEEPING_VINES = getBlockType("weeping_vines");
-    BlockType.Typed<BlockData> WEEPING_VINES_PLANT = getBlockType("weeping_vines_plant");
-    /**
-     * BlockData: {@link Ageable}
-     */
-    BlockType.Typed<Ageable> TWISTING_VINES = getBlockType("twisting_vines");
-    BlockType.Typed<BlockData> TWISTING_VINES_PLANT = getBlockType("twisting_vines_plant");
-    BlockType.Typed<BlockData> CRIMSON_ROOTS = getBlockType("crimson_roots");
-    BlockType.Typed<BlockData> CRIMSON_PLANKS = getBlockType("crimson_planks");
-    BlockType.Typed<BlockData> WARPED_PLANKS = getBlockType("warped_planks");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> CRIMSON_SLAB = getBlockType("crimson_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> WARPED_SLAB = getBlockType("warped_slab");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> CRIMSON_PRESSURE_PLATE = getBlockType("crimson_pressure_plate");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> WARPED_PRESSURE_PLATE = getBlockType("warped_pressure_plate");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> CRIMSON_FENCE = getBlockType("crimson_fence");
-    /**
-     * BlockData: {@link Fence}
-     */
-    BlockType.Typed<Fence> WARPED_FENCE = getBlockType("warped_fence");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> CRIMSON_TRAPDOOR = getBlockType("crimson_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> WARPED_TRAPDOOR = getBlockType("warped_trapdoor");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> CRIMSON_FENCE_GATE = getBlockType("crimson_fence_gate");
-    /**
-     * BlockData: {@link Gate}
-     */
-    BlockType.Typed<Gate> WARPED_FENCE_GATE = getBlockType("warped_fence_gate");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> CRIMSON_STAIRS = getBlockType("crimson_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> WARPED_STAIRS = getBlockType("warped_stairs");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> CRIMSON_BUTTON = getBlockType("crimson_button");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> WARPED_BUTTON = getBlockType("warped_button");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> CRIMSON_DOOR = getBlockType("crimson_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> WARPED_DOOR = getBlockType("warped_door");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> CRIMSON_SIGN = getBlockType("crimson_sign");
-    /**
-     * BlockData: {@link Sign}
-     */
-    BlockType.Typed<Sign> WARPED_SIGN = getBlockType("warped_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> CRIMSON_WALL_SIGN = getBlockType("crimson_wall_sign");
-    /**
-     * BlockData: {@link WallSign}
-     */
-    BlockType.Typed<WallSign> WARPED_WALL_SIGN = getBlockType("warped_wall_sign");
-    /**
-     * BlockData: {@link StructureBlock}
-     */
-    BlockType.Typed<StructureBlock> STRUCTURE_BLOCK = getBlockType("structure_block");
-    /**
-     * BlockData: {@link Jigsaw}
-     */
-    BlockType.Typed<Jigsaw> JIGSAW = getBlockType("jigsaw");
-    /**
-     * BlockData: {@link Levelled}
-     */
-    BlockType.Typed<Levelled> COMPOSTER = getBlockType("composter");
-    /**
-     * BlockData: {@link AnaloguePowerable}
-     */
-    BlockType.Typed<AnaloguePowerable> TARGET = getBlockType("target");
-    /**
-     * BlockData: {@link Beehive}
-     */
-    BlockType.Typed<Beehive> BEE_NEST = getBlockType("bee_nest");
-    /**
-     * BlockData: {@link Beehive}
-     */
-    BlockType.Typed<Beehive> BEEHIVE = getBlockType("beehive");
-    BlockType.Typed<BlockData> HONEY_BLOCK = getBlockType("honey_block");
-    BlockType.Typed<BlockData> HONEYCOMB_BLOCK = getBlockType("honeycomb_block");
-    BlockType.Typed<BlockData> NETHERITE_BLOCK = getBlockType("netherite_block");
-    BlockType.Typed<BlockData> ANCIENT_DEBRIS = getBlockType("ancient_debris");
-    BlockType.Typed<BlockData> CRYING_OBSIDIAN = getBlockType("crying_obsidian");
-    /**
-     * BlockData: {@link RespawnAnchor}
-     */
-    BlockType.Typed<RespawnAnchor> RESPAWN_ANCHOR = getBlockType("respawn_anchor");
-    BlockType.Typed<BlockData> POTTED_CRIMSON_FUNGUS = getBlockType("potted_crimson_fungus");
-    BlockType.Typed<BlockData> POTTED_WARPED_FUNGUS = getBlockType("potted_warped_fungus");
-    BlockType.Typed<BlockData> POTTED_CRIMSON_ROOTS = getBlockType("potted_crimson_roots");
-    BlockType.Typed<BlockData> POTTED_WARPED_ROOTS = getBlockType("potted_warped_roots");
-    BlockType.Typed<BlockData> LODESTONE = getBlockType("lodestone");
-    BlockType.Typed<BlockData> BLACKSTONE = getBlockType("blackstone");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> BLACKSTONE_STAIRS = getBlockType("blackstone_stairs");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> BLACKSTONE_WALL = getBlockType("blackstone_wall");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> BLACKSTONE_SLAB = getBlockType("blackstone_slab");
-    BlockType.Typed<BlockData> POLISHED_BLACKSTONE = getBlockType("polished_blackstone");
-    BlockType.Typed<BlockData> POLISHED_BLACKSTONE_BRICKS = getBlockType("polished_blackstone_bricks");
-    BlockType.Typed<BlockData> CRACKED_POLISHED_BLACKSTONE_BRICKS = getBlockType("cracked_polished_blackstone_bricks");
-    BlockType.Typed<BlockData> CHISELED_POLISHED_BLACKSTONE = getBlockType("chiseled_polished_blackstone");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> POLISHED_BLACKSTONE_BRICK_SLAB = getBlockType("polished_blackstone_brick_slab");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> POLISHED_BLACKSTONE_BRICK_STAIRS = getBlockType("polished_blackstone_brick_stairs");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> POLISHED_BLACKSTONE_BRICK_WALL = getBlockType("polished_blackstone_brick_wall");
-    BlockType.Typed<BlockData> GILDED_BLACKSTONE = getBlockType("gilded_blackstone");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> POLISHED_BLACKSTONE_STAIRS = getBlockType("polished_blackstone_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> POLISHED_BLACKSTONE_SLAB = getBlockType("polished_blackstone_slab");
-    /**
-     * BlockData: {@link Powerable}
-     */
-    BlockType.Typed<Powerable> POLISHED_BLACKSTONE_PRESSURE_PLATE = getBlockType("polished_blackstone_pressure_plate");
-    /**
-     * BlockData: {@link Switch}
-     */
-    BlockType.Typed<Switch> POLISHED_BLACKSTONE_BUTTON = getBlockType("polished_blackstone_button");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> POLISHED_BLACKSTONE_WALL = getBlockType("polished_blackstone_wall");
-    BlockType.Typed<BlockData> CHISELED_NETHER_BRICKS = getBlockType("chiseled_nether_bricks");
-    BlockType.Typed<BlockData> CRACKED_NETHER_BRICKS = getBlockType("cracked_nether_bricks");
-    BlockType.Typed<BlockData> QUARTZ_BRICKS = getBlockType("quartz_bricks");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> CANDLE = getBlockType("candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> WHITE_CANDLE = getBlockType("white_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> ORANGE_CANDLE = getBlockType("orange_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> MAGENTA_CANDLE = getBlockType("magenta_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> LIGHT_BLUE_CANDLE = getBlockType("light_blue_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> YELLOW_CANDLE = getBlockType("yellow_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> LIME_CANDLE = getBlockType("lime_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> PINK_CANDLE = getBlockType("pink_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> GRAY_CANDLE = getBlockType("gray_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> LIGHT_GRAY_CANDLE = getBlockType("light_gray_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> CYAN_CANDLE = getBlockType("cyan_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> PURPLE_CANDLE = getBlockType("purple_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> BLUE_CANDLE = getBlockType("blue_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> BROWN_CANDLE = getBlockType("brown_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> GREEN_CANDLE = getBlockType("green_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> RED_CANDLE = getBlockType("red_candle");
-    /**
-     * BlockData: {@link Candle}
-     */
-    BlockType.Typed<Candle> BLACK_CANDLE = getBlockType("black_candle");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> CANDLE_CAKE = getBlockType("candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> WHITE_CANDLE_CAKE = getBlockType("white_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> ORANGE_CANDLE_CAKE = getBlockType("orange_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> MAGENTA_CANDLE_CAKE = getBlockType("magenta_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> LIGHT_BLUE_CANDLE_CAKE = getBlockType("light_blue_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> YELLOW_CANDLE_CAKE = getBlockType("yellow_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> LIME_CANDLE_CAKE = getBlockType("lime_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> PINK_CANDLE_CAKE = getBlockType("pink_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> GRAY_CANDLE_CAKE = getBlockType("gray_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> LIGHT_GRAY_CANDLE_CAKE = getBlockType("light_gray_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> CYAN_CANDLE_CAKE = getBlockType("cyan_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> PURPLE_CANDLE_CAKE = getBlockType("purple_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> BLUE_CANDLE_CAKE = getBlockType("blue_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> BROWN_CANDLE_CAKE = getBlockType("brown_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> GREEN_CANDLE_CAKE = getBlockType("green_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> RED_CANDLE_CAKE = getBlockType("red_candle_cake");
-    /**
-     * BlockData: {@link Lightable}
-     */
-    BlockType.Typed<Lightable> BLACK_CANDLE_CAKE = getBlockType("black_candle_cake");
+
+    BlockType.Typed<Fence> ACACIA_FENCE = getBlockType("acacia_fence");
+
+    BlockType.Typed<Gate> ACACIA_FENCE_GATE = getBlockType("acacia_fence_gate");
+
+    BlockType.Typed<HangingSign> ACACIA_HANGING_SIGN = getBlockType("acacia_hanging_sign");
+
+    BlockType.Typed<Leaves> ACACIA_LEAVES = getBlockType("acacia_leaves");
+
+    BlockType.Typed<Orientable> ACACIA_LOG = getBlockType("acacia_log");
+
+    BlockType.Typed<BlockData> ACACIA_PLANKS = getBlockType("acacia_planks");
+
+    BlockType.Typed<Powerable> ACACIA_PRESSURE_PLATE = getBlockType("acacia_pressure_plate");
+
+    BlockType.Typed<Sapling> ACACIA_SAPLING = getBlockType("acacia_sapling");
+
+    BlockType.Typed<Sign> ACACIA_SIGN = getBlockType("acacia_sign");
+
+    BlockType.Typed<Slab> ACACIA_SLAB = getBlockType("acacia_slab");
+
+    BlockType.Typed<Stairs> ACACIA_STAIRS = getBlockType("acacia_stairs");
+
+    BlockType.Typed<TrapDoor> ACACIA_TRAPDOOR = getBlockType("acacia_trapdoor");
+
+    BlockType.Typed<WallHangingSign> ACACIA_WALL_HANGING_SIGN = getBlockType("acacia_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> ACACIA_WALL_SIGN = getBlockType("acacia_wall_sign");
+
+    BlockType.Typed<Orientable> ACACIA_WOOD = getBlockType("acacia_wood");
+
+    BlockType.Typed<RedstoneRail> ACTIVATOR_RAIL = getBlockType("activator_rail");
+
+    BlockType.Typed<BlockData> AIR = getBlockType("air");
+
+    BlockType.Typed<BlockData> ALLIUM = getBlockType("allium");
+
     BlockType.Typed<BlockData> AMETHYST_BLOCK = getBlockType("amethyst_block");
-    BlockType.Typed<BlockData> BUDDING_AMETHYST = getBlockType("budding_amethyst");
-    /**
-     * BlockData: {@link AmethystCluster}
-     */
+
     BlockType.Typed<AmethystCluster> AMETHYST_CLUSTER = getBlockType("amethyst_cluster");
-    /**
-     * BlockData: {@link AmethystCluster}
-     */
-    BlockType.Typed<AmethystCluster> LARGE_AMETHYST_BUD = getBlockType("large_amethyst_bud");
-    /**
-     * BlockData: {@link AmethystCluster}
-     */
-    BlockType.Typed<AmethystCluster> MEDIUM_AMETHYST_BUD = getBlockType("medium_amethyst_bud");
-    /**
-     * BlockData: {@link AmethystCluster}
-     */
-    BlockType.Typed<AmethystCluster> SMALL_AMETHYST_BUD = getBlockType("small_amethyst_bud");
-    BlockType.Typed<BlockData> TUFF = getBlockType("tuff");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> TUFF_SLAB = getBlockType("tuff_slab");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> TUFF_STAIRS = getBlockType("tuff_stairs");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> TUFF_WALL = getBlockType("tuff_wall");
-    BlockType.Typed<BlockData> POLISHED_TUFF = getBlockType("polished_tuff");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> POLISHED_TUFF_SLAB = getBlockType("polished_tuff_slab");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> POLISHED_TUFF_STAIRS = getBlockType("polished_tuff_stairs");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> POLISHED_TUFF_WALL = getBlockType("polished_tuff_wall");
-    BlockType.Typed<BlockData> CHISELED_TUFF = getBlockType("chiseled_tuff");
-    BlockType.Typed<BlockData> TUFF_BRICKS = getBlockType("tuff_bricks");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> TUFF_BRICK_SLAB = getBlockType("tuff_brick_slab");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> TUFF_BRICK_STAIRS = getBlockType("tuff_brick_stairs");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> TUFF_BRICK_WALL = getBlockType("tuff_brick_wall");
-    BlockType.Typed<BlockData> CHISELED_TUFF_BRICKS = getBlockType("chiseled_tuff_bricks");
-    BlockType.Typed<BlockData> CALCITE = getBlockType("calcite");
-    BlockType.Typed<BlockData> TINTED_GLASS = getBlockType("tinted_glass");
-    BlockType.Typed<BlockData> POWDER_SNOW = getBlockType("powder_snow");
-    /**
-     * BlockData: {@link SculkSensor}
-     */
-    BlockType.Typed<SculkSensor> SCULK_SENSOR = getBlockType("sculk_sensor");
-    /**
-     * BlockData: {@link CalibratedSculkSensor}
-     */
-    BlockType.Typed<CalibratedSculkSensor> CALIBRATED_SCULK_SENSOR = getBlockType("calibrated_sculk_sensor");
-    BlockType.Typed<BlockData> SCULK = getBlockType("sculk");
-    /**
-     * BlockData: {@link SculkVein}
-     */
-    BlockType.Typed<SculkVein> SCULK_VEIN = getBlockType("sculk_vein");
-    /**
-     * BlockData: {@link SculkCatalyst}
-     */
-    BlockType.Typed<SculkCatalyst> SCULK_CATALYST = getBlockType("sculk_catalyst");
-    /**
-     * BlockData: {@link SculkShrieker}
-     */
-    BlockType.Typed<SculkShrieker> SCULK_SHRIEKER = getBlockType("sculk_shrieker");
-    BlockType.Typed<BlockData> COPPER_BLOCK = getBlockType("copper_block");
-    BlockType.Typed<BlockData> EXPOSED_COPPER = getBlockType("exposed_copper");
-    BlockType.Typed<BlockData> WEATHERED_COPPER = getBlockType("weathered_copper");
-    BlockType.Typed<BlockData> OXIDIZED_COPPER = getBlockType("oxidized_copper");
-    BlockType.Typed<BlockData> COPPER_ORE = getBlockType("copper_ore");
-    BlockType.Typed<BlockData> DEEPSLATE_COPPER_ORE = getBlockType("deepslate_copper_ore");
-    BlockType.Typed<BlockData> OXIDIZED_CUT_COPPER = getBlockType("oxidized_cut_copper");
-    BlockType.Typed<BlockData> WEATHERED_CUT_COPPER = getBlockType("weathered_cut_copper");
-    BlockType.Typed<BlockData> EXPOSED_CUT_COPPER = getBlockType("exposed_cut_copper");
-    BlockType.Typed<BlockData> CUT_COPPER = getBlockType("cut_copper");
-    BlockType.Typed<BlockData> OXIDIZED_CHISELED_COPPER = getBlockType("oxidized_chiseled_copper");
-    BlockType.Typed<BlockData> WEATHERED_CHISELED_COPPER = getBlockType("weathered_chiseled_copper");
-    BlockType.Typed<BlockData> EXPOSED_CHISELED_COPPER = getBlockType("exposed_chiseled_copper");
-    BlockType.Typed<BlockData> CHISELED_COPPER = getBlockType("chiseled_copper");
-    BlockType.Typed<BlockData> WAXED_OXIDIZED_CHISELED_COPPER = getBlockType("waxed_oxidized_chiseled_copper");
-    BlockType.Typed<BlockData> WAXED_WEATHERED_CHISELED_COPPER = getBlockType("waxed_weathered_chiseled_copper");
-    BlockType.Typed<BlockData> WAXED_EXPOSED_CHISELED_COPPER = getBlockType("waxed_exposed_chiseled_copper");
-    BlockType.Typed<BlockData> WAXED_CHISELED_COPPER = getBlockType("waxed_chiseled_copper");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> OXIDIZED_CUT_COPPER_STAIRS = getBlockType("oxidized_cut_copper_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> WEATHERED_CUT_COPPER_STAIRS = getBlockType("weathered_cut_copper_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> EXPOSED_CUT_COPPER_STAIRS = getBlockType("exposed_cut_copper_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> CUT_COPPER_STAIRS = getBlockType("cut_copper_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> OXIDIZED_CUT_COPPER_SLAB = getBlockType("oxidized_cut_copper_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> WEATHERED_CUT_COPPER_SLAB = getBlockType("weathered_cut_copper_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> EXPOSED_CUT_COPPER_SLAB = getBlockType("exposed_cut_copper_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> CUT_COPPER_SLAB = getBlockType("cut_copper_slab");
-    BlockType.Typed<BlockData> WAXED_COPPER_BLOCK = getBlockType("waxed_copper_block");
-    BlockType.Typed<BlockData> WAXED_WEATHERED_COPPER = getBlockType("waxed_weathered_copper");
-    BlockType.Typed<BlockData> WAXED_EXPOSED_COPPER = getBlockType("waxed_exposed_copper");
-    BlockType.Typed<BlockData> WAXED_OXIDIZED_COPPER = getBlockType("waxed_oxidized_copper");
-    BlockType.Typed<BlockData> WAXED_OXIDIZED_CUT_COPPER = getBlockType("waxed_oxidized_cut_copper");
-    BlockType.Typed<BlockData> WAXED_WEATHERED_CUT_COPPER = getBlockType("waxed_weathered_cut_copper");
-    BlockType.Typed<BlockData> WAXED_EXPOSED_CUT_COPPER = getBlockType("waxed_exposed_cut_copper");
-    BlockType.Typed<BlockData> WAXED_CUT_COPPER = getBlockType("waxed_cut_copper");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> WAXED_OXIDIZED_CUT_COPPER_STAIRS = getBlockType("waxed_oxidized_cut_copper_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> WAXED_WEATHERED_CUT_COPPER_STAIRS = getBlockType("waxed_weathered_cut_copper_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> WAXED_EXPOSED_CUT_COPPER_STAIRS = getBlockType("waxed_exposed_cut_copper_stairs");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> WAXED_CUT_COPPER_STAIRS = getBlockType("waxed_cut_copper_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> WAXED_OXIDIZED_CUT_COPPER_SLAB = getBlockType("waxed_oxidized_cut_copper_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> WAXED_WEATHERED_CUT_COPPER_SLAB = getBlockType("waxed_weathered_cut_copper_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> WAXED_EXPOSED_CUT_COPPER_SLAB = getBlockType("waxed_exposed_cut_copper_slab");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> WAXED_CUT_COPPER_SLAB = getBlockType("waxed_cut_copper_slab");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> COPPER_DOOR = getBlockType("copper_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> EXPOSED_COPPER_DOOR = getBlockType("exposed_copper_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> OXIDIZED_COPPER_DOOR = getBlockType("oxidized_copper_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> WEATHERED_COPPER_DOOR = getBlockType("weathered_copper_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> WAXED_COPPER_DOOR = getBlockType("waxed_copper_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> WAXED_EXPOSED_COPPER_DOOR = getBlockType("waxed_exposed_copper_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> WAXED_OXIDIZED_COPPER_DOOR = getBlockType("waxed_oxidized_copper_door");
-    /**
-     * BlockData: {@link Door}
-     */
-    BlockType.Typed<Door> WAXED_WEATHERED_COPPER_DOOR = getBlockType("waxed_weathered_copper_door");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> COPPER_TRAPDOOR = getBlockType("copper_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> EXPOSED_COPPER_TRAPDOOR = getBlockType("exposed_copper_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> OXIDIZED_COPPER_TRAPDOOR = getBlockType("oxidized_copper_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> WEATHERED_COPPER_TRAPDOOR = getBlockType("weathered_copper_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> WAXED_COPPER_TRAPDOOR = getBlockType("waxed_copper_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> WAXED_EXPOSED_COPPER_TRAPDOOR = getBlockType("waxed_exposed_copper_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> WAXED_OXIDIZED_COPPER_TRAPDOOR = getBlockType("waxed_oxidized_copper_trapdoor");
-    /**
-     * BlockData: {@link TrapDoor}
-     */
-    BlockType.Typed<TrapDoor> WAXED_WEATHERED_COPPER_TRAPDOOR = getBlockType("waxed_weathered_copper_trapdoor");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> COPPER_GRATE = getBlockType("copper_grate");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> EXPOSED_COPPER_GRATE = getBlockType("exposed_copper_grate");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> WEATHERED_COPPER_GRATE = getBlockType("weathered_copper_grate");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> OXIDIZED_COPPER_GRATE = getBlockType("oxidized_copper_grate");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> WAXED_COPPER_GRATE = getBlockType("waxed_copper_grate");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> WAXED_EXPOSED_COPPER_GRATE = getBlockType("waxed_exposed_copper_grate");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> WAXED_WEATHERED_COPPER_GRATE = getBlockType("waxed_weathered_copper_grate");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> WAXED_OXIDIZED_COPPER_GRATE = getBlockType("waxed_oxidized_copper_grate");
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    BlockType.Typed<CopperBulb> COPPER_BULB = getBlockType("copper_bulb");
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    BlockType.Typed<CopperBulb> EXPOSED_COPPER_BULB = getBlockType("exposed_copper_bulb");
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    BlockType.Typed<CopperBulb> WEATHERED_COPPER_BULB = getBlockType("weathered_copper_bulb");
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    BlockType.Typed<CopperBulb> OXIDIZED_COPPER_BULB = getBlockType("oxidized_copper_bulb");
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    BlockType.Typed<CopperBulb> WAXED_COPPER_BULB = getBlockType("waxed_copper_bulb");
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    BlockType.Typed<CopperBulb> WAXED_EXPOSED_COPPER_BULB = getBlockType("waxed_exposed_copper_bulb");
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    BlockType.Typed<CopperBulb> WAXED_WEATHERED_COPPER_BULB = getBlockType("waxed_weathered_copper_bulb");
-    /**
-     * BlockData: {@link CopperBulb}
-     */
-    BlockType.Typed<CopperBulb> WAXED_OXIDIZED_COPPER_BULB = getBlockType("waxed_oxidized_copper_bulb");
-    /**
-     * BlockData: {@link LightningRod}
-     */
-    BlockType.Typed<LightningRod> LIGHTNING_ROD = getBlockType("lightning_rod");
-    /**
-     * BlockData: {@link PointedDripstone}
-     */
-    BlockType.Typed<PointedDripstone> POINTED_DRIPSTONE = getBlockType("pointed_dripstone");
-    BlockType.Typed<BlockData> DRIPSTONE_BLOCK = getBlockType("dripstone_block");
-    /**
-     * BlockData: {@link CaveVines}
-     */
-    BlockType.Typed<CaveVines> CAVE_VINES = getBlockType("cave_vines");
-    /**
-     * BlockData: {@link CaveVinesPlant}
-     */
-    BlockType.Typed<CaveVinesPlant> CAVE_VINES_PLANT = getBlockType("cave_vines_plant");
-    BlockType.Typed<BlockData> SPORE_BLOSSOM = getBlockType("spore_blossom");
+
+    BlockType.Typed<BlockData> ANCIENT_DEBRIS = getBlockType("ancient_debris");
+
+    BlockType.Typed<BlockData> ANDESITE = getBlockType("andesite");
+
+    BlockType.Typed<Slab> ANDESITE_SLAB = getBlockType("andesite_slab");
+
+    BlockType.Typed<Stairs> ANDESITE_STAIRS = getBlockType("andesite_stairs");
+
+    BlockType.Typed<Wall> ANDESITE_WALL = getBlockType("andesite_wall");
+
+    BlockType.Typed<Directional> ANVIL = getBlockType("anvil");
+
+    BlockType.Typed<Directional> ATTACHED_MELON_STEM = getBlockType("attached_melon_stem");
+
+    BlockType.Typed<Directional> ATTACHED_PUMPKIN_STEM = getBlockType("attached_pumpkin_stem");
+
     BlockType.Typed<BlockData> AZALEA = getBlockType("azalea");
-    BlockType.Typed<BlockData> FLOWERING_AZALEA = getBlockType("flowering_azalea");
-    /**
-     * BlockData: {@link PinkPetals}
-     */
-    BlockType.Typed<PinkPetals> PINK_PETALS = getBlockType("pink_petals");
-    BlockType.Typed<BlockData> MOSS_CARPET = getBlockType("moss_carpet");
-    BlockType.Typed<BlockData> MOSS_BLOCK = getBlockType("moss_block");
-    /**
-     * BlockData: {@link MossyCarpet}
-     */
-    BlockType.Typed<MossyCarpet> PALE_MOSS_CARPET = getBlockType("pale_moss_carpet");
-    /**
-     * BlockData: {@link HangingMoss}
-     */
-    BlockType.Typed<HangingMoss> PALE_HANGING_MOSS = getBlockType("pale_hanging_moss");
-    BlockType.Typed<BlockData> PALE_MOSS_BLOCK = getBlockType("pale_moss_block");
-    /**
-     * BlockData: {@link BigDripleaf}
-     */
+
+    BlockType.Typed<Leaves> AZALEA_LEAVES = getBlockType("azalea_leaves");
+
+    BlockType.Typed<BlockData> AZURE_BLUET = getBlockType("azure_bluet");
+
+    BlockType.Typed<Bamboo> BAMBOO = getBlockType("bamboo");
+
+    BlockType.Typed<Orientable> BAMBOO_BLOCK = getBlockType("bamboo_block");
+
+    BlockType.Typed<Switch> BAMBOO_BUTTON = getBlockType("bamboo_button");
+
+    BlockType.Typed<Door> BAMBOO_DOOR = getBlockType("bamboo_door");
+
+    BlockType.Typed<Fence> BAMBOO_FENCE = getBlockType("bamboo_fence");
+
+    BlockType.Typed<Gate> BAMBOO_FENCE_GATE = getBlockType("bamboo_fence_gate");
+
+    BlockType.Typed<HangingSign> BAMBOO_HANGING_SIGN = getBlockType("bamboo_hanging_sign");
+
+    BlockType.Typed<BlockData> BAMBOO_MOSAIC = getBlockType("bamboo_mosaic");
+
+    BlockType.Typed<Slab> BAMBOO_MOSAIC_SLAB = getBlockType("bamboo_mosaic_slab");
+
+    BlockType.Typed<Stairs> BAMBOO_MOSAIC_STAIRS = getBlockType("bamboo_mosaic_stairs");
+
+    BlockType.Typed<BlockData> BAMBOO_PLANKS = getBlockType("bamboo_planks");
+
+    BlockType.Typed<Powerable> BAMBOO_PRESSURE_PLATE = getBlockType("bamboo_pressure_plate");
+
+    BlockType.Typed<BlockData> BAMBOO_SAPLING = getBlockType("bamboo_sapling");
+
+    BlockType.Typed<Sign> BAMBOO_SIGN = getBlockType("bamboo_sign");
+
+    BlockType.Typed<Slab> BAMBOO_SLAB = getBlockType("bamboo_slab");
+
+    BlockType.Typed<Stairs> BAMBOO_STAIRS = getBlockType("bamboo_stairs");
+
+    BlockType.Typed<TrapDoor> BAMBOO_TRAPDOOR = getBlockType("bamboo_trapdoor");
+
+    BlockType.Typed<WallHangingSign> BAMBOO_WALL_HANGING_SIGN = getBlockType("bamboo_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> BAMBOO_WALL_SIGN = getBlockType("bamboo_wall_sign");
+
+    BlockType.Typed<Barrel> BARREL = getBlockType("barrel");
+
+    BlockType.Typed<Waterlogged> BARRIER = getBlockType("barrier");
+
+    BlockType.Typed<Orientable> BASALT = getBlockType("basalt");
+
+    BlockType.Typed<BlockData> BEACON = getBlockType("beacon");
+
+    BlockType.Typed<BlockData> BEDROCK = getBlockType("bedrock");
+
+    BlockType.Typed<Beehive> BEE_NEST = getBlockType("bee_nest");
+
+    BlockType.Typed<Beehive> BEEHIVE = getBlockType("beehive");
+
+    BlockType.Typed<Ageable> BEETROOTS = getBlockType("beetroots");
+
+    BlockType.Typed<Bell> BELL = getBlockType("bell");
+
     BlockType.Typed<BigDripleaf> BIG_DRIPLEAF = getBlockType("big_dripleaf");
-    /**
-     * BlockData: {@link Dripleaf}
-     */
+
     BlockType.Typed<Dripleaf> BIG_DRIPLEAF_STEM = getBlockType("big_dripleaf_stem");
-    /**
-     * BlockData: {@link SmallDripleaf}
-     */
-    BlockType.Typed<SmallDripleaf> SMALL_DRIPLEAF = getBlockType("small_dripleaf");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> HANGING_ROOTS = getBlockType("hanging_roots");
-    BlockType.Typed<BlockData> ROOTED_DIRT = getBlockType("rooted_dirt");
-    BlockType.Typed<BlockData> MUD = getBlockType("mud");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> DEEPSLATE = getBlockType("deepslate");
-    BlockType.Typed<BlockData> COBBLED_DEEPSLATE = getBlockType("cobbled_deepslate");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> COBBLED_DEEPSLATE_STAIRS = getBlockType("cobbled_deepslate_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> COBBLED_DEEPSLATE_SLAB = getBlockType("cobbled_deepslate_slab");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> COBBLED_DEEPSLATE_WALL = getBlockType("cobbled_deepslate_wall");
-    BlockType.Typed<BlockData> POLISHED_DEEPSLATE = getBlockType("polished_deepslate");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> POLISHED_DEEPSLATE_STAIRS = getBlockType("polished_deepslate_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> POLISHED_DEEPSLATE_SLAB = getBlockType("polished_deepslate_slab");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> POLISHED_DEEPSLATE_WALL = getBlockType("polished_deepslate_wall");
-    BlockType.Typed<BlockData> DEEPSLATE_TILES = getBlockType("deepslate_tiles");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> DEEPSLATE_TILE_STAIRS = getBlockType("deepslate_tile_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> DEEPSLATE_TILE_SLAB = getBlockType("deepslate_tile_slab");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> DEEPSLATE_TILE_WALL = getBlockType("deepslate_tile_wall");
-    BlockType.Typed<BlockData> DEEPSLATE_BRICKS = getBlockType("deepslate_bricks");
-    /**
-     * BlockData: {@link Stairs}
-     */
-    BlockType.Typed<Stairs> DEEPSLATE_BRICK_STAIRS = getBlockType("deepslate_brick_stairs");
-    /**
-     * BlockData: {@link Slab}
-     */
-    BlockType.Typed<Slab> DEEPSLATE_BRICK_SLAB = getBlockType("deepslate_brick_slab");
-    /**
-     * BlockData: {@link Wall}
-     */
-    BlockType.Typed<Wall> DEEPSLATE_BRICK_WALL = getBlockType("deepslate_brick_wall");
+
+    BlockType.Typed<Switch> BIRCH_BUTTON = getBlockType("birch_button");
+
+    BlockType.Typed<Door> BIRCH_DOOR = getBlockType("birch_door");
+
+    BlockType.Typed<Fence> BIRCH_FENCE = getBlockType("birch_fence");
+
+    BlockType.Typed<Gate> BIRCH_FENCE_GATE = getBlockType("birch_fence_gate");
+
+    BlockType.Typed<HangingSign> BIRCH_HANGING_SIGN = getBlockType("birch_hanging_sign");
+
+    BlockType.Typed<Leaves> BIRCH_LEAVES = getBlockType("birch_leaves");
+
+    BlockType.Typed<Orientable> BIRCH_LOG = getBlockType("birch_log");
+
+    BlockType.Typed<BlockData> BIRCH_PLANKS = getBlockType("birch_planks");
+
+    BlockType.Typed<Powerable> BIRCH_PRESSURE_PLATE = getBlockType("birch_pressure_plate");
+
+    BlockType.Typed<Sapling> BIRCH_SAPLING = getBlockType("birch_sapling");
+
+    BlockType.Typed<Sign> BIRCH_SIGN = getBlockType("birch_sign");
+
+    BlockType.Typed<Slab> BIRCH_SLAB = getBlockType("birch_slab");
+
+    BlockType.Typed<Stairs> BIRCH_STAIRS = getBlockType("birch_stairs");
+
+    BlockType.Typed<TrapDoor> BIRCH_TRAPDOOR = getBlockType("birch_trapdoor");
+
+    BlockType.Typed<WallHangingSign> BIRCH_WALL_HANGING_SIGN = getBlockType("birch_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> BIRCH_WALL_SIGN = getBlockType("birch_wall_sign");
+
+    BlockType.Typed<Orientable> BIRCH_WOOD = getBlockType("birch_wood");
+
+    BlockType.Typed<Rotatable> BLACK_BANNER = getBlockType("black_banner");
+
+    BlockType.Typed<Bed> BLACK_BED = getBlockType("black_bed");
+
+    BlockType.Typed<Candle> BLACK_CANDLE = getBlockType("black_candle");
+
+    BlockType.Typed<Lightable> BLACK_CANDLE_CAKE = getBlockType("black_candle_cake");
+
+    BlockType.Typed<BlockData> BLACK_CARPET = getBlockType("black_carpet");
+
+    BlockType.Typed<BlockData> BLACK_CONCRETE = getBlockType("black_concrete");
+
+    BlockType.Typed<BlockData> BLACK_CONCRETE_POWDER = getBlockType("black_concrete_powder");
+
+    BlockType.Typed<Directional> BLACK_GLAZED_TERRACOTTA = getBlockType("black_glazed_terracotta");
+
+    BlockType.Typed<Directional> BLACK_SHULKER_BOX = getBlockType("black_shulker_box");
+
+    BlockType.Typed<BlockData> BLACK_STAINED_GLASS = getBlockType("black_stained_glass");
+
+    BlockType.Typed<GlassPane> BLACK_STAINED_GLASS_PANE = getBlockType("black_stained_glass_pane");
+
+    BlockType.Typed<BlockData> BLACK_TERRACOTTA = getBlockType("black_terracotta");
+
+    BlockType.Typed<Directional> BLACK_WALL_BANNER = getBlockType("black_wall_banner");
+
+    BlockType.Typed<BlockData> BLACK_WOOL = getBlockType("black_wool");
+
+    BlockType.Typed<BlockData> BLACKSTONE = getBlockType("blackstone");
+
+    BlockType.Typed<Slab> BLACKSTONE_SLAB = getBlockType("blackstone_slab");
+
+    BlockType.Typed<Stairs> BLACKSTONE_STAIRS = getBlockType("blackstone_stairs");
+
+    BlockType.Typed<Wall> BLACKSTONE_WALL = getBlockType("blackstone_wall");
+
+    BlockType.Typed<Furnace> BLAST_FURNACE = getBlockType("blast_furnace");
+
+    BlockType.Typed<Rotatable> BLUE_BANNER = getBlockType("blue_banner");
+
+    BlockType.Typed<Bed> BLUE_BED = getBlockType("blue_bed");
+
+    BlockType.Typed<Candle> BLUE_CANDLE = getBlockType("blue_candle");
+
+    BlockType.Typed<Lightable> BLUE_CANDLE_CAKE = getBlockType("blue_candle_cake");
+
+    BlockType.Typed<BlockData> BLUE_CARPET = getBlockType("blue_carpet");
+
+    BlockType.Typed<BlockData> BLUE_CONCRETE = getBlockType("blue_concrete");
+
+    BlockType.Typed<BlockData> BLUE_CONCRETE_POWDER = getBlockType("blue_concrete_powder");
+
+    BlockType.Typed<Directional> BLUE_GLAZED_TERRACOTTA = getBlockType("blue_glazed_terracotta");
+
+    BlockType.Typed<BlockData> BLUE_ICE = getBlockType("blue_ice");
+
+    BlockType.Typed<BlockData> BLUE_ORCHID = getBlockType("blue_orchid");
+
+    BlockType.Typed<Directional> BLUE_SHULKER_BOX = getBlockType("blue_shulker_box");
+
+    BlockType.Typed<BlockData> BLUE_STAINED_GLASS = getBlockType("blue_stained_glass");
+
+    BlockType.Typed<GlassPane> BLUE_STAINED_GLASS_PANE = getBlockType("blue_stained_glass_pane");
+
+    BlockType.Typed<BlockData> BLUE_TERRACOTTA = getBlockType("blue_terracotta");
+
+    BlockType.Typed<Directional> BLUE_WALL_BANNER = getBlockType("blue_wall_banner");
+
+    BlockType.Typed<BlockData> BLUE_WOOL = getBlockType("blue_wool");
+
+    BlockType.Typed<Orientable> BONE_BLOCK = getBlockType("bone_block");
+
+    BlockType.Typed<BlockData> BOOKSHELF = getBlockType("bookshelf");
+
+    BlockType.Typed<Waterlogged> BRAIN_CORAL = getBlockType("brain_coral");
+
+    BlockType.Typed<BlockData> BRAIN_CORAL_BLOCK = getBlockType("brain_coral_block");
+
+    BlockType.Typed<Waterlogged> BRAIN_CORAL_FAN = getBlockType("brain_coral_fan");
+
+    BlockType.Typed<CoralWallFan> BRAIN_CORAL_WALL_FAN = getBlockType("brain_coral_wall_fan");
+
+    BlockType.Typed<BrewingStand> BREWING_STAND = getBlockType("brewing_stand");
+
+    BlockType.Typed<Slab> BRICK_SLAB = getBlockType("brick_slab");
+
+    BlockType.Typed<Stairs> BRICK_STAIRS = getBlockType("brick_stairs");
+
+    BlockType.Typed<Wall> BRICK_WALL = getBlockType("brick_wall");
+
+    BlockType.Typed<BlockData> BRICKS = getBlockType("bricks");
+
+    BlockType.Typed<Rotatable> BROWN_BANNER = getBlockType("brown_banner");
+
+    BlockType.Typed<Bed> BROWN_BED = getBlockType("brown_bed");
+
+    BlockType.Typed<Candle> BROWN_CANDLE = getBlockType("brown_candle");
+
+    BlockType.Typed<Lightable> BROWN_CANDLE_CAKE = getBlockType("brown_candle_cake");
+
+    BlockType.Typed<BlockData> BROWN_CARPET = getBlockType("brown_carpet");
+
+    BlockType.Typed<BlockData> BROWN_CONCRETE = getBlockType("brown_concrete");
+
+    BlockType.Typed<BlockData> BROWN_CONCRETE_POWDER = getBlockType("brown_concrete_powder");
+
+    BlockType.Typed<Directional> BROWN_GLAZED_TERRACOTTA = getBlockType("brown_glazed_terracotta");
+
+    BlockType.Typed<BlockData> BROWN_MUSHROOM = getBlockType("brown_mushroom");
+
+    BlockType.Typed<MultipleFacing> BROWN_MUSHROOM_BLOCK = getBlockType("brown_mushroom_block");
+
+    BlockType.Typed<Directional> BROWN_SHULKER_BOX = getBlockType("brown_shulker_box");
+
+    BlockType.Typed<BlockData> BROWN_STAINED_GLASS = getBlockType("brown_stained_glass");
+
+    BlockType.Typed<GlassPane> BROWN_STAINED_GLASS_PANE = getBlockType("brown_stained_glass_pane");
+
+    BlockType.Typed<BlockData> BROWN_TERRACOTTA = getBlockType("brown_terracotta");
+
+    BlockType.Typed<Directional> BROWN_WALL_BANNER = getBlockType("brown_wall_banner");
+
+    BlockType.Typed<BlockData> BROWN_WOOL = getBlockType("brown_wool");
+
+    BlockType.Typed<BubbleColumn> BUBBLE_COLUMN = getBlockType("bubble_column");
+
+    BlockType.Typed<Waterlogged> BUBBLE_CORAL = getBlockType("bubble_coral");
+
+    BlockType.Typed<BlockData> BUBBLE_CORAL_BLOCK = getBlockType("bubble_coral_block");
+
+    BlockType.Typed<Waterlogged> BUBBLE_CORAL_FAN = getBlockType("bubble_coral_fan");
+
+    BlockType.Typed<CoralWallFan> BUBBLE_CORAL_WALL_FAN = getBlockType("bubble_coral_wall_fan");
+
+    BlockType.Typed<BlockData> BUDDING_AMETHYST = getBlockType("budding_amethyst");
+
+    BlockType.Typed<Ageable> CACTUS = getBlockType("cactus");
+
+    BlockType.Typed<Cake> CAKE = getBlockType("cake");
+
+    BlockType.Typed<BlockData> CALCITE = getBlockType("calcite");
+
+    BlockType.Typed<CalibratedSculkSensor> CALIBRATED_SCULK_SENSOR = getBlockType("calibrated_sculk_sensor");
+
+    BlockType.Typed<Campfire> CAMPFIRE = getBlockType("campfire");
+
+    BlockType.Typed<Candle> CANDLE = getBlockType("candle");
+
+    BlockType.Typed<Lightable> CANDLE_CAKE = getBlockType("candle_cake");
+
+    BlockType.Typed<Ageable> CARROTS = getBlockType("carrots");
+
+    BlockType.Typed<BlockData> CARTOGRAPHY_TABLE = getBlockType("cartography_table");
+
+    BlockType.Typed<Directional> CARVED_PUMPKIN = getBlockType("carved_pumpkin");
+
+    BlockType.Typed<BlockData> CAULDRON = getBlockType("cauldron");
+
+    BlockType.Typed<BlockData> CAVE_AIR = getBlockType("cave_air");
+
+    BlockType.Typed<CaveVines> CAVE_VINES = getBlockType("cave_vines");
+
+    BlockType.Typed<CaveVinesPlant> CAVE_VINES_PLANT = getBlockType("cave_vines_plant");
+
+    BlockType.Typed<Chain> CHAIN = getBlockType("chain");
+
+    BlockType.Typed<CommandBlock> CHAIN_COMMAND_BLOCK = getBlockType("chain_command_block");
+
+    BlockType.Typed<Switch> CHERRY_BUTTON = getBlockType("cherry_button");
+
+    BlockType.Typed<Door> CHERRY_DOOR = getBlockType("cherry_door");
+
+    BlockType.Typed<Fence> CHERRY_FENCE = getBlockType("cherry_fence");
+
+    BlockType.Typed<Gate> CHERRY_FENCE_GATE = getBlockType("cherry_fence_gate");
+
+    BlockType.Typed<HangingSign> CHERRY_HANGING_SIGN = getBlockType("cherry_hanging_sign");
+
+    BlockType.Typed<Leaves> CHERRY_LEAVES = getBlockType("cherry_leaves");
+
+    BlockType.Typed<Orientable> CHERRY_LOG = getBlockType("cherry_log");
+
+    BlockType.Typed<BlockData> CHERRY_PLANKS = getBlockType("cherry_planks");
+
+    BlockType.Typed<Powerable> CHERRY_PRESSURE_PLATE = getBlockType("cherry_pressure_plate");
+
+    BlockType.Typed<Sapling> CHERRY_SAPLING = getBlockType("cherry_sapling");
+
+    BlockType.Typed<Sign> CHERRY_SIGN = getBlockType("cherry_sign");
+
+    BlockType.Typed<Slab> CHERRY_SLAB = getBlockType("cherry_slab");
+
+    BlockType.Typed<Stairs> CHERRY_STAIRS = getBlockType("cherry_stairs");
+
+    BlockType.Typed<TrapDoor> CHERRY_TRAPDOOR = getBlockType("cherry_trapdoor");
+
+    BlockType.Typed<WallHangingSign> CHERRY_WALL_HANGING_SIGN = getBlockType("cherry_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> CHERRY_WALL_SIGN = getBlockType("cherry_wall_sign");
+
+    BlockType.Typed<Orientable> CHERRY_WOOD = getBlockType("cherry_wood");
+
+    BlockType.Typed<Chest> CHEST = getBlockType("chest");
+
+    BlockType.Typed<Directional> CHIPPED_ANVIL = getBlockType("chipped_anvil");
+
+    BlockType.Typed<ChiseledBookshelf> CHISELED_BOOKSHELF = getBlockType("chiseled_bookshelf");
+
+    BlockType.Typed<BlockData> CHISELED_COPPER = getBlockType("chiseled_copper");
+
     BlockType.Typed<BlockData> CHISELED_DEEPSLATE = getBlockType("chiseled_deepslate");
-    BlockType.Typed<BlockData> CRACKED_DEEPSLATE_BRICKS = getBlockType("cracked_deepslate_bricks");
-    BlockType.Typed<BlockData> CRACKED_DEEPSLATE_TILES = getBlockType("cracked_deepslate_tiles");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> INFESTED_DEEPSLATE = getBlockType("infested_deepslate");
-    BlockType.Typed<BlockData> SMOOTH_BASALT = getBlockType("smooth_basalt");
-    BlockType.Typed<BlockData> RAW_IRON_BLOCK = getBlockType("raw_iron_block");
-    BlockType.Typed<BlockData> RAW_COPPER_BLOCK = getBlockType("raw_copper_block");
-    BlockType.Typed<BlockData> RAW_GOLD_BLOCK = getBlockType("raw_gold_block");
-    BlockType.Typed<BlockData> POTTED_AZALEA_BUSH = getBlockType("potted_azalea_bush");
-    BlockType.Typed<BlockData> POTTED_FLOWERING_AZALEA_BUSH = getBlockType("potted_flowering_azalea_bush");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> OCHRE_FROGLIGHT = getBlockType("ochre_froglight");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> VERDANT_FROGLIGHT = getBlockType("verdant_froglight");
-    /**
-     * BlockData: {@link Orientable}
-     */
-    BlockType.Typed<Orientable> PEARLESCENT_FROGLIGHT = getBlockType("pearlescent_froglight");
-    BlockType.Typed<BlockData> FROGSPAWN = getBlockType("frogspawn");
-    BlockType.Typed<BlockData> REINFORCED_DEEPSLATE = getBlockType("reinforced_deepslate");
-    /**
-     * BlockData: {@link DecoratedPot}
-     */
-    BlockType.Typed<DecoratedPot> DECORATED_POT = getBlockType("decorated_pot");
-    /**
-     * BlockData: {@link Crafter}
-     */
-    BlockType.Typed<Crafter> CRAFTER = getBlockType("crafter");
-    /**
-     * BlockData: {@link TrialSpawner}
-     */
-    BlockType.Typed<TrialSpawner> TRIAL_SPAWNER = getBlockType("trial_spawner");
-    /**
-     * BlockData: {@link Vault}
-     */
-    BlockType.Typed<Vault> VAULT = getBlockType("vault");
-    /**
-     * BlockData: {@link Waterlogged}
-     */
-    BlockType.Typed<Waterlogged> HEAVY_CORE = getBlockType("heavy_core");
-    BlockType.Typed<BlockData> OPEN_EYEBLOSSOM = getBlockType("open_eyeblossom");
+
+    BlockType.Typed<BlockData> CHISELED_NETHER_BRICKS = getBlockType("chiseled_nether_bricks");
+
+    BlockType.Typed<BlockData> CHISELED_POLISHED_BLACKSTONE = getBlockType("chiseled_polished_blackstone");
+
+    BlockType.Typed<BlockData> CHISELED_QUARTZ_BLOCK = getBlockType("chiseled_quartz_block");
+
+    BlockType.Typed<BlockData> CHISELED_RED_SANDSTONE = getBlockType("chiseled_red_sandstone");
+
+    BlockType.Typed<BlockData> CHISELED_RESIN_BRICKS = getBlockType("chiseled_resin_bricks");
+
+    BlockType.Typed<BlockData> CHISELED_SANDSTONE = getBlockType("chiseled_sandstone");
+
+    BlockType.Typed<BlockData> CHISELED_STONE_BRICKS = getBlockType("chiseled_stone_bricks");
+
+    BlockType.Typed<BlockData> CHISELED_TUFF = getBlockType("chiseled_tuff");
+
+    BlockType.Typed<BlockData> CHISELED_TUFF_BRICKS = getBlockType("chiseled_tuff_bricks");
+
+    BlockType.Typed<Ageable> CHORUS_FLOWER = getBlockType("chorus_flower");
+
+    BlockType.Typed<MultipleFacing> CHORUS_PLANT = getBlockType("chorus_plant");
+
+    BlockType.Typed<BlockData> CLAY = getBlockType("clay");
+
     BlockType.Typed<BlockData> CLOSED_EYEBLOSSOM = getBlockType("closed_eyeblossom");
-    BlockType.Typed<BlockData> POTTED_OPEN_EYEBLOSSOM = getBlockType("potted_open_eyeblossom");
+
+    BlockType.Typed<BlockData> COAL_BLOCK = getBlockType("coal_block");
+
+    BlockType.Typed<BlockData> COAL_ORE = getBlockType("coal_ore");
+
+    BlockType.Typed<BlockData> COARSE_DIRT = getBlockType("coarse_dirt");
+
+    BlockType.Typed<BlockData> COBBLED_DEEPSLATE = getBlockType("cobbled_deepslate");
+
+    BlockType.Typed<Slab> COBBLED_DEEPSLATE_SLAB = getBlockType("cobbled_deepslate_slab");
+
+    BlockType.Typed<Stairs> COBBLED_DEEPSLATE_STAIRS = getBlockType("cobbled_deepslate_stairs");
+
+    BlockType.Typed<Wall> COBBLED_DEEPSLATE_WALL = getBlockType("cobbled_deepslate_wall");
+
+    BlockType.Typed<BlockData> COBBLESTONE = getBlockType("cobblestone");
+
+    BlockType.Typed<Slab> COBBLESTONE_SLAB = getBlockType("cobblestone_slab");
+
+    BlockType.Typed<Stairs> COBBLESTONE_STAIRS = getBlockType("cobblestone_stairs");
+
+    BlockType.Typed<Wall> COBBLESTONE_WALL = getBlockType("cobblestone_wall");
+
+    BlockType.Typed<BlockData> COBWEB = getBlockType("cobweb");
+
+    BlockType.Typed<Cocoa> COCOA = getBlockType("cocoa");
+
+    BlockType.Typed<CommandBlock> COMMAND_BLOCK = getBlockType("command_block");
+
+    BlockType.Typed<Comparator> COMPARATOR = getBlockType("comparator");
+
+    BlockType.Typed<Levelled> COMPOSTER = getBlockType("composter");
+
+    BlockType.Typed<Waterlogged> CONDUIT = getBlockType("conduit");
+
+    BlockType.Typed<BlockData> COPPER_BLOCK = getBlockType("copper_block");
+
+    BlockType.Typed<CopperBulb> COPPER_BULB = getBlockType("copper_bulb");
+
+    BlockType.Typed<Door> COPPER_DOOR = getBlockType("copper_door");
+
+    BlockType.Typed<Waterlogged> COPPER_GRATE = getBlockType("copper_grate");
+
+    BlockType.Typed<BlockData> COPPER_ORE = getBlockType("copper_ore");
+
+    BlockType.Typed<TrapDoor> COPPER_TRAPDOOR = getBlockType("copper_trapdoor");
+
+    BlockType.Typed<BlockData> CORNFLOWER = getBlockType("cornflower");
+
+    BlockType.Typed<BlockData> CRACKED_DEEPSLATE_BRICKS = getBlockType("cracked_deepslate_bricks");
+
+    BlockType.Typed<BlockData> CRACKED_DEEPSLATE_TILES = getBlockType("cracked_deepslate_tiles");
+
+    BlockType.Typed<BlockData> CRACKED_NETHER_BRICKS = getBlockType("cracked_nether_bricks");
+
+    BlockType.Typed<BlockData> CRACKED_POLISHED_BLACKSTONE_BRICKS = getBlockType("cracked_polished_blackstone_bricks");
+
+    BlockType.Typed<BlockData> CRACKED_STONE_BRICKS = getBlockType("cracked_stone_bricks");
+
+    BlockType.Typed<Crafter> CRAFTER = getBlockType("crafter");
+
+    BlockType.Typed<BlockData> CRAFTING_TABLE = getBlockType("crafting_table");
+
+    BlockType.Typed<CreakingHeart> CREAKING_HEART = getBlockType("creaking_heart");
+
+    BlockType.Typed<Skull> CREEPER_HEAD = getBlockType("creeper_head");
+
+    BlockType.Typed<WallSkull> CREEPER_WALL_HEAD = getBlockType("creeper_wall_head");
+
+    BlockType.Typed<Switch> CRIMSON_BUTTON = getBlockType("crimson_button");
+
+    BlockType.Typed<Door> CRIMSON_DOOR = getBlockType("crimson_door");
+
+    BlockType.Typed<Fence> CRIMSON_FENCE = getBlockType("crimson_fence");
+
+    BlockType.Typed<Gate> CRIMSON_FENCE_GATE = getBlockType("crimson_fence_gate");
+
+    BlockType.Typed<BlockData> CRIMSON_FUNGUS = getBlockType("crimson_fungus");
+
+    BlockType.Typed<HangingSign> CRIMSON_HANGING_SIGN = getBlockType("crimson_hanging_sign");
+
+    BlockType.Typed<Orientable> CRIMSON_HYPHAE = getBlockType("crimson_hyphae");
+
+    BlockType.Typed<BlockData> CRIMSON_NYLIUM = getBlockType("crimson_nylium");
+
+    BlockType.Typed<BlockData> CRIMSON_PLANKS = getBlockType("crimson_planks");
+
+    BlockType.Typed<Powerable> CRIMSON_PRESSURE_PLATE = getBlockType("crimson_pressure_plate");
+
+    BlockType.Typed<BlockData> CRIMSON_ROOTS = getBlockType("crimson_roots");
+
+    BlockType.Typed<Sign> CRIMSON_SIGN = getBlockType("crimson_sign");
+
+    BlockType.Typed<Slab> CRIMSON_SLAB = getBlockType("crimson_slab");
+
+    BlockType.Typed<Stairs> CRIMSON_STAIRS = getBlockType("crimson_stairs");
+
+    BlockType.Typed<Orientable> CRIMSON_STEM = getBlockType("crimson_stem");
+
+    BlockType.Typed<TrapDoor> CRIMSON_TRAPDOOR = getBlockType("crimson_trapdoor");
+
+    BlockType.Typed<WallHangingSign> CRIMSON_WALL_HANGING_SIGN = getBlockType("crimson_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> CRIMSON_WALL_SIGN = getBlockType("crimson_wall_sign");
+
+    BlockType.Typed<BlockData> CRYING_OBSIDIAN = getBlockType("crying_obsidian");
+
+    BlockType.Typed<BlockData> CUT_COPPER = getBlockType("cut_copper");
+
+    BlockType.Typed<Slab> CUT_COPPER_SLAB = getBlockType("cut_copper_slab");
+
+    BlockType.Typed<Stairs> CUT_COPPER_STAIRS = getBlockType("cut_copper_stairs");
+
+    BlockType.Typed<BlockData> CUT_RED_SANDSTONE = getBlockType("cut_red_sandstone");
+
+    BlockType.Typed<Slab> CUT_RED_SANDSTONE_SLAB = getBlockType("cut_red_sandstone_slab");
+
+    BlockType.Typed<BlockData> CUT_SANDSTONE = getBlockType("cut_sandstone");
+
+    BlockType.Typed<Slab> CUT_SANDSTONE_SLAB = getBlockType("cut_sandstone_slab");
+
+    BlockType.Typed<Rotatable> CYAN_BANNER = getBlockType("cyan_banner");
+
+    BlockType.Typed<Bed> CYAN_BED = getBlockType("cyan_bed");
+
+    BlockType.Typed<Candle> CYAN_CANDLE = getBlockType("cyan_candle");
+
+    BlockType.Typed<Lightable> CYAN_CANDLE_CAKE = getBlockType("cyan_candle_cake");
+
+    BlockType.Typed<BlockData> CYAN_CARPET = getBlockType("cyan_carpet");
+
+    BlockType.Typed<BlockData> CYAN_CONCRETE = getBlockType("cyan_concrete");
+
+    BlockType.Typed<BlockData> CYAN_CONCRETE_POWDER = getBlockType("cyan_concrete_powder");
+
+    BlockType.Typed<Directional> CYAN_GLAZED_TERRACOTTA = getBlockType("cyan_glazed_terracotta");
+
+    BlockType.Typed<Directional> CYAN_SHULKER_BOX = getBlockType("cyan_shulker_box");
+
+    BlockType.Typed<BlockData> CYAN_STAINED_GLASS = getBlockType("cyan_stained_glass");
+
+    BlockType.Typed<GlassPane> CYAN_STAINED_GLASS_PANE = getBlockType("cyan_stained_glass_pane");
+
+    BlockType.Typed<BlockData> CYAN_TERRACOTTA = getBlockType("cyan_terracotta");
+
+    BlockType.Typed<Directional> CYAN_WALL_BANNER = getBlockType("cyan_wall_banner");
+
+    BlockType.Typed<BlockData> CYAN_WOOL = getBlockType("cyan_wool");
+
+    BlockType.Typed<Directional> DAMAGED_ANVIL = getBlockType("damaged_anvil");
+
+    BlockType.Typed<BlockData> DANDELION = getBlockType("dandelion");
+
+    BlockType.Typed<Switch> DARK_OAK_BUTTON = getBlockType("dark_oak_button");
+
+    BlockType.Typed<Door> DARK_OAK_DOOR = getBlockType("dark_oak_door");
+
+    BlockType.Typed<Fence> DARK_OAK_FENCE = getBlockType("dark_oak_fence");
+
+    BlockType.Typed<Gate> DARK_OAK_FENCE_GATE = getBlockType("dark_oak_fence_gate");
+
+    BlockType.Typed<HangingSign> DARK_OAK_HANGING_SIGN = getBlockType("dark_oak_hanging_sign");
+
+    BlockType.Typed<Leaves> DARK_OAK_LEAVES = getBlockType("dark_oak_leaves");
+
+    BlockType.Typed<Orientable> DARK_OAK_LOG = getBlockType("dark_oak_log");
+
+    BlockType.Typed<BlockData> DARK_OAK_PLANKS = getBlockType("dark_oak_planks");
+
+    BlockType.Typed<Powerable> DARK_OAK_PRESSURE_PLATE = getBlockType("dark_oak_pressure_plate");
+
+    BlockType.Typed<Sapling> DARK_OAK_SAPLING = getBlockType("dark_oak_sapling");
+
+    BlockType.Typed<Sign> DARK_OAK_SIGN = getBlockType("dark_oak_sign");
+
+    BlockType.Typed<Slab> DARK_OAK_SLAB = getBlockType("dark_oak_slab");
+
+    BlockType.Typed<Stairs> DARK_OAK_STAIRS = getBlockType("dark_oak_stairs");
+
+    BlockType.Typed<TrapDoor> DARK_OAK_TRAPDOOR = getBlockType("dark_oak_trapdoor");
+
+    BlockType.Typed<WallHangingSign> DARK_OAK_WALL_HANGING_SIGN = getBlockType("dark_oak_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> DARK_OAK_WALL_SIGN = getBlockType("dark_oak_wall_sign");
+
+    BlockType.Typed<Orientable> DARK_OAK_WOOD = getBlockType("dark_oak_wood");
+
+    BlockType.Typed<BlockData> DARK_PRISMARINE = getBlockType("dark_prismarine");
+
+    BlockType.Typed<Slab> DARK_PRISMARINE_SLAB = getBlockType("dark_prismarine_slab");
+
+    BlockType.Typed<Stairs> DARK_PRISMARINE_STAIRS = getBlockType("dark_prismarine_stairs");
+
+    BlockType.Typed<DaylightDetector> DAYLIGHT_DETECTOR = getBlockType("daylight_detector");
+
+    BlockType.Typed<Waterlogged> DEAD_BRAIN_CORAL = getBlockType("dead_brain_coral");
+
+    BlockType.Typed<BlockData> DEAD_BRAIN_CORAL_BLOCK = getBlockType("dead_brain_coral_block");
+
+    BlockType.Typed<Waterlogged> DEAD_BRAIN_CORAL_FAN = getBlockType("dead_brain_coral_fan");
+
+    BlockType.Typed<CoralWallFan> DEAD_BRAIN_CORAL_WALL_FAN = getBlockType("dead_brain_coral_wall_fan");
+
+    BlockType.Typed<Waterlogged> DEAD_BUBBLE_CORAL = getBlockType("dead_bubble_coral");
+
+    BlockType.Typed<BlockData> DEAD_BUBBLE_CORAL_BLOCK = getBlockType("dead_bubble_coral_block");
+
+    BlockType.Typed<Waterlogged> DEAD_BUBBLE_CORAL_FAN = getBlockType("dead_bubble_coral_fan");
+
+    BlockType.Typed<CoralWallFan> DEAD_BUBBLE_CORAL_WALL_FAN = getBlockType("dead_bubble_coral_wall_fan");
+
+    BlockType.Typed<BlockData> DEAD_BUSH = getBlockType("dead_bush");
+
+    BlockType.Typed<Waterlogged> DEAD_FIRE_CORAL = getBlockType("dead_fire_coral");
+
+    BlockType.Typed<BlockData> DEAD_FIRE_CORAL_BLOCK = getBlockType("dead_fire_coral_block");
+
+    BlockType.Typed<Waterlogged> DEAD_FIRE_CORAL_FAN = getBlockType("dead_fire_coral_fan");
+
+    BlockType.Typed<CoralWallFan> DEAD_FIRE_CORAL_WALL_FAN = getBlockType("dead_fire_coral_wall_fan");
+
+    BlockType.Typed<Waterlogged> DEAD_HORN_CORAL = getBlockType("dead_horn_coral");
+
+    BlockType.Typed<BlockData> DEAD_HORN_CORAL_BLOCK = getBlockType("dead_horn_coral_block");
+
+    BlockType.Typed<Waterlogged> DEAD_HORN_CORAL_FAN = getBlockType("dead_horn_coral_fan");
+
+    BlockType.Typed<CoralWallFan> DEAD_HORN_CORAL_WALL_FAN = getBlockType("dead_horn_coral_wall_fan");
+
+    BlockType.Typed<Waterlogged> DEAD_TUBE_CORAL = getBlockType("dead_tube_coral");
+
+    BlockType.Typed<BlockData> DEAD_TUBE_CORAL_BLOCK = getBlockType("dead_tube_coral_block");
+
+    BlockType.Typed<Waterlogged> DEAD_TUBE_CORAL_FAN = getBlockType("dead_tube_coral_fan");
+
+    BlockType.Typed<CoralWallFan> DEAD_TUBE_CORAL_WALL_FAN = getBlockType("dead_tube_coral_wall_fan");
+
+    BlockType.Typed<DecoratedPot> DECORATED_POT = getBlockType("decorated_pot");
+
+    BlockType.Typed<Orientable> DEEPSLATE = getBlockType("deepslate");
+
+    BlockType.Typed<Slab> DEEPSLATE_BRICK_SLAB = getBlockType("deepslate_brick_slab");
+
+    BlockType.Typed<Stairs> DEEPSLATE_BRICK_STAIRS = getBlockType("deepslate_brick_stairs");
+
+    BlockType.Typed<Wall> DEEPSLATE_BRICK_WALL = getBlockType("deepslate_brick_wall");
+
+    BlockType.Typed<BlockData> DEEPSLATE_BRICKS = getBlockType("deepslate_bricks");
+
+    BlockType.Typed<BlockData> DEEPSLATE_COAL_ORE = getBlockType("deepslate_coal_ore");
+
+    BlockType.Typed<BlockData> DEEPSLATE_COPPER_ORE = getBlockType("deepslate_copper_ore");
+
+    BlockType.Typed<BlockData> DEEPSLATE_DIAMOND_ORE = getBlockType("deepslate_diamond_ore");
+
+    BlockType.Typed<BlockData> DEEPSLATE_EMERALD_ORE = getBlockType("deepslate_emerald_ore");
+
+    BlockType.Typed<BlockData> DEEPSLATE_GOLD_ORE = getBlockType("deepslate_gold_ore");
+
+    BlockType.Typed<BlockData> DEEPSLATE_IRON_ORE = getBlockType("deepslate_iron_ore");
+
+    BlockType.Typed<BlockData> DEEPSLATE_LAPIS_ORE = getBlockType("deepslate_lapis_ore");
+
+    BlockType.Typed<Lightable> DEEPSLATE_REDSTONE_ORE = getBlockType("deepslate_redstone_ore");
+
+    BlockType.Typed<Slab> DEEPSLATE_TILE_SLAB = getBlockType("deepslate_tile_slab");
+
+    BlockType.Typed<Stairs> DEEPSLATE_TILE_STAIRS = getBlockType("deepslate_tile_stairs");
+
+    BlockType.Typed<Wall> DEEPSLATE_TILE_WALL = getBlockType("deepslate_tile_wall");
+
+    BlockType.Typed<BlockData> DEEPSLATE_TILES = getBlockType("deepslate_tiles");
+
+    BlockType.Typed<RedstoneRail> DETECTOR_RAIL = getBlockType("detector_rail");
+
+    BlockType.Typed<BlockData> DIAMOND_BLOCK = getBlockType("diamond_block");
+
+    BlockType.Typed<BlockData> DIAMOND_ORE = getBlockType("diamond_ore");
+
+    BlockType.Typed<BlockData> DIORITE = getBlockType("diorite");
+
+    BlockType.Typed<Slab> DIORITE_SLAB = getBlockType("diorite_slab");
+
+    BlockType.Typed<Stairs> DIORITE_STAIRS = getBlockType("diorite_stairs");
+
+    BlockType.Typed<Wall> DIORITE_WALL = getBlockType("diorite_wall");
+
+    BlockType.Typed<BlockData> DIRT = getBlockType("dirt");
+
+    BlockType.Typed<BlockData> DIRT_PATH = getBlockType("dirt_path");
+
+    BlockType.Typed<Dispenser> DISPENSER = getBlockType("dispenser");
+
+    BlockType.Typed<BlockData> DRAGON_EGG = getBlockType("dragon_egg");
+
+    BlockType.Typed<Skull> DRAGON_HEAD = getBlockType("dragon_head");
+
+    BlockType.Typed<WallSkull> DRAGON_WALL_HEAD = getBlockType("dragon_wall_head");
+
+    BlockType.Typed<BlockData> DRIED_KELP_BLOCK = getBlockType("dried_kelp_block");
+
+    BlockType.Typed<BlockData> DRIPSTONE_BLOCK = getBlockType("dripstone_block");
+
+    BlockType.Typed<Dispenser> DROPPER = getBlockType("dropper");
+
+    BlockType.Typed<BlockData> EMERALD_BLOCK = getBlockType("emerald_block");
+
+    BlockType.Typed<BlockData> EMERALD_ORE = getBlockType("emerald_ore");
+
+    BlockType.Typed<BlockData> ENCHANTING_TABLE = getBlockType("enchanting_table");
+
+    BlockType.Typed<BlockData> END_GATEWAY = getBlockType("end_gateway");
+
+    BlockType.Typed<BlockData> END_PORTAL = getBlockType("end_portal");
+
+    BlockType.Typed<EndPortalFrame> END_PORTAL_FRAME = getBlockType("end_portal_frame");
+
+    BlockType.Typed<Directional> END_ROD = getBlockType("end_rod");
+
+    BlockType.Typed<BlockData> END_STONE = getBlockType("end_stone");
+
+    BlockType.Typed<Slab> END_STONE_BRICK_SLAB = getBlockType("end_stone_brick_slab");
+
+    BlockType.Typed<Stairs> END_STONE_BRICK_STAIRS = getBlockType("end_stone_brick_stairs");
+
+    BlockType.Typed<Wall> END_STONE_BRICK_WALL = getBlockType("end_stone_brick_wall");
+
+    BlockType.Typed<BlockData> END_STONE_BRICKS = getBlockType("end_stone_bricks");
+
+    BlockType.Typed<EnderChest> ENDER_CHEST = getBlockType("ender_chest");
+
+    BlockType.Typed<BlockData> EXPOSED_CHISELED_COPPER = getBlockType("exposed_chiseled_copper");
+
+    BlockType.Typed<BlockData> EXPOSED_COPPER = getBlockType("exposed_copper");
+
+    BlockType.Typed<CopperBulb> EXPOSED_COPPER_BULB = getBlockType("exposed_copper_bulb");
+
+    BlockType.Typed<Door> EXPOSED_COPPER_DOOR = getBlockType("exposed_copper_door");
+
+    BlockType.Typed<Waterlogged> EXPOSED_COPPER_GRATE = getBlockType("exposed_copper_grate");
+
+    BlockType.Typed<TrapDoor> EXPOSED_COPPER_TRAPDOOR = getBlockType("exposed_copper_trapdoor");
+
+    BlockType.Typed<BlockData> EXPOSED_CUT_COPPER = getBlockType("exposed_cut_copper");
+
+    BlockType.Typed<Slab> EXPOSED_CUT_COPPER_SLAB = getBlockType("exposed_cut_copper_slab");
+
+    BlockType.Typed<Stairs> EXPOSED_CUT_COPPER_STAIRS = getBlockType("exposed_cut_copper_stairs");
+
+    BlockType.Typed<Farmland> FARMLAND = getBlockType("farmland");
+
+    BlockType.Typed<BlockData> FERN = getBlockType("fern");
+
+    BlockType.Typed<Fire> FIRE = getBlockType("fire");
+
+    BlockType.Typed<Waterlogged> FIRE_CORAL = getBlockType("fire_coral");
+
+    BlockType.Typed<BlockData> FIRE_CORAL_BLOCK = getBlockType("fire_coral_block");
+
+    BlockType.Typed<Waterlogged> FIRE_CORAL_FAN = getBlockType("fire_coral_fan");
+
+    BlockType.Typed<CoralWallFan> FIRE_CORAL_WALL_FAN = getBlockType("fire_coral_wall_fan");
+
+    BlockType.Typed<BlockData> FLETCHING_TABLE = getBlockType("fletching_table");
+
+    BlockType.Typed<BlockData> FLOWER_POT = getBlockType("flower_pot");
+
+    BlockType.Typed<BlockData> FLOWERING_AZALEA = getBlockType("flowering_azalea");
+
+    BlockType.Typed<Leaves> FLOWERING_AZALEA_LEAVES = getBlockType("flowering_azalea_leaves");
+
+    BlockType.Typed<BlockData> FROGSPAWN = getBlockType("frogspawn");
+
+    BlockType.Typed<Ageable> FROSTED_ICE = getBlockType("frosted_ice");
+
+    BlockType.Typed<Furnace> FURNACE = getBlockType("furnace");
+
+    BlockType.Typed<BlockData> GILDED_BLACKSTONE = getBlockType("gilded_blackstone");
+
+    BlockType.Typed<BlockData> GLASS = getBlockType("glass");
+
+    BlockType.Typed<Fence> GLASS_PANE = getBlockType("glass_pane");
+
+    BlockType.Typed<GlowLichen> GLOW_LICHEN = getBlockType("glow_lichen");
+
+    BlockType.Typed<BlockData> GLOWSTONE = getBlockType("glowstone");
+
+    BlockType.Typed<BlockData> GOLD_BLOCK = getBlockType("gold_block");
+
+    BlockType.Typed<BlockData> GOLD_ORE = getBlockType("gold_ore");
+
+    BlockType.Typed<BlockData> GRANITE = getBlockType("granite");
+
+    BlockType.Typed<Slab> GRANITE_SLAB = getBlockType("granite_slab");
+
+    BlockType.Typed<Stairs> GRANITE_STAIRS = getBlockType("granite_stairs");
+
+    BlockType.Typed<Wall> GRANITE_WALL = getBlockType("granite_wall");
+
+    BlockType.Typed<Snowable> GRASS_BLOCK = getBlockType("grass_block");
+
+    BlockType.Typed<BlockData> GRAVEL = getBlockType("gravel");
+
+    BlockType.Typed<Rotatable> GRAY_BANNER = getBlockType("gray_banner");
+
+    BlockType.Typed<Bed> GRAY_BED = getBlockType("gray_bed");
+
+    BlockType.Typed<Candle> GRAY_CANDLE = getBlockType("gray_candle");
+
+    BlockType.Typed<Lightable> GRAY_CANDLE_CAKE = getBlockType("gray_candle_cake");
+
+    BlockType.Typed<BlockData> GRAY_CARPET = getBlockType("gray_carpet");
+
+    BlockType.Typed<BlockData> GRAY_CONCRETE = getBlockType("gray_concrete");
+
+    BlockType.Typed<BlockData> GRAY_CONCRETE_POWDER = getBlockType("gray_concrete_powder");
+
+    BlockType.Typed<Directional> GRAY_GLAZED_TERRACOTTA = getBlockType("gray_glazed_terracotta");
+
+    BlockType.Typed<Directional> GRAY_SHULKER_BOX = getBlockType("gray_shulker_box");
+
+    BlockType.Typed<BlockData> GRAY_STAINED_GLASS = getBlockType("gray_stained_glass");
+
+    BlockType.Typed<GlassPane> GRAY_STAINED_GLASS_PANE = getBlockType("gray_stained_glass_pane");
+
+    BlockType.Typed<BlockData> GRAY_TERRACOTTA = getBlockType("gray_terracotta");
+
+    BlockType.Typed<Directional> GRAY_WALL_BANNER = getBlockType("gray_wall_banner");
+
+    BlockType.Typed<BlockData> GRAY_WOOL = getBlockType("gray_wool");
+
+    BlockType.Typed<Rotatable> GREEN_BANNER = getBlockType("green_banner");
+
+    BlockType.Typed<Bed> GREEN_BED = getBlockType("green_bed");
+
+    BlockType.Typed<Candle> GREEN_CANDLE = getBlockType("green_candle");
+
+    BlockType.Typed<Lightable> GREEN_CANDLE_CAKE = getBlockType("green_candle_cake");
+
+    BlockType.Typed<BlockData> GREEN_CARPET = getBlockType("green_carpet");
+
+    BlockType.Typed<BlockData> GREEN_CONCRETE = getBlockType("green_concrete");
+
+    BlockType.Typed<BlockData> GREEN_CONCRETE_POWDER = getBlockType("green_concrete_powder");
+
+    BlockType.Typed<Directional> GREEN_GLAZED_TERRACOTTA = getBlockType("green_glazed_terracotta");
+
+    BlockType.Typed<Directional> GREEN_SHULKER_BOX = getBlockType("green_shulker_box");
+
+    BlockType.Typed<BlockData> GREEN_STAINED_GLASS = getBlockType("green_stained_glass");
+
+    BlockType.Typed<GlassPane> GREEN_STAINED_GLASS_PANE = getBlockType("green_stained_glass_pane");
+
+    BlockType.Typed<BlockData> GREEN_TERRACOTTA = getBlockType("green_terracotta");
+
+    BlockType.Typed<Directional> GREEN_WALL_BANNER = getBlockType("green_wall_banner");
+
+    BlockType.Typed<BlockData> GREEN_WOOL = getBlockType("green_wool");
+
+    BlockType.Typed<Grindstone> GRINDSTONE = getBlockType("grindstone");
+
+    BlockType.Typed<Waterlogged> HANGING_ROOTS = getBlockType("hanging_roots");
+
+    BlockType.Typed<Orientable> HAY_BLOCK = getBlockType("hay_block");
+
+    BlockType.Typed<Waterlogged> HEAVY_CORE = getBlockType("heavy_core");
+
+    BlockType.Typed<AnaloguePowerable> HEAVY_WEIGHTED_PRESSURE_PLATE = getBlockType("heavy_weighted_pressure_plate");
+
+    BlockType.Typed<BlockData> HONEY_BLOCK = getBlockType("honey_block");
+
+    BlockType.Typed<BlockData> HONEYCOMB_BLOCK = getBlockType("honeycomb_block");
+
+    BlockType.Typed<Hopper> HOPPER = getBlockType("hopper");
+
+    BlockType.Typed<Waterlogged> HORN_CORAL = getBlockType("horn_coral");
+
+    BlockType.Typed<BlockData> HORN_CORAL_BLOCK = getBlockType("horn_coral_block");
+
+    BlockType.Typed<Waterlogged> HORN_CORAL_FAN = getBlockType("horn_coral_fan");
+
+    BlockType.Typed<CoralWallFan> HORN_CORAL_WALL_FAN = getBlockType("horn_coral_wall_fan");
+
+    BlockType.Typed<BlockData> ICE = getBlockType("ice");
+
+    BlockType.Typed<BlockData> INFESTED_CHISELED_STONE_BRICKS = getBlockType("infested_chiseled_stone_bricks");
+
+    BlockType.Typed<BlockData> INFESTED_COBBLESTONE = getBlockType("infested_cobblestone");
+
+    BlockType.Typed<BlockData> INFESTED_CRACKED_STONE_BRICKS = getBlockType("infested_cracked_stone_bricks");
+
+    BlockType.Typed<Orientable> INFESTED_DEEPSLATE = getBlockType("infested_deepslate");
+
+    BlockType.Typed<BlockData> INFESTED_MOSSY_STONE_BRICKS = getBlockType("infested_mossy_stone_bricks");
+
+    BlockType.Typed<BlockData> INFESTED_STONE = getBlockType("infested_stone");
+
+    BlockType.Typed<BlockData> INFESTED_STONE_BRICKS = getBlockType("infested_stone_bricks");
+
+    BlockType.Typed<Fence> IRON_BARS = getBlockType("iron_bars");
+
+    BlockType.Typed<BlockData> IRON_BLOCK = getBlockType("iron_block");
+
+    BlockType.Typed<Door> IRON_DOOR = getBlockType("iron_door");
+
+    BlockType.Typed<BlockData> IRON_ORE = getBlockType("iron_ore");
+
+    BlockType.Typed<TrapDoor> IRON_TRAPDOOR = getBlockType("iron_trapdoor");
+
+    BlockType.Typed<Directional> JACK_O_LANTERN = getBlockType("jack_o_lantern");
+
+    BlockType.Typed<Jigsaw> JIGSAW = getBlockType("jigsaw");
+
+    BlockType.Typed<Jukebox> JUKEBOX = getBlockType("jukebox");
+
+    BlockType.Typed<Switch> JUNGLE_BUTTON = getBlockType("jungle_button");
+
+    BlockType.Typed<Door> JUNGLE_DOOR = getBlockType("jungle_door");
+
+    BlockType.Typed<Fence> JUNGLE_FENCE = getBlockType("jungle_fence");
+
+    BlockType.Typed<Gate> JUNGLE_FENCE_GATE = getBlockType("jungle_fence_gate");
+
+    BlockType.Typed<HangingSign> JUNGLE_HANGING_SIGN = getBlockType("jungle_hanging_sign");
+
+    BlockType.Typed<Leaves> JUNGLE_LEAVES = getBlockType("jungle_leaves");
+
+    BlockType.Typed<Orientable> JUNGLE_LOG = getBlockType("jungle_log");
+
+    BlockType.Typed<BlockData> JUNGLE_PLANKS = getBlockType("jungle_planks");
+
+    BlockType.Typed<Powerable> JUNGLE_PRESSURE_PLATE = getBlockType("jungle_pressure_plate");
+
+    BlockType.Typed<Sapling> JUNGLE_SAPLING = getBlockType("jungle_sapling");
+
+    BlockType.Typed<Sign> JUNGLE_SIGN = getBlockType("jungle_sign");
+
+    BlockType.Typed<Slab> JUNGLE_SLAB = getBlockType("jungle_slab");
+
+    BlockType.Typed<Stairs> JUNGLE_STAIRS = getBlockType("jungle_stairs");
+
+    BlockType.Typed<TrapDoor> JUNGLE_TRAPDOOR = getBlockType("jungle_trapdoor");
+
+    BlockType.Typed<WallHangingSign> JUNGLE_WALL_HANGING_SIGN = getBlockType("jungle_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> JUNGLE_WALL_SIGN = getBlockType("jungle_wall_sign");
+
+    BlockType.Typed<Orientable> JUNGLE_WOOD = getBlockType("jungle_wood");
+
+    BlockType.Typed<Ageable> KELP = getBlockType("kelp");
+
+    BlockType.Typed<BlockData> KELP_PLANT = getBlockType("kelp_plant");
+
+    BlockType.Typed<Ladder> LADDER = getBlockType("ladder");
+
+    BlockType.Typed<Lantern> LANTERN = getBlockType("lantern");
+
+    BlockType.Typed<BlockData> LAPIS_BLOCK = getBlockType("lapis_block");
+
+    BlockType.Typed<BlockData> LAPIS_ORE = getBlockType("lapis_ore");
+
+    BlockType.Typed<AmethystCluster> LARGE_AMETHYST_BUD = getBlockType("large_amethyst_bud");
+
+    BlockType.Typed<Bisected> LARGE_FERN = getBlockType("large_fern");
+
+    BlockType.Typed<Levelled> LAVA = getBlockType("lava");
+
+    BlockType.Typed<BlockData> LAVA_CAULDRON = getBlockType("lava_cauldron");
+
+    BlockType.Typed<Lectern> LECTERN = getBlockType("lectern");
+
+    BlockType.Typed<Switch> LEVER = getBlockType("lever");
+
+    BlockType.Typed<Light> LIGHT = getBlockType("light");
+
+    BlockType.Typed<Rotatable> LIGHT_BLUE_BANNER = getBlockType("light_blue_banner");
+
+    BlockType.Typed<Bed> LIGHT_BLUE_BED = getBlockType("light_blue_bed");
+
+    BlockType.Typed<Candle> LIGHT_BLUE_CANDLE = getBlockType("light_blue_candle");
+
+    BlockType.Typed<Lightable> LIGHT_BLUE_CANDLE_CAKE = getBlockType("light_blue_candle_cake");
+
+    BlockType.Typed<BlockData> LIGHT_BLUE_CARPET = getBlockType("light_blue_carpet");
+
+    BlockType.Typed<BlockData> LIGHT_BLUE_CONCRETE = getBlockType("light_blue_concrete");
+
+    BlockType.Typed<BlockData> LIGHT_BLUE_CONCRETE_POWDER = getBlockType("light_blue_concrete_powder");
+
+    BlockType.Typed<Directional> LIGHT_BLUE_GLAZED_TERRACOTTA = getBlockType("light_blue_glazed_terracotta");
+
+    BlockType.Typed<Directional> LIGHT_BLUE_SHULKER_BOX = getBlockType("light_blue_shulker_box");
+
+    BlockType.Typed<BlockData> LIGHT_BLUE_STAINED_GLASS = getBlockType("light_blue_stained_glass");
+
+    BlockType.Typed<GlassPane> LIGHT_BLUE_STAINED_GLASS_PANE = getBlockType("light_blue_stained_glass_pane");
+
+    BlockType.Typed<BlockData> LIGHT_BLUE_TERRACOTTA = getBlockType("light_blue_terracotta");
+
+    BlockType.Typed<Directional> LIGHT_BLUE_WALL_BANNER = getBlockType("light_blue_wall_banner");
+
+    BlockType.Typed<BlockData> LIGHT_BLUE_WOOL = getBlockType("light_blue_wool");
+
+    BlockType.Typed<Rotatable> LIGHT_GRAY_BANNER = getBlockType("light_gray_banner");
+
+    BlockType.Typed<Bed> LIGHT_GRAY_BED = getBlockType("light_gray_bed");
+
+    BlockType.Typed<Candle> LIGHT_GRAY_CANDLE = getBlockType("light_gray_candle");
+
+    BlockType.Typed<Lightable> LIGHT_GRAY_CANDLE_CAKE = getBlockType("light_gray_candle_cake");
+
+    BlockType.Typed<BlockData> LIGHT_GRAY_CARPET = getBlockType("light_gray_carpet");
+
+    BlockType.Typed<BlockData> LIGHT_GRAY_CONCRETE = getBlockType("light_gray_concrete");
+
+    BlockType.Typed<BlockData> LIGHT_GRAY_CONCRETE_POWDER = getBlockType("light_gray_concrete_powder");
+
+    BlockType.Typed<Directional> LIGHT_GRAY_GLAZED_TERRACOTTA = getBlockType("light_gray_glazed_terracotta");
+
+    BlockType.Typed<Directional> LIGHT_GRAY_SHULKER_BOX = getBlockType("light_gray_shulker_box");
+
+    BlockType.Typed<BlockData> LIGHT_GRAY_STAINED_GLASS = getBlockType("light_gray_stained_glass");
+
+    BlockType.Typed<GlassPane> LIGHT_GRAY_STAINED_GLASS_PANE = getBlockType("light_gray_stained_glass_pane");
+
+    BlockType.Typed<BlockData> LIGHT_GRAY_TERRACOTTA = getBlockType("light_gray_terracotta");
+
+    BlockType.Typed<Directional> LIGHT_GRAY_WALL_BANNER = getBlockType("light_gray_wall_banner");
+
+    BlockType.Typed<BlockData> LIGHT_GRAY_WOOL = getBlockType("light_gray_wool");
+
+    BlockType.Typed<AnaloguePowerable> LIGHT_WEIGHTED_PRESSURE_PLATE = getBlockType("light_weighted_pressure_plate");
+
+    BlockType.Typed<LightningRod> LIGHTNING_ROD = getBlockType("lightning_rod");
+
+    BlockType.Typed<Bisected> LILAC = getBlockType("lilac");
+
+    BlockType.Typed<BlockData> LILY_OF_THE_VALLEY = getBlockType("lily_of_the_valley");
+
+    BlockType.Typed<BlockData> LILY_PAD = getBlockType("lily_pad");
+
+    BlockType.Typed<Rotatable> LIME_BANNER = getBlockType("lime_banner");
+
+    BlockType.Typed<Bed> LIME_BED = getBlockType("lime_bed");
+
+    BlockType.Typed<Candle> LIME_CANDLE = getBlockType("lime_candle");
+
+    BlockType.Typed<Lightable> LIME_CANDLE_CAKE = getBlockType("lime_candle_cake");
+
+    BlockType.Typed<BlockData> LIME_CARPET = getBlockType("lime_carpet");
+
+    BlockType.Typed<BlockData> LIME_CONCRETE = getBlockType("lime_concrete");
+
+    BlockType.Typed<BlockData> LIME_CONCRETE_POWDER = getBlockType("lime_concrete_powder");
+
+    BlockType.Typed<Directional> LIME_GLAZED_TERRACOTTA = getBlockType("lime_glazed_terracotta");
+
+    BlockType.Typed<Directional> LIME_SHULKER_BOX = getBlockType("lime_shulker_box");
+
+    BlockType.Typed<BlockData> LIME_STAINED_GLASS = getBlockType("lime_stained_glass");
+
+    BlockType.Typed<GlassPane> LIME_STAINED_GLASS_PANE = getBlockType("lime_stained_glass_pane");
+
+    BlockType.Typed<BlockData> LIME_TERRACOTTA = getBlockType("lime_terracotta");
+
+    BlockType.Typed<Directional> LIME_WALL_BANNER = getBlockType("lime_wall_banner");
+
+    BlockType.Typed<BlockData> LIME_WOOL = getBlockType("lime_wool");
+
+    BlockType.Typed<BlockData> LODESTONE = getBlockType("lodestone");
+
+    BlockType.Typed<Directional> LOOM = getBlockType("loom");
+
+    BlockType.Typed<Rotatable> MAGENTA_BANNER = getBlockType("magenta_banner");
+
+    BlockType.Typed<Bed> MAGENTA_BED = getBlockType("magenta_bed");
+
+    BlockType.Typed<Candle> MAGENTA_CANDLE = getBlockType("magenta_candle");
+
+    BlockType.Typed<Lightable> MAGENTA_CANDLE_CAKE = getBlockType("magenta_candle_cake");
+
+    BlockType.Typed<BlockData> MAGENTA_CARPET = getBlockType("magenta_carpet");
+
+    BlockType.Typed<BlockData> MAGENTA_CONCRETE = getBlockType("magenta_concrete");
+
+    BlockType.Typed<BlockData> MAGENTA_CONCRETE_POWDER = getBlockType("magenta_concrete_powder");
+
+    BlockType.Typed<Directional> MAGENTA_GLAZED_TERRACOTTA = getBlockType("magenta_glazed_terracotta");
+
+    BlockType.Typed<Directional> MAGENTA_SHULKER_BOX = getBlockType("magenta_shulker_box");
+
+    BlockType.Typed<BlockData> MAGENTA_STAINED_GLASS = getBlockType("magenta_stained_glass");
+
+    BlockType.Typed<GlassPane> MAGENTA_STAINED_GLASS_PANE = getBlockType("magenta_stained_glass_pane");
+
+    BlockType.Typed<BlockData> MAGENTA_TERRACOTTA = getBlockType("magenta_terracotta");
+
+    BlockType.Typed<Directional> MAGENTA_WALL_BANNER = getBlockType("magenta_wall_banner");
+
+    BlockType.Typed<BlockData> MAGENTA_WOOL = getBlockType("magenta_wool");
+
+    BlockType.Typed<BlockData> MAGMA_BLOCK = getBlockType("magma_block");
+
+    BlockType.Typed<Switch> MANGROVE_BUTTON = getBlockType("mangrove_button");
+
+    BlockType.Typed<Door> MANGROVE_DOOR = getBlockType("mangrove_door");
+
+    BlockType.Typed<Fence> MANGROVE_FENCE = getBlockType("mangrove_fence");
+
+    BlockType.Typed<Gate> MANGROVE_FENCE_GATE = getBlockType("mangrove_fence_gate");
+
+    BlockType.Typed<HangingSign> MANGROVE_HANGING_SIGN = getBlockType("mangrove_hanging_sign");
+
+    BlockType.Typed<Leaves> MANGROVE_LEAVES = getBlockType("mangrove_leaves");
+
+    BlockType.Typed<Orientable> MANGROVE_LOG = getBlockType("mangrove_log");
+
+    BlockType.Typed<BlockData> MANGROVE_PLANKS = getBlockType("mangrove_planks");
+
+    BlockType.Typed<Powerable> MANGROVE_PRESSURE_PLATE = getBlockType("mangrove_pressure_plate");
+
+    BlockType.Typed<MangrovePropagule> MANGROVE_PROPAGULE = getBlockType("mangrove_propagule");
+
+    BlockType.Typed<Waterlogged> MANGROVE_ROOTS = getBlockType("mangrove_roots");
+
+    BlockType.Typed<Sign> MANGROVE_SIGN = getBlockType("mangrove_sign");
+
+    BlockType.Typed<Slab> MANGROVE_SLAB = getBlockType("mangrove_slab");
+
+    BlockType.Typed<Stairs> MANGROVE_STAIRS = getBlockType("mangrove_stairs");
+
+    BlockType.Typed<TrapDoor> MANGROVE_TRAPDOOR = getBlockType("mangrove_trapdoor");
+
+    BlockType.Typed<WallHangingSign> MANGROVE_WALL_HANGING_SIGN = getBlockType("mangrove_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> MANGROVE_WALL_SIGN = getBlockType("mangrove_wall_sign");
+
+    BlockType.Typed<Orientable> MANGROVE_WOOD = getBlockType("mangrove_wood");
+
+    BlockType.Typed<AmethystCluster> MEDIUM_AMETHYST_BUD = getBlockType("medium_amethyst_bud");
+
+    BlockType.Typed<BlockData> MELON = getBlockType("melon");
+
+    BlockType.Typed<Ageable> MELON_STEM = getBlockType("melon_stem");
+
+    BlockType.Typed<BlockData> MOSS_BLOCK = getBlockType("moss_block");
+
+    BlockType.Typed<BlockData> MOSS_CARPET = getBlockType("moss_carpet");
+
+    BlockType.Typed<BlockData> MOSSY_COBBLESTONE = getBlockType("mossy_cobblestone");
+
+    BlockType.Typed<Slab> MOSSY_COBBLESTONE_SLAB = getBlockType("mossy_cobblestone_slab");
+
+    BlockType.Typed<Stairs> MOSSY_COBBLESTONE_STAIRS = getBlockType("mossy_cobblestone_stairs");
+
+    BlockType.Typed<Wall> MOSSY_COBBLESTONE_WALL = getBlockType("mossy_cobblestone_wall");
+
+    BlockType.Typed<Slab> MOSSY_STONE_BRICK_SLAB = getBlockType("mossy_stone_brick_slab");
+
+    BlockType.Typed<Stairs> MOSSY_STONE_BRICK_STAIRS = getBlockType("mossy_stone_brick_stairs");
+
+    BlockType.Typed<Wall> MOSSY_STONE_BRICK_WALL = getBlockType("mossy_stone_brick_wall");
+
+    BlockType.Typed<BlockData> MOSSY_STONE_BRICKS = getBlockType("mossy_stone_bricks");
+
+    BlockType.Typed<TechnicalPiston> MOVING_PISTON = getBlockType("moving_piston");
+
+    BlockType.Typed<BlockData> MUD = getBlockType("mud");
+
+    BlockType.Typed<Slab> MUD_BRICK_SLAB = getBlockType("mud_brick_slab");
+
+    BlockType.Typed<Stairs> MUD_BRICK_STAIRS = getBlockType("mud_brick_stairs");
+
+    BlockType.Typed<Wall> MUD_BRICK_WALL = getBlockType("mud_brick_wall");
+
+    BlockType.Typed<BlockData> MUD_BRICKS = getBlockType("mud_bricks");
+
+    BlockType.Typed<Orientable> MUDDY_MANGROVE_ROOTS = getBlockType("muddy_mangrove_roots");
+
+    BlockType.Typed<MultipleFacing> MUSHROOM_STEM = getBlockType("mushroom_stem");
+
+    BlockType.Typed<Snowable> MYCELIUM = getBlockType("mycelium");
+
+    BlockType.Typed<Fence> NETHER_BRICK_FENCE = getBlockType("nether_brick_fence");
+
+    BlockType.Typed<Slab> NETHER_BRICK_SLAB = getBlockType("nether_brick_slab");
+
+    BlockType.Typed<Stairs> NETHER_BRICK_STAIRS = getBlockType("nether_brick_stairs");
+
+    BlockType.Typed<Wall> NETHER_BRICK_WALL = getBlockType("nether_brick_wall");
+
+    BlockType.Typed<BlockData> NETHER_BRICKS = getBlockType("nether_bricks");
+
+    BlockType.Typed<BlockData> NETHER_GOLD_ORE = getBlockType("nether_gold_ore");
+
+    BlockType.Typed<Orientable> NETHER_PORTAL = getBlockType("nether_portal");
+
+    BlockType.Typed<BlockData> NETHER_QUARTZ_ORE = getBlockType("nether_quartz_ore");
+
+    BlockType.Typed<BlockData> NETHER_SPROUTS = getBlockType("nether_sprouts");
+
+    BlockType.Typed<Ageable> NETHER_WART = getBlockType("nether_wart");
+
+    BlockType.Typed<BlockData> NETHER_WART_BLOCK = getBlockType("nether_wart_block");
+
+    BlockType.Typed<BlockData> NETHERITE_BLOCK = getBlockType("netherite_block");
+
+    BlockType.Typed<BlockData> NETHERRACK = getBlockType("netherrack");
+
+    BlockType.Typed<NoteBlock> NOTE_BLOCK = getBlockType("note_block");
+
+    BlockType.Typed<Switch> OAK_BUTTON = getBlockType("oak_button");
+
+    BlockType.Typed<Door> OAK_DOOR = getBlockType("oak_door");
+
+    BlockType.Typed<Fence> OAK_FENCE = getBlockType("oak_fence");
+
+    BlockType.Typed<Gate> OAK_FENCE_GATE = getBlockType("oak_fence_gate");
+
+    BlockType.Typed<HangingSign> OAK_HANGING_SIGN = getBlockType("oak_hanging_sign");
+
+    BlockType.Typed<Leaves> OAK_LEAVES = getBlockType("oak_leaves");
+
+    BlockType.Typed<Orientable> OAK_LOG = getBlockType("oak_log");
+
+    BlockType.Typed<BlockData> OAK_PLANKS = getBlockType("oak_planks");
+
+    BlockType.Typed<Powerable> OAK_PRESSURE_PLATE = getBlockType("oak_pressure_plate");
+
+    BlockType.Typed<Sapling> OAK_SAPLING = getBlockType("oak_sapling");
+
+    BlockType.Typed<Sign> OAK_SIGN = getBlockType("oak_sign");
+
+    BlockType.Typed<Slab> OAK_SLAB = getBlockType("oak_slab");
+
+    BlockType.Typed<Stairs> OAK_STAIRS = getBlockType("oak_stairs");
+
+    BlockType.Typed<TrapDoor> OAK_TRAPDOOR = getBlockType("oak_trapdoor");
+
+    BlockType.Typed<WallHangingSign> OAK_WALL_HANGING_SIGN = getBlockType("oak_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> OAK_WALL_SIGN = getBlockType("oak_wall_sign");
+
+    BlockType.Typed<Orientable> OAK_WOOD = getBlockType("oak_wood");
+
+    BlockType.Typed<Observer> OBSERVER = getBlockType("observer");
+
+    BlockType.Typed<BlockData> OBSIDIAN = getBlockType("obsidian");
+
+    BlockType.Typed<Orientable> OCHRE_FROGLIGHT = getBlockType("ochre_froglight");
+
+    BlockType.Typed<BlockData> OPEN_EYEBLOSSOM = getBlockType("open_eyeblossom");
+
+    BlockType.Typed<Rotatable> ORANGE_BANNER = getBlockType("orange_banner");
+
+    BlockType.Typed<Bed> ORANGE_BED = getBlockType("orange_bed");
+
+    BlockType.Typed<Candle> ORANGE_CANDLE = getBlockType("orange_candle");
+
+    BlockType.Typed<Lightable> ORANGE_CANDLE_CAKE = getBlockType("orange_candle_cake");
+
+    BlockType.Typed<BlockData> ORANGE_CARPET = getBlockType("orange_carpet");
+
+    BlockType.Typed<BlockData> ORANGE_CONCRETE = getBlockType("orange_concrete");
+
+    BlockType.Typed<BlockData> ORANGE_CONCRETE_POWDER = getBlockType("orange_concrete_powder");
+
+    BlockType.Typed<Directional> ORANGE_GLAZED_TERRACOTTA = getBlockType("orange_glazed_terracotta");
+
+    BlockType.Typed<Directional> ORANGE_SHULKER_BOX = getBlockType("orange_shulker_box");
+
+    BlockType.Typed<BlockData> ORANGE_STAINED_GLASS = getBlockType("orange_stained_glass");
+
+    BlockType.Typed<GlassPane> ORANGE_STAINED_GLASS_PANE = getBlockType("orange_stained_glass_pane");
+
+    BlockType.Typed<BlockData> ORANGE_TERRACOTTA = getBlockType("orange_terracotta");
+
+    BlockType.Typed<BlockData> ORANGE_TULIP = getBlockType("orange_tulip");
+
+    BlockType.Typed<Directional> ORANGE_WALL_BANNER = getBlockType("orange_wall_banner");
+
+    BlockType.Typed<BlockData> ORANGE_WOOL = getBlockType("orange_wool");
+
+    BlockType.Typed<BlockData> OXEYE_DAISY = getBlockType("oxeye_daisy");
+
+    BlockType.Typed<BlockData> OXIDIZED_CHISELED_COPPER = getBlockType("oxidized_chiseled_copper");
+
+    BlockType.Typed<BlockData> OXIDIZED_COPPER = getBlockType("oxidized_copper");
+
+    BlockType.Typed<CopperBulb> OXIDIZED_COPPER_BULB = getBlockType("oxidized_copper_bulb");
+
+    BlockType.Typed<Door> OXIDIZED_COPPER_DOOR = getBlockType("oxidized_copper_door");
+
+    BlockType.Typed<Waterlogged> OXIDIZED_COPPER_GRATE = getBlockType("oxidized_copper_grate");
+
+    BlockType.Typed<TrapDoor> OXIDIZED_COPPER_TRAPDOOR = getBlockType("oxidized_copper_trapdoor");
+
+    BlockType.Typed<BlockData> OXIDIZED_CUT_COPPER = getBlockType("oxidized_cut_copper");
+
+    BlockType.Typed<Slab> OXIDIZED_CUT_COPPER_SLAB = getBlockType("oxidized_cut_copper_slab");
+
+    BlockType.Typed<Stairs> OXIDIZED_CUT_COPPER_STAIRS = getBlockType("oxidized_cut_copper_stairs");
+
+    BlockType.Typed<BlockData> PACKED_ICE = getBlockType("packed_ice");
+
+    BlockType.Typed<BlockData> PACKED_MUD = getBlockType("packed_mud");
+
+    BlockType.Typed<HangingMoss> PALE_HANGING_MOSS = getBlockType("pale_hanging_moss");
+
+    BlockType.Typed<BlockData> PALE_MOSS_BLOCK = getBlockType("pale_moss_block");
+
+    BlockType.Typed<MossyCarpet> PALE_MOSS_CARPET = getBlockType("pale_moss_carpet");
+
+    BlockType.Typed<Switch> PALE_OAK_BUTTON = getBlockType("pale_oak_button");
+
+    BlockType.Typed<Door> PALE_OAK_DOOR = getBlockType("pale_oak_door");
+
+    BlockType.Typed<Fence> PALE_OAK_FENCE = getBlockType("pale_oak_fence");
+
+    BlockType.Typed<Gate> PALE_OAK_FENCE_GATE = getBlockType("pale_oak_fence_gate");
+
+    BlockType.Typed<HangingSign> PALE_OAK_HANGING_SIGN = getBlockType("pale_oak_hanging_sign");
+
+    BlockType.Typed<Leaves> PALE_OAK_LEAVES = getBlockType("pale_oak_leaves");
+
+    BlockType.Typed<Orientable> PALE_OAK_LOG = getBlockType("pale_oak_log");
+
+    BlockType.Typed<BlockData> PALE_OAK_PLANKS = getBlockType("pale_oak_planks");
+
+    BlockType.Typed<Powerable> PALE_OAK_PRESSURE_PLATE = getBlockType("pale_oak_pressure_plate");
+
+    BlockType.Typed<Sapling> PALE_OAK_SAPLING = getBlockType("pale_oak_sapling");
+
+    BlockType.Typed<Sign> PALE_OAK_SIGN = getBlockType("pale_oak_sign");
+
+    BlockType.Typed<Slab> PALE_OAK_SLAB = getBlockType("pale_oak_slab");
+
+    BlockType.Typed<Stairs> PALE_OAK_STAIRS = getBlockType("pale_oak_stairs");
+
+    BlockType.Typed<TrapDoor> PALE_OAK_TRAPDOOR = getBlockType("pale_oak_trapdoor");
+
+    BlockType.Typed<WallHangingSign> PALE_OAK_WALL_HANGING_SIGN = getBlockType("pale_oak_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> PALE_OAK_WALL_SIGN = getBlockType("pale_oak_wall_sign");
+
+    BlockType.Typed<Orientable> PALE_OAK_WOOD = getBlockType("pale_oak_wood");
+
+    BlockType.Typed<Orientable> PEARLESCENT_FROGLIGHT = getBlockType("pearlescent_froglight");
+
+    BlockType.Typed<Bisected> PEONY = getBlockType("peony");
+
+    BlockType.Typed<Slab> PETRIFIED_OAK_SLAB = getBlockType("petrified_oak_slab");
+
+    BlockType.Typed<Skull> PIGLIN_HEAD = getBlockType("piglin_head");
+
+    BlockType.Typed<WallSkull> PIGLIN_WALL_HEAD = getBlockType("piglin_wall_head");
+
+    BlockType.Typed<Rotatable> PINK_BANNER = getBlockType("pink_banner");
+
+    BlockType.Typed<Bed> PINK_BED = getBlockType("pink_bed");
+
+    BlockType.Typed<Candle> PINK_CANDLE = getBlockType("pink_candle");
+
+    BlockType.Typed<Lightable> PINK_CANDLE_CAKE = getBlockType("pink_candle_cake");
+
+    BlockType.Typed<BlockData> PINK_CARPET = getBlockType("pink_carpet");
+
+    BlockType.Typed<BlockData> PINK_CONCRETE = getBlockType("pink_concrete");
+
+    BlockType.Typed<BlockData> PINK_CONCRETE_POWDER = getBlockType("pink_concrete_powder");
+
+    BlockType.Typed<Directional> PINK_GLAZED_TERRACOTTA = getBlockType("pink_glazed_terracotta");
+
+    BlockType.Typed<PinkPetals> PINK_PETALS = getBlockType("pink_petals");
+
+    BlockType.Typed<Directional> PINK_SHULKER_BOX = getBlockType("pink_shulker_box");
+
+    BlockType.Typed<BlockData> PINK_STAINED_GLASS = getBlockType("pink_stained_glass");
+
+    BlockType.Typed<GlassPane> PINK_STAINED_GLASS_PANE = getBlockType("pink_stained_glass_pane");
+
+    BlockType.Typed<BlockData> PINK_TERRACOTTA = getBlockType("pink_terracotta");
+
+    BlockType.Typed<BlockData> PINK_TULIP = getBlockType("pink_tulip");
+
+    BlockType.Typed<Directional> PINK_WALL_BANNER = getBlockType("pink_wall_banner");
+
+    BlockType.Typed<BlockData> PINK_WOOL = getBlockType("pink_wool");
+
+    BlockType.Typed<Piston> PISTON = getBlockType("piston");
+
+    BlockType.Typed<PistonHead> PISTON_HEAD = getBlockType("piston_head");
+
+    BlockType.Typed<PitcherCrop> PITCHER_CROP = getBlockType("pitcher_crop");
+
+    BlockType.Typed<Bisected> PITCHER_PLANT = getBlockType("pitcher_plant");
+
+    BlockType.Typed<Skull> PLAYER_HEAD = getBlockType("player_head");
+
+    BlockType.Typed<WallSkull> PLAYER_WALL_HEAD = getBlockType("player_wall_head");
+
+    BlockType.Typed<Snowable> PODZOL = getBlockType("podzol");
+
+    BlockType.Typed<PointedDripstone> POINTED_DRIPSTONE = getBlockType("pointed_dripstone");
+
+    BlockType.Typed<BlockData> POLISHED_ANDESITE = getBlockType("polished_andesite");
+
+    BlockType.Typed<Slab> POLISHED_ANDESITE_SLAB = getBlockType("polished_andesite_slab");
+
+    BlockType.Typed<Stairs> POLISHED_ANDESITE_STAIRS = getBlockType("polished_andesite_stairs");
+
+    BlockType.Typed<Orientable> POLISHED_BASALT = getBlockType("polished_basalt");
+
+    BlockType.Typed<BlockData> POLISHED_BLACKSTONE = getBlockType("polished_blackstone");
+
+    BlockType.Typed<Slab> POLISHED_BLACKSTONE_BRICK_SLAB = getBlockType("polished_blackstone_brick_slab");
+
+    BlockType.Typed<Stairs> POLISHED_BLACKSTONE_BRICK_STAIRS = getBlockType("polished_blackstone_brick_stairs");
+
+    BlockType.Typed<Wall> POLISHED_BLACKSTONE_BRICK_WALL = getBlockType("polished_blackstone_brick_wall");
+
+    BlockType.Typed<BlockData> POLISHED_BLACKSTONE_BRICKS = getBlockType("polished_blackstone_bricks");
+
+    BlockType.Typed<Switch> POLISHED_BLACKSTONE_BUTTON = getBlockType("polished_blackstone_button");
+
+    BlockType.Typed<Powerable> POLISHED_BLACKSTONE_PRESSURE_PLATE = getBlockType("polished_blackstone_pressure_plate");
+
+    BlockType.Typed<Slab> POLISHED_BLACKSTONE_SLAB = getBlockType("polished_blackstone_slab");
+
+    BlockType.Typed<Stairs> POLISHED_BLACKSTONE_STAIRS = getBlockType("polished_blackstone_stairs");
+
+    BlockType.Typed<Wall> POLISHED_BLACKSTONE_WALL = getBlockType("polished_blackstone_wall");
+
+    BlockType.Typed<BlockData> POLISHED_DEEPSLATE = getBlockType("polished_deepslate");
+
+    BlockType.Typed<Slab> POLISHED_DEEPSLATE_SLAB = getBlockType("polished_deepslate_slab");
+
+    BlockType.Typed<Stairs> POLISHED_DEEPSLATE_STAIRS = getBlockType("polished_deepslate_stairs");
+
+    BlockType.Typed<Wall> POLISHED_DEEPSLATE_WALL = getBlockType("polished_deepslate_wall");
+
+    BlockType.Typed<BlockData> POLISHED_DIORITE = getBlockType("polished_diorite");
+
+    BlockType.Typed<Slab> POLISHED_DIORITE_SLAB = getBlockType("polished_diorite_slab");
+
+    BlockType.Typed<Stairs> POLISHED_DIORITE_STAIRS = getBlockType("polished_diorite_stairs");
+
+    BlockType.Typed<BlockData> POLISHED_GRANITE = getBlockType("polished_granite");
+
+    BlockType.Typed<Slab> POLISHED_GRANITE_SLAB = getBlockType("polished_granite_slab");
+
+    BlockType.Typed<Stairs> POLISHED_GRANITE_STAIRS = getBlockType("polished_granite_stairs");
+
+    BlockType.Typed<BlockData> POLISHED_TUFF = getBlockType("polished_tuff");
+
+    BlockType.Typed<Slab> POLISHED_TUFF_SLAB = getBlockType("polished_tuff_slab");
+
+    BlockType.Typed<Stairs> POLISHED_TUFF_STAIRS = getBlockType("polished_tuff_stairs");
+
+    BlockType.Typed<Wall> POLISHED_TUFF_WALL = getBlockType("polished_tuff_wall");
+
+    BlockType.Typed<BlockData> POPPY = getBlockType("poppy");
+
+    BlockType.Typed<Ageable> POTATOES = getBlockType("potatoes");
+
+    BlockType.Typed<BlockData> POTTED_ACACIA_SAPLING = getBlockType("potted_acacia_sapling");
+
+    BlockType.Typed<BlockData> POTTED_ALLIUM = getBlockType("potted_allium");
+
+    BlockType.Typed<BlockData> POTTED_AZALEA_BUSH = getBlockType("potted_azalea_bush");
+
+    BlockType.Typed<BlockData> POTTED_AZURE_BLUET = getBlockType("potted_azure_bluet");
+
+    BlockType.Typed<BlockData> POTTED_BAMBOO = getBlockType("potted_bamboo");
+
+    BlockType.Typed<BlockData> POTTED_BIRCH_SAPLING = getBlockType("potted_birch_sapling");
+
+    BlockType.Typed<BlockData> POTTED_BLUE_ORCHID = getBlockType("potted_blue_orchid");
+
+    BlockType.Typed<BlockData> POTTED_BROWN_MUSHROOM = getBlockType("potted_brown_mushroom");
+
+    BlockType.Typed<BlockData> POTTED_CACTUS = getBlockType("potted_cactus");
+
+    BlockType.Typed<BlockData> POTTED_CHERRY_SAPLING = getBlockType("potted_cherry_sapling");
+
     BlockType.Typed<BlockData> POTTED_CLOSED_EYEBLOSSOM = getBlockType("potted_closed_eyeblossom");
+
+    BlockType.Typed<BlockData> POTTED_CORNFLOWER = getBlockType("potted_cornflower");
+
+    BlockType.Typed<BlockData> POTTED_CRIMSON_FUNGUS = getBlockType("potted_crimson_fungus");
+
+    BlockType.Typed<BlockData> POTTED_CRIMSON_ROOTS = getBlockType("potted_crimson_roots");
+
+    BlockType.Typed<BlockData> POTTED_DANDELION = getBlockType("potted_dandelion");
+
+    BlockType.Typed<BlockData> POTTED_DARK_OAK_SAPLING = getBlockType("potted_dark_oak_sapling");
+
+    BlockType.Typed<BlockData> POTTED_DEAD_BUSH = getBlockType("potted_dead_bush");
+
+    BlockType.Typed<BlockData> POTTED_FERN = getBlockType("potted_fern");
+
+    BlockType.Typed<BlockData> POTTED_FLOWERING_AZALEA_BUSH = getBlockType("potted_flowering_azalea_bush");
+
+    BlockType.Typed<BlockData> POTTED_JUNGLE_SAPLING = getBlockType("potted_jungle_sapling");
+
+    BlockType.Typed<BlockData> POTTED_LILY_OF_THE_VALLEY = getBlockType("potted_lily_of_the_valley");
+
+    BlockType.Typed<BlockData> POTTED_MANGROVE_PROPAGULE = getBlockType("potted_mangrove_propagule");
+
+    BlockType.Typed<BlockData> POTTED_OAK_SAPLING = getBlockType("potted_oak_sapling");
+
+    BlockType.Typed<BlockData> POTTED_OPEN_EYEBLOSSOM = getBlockType("potted_open_eyeblossom");
+
+    BlockType.Typed<BlockData> POTTED_ORANGE_TULIP = getBlockType("potted_orange_tulip");
+
+    BlockType.Typed<BlockData> POTTED_OXEYE_DAISY = getBlockType("potted_oxeye_daisy");
+
+    BlockType.Typed<BlockData> POTTED_PALE_OAK_SAPLING = getBlockType("potted_pale_oak_sapling");
+
+    BlockType.Typed<BlockData> POTTED_PINK_TULIP = getBlockType("potted_pink_tulip");
+
+    BlockType.Typed<BlockData> POTTED_POPPY = getBlockType("potted_poppy");
+
+    BlockType.Typed<BlockData> POTTED_RED_MUSHROOM = getBlockType("potted_red_mushroom");
+
+    BlockType.Typed<BlockData> POTTED_RED_TULIP = getBlockType("potted_red_tulip");
+
+    BlockType.Typed<BlockData> POTTED_SPRUCE_SAPLING = getBlockType("potted_spruce_sapling");
+
+    BlockType.Typed<BlockData> POTTED_TORCHFLOWER = getBlockType("potted_torchflower");
+
+    BlockType.Typed<BlockData> POTTED_WARPED_FUNGUS = getBlockType("potted_warped_fungus");
+
+    BlockType.Typed<BlockData> POTTED_WARPED_ROOTS = getBlockType("potted_warped_roots");
+
+    BlockType.Typed<BlockData> POTTED_WHITE_TULIP = getBlockType("potted_white_tulip");
+
+    BlockType.Typed<BlockData> POTTED_WITHER_ROSE = getBlockType("potted_wither_rose");
+
+    BlockType.Typed<BlockData> POWDER_SNOW = getBlockType("powder_snow");
+
+    BlockType.Typed<Levelled> POWDER_SNOW_CAULDRON = getBlockType("powder_snow_cauldron");
+
+    BlockType.Typed<RedstoneRail> POWERED_RAIL = getBlockType("powered_rail");
+
+    BlockType.Typed<BlockData> PRISMARINE = getBlockType("prismarine");
+
+    BlockType.Typed<Slab> PRISMARINE_BRICK_SLAB = getBlockType("prismarine_brick_slab");
+
+    BlockType.Typed<Stairs> PRISMARINE_BRICK_STAIRS = getBlockType("prismarine_brick_stairs");
+
+    BlockType.Typed<BlockData> PRISMARINE_BRICKS = getBlockType("prismarine_bricks");
+
+    BlockType.Typed<Slab> PRISMARINE_SLAB = getBlockType("prismarine_slab");
+
+    BlockType.Typed<Stairs> PRISMARINE_STAIRS = getBlockType("prismarine_stairs");
+
+    BlockType.Typed<Wall> PRISMARINE_WALL = getBlockType("prismarine_wall");
+
+    BlockType.Typed<BlockData> PUMPKIN = getBlockType("pumpkin");
+
+    BlockType.Typed<Ageable> PUMPKIN_STEM = getBlockType("pumpkin_stem");
+
+    BlockType.Typed<Rotatable> PURPLE_BANNER = getBlockType("purple_banner");
+
+    BlockType.Typed<Bed> PURPLE_BED = getBlockType("purple_bed");
+
+    BlockType.Typed<Candle> PURPLE_CANDLE = getBlockType("purple_candle");
+
+    BlockType.Typed<Lightable> PURPLE_CANDLE_CAKE = getBlockType("purple_candle_cake");
+
+    BlockType.Typed<BlockData> PURPLE_CARPET = getBlockType("purple_carpet");
+
+    BlockType.Typed<BlockData> PURPLE_CONCRETE = getBlockType("purple_concrete");
+
+    BlockType.Typed<BlockData> PURPLE_CONCRETE_POWDER = getBlockType("purple_concrete_powder");
+
+    BlockType.Typed<Directional> PURPLE_GLAZED_TERRACOTTA = getBlockType("purple_glazed_terracotta");
+
+    BlockType.Typed<Directional> PURPLE_SHULKER_BOX = getBlockType("purple_shulker_box");
+
+    BlockType.Typed<BlockData> PURPLE_STAINED_GLASS = getBlockType("purple_stained_glass");
+
+    BlockType.Typed<GlassPane> PURPLE_STAINED_GLASS_PANE = getBlockType("purple_stained_glass_pane");
+
+    BlockType.Typed<BlockData> PURPLE_TERRACOTTA = getBlockType("purple_terracotta");
+
+    BlockType.Typed<Directional> PURPLE_WALL_BANNER = getBlockType("purple_wall_banner");
+
+    BlockType.Typed<BlockData> PURPLE_WOOL = getBlockType("purple_wool");
+
+    BlockType.Typed<BlockData> PURPUR_BLOCK = getBlockType("purpur_block");
+
+    BlockType.Typed<Orientable> PURPUR_PILLAR = getBlockType("purpur_pillar");
+
+    BlockType.Typed<Slab> PURPUR_SLAB = getBlockType("purpur_slab");
+
+    BlockType.Typed<Stairs> PURPUR_STAIRS = getBlockType("purpur_stairs");
+
+    BlockType.Typed<BlockData> QUARTZ_BLOCK = getBlockType("quartz_block");
+
+    BlockType.Typed<BlockData> QUARTZ_BRICKS = getBlockType("quartz_bricks");
+
+    BlockType.Typed<Orientable> QUARTZ_PILLAR = getBlockType("quartz_pillar");
+
+    BlockType.Typed<Slab> QUARTZ_SLAB = getBlockType("quartz_slab");
+
+    BlockType.Typed<Stairs> QUARTZ_STAIRS = getBlockType("quartz_stairs");
+
+    BlockType.Typed<Rail> RAIL = getBlockType("rail");
+
+    BlockType.Typed<BlockData> RAW_COPPER_BLOCK = getBlockType("raw_copper_block");
+
+    BlockType.Typed<BlockData> RAW_GOLD_BLOCK = getBlockType("raw_gold_block");
+
+    BlockType.Typed<BlockData> RAW_IRON_BLOCK = getBlockType("raw_iron_block");
+
+    BlockType.Typed<Rotatable> RED_BANNER = getBlockType("red_banner");
+
+    BlockType.Typed<Bed> RED_BED = getBlockType("red_bed");
+
+    BlockType.Typed<Candle> RED_CANDLE = getBlockType("red_candle");
+
+    BlockType.Typed<Lightable> RED_CANDLE_CAKE = getBlockType("red_candle_cake");
+
+    BlockType.Typed<BlockData> RED_CARPET = getBlockType("red_carpet");
+
+    BlockType.Typed<BlockData> RED_CONCRETE = getBlockType("red_concrete");
+
+    BlockType.Typed<BlockData> RED_CONCRETE_POWDER = getBlockType("red_concrete_powder");
+
+    BlockType.Typed<Directional> RED_GLAZED_TERRACOTTA = getBlockType("red_glazed_terracotta");
+
+    BlockType.Typed<BlockData> RED_MUSHROOM = getBlockType("red_mushroom");
+
+    BlockType.Typed<MultipleFacing> RED_MUSHROOM_BLOCK = getBlockType("red_mushroom_block");
+
+    BlockType.Typed<Slab> RED_NETHER_BRICK_SLAB = getBlockType("red_nether_brick_slab");
+
+    BlockType.Typed<Stairs> RED_NETHER_BRICK_STAIRS = getBlockType("red_nether_brick_stairs");
+
+    BlockType.Typed<Wall> RED_NETHER_BRICK_WALL = getBlockType("red_nether_brick_wall");
+
+    BlockType.Typed<BlockData> RED_NETHER_BRICKS = getBlockType("red_nether_bricks");
+
+    BlockType.Typed<BlockData> RED_SAND = getBlockType("red_sand");
+
+    BlockType.Typed<BlockData> RED_SANDSTONE = getBlockType("red_sandstone");
+
+    BlockType.Typed<Slab> RED_SANDSTONE_SLAB = getBlockType("red_sandstone_slab");
+
+    BlockType.Typed<Stairs> RED_SANDSTONE_STAIRS = getBlockType("red_sandstone_stairs");
+
+    BlockType.Typed<Wall> RED_SANDSTONE_WALL = getBlockType("red_sandstone_wall");
+
+    BlockType.Typed<Directional> RED_SHULKER_BOX = getBlockType("red_shulker_box");
+
+    BlockType.Typed<BlockData> RED_STAINED_GLASS = getBlockType("red_stained_glass");
+
+    BlockType.Typed<GlassPane> RED_STAINED_GLASS_PANE = getBlockType("red_stained_glass_pane");
+
+    BlockType.Typed<BlockData> RED_TERRACOTTA = getBlockType("red_terracotta");
+
+    BlockType.Typed<BlockData> RED_TULIP = getBlockType("red_tulip");
+
+    BlockType.Typed<Directional> RED_WALL_BANNER = getBlockType("red_wall_banner");
+
+    BlockType.Typed<BlockData> RED_WOOL = getBlockType("red_wool");
+
+    BlockType.Typed<BlockData> REDSTONE_BLOCK = getBlockType("redstone_block");
+
+    BlockType.Typed<Lightable> REDSTONE_LAMP = getBlockType("redstone_lamp");
+
+    BlockType.Typed<Lightable> REDSTONE_ORE = getBlockType("redstone_ore");
+
+    BlockType.Typed<Lightable> REDSTONE_TORCH = getBlockType("redstone_torch");
+
+    BlockType.Typed<RedstoneWallTorch> REDSTONE_WALL_TORCH = getBlockType("redstone_wall_torch");
+
+    BlockType.Typed<RedstoneWire> REDSTONE_WIRE = getBlockType("redstone_wire");
+
+    BlockType.Typed<BlockData> REINFORCED_DEEPSLATE = getBlockType("reinforced_deepslate");
+
+    BlockType.Typed<Repeater> REPEATER = getBlockType("repeater");
+
+    BlockType.Typed<CommandBlock> REPEATING_COMMAND_BLOCK = getBlockType("repeating_command_block");
+
+    BlockType.Typed<BlockData> RESIN_BLOCK = getBlockType("resin_block");
+
+    BlockType.Typed<Slab> RESIN_BRICK_SLAB = getBlockType("resin_brick_slab");
+
+    BlockType.Typed<Stairs> RESIN_BRICK_STAIRS = getBlockType("resin_brick_stairs");
+
+    BlockType.Typed<Wall> RESIN_BRICK_WALL = getBlockType("resin_brick_wall");
+
+    BlockType.Typed<BlockData> RESIN_BRICKS = getBlockType("resin_bricks");
+
+    BlockType.Typed<ResinClump> RESIN_CLUMP = getBlockType("resin_clump");
+
+    BlockType.Typed<RespawnAnchor> RESPAWN_ANCHOR = getBlockType("respawn_anchor");
+
+    BlockType.Typed<BlockData> ROOTED_DIRT = getBlockType("rooted_dirt");
+
+    BlockType.Typed<Bisected> ROSE_BUSH = getBlockType("rose_bush");
+
+    BlockType.Typed<BlockData> SAND = getBlockType("sand");
+
+    BlockType.Typed<BlockData> SANDSTONE = getBlockType("sandstone");
+
+    BlockType.Typed<Slab> SANDSTONE_SLAB = getBlockType("sandstone_slab");
+
+    BlockType.Typed<Stairs> SANDSTONE_STAIRS = getBlockType("sandstone_stairs");
+
+    BlockType.Typed<Wall> SANDSTONE_WALL = getBlockType("sandstone_wall");
+
+    BlockType.Typed<Scaffolding> SCAFFOLDING = getBlockType("scaffolding");
+
+    BlockType.Typed<BlockData> SCULK = getBlockType("sculk");
+
+    BlockType.Typed<SculkCatalyst> SCULK_CATALYST = getBlockType("sculk_catalyst");
+
+    BlockType.Typed<SculkSensor> SCULK_SENSOR = getBlockType("sculk_sensor");
+
+    BlockType.Typed<SculkShrieker> SCULK_SHRIEKER = getBlockType("sculk_shrieker");
+
+    BlockType.Typed<SculkVein> SCULK_VEIN = getBlockType("sculk_vein");
+
+    BlockType.Typed<BlockData> SEA_LANTERN = getBlockType("sea_lantern");
+
+    BlockType.Typed<SeaPickle> SEA_PICKLE = getBlockType("sea_pickle");
+
+    BlockType.Typed<BlockData> SEAGRASS = getBlockType("seagrass");
+
+    BlockType.Typed<BlockData> SHORT_GRASS = getBlockType("short_grass");
+
+    BlockType.Typed<BlockData> SHROOMLIGHT = getBlockType("shroomlight");
+
+    BlockType.Typed<Directional> SHULKER_BOX = getBlockType("shulker_box");
+
+    BlockType.Typed<Skull> SKELETON_SKULL = getBlockType("skeleton_skull");
+
+    BlockType.Typed<WallSkull> SKELETON_WALL_SKULL = getBlockType("skeleton_wall_skull");
+
+    BlockType.Typed<BlockData> SLIME_BLOCK = getBlockType("slime_block");
+
+    BlockType.Typed<AmethystCluster> SMALL_AMETHYST_BUD = getBlockType("small_amethyst_bud");
+
+    BlockType.Typed<SmallDripleaf> SMALL_DRIPLEAF = getBlockType("small_dripleaf");
+
+    BlockType.Typed<BlockData> SMITHING_TABLE = getBlockType("smithing_table");
+
+    BlockType.Typed<Furnace> SMOKER = getBlockType("smoker");
+
+    BlockType.Typed<BlockData> SMOOTH_BASALT = getBlockType("smooth_basalt");
+
+    BlockType.Typed<BlockData> SMOOTH_QUARTZ = getBlockType("smooth_quartz");
+
+    BlockType.Typed<Slab> SMOOTH_QUARTZ_SLAB = getBlockType("smooth_quartz_slab");
+
+    BlockType.Typed<Stairs> SMOOTH_QUARTZ_STAIRS = getBlockType("smooth_quartz_stairs");
+
+    BlockType.Typed<BlockData> SMOOTH_RED_SANDSTONE = getBlockType("smooth_red_sandstone");
+
+    BlockType.Typed<Slab> SMOOTH_RED_SANDSTONE_SLAB = getBlockType("smooth_red_sandstone_slab");
+
+    BlockType.Typed<Stairs> SMOOTH_RED_SANDSTONE_STAIRS = getBlockType("smooth_red_sandstone_stairs");
+
+    BlockType.Typed<BlockData> SMOOTH_SANDSTONE = getBlockType("smooth_sandstone");
+
+    BlockType.Typed<Slab> SMOOTH_SANDSTONE_SLAB = getBlockType("smooth_sandstone_slab");
+
+    BlockType.Typed<Stairs> SMOOTH_SANDSTONE_STAIRS = getBlockType("smooth_sandstone_stairs");
+
+    BlockType.Typed<BlockData> SMOOTH_STONE = getBlockType("smooth_stone");
+
+    BlockType.Typed<Slab> SMOOTH_STONE_SLAB = getBlockType("smooth_stone_slab");
+
+    BlockType.Typed<Hatchable> SNIFFER_EGG = getBlockType("sniffer_egg");
+
+    BlockType.Typed<Snow> SNOW = getBlockType("snow");
+
+    BlockType.Typed<BlockData> SNOW_BLOCK = getBlockType("snow_block");
+
+    BlockType.Typed<Campfire> SOUL_CAMPFIRE = getBlockType("soul_campfire");
+
+    BlockType.Typed<BlockData> SOUL_FIRE = getBlockType("soul_fire");
+
+    BlockType.Typed<Lantern> SOUL_LANTERN = getBlockType("soul_lantern");
+
+    BlockType.Typed<BlockData> SOUL_SAND = getBlockType("soul_sand");
+
+    BlockType.Typed<BlockData> SOUL_SOIL = getBlockType("soul_soil");
+
+    BlockType.Typed<BlockData> SOUL_TORCH = getBlockType("soul_torch");
+
+    BlockType.Typed<Directional> SOUL_WALL_TORCH = getBlockType("soul_wall_torch");
+
+    BlockType.Typed<BlockData> SPAWNER = getBlockType("spawner");
+
+    BlockType.Typed<BlockData> SPONGE = getBlockType("sponge");
+
+    BlockType.Typed<BlockData> SPORE_BLOSSOM = getBlockType("spore_blossom");
+
+    BlockType.Typed<Switch> SPRUCE_BUTTON = getBlockType("spruce_button");
+
+    BlockType.Typed<Door> SPRUCE_DOOR = getBlockType("spruce_door");
+
+    BlockType.Typed<Fence> SPRUCE_FENCE = getBlockType("spruce_fence");
+
+    BlockType.Typed<Gate> SPRUCE_FENCE_GATE = getBlockType("spruce_fence_gate");
+
+    BlockType.Typed<HangingSign> SPRUCE_HANGING_SIGN = getBlockType("spruce_hanging_sign");
+
+    BlockType.Typed<Leaves> SPRUCE_LEAVES = getBlockType("spruce_leaves");
+
+    BlockType.Typed<Orientable> SPRUCE_LOG = getBlockType("spruce_log");
+
+    BlockType.Typed<BlockData> SPRUCE_PLANKS = getBlockType("spruce_planks");
+
+    BlockType.Typed<Powerable> SPRUCE_PRESSURE_PLATE = getBlockType("spruce_pressure_plate");
+
+    BlockType.Typed<Sapling> SPRUCE_SAPLING = getBlockType("spruce_sapling");
+
+    BlockType.Typed<Sign> SPRUCE_SIGN = getBlockType("spruce_sign");
+
+    BlockType.Typed<Slab> SPRUCE_SLAB = getBlockType("spruce_slab");
+
+    BlockType.Typed<Stairs> SPRUCE_STAIRS = getBlockType("spruce_stairs");
+
+    BlockType.Typed<TrapDoor> SPRUCE_TRAPDOOR = getBlockType("spruce_trapdoor");
+
+    BlockType.Typed<WallHangingSign> SPRUCE_WALL_HANGING_SIGN = getBlockType("spruce_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> SPRUCE_WALL_SIGN = getBlockType("spruce_wall_sign");
+
+    BlockType.Typed<Orientable> SPRUCE_WOOD = getBlockType("spruce_wood");
+
+    BlockType.Typed<Piston> STICKY_PISTON = getBlockType("sticky_piston");
+
+    BlockType.Typed<BlockData> STONE = getBlockType("stone");
+
+    BlockType.Typed<Slab> STONE_BRICK_SLAB = getBlockType("stone_brick_slab");
+
+    BlockType.Typed<Stairs> STONE_BRICK_STAIRS = getBlockType("stone_brick_stairs");
+
+    BlockType.Typed<Wall> STONE_BRICK_WALL = getBlockType("stone_brick_wall");
+
+    BlockType.Typed<BlockData> STONE_BRICKS = getBlockType("stone_bricks");
+
+    BlockType.Typed<Switch> STONE_BUTTON = getBlockType("stone_button");
+
+    BlockType.Typed<Powerable> STONE_PRESSURE_PLATE = getBlockType("stone_pressure_plate");
+
+    BlockType.Typed<Slab> STONE_SLAB = getBlockType("stone_slab");
+
+    BlockType.Typed<Stairs> STONE_STAIRS = getBlockType("stone_stairs");
+
+    BlockType.Typed<Directional> STONECUTTER = getBlockType("stonecutter");
+
+    BlockType.Typed<Orientable> STRIPPED_ACACIA_LOG = getBlockType("stripped_acacia_log");
+
+    BlockType.Typed<Orientable> STRIPPED_ACACIA_WOOD = getBlockType("stripped_acacia_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_BAMBOO_BLOCK = getBlockType("stripped_bamboo_block");
+
+    BlockType.Typed<Orientable> STRIPPED_BIRCH_LOG = getBlockType("stripped_birch_log");
+
+    BlockType.Typed<Orientable> STRIPPED_BIRCH_WOOD = getBlockType("stripped_birch_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_CHERRY_LOG = getBlockType("stripped_cherry_log");
+
+    BlockType.Typed<Orientable> STRIPPED_CHERRY_WOOD = getBlockType("stripped_cherry_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_CRIMSON_HYPHAE = getBlockType("stripped_crimson_hyphae");
+
+    BlockType.Typed<Orientable> STRIPPED_CRIMSON_STEM = getBlockType("stripped_crimson_stem");
+
+    BlockType.Typed<Orientable> STRIPPED_DARK_OAK_LOG = getBlockType("stripped_dark_oak_log");
+
+    BlockType.Typed<Orientable> STRIPPED_DARK_OAK_WOOD = getBlockType("stripped_dark_oak_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_JUNGLE_LOG = getBlockType("stripped_jungle_log");
+
+    BlockType.Typed<Orientable> STRIPPED_JUNGLE_WOOD = getBlockType("stripped_jungle_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_MANGROVE_LOG = getBlockType("stripped_mangrove_log");
+
+    BlockType.Typed<Orientable> STRIPPED_MANGROVE_WOOD = getBlockType("stripped_mangrove_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_OAK_LOG = getBlockType("stripped_oak_log");
+
+    BlockType.Typed<Orientable> STRIPPED_OAK_WOOD = getBlockType("stripped_oak_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_PALE_OAK_LOG = getBlockType("stripped_pale_oak_log");
+
+    BlockType.Typed<Orientable> STRIPPED_PALE_OAK_WOOD = getBlockType("stripped_pale_oak_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_SPRUCE_LOG = getBlockType("stripped_spruce_log");
+
+    BlockType.Typed<Orientable> STRIPPED_SPRUCE_WOOD = getBlockType("stripped_spruce_wood");
+
+    BlockType.Typed<Orientable> STRIPPED_WARPED_HYPHAE = getBlockType("stripped_warped_hyphae");
+
+    BlockType.Typed<Orientable> STRIPPED_WARPED_STEM = getBlockType("stripped_warped_stem");
+
+    BlockType.Typed<StructureBlock> STRUCTURE_BLOCK = getBlockType("structure_block");
+
+    BlockType.Typed<BlockData> STRUCTURE_VOID = getBlockType("structure_void");
+
+    BlockType.Typed<Ageable> SUGAR_CANE = getBlockType("sugar_cane");
+
+    BlockType.Typed<Bisected> SUNFLOWER = getBlockType("sunflower");
+
+    BlockType.Typed<Brushable> SUSPICIOUS_GRAVEL = getBlockType("suspicious_gravel");
+
+    BlockType.Typed<Brushable> SUSPICIOUS_SAND = getBlockType("suspicious_sand");
+
+    BlockType.Typed<Ageable> SWEET_BERRY_BUSH = getBlockType("sweet_berry_bush");
+
+    BlockType.Typed<Bisected> TALL_GRASS = getBlockType("tall_grass");
+
+    BlockType.Typed<Bisected> TALL_SEAGRASS = getBlockType("tall_seagrass");
+
+    BlockType.Typed<AnaloguePowerable> TARGET = getBlockType("target");
+
+    BlockType.Typed<BlockData> TERRACOTTA = getBlockType("terracotta");
+
+    BlockType.Typed<BlockData> TINTED_GLASS = getBlockType("tinted_glass");
+
+    BlockType.Typed<TNT> TNT = getBlockType("tnt");
+
+    BlockType.Typed<BlockData> TORCH = getBlockType("torch");
+
+    BlockType.Typed<BlockData> TORCHFLOWER = getBlockType("torchflower");
+
+    BlockType.Typed<Ageable> TORCHFLOWER_CROP = getBlockType("torchflower_crop");
+
+    BlockType.Typed<Chest> TRAPPED_CHEST = getBlockType("trapped_chest");
+
+    BlockType.Typed<TrialSpawner> TRIAL_SPAWNER = getBlockType("trial_spawner");
+
+    BlockType.Typed<Tripwire> TRIPWIRE = getBlockType("tripwire");
+
+    BlockType.Typed<TripwireHook> TRIPWIRE_HOOK = getBlockType("tripwire_hook");
+
+    BlockType.Typed<Waterlogged> TUBE_CORAL = getBlockType("tube_coral");
+
+    BlockType.Typed<BlockData> TUBE_CORAL_BLOCK = getBlockType("tube_coral_block");
+
+    BlockType.Typed<Waterlogged> TUBE_CORAL_FAN = getBlockType("tube_coral_fan");
+
+    BlockType.Typed<CoralWallFan> TUBE_CORAL_WALL_FAN = getBlockType("tube_coral_wall_fan");
+
+    BlockType.Typed<BlockData> TUFF = getBlockType("tuff");
+
+    BlockType.Typed<Slab> TUFF_BRICK_SLAB = getBlockType("tuff_brick_slab");
+
+    BlockType.Typed<Stairs> TUFF_BRICK_STAIRS = getBlockType("tuff_brick_stairs");
+
+    BlockType.Typed<Wall> TUFF_BRICK_WALL = getBlockType("tuff_brick_wall");
+
+    BlockType.Typed<BlockData> TUFF_BRICKS = getBlockType("tuff_bricks");
+
+    BlockType.Typed<Slab> TUFF_SLAB = getBlockType("tuff_slab");
+
+    BlockType.Typed<Stairs> TUFF_STAIRS = getBlockType("tuff_stairs");
+
+    BlockType.Typed<Wall> TUFF_WALL = getBlockType("tuff_wall");
+
+    BlockType.Typed<TurtleEgg> TURTLE_EGG = getBlockType("turtle_egg");
+
+    BlockType.Typed<Ageable> TWISTING_VINES = getBlockType("twisting_vines");
+
+    BlockType.Typed<BlockData> TWISTING_VINES_PLANT = getBlockType("twisting_vines_plant");
+
+    BlockType.Typed<Vault> VAULT = getBlockType("vault");
+
+    BlockType.Typed<Orientable> VERDANT_FROGLIGHT = getBlockType("verdant_froglight");
+
+    BlockType.Typed<MultipleFacing> VINE = getBlockType("vine");
+
+    BlockType.Typed<BlockData> VOID_AIR = getBlockType("void_air");
+
+    BlockType.Typed<Directional> WALL_TORCH = getBlockType("wall_torch");
+
+    BlockType.Typed<Switch> WARPED_BUTTON = getBlockType("warped_button");
+
+    BlockType.Typed<Door> WARPED_DOOR = getBlockType("warped_door");
+
+    BlockType.Typed<Fence> WARPED_FENCE = getBlockType("warped_fence");
+
+    BlockType.Typed<Gate> WARPED_FENCE_GATE = getBlockType("warped_fence_gate");
+
+    BlockType.Typed<BlockData> WARPED_FUNGUS = getBlockType("warped_fungus");
+
+    BlockType.Typed<HangingSign> WARPED_HANGING_SIGN = getBlockType("warped_hanging_sign");
+
+    BlockType.Typed<Orientable> WARPED_HYPHAE = getBlockType("warped_hyphae");
+
+    BlockType.Typed<BlockData> WARPED_NYLIUM = getBlockType("warped_nylium");
+
+    BlockType.Typed<BlockData> WARPED_PLANKS = getBlockType("warped_planks");
+
+    BlockType.Typed<Powerable> WARPED_PRESSURE_PLATE = getBlockType("warped_pressure_plate");
+
+    BlockType.Typed<BlockData> WARPED_ROOTS = getBlockType("warped_roots");
+
+    BlockType.Typed<Sign> WARPED_SIGN = getBlockType("warped_sign");
+
+    BlockType.Typed<Slab> WARPED_SLAB = getBlockType("warped_slab");
+
+    BlockType.Typed<Stairs> WARPED_STAIRS = getBlockType("warped_stairs");
+
+    BlockType.Typed<Orientable> WARPED_STEM = getBlockType("warped_stem");
+
+    BlockType.Typed<TrapDoor> WARPED_TRAPDOOR = getBlockType("warped_trapdoor");
+
+    BlockType.Typed<WallHangingSign> WARPED_WALL_HANGING_SIGN = getBlockType("warped_wall_hanging_sign");
+
+    BlockType.Typed<WallSign> WARPED_WALL_SIGN = getBlockType("warped_wall_sign");
+
+    BlockType.Typed<BlockData> WARPED_WART_BLOCK = getBlockType("warped_wart_block");
+
+    BlockType.Typed<Levelled> WATER = getBlockType("water");
+
+    BlockType.Typed<Levelled> WATER_CAULDRON = getBlockType("water_cauldron");
+
+    BlockType.Typed<BlockData> WAXED_CHISELED_COPPER = getBlockType("waxed_chiseled_copper");
+
+    BlockType.Typed<BlockData> WAXED_COPPER_BLOCK = getBlockType("waxed_copper_block");
+
+    BlockType.Typed<CopperBulb> WAXED_COPPER_BULB = getBlockType("waxed_copper_bulb");
+
+    BlockType.Typed<Door> WAXED_COPPER_DOOR = getBlockType("waxed_copper_door");
+
+    BlockType.Typed<Waterlogged> WAXED_COPPER_GRATE = getBlockType("waxed_copper_grate");
+
+    BlockType.Typed<TrapDoor> WAXED_COPPER_TRAPDOOR = getBlockType("waxed_copper_trapdoor");
+
+    BlockType.Typed<BlockData> WAXED_CUT_COPPER = getBlockType("waxed_cut_copper");
+
+    BlockType.Typed<Slab> WAXED_CUT_COPPER_SLAB = getBlockType("waxed_cut_copper_slab");
+
+    BlockType.Typed<Stairs> WAXED_CUT_COPPER_STAIRS = getBlockType("waxed_cut_copper_stairs");
+
+    BlockType.Typed<BlockData> WAXED_EXPOSED_CHISELED_COPPER = getBlockType("waxed_exposed_chiseled_copper");
+
+    BlockType.Typed<BlockData> WAXED_EXPOSED_COPPER = getBlockType("waxed_exposed_copper");
+
+    BlockType.Typed<CopperBulb> WAXED_EXPOSED_COPPER_BULB = getBlockType("waxed_exposed_copper_bulb");
+
+    BlockType.Typed<Door> WAXED_EXPOSED_COPPER_DOOR = getBlockType("waxed_exposed_copper_door");
+
+    BlockType.Typed<Waterlogged> WAXED_EXPOSED_COPPER_GRATE = getBlockType("waxed_exposed_copper_grate");
+
+    BlockType.Typed<TrapDoor> WAXED_EXPOSED_COPPER_TRAPDOOR = getBlockType("waxed_exposed_copper_trapdoor");
+
+    BlockType.Typed<BlockData> WAXED_EXPOSED_CUT_COPPER = getBlockType("waxed_exposed_cut_copper");
+
+    BlockType.Typed<Slab> WAXED_EXPOSED_CUT_COPPER_SLAB = getBlockType("waxed_exposed_cut_copper_slab");
+
+    BlockType.Typed<Stairs> WAXED_EXPOSED_CUT_COPPER_STAIRS = getBlockType("waxed_exposed_cut_copper_stairs");
+
+    BlockType.Typed<BlockData> WAXED_OXIDIZED_CHISELED_COPPER = getBlockType("waxed_oxidized_chiseled_copper");
+
+    BlockType.Typed<BlockData> WAXED_OXIDIZED_COPPER = getBlockType("waxed_oxidized_copper");
+
+    BlockType.Typed<CopperBulb> WAXED_OXIDIZED_COPPER_BULB = getBlockType("waxed_oxidized_copper_bulb");
+
+    BlockType.Typed<Door> WAXED_OXIDIZED_COPPER_DOOR = getBlockType("waxed_oxidized_copper_door");
+
+    BlockType.Typed<Waterlogged> WAXED_OXIDIZED_COPPER_GRATE = getBlockType("waxed_oxidized_copper_grate");
+
+    BlockType.Typed<TrapDoor> WAXED_OXIDIZED_COPPER_TRAPDOOR = getBlockType("waxed_oxidized_copper_trapdoor");
+
+    BlockType.Typed<BlockData> WAXED_OXIDIZED_CUT_COPPER = getBlockType("waxed_oxidized_cut_copper");
+
+    BlockType.Typed<Slab> WAXED_OXIDIZED_CUT_COPPER_SLAB = getBlockType("waxed_oxidized_cut_copper_slab");
+
+    BlockType.Typed<Stairs> WAXED_OXIDIZED_CUT_COPPER_STAIRS = getBlockType("waxed_oxidized_cut_copper_stairs");
+
+    BlockType.Typed<BlockData> WAXED_WEATHERED_CHISELED_COPPER = getBlockType("waxed_weathered_chiseled_copper");
+
+    BlockType.Typed<BlockData> WAXED_WEATHERED_COPPER = getBlockType("waxed_weathered_copper");
+
+    BlockType.Typed<CopperBulb> WAXED_WEATHERED_COPPER_BULB = getBlockType("waxed_weathered_copper_bulb");
+
+    BlockType.Typed<Door> WAXED_WEATHERED_COPPER_DOOR = getBlockType("waxed_weathered_copper_door");
+
+    BlockType.Typed<Waterlogged> WAXED_WEATHERED_COPPER_GRATE = getBlockType("waxed_weathered_copper_grate");
+
+    BlockType.Typed<TrapDoor> WAXED_WEATHERED_COPPER_TRAPDOOR = getBlockType("waxed_weathered_copper_trapdoor");
+
+    BlockType.Typed<BlockData> WAXED_WEATHERED_CUT_COPPER = getBlockType("waxed_weathered_cut_copper");
+
+    BlockType.Typed<Slab> WAXED_WEATHERED_CUT_COPPER_SLAB = getBlockType("waxed_weathered_cut_copper_slab");
+
+    BlockType.Typed<Stairs> WAXED_WEATHERED_CUT_COPPER_STAIRS = getBlockType("waxed_weathered_cut_copper_stairs");
+
+    BlockType.Typed<BlockData> WEATHERED_CHISELED_COPPER = getBlockType("weathered_chiseled_copper");
+
+    BlockType.Typed<BlockData> WEATHERED_COPPER = getBlockType("weathered_copper");
+
+    BlockType.Typed<CopperBulb> WEATHERED_COPPER_BULB = getBlockType("weathered_copper_bulb");
+
+    BlockType.Typed<Door> WEATHERED_COPPER_DOOR = getBlockType("weathered_copper_door");
+
+    BlockType.Typed<Waterlogged> WEATHERED_COPPER_GRATE = getBlockType("weathered_copper_grate");
+
+    BlockType.Typed<TrapDoor> WEATHERED_COPPER_TRAPDOOR = getBlockType("weathered_copper_trapdoor");
+
+    BlockType.Typed<BlockData> WEATHERED_CUT_COPPER = getBlockType("weathered_cut_copper");
+
+    BlockType.Typed<Slab> WEATHERED_CUT_COPPER_SLAB = getBlockType("weathered_cut_copper_slab");
+
+    BlockType.Typed<Stairs> WEATHERED_CUT_COPPER_STAIRS = getBlockType("weathered_cut_copper_stairs");
+
+    BlockType.Typed<Ageable> WEEPING_VINES = getBlockType("weeping_vines");
+
+    BlockType.Typed<BlockData> WEEPING_VINES_PLANT = getBlockType("weeping_vines_plant");
+
+    BlockType.Typed<BlockData> WET_SPONGE = getBlockType("wet_sponge");
+
+    BlockType.Typed<Ageable> WHEAT = getBlockType("wheat");
+
+    BlockType.Typed<Rotatable> WHITE_BANNER = getBlockType("white_banner");
+
+    BlockType.Typed<Bed> WHITE_BED = getBlockType("white_bed");
+
+    BlockType.Typed<Candle> WHITE_CANDLE = getBlockType("white_candle");
+
+    BlockType.Typed<Lightable> WHITE_CANDLE_CAKE = getBlockType("white_candle_cake");
+
+    BlockType.Typed<BlockData> WHITE_CARPET = getBlockType("white_carpet");
+
+    BlockType.Typed<BlockData> WHITE_CONCRETE = getBlockType("white_concrete");
+
+    BlockType.Typed<BlockData> WHITE_CONCRETE_POWDER = getBlockType("white_concrete_powder");
+
+    BlockType.Typed<Directional> WHITE_GLAZED_TERRACOTTA = getBlockType("white_glazed_terracotta");
+
+    BlockType.Typed<Directional> WHITE_SHULKER_BOX = getBlockType("white_shulker_box");
+
+    BlockType.Typed<BlockData> WHITE_STAINED_GLASS = getBlockType("white_stained_glass");
+
+    BlockType.Typed<GlassPane> WHITE_STAINED_GLASS_PANE = getBlockType("white_stained_glass_pane");
+
+    BlockType.Typed<BlockData> WHITE_TERRACOTTA = getBlockType("white_terracotta");
+
+    BlockType.Typed<BlockData> WHITE_TULIP = getBlockType("white_tulip");
+
+    BlockType.Typed<Directional> WHITE_WALL_BANNER = getBlockType("white_wall_banner");
+
+    BlockType.Typed<BlockData> WHITE_WOOL = getBlockType("white_wool");
+
+    BlockType.Typed<BlockData> WITHER_ROSE = getBlockType("wither_rose");
+
+    BlockType.Typed<Skull> WITHER_SKELETON_SKULL = getBlockType("wither_skeleton_skull");
+
+    BlockType.Typed<WallSkull> WITHER_SKELETON_WALL_SKULL = getBlockType("wither_skeleton_wall_skull");
+
+    BlockType.Typed<Rotatable> YELLOW_BANNER = getBlockType("yellow_banner");
+
+    BlockType.Typed<Bed> YELLOW_BED = getBlockType("yellow_bed");
+
+    BlockType.Typed<Candle> YELLOW_CANDLE = getBlockType("yellow_candle");
+
+    BlockType.Typed<Lightable> YELLOW_CANDLE_CAKE = getBlockType("yellow_candle_cake");
+
+    BlockType.Typed<BlockData> YELLOW_CARPET = getBlockType("yellow_carpet");
+
+    BlockType.Typed<BlockData> YELLOW_CONCRETE = getBlockType("yellow_concrete");
+
+    BlockType.Typed<BlockData> YELLOW_CONCRETE_POWDER = getBlockType("yellow_concrete_powder");
+
+    BlockType.Typed<Directional> YELLOW_GLAZED_TERRACOTTA = getBlockType("yellow_glazed_terracotta");
+
+    BlockType.Typed<Directional> YELLOW_SHULKER_BOX = getBlockType("yellow_shulker_box");
+
+    BlockType.Typed<BlockData> YELLOW_STAINED_GLASS = getBlockType("yellow_stained_glass");
+
+    BlockType.Typed<GlassPane> YELLOW_STAINED_GLASS_PANE = getBlockType("yellow_stained_glass_pane");
+
+    BlockType.Typed<BlockData> YELLOW_TERRACOTTA = getBlockType("yellow_terracotta");
+
+    BlockType.Typed<Directional> YELLOW_WALL_BANNER = getBlockType("yellow_wall_banner");
+
+    BlockType.Typed<BlockData> YELLOW_WOOL = getBlockType("yellow_wool");
+
+    BlockType.Typed<Skull> ZOMBIE_HEAD = getBlockType("zombie_head");
+
+    BlockType.Typed<WallSkull> ZOMBIE_WALL_HEAD = getBlockType("zombie_wall_head");
+    // End generate - BlockType
     //</editor-fold>
 
     @NotNull
diff --git a/paper-api/src/main/java/org/bukkit/block/Orientation.java b/paper-api/src/main/java/org/bukkit/block/Orientation.java
new file mode 100644
index 0000000000..b434f53921
--- /dev/null
+++ b/paper-api/src/main/java/org/bukkit/block/Orientation.java
@@ -0,0 +1,20 @@
+package org.bukkit.block;
+
+/**
+ * Represents the face and the direction of a block
+ */
+public enum Orientation {
+
+    DOWN_EAST,
+    DOWN_NORTH,
+    DOWN_SOUTH,
+    DOWN_WEST,
+    UP_EAST,
+    UP_NORTH,
+    UP_SOUTH,
+    UP_WEST,
+    WEST_UP,
+    EAST_UP,
+    NORTH_UP,
+    SOUTH_UP
+}
diff --git a/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java b/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java
index 444f128e8a..25defa22ae 100644
--- a/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java
+++ b/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java
@@ -14,50 +14,96 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 public interface PatternType extends OldEnum<PatternType>, Keyed {
+
+    // Start generate - PatternType
+    // @GeneratedFrom 1.21.4
     PatternType BASE = getType("base");
-    PatternType SQUARE_BOTTOM_LEFT = getType("square_bottom_left");
-    PatternType SQUARE_BOTTOM_RIGHT = getType("square_bottom_right");
-    PatternType SQUARE_TOP_LEFT = getType("square_top_left");
-    PatternType SQUARE_TOP_RIGHT = getType("square_top_right");
-    PatternType STRIPE_BOTTOM = getType("stripe_bottom");
-    PatternType STRIPE_TOP = getType("stripe_top");
-    PatternType STRIPE_LEFT = getType("stripe_left");
-    PatternType STRIPE_RIGHT = getType("stripe_right");
-    PatternType STRIPE_CENTER = getType("stripe_center");
-    PatternType STRIPE_MIDDLE = getType("stripe_middle");
-    PatternType STRIPE_DOWNRIGHT = getType("stripe_downright");
-    PatternType STRIPE_DOWNLEFT = getType("stripe_downleft");
-    PatternType SMALL_STRIPES = getType("small_stripes");
-    PatternType CROSS = getType("cross");
-    PatternType STRAIGHT_CROSS = getType("straight_cross");
-    PatternType TRIANGLE_BOTTOM = getType("triangle_bottom");
-    PatternType TRIANGLE_TOP = getType("triangle_top");
-    PatternType TRIANGLES_BOTTOM = getType("triangles_bottom");
-    PatternType TRIANGLES_TOP = getType("triangles_top");
-    PatternType DIAGONAL_LEFT = getType("diagonal_left");
-    PatternType DIAGONAL_UP_RIGHT = getType("diagonal_up_right");
-    PatternType DIAGONAL_UP_LEFT = getType("diagonal_up_left");
-    PatternType DIAGONAL_RIGHT = getType("diagonal_right");
-    PatternType CIRCLE = getType("circle");
-    PatternType RHOMBUS = getType("rhombus");
-    PatternType HALF_VERTICAL = getType("half_vertical");
-    PatternType HALF_HORIZONTAL = getType("half_horizontal");
-    PatternType HALF_VERTICAL_RIGHT = getType("half_vertical_right");
-    PatternType HALF_HORIZONTAL_BOTTOM = getType("half_horizontal_bottom");
+
     PatternType BORDER = getType("border");
-    PatternType CURLY_BORDER = getType("curly_border");
-    PatternType CREEPER = getType("creeper");
-    PatternType GRADIENT = getType("gradient");
-    PatternType GRADIENT_UP = getType("gradient_up");
+
     PatternType BRICKS = getType("bricks");
-    PatternType SKULL = getType("skull");
-    PatternType FLOWER = getType("flower");
-    PatternType MOJANG = getType("mojang");
-    PatternType GLOBE = getType("globe");
-    PatternType PIGLIN = getType("piglin");
+
+    PatternType CIRCLE = getType("circle");
+
+    PatternType CREEPER = getType("creeper");
+
+    PatternType CROSS = getType("cross");
+
+    PatternType CURLY_BORDER = getType("curly_border");
+
+    PatternType DIAGONAL_LEFT = getType("diagonal_left");
+
+    PatternType DIAGONAL_RIGHT = getType("diagonal_right");
+
+    PatternType DIAGONAL_UP_LEFT = getType("diagonal_up_left");
+
+    PatternType DIAGONAL_UP_RIGHT = getType("diagonal_up_right");
+
     PatternType FLOW = getType("flow");
+
+    PatternType FLOWER = getType("flower");
+
+    PatternType GLOBE = getType("globe");
+
+    PatternType GRADIENT = getType("gradient");
+
+    PatternType GRADIENT_UP = getType("gradient_up");
+
     PatternType GUSTER = getType("guster");
 
+    PatternType HALF_HORIZONTAL = getType("half_horizontal");
+
+    PatternType HALF_HORIZONTAL_BOTTOM = getType("half_horizontal_bottom");
+
+    PatternType HALF_VERTICAL = getType("half_vertical");
+
+    PatternType HALF_VERTICAL_RIGHT = getType("half_vertical_right");
+
+    PatternType MOJANG = getType("mojang");
+
+    PatternType PIGLIN = getType("piglin");
+
+    PatternType RHOMBUS = getType("rhombus");
+
+    PatternType SKULL = getType("skull");
+
+    PatternType SMALL_STRIPES = getType("small_stripes");
+
+    PatternType SQUARE_BOTTOM_LEFT = getType("square_bottom_left");
+
+    PatternType SQUARE_BOTTOM_RIGHT = getType("square_bottom_right");
+
+    PatternType SQUARE_TOP_LEFT = getType("square_top_left");
+
+    PatternType SQUARE_TOP_RIGHT = getType("square_top_right");
+
+    PatternType STRAIGHT_CROSS = getType("straight_cross");
+
+    PatternType STRIPE_BOTTOM = getType("stripe_bottom");
+
+    PatternType STRIPE_CENTER = getType("stripe_center");
+
+    PatternType STRIPE_DOWNLEFT = getType("stripe_downleft");
+
+    PatternType STRIPE_DOWNRIGHT = getType("stripe_downright");
+
+    PatternType STRIPE_LEFT = getType("stripe_left");
+
+    PatternType STRIPE_MIDDLE = getType("stripe_middle");
+
+    PatternType STRIPE_RIGHT = getType("stripe_right");
+
+    PatternType STRIPE_TOP = getType("stripe_top");
+
+    PatternType TRIANGLE_BOTTOM = getType("triangle_bottom");
+
+    PatternType TRIANGLE_TOP = getType("triangle_top");
+
+    PatternType TRIANGLES_BOTTOM = getType("triangles_bottom");
+
+    PatternType TRIANGLES_TOP = getType("triangles_top");
+    // End generate - PatternType
+
     // Paper start - deprecate getKey
     /**
      * @deprecated use {@link Registry#getKey(Keyed)}, {@link io.papermc.paper.registry.RegistryAccess#getRegistry(io.papermc.paper.registry.RegistryKey)},
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/CaveVinesPlant.java b/paper-api/src/main/java/org/bukkit/block/data/type/CaveVinesPlant.java
index a7f75a98e0..274bc2b1ce 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/CaveVinesPlant.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/CaveVinesPlant.java
@@ -11,8 +11,19 @@ public interface CaveVinesPlant extends BlockData {
      * Gets the value of the 'berries' property.
      *
      * @return the 'berries' value
+     * @deprecated bad name, use {@link #hasBerries()}
      */
-    boolean isBerries();
+    @Deprecated
+    default boolean isBerries() {
+        return this.hasBerries();
+    }
+
+    /**
+     * Gets the value of the 'berries' property.
+     *
+     * @return the 'berries' value
+     */
+    boolean hasBerries();
 
     /**
      * Sets the value of the 'berries' property.
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/Crafter.java b/paper-api/src/main/java/org/bukkit/block/data/type/Crafter.java
index c15fdf9e82..ada92c3eef 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/Crafter.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/Crafter.java
@@ -48,18 +48,23 @@ public interface Crafter extends BlockData {
      * @return the 'orientation' value
      */
     @NotNull
-    Orientation getOrientation();
+    org.bukkit.block.Orientation getOrientation();
 
     /**
      * Sets the value of the 'orientation' property.
      *
      * @param orientation the new 'orientation' value
      */
-    void setOrientation(@NotNull Orientation orientation);
+    void setOrientation(@NotNull org.bukkit.block.Orientation orientation);
 
     /**
      * The directions the Crafter can be oriented.
+     *
+     * @deprecated this property is not specific to the Crafter, use
+     * {@link org.bukkit.block.Orientation} instead. All references
+     * to this enum will be redirected to that enum at runtime.
      */
+    @Deprecated
     public enum Orientation {
 
         DOWN_EAST,
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/DecoratedPot.java b/paper-api/src/main/java/org/bukkit/block/data/type/DecoratedPot.java
index b3d290dbfd..7a213b916c 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/DecoratedPot.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/DecoratedPot.java
@@ -4,17 +4,18 @@ import org.bukkit.block.data.Directional;
 import org.bukkit.block.data.Waterlogged;
 
 public interface DecoratedPot extends Directional, Waterlogged {
-    // Paper start - add missing block data api
-    /**
-     * @return whether the pot is cracked
-     */
-    public boolean isCracked();
 
     /**
-     * Set whether the pot is cracked.
+     * Gets the value of the 'cracked' property.
      *
-     * @param cracked whether the pot is cracked
+     * @return the 'cracked' value
      */
-    public void setCracked(boolean cracked);
-    // Paper end - add missing block data api
+    boolean isCracked();
+
+    /**
+     * Sets the value of the 'cracked' property.
+     *
+     * @param cracked the new 'cracked' value
+     */
+    void setCracked(boolean cracked);
 }
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/Jigsaw.java b/paper-api/src/main/java/org/bukkit/block/data/type/Jigsaw.java
index c70c755cdb..65a137a90b 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/Jigsaw.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/Jigsaw.java
@@ -14,18 +14,23 @@ public interface Jigsaw extends BlockData {
      * @return the 'orientation' value
      */
     @NotNull
-    Orientation getOrientation();
+    org.bukkit.block.Orientation getOrientation();
 
     /**
      * Sets the value of the 'orientation' property.
      *
      * @param orientation the new 'orientation' value
      */
-    void setOrientation(@NotNull Orientation orientation);
+    void setOrientation(@NotNull org.bukkit.block.Orientation orientation);
 
     /**
      * The directions the Jigsaw can be oriented.
+     *
+     * @deprecated this property is not specific to the Jigsaw, use
+     * {@link org.bukkit.block.Orientation} instead. All references
+     * to this enum will be redirected to that enum at runtime.
      */
+    @Deprecated
     public enum Orientation {
 
         DOWN_EAST,
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/Jukebox.java b/paper-api/src/main/java/org/bukkit/block/data/type/Jukebox.java
index 5e37136207..4a59fa4fad 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/Jukebox.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/Jukebox.java
@@ -14,4 +14,11 @@ public interface Jukebox extends BlockData {
      * @return the 'has_record' value
      */
     boolean hasRecord();
+
+    /**
+     * Sets the value of the 'has_record' property.
+     *
+     * @param hasRecord the new 'has_record' value
+     */
+    void setHasRecord(boolean hasRecord);
 }
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/Lectern.java b/paper-api/src/main/java/org/bukkit/block/data/type/Lectern.java
index 11b4a173f9..db714a52f3 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/Lectern.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/Lectern.java
@@ -15,4 +15,11 @@ public interface Lectern extends Directional, Powerable {
      * @return the 'has_book' value
      */
     boolean hasBook();
+
+    /**
+     * Sets the value of the 'has_book' property.
+     *
+     * @param hasBook the new 'has_book' value
+     */
+    void setHasBook(boolean hasBook);
 }
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/MossyCarpet.java b/paper-api/src/main/java/org/bukkit/block/data/type/MossyCarpet.java
index 1c904b440c..65a4b2a2d1 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/MossyCarpet.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/MossyCarpet.java
@@ -33,7 +33,7 @@ public interface MossyCarpet extends BlockData {
      * @return if face is enabled
      */
     @NotNull
-    Height getHeight(@NotNull BlockFace face);
+    Wall.Height getHeight(@NotNull BlockFace face);
 
     /**
      * Set the height of the specified face.
@@ -41,11 +41,16 @@ public interface MossyCarpet extends BlockData {
      * @param face to set
      * @param height the height
      */
-    void setHeight(@NotNull BlockFace face, @NotNull Height height);
+    void setHeight(@NotNull BlockFace face, @NotNull Wall.Height height);
 
     /**
      * The different heights a face may have.
+     *
+     * @deprecated this property is not specific to the MossyCarpet, use
+     * {@link org.bukkit.block.data.type.Wall.Height} instead. All references
+     * to this enum will be redirected to that enum at runtime.
      */
+    @Deprecated
     public enum Height {
         /**
          * Not present.
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/SculkSensor.java b/paper-api/src/main/java/org/bukkit/block/data/type/SculkSensor.java
index 1af390e2ec..3e7f5f22b3 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/SculkSensor.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/SculkSensor.java
@@ -13,16 +13,39 @@ public interface SculkSensor extends AnaloguePowerable, Waterlogged {
      * Gets the value of the 'sculk_sensor_phase' property.
      *
      * @return the 'sculk_sensor_phase' value
+     * @deprecated bad name, use {@link #getSculkSensorPhase()}
      */
     @NotNull
-    Phase getPhase();
+    @Deprecated
+    default Phase getPhase() {
+        return this.getSculkSensorPhase();
+    }
+
+    /**
+     * Sets the value of the 'sculk_sensor_phase' property.
+     *
+     * @param phase the new 'sculk_sensor_phase' value
+     * @deprecated bad name, use {@link #setSculkSensorPhase(Phase)}
+     */
+    @Deprecated
+    default void setPhase(@NotNull Phase phase) {
+        this.setSculkSensorPhase(phase);
+    }
+
+    /**
+     * Gets the value of the 'sculk_sensor_phase' property.
+     *
+     * @return the 'sculk_sensor_phase' value
+     */
+    @NotNull
+    Phase getSculkSensorPhase();
 
     /**
      * Sets the value of the 'sculk_sensor_phase' property.
      *
      * @param phase the new 'sculk_sensor_phase' value
      */
-    void setPhase(@NotNull Phase phase);
+    void setSculkSensorPhase(@NotNull Phase phase);
 
     /**
      * The Phase of the sensor.
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/Switch.java b/paper-api/src/main/java/org/bukkit/block/data/type/Switch.java
index 16ced762f4..793f8d4d17 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/Switch.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/Switch.java
@@ -7,6 +7,11 @@ import org.jetbrains.annotations.NotNull;
 
 public interface Switch extends Directional, FaceAttachable, Powerable {
 
+    @NotNull
+    AttachedFace getAttachedFace();
+
+    void setAttachedFace(@NotNull AttachedFace face);
+
     /**
      * Gets the value of the 'face' property.
      *
@@ -15,7 +20,9 @@ public interface Switch extends Directional, FaceAttachable, Powerable {
      */
     @NotNull
     @Deprecated(since = "1.15.2")
-    Face getFace();
+    default Face getFace() {
+        return Face.valueOf(this.getAttachedFace().name());
+    }
 
     /**
      * Sets the value of the 'face' property.
@@ -24,7 +31,9 @@ public interface Switch extends Directional, FaceAttachable, Powerable {
      * @deprecated use {@link #setAttachedFace(AttachedFace)}
      */
     @Deprecated(since = "1.15.2")
-    void setFace(@NotNull Face face);
+    default void setFace(@NotNull Face face) {
+        this.setAttachedFace(AttachedFace.valueOf(face.name()));
+    }
 
     /**
      * The face to which a switch type block is stuck.
diff --git a/paper-api/src/main/java/org/bukkit/block/data/type/Vault.java b/paper-api/src/main/java/org/bukkit/block/data/type/Vault.java
index 122f8c888b..b42934612e 100644
--- a/paper-api/src/main/java/org/bukkit/block/data/type/Vault.java
+++ b/paper-api/src/main/java/org/bukkit/block/data/type/Vault.java
@@ -26,7 +26,9 @@ public interface Vault extends Directional {
      */
     @Deprecated(since = "1.21.3", forRemoval = true)
     @NotNull
-    State getTrialSpawnerState();
+    default State getTrialSpawnerState() {
+        return this.getVaultState();
+    }
 
     /**
      * Sets the value of the 'vault_state' property.
@@ -42,7 +44,9 @@ public interface Vault extends Directional {
      * @deprecated see {@link #setVaultState(State)}
      */
     @Deprecated(since = "1.21.3", forRemoval = true)
-    void setTrialSpawnerState(@NotNull State state);
+    default void setTrialSpawnerState(@NotNull State state) {
+        this.setVaultState(state);
+    }
 
     /**
      * Gets the value of the 'ominous' property.
diff --git a/paper-api/src/main/java/org/bukkit/damage/DamageType.java b/paper-api/src/main/java/org/bukkit/damage/DamageType.java
index b74846c77d..609390947f 100644
--- a/paper-api/src/main/java/org/bukkit/damage/DamageType.java
+++ b/paper-api/src/main/java/org/bukkit/damage/DamageType.java
@@ -21,55 +21,106 @@ import org.jetbrains.annotations.NotNull;
 @ApiStatus.Experimental
 public interface DamageType extends Keyed, Translatable {
 
-    public static final DamageType IN_FIRE = getDamageType("in_fire");
-    public static final DamageType CAMPFIRE = getDamageType("campfire");
-    public static final DamageType LIGHTNING_BOLT = getDamageType("lightning_bolt");
-    public static final DamageType ON_FIRE = getDamageType("on_fire");
-    public static final DamageType LAVA = getDamageType("lava");
-    public static final DamageType HOT_FLOOR = getDamageType("hot_floor");
-    public static final DamageType IN_WALL = getDamageType("in_wall");
-    public static final DamageType CRAMMING = getDamageType("cramming");
-    public static final DamageType DROWN = getDamageType("drown");
-    public static final DamageType STARVE = getDamageType("starve");
-    public static final DamageType CACTUS = getDamageType("cactus");
-    public static final DamageType FALL = getDamageType("fall");
-    public static final DamageType ENDER_PEARL = getDamageType("ender_pearl");
-    public static final DamageType FLY_INTO_WALL = getDamageType("fly_into_wall");
-    public static final DamageType OUT_OF_WORLD = getDamageType("out_of_world");
-    public static final DamageType GENERIC = getDamageType("generic");
-    public static final DamageType MAGIC = getDamageType("magic");
-    public static final DamageType WITHER = getDamageType("wither");
-    public static final DamageType DRAGON_BREATH = getDamageType("dragon_breath");
-    public static final DamageType DRY_OUT = getDamageType("dry_out");
-    public static final DamageType SWEET_BERRY_BUSH = getDamageType("sweet_berry_bush");
-    public static final DamageType FREEZE = getDamageType("freeze");
-    public static final DamageType STALAGMITE = getDamageType("stalagmite");
-    public static final DamageType FALLING_BLOCK = getDamageType("falling_block");
-    public static final DamageType FALLING_ANVIL = getDamageType("falling_anvil");
-    public static final DamageType FALLING_STALACTITE = getDamageType("falling_stalactite");
-    public static final DamageType STING = getDamageType("sting");
-    public static final DamageType MOB_ATTACK = getDamageType("mob_attack");
-    public static final DamageType MOB_ATTACK_NO_AGGRO = getDamageType("mob_attack_no_aggro");
-    public static final DamageType PLAYER_ATTACK = getDamageType("player_attack");
-    public static final DamageType ARROW = getDamageType("arrow");
-    public static final DamageType TRIDENT = getDamageType("trident");
-    public static final DamageType MOB_PROJECTILE = getDamageType("mob_projectile");
-    public static final DamageType SPIT = getDamageType("spit");
-    public static final DamageType FIREWORKS = getDamageType("fireworks");
-    public static final DamageType FIREBALL = getDamageType("fireball");
-    public static final DamageType UNATTRIBUTED_FIREBALL = getDamageType("unattributed_fireball");
-    public static final DamageType WITHER_SKULL = getDamageType("wither_skull");
-    public static final DamageType THROWN = getDamageType("thrown");
-    public static final DamageType INDIRECT_MAGIC = getDamageType("indirect_magic");
-    public static final DamageType THORNS = getDamageType("thorns");
-    public static final DamageType EXPLOSION = getDamageType("explosion");
-    public static final DamageType PLAYER_EXPLOSION = getDamageType("player_explosion");
-    public static final DamageType SONIC_BOOM = getDamageType("sonic_boom");
-    public static final DamageType BAD_RESPAWN_POINT = getDamageType("bad_respawn_point");
-    public static final DamageType OUTSIDE_BORDER = getDamageType("outside_border");
-    public static final DamageType GENERIC_KILL = getDamageType("generic_kill");
-    public static final DamageType WIND_CHARGE = getDamageType("wind_charge");
-    public static final DamageType MACE_SMASH = getDamageType("mace_smash");
+    // Start generate - DamageType
+    // @GeneratedFrom 1.21.4
+    DamageType ARROW = getDamageType("arrow");
+
+    DamageType BAD_RESPAWN_POINT = getDamageType("bad_respawn_point");
+
+    DamageType CACTUS = getDamageType("cactus");
+
+    DamageType CAMPFIRE = getDamageType("campfire");
+
+    DamageType CRAMMING = getDamageType("cramming");
+
+    DamageType DRAGON_BREATH = getDamageType("dragon_breath");
+
+    DamageType DROWN = getDamageType("drown");
+
+    DamageType DRY_OUT = getDamageType("dry_out");
+
+    DamageType ENDER_PEARL = getDamageType("ender_pearl");
+
+    DamageType EXPLOSION = getDamageType("explosion");
+
+    DamageType FALL = getDamageType("fall");
+
+    DamageType FALLING_ANVIL = getDamageType("falling_anvil");
+
+    DamageType FALLING_BLOCK = getDamageType("falling_block");
+
+    DamageType FALLING_STALACTITE = getDamageType("falling_stalactite");
+
+    DamageType FIREBALL = getDamageType("fireball");
+
+    DamageType FIREWORKS = getDamageType("fireworks");
+
+    DamageType FLY_INTO_WALL = getDamageType("fly_into_wall");
+
+    DamageType FREEZE = getDamageType("freeze");
+
+    DamageType GENERIC = getDamageType("generic");
+
+    DamageType GENERIC_KILL = getDamageType("generic_kill");
+
+    DamageType HOT_FLOOR = getDamageType("hot_floor");
+
+    DamageType IN_FIRE = getDamageType("in_fire");
+
+    DamageType IN_WALL = getDamageType("in_wall");
+
+    DamageType INDIRECT_MAGIC = getDamageType("indirect_magic");
+
+    DamageType LAVA = getDamageType("lava");
+
+    DamageType LIGHTNING_BOLT = getDamageType("lightning_bolt");
+
+    DamageType MACE_SMASH = getDamageType("mace_smash");
+
+    DamageType MAGIC = getDamageType("magic");
+
+    DamageType MOB_ATTACK = getDamageType("mob_attack");
+
+    DamageType MOB_ATTACK_NO_AGGRO = getDamageType("mob_attack_no_aggro");
+
+    DamageType MOB_PROJECTILE = getDamageType("mob_projectile");
+
+    DamageType ON_FIRE = getDamageType("on_fire");
+
+    DamageType OUT_OF_WORLD = getDamageType("out_of_world");
+
+    DamageType OUTSIDE_BORDER = getDamageType("outside_border");
+
+    DamageType PLAYER_ATTACK = getDamageType("player_attack");
+
+    DamageType PLAYER_EXPLOSION = getDamageType("player_explosion");
+
+    DamageType SONIC_BOOM = getDamageType("sonic_boom");
+
+    DamageType SPIT = getDamageType("spit");
+
+    DamageType STALAGMITE = getDamageType("stalagmite");
+
+    DamageType STARVE = getDamageType("starve");
+
+    DamageType STING = getDamageType("sting");
+
+    DamageType SWEET_BERRY_BUSH = getDamageType("sweet_berry_bush");
+
+    DamageType THORNS = getDamageType("thorns");
+
+    DamageType THROWN = getDamageType("thrown");
+
+    DamageType TRIDENT = getDamageType("trident");
+
+    DamageType UNATTRIBUTED_FIREBALL = getDamageType("unattributed_fireball");
+
+    DamageType WIND_CHARGE = getDamageType("wind_charge");
+
+    DamageType WITHER = getDamageType("wither");
+
+    DamageType WITHER_SKULL = getDamageType("wither_skull");
+    // End generate - DamageType
 
     @NotNull
     private static DamageType getDamageType(@NotNull String key) {
diff --git a/paper-api/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java b/paper-api/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
index 6fcc15d588..7a89a472e9 100644
--- a/paper-api/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
+++ b/paper-api/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
@@ -6,7 +6,10 @@ import org.jetbrains.annotations.NotNull;
 
 /**
  * Represents the applicable target for a {@link Enchantment}
+ *
+ * @deprecated enchantment groupings are now managed by tags, not categories
  */
+@Deprecated(since = "1.20.5", forRemoval = true)
 public enum EnchantmentTarget {
     /**
      * Allows the Enchantment to be placed on all items
diff --git a/paper-api/src/main/java/org/bukkit/entity/Boat.java b/paper-api/src/main/java/org/bukkit/entity/Boat.java
index aedfdf41d4..696d2a3961 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Boat.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Boat.java
@@ -175,12 +175,15 @@ public interface Boat extends Vehicle, io.papermc.paper.entity.Leashable { // Pa
      */
     public enum Status {
 
-        NOT_IN_WORLD, // Paper
+        NOT_IN_WORLD,
+        // Start generate - BoatStatus
+        // @GeneratedFrom 1.21.4
         IN_WATER,
         UNDER_WATER,
         UNDER_FLOWING_WATER,
         ON_LAND,
         IN_AIR;
+        // End generate - BoatStatus
     }
 
     // Paper start
diff --git a/paper-api/src/main/java/org/bukkit/entity/Cat.java b/paper-api/src/main/java/org/bukkit/entity/Cat.java
index fca4671c69..ccb7a2a5d5 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Cat.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Cat.java
@@ -52,18 +52,31 @@ public interface Cat extends Tameable, Sittable, io.papermc.paper.entity.CollarC
      */
     interface Type extends OldEnum<Type>, Keyed {
 
-        Type TABBY = getType("tabby");
-        Type BLACK = getType("black");
-        Type RED = getType("red");
-        Type SIAMESE = getType("siamese");
-        Type BRITISH_SHORTHAIR = getType("british_shorthair");
-        Type CALICO = getType("calico");
-        Type PERSIAN = getType("persian");
-        Type RAGDOLL = getType("ragdoll");
-        Type WHITE = getType("white");
-        Type JELLIE = getType("jellie");
+        // Start generate - CatType
+        // @GeneratedFrom 1.21.4
         Type ALL_BLACK = getType("all_black");
 
+        Type BLACK = getType("black");
+
+        Type BRITISH_SHORTHAIR = getType("british_shorthair");
+
+        Type CALICO = getType("calico");
+
+        Type JELLIE = getType("jellie");
+
+        Type PERSIAN = getType("persian");
+
+        Type RAGDOLL = getType("ragdoll");
+
+        Type RED = getType("red");
+
+        Type SIAMESE = getType("siamese");
+
+        Type TABBY = getType("tabby");
+
+        Type WHITE = getType("white");
+        // End generate - CatType
+
         @NotNull
         private static Type getType(@NotNull String key) {
             return Registry.CAT_VARIANT.getOrThrow(NamespacedKey.minecraft(key));
diff --git a/paper-api/src/main/java/org/bukkit/entity/EntityType.java b/paper-api/src/main/java/org/bukkit/entity/EntityType.java
index 29d2251166..78d8df31b0 100644
--- a/paper-api/src/main/java/org/bukkit/entity/EntityType.java
+++ b/paper-api/src/main/java/org/bukkit/entity/EntityType.java
@@ -45,299 +45,158 @@ import org.jetbrains.annotations.Nullable;
 
 public enum EntityType implements Keyed, Translatable, net.kyori.adventure.translation.Translatable, io.papermc.paper.world.flag.FeatureDependant { // Paper - translatable
 
-    // These strings MUST match the strings in nms.EntityTypes and are case sensitive.
-    /**
-     * An item resting on the ground.
-     * <p>
-     * Spawn with {@link World#dropItem(Location, ItemStack)} or {@link
-     * World#dropItemNaturally(Location, ItemStack)}
-     */
-    ITEM("item", Item.class, 1),
-    /**
-     * An experience orb.
-     */
-    EXPERIENCE_ORB("experience_orb", ExperienceOrb.class, 2),
-    /**
-     * @see AreaEffectCloud
-     */
+    // Start generate - EntityType
+    // @GeneratedFrom 1.21.4
+    ACACIA_BOAT("acacia_boat", AcaciaBoat.class, -1),
+    ACACIA_CHEST_BOAT("acacia_chest_boat", AcaciaChestBoat.class, -1),
+    ALLAY("allay", Allay.class, -1),
     AREA_EFFECT_CLOUD("area_effect_cloud", AreaEffectCloud.class, 3),
-    /**
-     * @see ElderGuardian
-     */
-    ELDER_GUARDIAN("elder_guardian", ElderGuardian.class, 4),
-    /**
-     * @see WitherSkeleton
-     */
-    WITHER_SKELETON("wither_skeleton", WitherSkeleton.class, 5),
-    /**
-     * @see Stray
-     */
-    STRAY("stray", Stray.class, 6),
-    /**
-     * A flying chicken egg.
-     */
-    EGG("egg", Egg.class, 7),
-    /**
-     * A leash attached to a fencepost.
-     */
-    LEASH_KNOT("leash_knot", LeashHitch.class, 8),
-    /**
-     * A painting on a wall.
-     */
-    PAINTING("painting", Painting.class, 9),
-    /**
-     * An arrow projectile; may get stuck in the ground.
-     */
-    ARROW("arrow", Arrow.class, 10),
-    /**
-     * A flying snowball.
-     */
-    SNOWBALL("snowball", Snowball.class, 11),
-    /**
-     * A flying large fireball, as thrown by a Ghast for example.
-     */
-    FIREBALL("fireball", LargeFireball.class, 12),
-    /**
-     * A flying small fireball, such as thrown by a Blaze or player.
-     */
-    SMALL_FIREBALL("small_fireball", SmallFireball.class, 13),
-    /**
-     * A flying ender pearl.
-     */
-    ENDER_PEARL("ender_pearl", EnderPearl.class, 14),
-    /**
-     * An ender eye signal.
-     */
-    EYE_OF_ENDER("eye_of_ender", EnderSignal.class, 15),
-    /**
-     * A flying splash potion.
-     */
-    POTION("potion", ThrownPotion.class, 16),
-    /**
-     * A flying experience bottle.
-     */
-    EXPERIENCE_BOTTLE("experience_bottle", ThrownExpBottle.class, 17),
-    /**
-     * An item frame on a wall.
-     */
-    ITEM_FRAME("item_frame", ItemFrame.class, 18),
-    /**
-     * A flying wither skull projectile.
-     */
-    WITHER_SKULL("wither_skull", WitherSkull.class, 19),
-    /**
-     * Primed TNT that is about to explode.
-     */
-    TNT("tnt", TNTPrimed.class, 20),
-    /**
-     * A block that is going to or is about to fall.
-     */
-    FALLING_BLOCK("falling_block", FallingBlock.class, 21),
-    /**
-     * Internal representation of a Firework once it has been launched.
-     */
-    FIREWORK_ROCKET("firework_rocket", Firework.class, 22),
-    /**
-     * @see Husk
-     */
-    HUSK("husk", Husk.class, 23),
-    /**
-     * Like {@link #ARROW} but causes the {@link PotionEffectType#GLOWING} effect on all team members.
-     */
-    SPECTRAL_ARROW("spectral_arrow", SpectralArrow.class, 24),
-    /**
-     * Bullet fired by {@link #SHULKER}.
-     */
-    SHULKER_BULLET("shulker_bullet", ShulkerBullet.class, 25),
-    /**
-     * Like {@link #FIREBALL} but with added effects.
-     */
-    DRAGON_FIREBALL("dragon_fireball", DragonFireball.class, 26),
-    /**
-     * @see ZombieVillager
-     */
-    ZOMBIE_VILLAGER("zombie_villager", ZombieVillager.class, 27),
-    /**
-     * @see SkeletonHorse
-     */
-    SKELETON_HORSE("skeleton_horse", SkeletonHorse.class, 28),
-    /**
-     * @see ZombieHorse
-     */
-    ZOMBIE_HORSE("zombie_horse", ZombieHorse.class, 29),
-    /**
-     * Mechanical entity with an inventory for placing weapons / armor into.
-     */
+    ARMADILLO("armadillo", Armadillo.class, -1),
     ARMOR_STAND("armor_stand", ArmorStand.class, 30),
-    /**
-     * @see Donkey
-     */
-    DONKEY("donkey", Donkey.class, 31),
-    /**
-     * @see Mule
-     */
-    MULE("mule", Mule.class, 32),
-    /**
-     * @see EvokerFangs
-     */
-    EVOKER_FANGS("evoker_fangs", EvokerFangs.class, 33),
-    /**
-     * @see Evoker
-     */
-    EVOKER("evoker", Evoker.class, 34),
-    /**
-     * @see Vex
-     */
-    VEX("vex", Vex.class, 35),
-    /**
-     * @see Vindicator
-     */
-    VINDICATOR("vindicator", Vindicator.class, 36),
-    /**
-     * @see Illusioner
-     */
-    ILLUSIONER("illusioner", Illusioner.class, 37),
-    /**
-     * @see CommandMinecart
-     */
-    COMMAND_BLOCK_MINECART("command_block_minecart", CommandMinecart.class, 40),
-    /**
-     * @see RideableMinecart
-     */
-    MINECART("minecart", RideableMinecart.class, 42),
-    /**
-     * @see StorageMinecart
-     */
-    CHEST_MINECART("chest_minecart", StorageMinecart.class, 43),
-    /**
-     * @see PoweredMinecart
-     */
-    FURNACE_MINECART("furnace_minecart", PoweredMinecart.class, 44),
-    /**
-     * @see ExplosiveMinecart
-     */
-    TNT_MINECART("tnt_minecart", ExplosiveMinecart.class, 45),
-    /**
-     * @see HopperMinecart
-     */
-    HOPPER_MINECART("hopper_minecart", HopperMinecart.class, 46),
-    /**
-     * @see SpawnerMinecart
-     */
-    SPAWNER_MINECART("spawner_minecart", SpawnerMinecart.class, 47),
-    CREEPER("creeper", Creeper.class, 50),
-    SKELETON("skeleton", Skeleton.class, 51),
-    SPIDER("spider", Spider.class, 52),
-    GIANT("giant", Giant.class, 53),
-    ZOMBIE("zombie", Zombie.class, 54),
-    SLIME("slime", Slime.class, 55),
-    GHAST("ghast", Ghast.class, 56),
-    ZOMBIFIED_PIGLIN("zombified_piglin", PigZombie.class, 57),
-    ENDERMAN("enderman", Enderman.class, 58),
-    CAVE_SPIDER("cave_spider", CaveSpider.class, 59),
-    SILVERFISH("silverfish", Silverfish.class, 60),
-    BLAZE("blaze", Blaze.class, 61),
-    MAGMA_CUBE("magma_cube", MagmaCube.class, 62),
-    ENDER_DRAGON("ender_dragon", EnderDragon.class, 63),
-    WITHER("wither", Wither.class, 64),
-    BAT("bat", Bat.class, 65),
-    WITCH("witch", Witch.class, 66),
-    ENDERMITE("endermite", Endermite.class, 67),
-    GUARDIAN("guardian", Guardian.class, 68),
-    SHULKER("shulker", Shulker.class, 69),
-    PIG("pig", Pig.class, 90),
-    SHEEP("sheep", Sheep.class, 91),
-    COW("cow", Cow.class, 92),
-    CHICKEN("chicken", Chicken.class, 93),
-    SQUID("squid", Squid.class, 94),
-    WOLF("wolf", Wolf.class, 95),
-    MOOSHROOM("mooshroom", MushroomCow.class, 96),
-    SNOW_GOLEM("snow_golem", Snowman.class, 97),
-    OCELOT("ocelot", Ocelot.class, 98),
-    IRON_GOLEM("iron_golem", IronGolem.class, 99),
-    HORSE("horse", Horse.class, 100),
-    RABBIT("rabbit", Rabbit.class, 101),
-    POLAR_BEAR("polar_bear", PolarBear.class, 102),
-    LLAMA("llama", Llama.class, 103),
-    LLAMA_SPIT("llama_spit", LlamaSpit.class, 104),
-    PARROT("parrot", Parrot.class, 105),
-    VILLAGER("villager", Villager.class, 120),
-    END_CRYSTAL("end_crystal", EnderCrystal.class, 200),
-    TURTLE("turtle", Turtle.class, -1),
-    PHANTOM("phantom", Phantom.class, -1),
-    TRIDENT("trident", Trident.class, -1),
-    COD("cod", Cod.class, -1),
-    SALMON("salmon", Salmon.class, -1),
-    PUFFERFISH("pufferfish", PufferFish.class, -1),
-    TROPICAL_FISH("tropical_fish", TropicalFish.class, -1),
-    DROWNED("drowned", Drowned.class, -1),
-    DOLPHIN("dolphin", Dolphin.class, -1),
-    CAT("cat", Cat.class, -1),
-    PANDA("panda", Panda.class, -1),
-    PILLAGER("pillager", Pillager.class, -1),
-    RAVAGER("ravager", Ravager.class, -1),
-    TRADER_LLAMA("trader_llama", TraderLlama.class, -1),
-    WANDERING_TRADER("wandering_trader", WanderingTrader.class, -1),
-    FOX("fox", Fox.class, -1),
-    BEE("bee", Bee.class, -1),
-    HOGLIN("hoglin", Hoglin.class, -1),
-    PIGLIN("piglin", Piglin.class, -1),
-    STRIDER("strider", Strider.class, -1),
-    ZOGLIN("zoglin", Zoglin.class, -1),
-    PIGLIN_BRUTE("piglin_brute", PiglinBrute.class, -1),
+    ARROW("arrow", Arrow.class, 10),
     AXOLOTL("axolotl", Axolotl.class, -1),
+    BAMBOO_CHEST_RAFT("bamboo_chest_raft", BambooChestRaft.class, -1),
+    BAMBOO_RAFT("bamboo_raft", BambooRaft.class, -1),
+    BAT("bat", Bat.class, 65),
+    BEE("bee", Bee.class, -1),
+    BIRCH_BOAT("birch_boat", BirchBoat.class, -1),
+    BIRCH_CHEST_BOAT("birch_chest_boat", BirchChestBoat.class, -1),
+    BLAZE("blaze", Blaze.class, 61),
+    BLOCK_DISPLAY("block_display", BlockDisplay.class, -1),
+    BOGGED("bogged", Bogged.class, -1),
+    BREEZE("breeze", Breeze.class, -1),
+    BREEZE_WIND_CHARGE("breeze_wind_charge", BreezeWindCharge.class, -1),
+    CAMEL("camel", Camel.class, -1),
+    CAT("cat", Cat.class, -1),
+    CAVE_SPIDER("cave_spider", CaveSpider.class, 59),
+    CHERRY_BOAT("cherry_boat", CherryBoat.class, -1),
+    CHERRY_CHEST_BOAT("cherry_chest_boat", CherryChestBoat.class, -1),
+    CHEST_MINECART("chest_minecart", StorageMinecart.class, 43),
+    CHICKEN("chicken", Chicken.class, 93),
+    COD("cod", Cod.class, -1),
+    COMMAND_BLOCK_MINECART("command_block_minecart", CommandMinecart.class, 40),
+    COW("cow", Cow.class, 92),
+    CREAKING("creaking", Creaking.class, -1),
+    CREEPER("creeper", Creeper.class, 50),
+    DARK_OAK_BOAT("dark_oak_boat", DarkOakBoat.class, -1),
+    DARK_OAK_CHEST_BOAT("dark_oak_chest_boat", DarkOakChestBoat.class, -1),
+    DOLPHIN("dolphin", Dolphin.class, -1),
+    DONKEY("donkey", Donkey.class, 31),
+    DRAGON_FIREBALL("dragon_fireball", DragonFireball.class, 26),
+    DROWNED("drowned", Drowned.class, -1),
+    EGG("egg", Egg.class, 7),
+    ELDER_GUARDIAN("elder_guardian", ElderGuardian.class, 4),
+    END_CRYSTAL("end_crystal", EnderCrystal.class, 200),
+    ENDER_DRAGON("ender_dragon", EnderDragon.class, 63),
+    ENDER_PEARL("ender_pearl", EnderPearl.class, 14),
+    ENDERMAN("enderman", Enderman.class, 58),
+    ENDERMITE("endermite", Endermite.class, 67),
+    EVOKER("evoker", Evoker.class, 34),
+    EVOKER_FANGS("evoker_fangs", EvokerFangs.class, 33),
+    EXPERIENCE_BOTTLE("experience_bottle", ThrownExpBottle.class, 17),
+    EXPERIENCE_ORB("experience_orb", ExperienceOrb.class, 2),
+    EYE_OF_ENDER("eye_of_ender", EnderSignal.class, 15),
+    FALLING_BLOCK("falling_block", FallingBlock.class, 21),
+    FIREBALL("fireball", Fireball.class, 12),
+    FIREWORK_ROCKET("firework_rocket", Firework.class, 22),
+    FISHING_BOBBER("fishing_bobber", FishHook.class, -1, false),
+    FOX("fox", Fox.class, -1),
+    FROG("frog", Frog.class, -1),
+    FURNACE_MINECART("furnace_minecart", PoweredMinecart.class, 44),
+    GHAST("ghast", Ghast.class, 56),
+    GIANT("giant", Giant.class, 53),
     GLOW_ITEM_FRAME("glow_item_frame", GlowItemFrame.class, -1),
     GLOW_SQUID("glow_squid", GlowSquid.class, -1),
     GOAT("goat", Goat.class, -1),
-    MARKER("marker", Marker.class, -1),
-    ALLAY("allay", Allay.class, -1),
-    FROG("frog", Frog.class, -1),
-    TADPOLE("tadpole", Tadpole.class, -1),
-    WARDEN("warden", Warden.class, -1),
-    CAMEL("camel", Camel.class, -1),
-    BLOCK_DISPLAY("block_display", BlockDisplay.class, -1),
+    GUARDIAN("guardian", Guardian.class, 68),
+    HOGLIN("hoglin", Hoglin.class, -1),
+    HOPPER_MINECART("hopper_minecart", HopperMinecart.class, 46),
+    HORSE("horse", Horse.class, 100),
+    HUSK("husk", Husk.class, 23),
+    ILLUSIONER("illusioner", Illusioner.class, 37),
     INTERACTION("interaction", Interaction.class, -1),
+    IRON_GOLEM("iron_golem", IronGolem.class, 99),
+    ITEM("item", Item.class, 1),
     ITEM_DISPLAY("item_display", ItemDisplay.class, -1),
-    SNIFFER("sniffer", Sniffer.class, -1),
-    TEXT_DISPLAY("text_display", TextDisplay.class, -1),
-    BREEZE("breeze", Breeze.class, -1),
-    WIND_CHARGE("wind_charge", WindCharge.class, -1),
-    BREEZE_WIND_CHARGE("breeze_wind_charge", BreezeWindCharge.class, -1),
-    ARMADILLO("armadillo", Armadillo.class, -1),
-    BOGGED("bogged", Bogged.class, -1),
-    OMINOUS_ITEM_SPAWNER("ominous_item_spawner", OminousItemSpawner.class, -1),
-    ACACIA_BOAT("acacia_boat", AcaciaBoat.class, -1),
-    ACACIA_CHEST_BOAT("acacia_chest_boat", AcaciaChestBoat.class, -1),
-    BAMBOO_RAFT("bamboo_raft", BambooRaft.class, -1),
-    BAMBOO_CHEST_RAFT("bamboo_chest_raft", BambooChestRaft.class, -1),
-    BIRCH_BOAT("birch_boat", BirchBoat.class, -1),
-    BIRCH_CHEST_BOAT("birch_chest_boat", BirchChestBoat.class, -1),
-    CHERRY_BOAT("cherry_boat", CherryBoat.class, -1),
-    CHERRY_CHEST_BOAT("cherry_chest_boat", CherryChestBoat.class, -1),
-    DARK_OAK_BOAT("dark_oak_boat", DarkOakBoat.class, -1),
-    DARK_OAK_CHEST_BOAT("dark_oak_chest_boat", DarkOakChestBoat.class, -1),
+    ITEM_FRAME("item_frame", ItemFrame.class, 18),
     JUNGLE_BOAT("jungle_boat", JungleBoat.class, -1),
     JUNGLE_CHEST_BOAT("jungle_chest_boat", JungleChestBoat.class, -1),
+    LEASH_KNOT("leash_knot", LeashHitch.class, 8),
+    LIGHTNING_BOLT("lightning_bolt", LightningStrike.class, -1),
+    LLAMA("llama", Llama.class, 103),
+    LLAMA_SPIT("llama_spit", LlamaSpit.class, 104),
+    MAGMA_CUBE("magma_cube", MagmaCube.class, 62),
     MANGROVE_BOAT("mangrove_boat", MangroveBoat.class, -1),
     MANGROVE_CHEST_BOAT("mangrove_chest_boat", MangroveChestBoat.class, -1),
+    MARKER("marker", Marker.class, -1),
+    MINECART("minecart", Minecart.class, 42),
+    MOOSHROOM("mooshroom", MushroomCow.class, 96),
+    MULE("mule", Mule.class, 32),
     OAK_BOAT("oak_boat", OakBoat.class, -1),
     OAK_CHEST_BOAT("oak_chest_boat", OakChestBoat.class, -1),
+    OCELOT("ocelot", Ocelot.class, 98),
+    OMINOUS_ITEM_SPAWNER("ominous_item_spawner", OminousItemSpawner.class, -1),
+    PAINTING("painting", Painting.class, 9),
     PALE_OAK_BOAT("pale_oak_boat", PaleOakBoat.class, -1),
     PALE_OAK_CHEST_BOAT("pale_oak_chest_boat", PaleOakChestBoat.class, -1),
+    PANDA("panda", Panda.class, -1),
+    PARROT("parrot", Parrot.class, 105),
+    PHANTOM("phantom", Phantom.class, -1),
+    PIG("pig", Pig.class, 90),
+    PIGLIN("piglin", Piglin.class, -1),
+    PIGLIN_BRUTE("piglin_brute", PiglinBrute.class, -1),
+    PILLAGER("pillager", Pillager.class, -1),
+    PLAYER("player", Player.class, -1, false),
+    POLAR_BEAR("polar_bear", PolarBear.class, 102),
+    POTION("potion", ThrownPotion.class, 16),
+    PUFFERFISH("pufferfish", PufferFish.class, -1),
+    RABBIT("rabbit", Rabbit.class, 101),
+    RAVAGER("ravager", Ravager.class, -1),
+    SALMON("salmon", Salmon.class, -1),
+    SHEEP("sheep", Sheep.class, 91),
+    SHULKER("shulker", Shulker.class, 69),
+    SHULKER_BULLET("shulker_bullet", ShulkerBullet.class, 25),
+    SILVERFISH("silverfish", Silverfish.class, 60),
+    SKELETON("skeleton", Skeleton.class, 51),
+    SKELETON_HORSE("skeleton_horse", SkeletonHorse.class, 28),
+    SLIME("slime", Slime.class, 55),
+    SMALL_FIREBALL("small_fireball", SmallFireball.class, 13),
+    SNIFFER("sniffer", Sniffer.class, -1),
+    SNOW_GOLEM("snow_golem", Snowman.class, 97),
+    SNOWBALL("snowball", Snowball.class, 11),
+    SPAWNER_MINECART("spawner_minecart", SpawnerMinecart.class, 47),
+    SPECTRAL_ARROW("spectral_arrow", SpectralArrow.class, 24),
+    SPIDER("spider", Spider.class, 52),
     SPRUCE_BOAT("spruce_boat", SpruceBoat.class, -1),
     SPRUCE_CHEST_BOAT("spruce_chest_boat", SpruceChestBoat.class, -1),
-    CREAKING("creaking", Creaking.class, -1),
-    /**
-     * A fishing line and bobber.
-     */
-    FISHING_BOBBER("fishing_bobber", FishHook.class, -1, false),
-    /**
-     * A bolt of lightning.
-     * <p>
-     * Spawn with {@link World#strikeLightning(Location)}.
-     */
-    LIGHTNING_BOLT("lightning_bolt", LightningStrike.class, -1),
-    PLAYER("player", Player.class, -1, false),
+    SQUID("squid", Squid.class, 94),
+    STRAY("stray", Stray.class, 6),
+    STRIDER("strider", Strider.class, -1),
+    TADPOLE("tadpole", Tadpole.class, -1),
+    TEXT_DISPLAY("text_display", TextDisplay.class, -1),
+    TNT("tnt", TNTPrimed.class, 20),
+    TNT_MINECART("tnt_minecart", ExplosiveMinecart.class, 45),
+    TRADER_LLAMA("trader_llama", TraderLlama.class, -1),
+    TRIDENT("trident", Trident.class, -1),
+    TROPICAL_FISH("tropical_fish", TropicalFish.class, -1),
+    TURTLE("turtle", Turtle.class, -1),
+    VEX("vex", Vex.class, 35),
+    VILLAGER("villager", Villager.class, 120),
+    VINDICATOR("vindicator", Vindicator.class, 36),
+    WANDERING_TRADER("wandering_trader", WanderingTrader.class, -1),
+    WARDEN("warden", Warden.class, -1),
+    WIND_CHARGE("wind_charge", WindCharge.class, -1),
+    WITCH("witch", Witch.class, 66),
+    WITHER("wither", Wither.class, 64),
+    WITHER_SKELETON("wither_skeleton", WitherSkeleton.class, 5),
+    WITHER_SKULL("wither_skull", WitherSkull.class, 19),
+    WOLF("wolf", Wolf.class, 95),
+    ZOGLIN("zoglin", Zoglin.class, -1),
+    ZOMBIE("zombie", Zombie.class, 54),
+    ZOMBIE_HORSE("zombie_horse", ZombieHorse.class, 29),
+    ZOMBIE_VILLAGER("zombie_villager", ZombieVillager.class, 27),
+    ZOMBIFIED_PIGLIN("zombified_piglin", PigZombie.class, 57),
+    // End generate - EntityType
     /**
      * An unknown entity without an Entity Class
      */
diff --git a/paper-api/src/main/java/org/bukkit/entity/Fox.java b/paper-api/src/main/java/org/bukkit/entity/Fox.java
index 473a7e36ad..2069311e62 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Fox.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Fox.java
@@ -89,8 +89,11 @@ public interface Fox extends Animals, Sittable {
      * Represents the various different fox types there are.
      */
     public enum Type {
+        // Start generate - FoxType
+        // @GeneratedFrom 1.21.4
         RED,
         SNOW;
+        // End generate - FoxType
     }
 
     // Paper start - Add more fox behavior API
diff --git a/paper-api/src/main/java/org/bukkit/entity/Frog.java b/paper-api/src/main/java/org/bukkit/entity/Frog.java
index f661a6b479..6ed083ac00 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Frog.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Frog.java
@@ -50,19 +50,15 @@ public interface Frog extends Animals {
      */
     interface Variant extends OldEnum<Variant>, Keyed {
 
-        /**
-         * Temperate (brown-orange) frog.
-         */
-        Variant TEMPERATE = getVariant("temperate");
-        /**
-         * Warm (gray) frog.
-         */
-        Variant WARM = getVariant("warm");
-        /**
-         * Cold (green) frog.
-         */
+        // Start generate - FrogVariant
+        // @GeneratedFrom 1.21.4
         Variant COLD = getVariant("cold");
 
+        Variant TEMPERATE = getVariant("temperate");
+
+        Variant WARM = getVariant("warm");
+        // End generate - FrogVariant
+
         @NotNull
         private static Variant getVariant(@NotNull String key) {
             return Registry.FROG_VARIANT.getOrThrow(NamespacedKey.minecraft(key));
diff --git a/paper-api/src/main/java/org/bukkit/entity/Panda.java b/paper-api/src/main/java/org/bukkit/entity/Panda.java
index cfe00e42f1..baf08c6ffc 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Panda.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Panda.java
@@ -185,6 +185,8 @@ public interface Panda extends Animals, Sittable {
 
     public enum Gene {
 
+        // Start generate - PandaGene
+        // @GeneratedFrom 1.21.4
         NORMAL(false),
         LAZY(false),
         WORRIED(false),
@@ -192,6 +194,7 @@ public interface Panda extends Animals, Sittable {
         BROWN(true),
         WEAK(true),
         AGGRESSIVE(false);
+        // End generate - PandaGene
 
         private final boolean recessive;
 
diff --git a/paper-api/src/main/java/org/bukkit/entity/Salmon.java b/paper-api/src/main/java/org/bukkit/entity/Salmon.java
index d8a2d44fe5..4fbee9754d 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Salmon.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Salmon.java
@@ -27,17 +27,11 @@ public interface Salmon extends io.papermc.paper.entity.SchoolableFish { // Pape
      */
     public enum Variant {
 
-        /**
-         * Small salmon.
-         */
+        // Start generate - SalmonVariant
+        // @GeneratedFrom 1.21.4
         SMALL,
-        /**
-         * Default salmon.
-         */
         MEDIUM,
-        /**
-         * Large salmon.
-         */
         LARGE;
+        // End generate - SalmonVariant
     }
 }
diff --git a/paper-api/src/main/java/org/bukkit/entity/Sniffer.java b/paper-api/src/main/java/org/bukkit/entity/Sniffer.java
index 15a0a733b0..59a41618e7 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Sniffer.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Sniffer.java
@@ -74,6 +74,8 @@ public interface Sniffer extends Animals {
      * Represents the current state of the Sniffer.
      */
     public enum State {
+        // Start generate - SnifferState
+        // @GeneratedFrom 1.21.4
         IDLING,
         FEELING_HAPPY,
         SCENTING,
@@ -81,5 +83,6 @@ public interface Sniffer extends Animals {
         SEARCHING,
         DIGGING,
         RISING;
+        // End generate - SnifferState
     }
 }
diff --git a/paper-api/src/main/java/org/bukkit/entity/TropicalFish.java b/paper-api/src/main/java/org/bukkit/entity/TropicalFish.java
index 84bba32e80..2b60442d98 100644
--- a/paper-api/src/main/java/org/bukkit/entity/TropicalFish.java
+++ b/paper-api/src/main/java/org/bukkit/entity/TropicalFish.java
@@ -60,6 +60,8 @@ public interface TropicalFish extends io.papermc.paper.entity.SchoolableFish { /
      */
     public static enum Pattern {
 
+        // Start generate - TropicalFishPattern
+        // @GeneratedFrom 1.21.4
         KOB,
         SUNSTREAK,
         SNOOPER,
@@ -72,5 +74,6 @@ public interface TropicalFish extends io.papermc.paper.entity.SchoolableFish { /
         BLOCKFISH,
         BETTY,
         CLAYFISH;
+        // End generate - TropicalFishPattern
     }
 }
diff --git a/paper-api/src/main/java/org/bukkit/entity/Villager.java b/paper-api/src/main/java/org/bukkit/entity/Villager.java
index 1db3742024..6e1020cbe0 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Villager.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Villager.java
@@ -171,13 +171,22 @@ public interface Villager extends AbstractVillager {
      */
     interface Type extends OldEnum<Type>, Keyed {
 
+        // Start generate - VillagerType
+        // @GeneratedFrom 1.21.4
         Type DESERT = getType("desert");
+
         Type JUNGLE = getType("jungle");
+
         Type PLAINS = getType("plains");
+
         Type SAVANNA = getType("savanna");
+
         Type SNOW = getType("snow");
+
         Type SWAMP = getType("swamp");
+
         Type TAIGA = getType("taiga");
+        // End generate - VillagerType
 
         @NotNull
         private static Type getType(@NotNull String key) {
@@ -214,77 +223,94 @@ public interface Villager extends AbstractVillager {
      */
     interface Profession extends OldEnum<Profession>, Keyed, net.kyori.adventure.translation.Translatable {
 
-        Profession NONE = getProfession("none");
+        // Start generate - VillagerProfession
+        // @GeneratedFrom 1.21.4
         /**
          * Armorer profession. Wears a black apron. Armorers primarily trade for
          * iron armor, chainmail armor, and sometimes diamond armor.
          */
         Profession ARMORER = getProfession("armorer");
+
         /**
          * Butcher profession. Wears a white apron. Butchers primarily trade for
          * raw and cooked food.
          */
         Profession BUTCHER = getProfession("butcher");
+
         /**
          * Cartographer profession. Wears a white robe. Cartographers primarily
          * trade for explorer maps and some paper.
          */
         Profession CARTOGRAPHER = getProfession("cartographer");
+
         /**
          * Cleric profession. Wears a purple robe. Clerics primarily trade for
          * rotten flesh, gold ingot, redstone, lapis, ender pearl, glowstone,
          * and bottle o' enchanting.
          */
         Profession CLERIC = getProfession("cleric");
+
         /**
          * Farmer profession. Wears a brown robe. Farmers primarily trade for
          * food-related items.
          */
         Profession FARMER = getProfession("farmer");
+
         /**
          * Fisherman profession. Wears a brown robe. Fisherman primarily trade
          * for fish, as well as possibly selling string and/or coal.
          */
         Profession FISHERMAN = getProfession("fisherman");
+
         /**
          * Fletcher profession. Wears a brown robe. Fletchers primarily trade
          * for string, bows, and arrows.
          */
         Profession FLETCHER = getProfession("fletcher");
+
         /**
          * Leatherworker profession. Wears a white apron. Leatherworkers
          * primarily trade for leather, and leather armor, as well as saddles.
          */
         Profession LEATHERWORKER = getProfession("leatherworker");
+
         /**
          * Librarian profession. Wears a white robe. Librarians primarily trade
          * for paper, books, and enchanted books.
          */
         Profession LIBRARIAN = getProfession("librarian");
+
         /**
          * Mason profession.
          */
         Profession MASON = getProfession("mason");
+
         /**
          * Nitwit profession. Wears a green apron, cannot trade. Nitwit
          * villagers do not do anything. They do not have any trades by default.
          */
         Profession NITWIT = getProfession("nitwit");
+
+        Profession NONE = getProfession("none");
+
         /**
          * Shepherd profession. Wears a brown robe. Shepherds primarily trade for
          * wool items, and shears.
          */
         Profession SHEPHERD = getProfession("shepherd");
+
         /**
          * Toolsmith profession. Wears a black apron. Tool smiths primarily
          * trade for iron and diamond tools.
          */
         Profession TOOLSMITH = getProfession("toolsmith");
+
         /**
          * Weaponsmith profession. Wears a black apron. Weapon smiths primarily
          * trade for iron and diamond weapons, sometimes enchanted.
          */
         Profession WEAPONSMITH = getProfession("weaponsmith");
+        // End generate - VillagerProfession
 
         @NotNull
         private static Profession getProfession(@NotNull String key) {
diff --git a/paper-api/src/main/java/org/bukkit/entity/Wolf.java b/paper-api/src/main/java/org/bukkit/entity/Wolf.java
index 346fdddd2e..7dd79e9bb9 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Wolf.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Wolf.java
@@ -95,16 +95,27 @@ public interface Wolf extends Tameable, Sittable, io.papermc.paper.entity.Collar
      */
     interface Variant extends Keyed {
 
-        Variant PALE = getVariant("pale");
-        Variant SPOTTED = getVariant("spotted");
-        Variant SNOWY = getVariant("snowy");
-        Variant BLACK = getVariant("black");
+        // Start generate - WolfVariant
+        // @GeneratedFrom 1.21.4
         Variant ASHEN = getVariant("ashen");
-        Variant RUSTY = getVariant("rusty");
-        Variant WOODS = getVariant("woods");
+
+        Variant BLACK = getVariant("black");
+
         Variant CHESTNUT = getVariant("chestnut");
+
+        Variant PALE = getVariant("pale");
+
+        Variant RUSTY = getVariant("rusty");
+
+        Variant SNOWY = getVariant("snowy");
+
+        Variant SPOTTED = getVariant("spotted");
+
         Variant STRIPED = getVariant("striped");
 
+        Variant WOODS = getVariant("woods");
+        // End generate - WolfVariant
+
         @NotNull
         private static Variant getVariant(@NotNull String key) {
             return RegistryAccess.registryAccess().getRegistry(RegistryKey.WOLF_VARIANT).getOrThrow(NamespacedKey.minecraft(key));
diff --git a/paper-api/src/main/java/org/bukkit/entity/memory/MemoryKey.java b/paper-api/src/main/java/org/bukkit/entity/memory/MemoryKey.java
index d615c006c9..289d98d7a0 100644
--- a/paper-api/src/main/java/org/bukkit/entity/memory/MemoryKey.java
+++ b/paper-api/src/main/java/org/bukkit/entity/memory/MemoryKey.java
@@ -44,31 +44,90 @@ public final class MemoryKey<T> implements Keyed {
         return tClass;
     }
 
-    private static final Map<NamespacedKey, MemoryKey> MEMORY_KEYS = new HashMap<>();
-    //
-    public static final MemoryKey<Location> HOME = new MemoryKey<>(NamespacedKey.minecraft("home"), Location.class);
-    public static final MemoryKey<Location> POTENTIAL_JOB_SITE = new MemoryKey<>(NamespacedKey.minecraft("potential_job_site"), Location.class);
-    public static final MemoryKey<Location> JOB_SITE = new MemoryKey<>(NamespacedKey.minecraft("job_site"), Location.class);
-    public static final MemoryKey<Location> MEETING_POINT = new MemoryKey<>(NamespacedKey.minecraft("meeting_point"), Location.class);
-    public static final MemoryKey<Boolean> GOLEM_DETECTED_RECENTLY = new MemoryKey<>(NamespacedKey.minecraft("golem_detected_recently"), Boolean.class);
-    public static final MemoryKey<Long> LAST_SLEPT = new MemoryKey<>(NamespacedKey.minecraft("last_slept"), Long.class);
-    public static final MemoryKey<Long> LAST_WOKEN = new MemoryKey<>(NamespacedKey.minecraft("last_woken"), Long.class);
-    public static final MemoryKey<Long> LAST_WORKED_AT_POI = new MemoryKey<>(NamespacedKey.minecraft("last_worked_at_poi"), Long.class);
-    public static final MemoryKey<Boolean> UNIVERSAL_ANGER = new MemoryKey<>(NamespacedKey.minecraft("universal_anger"), Boolean.class);
-    public static final MemoryKey<UUID> ANGRY_AT = new MemoryKey<>(NamespacedKey.minecraft("angry_at"), UUID.class);
-    public static final MemoryKey<Boolean> ADMIRING_ITEM = new MemoryKey<>(NamespacedKey.minecraft("admiring_item"), Boolean.class);
+    private static final Map<NamespacedKey, MemoryKey<?>> MEMORY_KEYS = new HashMap<>();
+
+    // Start generate - MemoryKey
+    // @GeneratedFrom 1.21.4
     public static final MemoryKey<Boolean> ADMIRING_DISABLED = new MemoryKey<>(NamespacedKey.minecraft("admiring_disabled"), Boolean.class);
-    public static final MemoryKey<Boolean> HUNTED_RECENTLY = new MemoryKey<>(NamespacedKey.minecraft("hunted_recently"), Boolean.class);
-    public static final MemoryKey<Integer> PLAY_DEAD_TICKS = new MemoryKey<>(NamespacedKey.minecraft("play_dead_ticks"), Integer.class);
-    public static final MemoryKey<Integer> TEMPTATION_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("temptation_cooldown_ticks"), Integer.class);
-    public static final MemoryKey<Boolean> IS_TEMPTED = new MemoryKey<>(NamespacedKey.minecraft("is_tempted"), Boolean.class);
-    public static final MemoryKey<Integer> LONG_JUMP_COOLING_DOWN = new MemoryKey<>(NamespacedKey.minecraft("long_jump_cooling_down"), Integer.class);
+
+    public static final MemoryKey<Boolean> ADMIRING_ITEM = new MemoryKey<>(NamespacedKey.minecraft("admiring_item"), Boolean.class);
+
+    public static final MemoryKey<UUID> ANGRY_AT = new MemoryKey<>(NamespacedKey.minecraft("angry_at"), UUID.class);
+
+    public static final MemoryKey<Boolean> ATE_RECENTLY = new MemoryKey<>(NamespacedKey.minecraft("ate_recently"), Boolean.class);
+
+    public static final MemoryKey<Boolean> ATTACK_COOLING_DOWN = new MemoryKey<>(NamespacedKey.minecraft("attack_cooling_down"), Boolean.class);
+
+    public static final MemoryKey<Long> CANT_REACH_WALK_TARGET_SINCE = new MemoryKey<>(NamespacedKey.minecraft("cant_reach_walk_target_since"), Long.class);
+
+    public static final MemoryKey<Boolean> DANCING = new MemoryKey<>(NamespacedKey.minecraft("dancing"), Boolean.class);
+
+    public static final MemoryKey<Boolean> DANGER_DETECTED_RECENTLY = new MemoryKey<>(NamespacedKey.minecraft("danger_detected_recently"), Boolean.class);
+
+    public static final MemoryKey<Boolean> DISABLE_WALK_TO_ADMIRE_ITEM = new MemoryKey<>(NamespacedKey.minecraft("disable_walk_to_admire_item"), Boolean.class);
+
+    public static final MemoryKey<Integer> GAZE_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("gaze_cooldown_ticks"), Integer.class);
+
+    public static final MemoryKey<Boolean> GOLEM_DETECTED_RECENTLY = new MemoryKey<>(NamespacedKey.minecraft("golem_detected_recently"), Boolean.class);
+
     public static final MemoryKey<Boolean> HAS_HUNTING_COOLDOWN = new MemoryKey<>(NamespacedKey.minecraft("has_hunting_cooldown"), Boolean.class);
-    public static final MemoryKey<Integer> RAM_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("ram_cooldown_ticks"), Integer.class);
-    public static final MemoryKey<UUID> LIKED_PLAYER = new MemoryKey<>(NamespacedKey.minecraft("liked_player"), UUID.class);
-    public static final MemoryKey<Location> LIKED_NOTEBLOCK_POSITION = new MemoryKey<>(NamespacedKey.minecraft("liked_noteblock"), Location.class);
-    public static final MemoryKey<Integer> LIKED_NOTEBLOCK_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("liked_noteblock_cooldown_ticks"), Integer.class);
+
+    public static final MemoryKey<Long> HEARD_BELL_TIME = new MemoryKey<>(NamespacedKey.minecraft("heard_bell_time"), Long.class);
+
+    public static final MemoryKey<Location> HIDING_PLACE = new MemoryKey<>(NamespacedKey.minecraft("hiding_place"), Location.class);
+
+    public static final MemoryKey<Location> HOME = new MemoryKey<>(NamespacedKey.minecraft("home"), Location.class);
+
+    public static final MemoryKey<Boolean> HUNTED_RECENTLY = new MemoryKey<>(NamespacedKey.minecraft("hunted_recently"), Boolean.class);
+
+    public static final MemoryKey<Boolean> IS_PANICKING = new MemoryKey<>(NamespacedKey.minecraft("is_panicking"), Boolean.class);
+
+    public static final MemoryKey<Boolean> IS_TEMPTED = new MemoryKey<>(NamespacedKey.minecraft("is_tempted"), Boolean.class);
+
     public static final MemoryKey<Integer> ITEM_PICKUP_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("item_pickup_cooldown_ticks"), Integer.class);
+
+    public static final MemoryKey<Location> JOB_SITE = new MemoryKey<>(NamespacedKey.minecraft("job_site"), Location.class);
+
+    public static final MemoryKey<Long> LAST_SLEPT = new MemoryKey<>(NamespacedKey.minecraft("last_slept"), Long.class);
+
+    public static final MemoryKey<Long> LAST_WOKEN = new MemoryKey<>(NamespacedKey.minecraft("last_woken"), Long.class);
+
+    public static final MemoryKey<Long> LAST_WORKED_AT_POI = new MemoryKey<>(NamespacedKey.minecraft("last_worked_at_poi"), Long.class);
+
+    public static final MemoryKey<Location> LIKED_NOTEBLOCK_POSITION = new MemoryKey<>(NamespacedKey.minecraft("liked_noteblock"), Location.class);
+
+    public static final MemoryKey<Integer> LIKED_NOTEBLOCK_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("liked_noteblock_cooldown_ticks"), Integer.class);
+
+    public static final MemoryKey<UUID> LIKED_PLAYER = new MemoryKey<>(NamespacedKey.minecraft("liked_player"), UUID.class);
+
+    public static final MemoryKey<Integer> LONG_JUMP_COOLING_DOWN = new MemoryKey<>(NamespacedKey.minecraft("long_jump_cooling_down"), Integer.class);
+
+    public static final MemoryKey<Boolean> LONG_JUMP_MID_JUMP = new MemoryKey<>(NamespacedKey.minecraft("long_jump_mid_jump"), Boolean.class);
+
+    public static final MemoryKey<Location> MEETING_POINT = new MemoryKey<>(NamespacedKey.minecraft("meeting_point"), Location.class);
+
+    public static final MemoryKey<Boolean> PACIFIED = new MemoryKey<>(NamespacedKey.minecraft("pacified"), Boolean.class);
+
+    public static final MemoryKey<Integer> PLAY_DEAD_TICKS = new MemoryKey<>(NamespacedKey.minecraft("play_dead_ticks"), Integer.class);
+
+    public static final MemoryKey<Location> POTENTIAL_JOB_SITE = new MemoryKey<>(NamespacedKey.minecraft("potential_job_site"), Location.class);
+
+    public static final MemoryKey<Integer> RAM_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("ram_cooldown_ticks"), Integer.class);
+
+    public static final MemoryKey<Boolean> SNIFFER_DIGGING = new MemoryKey<>(NamespacedKey.minecraft("sniffer_digging"), Boolean.class);
+
+    public static final MemoryKey<Boolean> SNIFFER_HAPPY = new MemoryKey<>(NamespacedKey.minecraft("sniffer_happy"), Boolean.class);
+
+    public static final MemoryKey<Integer> TEMPTATION_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("temptation_cooldown_ticks"), Integer.class);
+
+    public static final MemoryKey<Integer> TIME_TRYING_TO_REACH_ADMIRE_ITEM = new MemoryKey<>(NamespacedKey.minecraft("time_trying_to_reach_admire_item"), Integer.class);
+
+    public static final MemoryKey<Boolean> UNIVERSAL_ANGER = new MemoryKey<>(NamespacedKey.minecraft("universal_anger"), Boolean.class);
+
+    public static final MemoryKey<Integer> VISIBLE_ADULT_HOGLIN_COUNT = new MemoryKey<>(NamespacedKey.minecraft("visible_adult_hoglin_count"), Integer.class);
+
+    public static final MemoryKey<Integer> VISIBLE_ADULT_PIGLIN_COUNT = new MemoryKey<>(NamespacedKey.minecraft("visible_adult_piglin_count"), Integer.class);
+    // End generate - MemoryKey
     /**
      * @deprecated this constant uses the wrong generic type, the sniffer now stores different positions
      * from possibly different worlds. Use the relevant methods in {@link org.bukkit.entity.Sniffer} directly
@@ -86,7 +145,7 @@ public final class MemoryKey<T> implements Keyed {
      * available under that key
      */
     @Nullable
-    public static MemoryKey getByKey(@NotNull NamespacedKey namespacedKey) {
+    public static MemoryKey<?> getByKey(@NotNull NamespacedKey namespacedKey) {
         return MEMORY_KEYS.get(namespacedKey);
     }
 
@@ -96,7 +155,7 @@ public final class MemoryKey<T> implements Keyed {
      * @return the memoryKeys
      */
     @NotNull
-    public static Set<MemoryKey> values() {
+    public static Set<MemoryKey<?>> values() {
         return new HashSet<>(MEMORY_KEYS.values());
     }
 }
diff --git a/paper-api/src/main/java/org/bukkit/generator/structure/Structure.java b/paper-api/src/main/java/org/bukkit/generator/structure/Structure.java
index 228df69a66..9534f990f1 100644
--- a/paper-api/src/main/java/org/bukkit/generator/structure/Structure.java
+++ b/paper-api/src/main/java/org/bukkit/generator/structure/Structure.java
@@ -16,41 +16,77 @@ import org.jetbrains.annotations.NotNull;
  */
 public abstract class Structure implements Keyed {
 
-    public static final Structure PILLAGER_OUTPOST = getStructure("pillager_outpost");
-    public static final Structure MINESHAFT = getStructure("mineshaft");
-    public static final Structure MINESHAFT_MESA = getStructure("mineshaft_mesa");
-    public static final Structure MANSION = getStructure("mansion");
-    public static final Structure JUNGLE_PYRAMID = getStructure("jungle_pyramid");
-    public static final Structure DESERT_PYRAMID = getStructure("desert_pyramid");
-    public static final Structure IGLOO = getStructure("igloo");
-    public static final Structure SHIPWRECK = getStructure("shipwreck");
-    public static final Structure SHIPWRECK_BEACHED = getStructure("shipwreck_beached");
-    public static final Structure SWAMP_HUT = getStructure("swamp_hut");
-    public static final Structure STRONGHOLD = getStructure("stronghold");
-    public static final Structure MONUMENT = getStructure("monument");
-    public static final Structure OCEAN_RUIN_COLD = getStructure("ocean_ruin_cold");
-    public static final Structure OCEAN_RUIN_WARM = getStructure("ocean_ruin_warm");
-    public static final Structure FORTRESS = getStructure("fortress");
-    public static final Structure NETHER_FOSSIL = getStructure("nether_fossil");
-    public static final Structure END_CITY = getStructure("end_city");
-    public static final Structure BURIED_TREASURE = getStructure("buried_treasure");
-    public static final Structure BASTION_REMNANT = getStructure("bastion_remnant");
-    public static final Structure VILLAGE_PLAINS = getStructure("village_plains");
-    public static final Structure VILLAGE_DESERT = getStructure("village_desert");
-    public static final Structure VILLAGE_SAVANNA = getStructure("village_savanna");
-    public static final Structure VILLAGE_SNOWY = getStructure("village_snowy");
-    public static final Structure VILLAGE_TAIGA = getStructure("village_taiga");
-    public static final Structure RUINED_PORTAL = getStructure("ruined_portal");
-    public static final Structure RUINED_PORTAL_DESERT = getStructure("ruined_portal_desert");
-    public static final Structure RUINED_PORTAL_JUNGLE = getStructure("ruined_portal_jungle");
-    public static final Structure RUINED_PORTAL_SWAMP = getStructure("ruined_portal_swamp");
-    public static final Structure RUINED_PORTAL_MOUNTAIN = getStructure("ruined_portal_mountain");
-    public static final Structure RUINED_PORTAL_OCEAN = getStructure("ruined_portal_ocean");
-    public static final Structure RUINED_PORTAL_NETHER = getStructure("ruined_portal_nether");
+    // Start generate - Structure
+    // @GeneratedFrom 1.21.4
     public static final Structure ANCIENT_CITY = getStructure("ancient_city");
+
+    public static final Structure BASTION_REMNANT = getStructure("bastion_remnant");
+
+    public static final Structure BURIED_TREASURE = getStructure("buried_treasure");
+
+    public static final Structure DESERT_PYRAMID = getStructure("desert_pyramid");
+
+    public static final Structure END_CITY = getStructure("end_city");
+
+    public static final Structure FORTRESS = getStructure("fortress");
+
+    public static final Structure IGLOO = getStructure("igloo");
+
+    public static final Structure JUNGLE_PYRAMID = getStructure("jungle_pyramid");
+
+    public static final Structure MANSION = getStructure("mansion");
+
+    public static final Structure MINESHAFT = getStructure("mineshaft");
+
+    public static final Structure MINESHAFT_MESA = getStructure("mineshaft_mesa");
+
+    public static final Structure MONUMENT = getStructure("monument");
+
+    public static final Structure NETHER_FOSSIL = getStructure("nether_fossil");
+
+    public static final Structure OCEAN_RUIN_COLD = getStructure("ocean_ruin_cold");
+
+    public static final Structure OCEAN_RUIN_WARM = getStructure("ocean_ruin_warm");
+
+    public static final Structure PILLAGER_OUTPOST = getStructure("pillager_outpost");
+
+    public static final Structure RUINED_PORTAL = getStructure("ruined_portal");
+
+    public static final Structure RUINED_PORTAL_DESERT = getStructure("ruined_portal_desert");
+
+    public static final Structure RUINED_PORTAL_JUNGLE = getStructure("ruined_portal_jungle");
+
+    public static final Structure RUINED_PORTAL_MOUNTAIN = getStructure("ruined_portal_mountain");
+
+    public static final Structure RUINED_PORTAL_NETHER = getStructure("ruined_portal_nether");
+
+    public static final Structure RUINED_PORTAL_OCEAN = getStructure("ruined_portal_ocean");
+
+    public static final Structure RUINED_PORTAL_SWAMP = getStructure("ruined_portal_swamp");
+
+    public static final Structure SHIPWRECK = getStructure("shipwreck");
+
+    public static final Structure SHIPWRECK_BEACHED = getStructure("shipwreck_beached");
+
+    public static final Structure STRONGHOLD = getStructure("stronghold");
+
+    public static final Structure SWAMP_HUT = getStructure("swamp_hut");
+
     public static final Structure TRAIL_RUINS = getStructure("trail_ruins");
+
     public static final Structure TRIAL_CHAMBERS = getStructure("trial_chambers");
 
+    public static final Structure VILLAGE_DESERT = getStructure("village_desert");
+
+    public static final Structure VILLAGE_PLAINS = getStructure("village_plains");
+
+    public static final Structure VILLAGE_SAVANNA = getStructure("village_savanna");
+
+    public static final Structure VILLAGE_SNOWY = getStructure("village_snowy");
+
+    public static final Structure VILLAGE_TAIGA = getStructure("village_taiga");
+    // End generate - Structure
+
     @NotNull
     private static Structure getStructure(@NotNull String name) {
         return RegistryAccess.registryAccess().getRegistry(RegistryKey.STRUCTURE).getOrThrow(NamespacedKey.minecraft(name));
diff --git a/paper-api/src/main/java/org/bukkit/generator/structure/StructureType.java b/paper-api/src/main/java/org/bukkit/generator/structure/StructureType.java
index ffa0fc250f..3649147405 100644
--- a/paper-api/src/main/java/org/bukkit/generator/structure/StructureType.java
+++ b/paper-api/src/main/java/org/bukkit/generator/structure/StructureType.java
@@ -15,22 +15,40 @@ import org.jetbrains.annotations.NotNull;
  */
 public abstract class StructureType implements Keyed {
 
+    // Start generate - StructureType
+    // @GeneratedFrom 1.21.4
     public static final StructureType BURIED_TREASURE = getStructureType("buried_treasure");
+
     public static final StructureType DESERT_PYRAMID = getStructureType("desert_pyramid");
+
     public static final StructureType END_CITY = getStructureType("end_city");
+
     public static final StructureType FORTRESS = getStructureType("fortress");
+
     public static final StructureType IGLOO = getStructureType("igloo");
+
     public static final StructureType JIGSAW = getStructureType("jigsaw");
+
     public static final StructureType JUNGLE_TEMPLE = getStructureType("jungle_temple");
+
     public static final StructureType MINESHAFT = getStructureType("mineshaft");
+
     public static final StructureType NETHER_FOSSIL = getStructureType("nether_fossil");
+
     public static final StructureType OCEAN_MONUMENT = getStructureType("ocean_monument");
+
     public static final StructureType OCEAN_RUIN = getStructureType("ocean_ruin");
+
     public static final StructureType RUINED_PORTAL = getStructureType("ruined_portal");
+
     public static final StructureType SHIPWRECK = getStructureType("shipwreck");
+
     public static final StructureType STRONGHOLD = getStructureType("stronghold");
+
     public static final StructureType SWAMP_HUT = getStructureType("swamp_hut");
+
     public static final StructureType WOODLAND_MANSION = getStructureType("woodland_mansion");
+    // End generate - StructureType
 
     @NotNull
     private static StructureType getStructureType(@NotNull String name) {
diff --git a/paper-api/src/main/java/org/bukkit/inventory/ItemRarity.java b/paper-api/src/main/java/org/bukkit/inventory/ItemRarity.java
index cbce835ed6..c15793e0f2 100644
--- a/paper-api/src/main/java/org/bukkit/inventory/ItemRarity.java
+++ b/paper-api/src/main/java/org/bukkit/inventory/ItemRarity.java
@@ -1,30 +1,26 @@
 package org.bukkit.inventory;
 
+import net.kyori.adventure.text.format.NamedTextColor;
+import net.kyori.adventure.text.format.TextColor;
+
 /**
  * A item's rarity determines the default color of its name. This enum is
  * ordered from least rare to most rare.
  */
 public enum ItemRarity {
 
-    /**
-     * White item name.
-     */
-    COMMON(net.kyori.adventure.text.format.NamedTextColor.WHITE), // Paper
-    /**
-     * Yellow item name.
-     */
-    UNCOMMON(net.kyori.adventure.text.format.NamedTextColor.YELLOW), // Paper
-    /**
-     * Aqua item name.
-     */
-    RARE(net.kyori.adventure.text.format.NamedTextColor.AQUA), // Paper
-    /**
-     * Light purple item name.
-     */
-    EPIC(net.kyori.adventure.text.format.NamedTextColor.LIGHT_PURPLE); // Paper
+    // Start generate - ItemRarity
+    // @GeneratedFrom 1.21.4
+    COMMON(NamedTextColor.WHITE),
+    UNCOMMON(NamedTextColor.YELLOW),
+    RARE(NamedTextColor.AQUA),
+    EPIC(NamedTextColor.LIGHT_PURPLE);
+    // End generate - ItemRarity
+
     // Paper start - improve ItemRarity
-    private final net.kyori.adventure.text.format.NamedTextColor color;
-    ItemRarity(final net.kyori.adventure.text.format.NamedTextColor color) {
+    private final NamedTextColor color;
+
+    ItemRarity(final NamedTextColor color) {
         this.color = color;
     }
 
@@ -33,7 +29,7 @@ public enum ItemRarity {
      *
      * @return the color
      */
-    public net.kyori.adventure.text.format.@org.jetbrains.annotations.NotNull TextColor color() {
+    public @org.jetbrains.annotations.NotNull TextColor color() {
         return this.color;
     }
     // Paper end
diff --git a/paper-api/src/main/java/org/bukkit/inventory/ItemType.java b/paper-api/src/main/java/org/bukkit/inventory/ItemType.java
index 3450c63507..a84fd63329 100644
--- a/paper-api/src/main/java/org/bukkit/inventory/ItemType.java
+++ b/paper-api/src/main/java/org/bukkit/inventory/ItemType.java
@@ -89,2138 +89,2778 @@ public interface ItemType extends Keyed, Translatable, net.kyori.adventure.trans
     }
 
     //<editor-fold desc="ItemTypes" defaultstate="collapsed">
-    /**
-     * Air does not have any ItemMeta
-     */
-    ItemType AIR = getItemType("air");
-    ItemType.Typed<ItemMeta> STONE = getItemType("stone");
-    ItemType.Typed<ItemMeta> GRANITE = getItemType("granite");
-    ItemType.Typed<ItemMeta> POLISHED_GRANITE = getItemType("polished_granite");
-    ItemType.Typed<ItemMeta> DIORITE = getItemType("diorite");
-    ItemType.Typed<ItemMeta> POLISHED_DIORITE = getItemType("polished_diorite");
-    ItemType.Typed<ItemMeta> ANDESITE = getItemType("andesite");
-    ItemType.Typed<ItemMeta> POLISHED_ANDESITE = getItemType("polished_andesite");
-    ItemType.Typed<ItemMeta> DEEPSLATE = getItemType("deepslate");
-    ItemType.Typed<ItemMeta> COBBLED_DEEPSLATE = getItemType("cobbled_deepslate");
-    ItemType.Typed<ItemMeta> POLISHED_DEEPSLATE = getItemType("polished_deepslate");
-    ItemType.Typed<ItemMeta> CALCITE = getItemType("calcite");
-    ItemType.Typed<ItemMeta> TUFF = getItemType("tuff");
-    ItemType.Typed<ItemMeta> TUFF_SLAB = getItemType("tuff_slab");
-    ItemType.Typed<ItemMeta> TUFF_STAIRS = getItemType("tuff_stairs");
-    ItemType.Typed<ItemMeta> TUFF_WALL = getItemType("tuff_wall");
-    ItemType.Typed<ItemMeta> CHISELED_TUFF = getItemType("chiseled_tuff");
-    ItemType.Typed<ItemMeta> POLISHED_TUFF = getItemType("polished_tuff");
-    ItemType.Typed<ItemMeta> POLISHED_TUFF_SLAB = getItemType("polished_tuff_slab");
-    ItemType.Typed<ItemMeta> POLISHED_TUFF_STAIRS = getItemType("polished_tuff_stairs");
-    ItemType.Typed<ItemMeta> POLISHED_TUFF_WALL = getItemType("polished_tuff_wall");
-    ItemType.Typed<ItemMeta> TUFF_BRICKS = getItemType("tuff_bricks");
-    ItemType.Typed<ItemMeta> TUFF_BRICK_SLAB = getItemType("tuff_brick_slab");
-    ItemType.Typed<ItemMeta> TUFF_BRICK_STAIRS = getItemType("tuff_brick_stairs");
-    ItemType.Typed<ItemMeta> TUFF_BRICK_WALL = getItemType("tuff_brick_wall");
-    ItemType.Typed<ItemMeta> CHISELED_TUFF_BRICKS = getItemType("chiseled_tuff_bricks");
-    ItemType.Typed<ItemMeta> DRIPSTONE_BLOCK = getItemType("dripstone_block");
-    ItemType.Typed<ItemMeta> GRASS_BLOCK = getItemType("grass_block");
-    ItemType.Typed<ItemMeta> DIRT = getItemType("dirt");
-    ItemType.Typed<ItemMeta> COARSE_DIRT = getItemType("coarse_dirt");
-    ItemType.Typed<ItemMeta> PODZOL = getItemType("podzol");
-    ItemType.Typed<ItemMeta> ROOTED_DIRT = getItemType("rooted_dirt");
-    ItemType.Typed<ItemMeta> MUD = getItemType("mud");
-    ItemType.Typed<ItemMeta> CRIMSON_NYLIUM = getItemType("crimson_nylium");
-    ItemType.Typed<ItemMeta> WARPED_NYLIUM = getItemType("warped_nylium");
-    ItemType.Typed<ItemMeta> COBBLESTONE = getItemType("cobblestone");
-    ItemType.Typed<ItemMeta> OAK_PLANKS = getItemType("oak_planks");
-    ItemType.Typed<ItemMeta> SPRUCE_PLANKS = getItemType("spruce_planks");
-    ItemType.Typed<ItemMeta> BIRCH_PLANKS = getItemType("birch_planks");
-    ItemType.Typed<ItemMeta> JUNGLE_PLANKS = getItemType("jungle_planks");
-    ItemType.Typed<ItemMeta> ACACIA_PLANKS = getItemType("acacia_planks");
-    ItemType.Typed<ItemMeta> CHERRY_PLANKS = getItemType("cherry_planks");
-    ItemType.Typed<ItemMeta> DARK_OAK_PLANKS = getItemType("dark_oak_planks");
-    ItemType.Typed<ItemMeta> PALE_OAK_PLANKS = getItemType("pale_oak_planks");
-    ItemType.Typed<ItemMeta> MANGROVE_PLANKS = getItemType("mangrove_planks");
-    ItemType.Typed<ItemMeta> BAMBOO_PLANKS = getItemType("bamboo_planks");
-    ItemType.Typed<ItemMeta> CRIMSON_PLANKS = getItemType("crimson_planks");
-    ItemType.Typed<ItemMeta> WARPED_PLANKS = getItemType("warped_planks");
-    ItemType.Typed<ItemMeta> BAMBOO_MOSAIC = getItemType("bamboo_mosaic");
-    ItemType.Typed<ItemMeta> OAK_SAPLING = getItemType("oak_sapling");
-    ItemType.Typed<ItemMeta> SPRUCE_SAPLING = getItemType("spruce_sapling");
-    ItemType.Typed<ItemMeta> BIRCH_SAPLING = getItemType("birch_sapling");
-    ItemType.Typed<ItemMeta> JUNGLE_SAPLING = getItemType("jungle_sapling");
-    ItemType.Typed<ItemMeta> ACACIA_SAPLING = getItemType("acacia_sapling");
-    ItemType.Typed<ItemMeta> CHERRY_SAPLING = getItemType("cherry_sapling");
-    ItemType.Typed<ItemMeta> DARK_OAK_SAPLING = getItemType("dark_oak_sapling");
-    ItemType.Typed<ItemMeta> PALE_OAK_SAPLING = getItemType("pale_oak_sapling");
-    ItemType.Typed<ItemMeta> MANGROVE_PROPAGULE = getItemType("mangrove_propagule");
-    ItemType.Typed<ItemMeta> BEDROCK = getItemType("bedrock");
-    ItemType.Typed<ItemMeta> SAND = getItemType("sand");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SUSPICIOUS_SAND = getItemType("suspicious_sand");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SUSPICIOUS_GRAVEL = getItemType("suspicious_gravel");
-    ItemType.Typed<ItemMeta> RED_SAND = getItemType("red_sand");
-    ItemType.Typed<ItemMeta> GRAVEL = getItemType("gravel");
-    ItemType.Typed<ItemMeta> COAL_ORE = getItemType("coal_ore");
-    ItemType.Typed<ItemMeta> DEEPSLATE_COAL_ORE = getItemType("deepslate_coal_ore");
-    ItemType.Typed<ItemMeta> IRON_ORE = getItemType("iron_ore");
-    ItemType.Typed<ItemMeta> DEEPSLATE_IRON_ORE = getItemType("deepslate_iron_ore");
-    ItemType.Typed<ItemMeta> COPPER_ORE = getItemType("copper_ore");
-    ItemType.Typed<ItemMeta> DEEPSLATE_COPPER_ORE = getItemType("deepslate_copper_ore");
-    ItemType.Typed<ItemMeta> GOLD_ORE = getItemType("gold_ore");
-    ItemType.Typed<ItemMeta> DEEPSLATE_GOLD_ORE = getItemType("deepslate_gold_ore");
-    ItemType.Typed<ItemMeta> REDSTONE_ORE = getItemType("redstone_ore");
-    ItemType.Typed<ItemMeta> DEEPSLATE_REDSTONE_ORE = getItemType("deepslate_redstone_ore");
-    ItemType.Typed<ItemMeta> EMERALD_ORE = getItemType("emerald_ore");
-    ItemType.Typed<ItemMeta> DEEPSLATE_EMERALD_ORE = getItemType("deepslate_emerald_ore");
-    ItemType.Typed<ItemMeta> LAPIS_ORE = getItemType("lapis_ore");
-    ItemType.Typed<ItemMeta> DEEPSLATE_LAPIS_ORE = getItemType("deepslate_lapis_ore");
-    ItemType.Typed<ItemMeta> DIAMOND_ORE = getItemType("diamond_ore");
-    ItemType.Typed<ItemMeta> DEEPSLATE_DIAMOND_ORE = getItemType("deepslate_diamond_ore");
-    ItemType.Typed<ItemMeta> NETHER_GOLD_ORE = getItemType("nether_gold_ore");
-    ItemType.Typed<ItemMeta> NETHER_QUARTZ_ORE = getItemType("nether_quartz_ore");
-    ItemType.Typed<ItemMeta> ANCIENT_DEBRIS = getItemType("ancient_debris");
-    ItemType.Typed<ItemMeta> COAL_BLOCK = getItemType("coal_block");
-    ItemType.Typed<ItemMeta> RAW_IRON_BLOCK = getItemType("raw_iron_block");
-    ItemType.Typed<ItemMeta> RAW_COPPER_BLOCK = getItemType("raw_copper_block");
-    ItemType.Typed<ItemMeta> RAW_GOLD_BLOCK = getItemType("raw_gold_block");
-    ItemType.Typed<ItemMeta> HEAVY_CORE = getItemType("heavy_core");
-    ItemType.Typed<ItemMeta> AMETHYST_BLOCK = getItemType("amethyst_block");
-    ItemType.Typed<ItemMeta> BUDDING_AMETHYST = getItemType("budding_amethyst");
-    ItemType.Typed<ItemMeta> IRON_BLOCK = getItemType("iron_block");
-    ItemType.Typed<ItemMeta> COPPER_BLOCK = getItemType("copper_block");
-    ItemType.Typed<ItemMeta> GOLD_BLOCK = getItemType("gold_block");
-    ItemType.Typed<ItemMeta> DIAMOND_BLOCK = getItemType("diamond_block");
-    ItemType.Typed<ItemMeta> NETHERITE_BLOCK = getItemType("netherite_block");
-    ItemType.Typed<ItemMeta> EXPOSED_COPPER = getItemType("exposed_copper");
-    ItemType.Typed<ItemMeta> WEATHERED_COPPER = getItemType("weathered_copper");
-    ItemType.Typed<ItemMeta> OXIDIZED_COPPER = getItemType("oxidized_copper");
-    ItemType.Typed<ItemMeta> CHISELED_COPPER = getItemType("chiseled_copper");
-    ItemType.Typed<ItemMeta> EXPOSED_CHISELED_COPPER = getItemType("exposed_chiseled_copper");
-    ItemType.Typed<ItemMeta> WEATHERED_CHISELED_COPPER = getItemType("weathered_chiseled_copper");
-    ItemType.Typed<ItemMeta> OXIDIZED_CHISELED_COPPER = getItemType("oxidized_chiseled_copper");
-    ItemType.Typed<ItemMeta> CUT_COPPER = getItemType("cut_copper");
-    ItemType.Typed<ItemMeta> EXPOSED_CUT_COPPER = getItemType("exposed_cut_copper");
-    ItemType.Typed<ItemMeta> WEATHERED_CUT_COPPER = getItemType("weathered_cut_copper");
-    ItemType.Typed<ItemMeta> OXIDIZED_CUT_COPPER = getItemType("oxidized_cut_copper");
-    ItemType.Typed<ItemMeta> CUT_COPPER_STAIRS = getItemType("cut_copper_stairs");
-    ItemType.Typed<ItemMeta> EXPOSED_CUT_COPPER_STAIRS = getItemType("exposed_cut_copper_stairs");
-    ItemType.Typed<ItemMeta> WEATHERED_CUT_COPPER_STAIRS = getItemType("weathered_cut_copper_stairs");
-    ItemType.Typed<ItemMeta> OXIDIZED_CUT_COPPER_STAIRS = getItemType("oxidized_cut_copper_stairs");
-    ItemType.Typed<ItemMeta> CUT_COPPER_SLAB = getItemType("cut_copper_slab");
-    ItemType.Typed<ItemMeta> EXPOSED_CUT_COPPER_SLAB = getItemType("exposed_cut_copper_slab");
-    ItemType.Typed<ItemMeta> WEATHERED_CUT_COPPER_SLAB = getItemType("weathered_cut_copper_slab");
-    ItemType.Typed<ItemMeta> OXIDIZED_CUT_COPPER_SLAB = getItemType("oxidized_cut_copper_slab");
-    ItemType.Typed<ItemMeta> WAXED_COPPER_BLOCK = getItemType("waxed_copper_block");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER = getItemType("waxed_exposed_copper");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER = getItemType("waxed_weathered_copper");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER = getItemType("waxed_oxidized_copper");
-    ItemType.Typed<ItemMeta> WAXED_CHISELED_COPPER = getItemType("waxed_chiseled_copper");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_CHISELED_COPPER = getItemType("waxed_exposed_chiseled_copper");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_CHISELED_COPPER = getItemType("waxed_weathered_chiseled_copper");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_CHISELED_COPPER = getItemType("waxed_oxidized_chiseled_copper");
-    ItemType.Typed<ItemMeta> WAXED_CUT_COPPER = getItemType("waxed_cut_copper");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_CUT_COPPER = getItemType("waxed_exposed_cut_copper");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_CUT_COPPER = getItemType("waxed_weathered_cut_copper");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_CUT_COPPER = getItemType("waxed_oxidized_cut_copper");
-    ItemType.Typed<ItemMeta> WAXED_CUT_COPPER_STAIRS = getItemType("waxed_cut_copper_stairs");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_CUT_COPPER_STAIRS = getItemType("waxed_exposed_cut_copper_stairs");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_CUT_COPPER_STAIRS = getItemType("waxed_weathered_cut_copper_stairs");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_CUT_COPPER_STAIRS = getItemType("waxed_oxidized_cut_copper_stairs");
-    ItemType.Typed<ItemMeta> WAXED_CUT_COPPER_SLAB = getItemType("waxed_cut_copper_slab");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_CUT_COPPER_SLAB = getItemType("waxed_exposed_cut_copper_slab");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_CUT_COPPER_SLAB = getItemType("waxed_weathered_cut_copper_slab");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_CUT_COPPER_SLAB = getItemType("waxed_oxidized_cut_copper_slab");
-    ItemType.Typed<ItemMeta> OAK_LOG = getItemType("oak_log");
-    ItemType.Typed<ItemMeta> SPRUCE_LOG = getItemType("spruce_log");
-    ItemType.Typed<ItemMeta> BIRCH_LOG = getItemType("birch_log");
-    ItemType.Typed<ItemMeta> JUNGLE_LOG = getItemType("jungle_log");
-    ItemType.Typed<ItemMeta> ACACIA_LOG = getItemType("acacia_log");
-    ItemType.Typed<ItemMeta> CHERRY_LOG = getItemType("cherry_log");
-    ItemType.Typed<ItemMeta> DARK_OAK_LOG = getItemType("dark_oak_log");
-    ItemType.Typed<ItemMeta> PALE_OAK_LOG = getItemType("pale_oak_log");
-    ItemType.Typed<ItemMeta> MANGROVE_LOG = getItemType("mangrove_log");
-    ItemType.Typed<ItemMeta> MANGROVE_ROOTS = getItemType("mangrove_roots");
-    ItemType.Typed<ItemMeta> MUDDY_MANGROVE_ROOTS = getItemType("muddy_mangrove_roots");
-    ItemType.Typed<ItemMeta> CRIMSON_STEM = getItemType("crimson_stem");
-    ItemType.Typed<ItemMeta> WARPED_STEM = getItemType("warped_stem");
-    ItemType.Typed<ItemMeta> BAMBOO_BLOCK = getItemType("bamboo_block");
-    ItemType.Typed<ItemMeta> STRIPPED_OAK_LOG = getItemType("stripped_oak_log");
-    ItemType.Typed<ItemMeta> STRIPPED_SPRUCE_LOG = getItemType("stripped_spruce_log");
-    ItemType.Typed<ItemMeta> STRIPPED_BIRCH_LOG = getItemType("stripped_birch_log");
-    ItemType.Typed<ItemMeta> STRIPPED_JUNGLE_LOG = getItemType("stripped_jungle_log");
-    ItemType.Typed<ItemMeta> STRIPPED_ACACIA_LOG = getItemType("stripped_acacia_log");
-    ItemType.Typed<ItemMeta> STRIPPED_CHERRY_LOG = getItemType("stripped_cherry_log");
-    ItemType.Typed<ItemMeta> STRIPPED_DARK_OAK_LOG = getItemType("stripped_dark_oak_log");
-    ItemType.Typed<ItemMeta> STRIPPED_PALE_OAK_LOG = getItemType("stripped_pale_oak_log");
-    ItemType.Typed<ItemMeta> STRIPPED_MANGROVE_LOG = getItemType("stripped_mangrove_log");
-    ItemType.Typed<ItemMeta> STRIPPED_CRIMSON_STEM = getItemType("stripped_crimson_stem");
-    ItemType.Typed<ItemMeta> STRIPPED_WARPED_STEM = getItemType("stripped_warped_stem");
-    ItemType.Typed<ItemMeta> STRIPPED_OAK_WOOD = getItemType("stripped_oak_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_SPRUCE_WOOD = getItemType("stripped_spruce_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_BIRCH_WOOD = getItemType("stripped_birch_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_JUNGLE_WOOD = getItemType("stripped_jungle_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_ACACIA_WOOD = getItemType("stripped_acacia_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_CHERRY_WOOD = getItemType("stripped_cherry_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_DARK_OAK_WOOD = getItemType("stripped_dark_oak_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_PALE_OAK_WOOD = getItemType("stripped_pale_oak_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_MANGROVE_WOOD = getItemType("stripped_mangrove_wood");
-    ItemType.Typed<ItemMeta> STRIPPED_CRIMSON_HYPHAE = getItemType("stripped_crimson_hyphae");
-    ItemType.Typed<ItemMeta> STRIPPED_WARPED_HYPHAE = getItemType("stripped_warped_hyphae");
-    ItemType.Typed<ItemMeta> STRIPPED_BAMBOO_BLOCK = getItemType("stripped_bamboo_block");
-    ItemType.Typed<ItemMeta> OAK_WOOD = getItemType("oak_wood");
-    ItemType.Typed<ItemMeta> SPRUCE_WOOD = getItemType("spruce_wood");
-    ItemType.Typed<ItemMeta> BIRCH_WOOD = getItemType("birch_wood");
-    ItemType.Typed<ItemMeta> JUNGLE_WOOD = getItemType("jungle_wood");
-    ItemType.Typed<ItemMeta> ACACIA_WOOD = getItemType("acacia_wood");
-    ItemType.Typed<ItemMeta> CHERRY_WOOD = getItemType("cherry_wood");
-    ItemType.Typed<ItemMeta> DARK_OAK_WOOD = getItemType("dark_oak_wood");
-    ItemType.Typed<ItemMeta> PALE_OAK_WOOD = getItemType("pale_oak_wood");
-    ItemType.Typed<ItemMeta> MANGROVE_WOOD = getItemType("mangrove_wood");
-    ItemType.Typed<ItemMeta> CRIMSON_HYPHAE = getItemType("crimson_hyphae");
-    ItemType.Typed<ItemMeta> WARPED_HYPHAE = getItemType("warped_hyphae");
-    ItemType.Typed<ItemMeta> OAK_LEAVES = getItemType("oak_leaves");
-    ItemType.Typed<ItemMeta> SPRUCE_LEAVES = getItemType("spruce_leaves");
-    ItemType.Typed<ItemMeta> BIRCH_LEAVES = getItemType("birch_leaves");
-    ItemType.Typed<ItemMeta> JUNGLE_LEAVES = getItemType("jungle_leaves");
-    ItemType.Typed<ItemMeta> ACACIA_LEAVES = getItemType("acacia_leaves");
-    ItemType.Typed<ItemMeta> CHERRY_LEAVES = getItemType("cherry_leaves");
-    ItemType.Typed<ItemMeta> DARK_OAK_LEAVES = getItemType("dark_oak_leaves");
-    ItemType.Typed<ItemMeta> PALE_OAK_LEAVES = getItemType("pale_oak_leaves");
-    ItemType.Typed<ItemMeta> MANGROVE_LEAVES = getItemType("mangrove_leaves");
-    ItemType.Typed<ItemMeta> AZALEA_LEAVES = getItemType("azalea_leaves");
-    ItemType.Typed<ItemMeta> FLOWERING_AZALEA_LEAVES = getItemType("flowering_azalea_leaves");
-    ItemType.Typed<ItemMeta> SPONGE = getItemType("sponge");
-    ItemType.Typed<ItemMeta> WET_SPONGE = getItemType("wet_sponge");
-    ItemType.Typed<ItemMeta> GLASS = getItemType("glass");
-    ItemType.Typed<ItemMeta> TINTED_GLASS = getItemType("tinted_glass");
-    ItemType.Typed<ItemMeta> LAPIS_BLOCK = getItemType("lapis_block");
-    ItemType.Typed<ItemMeta> SANDSTONE = getItemType("sandstone");
-    ItemType.Typed<ItemMeta> CHISELED_SANDSTONE = getItemType("chiseled_sandstone");
-    ItemType.Typed<ItemMeta> CUT_SANDSTONE = getItemType("cut_sandstone");
-    ItemType.Typed<ItemMeta> COBWEB = getItemType("cobweb");
-    ItemType.Typed<ItemMeta> SHORT_GRASS = getItemType("short_grass");
-    ItemType.Typed<ItemMeta> FERN = getItemType("fern");
-    ItemType.Typed<ItemMeta> AZALEA = getItemType("azalea");
-    ItemType.Typed<ItemMeta> FLOWERING_AZALEA = getItemType("flowering_azalea");
-    ItemType.Typed<ItemMeta> DEAD_BUSH = getItemType("dead_bush");
-    ItemType.Typed<ItemMeta> SEAGRASS = getItemType("seagrass");
-    ItemType.Typed<ItemMeta> SEA_PICKLE = getItemType("sea_pickle");
-    ItemType.Typed<ItemMeta> WHITE_WOOL = getItemType("white_wool");
-    ItemType.Typed<ItemMeta> ORANGE_WOOL = getItemType("orange_wool");
-    ItemType.Typed<ItemMeta> MAGENTA_WOOL = getItemType("magenta_wool");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_WOOL = getItemType("light_blue_wool");
-    ItemType.Typed<ItemMeta> YELLOW_WOOL = getItemType("yellow_wool");
-    ItemType.Typed<ItemMeta> LIME_WOOL = getItemType("lime_wool");
-    ItemType.Typed<ItemMeta> PINK_WOOL = getItemType("pink_wool");
-    ItemType.Typed<ItemMeta> GRAY_WOOL = getItemType("gray_wool");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_WOOL = getItemType("light_gray_wool");
-    ItemType.Typed<ItemMeta> CYAN_WOOL = getItemType("cyan_wool");
-    ItemType.Typed<ItemMeta> PURPLE_WOOL = getItemType("purple_wool");
-    ItemType.Typed<ItemMeta> BLUE_WOOL = getItemType("blue_wool");
-    ItemType.Typed<ItemMeta> BROWN_WOOL = getItemType("brown_wool");
-    ItemType.Typed<ItemMeta> GREEN_WOOL = getItemType("green_wool");
-    ItemType.Typed<ItemMeta> RED_WOOL = getItemType("red_wool");
-    ItemType.Typed<ItemMeta> BLACK_WOOL = getItemType("black_wool");
-    ItemType.Typed<ItemMeta> DANDELION = getItemType("dandelion");
-    ItemType.Typed<ItemMeta> OPEN_EYEBLOSSOM = getItemType("open_eyeblossom");
-    ItemType.Typed<ItemMeta> CLOSED_EYEBLOSSOM = getItemType("closed_eyeblossom");
-    ItemType.Typed<ItemMeta> POPPY = getItemType("poppy");
-    ItemType.Typed<ItemMeta> BLUE_ORCHID = getItemType("blue_orchid");
-    ItemType.Typed<ItemMeta> ALLIUM = getItemType("allium");
-    ItemType.Typed<ItemMeta> AZURE_BLUET = getItemType("azure_bluet");
-    ItemType.Typed<ItemMeta> RED_TULIP = getItemType("red_tulip");
-    ItemType.Typed<ItemMeta> ORANGE_TULIP = getItemType("orange_tulip");
-    ItemType.Typed<ItemMeta> WHITE_TULIP = getItemType("white_tulip");
-    ItemType.Typed<ItemMeta> PINK_TULIP = getItemType("pink_tulip");
-    ItemType.Typed<ItemMeta> OXEYE_DAISY = getItemType("oxeye_daisy");
-    ItemType.Typed<ItemMeta> CORNFLOWER = getItemType("cornflower");
-    ItemType.Typed<ItemMeta> LILY_OF_THE_VALLEY = getItemType("lily_of_the_valley");
-    ItemType.Typed<ItemMeta> WITHER_ROSE = getItemType("wither_rose");
-    ItemType.Typed<ItemMeta> TORCHFLOWER = getItemType("torchflower");
-    ItemType.Typed<ItemMeta> PITCHER_PLANT = getItemType("pitcher_plant");
-    ItemType.Typed<ItemMeta> SPORE_BLOSSOM = getItemType("spore_blossom");
-    ItemType.Typed<ItemMeta> BROWN_MUSHROOM = getItemType("brown_mushroom");
-    ItemType.Typed<ItemMeta> RED_MUSHROOM = getItemType("red_mushroom");
-    ItemType.Typed<ItemMeta> CRIMSON_FUNGUS = getItemType("crimson_fungus");
-    ItemType.Typed<ItemMeta> WARPED_FUNGUS = getItemType("warped_fungus");
-    ItemType.Typed<ItemMeta> CRIMSON_ROOTS = getItemType("crimson_roots");
-    ItemType.Typed<ItemMeta> WARPED_ROOTS = getItemType("warped_roots");
-    ItemType.Typed<ItemMeta> NETHER_SPROUTS = getItemType("nether_sprouts");
-    ItemType.Typed<ItemMeta> WEEPING_VINES = getItemType("weeping_vines");
-    ItemType.Typed<ItemMeta> TWISTING_VINES = getItemType("twisting_vines");
-    ItemType.Typed<ItemMeta> SUGAR_CANE = getItemType("sugar_cane");
-    ItemType.Typed<ItemMeta> KELP = getItemType("kelp");
-    ItemType.Typed<ItemMeta> PINK_PETALS = getItemType("pink_petals");
-    ItemType.Typed<ItemMeta> MOSS_CARPET = getItemType("moss_carpet");
-    ItemType.Typed<ItemMeta> MOSS_BLOCK = getItemType("moss_block");
-    ItemType.Typed<ItemMeta> PALE_MOSS_CARPET = getItemType("pale_moss_carpet");
-    ItemType.Typed<ItemMeta> PALE_HANGING_MOSS = getItemType("pale_hanging_moss");
-    ItemType.Typed<ItemMeta> PALE_MOSS_BLOCK = getItemType("pale_moss_block");
-    ItemType.Typed<ItemMeta> HANGING_ROOTS = getItemType("hanging_roots");
-    ItemType.Typed<ItemMeta> BIG_DRIPLEAF = getItemType("big_dripleaf");
-    ItemType.Typed<ItemMeta> SMALL_DRIPLEAF = getItemType("small_dripleaf");
-    ItemType.Typed<ItemMeta> BAMBOO = getItemType("bamboo");
-    ItemType.Typed<ItemMeta> OAK_SLAB = getItemType("oak_slab");
-    ItemType.Typed<ItemMeta> SPRUCE_SLAB = getItemType("spruce_slab");
-    ItemType.Typed<ItemMeta> BIRCH_SLAB = getItemType("birch_slab");
-    ItemType.Typed<ItemMeta> JUNGLE_SLAB = getItemType("jungle_slab");
-    ItemType.Typed<ItemMeta> ACACIA_SLAB = getItemType("acacia_slab");
-    ItemType.Typed<ItemMeta> CHERRY_SLAB = getItemType("cherry_slab");
-    ItemType.Typed<ItemMeta> DARK_OAK_SLAB = getItemType("dark_oak_slab");
-    ItemType.Typed<ItemMeta> PALE_OAK_SLAB = getItemType("pale_oak_slab");
-    ItemType.Typed<ItemMeta> MANGROVE_SLAB = getItemType("mangrove_slab");
-    ItemType.Typed<ItemMeta> BAMBOO_SLAB = getItemType("bamboo_slab");
-    ItemType.Typed<ItemMeta> BAMBOO_MOSAIC_SLAB = getItemType("bamboo_mosaic_slab");
-    ItemType.Typed<ItemMeta> CRIMSON_SLAB = getItemType("crimson_slab");
-    ItemType.Typed<ItemMeta> WARPED_SLAB = getItemType("warped_slab");
-    ItemType.Typed<ItemMeta> STONE_SLAB = getItemType("stone_slab");
-    ItemType.Typed<ItemMeta> SMOOTH_STONE_SLAB = getItemType("smooth_stone_slab");
-    ItemType.Typed<ItemMeta> SANDSTONE_SLAB = getItemType("sandstone_slab");
-    ItemType.Typed<ItemMeta> CUT_SANDSTONE_SLAB = getItemType("cut_sandstone_slab");
-    ItemType.Typed<ItemMeta> PETRIFIED_OAK_SLAB = getItemType("petrified_oak_slab");
-    ItemType.Typed<ItemMeta> COBBLESTONE_SLAB = getItemType("cobblestone_slab");
-    ItemType.Typed<ItemMeta> BRICK_SLAB = getItemType("brick_slab");
-    ItemType.Typed<ItemMeta> STONE_BRICK_SLAB = getItemType("stone_brick_slab");
-    ItemType.Typed<ItemMeta> MUD_BRICK_SLAB = getItemType("mud_brick_slab");
-    ItemType.Typed<ItemMeta> NETHER_BRICK_SLAB = getItemType("nether_brick_slab");
-    ItemType.Typed<ItemMeta> QUARTZ_SLAB = getItemType("quartz_slab");
-    ItemType.Typed<ItemMeta> RED_SANDSTONE_SLAB = getItemType("red_sandstone_slab");
-    ItemType.Typed<ItemMeta> CUT_RED_SANDSTONE_SLAB = getItemType("cut_red_sandstone_slab");
-    ItemType.Typed<ItemMeta> PURPUR_SLAB = getItemType("purpur_slab");
-    ItemType.Typed<ItemMeta> PRISMARINE_SLAB = getItemType("prismarine_slab");
-    ItemType.Typed<ItemMeta> PRISMARINE_BRICK_SLAB = getItemType("prismarine_brick_slab");
-    ItemType.Typed<ItemMeta> DARK_PRISMARINE_SLAB = getItemType("dark_prismarine_slab");
-    ItemType.Typed<ItemMeta> SMOOTH_QUARTZ = getItemType("smooth_quartz");
-    ItemType.Typed<ItemMeta> SMOOTH_RED_SANDSTONE = getItemType("smooth_red_sandstone");
-    ItemType.Typed<ItemMeta> SMOOTH_SANDSTONE = getItemType("smooth_sandstone");
-    ItemType.Typed<ItemMeta> SMOOTH_STONE = getItemType("smooth_stone");
-    ItemType.Typed<ItemMeta> BRICKS = getItemType("bricks");
-    ItemType.Typed<ItemMeta> BOOKSHELF = getItemType("bookshelf");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CHISELED_BOOKSHELF = getItemType("chiseled_bookshelf");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> DECORATED_POT = getItemType("decorated_pot");
-    ItemType.Typed<ItemMeta> MOSSY_COBBLESTONE = getItemType("mossy_cobblestone");
-    ItemType.Typed<ItemMeta> OBSIDIAN = getItemType("obsidian");
-    ItemType.Typed<ItemMeta> TORCH = getItemType("torch");
-    ItemType.Typed<ItemMeta> END_ROD = getItemType("end_rod");
-    ItemType.Typed<ItemMeta> CHORUS_PLANT = getItemType("chorus_plant");
-    ItemType.Typed<ItemMeta> CHORUS_FLOWER = getItemType("chorus_flower");
-    ItemType.Typed<ItemMeta> PURPUR_BLOCK = getItemType("purpur_block");
-    ItemType.Typed<ItemMeta> PURPUR_PILLAR = getItemType("purpur_pillar");
-    ItemType.Typed<ItemMeta> PURPUR_STAIRS = getItemType("purpur_stairs");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SPAWNER = getItemType("spawner");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CREAKING_HEART = getItemType("creaking_heart");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CHEST = getItemType("chest");
-    ItemType.Typed<ItemMeta> CRAFTING_TABLE = getItemType("crafting_table");
-    ItemType.Typed<ItemMeta> FARMLAND = getItemType("farmland");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> FURNACE = getItemType("furnace");
-    ItemType.Typed<ItemMeta> LADDER = getItemType("ladder");
-    ItemType.Typed<ItemMeta> COBBLESTONE_STAIRS = getItemType("cobblestone_stairs");
-    ItemType.Typed<ItemMeta> SNOW = getItemType("snow");
-    ItemType.Typed<ItemMeta> ICE = getItemType("ice");
-    ItemType.Typed<ItemMeta> SNOW_BLOCK = getItemType("snow_block");
-    ItemType.Typed<ItemMeta> CACTUS = getItemType("cactus");
-    ItemType.Typed<ItemMeta> CLAY = getItemType("clay");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> JUKEBOX = getItemType("jukebox");
-    ItemType.Typed<ItemMeta> OAK_FENCE = getItemType("oak_fence");
-    ItemType.Typed<ItemMeta> SPRUCE_FENCE = getItemType("spruce_fence");
-    ItemType.Typed<ItemMeta> BIRCH_FENCE = getItemType("birch_fence");
-    ItemType.Typed<ItemMeta> JUNGLE_FENCE = getItemType("jungle_fence");
-    ItemType.Typed<ItemMeta> ACACIA_FENCE = getItemType("acacia_fence");
-    ItemType.Typed<ItemMeta> CHERRY_FENCE = getItemType("cherry_fence");
-    ItemType.Typed<ItemMeta> DARK_OAK_FENCE = getItemType("dark_oak_fence");
-    ItemType.Typed<ItemMeta> PALE_OAK_FENCE = getItemType("pale_oak_fence");
-    ItemType.Typed<ItemMeta> MANGROVE_FENCE = getItemType("mangrove_fence");
-    ItemType.Typed<ItemMeta> BAMBOO_FENCE = getItemType("bamboo_fence");
-    ItemType.Typed<ItemMeta> CRIMSON_FENCE = getItemType("crimson_fence");
-    ItemType.Typed<ItemMeta> WARPED_FENCE = getItemType("warped_fence");
-    ItemType.Typed<ItemMeta> PUMPKIN = getItemType("pumpkin");
-    ItemType.Typed<ItemMeta> CARVED_PUMPKIN = getItemType("carved_pumpkin");
-    ItemType.Typed<ItemMeta> JACK_O_LANTERN = getItemType("jack_o_lantern");
-    ItemType.Typed<ItemMeta> NETHERRACK = getItemType("netherrack");
-    ItemType.Typed<ItemMeta> SOUL_SAND = getItemType("soul_sand");
-    ItemType.Typed<ItemMeta> SOUL_SOIL = getItemType("soul_soil");
-    ItemType.Typed<ItemMeta> BASALT = getItemType("basalt");
-    ItemType.Typed<ItemMeta> POLISHED_BASALT = getItemType("polished_basalt");
-    ItemType.Typed<ItemMeta> SMOOTH_BASALT = getItemType("smooth_basalt");
-    ItemType.Typed<ItemMeta> SOUL_TORCH = getItemType("soul_torch");
-    ItemType.Typed<ItemMeta> GLOWSTONE = getItemType("glowstone");
-    ItemType.Typed<ItemMeta> INFESTED_STONE = getItemType("infested_stone");
-    ItemType.Typed<ItemMeta> INFESTED_COBBLESTONE = getItemType("infested_cobblestone");
-    ItemType.Typed<ItemMeta> INFESTED_STONE_BRICKS = getItemType("infested_stone_bricks");
-    ItemType.Typed<ItemMeta> INFESTED_MOSSY_STONE_BRICKS = getItemType("infested_mossy_stone_bricks");
-    ItemType.Typed<ItemMeta> INFESTED_CRACKED_STONE_BRICKS = getItemType("infested_cracked_stone_bricks");
-    ItemType.Typed<ItemMeta> INFESTED_CHISELED_STONE_BRICKS = getItemType("infested_chiseled_stone_bricks");
-    ItemType.Typed<ItemMeta> INFESTED_DEEPSLATE = getItemType("infested_deepslate");
-    ItemType.Typed<ItemMeta> STONE_BRICKS = getItemType("stone_bricks");
-    ItemType.Typed<ItemMeta> MOSSY_STONE_BRICKS = getItemType("mossy_stone_bricks");
-    ItemType.Typed<ItemMeta> CRACKED_STONE_BRICKS = getItemType("cracked_stone_bricks");
-    ItemType.Typed<ItemMeta> CHISELED_STONE_BRICKS = getItemType("chiseled_stone_bricks");
-    ItemType.Typed<ItemMeta> PACKED_MUD = getItemType("packed_mud");
-    ItemType.Typed<ItemMeta> MUD_BRICKS = getItemType("mud_bricks");
-    ItemType.Typed<ItemMeta> DEEPSLATE_BRICKS = getItemType("deepslate_bricks");
-    ItemType.Typed<ItemMeta> CRACKED_DEEPSLATE_BRICKS = getItemType("cracked_deepslate_bricks");
-    ItemType.Typed<ItemMeta> DEEPSLATE_TILES = getItemType("deepslate_tiles");
-    ItemType.Typed<ItemMeta> CRACKED_DEEPSLATE_TILES = getItemType("cracked_deepslate_tiles");
-    ItemType.Typed<ItemMeta> CHISELED_DEEPSLATE = getItemType("chiseled_deepslate");
-    ItemType.Typed<ItemMeta> REINFORCED_DEEPSLATE = getItemType("reinforced_deepslate");
-    ItemType.Typed<ItemMeta> BROWN_MUSHROOM_BLOCK = getItemType("brown_mushroom_block");
-    ItemType.Typed<ItemMeta> RED_MUSHROOM_BLOCK = getItemType("red_mushroom_block");
-    ItemType.Typed<ItemMeta> MUSHROOM_STEM = getItemType("mushroom_stem");
-    ItemType.Typed<ItemMeta> IRON_BARS = getItemType("iron_bars");
-    ItemType.Typed<ItemMeta> CHAIN = getItemType("chain");
-    ItemType.Typed<ItemMeta> GLASS_PANE = getItemType("glass_pane");
-    ItemType.Typed<ItemMeta> MELON = getItemType("melon");
-    ItemType.Typed<ItemMeta> VINE = getItemType("vine");
-    ItemType.Typed<ItemMeta> GLOW_LICHEN = getItemType("glow_lichen");
-    ItemType.Typed<ItemMeta> RESIN_CLUMP = getItemType("resin_clump");
-    ItemType.Typed<ItemMeta> RESIN_BLOCK = getItemType("resin_block");
-    ItemType.Typed<ItemMeta> RESIN_BRICKS = getItemType("resin_bricks");
-    ItemType.Typed<ItemMeta> RESIN_BRICK_STAIRS = getItemType("resin_brick_stairs");
-    ItemType.Typed<ItemMeta> RESIN_BRICK_SLAB = getItemType("resin_brick_slab");
-    ItemType.Typed<ItemMeta> RESIN_BRICK_WALL = getItemType("resin_brick_wall");
-    ItemType.Typed<ItemMeta> CHISELED_RESIN_BRICKS = getItemType("chiseled_resin_bricks");
-    ItemType.Typed<ItemMeta> BRICK_STAIRS = getItemType("brick_stairs");
-    ItemType.Typed<ItemMeta> STONE_BRICK_STAIRS = getItemType("stone_brick_stairs");
-    ItemType.Typed<ItemMeta> MUD_BRICK_STAIRS = getItemType("mud_brick_stairs");
-    ItemType.Typed<ItemMeta> MYCELIUM = getItemType("mycelium");
-    ItemType.Typed<ItemMeta> LILY_PAD = getItemType("lily_pad");
-    ItemType.Typed<ItemMeta> NETHER_BRICKS = getItemType("nether_bricks");
-    ItemType.Typed<ItemMeta> CRACKED_NETHER_BRICKS = getItemType("cracked_nether_bricks");
-    ItemType.Typed<ItemMeta> CHISELED_NETHER_BRICKS = getItemType("chiseled_nether_bricks");
-    ItemType.Typed<ItemMeta> NETHER_BRICK_FENCE = getItemType("nether_brick_fence");
-    ItemType.Typed<ItemMeta> NETHER_BRICK_STAIRS = getItemType("nether_brick_stairs");
-    ItemType.Typed<ItemMeta> SCULK = getItemType("sculk");
-    ItemType.Typed<ItemMeta> SCULK_VEIN = getItemType("sculk_vein");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SCULK_CATALYST = getItemType("sculk_catalyst");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SCULK_SHRIEKER = getItemType("sculk_shrieker");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> ENCHANTING_TABLE = getItemType("enchanting_table");
-    ItemType.Typed<ItemMeta> END_PORTAL_FRAME = getItemType("end_portal_frame");
-    ItemType.Typed<ItemMeta> END_STONE = getItemType("end_stone");
-    ItemType.Typed<ItemMeta> END_STONE_BRICKS = getItemType("end_stone_bricks");
-    ItemType.Typed<ItemMeta> DRAGON_EGG = getItemType("dragon_egg");
-    ItemType.Typed<ItemMeta> SANDSTONE_STAIRS = getItemType("sandstone_stairs");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> ENDER_CHEST = getItemType("ender_chest");
-    ItemType.Typed<ItemMeta> EMERALD_BLOCK = getItemType("emerald_block");
-    ItemType.Typed<ItemMeta> OAK_STAIRS = getItemType("oak_stairs");
-    ItemType.Typed<ItemMeta> SPRUCE_STAIRS = getItemType("spruce_stairs");
-    ItemType.Typed<ItemMeta> BIRCH_STAIRS = getItemType("birch_stairs");
-    ItemType.Typed<ItemMeta> JUNGLE_STAIRS = getItemType("jungle_stairs");
-    ItemType.Typed<ItemMeta> ACACIA_STAIRS = getItemType("acacia_stairs");
-    ItemType.Typed<ItemMeta> CHERRY_STAIRS = getItemType("cherry_stairs");
-    ItemType.Typed<ItemMeta> DARK_OAK_STAIRS = getItemType("dark_oak_stairs");
-    ItemType.Typed<ItemMeta> PALE_OAK_STAIRS = getItemType("pale_oak_stairs");
-    ItemType.Typed<ItemMeta> MANGROVE_STAIRS = getItemType("mangrove_stairs");
-    ItemType.Typed<ItemMeta> BAMBOO_STAIRS = getItemType("bamboo_stairs");
-    ItemType.Typed<ItemMeta> BAMBOO_MOSAIC_STAIRS = getItemType("bamboo_mosaic_stairs");
-    ItemType.Typed<ItemMeta> CRIMSON_STAIRS = getItemType("crimson_stairs");
-    ItemType.Typed<ItemMeta> WARPED_STAIRS = getItemType("warped_stairs");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> COMMAND_BLOCK = getItemType("command_block");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BEACON = getItemType("beacon");
-    ItemType.Typed<ItemMeta> COBBLESTONE_WALL = getItemType("cobblestone_wall");
-    ItemType.Typed<ItemMeta> MOSSY_COBBLESTONE_WALL = getItemType("mossy_cobblestone_wall");
-    ItemType.Typed<ItemMeta> BRICK_WALL = getItemType("brick_wall");
-    ItemType.Typed<ItemMeta> PRISMARINE_WALL = getItemType("prismarine_wall");
-    ItemType.Typed<ItemMeta> RED_SANDSTONE_WALL = getItemType("red_sandstone_wall");
-    ItemType.Typed<ItemMeta> MOSSY_STONE_BRICK_WALL = getItemType("mossy_stone_brick_wall");
-    ItemType.Typed<ItemMeta> GRANITE_WALL = getItemType("granite_wall");
-    ItemType.Typed<ItemMeta> STONE_BRICK_WALL = getItemType("stone_brick_wall");
-    ItemType.Typed<ItemMeta> MUD_BRICK_WALL = getItemType("mud_brick_wall");
-    ItemType.Typed<ItemMeta> NETHER_BRICK_WALL = getItemType("nether_brick_wall");
-    ItemType.Typed<ItemMeta> ANDESITE_WALL = getItemType("andesite_wall");
-    ItemType.Typed<ItemMeta> RED_NETHER_BRICK_WALL = getItemType("red_nether_brick_wall");
-    ItemType.Typed<ItemMeta> SANDSTONE_WALL = getItemType("sandstone_wall");
-    ItemType.Typed<ItemMeta> END_STONE_BRICK_WALL = getItemType("end_stone_brick_wall");
-    ItemType.Typed<ItemMeta> DIORITE_WALL = getItemType("diorite_wall");
-    ItemType.Typed<ItemMeta> BLACKSTONE_WALL = getItemType("blackstone_wall");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_WALL = getItemType("polished_blackstone_wall");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BRICK_WALL = getItemType("polished_blackstone_brick_wall");
-    ItemType.Typed<ItemMeta> COBBLED_DEEPSLATE_WALL = getItemType("cobbled_deepslate_wall");
-    ItemType.Typed<ItemMeta> POLISHED_DEEPSLATE_WALL = getItemType("polished_deepslate_wall");
-    ItemType.Typed<ItemMeta> DEEPSLATE_BRICK_WALL = getItemType("deepslate_brick_wall");
-    ItemType.Typed<ItemMeta> DEEPSLATE_TILE_WALL = getItemType("deepslate_tile_wall");
-    ItemType.Typed<ItemMeta> ANVIL = getItemType("anvil");
-    ItemType.Typed<ItemMeta> CHIPPED_ANVIL = getItemType("chipped_anvil");
-    ItemType.Typed<ItemMeta> DAMAGED_ANVIL = getItemType("damaged_anvil");
-    ItemType.Typed<ItemMeta> CHISELED_QUARTZ_BLOCK = getItemType("chiseled_quartz_block");
-    ItemType.Typed<ItemMeta> QUARTZ_BLOCK = getItemType("quartz_block");
-    ItemType.Typed<ItemMeta> QUARTZ_BRICKS = getItemType("quartz_bricks");
-    ItemType.Typed<ItemMeta> QUARTZ_PILLAR = getItemType("quartz_pillar");
-    ItemType.Typed<ItemMeta> QUARTZ_STAIRS = getItemType("quartz_stairs");
-    ItemType.Typed<ItemMeta> WHITE_TERRACOTTA = getItemType("white_terracotta");
-    ItemType.Typed<ItemMeta> ORANGE_TERRACOTTA = getItemType("orange_terracotta");
-    ItemType.Typed<ItemMeta> MAGENTA_TERRACOTTA = getItemType("magenta_terracotta");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_TERRACOTTA = getItemType("light_blue_terracotta");
-    ItemType.Typed<ItemMeta> YELLOW_TERRACOTTA = getItemType("yellow_terracotta");
-    ItemType.Typed<ItemMeta> LIME_TERRACOTTA = getItemType("lime_terracotta");
-    ItemType.Typed<ItemMeta> PINK_TERRACOTTA = getItemType("pink_terracotta");
-    ItemType.Typed<ItemMeta> GRAY_TERRACOTTA = getItemType("gray_terracotta");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_TERRACOTTA = getItemType("light_gray_terracotta");
-    ItemType.Typed<ItemMeta> CYAN_TERRACOTTA = getItemType("cyan_terracotta");
-    ItemType.Typed<ItemMeta> PURPLE_TERRACOTTA = getItemType("purple_terracotta");
-    ItemType.Typed<ItemMeta> BLUE_TERRACOTTA = getItemType("blue_terracotta");
-    ItemType.Typed<ItemMeta> BROWN_TERRACOTTA = getItemType("brown_terracotta");
-    ItemType.Typed<ItemMeta> GREEN_TERRACOTTA = getItemType("green_terracotta");
-    ItemType.Typed<ItemMeta> RED_TERRACOTTA = getItemType("red_terracotta");
-    ItemType.Typed<ItemMeta> BLACK_TERRACOTTA = getItemType("black_terracotta");
-    ItemType.Typed<ItemMeta> BARRIER = getItemType("barrier");
-    ItemType.Typed<ItemMeta> LIGHT = getItemType("light");
-    ItemType.Typed<ItemMeta> HAY_BLOCK = getItemType("hay_block");
-    ItemType.Typed<ItemMeta> WHITE_CARPET = getItemType("white_carpet");
-    ItemType.Typed<ItemMeta> ORANGE_CARPET = getItemType("orange_carpet");
-    ItemType.Typed<ItemMeta> MAGENTA_CARPET = getItemType("magenta_carpet");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_CARPET = getItemType("light_blue_carpet");
-    ItemType.Typed<ItemMeta> YELLOW_CARPET = getItemType("yellow_carpet");
-    ItemType.Typed<ItemMeta> LIME_CARPET = getItemType("lime_carpet");
-    ItemType.Typed<ItemMeta> PINK_CARPET = getItemType("pink_carpet");
-    ItemType.Typed<ItemMeta> GRAY_CARPET = getItemType("gray_carpet");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_CARPET = getItemType("light_gray_carpet");
-    ItemType.Typed<ItemMeta> CYAN_CARPET = getItemType("cyan_carpet");
-    ItemType.Typed<ItemMeta> PURPLE_CARPET = getItemType("purple_carpet");
-    ItemType.Typed<ItemMeta> BLUE_CARPET = getItemType("blue_carpet");
-    ItemType.Typed<ItemMeta> BROWN_CARPET = getItemType("brown_carpet");
-    ItemType.Typed<ItemMeta> GREEN_CARPET = getItemType("green_carpet");
-    ItemType.Typed<ItemMeta> RED_CARPET = getItemType("red_carpet");
-    ItemType.Typed<ItemMeta> BLACK_CARPET = getItemType("black_carpet");
-    ItemType.Typed<ItemMeta> TERRACOTTA = getItemType("terracotta");
-    ItemType.Typed<ItemMeta> PACKED_ICE = getItemType("packed_ice");
-    ItemType.Typed<ItemMeta> DIRT_PATH = getItemType("dirt_path");
-    ItemType.Typed<ItemMeta> SUNFLOWER = getItemType("sunflower");
-    ItemType.Typed<ItemMeta> LILAC = getItemType("lilac");
-    ItemType.Typed<ItemMeta> ROSE_BUSH = getItemType("rose_bush");
-    ItemType.Typed<ItemMeta> PEONY = getItemType("peony");
-    ItemType.Typed<ItemMeta> TALL_GRASS = getItemType("tall_grass");
-    ItemType.Typed<ItemMeta> LARGE_FERN = getItemType("large_fern");
-    ItemType.Typed<ItemMeta> WHITE_STAINED_GLASS = getItemType("white_stained_glass");
-    ItemType.Typed<ItemMeta> ORANGE_STAINED_GLASS = getItemType("orange_stained_glass");
-    ItemType.Typed<ItemMeta> MAGENTA_STAINED_GLASS = getItemType("magenta_stained_glass");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_STAINED_GLASS = getItemType("light_blue_stained_glass");
-    ItemType.Typed<ItemMeta> YELLOW_STAINED_GLASS = getItemType("yellow_stained_glass");
-    ItemType.Typed<ItemMeta> LIME_STAINED_GLASS = getItemType("lime_stained_glass");
-    ItemType.Typed<ItemMeta> PINK_STAINED_GLASS = getItemType("pink_stained_glass");
-    ItemType.Typed<ItemMeta> GRAY_STAINED_GLASS = getItemType("gray_stained_glass");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_STAINED_GLASS = getItemType("light_gray_stained_glass");
-    ItemType.Typed<ItemMeta> CYAN_STAINED_GLASS = getItemType("cyan_stained_glass");
-    ItemType.Typed<ItemMeta> PURPLE_STAINED_GLASS = getItemType("purple_stained_glass");
-    ItemType.Typed<ItemMeta> BLUE_STAINED_GLASS = getItemType("blue_stained_glass");
-    ItemType.Typed<ItemMeta> BROWN_STAINED_GLASS = getItemType("brown_stained_glass");
-    ItemType.Typed<ItemMeta> GREEN_STAINED_GLASS = getItemType("green_stained_glass");
-    ItemType.Typed<ItemMeta> RED_STAINED_GLASS = getItemType("red_stained_glass");
-    ItemType.Typed<ItemMeta> BLACK_STAINED_GLASS = getItemType("black_stained_glass");
-    ItemType.Typed<ItemMeta> WHITE_STAINED_GLASS_PANE = getItemType("white_stained_glass_pane");
-    ItemType.Typed<ItemMeta> ORANGE_STAINED_GLASS_PANE = getItemType("orange_stained_glass_pane");
-    ItemType.Typed<ItemMeta> MAGENTA_STAINED_GLASS_PANE = getItemType("magenta_stained_glass_pane");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_STAINED_GLASS_PANE = getItemType("light_blue_stained_glass_pane");
-    ItemType.Typed<ItemMeta> YELLOW_STAINED_GLASS_PANE = getItemType("yellow_stained_glass_pane");
-    ItemType.Typed<ItemMeta> LIME_STAINED_GLASS_PANE = getItemType("lime_stained_glass_pane");
-    ItemType.Typed<ItemMeta> PINK_STAINED_GLASS_PANE = getItemType("pink_stained_glass_pane");
-    ItemType.Typed<ItemMeta> GRAY_STAINED_GLASS_PANE = getItemType("gray_stained_glass_pane");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_STAINED_GLASS_PANE = getItemType("light_gray_stained_glass_pane");
-    ItemType.Typed<ItemMeta> CYAN_STAINED_GLASS_PANE = getItemType("cyan_stained_glass_pane");
-    ItemType.Typed<ItemMeta> PURPLE_STAINED_GLASS_PANE = getItemType("purple_stained_glass_pane");
-    ItemType.Typed<ItemMeta> BLUE_STAINED_GLASS_PANE = getItemType("blue_stained_glass_pane");
-    ItemType.Typed<ItemMeta> BROWN_STAINED_GLASS_PANE = getItemType("brown_stained_glass_pane");
-    ItemType.Typed<ItemMeta> GREEN_STAINED_GLASS_PANE = getItemType("green_stained_glass_pane");
-    ItemType.Typed<ItemMeta> RED_STAINED_GLASS_PANE = getItemType("red_stained_glass_pane");
-    ItemType.Typed<ItemMeta> BLACK_STAINED_GLASS_PANE = getItemType("black_stained_glass_pane");
-    ItemType.Typed<ItemMeta> PRISMARINE = getItemType("prismarine");
-    ItemType.Typed<ItemMeta> PRISMARINE_BRICKS = getItemType("prismarine_bricks");
-    ItemType.Typed<ItemMeta> DARK_PRISMARINE = getItemType("dark_prismarine");
-    ItemType.Typed<ItemMeta> PRISMARINE_STAIRS = getItemType("prismarine_stairs");
-    ItemType.Typed<ItemMeta> PRISMARINE_BRICK_STAIRS = getItemType("prismarine_brick_stairs");
-    ItemType.Typed<ItemMeta> DARK_PRISMARINE_STAIRS = getItemType("dark_prismarine_stairs");
-    ItemType.Typed<ItemMeta> SEA_LANTERN = getItemType("sea_lantern");
-    ItemType.Typed<ItemMeta> RED_SANDSTONE = getItemType("red_sandstone");
-    ItemType.Typed<ItemMeta> CHISELED_RED_SANDSTONE = getItemType("chiseled_red_sandstone");
-    ItemType.Typed<ItemMeta> CUT_RED_SANDSTONE = getItemType("cut_red_sandstone");
-    ItemType.Typed<ItemMeta> RED_SANDSTONE_STAIRS = getItemType("red_sandstone_stairs");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> REPEATING_COMMAND_BLOCK = getItemType("repeating_command_block");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CHAIN_COMMAND_BLOCK = getItemType("chain_command_block");
-    ItemType.Typed<ItemMeta> MAGMA_BLOCK = getItemType("magma_block");
-    ItemType.Typed<ItemMeta> NETHER_WART_BLOCK = getItemType("nether_wart_block");
-    ItemType.Typed<ItemMeta> WARPED_WART_BLOCK = getItemType("warped_wart_block");
-    ItemType.Typed<ItemMeta> RED_NETHER_BRICKS = getItemType("red_nether_bricks");
-    ItemType.Typed<ItemMeta> BONE_BLOCK = getItemType("bone_block");
-    ItemType.Typed<ItemMeta> STRUCTURE_VOID = getItemType("structure_void");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SHULKER_BOX = getItemType("shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> WHITE_SHULKER_BOX = getItemType("white_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> ORANGE_SHULKER_BOX = getItemType("orange_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> MAGENTA_SHULKER_BOX = getItemType("magenta_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> LIGHT_BLUE_SHULKER_BOX = getItemType("light_blue_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> YELLOW_SHULKER_BOX = getItemType("yellow_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> LIME_SHULKER_BOX = getItemType("lime_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> PINK_SHULKER_BOX = getItemType("pink_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> GRAY_SHULKER_BOX = getItemType("gray_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> LIGHT_GRAY_SHULKER_BOX = getItemType("light_gray_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CYAN_SHULKER_BOX = getItemType("cyan_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> PURPLE_SHULKER_BOX = getItemType("purple_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BLUE_SHULKER_BOX = getItemType("blue_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BROWN_SHULKER_BOX = getItemType("brown_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> GREEN_SHULKER_BOX = getItemType("green_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> RED_SHULKER_BOX = getItemType("red_shulker_box");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BLACK_SHULKER_BOX = getItemType("black_shulker_box");
-    ItemType.Typed<ItemMeta> WHITE_GLAZED_TERRACOTTA = getItemType("white_glazed_terracotta");
-    ItemType.Typed<ItemMeta> ORANGE_GLAZED_TERRACOTTA = getItemType("orange_glazed_terracotta");
-    ItemType.Typed<ItemMeta> MAGENTA_GLAZED_TERRACOTTA = getItemType("magenta_glazed_terracotta");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_GLAZED_TERRACOTTA = getItemType("light_blue_glazed_terracotta");
-    ItemType.Typed<ItemMeta> YELLOW_GLAZED_TERRACOTTA = getItemType("yellow_glazed_terracotta");
-    ItemType.Typed<ItemMeta> LIME_GLAZED_TERRACOTTA = getItemType("lime_glazed_terracotta");
-    ItemType.Typed<ItemMeta> PINK_GLAZED_TERRACOTTA = getItemType("pink_glazed_terracotta");
-    ItemType.Typed<ItemMeta> GRAY_GLAZED_TERRACOTTA = getItemType("gray_glazed_terracotta");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_GLAZED_TERRACOTTA = getItemType("light_gray_glazed_terracotta");
-    ItemType.Typed<ItemMeta> CYAN_GLAZED_TERRACOTTA = getItemType("cyan_glazed_terracotta");
-    ItemType.Typed<ItemMeta> PURPLE_GLAZED_TERRACOTTA = getItemType("purple_glazed_terracotta");
-    ItemType.Typed<ItemMeta> BLUE_GLAZED_TERRACOTTA = getItemType("blue_glazed_terracotta");
-    ItemType.Typed<ItemMeta> BROWN_GLAZED_TERRACOTTA = getItemType("brown_glazed_terracotta");
-    ItemType.Typed<ItemMeta> GREEN_GLAZED_TERRACOTTA = getItemType("green_glazed_terracotta");
-    ItemType.Typed<ItemMeta> RED_GLAZED_TERRACOTTA = getItemType("red_glazed_terracotta");
-    ItemType.Typed<ItemMeta> BLACK_GLAZED_TERRACOTTA = getItemType("black_glazed_terracotta");
-    ItemType.Typed<ItemMeta> WHITE_CONCRETE = getItemType("white_concrete");
-    ItemType.Typed<ItemMeta> ORANGE_CONCRETE = getItemType("orange_concrete");
-    ItemType.Typed<ItemMeta> MAGENTA_CONCRETE = getItemType("magenta_concrete");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_CONCRETE = getItemType("light_blue_concrete");
-    ItemType.Typed<ItemMeta> YELLOW_CONCRETE = getItemType("yellow_concrete");
-    ItemType.Typed<ItemMeta> LIME_CONCRETE = getItemType("lime_concrete");
-    ItemType.Typed<ItemMeta> PINK_CONCRETE = getItemType("pink_concrete");
-    ItemType.Typed<ItemMeta> GRAY_CONCRETE = getItemType("gray_concrete");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_CONCRETE = getItemType("light_gray_concrete");
-    ItemType.Typed<ItemMeta> CYAN_CONCRETE = getItemType("cyan_concrete");
-    ItemType.Typed<ItemMeta> PURPLE_CONCRETE = getItemType("purple_concrete");
-    ItemType.Typed<ItemMeta> BLUE_CONCRETE = getItemType("blue_concrete");
-    ItemType.Typed<ItemMeta> BROWN_CONCRETE = getItemType("brown_concrete");
-    ItemType.Typed<ItemMeta> GREEN_CONCRETE = getItemType("green_concrete");
-    ItemType.Typed<ItemMeta> RED_CONCRETE = getItemType("red_concrete");
-    ItemType.Typed<ItemMeta> BLACK_CONCRETE = getItemType("black_concrete");
-    ItemType.Typed<ItemMeta> WHITE_CONCRETE_POWDER = getItemType("white_concrete_powder");
-    ItemType.Typed<ItemMeta> ORANGE_CONCRETE_POWDER = getItemType("orange_concrete_powder");
-    ItemType.Typed<ItemMeta> MAGENTA_CONCRETE_POWDER = getItemType("magenta_concrete_powder");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_CONCRETE_POWDER = getItemType("light_blue_concrete_powder");
-    ItemType.Typed<ItemMeta> YELLOW_CONCRETE_POWDER = getItemType("yellow_concrete_powder");
-    ItemType.Typed<ItemMeta> LIME_CONCRETE_POWDER = getItemType("lime_concrete_powder");
-    ItemType.Typed<ItemMeta> PINK_CONCRETE_POWDER = getItemType("pink_concrete_powder");
-    ItemType.Typed<ItemMeta> GRAY_CONCRETE_POWDER = getItemType("gray_concrete_powder");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_CONCRETE_POWDER = getItemType("light_gray_concrete_powder");
-    ItemType.Typed<ItemMeta> CYAN_CONCRETE_POWDER = getItemType("cyan_concrete_powder");
-    ItemType.Typed<ItemMeta> PURPLE_CONCRETE_POWDER = getItemType("purple_concrete_powder");
-    ItemType.Typed<ItemMeta> BLUE_CONCRETE_POWDER = getItemType("blue_concrete_powder");
-    ItemType.Typed<ItemMeta> BROWN_CONCRETE_POWDER = getItemType("brown_concrete_powder");
-    ItemType.Typed<ItemMeta> GREEN_CONCRETE_POWDER = getItemType("green_concrete_powder");
-    ItemType.Typed<ItemMeta> RED_CONCRETE_POWDER = getItemType("red_concrete_powder");
-    ItemType.Typed<ItemMeta> BLACK_CONCRETE_POWDER = getItemType("black_concrete_powder");
-    ItemType.Typed<ItemMeta> TURTLE_EGG = getItemType("turtle_egg");
-    ItemType.Typed<ItemMeta> SNIFFER_EGG = getItemType("sniffer_egg");
-    ItemType.Typed<ItemMeta> DEAD_TUBE_CORAL_BLOCK = getItemType("dead_tube_coral_block");
-    ItemType.Typed<ItemMeta> DEAD_BRAIN_CORAL_BLOCK = getItemType("dead_brain_coral_block");
-    ItemType.Typed<ItemMeta> DEAD_BUBBLE_CORAL_BLOCK = getItemType("dead_bubble_coral_block");
-    ItemType.Typed<ItemMeta> DEAD_FIRE_CORAL_BLOCK = getItemType("dead_fire_coral_block");
-    ItemType.Typed<ItemMeta> DEAD_HORN_CORAL_BLOCK = getItemType("dead_horn_coral_block");
-    ItemType.Typed<ItemMeta> TUBE_CORAL_BLOCK = getItemType("tube_coral_block");
-    ItemType.Typed<ItemMeta> BRAIN_CORAL_BLOCK = getItemType("brain_coral_block");
-    ItemType.Typed<ItemMeta> BUBBLE_CORAL_BLOCK = getItemType("bubble_coral_block");
-    ItemType.Typed<ItemMeta> FIRE_CORAL_BLOCK = getItemType("fire_coral_block");
-    ItemType.Typed<ItemMeta> HORN_CORAL_BLOCK = getItemType("horn_coral_block");
-    ItemType.Typed<ItemMeta> TUBE_CORAL = getItemType("tube_coral");
-    ItemType.Typed<ItemMeta> BRAIN_CORAL = getItemType("brain_coral");
-    ItemType.Typed<ItemMeta> BUBBLE_CORAL = getItemType("bubble_coral");
-    ItemType.Typed<ItemMeta> FIRE_CORAL = getItemType("fire_coral");
-    ItemType.Typed<ItemMeta> HORN_CORAL = getItemType("horn_coral");
-    ItemType.Typed<ItemMeta> DEAD_BRAIN_CORAL = getItemType("dead_brain_coral");
-    ItemType.Typed<ItemMeta> DEAD_BUBBLE_CORAL = getItemType("dead_bubble_coral");
-    ItemType.Typed<ItemMeta> DEAD_FIRE_CORAL = getItemType("dead_fire_coral");
-    ItemType.Typed<ItemMeta> DEAD_HORN_CORAL = getItemType("dead_horn_coral");
-    ItemType.Typed<ItemMeta> DEAD_TUBE_CORAL = getItemType("dead_tube_coral");
-    ItemType.Typed<ItemMeta> TUBE_CORAL_FAN = getItemType("tube_coral_fan");
-    ItemType.Typed<ItemMeta> BRAIN_CORAL_FAN = getItemType("brain_coral_fan");
-    ItemType.Typed<ItemMeta> BUBBLE_CORAL_FAN = getItemType("bubble_coral_fan");
-    ItemType.Typed<ItemMeta> FIRE_CORAL_FAN = getItemType("fire_coral_fan");
-    ItemType.Typed<ItemMeta> HORN_CORAL_FAN = getItemType("horn_coral_fan");
-    ItemType.Typed<ItemMeta> DEAD_TUBE_CORAL_FAN = getItemType("dead_tube_coral_fan");
-    ItemType.Typed<ItemMeta> DEAD_BRAIN_CORAL_FAN = getItemType("dead_brain_coral_fan");
-    ItemType.Typed<ItemMeta> DEAD_BUBBLE_CORAL_FAN = getItemType("dead_bubble_coral_fan");
-    ItemType.Typed<ItemMeta> DEAD_FIRE_CORAL_FAN = getItemType("dead_fire_coral_fan");
-    ItemType.Typed<ItemMeta> DEAD_HORN_CORAL_FAN = getItemType("dead_horn_coral_fan");
-    ItemType.Typed<ItemMeta> BLUE_ICE = getItemType("blue_ice");
-    ItemType.Typed<ItemMeta> CONDUIT = getItemType("conduit");
-    ItemType.Typed<ItemMeta> POLISHED_GRANITE_STAIRS = getItemType("polished_granite_stairs");
-    ItemType.Typed<ItemMeta> SMOOTH_RED_SANDSTONE_STAIRS = getItemType("smooth_red_sandstone_stairs");
-    ItemType.Typed<ItemMeta> MOSSY_STONE_BRICK_STAIRS = getItemType("mossy_stone_brick_stairs");
-    ItemType.Typed<ItemMeta> POLISHED_DIORITE_STAIRS = getItemType("polished_diorite_stairs");
-    ItemType.Typed<ItemMeta> MOSSY_COBBLESTONE_STAIRS = getItemType("mossy_cobblestone_stairs");
-    ItemType.Typed<ItemMeta> END_STONE_BRICK_STAIRS = getItemType("end_stone_brick_stairs");
-    ItemType.Typed<ItemMeta> STONE_STAIRS = getItemType("stone_stairs");
-    ItemType.Typed<ItemMeta> SMOOTH_SANDSTONE_STAIRS = getItemType("smooth_sandstone_stairs");
-    ItemType.Typed<ItemMeta> SMOOTH_QUARTZ_STAIRS = getItemType("smooth_quartz_stairs");
-    ItemType.Typed<ItemMeta> GRANITE_STAIRS = getItemType("granite_stairs");
-    ItemType.Typed<ItemMeta> ANDESITE_STAIRS = getItemType("andesite_stairs");
-    ItemType.Typed<ItemMeta> RED_NETHER_BRICK_STAIRS = getItemType("red_nether_brick_stairs");
-    ItemType.Typed<ItemMeta> POLISHED_ANDESITE_STAIRS = getItemType("polished_andesite_stairs");
-    ItemType.Typed<ItemMeta> DIORITE_STAIRS = getItemType("diorite_stairs");
-    ItemType.Typed<ItemMeta> COBBLED_DEEPSLATE_STAIRS = getItemType("cobbled_deepslate_stairs");
-    ItemType.Typed<ItemMeta> POLISHED_DEEPSLATE_STAIRS = getItemType("polished_deepslate_stairs");
-    ItemType.Typed<ItemMeta> DEEPSLATE_BRICK_STAIRS = getItemType("deepslate_brick_stairs");
-    ItemType.Typed<ItemMeta> DEEPSLATE_TILE_STAIRS = getItemType("deepslate_tile_stairs");
-    ItemType.Typed<ItemMeta> POLISHED_GRANITE_SLAB = getItemType("polished_granite_slab");
-    ItemType.Typed<ItemMeta> SMOOTH_RED_SANDSTONE_SLAB = getItemType("smooth_red_sandstone_slab");
-    ItemType.Typed<ItemMeta> MOSSY_STONE_BRICK_SLAB = getItemType("mossy_stone_brick_slab");
-    ItemType.Typed<ItemMeta> POLISHED_DIORITE_SLAB = getItemType("polished_diorite_slab");
-    ItemType.Typed<ItemMeta> MOSSY_COBBLESTONE_SLAB = getItemType("mossy_cobblestone_slab");
-    ItemType.Typed<ItemMeta> END_STONE_BRICK_SLAB = getItemType("end_stone_brick_slab");
-    ItemType.Typed<ItemMeta> SMOOTH_SANDSTONE_SLAB = getItemType("smooth_sandstone_slab");
-    ItemType.Typed<ItemMeta> SMOOTH_QUARTZ_SLAB = getItemType("smooth_quartz_slab");
-    ItemType.Typed<ItemMeta> GRANITE_SLAB = getItemType("granite_slab");
-    ItemType.Typed<ItemMeta> ANDESITE_SLAB = getItemType("andesite_slab");
-    ItemType.Typed<ItemMeta> RED_NETHER_BRICK_SLAB = getItemType("red_nether_brick_slab");
-    ItemType.Typed<ItemMeta> POLISHED_ANDESITE_SLAB = getItemType("polished_andesite_slab");
-    ItemType.Typed<ItemMeta> DIORITE_SLAB = getItemType("diorite_slab");
-    ItemType.Typed<ItemMeta> COBBLED_DEEPSLATE_SLAB = getItemType("cobbled_deepslate_slab");
-    ItemType.Typed<ItemMeta> POLISHED_DEEPSLATE_SLAB = getItemType("polished_deepslate_slab");
-    ItemType.Typed<ItemMeta> DEEPSLATE_BRICK_SLAB = getItemType("deepslate_brick_slab");
-    ItemType.Typed<ItemMeta> DEEPSLATE_TILE_SLAB = getItemType("deepslate_tile_slab");
-    ItemType.Typed<ItemMeta> SCAFFOLDING = getItemType("scaffolding");
-    ItemType.Typed<ItemMeta> REDSTONE = getItemType("redstone");
-    ItemType.Typed<ItemMeta> REDSTONE_TORCH = getItemType("redstone_torch");
-    ItemType.Typed<ItemMeta> REDSTONE_BLOCK = getItemType("redstone_block");
-    ItemType.Typed<ItemMeta> REPEATER = getItemType("repeater");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> COMPARATOR = getItemType("comparator");
-    ItemType.Typed<ItemMeta> PISTON = getItemType("piston");
-    ItemType.Typed<ItemMeta> STICKY_PISTON = getItemType("sticky_piston");
-    ItemType.Typed<ItemMeta> SLIME_BLOCK = getItemType("slime_block");
-    ItemType.Typed<ItemMeta> HONEY_BLOCK = getItemType("honey_block");
-    ItemType.Typed<ItemMeta> OBSERVER = getItemType("observer");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> HOPPER = getItemType("hopper");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> DISPENSER = getItemType("dispenser");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> DROPPER = getItemType("dropper");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> LECTERN = getItemType("lectern");
-    ItemType.Typed<ItemMeta> TARGET = getItemType("target");
-    ItemType.Typed<ItemMeta> LEVER = getItemType("lever");
-    ItemType.Typed<ItemMeta> LIGHTNING_ROD = getItemType("lightning_rod");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> DAYLIGHT_DETECTOR = getItemType("daylight_detector");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SCULK_SENSOR = getItemType("sculk_sensor");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CALIBRATED_SCULK_SENSOR = getItemType("calibrated_sculk_sensor");
-    ItemType.Typed<ItemMeta> TRIPWIRE_HOOK = getItemType("tripwire_hook");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> TRAPPED_CHEST = getItemType("trapped_chest");
-    ItemType.Typed<ItemMeta> TNT = getItemType("tnt");
-    ItemType.Typed<ItemMeta> REDSTONE_LAMP = getItemType("redstone_lamp");
-    ItemType.Typed<ItemMeta> NOTE_BLOCK = getItemType("note_block");
-    ItemType.Typed<ItemMeta> STONE_BUTTON = getItemType("stone_button");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BUTTON = getItemType("polished_blackstone_button");
-    ItemType.Typed<ItemMeta> OAK_BUTTON = getItemType("oak_button");
-    ItemType.Typed<ItemMeta> SPRUCE_BUTTON = getItemType("spruce_button");
-    ItemType.Typed<ItemMeta> BIRCH_BUTTON = getItemType("birch_button");
-    ItemType.Typed<ItemMeta> JUNGLE_BUTTON = getItemType("jungle_button");
-    ItemType.Typed<ItemMeta> ACACIA_BUTTON = getItemType("acacia_button");
-    ItemType.Typed<ItemMeta> CHERRY_BUTTON = getItemType("cherry_button");
-    ItemType.Typed<ItemMeta> DARK_OAK_BUTTON = getItemType("dark_oak_button");
-    ItemType.Typed<ItemMeta> PALE_OAK_BUTTON = getItemType("pale_oak_button");
-    ItemType.Typed<ItemMeta> MANGROVE_BUTTON = getItemType("mangrove_button");
-    ItemType.Typed<ItemMeta> BAMBOO_BUTTON = getItemType("bamboo_button");
-    ItemType.Typed<ItemMeta> CRIMSON_BUTTON = getItemType("crimson_button");
-    ItemType.Typed<ItemMeta> WARPED_BUTTON = getItemType("warped_button");
-    ItemType.Typed<ItemMeta> STONE_PRESSURE_PLATE = getItemType("stone_pressure_plate");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_PRESSURE_PLATE = getItemType("polished_blackstone_pressure_plate");
-    ItemType.Typed<ItemMeta> LIGHT_WEIGHTED_PRESSURE_PLATE = getItemType("light_weighted_pressure_plate");
-    ItemType.Typed<ItemMeta> HEAVY_WEIGHTED_PRESSURE_PLATE = getItemType("heavy_weighted_pressure_plate");
-    ItemType.Typed<ItemMeta> OAK_PRESSURE_PLATE = getItemType("oak_pressure_plate");
-    ItemType.Typed<ItemMeta> SPRUCE_PRESSURE_PLATE = getItemType("spruce_pressure_plate");
-    ItemType.Typed<ItemMeta> BIRCH_PRESSURE_PLATE = getItemType("birch_pressure_plate");
-    ItemType.Typed<ItemMeta> JUNGLE_PRESSURE_PLATE = getItemType("jungle_pressure_plate");
-    ItemType.Typed<ItemMeta> ACACIA_PRESSURE_PLATE = getItemType("acacia_pressure_plate");
-    ItemType.Typed<ItemMeta> CHERRY_PRESSURE_PLATE = getItemType("cherry_pressure_plate");
-    ItemType.Typed<ItemMeta> DARK_OAK_PRESSURE_PLATE = getItemType("dark_oak_pressure_plate");
-    ItemType.Typed<ItemMeta> PALE_OAK_PRESSURE_PLATE = getItemType("pale_oak_pressure_plate");
-    ItemType.Typed<ItemMeta> MANGROVE_PRESSURE_PLATE = getItemType("mangrove_pressure_plate");
-    ItemType.Typed<ItemMeta> BAMBOO_PRESSURE_PLATE = getItemType("bamboo_pressure_plate");
-    ItemType.Typed<ItemMeta> CRIMSON_PRESSURE_PLATE = getItemType("crimson_pressure_plate");
-    ItemType.Typed<ItemMeta> WARPED_PRESSURE_PLATE = getItemType("warped_pressure_plate");
-    ItemType.Typed<ItemMeta> IRON_DOOR = getItemType("iron_door");
-    ItemType.Typed<ItemMeta> OAK_DOOR = getItemType("oak_door");
-    ItemType.Typed<ItemMeta> SPRUCE_DOOR = getItemType("spruce_door");
-    ItemType.Typed<ItemMeta> BIRCH_DOOR = getItemType("birch_door");
-    ItemType.Typed<ItemMeta> JUNGLE_DOOR = getItemType("jungle_door");
-    ItemType.Typed<ItemMeta> ACACIA_DOOR = getItemType("acacia_door");
-    ItemType.Typed<ItemMeta> CHERRY_DOOR = getItemType("cherry_door");
-    ItemType.Typed<ItemMeta> DARK_OAK_DOOR = getItemType("dark_oak_door");
-    ItemType.Typed<ItemMeta> PALE_OAK_DOOR = getItemType("pale_oak_door");
-    ItemType.Typed<ItemMeta> MANGROVE_DOOR = getItemType("mangrove_door");
-    ItemType.Typed<ItemMeta> BAMBOO_DOOR = getItemType("bamboo_door");
-    ItemType.Typed<ItemMeta> CRIMSON_DOOR = getItemType("crimson_door");
-    ItemType.Typed<ItemMeta> WARPED_DOOR = getItemType("warped_door");
-    ItemType.Typed<ItemMeta> COPPER_DOOR = getItemType("copper_door");
-    ItemType.Typed<ItemMeta> EXPOSED_COPPER_DOOR = getItemType("exposed_copper_door");
-    ItemType.Typed<ItemMeta> WEATHERED_COPPER_DOOR = getItemType("weathered_copper_door");
-    ItemType.Typed<ItemMeta> OXIDIZED_COPPER_DOOR = getItemType("oxidized_copper_door");
-    ItemType.Typed<ItemMeta> WAXED_COPPER_DOOR = getItemType("waxed_copper_door");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER_DOOR = getItemType("waxed_exposed_copper_door");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER_DOOR = getItemType("waxed_weathered_copper_door");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER_DOOR = getItemType("waxed_oxidized_copper_door");
-    ItemType.Typed<ItemMeta> IRON_TRAPDOOR = getItemType("iron_trapdoor");
-    ItemType.Typed<ItemMeta> OAK_TRAPDOOR = getItemType("oak_trapdoor");
-    ItemType.Typed<ItemMeta> SPRUCE_TRAPDOOR = getItemType("spruce_trapdoor");
-    ItemType.Typed<ItemMeta> BIRCH_TRAPDOOR = getItemType("birch_trapdoor");
-    ItemType.Typed<ItemMeta> JUNGLE_TRAPDOOR = getItemType("jungle_trapdoor");
-    ItemType.Typed<ItemMeta> ACACIA_TRAPDOOR = getItemType("acacia_trapdoor");
-    ItemType.Typed<ItemMeta> CHERRY_TRAPDOOR = getItemType("cherry_trapdoor");
-    ItemType.Typed<ItemMeta> DARK_OAK_TRAPDOOR = getItemType("dark_oak_trapdoor");
-    ItemType.Typed<ItemMeta> PALE_OAK_TRAPDOOR = getItemType("pale_oak_trapdoor");
-    ItemType.Typed<ItemMeta> MANGROVE_TRAPDOOR = getItemType("mangrove_trapdoor");
-    ItemType.Typed<ItemMeta> BAMBOO_TRAPDOOR = getItemType("bamboo_trapdoor");
-    ItemType.Typed<ItemMeta> CRIMSON_TRAPDOOR = getItemType("crimson_trapdoor");
-    ItemType.Typed<ItemMeta> WARPED_TRAPDOOR = getItemType("warped_trapdoor");
-    ItemType.Typed<ItemMeta> COPPER_TRAPDOOR = getItemType("copper_trapdoor");
-    ItemType.Typed<ItemMeta> EXPOSED_COPPER_TRAPDOOR = getItemType("exposed_copper_trapdoor");
-    ItemType.Typed<ItemMeta> WEATHERED_COPPER_TRAPDOOR = getItemType("weathered_copper_trapdoor");
-    ItemType.Typed<ItemMeta> OXIDIZED_COPPER_TRAPDOOR = getItemType("oxidized_copper_trapdoor");
-    ItemType.Typed<ItemMeta> WAXED_COPPER_TRAPDOOR = getItemType("waxed_copper_trapdoor");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER_TRAPDOOR = getItemType("waxed_exposed_copper_trapdoor");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER_TRAPDOOR = getItemType("waxed_weathered_copper_trapdoor");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER_TRAPDOOR = getItemType("waxed_oxidized_copper_trapdoor");
-    ItemType.Typed<ItemMeta> OAK_FENCE_GATE = getItemType("oak_fence_gate");
-    ItemType.Typed<ItemMeta> SPRUCE_FENCE_GATE = getItemType("spruce_fence_gate");
-    ItemType.Typed<ItemMeta> BIRCH_FENCE_GATE = getItemType("birch_fence_gate");
-    ItemType.Typed<ItemMeta> JUNGLE_FENCE_GATE = getItemType("jungle_fence_gate");
-    ItemType.Typed<ItemMeta> ACACIA_FENCE_GATE = getItemType("acacia_fence_gate");
-    ItemType.Typed<ItemMeta> CHERRY_FENCE_GATE = getItemType("cherry_fence_gate");
-    ItemType.Typed<ItemMeta> DARK_OAK_FENCE_GATE = getItemType("dark_oak_fence_gate");
-    ItemType.Typed<ItemMeta> PALE_OAK_FENCE_GATE = getItemType("pale_oak_fence_gate");
-    ItemType.Typed<ItemMeta> MANGROVE_FENCE_GATE = getItemType("mangrove_fence_gate");
-    ItemType.Typed<ItemMeta> BAMBOO_FENCE_GATE = getItemType("bamboo_fence_gate");
-    ItemType.Typed<ItemMeta> CRIMSON_FENCE_GATE = getItemType("crimson_fence_gate");
-    ItemType.Typed<ItemMeta> WARPED_FENCE_GATE = getItemType("warped_fence_gate");
-    ItemType.Typed<ItemMeta> POWERED_RAIL = getItemType("powered_rail");
-    ItemType.Typed<ItemMeta> DETECTOR_RAIL = getItemType("detector_rail");
-    ItemType.Typed<ItemMeta> RAIL = getItemType("rail");
-    ItemType.Typed<ItemMeta> ACTIVATOR_RAIL = getItemType("activator_rail");
-    ItemType.Typed<ItemMeta> SADDLE = getItemType("saddle");
-    ItemType.Typed<ItemMeta> MINECART = getItemType("minecart");
-    ItemType.Typed<ItemMeta> CHEST_MINECART = getItemType("chest_minecart");
-    ItemType.Typed<ItemMeta> FURNACE_MINECART = getItemType("furnace_minecart");
-    ItemType.Typed<ItemMeta> TNT_MINECART = getItemType("tnt_minecart");
-    ItemType.Typed<ItemMeta> HOPPER_MINECART = getItemType("hopper_minecart");
-    ItemType.Typed<ItemMeta> CARROT_ON_A_STICK = getItemType("carrot_on_a_stick");
-    ItemType.Typed<ItemMeta> WARPED_FUNGUS_ON_A_STICK = getItemType("warped_fungus_on_a_stick");
-    ItemType.Typed<ItemMeta> PHANTOM_MEMBRANE = getItemType("phantom_membrane");
-    ItemType.Typed<ItemMeta> ELYTRA = getItemType("elytra");
-    ItemType.Typed<ItemMeta> OAK_BOAT = getItemType("oak_boat");
-    ItemType.Typed<ItemMeta> OAK_CHEST_BOAT = getItemType("oak_chest_boat");
-    ItemType.Typed<ItemMeta> SPRUCE_BOAT = getItemType("spruce_boat");
-    ItemType.Typed<ItemMeta> SPRUCE_CHEST_BOAT = getItemType("spruce_chest_boat");
-    ItemType.Typed<ItemMeta> BIRCH_BOAT = getItemType("birch_boat");
-    ItemType.Typed<ItemMeta> BIRCH_CHEST_BOAT = getItemType("birch_chest_boat");
-    ItemType.Typed<ItemMeta> JUNGLE_BOAT = getItemType("jungle_boat");
-    ItemType.Typed<ItemMeta> JUNGLE_CHEST_BOAT = getItemType("jungle_chest_boat");
+    // Start generate - ItemType
+    // @GeneratedFrom 1.21.4
     ItemType.Typed<ItemMeta> ACACIA_BOAT = getItemType("acacia_boat");
+
+    ItemType.Typed<ItemMeta> ACACIA_BUTTON = getItemType("acacia_button");
+
     ItemType.Typed<ItemMeta> ACACIA_CHEST_BOAT = getItemType("acacia_chest_boat");
-    ItemType.Typed<ItemMeta> CHERRY_BOAT = getItemType("cherry_boat");
-    ItemType.Typed<ItemMeta> CHERRY_CHEST_BOAT = getItemType("cherry_chest_boat");
-    ItemType.Typed<ItemMeta> DARK_OAK_BOAT = getItemType("dark_oak_boat");
-    ItemType.Typed<ItemMeta> DARK_OAK_CHEST_BOAT = getItemType("dark_oak_chest_boat");
-    ItemType.Typed<ItemMeta> PALE_OAK_BOAT = getItemType("pale_oak_boat");
-    ItemType.Typed<ItemMeta> PALE_OAK_CHEST_BOAT = getItemType("pale_oak_chest_boat");
-    ItemType.Typed<ItemMeta> MANGROVE_BOAT = getItemType("mangrove_boat");
-    ItemType.Typed<ItemMeta> MANGROVE_CHEST_BOAT = getItemType("mangrove_chest_boat");
-    ItemType.Typed<ItemMeta> BAMBOO_RAFT = getItemType("bamboo_raft");
-    ItemType.Typed<ItemMeta> BAMBOO_CHEST_RAFT = getItemType("bamboo_chest_raft");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> STRUCTURE_BLOCK = getItemType("structure_block");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> JIGSAW = getItemType("jigsaw");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> TURTLE_HELMET = getItemType("turtle_helmet");
-    ItemType.Typed<ItemMeta> TURTLE_SCUTE = getItemType("turtle_scute");
-    ItemType.Typed<ItemMeta> ARMADILLO_SCUTE = getItemType("armadillo_scute");
-    /**
-     * ItemMeta: {@link ColorableArmorMeta}
-     */
-    ItemType.Typed<ColorableArmorMeta> WOLF_ARMOR = getItemType("wolf_armor");
-    ItemType.Typed<ItemMeta> FLINT_AND_STEEL = getItemType("flint_and_steel");
-    ItemType.Typed<ItemMeta> BOWL = getItemType("bowl");
-    ItemType.Typed<ItemMeta> APPLE = getItemType("apple");
-    ItemType.Typed<ItemMeta> BOW = getItemType("bow");
-    ItemType.Typed<ItemMeta> ARROW = getItemType("arrow");
-    ItemType.Typed<ItemMeta> COAL = getItemType("coal");
-    ItemType.Typed<ItemMeta> CHARCOAL = getItemType("charcoal");
-    ItemType.Typed<ItemMeta> DIAMOND = getItemType("diamond");
-    ItemType.Typed<ItemMeta> EMERALD = getItemType("emerald");
-    ItemType.Typed<ItemMeta> LAPIS_LAZULI = getItemType("lapis_lazuli");
-    ItemType.Typed<ItemMeta> QUARTZ = getItemType("quartz");
-    ItemType.Typed<ItemMeta> AMETHYST_SHARD = getItemType("amethyst_shard");
-    ItemType.Typed<ItemMeta> RAW_IRON = getItemType("raw_iron");
-    ItemType.Typed<ItemMeta> IRON_INGOT = getItemType("iron_ingot");
-    ItemType.Typed<ItemMeta> RAW_COPPER = getItemType("raw_copper");
-    ItemType.Typed<ItemMeta> COPPER_INGOT = getItemType("copper_ingot");
-    ItemType.Typed<ItemMeta> RAW_GOLD = getItemType("raw_gold");
-    ItemType.Typed<ItemMeta> GOLD_INGOT = getItemType("gold_ingot");
-    ItemType.Typed<ItemMeta> NETHERITE_INGOT = getItemType("netherite_ingot");
-    ItemType.Typed<ItemMeta> NETHERITE_SCRAP = getItemType("netherite_scrap");
-    ItemType.Typed<ItemMeta> WOODEN_SWORD = getItemType("wooden_sword");
-    ItemType.Typed<ItemMeta> WOODEN_SHOVEL = getItemType("wooden_shovel");
-    ItemType.Typed<ItemMeta> WOODEN_PICKAXE = getItemType("wooden_pickaxe");
-    ItemType.Typed<ItemMeta> WOODEN_AXE = getItemType("wooden_axe");
-    ItemType.Typed<ItemMeta> WOODEN_HOE = getItemType("wooden_hoe");
-    ItemType.Typed<ItemMeta> STONE_SWORD = getItemType("stone_sword");
-    ItemType.Typed<ItemMeta> STONE_SHOVEL = getItemType("stone_shovel");
-    ItemType.Typed<ItemMeta> STONE_PICKAXE = getItemType("stone_pickaxe");
-    ItemType.Typed<ItemMeta> STONE_AXE = getItemType("stone_axe");
-    ItemType.Typed<ItemMeta> STONE_HOE = getItemType("stone_hoe");
-    ItemType.Typed<ItemMeta> GOLDEN_SWORD = getItemType("golden_sword");
-    ItemType.Typed<ItemMeta> GOLDEN_SHOVEL = getItemType("golden_shovel");
-    ItemType.Typed<ItemMeta> GOLDEN_PICKAXE = getItemType("golden_pickaxe");
-    ItemType.Typed<ItemMeta> GOLDEN_AXE = getItemType("golden_axe");
-    ItemType.Typed<ItemMeta> GOLDEN_HOE = getItemType("golden_hoe");
-    ItemType.Typed<ItemMeta> IRON_SWORD = getItemType("iron_sword");
-    ItemType.Typed<ItemMeta> IRON_SHOVEL = getItemType("iron_shovel");
-    ItemType.Typed<ItemMeta> IRON_PICKAXE = getItemType("iron_pickaxe");
-    ItemType.Typed<ItemMeta> IRON_AXE = getItemType("iron_axe");
-    ItemType.Typed<ItemMeta> IRON_HOE = getItemType("iron_hoe");
-    ItemType.Typed<ItemMeta> DIAMOND_SWORD = getItemType("diamond_sword");
-    ItemType.Typed<ItemMeta> DIAMOND_SHOVEL = getItemType("diamond_shovel");
-    ItemType.Typed<ItemMeta> DIAMOND_PICKAXE = getItemType("diamond_pickaxe");
-    ItemType.Typed<ItemMeta> DIAMOND_AXE = getItemType("diamond_axe");
-    ItemType.Typed<ItemMeta> DIAMOND_HOE = getItemType("diamond_hoe");
-    ItemType.Typed<ItemMeta> NETHERITE_SWORD = getItemType("netherite_sword");
-    ItemType.Typed<ItemMeta> NETHERITE_SHOVEL = getItemType("netherite_shovel");
-    ItemType.Typed<ItemMeta> NETHERITE_PICKAXE = getItemType("netherite_pickaxe");
-    ItemType.Typed<ItemMeta> NETHERITE_AXE = getItemType("netherite_axe");
-    ItemType.Typed<ItemMeta> NETHERITE_HOE = getItemType("netherite_hoe");
-    ItemType.Typed<ItemMeta> STICK = getItemType("stick");
-    ItemType.Typed<ItemMeta> MUSHROOM_STEW = getItemType("mushroom_stew");
-    ItemType.Typed<ItemMeta> STRING = getItemType("string");
-    ItemType.Typed<ItemMeta> FEATHER = getItemType("feather");
-    ItemType.Typed<ItemMeta> GUNPOWDER = getItemType("gunpowder");
-    ItemType.Typed<ItemMeta> WHEAT_SEEDS = getItemType("wheat_seeds");
-    ItemType.Typed<ItemMeta> WHEAT = getItemType("wheat");
-    ItemType.Typed<ItemMeta> BREAD = getItemType("bread");
-    /**
-     * ItemMeta: {@link ColorableArmorMeta}
-     */
-    ItemType.Typed<ColorableArmorMeta> LEATHER_HELMET = getItemType("leather_helmet");
-    /**
-     * ItemMeta: {@link ColorableArmorMeta}
-     */
-    ItemType.Typed<ColorableArmorMeta> LEATHER_CHESTPLATE = getItemType("leather_chestplate");
-    /**
-     * ItemMeta: {@link ColorableArmorMeta}
-     */
-    ItemType.Typed<ColorableArmorMeta> LEATHER_LEGGINGS = getItemType("leather_leggings");
-    /**
-     * ItemMeta: {@link ColorableArmorMeta}
-     */
-    ItemType.Typed<ColorableArmorMeta> LEATHER_BOOTS = getItemType("leather_boots");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> CHAINMAIL_HELMET = getItemType("chainmail_helmet");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> CHAINMAIL_CHESTPLATE = getItemType("chainmail_chestplate");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> CHAINMAIL_LEGGINGS = getItemType("chainmail_leggings");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> CHAINMAIL_BOOTS = getItemType("chainmail_boots");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> IRON_HELMET = getItemType("iron_helmet");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> IRON_CHESTPLATE = getItemType("iron_chestplate");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> IRON_LEGGINGS = getItemType("iron_leggings");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> IRON_BOOTS = getItemType("iron_boots");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> DIAMOND_HELMET = getItemType("diamond_helmet");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> DIAMOND_CHESTPLATE = getItemType("diamond_chestplate");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> DIAMOND_LEGGINGS = getItemType("diamond_leggings");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> DIAMOND_BOOTS = getItemType("diamond_boots");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> GOLDEN_HELMET = getItemType("golden_helmet");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> GOLDEN_CHESTPLATE = getItemType("golden_chestplate");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> GOLDEN_LEGGINGS = getItemType("golden_leggings");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> GOLDEN_BOOTS = getItemType("golden_boots");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> NETHERITE_HELMET = getItemType("netherite_helmet");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> NETHERITE_CHESTPLATE = getItemType("netherite_chestplate");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> NETHERITE_LEGGINGS = getItemType("netherite_leggings");
-    /**
-     * ItemMeta: {@link ArmorMeta}
-     */
-    ItemType.Typed<ArmorMeta> NETHERITE_BOOTS = getItemType("netherite_boots");
-    ItemType.Typed<ItemMeta> FLINT = getItemType("flint");
-    ItemType.Typed<ItemMeta> PORKCHOP = getItemType("porkchop");
-    ItemType.Typed<ItemMeta> COOKED_PORKCHOP = getItemType("cooked_porkchop");
-    ItemType.Typed<ItemMeta> PAINTING = getItemType("painting");
-    ItemType.Typed<ItemMeta> GOLDEN_APPLE = getItemType("golden_apple");
-    ItemType.Typed<ItemMeta> ENCHANTED_GOLDEN_APPLE = getItemType("enchanted_golden_apple");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> OAK_SIGN = getItemType("oak_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SPRUCE_SIGN = getItemType("spruce_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BIRCH_SIGN = getItemType("birch_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> JUNGLE_SIGN = getItemType("jungle_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> ACACIA_SIGN = getItemType("acacia_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CHERRY_SIGN = getItemType("cherry_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> DARK_OAK_SIGN = getItemType("dark_oak_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> PALE_OAK_SIGN = getItemType("pale_oak_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> MANGROVE_SIGN = getItemType("mangrove_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BAMBOO_SIGN = getItemType("bamboo_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CRIMSON_SIGN = getItemType("crimson_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> WARPED_SIGN = getItemType("warped_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> OAK_HANGING_SIGN = getItemType("oak_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SPRUCE_HANGING_SIGN = getItemType("spruce_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BIRCH_HANGING_SIGN = getItemType("birch_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> JUNGLE_HANGING_SIGN = getItemType("jungle_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> ACACIA_HANGING_SIGN = getItemType("acacia_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CHERRY_HANGING_SIGN = getItemType("cherry_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> DARK_OAK_HANGING_SIGN = getItemType("dark_oak_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> PALE_OAK_HANGING_SIGN = getItemType("pale_oak_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> MANGROVE_HANGING_SIGN = getItemType("mangrove_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BAMBOO_HANGING_SIGN = getItemType("bamboo_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CRIMSON_HANGING_SIGN = getItemType("crimson_hanging_sign");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> WARPED_HANGING_SIGN = getItemType("warped_hanging_sign");
-    ItemType.Typed<ItemMeta> BUCKET = getItemType("bucket");
-    ItemType.Typed<ItemMeta> WATER_BUCKET = getItemType("water_bucket");
-    ItemType.Typed<ItemMeta> LAVA_BUCKET = getItemType("lava_bucket");
-    ItemType.Typed<ItemMeta> POWDER_SNOW_BUCKET = getItemType("powder_snow_bucket");
-    ItemType.Typed<ItemMeta> SNOWBALL = getItemType("snowball");
-    ItemType.Typed<ItemMeta> LEATHER = getItemType("leather");
-    ItemType.Typed<ItemMeta> MILK_BUCKET = getItemType("milk_bucket");
-    ItemType.Typed<ItemMeta> PUFFERFISH_BUCKET = getItemType("pufferfish_bucket");
-    ItemType.Typed<ItemMeta> SALMON_BUCKET = getItemType("salmon_bucket");
-    ItemType.Typed<ItemMeta> COD_BUCKET = getItemType("cod_bucket");
-    /**
-     * ItemMeta: {@link TropicalFishBucketMeta}
-     */
-    ItemType.Typed<TropicalFishBucketMeta> TROPICAL_FISH_BUCKET = getItemType("tropical_fish_bucket");
-    /**
-     * ItemMeta: {@link AxolotlBucketMeta}
-     */
-    ItemType.Typed<AxolotlBucketMeta> AXOLOTL_BUCKET = getItemType("axolotl_bucket");
-    ItemType.Typed<ItemMeta> TADPOLE_BUCKET = getItemType("tadpole_bucket");
-    ItemType.Typed<ItemMeta> BRICK = getItemType("brick");
-    ItemType.Typed<ItemMeta> CLAY_BALL = getItemType("clay_ball");
-    ItemType.Typed<ItemMeta> DRIED_KELP_BLOCK = getItemType("dried_kelp_block");
-    ItemType.Typed<ItemMeta> PAPER = getItemType("paper");
-    ItemType.Typed<ItemMeta> BOOK = getItemType("book");
-    ItemType.Typed<ItemMeta> SLIME_BALL = getItemType("slime_ball");
-    ItemType.Typed<ItemMeta> EGG = getItemType("egg");
-    /**
-     * ItemMeta: {@link CompassMeta}
-     */
-    ItemType.Typed<CompassMeta> COMPASS = getItemType("compass");
-    ItemType.Typed<ItemMeta> RECOVERY_COMPASS = getItemType("recovery_compass");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> BUNDLE = getItemType("bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> WHITE_BUNDLE = getItemType("white_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> ORANGE_BUNDLE = getItemType("orange_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> MAGENTA_BUNDLE = getItemType("magenta_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> LIGHT_BLUE_BUNDLE = getItemType("light_blue_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> YELLOW_BUNDLE = getItemType("yellow_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> LIME_BUNDLE = getItemType("lime_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> PINK_BUNDLE = getItemType("pink_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> GRAY_BUNDLE = getItemType("gray_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> LIGHT_GRAY_BUNDLE = getItemType("light_gray_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> CYAN_BUNDLE = getItemType("cyan_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> PURPLE_BUNDLE = getItemType("purple_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> BLUE_BUNDLE = getItemType("blue_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> BROWN_BUNDLE = getItemType("brown_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> GREEN_BUNDLE = getItemType("green_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> RED_BUNDLE = getItemType("red_bundle");
-    /**
-     * ItemMeta: {@link BundleMeta}
-     */
-    ItemType.Typed<BundleMeta> BLACK_BUNDLE = getItemType("black_bundle");
-    ItemType.Typed<ItemMeta> FISHING_ROD = getItemType("fishing_rod");
-    ItemType.Typed<ItemMeta> CLOCK = getItemType("clock");
-    ItemType.Typed<ItemMeta> SPYGLASS = getItemType("spyglass");
-    ItemType.Typed<ItemMeta> GLOWSTONE_DUST = getItemType("glowstone_dust");
-    ItemType.Typed<ItemMeta> COD = getItemType("cod");
-    ItemType.Typed<ItemMeta> SALMON = getItemType("salmon");
-    ItemType.Typed<ItemMeta> TROPICAL_FISH = getItemType("tropical_fish");
-    ItemType.Typed<ItemMeta> PUFFERFISH = getItemType("pufferfish");
-    ItemType.Typed<ItemMeta> COOKED_COD = getItemType("cooked_cod");
-    ItemType.Typed<ItemMeta> COOKED_SALMON = getItemType("cooked_salmon");
-    ItemType.Typed<ItemMeta> INK_SAC = getItemType("ink_sac");
-    ItemType.Typed<ItemMeta> GLOW_INK_SAC = getItemType("glow_ink_sac");
-    ItemType.Typed<ItemMeta> COCOA_BEANS = getItemType("cocoa_beans");
-    ItemType.Typed<ItemMeta> WHITE_DYE = getItemType("white_dye");
-    ItemType.Typed<ItemMeta> ORANGE_DYE = getItemType("orange_dye");
-    ItemType.Typed<ItemMeta> MAGENTA_DYE = getItemType("magenta_dye");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_DYE = getItemType("light_blue_dye");
-    ItemType.Typed<ItemMeta> YELLOW_DYE = getItemType("yellow_dye");
-    ItemType.Typed<ItemMeta> LIME_DYE = getItemType("lime_dye");
-    ItemType.Typed<ItemMeta> PINK_DYE = getItemType("pink_dye");
-    ItemType.Typed<ItemMeta> GRAY_DYE = getItemType("gray_dye");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_DYE = getItemType("light_gray_dye");
-    ItemType.Typed<ItemMeta> CYAN_DYE = getItemType("cyan_dye");
-    ItemType.Typed<ItemMeta> PURPLE_DYE = getItemType("purple_dye");
-    ItemType.Typed<ItemMeta> BLUE_DYE = getItemType("blue_dye");
-    ItemType.Typed<ItemMeta> BROWN_DYE = getItemType("brown_dye");
-    ItemType.Typed<ItemMeta> GREEN_DYE = getItemType("green_dye");
-    ItemType.Typed<ItemMeta> RED_DYE = getItemType("red_dye");
-    ItemType.Typed<ItemMeta> BLACK_DYE = getItemType("black_dye");
-    ItemType.Typed<ItemMeta> BONE_MEAL = getItemType("bone_meal");
-    ItemType.Typed<ItemMeta> BONE = getItemType("bone");
-    ItemType.Typed<ItemMeta> SUGAR = getItemType("sugar");
-    ItemType.Typed<ItemMeta> CAKE = getItemType("cake");
-    ItemType.Typed<ItemMeta> WHITE_BED = getItemType("white_bed");
-    ItemType.Typed<ItemMeta> ORANGE_BED = getItemType("orange_bed");
-    ItemType.Typed<ItemMeta> MAGENTA_BED = getItemType("magenta_bed");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_BED = getItemType("light_blue_bed");
-    ItemType.Typed<ItemMeta> YELLOW_BED = getItemType("yellow_bed");
-    ItemType.Typed<ItemMeta> LIME_BED = getItemType("lime_bed");
-    ItemType.Typed<ItemMeta> PINK_BED = getItemType("pink_bed");
-    ItemType.Typed<ItemMeta> GRAY_BED = getItemType("gray_bed");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_BED = getItemType("light_gray_bed");
-    ItemType.Typed<ItemMeta> CYAN_BED = getItemType("cyan_bed");
-    ItemType.Typed<ItemMeta> PURPLE_BED = getItemType("purple_bed");
-    ItemType.Typed<ItemMeta> BLUE_BED = getItemType("blue_bed");
-    ItemType.Typed<ItemMeta> BROWN_BED = getItemType("brown_bed");
-    ItemType.Typed<ItemMeta> GREEN_BED = getItemType("green_bed");
-    ItemType.Typed<ItemMeta> RED_BED = getItemType("red_bed");
-    ItemType.Typed<ItemMeta> BLACK_BED = getItemType("black_bed");
-    ItemType.Typed<ItemMeta> COOKIE = getItemType("cookie");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CRAFTER = getItemType("crafter");
-    /**
-     * ItemMeta: {@link MapMeta}
-     */
-    ItemType.Typed<MapMeta> FILLED_MAP = getItemType("filled_map");
-    ItemType.Typed<ItemMeta> SHEARS = getItemType("shears");
-    ItemType.Typed<ItemMeta> MELON_SLICE = getItemType("melon_slice");
-    ItemType.Typed<ItemMeta> DRIED_KELP = getItemType("dried_kelp");
-    ItemType.Typed<ItemMeta> PUMPKIN_SEEDS = getItemType("pumpkin_seeds");
-    ItemType.Typed<ItemMeta> MELON_SEEDS = getItemType("melon_seeds");
-    ItemType.Typed<ItemMeta> BEEF = getItemType("beef");
-    ItemType.Typed<ItemMeta> COOKED_BEEF = getItemType("cooked_beef");
-    ItemType.Typed<ItemMeta> CHICKEN = getItemType("chicken");
-    ItemType.Typed<ItemMeta> COOKED_CHICKEN = getItemType("cooked_chicken");
-    ItemType.Typed<ItemMeta> ROTTEN_FLESH = getItemType("rotten_flesh");
-    ItemType.Typed<ItemMeta> ENDER_PEARL = getItemType("ender_pearl");
-    ItemType.Typed<ItemMeta> BLAZE_ROD = getItemType("blaze_rod");
-    ItemType.Typed<ItemMeta> GHAST_TEAR = getItemType("ghast_tear");
-    ItemType.Typed<ItemMeta> GOLD_NUGGET = getItemType("gold_nugget");
-    ItemType.Typed<ItemMeta> NETHER_WART = getItemType("nether_wart");
-    ItemType.Typed<ItemMeta> GLASS_BOTTLE = getItemType("glass_bottle");
-    /**
-     * ItemMeta: {@link PotionMeta}
-     */
-    ItemType.Typed<PotionMeta> POTION = getItemType("potion");
-    ItemType.Typed<ItemMeta> SPIDER_EYE = getItemType("spider_eye");
-    ItemType.Typed<ItemMeta> FERMENTED_SPIDER_EYE = getItemType("fermented_spider_eye");
-    ItemType.Typed<ItemMeta> BLAZE_POWDER = getItemType("blaze_powder");
-    ItemType.Typed<ItemMeta> MAGMA_CREAM = getItemType("magma_cream");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BREWING_STAND = getItemType("brewing_stand");
-    ItemType.Typed<ItemMeta> CAULDRON = getItemType("cauldron");
-    ItemType.Typed<ItemMeta> ENDER_EYE = getItemType("ender_eye");
-    ItemType.Typed<ItemMeta> GLISTERING_MELON_SLICE = getItemType("glistering_melon_slice");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ARMADILLO_SPAWN_EGG = getItemType("armadillo_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ALLAY_SPAWN_EGG = getItemType("allay_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> AXOLOTL_SPAWN_EGG = getItemType("axolotl_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> BAT_SPAWN_EGG = getItemType("bat_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> BEE_SPAWN_EGG = getItemType("bee_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> BLAZE_SPAWN_EGG = getItemType("blaze_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> BOGGED_SPAWN_EGG = getItemType("bogged_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> BREEZE_SPAWN_EGG = getItemType("breeze_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> CAT_SPAWN_EGG = getItemType("cat_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> CAMEL_SPAWN_EGG = getItemType("camel_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> CAVE_SPIDER_SPAWN_EGG = getItemType("cave_spider_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> CHICKEN_SPAWN_EGG = getItemType("chicken_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> COD_SPAWN_EGG = getItemType("cod_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> COW_SPAWN_EGG = getItemType("cow_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> CREAKING_SPAWN_EGG = getItemType("creaking_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> CREEPER_SPAWN_EGG = getItemType("creeper_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> DOLPHIN_SPAWN_EGG = getItemType("dolphin_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> DONKEY_SPAWN_EGG = getItemType("donkey_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> DROWNED_SPAWN_EGG = getItemType("drowned_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ELDER_GUARDIAN_SPAWN_EGG = getItemType("elder_guardian_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ENDER_DRAGON_SPAWN_EGG = getItemType("ender_dragon_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ENDERMAN_SPAWN_EGG = getItemType("enderman_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ENDERMITE_SPAWN_EGG = getItemType("endermite_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> EVOKER_SPAWN_EGG = getItemType("evoker_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> FOX_SPAWN_EGG = getItemType("fox_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> FROG_SPAWN_EGG = getItemType("frog_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> GHAST_SPAWN_EGG = getItemType("ghast_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> GLOW_SQUID_SPAWN_EGG = getItemType("glow_squid_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> GOAT_SPAWN_EGG = getItemType("goat_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> GUARDIAN_SPAWN_EGG = getItemType("guardian_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> HOGLIN_SPAWN_EGG = getItemType("hoglin_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> HORSE_SPAWN_EGG = getItemType("horse_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> HUSK_SPAWN_EGG = getItemType("husk_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> IRON_GOLEM_SPAWN_EGG = getItemType("iron_golem_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> LLAMA_SPAWN_EGG = getItemType("llama_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> MAGMA_CUBE_SPAWN_EGG = getItemType("magma_cube_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> MOOSHROOM_SPAWN_EGG = getItemType("mooshroom_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> MULE_SPAWN_EGG = getItemType("mule_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> OCELOT_SPAWN_EGG = getItemType("ocelot_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> PANDA_SPAWN_EGG = getItemType("panda_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> PARROT_SPAWN_EGG = getItemType("parrot_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> PHANTOM_SPAWN_EGG = getItemType("phantom_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> PIG_SPAWN_EGG = getItemType("pig_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> PIGLIN_SPAWN_EGG = getItemType("piglin_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> PIGLIN_BRUTE_SPAWN_EGG = getItemType("piglin_brute_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> PILLAGER_SPAWN_EGG = getItemType("pillager_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> POLAR_BEAR_SPAWN_EGG = getItemType("polar_bear_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> PUFFERFISH_SPAWN_EGG = getItemType("pufferfish_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> RABBIT_SPAWN_EGG = getItemType("rabbit_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> RAVAGER_SPAWN_EGG = getItemType("ravager_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SALMON_SPAWN_EGG = getItemType("salmon_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SHEEP_SPAWN_EGG = getItemType("sheep_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SHULKER_SPAWN_EGG = getItemType("shulker_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SILVERFISH_SPAWN_EGG = getItemType("silverfish_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SKELETON_SPAWN_EGG = getItemType("skeleton_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SKELETON_HORSE_SPAWN_EGG = getItemType("skeleton_horse_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SLIME_SPAWN_EGG = getItemType("slime_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SNIFFER_SPAWN_EGG = getItemType("sniffer_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SNOW_GOLEM_SPAWN_EGG = getItemType("snow_golem_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SPIDER_SPAWN_EGG = getItemType("spider_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> SQUID_SPAWN_EGG = getItemType("squid_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> STRAY_SPAWN_EGG = getItemType("stray_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> STRIDER_SPAWN_EGG = getItemType("strider_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> TADPOLE_SPAWN_EGG = getItemType("tadpole_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> TRADER_LLAMA_SPAWN_EGG = getItemType("trader_llama_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> TROPICAL_FISH_SPAWN_EGG = getItemType("tropical_fish_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> TURTLE_SPAWN_EGG = getItemType("turtle_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> VEX_SPAWN_EGG = getItemType("vex_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> VILLAGER_SPAWN_EGG = getItemType("villager_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> VINDICATOR_SPAWN_EGG = getItemType("vindicator_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> WANDERING_TRADER_SPAWN_EGG = getItemType("wandering_trader_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> WARDEN_SPAWN_EGG = getItemType("warden_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> WITCH_SPAWN_EGG = getItemType("witch_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> WITHER_SPAWN_EGG = getItemType("wither_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> WITHER_SKELETON_SPAWN_EGG = getItemType("wither_skeleton_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> WOLF_SPAWN_EGG = getItemType("wolf_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ZOGLIN_SPAWN_EGG = getItemType("zoglin_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ZOMBIE_SPAWN_EGG = getItemType("zombie_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ZOMBIE_HORSE_SPAWN_EGG = getItemType("zombie_horse_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ZOMBIE_VILLAGER_SPAWN_EGG = getItemType("zombie_villager_spawn_egg");
-    /**
-     * ItemMeta: {@link SpawnEggMeta}
-     */
-    ItemType.Typed<SpawnEggMeta> ZOMBIFIED_PIGLIN_SPAWN_EGG = getItemType("zombified_piglin_spawn_egg");
-    ItemType.Typed<ItemMeta> EXPERIENCE_BOTTLE = getItemType("experience_bottle");
-    ItemType.Typed<ItemMeta> FIRE_CHARGE = getItemType("fire_charge");
-    ItemType.Typed<ItemMeta> WIND_CHARGE = getItemType("wind_charge");
-    /**
-     * ItemMeta: {@link BookMeta}
-     */
-    ItemType.Typed<BookMeta> WRITABLE_BOOK = getItemType("writable_book");
-    /**
-     * ItemMeta: {@link BookMeta}
-     */
-    ItemType.Typed<BookMeta> WRITTEN_BOOK = getItemType("written_book");
-    ItemType.Typed<ItemMeta> BREEZE_ROD = getItemType("breeze_rod");
-    ItemType.Typed<ItemMeta> MACE = getItemType("mace");
-    ItemType.Typed<ItemMeta> ITEM_FRAME = getItemType("item_frame");
-    ItemType.Typed<ItemMeta> GLOW_ITEM_FRAME = getItemType("glow_item_frame");
-    ItemType.Typed<ItemMeta> FLOWER_POT = getItemType("flower_pot");
-    ItemType.Typed<ItemMeta> CARROT = getItemType("carrot");
-    ItemType.Typed<ItemMeta> POTATO = getItemType("potato");
-    ItemType.Typed<ItemMeta> BAKED_POTATO = getItemType("baked_potato");
-    ItemType.Typed<ItemMeta> POISONOUS_POTATO = getItemType("poisonous_potato");
-    ItemType.Typed<ItemMeta> MAP = getItemType("map");
-    ItemType.Typed<ItemMeta> GOLDEN_CARROT = getItemType("golden_carrot");
-    /**
-     * ItemMeta: {@link SkullMeta}
-     */
-    ItemType.Typed<SkullMeta> SKELETON_SKULL = getItemType("skeleton_skull");
-    /**
-     * ItemMeta: {@link SkullMeta}
-     */
-    ItemType.Typed<SkullMeta> WITHER_SKELETON_SKULL = getItemType("wither_skeleton_skull");
-    /**
-     * ItemMeta: {@link SkullMeta}
-     */
-    ItemType.Typed<SkullMeta> PLAYER_HEAD = getItemType("player_head");
-    /**
-     * ItemMeta: {@link SkullMeta}
-     */
-    ItemType.Typed<SkullMeta> ZOMBIE_HEAD = getItemType("zombie_head");
-    /**
-     * ItemMeta: {@link SkullMeta}
-     */
-    ItemType.Typed<SkullMeta> CREEPER_HEAD = getItemType("creeper_head");
-    /**
-     * ItemMeta: {@link SkullMeta}
-     */
-    ItemType.Typed<SkullMeta> DRAGON_HEAD = getItemType("dragon_head");
-    /**
-     * ItemMeta: {@link SkullMeta}
-     */
-    ItemType.Typed<SkullMeta> PIGLIN_HEAD = getItemType("piglin_head");
-    ItemType.Typed<ItemMeta> NETHER_STAR = getItemType("nether_star");
-    ItemType.Typed<ItemMeta> PUMPKIN_PIE = getItemType("pumpkin_pie");
-    /**
-     * ItemMeta: {@link FireworkMeta}
-     */
-    ItemType.Typed<FireworkMeta> FIREWORK_ROCKET = getItemType("firework_rocket");
-    /**
-     * ItemMeta: {@link FireworkEffectMeta}
-     */
-    ItemType.Typed<FireworkEffectMeta> FIREWORK_STAR = getItemType("firework_star");
-    /**
-     * ItemMeta: {@link EnchantmentStorageMeta}
-     */
-    ItemType.Typed<EnchantmentStorageMeta> ENCHANTED_BOOK = getItemType("enchanted_book");
-    ItemType.Typed<ItemMeta> NETHER_BRICK = getItemType("nether_brick");
-    ItemType.Typed<ItemMeta> RESIN_BRICK = getItemType("resin_brick");
-    ItemType.Typed<ItemMeta> PRISMARINE_SHARD = getItemType("prismarine_shard");
-    ItemType.Typed<ItemMeta> PRISMARINE_CRYSTALS = getItemType("prismarine_crystals");
-    ItemType.Typed<ItemMeta> RABBIT = getItemType("rabbit");
-    ItemType.Typed<ItemMeta> COOKED_RABBIT = getItemType("cooked_rabbit");
-    ItemType.Typed<ItemMeta> RABBIT_STEW = getItemType("rabbit_stew");
-    ItemType.Typed<ItemMeta> RABBIT_FOOT = getItemType("rabbit_foot");
-    ItemType.Typed<ItemMeta> RABBIT_HIDE = getItemType("rabbit_hide");
-    ItemType.Typed<com.destroystokyo.paper.inventory.meta.ArmorStandMeta> ARMOR_STAND = getItemType("armor_stand");
-    ItemType.Typed<ItemMeta> IRON_HORSE_ARMOR = getItemType("iron_horse_armor");
-    ItemType.Typed<ItemMeta> GOLDEN_HORSE_ARMOR = getItemType("golden_horse_armor");
-    ItemType.Typed<ItemMeta> DIAMOND_HORSE_ARMOR = getItemType("diamond_horse_armor");
-    /**
-     * ItemMeta: {@link LeatherArmorMeta}
-     */
-    ItemType.Typed<LeatherArmorMeta> LEATHER_HORSE_ARMOR = getItemType("leather_horse_armor");
-    ItemType.Typed<ItemMeta> LEAD = getItemType("lead");
-    ItemType.Typed<ItemMeta> NAME_TAG = getItemType("name_tag");
-    ItemType.Typed<ItemMeta> COMMAND_BLOCK_MINECART = getItemType("command_block_minecart");
-    ItemType.Typed<ItemMeta> MUTTON = getItemType("mutton");
-    ItemType.Typed<ItemMeta> COOKED_MUTTON = getItemType("cooked_mutton");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> WHITE_BANNER = getItemType("white_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> ORANGE_BANNER = getItemType("orange_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> MAGENTA_BANNER = getItemType("magenta_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> LIGHT_BLUE_BANNER = getItemType("light_blue_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> YELLOW_BANNER = getItemType("yellow_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> LIME_BANNER = getItemType("lime_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> PINK_BANNER = getItemType("pink_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> GRAY_BANNER = getItemType("gray_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> LIGHT_GRAY_BANNER = getItemType("light_gray_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> CYAN_BANNER = getItemType("cyan_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> PURPLE_BANNER = getItemType("purple_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> BLUE_BANNER = getItemType("blue_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> BROWN_BANNER = getItemType("brown_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> GREEN_BANNER = getItemType("green_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> RED_BANNER = getItemType("red_banner");
-    /**
-     * ItemMeta: {@link BannerMeta}
-     */
-    ItemType.Typed<BannerMeta> BLACK_BANNER = getItemType("black_banner");
-    ItemType.Typed<ItemMeta> END_CRYSTAL = getItemType("end_crystal");
-    ItemType.Typed<ItemMeta> CHORUS_FRUIT = getItemType("chorus_fruit");
-    ItemType.Typed<ItemMeta> POPPED_CHORUS_FRUIT = getItemType("popped_chorus_fruit");
-    ItemType.Typed<ItemMeta> TORCHFLOWER_SEEDS = getItemType("torchflower_seeds");
-    ItemType.Typed<ItemMeta> PITCHER_POD = getItemType("pitcher_pod");
-    ItemType.Typed<ItemMeta> BEETROOT = getItemType("beetroot");
-    ItemType.Typed<ItemMeta> BEETROOT_SEEDS = getItemType("beetroot_seeds");
-    ItemType.Typed<ItemMeta> BEETROOT_SOUP = getItemType("beetroot_soup");
-    ItemType.Typed<ItemMeta> DRAGON_BREATH = getItemType("dragon_breath");
-    /**
-     * ItemMeta: {@link PotionMeta}
-     */
-    ItemType.Typed<PotionMeta> SPLASH_POTION = getItemType("splash_potion");
-    ItemType.Typed<ItemMeta> SPECTRAL_ARROW = getItemType("spectral_arrow");
-    /**
-     * ItemMeta: {@link PotionMeta}
-     */
-    ItemType.Typed<PotionMeta> TIPPED_ARROW = getItemType("tipped_arrow");
-    /**
-     * ItemMeta: {@link PotionMeta}
-     */
-    ItemType.Typed<PotionMeta> LINGERING_POTION = getItemType("lingering_potion");
-    /**
-     * ItemMeta: {@link ShieldMeta}
-     */
-    ItemType.Typed<ShieldMeta> SHIELD = getItemType("shield");
-    ItemType.Typed<ItemMeta> TOTEM_OF_UNDYING = getItemType("totem_of_undying");
-    ItemType.Typed<ItemMeta> SHULKER_SHELL = getItemType("shulker_shell");
-    ItemType.Typed<ItemMeta> IRON_NUGGET = getItemType("iron_nugget");
-    /**
-     * ItemMeta: {@link KnowledgeBookMeta}
-     */
-    ItemType.Typed<KnowledgeBookMeta> KNOWLEDGE_BOOK = getItemType("knowledge_book");
-    ItemType.Typed<ItemMeta> DEBUG_STICK = getItemType("debug_stick");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_13 = getItemType("music_disc_13");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_CAT = getItemType("music_disc_cat");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_BLOCKS = getItemType("music_disc_blocks");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_CHIRP = getItemType("music_disc_chirp");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_CREATOR = getItemType("music_disc_creator");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_CREATOR_MUSIC_BOX = getItemType("music_disc_creator_music_box");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_FAR = getItemType("music_disc_far");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_MALL = getItemType("music_disc_mall");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_MELLOHI = getItemType("music_disc_mellohi");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_STAL = getItemType("music_disc_stal");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_STRAD = getItemType("music_disc_strad");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_WARD = getItemType("music_disc_ward");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_11 = getItemType("music_disc_11");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_WAIT = getItemType("music_disc_wait");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_OTHERSIDE = getItemType("music_disc_otherside");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_RELIC = getItemType("music_disc_relic");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_5 = getItemType("music_disc_5");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_PIGSTEP = getItemType("music_disc_pigstep");
-    ItemType.Typed<ItemMeta> MUSIC_DISC_PRECIPICE = getItemType("music_disc_precipice");
-    ItemType.Typed<ItemMeta> DISC_FRAGMENT_5 = getItemType("disc_fragment_5");
-    ItemType.Typed<ItemMeta> TRIDENT = getItemType("trident");
-    ItemType.Typed<ItemMeta> NAUTILUS_SHELL = getItemType("nautilus_shell");
-    ItemType.Typed<ItemMeta> HEART_OF_THE_SEA = getItemType("heart_of_the_sea");
-    /**
-     * ItemMeta: {@link CrossbowMeta}
-     */
-    ItemType.Typed<CrossbowMeta> CROSSBOW = getItemType("crossbow");
-    /**
-     * ItemMeta: {@link SuspiciousStewMeta}
-     */
-    ItemType.Typed<SuspiciousStewMeta> SUSPICIOUS_STEW = getItemType("suspicious_stew");
-    ItemType.Typed<ItemMeta> LOOM = getItemType("loom");
-    ItemType.Typed<ItemMeta> FLOWER_BANNER_PATTERN = getItemType("flower_banner_pattern");
-    ItemType.Typed<ItemMeta> CREEPER_BANNER_PATTERN = getItemType("creeper_banner_pattern");
-    ItemType.Typed<ItemMeta> SKULL_BANNER_PATTERN = getItemType("skull_banner_pattern");
-    ItemType.Typed<ItemMeta> MOJANG_BANNER_PATTERN = getItemType("mojang_banner_pattern");
-    ItemType.Typed<ItemMeta> GLOBE_BANNER_PATTERN = getItemType("globe_banner_pattern");
-    ItemType.Typed<ItemMeta> PIGLIN_BANNER_PATTERN = getItemType("piglin_banner_pattern");
-    ItemType.Typed<ItemMeta> FLOW_BANNER_PATTERN = getItemType("flow_banner_pattern");
-    ItemType.Typed<ItemMeta> GUSTER_BANNER_PATTERN = getItemType("guster_banner_pattern");
-    ItemType.Typed<ItemMeta> FIELD_MASONED_BANNER_PATTERN = getItemType("field_masoned_banner_pattern");
-    ItemType.Typed<ItemMeta> BORDURE_INDENTED_BANNER_PATTERN = getItemType("bordure_indented_banner_pattern");
-    /**
-     * ItemMeta: {@link MusicInstrumentMeta}
-     */
-    ItemType.Typed<MusicInstrumentMeta> GOAT_HORN = getItemType("goat_horn");
-    ItemType.Typed<ItemMeta> COMPOSTER = getItemType("composter");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BARREL = getItemType("barrel");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SMOKER = getItemType("smoker");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BLAST_FURNACE = getItemType("blast_furnace");
-    ItemType.Typed<ItemMeta> CARTOGRAPHY_TABLE = getItemType("cartography_table");
-    ItemType.Typed<ItemMeta> FLETCHING_TABLE = getItemType("fletching_table");
-    ItemType.Typed<ItemMeta> GRINDSTONE = getItemType("grindstone");
-    ItemType.Typed<ItemMeta> SMITHING_TABLE = getItemType("smithing_table");
-    ItemType.Typed<ItemMeta> STONECUTTER = getItemType("stonecutter");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BELL = getItemType("bell");
-    ItemType.Typed<ItemMeta> LANTERN = getItemType("lantern");
-    ItemType.Typed<ItemMeta> SOUL_LANTERN = getItemType("soul_lantern");
-    ItemType.Typed<ItemMeta> SWEET_BERRIES = getItemType("sweet_berries");
-    ItemType.Typed<ItemMeta> GLOW_BERRIES = getItemType("glow_berries");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> CAMPFIRE = getItemType("campfire");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> SOUL_CAMPFIRE = getItemType("soul_campfire");
-    ItemType.Typed<ItemMeta> SHROOMLIGHT = getItemType("shroomlight");
-    ItemType.Typed<ItemMeta> HONEYCOMB = getItemType("honeycomb");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BEE_NEST = getItemType("bee_nest");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> BEEHIVE = getItemType("beehive");
-    ItemType.Typed<ItemMeta> HONEY_BOTTLE = getItemType("honey_bottle");
-    ItemType.Typed<ItemMeta> HONEYCOMB_BLOCK = getItemType("honeycomb_block");
-    ItemType.Typed<ItemMeta> LODESTONE = getItemType("lodestone");
-    ItemType.Typed<ItemMeta> CRYING_OBSIDIAN = getItemType("crying_obsidian");
-    ItemType.Typed<ItemMeta> BLACKSTONE = getItemType("blackstone");
-    ItemType.Typed<ItemMeta> BLACKSTONE_SLAB = getItemType("blackstone_slab");
-    ItemType.Typed<ItemMeta> BLACKSTONE_STAIRS = getItemType("blackstone_stairs");
-    ItemType.Typed<ItemMeta> GILDED_BLACKSTONE = getItemType("gilded_blackstone");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE = getItemType("polished_blackstone");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_SLAB = getItemType("polished_blackstone_slab");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_STAIRS = getItemType("polished_blackstone_stairs");
-    ItemType.Typed<ItemMeta> CHISELED_POLISHED_BLACKSTONE = getItemType("chiseled_polished_blackstone");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BRICKS = getItemType("polished_blackstone_bricks");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BRICK_SLAB = getItemType("polished_blackstone_brick_slab");
-    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BRICK_STAIRS = getItemType("polished_blackstone_brick_stairs");
-    ItemType.Typed<ItemMeta> CRACKED_POLISHED_BLACKSTONE_BRICKS = getItemType("cracked_polished_blackstone_bricks");
-    ItemType.Typed<ItemMeta> RESPAWN_ANCHOR = getItemType("respawn_anchor");
-    ItemType.Typed<ItemMeta> CANDLE = getItemType("candle");
-    ItemType.Typed<ItemMeta> WHITE_CANDLE = getItemType("white_candle");
-    ItemType.Typed<ItemMeta> ORANGE_CANDLE = getItemType("orange_candle");
-    ItemType.Typed<ItemMeta> MAGENTA_CANDLE = getItemType("magenta_candle");
-    ItemType.Typed<ItemMeta> LIGHT_BLUE_CANDLE = getItemType("light_blue_candle");
-    ItemType.Typed<ItemMeta> YELLOW_CANDLE = getItemType("yellow_candle");
-    ItemType.Typed<ItemMeta> LIME_CANDLE = getItemType("lime_candle");
-    ItemType.Typed<ItemMeta> PINK_CANDLE = getItemType("pink_candle");
-    ItemType.Typed<ItemMeta> GRAY_CANDLE = getItemType("gray_candle");
-    ItemType.Typed<ItemMeta> LIGHT_GRAY_CANDLE = getItemType("light_gray_candle");
-    ItemType.Typed<ItemMeta> CYAN_CANDLE = getItemType("cyan_candle");
-    ItemType.Typed<ItemMeta> PURPLE_CANDLE = getItemType("purple_candle");
-    ItemType.Typed<ItemMeta> BLUE_CANDLE = getItemType("blue_candle");
-    ItemType.Typed<ItemMeta> BROWN_CANDLE = getItemType("brown_candle");
-    ItemType.Typed<ItemMeta> GREEN_CANDLE = getItemType("green_candle");
-    ItemType.Typed<ItemMeta> RED_CANDLE = getItemType("red_candle");
-    ItemType.Typed<ItemMeta> BLACK_CANDLE = getItemType("black_candle");
-    ItemType.Typed<ItemMeta> SMALL_AMETHYST_BUD = getItemType("small_amethyst_bud");
-    ItemType.Typed<ItemMeta> MEDIUM_AMETHYST_BUD = getItemType("medium_amethyst_bud");
-    ItemType.Typed<ItemMeta> LARGE_AMETHYST_BUD = getItemType("large_amethyst_bud");
+
+    ItemType.Typed<ItemMeta> ACACIA_DOOR = getItemType("acacia_door");
+
+    ItemType.Typed<ItemMeta> ACACIA_FENCE = getItemType("acacia_fence");
+
+    ItemType.Typed<ItemMeta> ACACIA_FENCE_GATE = getItemType("acacia_fence_gate");
+
+    ItemType.Typed<ItemMeta> ACACIA_HANGING_SIGN = getItemType("acacia_hanging_sign");
+
+    ItemType.Typed<ItemMeta> ACACIA_LEAVES = getItemType("acacia_leaves");
+
+    ItemType.Typed<ItemMeta> ACACIA_LOG = getItemType("acacia_log");
+
+    ItemType.Typed<ItemMeta> ACACIA_PLANKS = getItemType("acacia_planks");
+
+    ItemType.Typed<ItemMeta> ACACIA_PRESSURE_PLATE = getItemType("acacia_pressure_plate");
+
+    ItemType.Typed<ItemMeta> ACACIA_SAPLING = getItemType("acacia_sapling");
+
+    ItemType.Typed<ItemMeta> ACACIA_SIGN = getItemType("acacia_sign");
+
+    ItemType.Typed<ItemMeta> ACACIA_SLAB = getItemType("acacia_slab");
+
+    ItemType.Typed<ItemMeta> ACACIA_STAIRS = getItemType("acacia_stairs");
+
+    ItemType.Typed<ItemMeta> ACACIA_TRAPDOOR = getItemType("acacia_trapdoor");
+
+    ItemType.Typed<ItemMeta> ACACIA_WOOD = getItemType("acacia_wood");
+
+    ItemType.Typed<ItemMeta> ACTIVATOR_RAIL = getItemType("activator_rail");
+
+    ItemType AIR = getItemType("air");
+
+    ItemType.Typed<ItemMeta> ALLAY_SPAWN_EGG = getItemType("allay_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ALLIUM = getItemType("allium");
+
+    ItemType.Typed<ItemMeta> AMETHYST_BLOCK = getItemType("amethyst_block");
+
     ItemType.Typed<ItemMeta> AMETHYST_CLUSTER = getItemType("amethyst_cluster");
-    ItemType.Typed<ItemMeta> POINTED_DRIPSTONE = getItemType("pointed_dripstone");
-    ItemType.Typed<ItemMeta> OCHRE_FROGLIGHT = getItemType("ochre_froglight");
-    ItemType.Typed<ItemMeta> VERDANT_FROGLIGHT = getItemType("verdant_froglight");
-    ItemType.Typed<ItemMeta> PEARLESCENT_FROGLIGHT = getItemType("pearlescent_froglight");
-    ItemType.Typed<ItemMeta> FROGSPAWN = getItemType("frogspawn");
-    ItemType.Typed<ItemMeta> ECHO_SHARD = getItemType("echo_shard");
-    ItemType.Typed<ItemMeta> BRUSH = getItemType("brush");
-    ItemType.Typed<ItemMeta> NETHERITE_UPGRADE_SMITHING_TEMPLATE = getItemType("netherite_upgrade_smithing_template");
-    ItemType.Typed<ItemMeta> SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("sentry_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> DUNE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("dune_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> COAST_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("coast_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> WILD_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("wild_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> WARD_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("ward_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> EYE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("eye_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> VEX_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("vex_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> TIDE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("tide_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("snout_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> RIB_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("rib_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("spire_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("wayfinder_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("shaper_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("silence_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> RAISER_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("raiser_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> HOST_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("host_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> FLOW_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("flow_armor_trim_smithing_template");
-    ItemType.Typed<ItemMeta> BOLT_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("bolt_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> AMETHYST_SHARD = getItemType("amethyst_shard");
+
+    ItemType.Typed<ItemMeta> ANCIENT_DEBRIS = getItemType("ancient_debris");
+
+    ItemType.Typed<ItemMeta> ANDESITE = getItemType("andesite");
+
+    ItemType.Typed<ItemMeta> ANDESITE_SLAB = getItemType("andesite_slab");
+
+    ItemType.Typed<ItemMeta> ANDESITE_STAIRS = getItemType("andesite_stairs");
+
+    ItemType.Typed<ItemMeta> ANDESITE_WALL = getItemType("andesite_wall");
+
     ItemType.Typed<ItemMeta> ANGLER_POTTERY_SHERD = getItemType("angler_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> ANVIL = getItemType("anvil");
+
+    ItemType.Typed<ItemMeta> APPLE = getItemType("apple");
+
     ItemType.Typed<ItemMeta> ARCHER_POTTERY_SHERD = getItemType("archer_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> ARMADILLO_SCUTE = getItemType("armadillo_scute");
+
+    ItemType.Typed<ItemMeta> ARMADILLO_SPAWN_EGG = getItemType("armadillo_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ARMOR_STAND = getItemType("armor_stand");
+
     ItemType.Typed<ItemMeta> ARMS_UP_POTTERY_SHERD = getItemType("arms_up_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> ARROW = getItemType("arrow");
+
+    ItemType.Typed<ItemMeta> AXOLOTL_BUCKET = getItemType("axolotl_bucket");
+
+    ItemType.Typed<ItemMeta> AXOLOTL_SPAWN_EGG = getItemType("axolotl_spawn_egg");
+
+    ItemType.Typed<ItemMeta> AZALEA = getItemType("azalea");
+
+    ItemType.Typed<ItemMeta> AZALEA_LEAVES = getItemType("azalea_leaves");
+
+    ItemType.Typed<ItemMeta> AZURE_BLUET = getItemType("azure_bluet");
+
+    ItemType.Typed<ItemMeta> BAKED_POTATO = getItemType("baked_potato");
+
+    ItemType.Typed<ItemMeta> BAMBOO = getItemType("bamboo");
+
+    ItemType.Typed<ItemMeta> BAMBOO_BLOCK = getItemType("bamboo_block");
+
+    ItemType.Typed<ItemMeta> BAMBOO_BUTTON = getItemType("bamboo_button");
+
+    ItemType.Typed<ItemMeta> BAMBOO_CHEST_RAFT = getItemType("bamboo_chest_raft");
+
+    ItemType.Typed<ItemMeta> BAMBOO_DOOR = getItemType("bamboo_door");
+
+    ItemType.Typed<ItemMeta> BAMBOO_FENCE = getItemType("bamboo_fence");
+
+    ItemType.Typed<ItemMeta> BAMBOO_FENCE_GATE = getItemType("bamboo_fence_gate");
+
+    ItemType.Typed<ItemMeta> BAMBOO_HANGING_SIGN = getItemType("bamboo_hanging_sign");
+
+    ItemType.Typed<ItemMeta> BAMBOO_MOSAIC = getItemType("bamboo_mosaic");
+
+    ItemType.Typed<ItemMeta> BAMBOO_MOSAIC_SLAB = getItemType("bamboo_mosaic_slab");
+
+    ItemType.Typed<ItemMeta> BAMBOO_MOSAIC_STAIRS = getItemType("bamboo_mosaic_stairs");
+
+    ItemType.Typed<ItemMeta> BAMBOO_PLANKS = getItemType("bamboo_planks");
+
+    ItemType.Typed<ItemMeta> BAMBOO_PRESSURE_PLATE = getItemType("bamboo_pressure_plate");
+
+    ItemType.Typed<ItemMeta> BAMBOO_RAFT = getItemType("bamboo_raft");
+
+    ItemType.Typed<ItemMeta> BAMBOO_SIGN = getItemType("bamboo_sign");
+
+    ItemType.Typed<ItemMeta> BAMBOO_SLAB = getItemType("bamboo_slab");
+
+    ItemType.Typed<ItemMeta> BAMBOO_STAIRS = getItemType("bamboo_stairs");
+
+    ItemType.Typed<ItemMeta> BAMBOO_TRAPDOOR = getItemType("bamboo_trapdoor");
+
+    ItemType.Typed<ItemMeta> BARREL = getItemType("barrel");
+
+    ItemType.Typed<ItemMeta> BARRIER = getItemType("barrier");
+
+    ItemType.Typed<ItemMeta> BASALT = getItemType("basalt");
+
+    ItemType.Typed<ItemMeta> BAT_SPAWN_EGG = getItemType("bat_spawn_egg");
+
+    ItemType.Typed<ItemMeta> BEACON = getItemType("beacon");
+
+    ItemType.Typed<ItemMeta> BEDROCK = getItemType("bedrock");
+
+    ItemType.Typed<ItemMeta> BEE_NEST = getItemType("bee_nest");
+
+    ItemType.Typed<ItemMeta> BEE_SPAWN_EGG = getItemType("bee_spawn_egg");
+
+    ItemType.Typed<ItemMeta> BEEF = getItemType("beef");
+
+    ItemType.Typed<ItemMeta> BEEHIVE = getItemType("beehive");
+
+    ItemType.Typed<ItemMeta> BEETROOT = getItemType("beetroot");
+
+    ItemType.Typed<ItemMeta> BEETROOT_SEEDS = getItemType("beetroot_seeds");
+
+    ItemType.Typed<ItemMeta> BEETROOT_SOUP = getItemType("beetroot_soup");
+
+    ItemType.Typed<ItemMeta> BELL = getItemType("bell");
+
+    ItemType.Typed<ItemMeta> BIG_DRIPLEAF = getItemType("big_dripleaf");
+
+    ItemType.Typed<ItemMeta> BIRCH_BOAT = getItemType("birch_boat");
+
+    ItemType.Typed<ItemMeta> BIRCH_BUTTON = getItemType("birch_button");
+
+    ItemType.Typed<ItemMeta> BIRCH_CHEST_BOAT = getItemType("birch_chest_boat");
+
+    ItemType.Typed<ItemMeta> BIRCH_DOOR = getItemType("birch_door");
+
+    ItemType.Typed<ItemMeta> BIRCH_FENCE = getItemType("birch_fence");
+
+    ItemType.Typed<ItemMeta> BIRCH_FENCE_GATE = getItemType("birch_fence_gate");
+
+    ItemType.Typed<ItemMeta> BIRCH_HANGING_SIGN = getItemType("birch_hanging_sign");
+
+    ItemType.Typed<ItemMeta> BIRCH_LEAVES = getItemType("birch_leaves");
+
+    ItemType.Typed<ItemMeta> BIRCH_LOG = getItemType("birch_log");
+
+    ItemType.Typed<ItemMeta> BIRCH_PLANKS = getItemType("birch_planks");
+
+    ItemType.Typed<ItemMeta> BIRCH_PRESSURE_PLATE = getItemType("birch_pressure_plate");
+
+    ItemType.Typed<ItemMeta> BIRCH_SAPLING = getItemType("birch_sapling");
+
+    ItemType.Typed<ItemMeta> BIRCH_SIGN = getItemType("birch_sign");
+
+    ItemType.Typed<ItemMeta> BIRCH_SLAB = getItemType("birch_slab");
+
+    ItemType.Typed<ItemMeta> BIRCH_STAIRS = getItemType("birch_stairs");
+
+    ItemType.Typed<ItemMeta> BIRCH_TRAPDOOR = getItemType("birch_trapdoor");
+
+    ItemType.Typed<ItemMeta> BIRCH_WOOD = getItemType("birch_wood");
+
+    ItemType.Typed<ItemMeta> BLACK_BANNER = getItemType("black_banner");
+
+    ItemType.Typed<ItemMeta> BLACK_BED = getItemType("black_bed");
+
+    ItemType.Typed<ItemMeta> BLACK_BUNDLE = getItemType("black_bundle");
+
+    ItemType.Typed<ItemMeta> BLACK_CANDLE = getItemType("black_candle");
+
+    ItemType.Typed<ItemMeta> BLACK_CARPET = getItemType("black_carpet");
+
+    ItemType.Typed<ItemMeta> BLACK_CONCRETE = getItemType("black_concrete");
+
+    ItemType.Typed<ItemMeta> BLACK_CONCRETE_POWDER = getItemType("black_concrete_powder");
+
+    ItemType.Typed<ItemMeta> BLACK_DYE = getItemType("black_dye");
+
+    ItemType.Typed<ItemMeta> BLACK_GLAZED_TERRACOTTA = getItemType("black_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> BLACK_SHULKER_BOX = getItemType("black_shulker_box");
+
+    ItemType.Typed<ItemMeta> BLACK_STAINED_GLASS = getItemType("black_stained_glass");
+
+    ItemType.Typed<ItemMeta> BLACK_STAINED_GLASS_PANE = getItemType("black_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> BLACK_TERRACOTTA = getItemType("black_terracotta");
+
+    ItemType.Typed<ItemMeta> BLACK_WOOL = getItemType("black_wool");
+
+    ItemType.Typed<ItemMeta> BLACKSTONE = getItemType("blackstone");
+
+    ItemType.Typed<ItemMeta> BLACKSTONE_SLAB = getItemType("blackstone_slab");
+
+    ItemType.Typed<ItemMeta> BLACKSTONE_STAIRS = getItemType("blackstone_stairs");
+
+    ItemType.Typed<ItemMeta> BLACKSTONE_WALL = getItemType("blackstone_wall");
+
     ItemType.Typed<ItemMeta> BLADE_POTTERY_SHERD = getItemType("blade_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> BLAST_FURNACE = getItemType("blast_furnace");
+
+    ItemType.Typed<ItemMeta> BLAZE_POWDER = getItemType("blaze_powder");
+
+    ItemType.Typed<ItemMeta> BLAZE_ROD = getItemType("blaze_rod");
+
+    ItemType.Typed<ItemMeta> BLAZE_SPAWN_EGG = getItemType("blaze_spawn_egg");
+
+    ItemType.Typed<ItemMeta> BLUE_BANNER = getItemType("blue_banner");
+
+    ItemType.Typed<ItemMeta> BLUE_BED = getItemType("blue_bed");
+
+    ItemType.Typed<ItemMeta> BLUE_BUNDLE = getItemType("blue_bundle");
+
+    ItemType.Typed<ItemMeta> BLUE_CANDLE = getItemType("blue_candle");
+
+    ItemType.Typed<ItemMeta> BLUE_CARPET = getItemType("blue_carpet");
+
+    ItemType.Typed<ItemMeta> BLUE_CONCRETE = getItemType("blue_concrete");
+
+    ItemType.Typed<ItemMeta> BLUE_CONCRETE_POWDER = getItemType("blue_concrete_powder");
+
+    ItemType.Typed<ItemMeta> BLUE_DYE = getItemType("blue_dye");
+
+    ItemType.Typed<ItemMeta> BLUE_GLAZED_TERRACOTTA = getItemType("blue_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> BLUE_ICE = getItemType("blue_ice");
+
+    ItemType.Typed<ItemMeta> BLUE_ORCHID = getItemType("blue_orchid");
+
+    ItemType.Typed<ItemMeta> BLUE_SHULKER_BOX = getItemType("blue_shulker_box");
+
+    ItemType.Typed<ItemMeta> BLUE_STAINED_GLASS = getItemType("blue_stained_glass");
+
+    ItemType.Typed<ItemMeta> BLUE_STAINED_GLASS_PANE = getItemType("blue_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> BLUE_TERRACOTTA = getItemType("blue_terracotta");
+
+    ItemType.Typed<ItemMeta> BLUE_WOOL = getItemType("blue_wool");
+
+    ItemType.Typed<ItemMeta> BOGGED_SPAWN_EGG = getItemType("bogged_spawn_egg");
+
+    ItemType.Typed<ItemMeta> BOLT_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("bolt_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> BONE = getItemType("bone");
+
+    ItemType.Typed<ItemMeta> BONE_BLOCK = getItemType("bone_block");
+
+    ItemType.Typed<ItemMeta> BONE_MEAL = getItemType("bone_meal");
+
+    ItemType.Typed<ItemMeta> BOOK = getItemType("book");
+
+    ItemType.Typed<ItemMeta> BOOKSHELF = getItemType("bookshelf");
+
+    ItemType.Typed<ItemMeta> BORDURE_INDENTED_BANNER_PATTERN = getItemType("bordure_indented_banner_pattern");
+
+    ItemType.Typed<ItemMeta> BOW = getItemType("bow");
+
+    ItemType.Typed<ItemMeta> BOWL = getItemType("bowl");
+
+    ItemType.Typed<ItemMeta> BRAIN_CORAL = getItemType("brain_coral");
+
+    ItemType.Typed<ItemMeta> BRAIN_CORAL_BLOCK = getItemType("brain_coral_block");
+
+    ItemType.Typed<ItemMeta> BRAIN_CORAL_FAN = getItemType("brain_coral_fan");
+
+    ItemType.Typed<ItemMeta> BREAD = getItemType("bread");
+
+    ItemType.Typed<ItemMeta> BREEZE_ROD = getItemType("breeze_rod");
+
+    ItemType.Typed<ItemMeta> BREEZE_SPAWN_EGG = getItemType("breeze_spawn_egg");
+
     ItemType.Typed<ItemMeta> BREWER_POTTERY_SHERD = getItemType("brewer_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> BREWING_STAND = getItemType("brewing_stand");
+
+    ItemType.Typed<ItemMeta> BRICK = getItemType("brick");
+
+    ItemType.Typed<ItemMeta> BRICK_SLAB = getItemType("brick_slab");
+
+    ItemType.Typed<ItemMeta> BRICK_STAIRS = getItemType("brick_stairs");
+
+    ItemType.Typed<ItemMeta> BRICK_WALL = getItemType("brick_wall");
+
+    ItemType.Typed<ItemMeta> BRICKS = getItemType("bricks");
+
+    ItemType.Typed<ItemMeta> BROWN_BANNER = getItemType("brown_banner");
+
+    ItemType.Typed<ItemMeta> BROWN_BED = getItemType("brown_bed");
+
+    ItemType.Typed<ItemMeta> BROWN_BUNDLE = getItemType("brown_bundle");
+
+    ItemType.Typed<ItemMeta> BROWN_CANDLE = getItemType("brown_candle");
+
+    ItemType.Typed<ItemMeta> BROWN_CARPET = getItemType("brown_carpet");
+
+    ItemType.Typed<ItemMeta> BROWN_CONCRETE = getItemType("brown_concrete");
+
+    ItemType.Typed<ItemMeta> BROWN_CONCRETE_POWDER = getItemType("brown_concrete_powder");
+
+    ItemType.Typed<ItemMeta> BROWN_DYE = getItemType("brown_dye");
+
+    ItemType.Typed<ItemMeta> BROWN_GLAZED_TERRACOTTA = getItemType("brown_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> BROWN_MUSHROOM = getItemType("brown_mushroom");
+
+    ItemType.Typed<ItemMeta> BROWN_MUSHROOM_BLOCK = getItemType("brown_mushroom_block");
+
+    ItemType.Typed<ItemMeta> BROWN_SHULKER_BOX = getItemType("brown_shulker_box");
+
+    ItemType.Typed<ItemMeta> BROWN_STAINED_GLASS = getItemType("brown_stained_glass");
+
+    ItemType.Typed<ItemMeta> BROWN_STAINED_GLASS_PANE = getItemType("brown_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> BROWN_TERRACOTTA = getItemType("brown_terracotta");
+
+    ItemType.Typed<ItemMeta> BROWN_WOOL = getItemType("brown_wool");
+
+    ItemType.Typed<ItemMeta> BRUSH = getItemType("brush");
+
+    ItemType.Typed<ItemMeta> BUBBLE_CORAL = getItemType("bubble_coral");
+
+    ItemType.Typed<ItemMeta> BUBBLE_CORAL_BLOCK = getItemType("bubble_coral_block");
+
+    ItemType.Typed<ItemMeta> BUBBLE_CORAL_FAN = getItemType("bubble_coral_fan");
+
+    ItemType.Typed<ItemMeta> BUCKET = getItemType("bucket");
+
+    ItemType.Typed<ItemMeta> BUDDING_AMETHYST = getItemType("budding_amethyst");
+
+    ItemType.Typed<ItemMeta> BUNDLE = getItemType("bundle");
+
     ItemType.Typed<ItemMeta> BURN_POTTERY_SHERD = getItemType("burn_pottery_sherd");
-    ItemType.Typed<ItemMeta> DANGER_POTTERY_SHERD = getItemType("danger_pottery_sherd");
-    ItemType.Typed<ItemMeta> EXPLORER_POTTERY_SHERD = getItemType("explorer_pottery_sherd");
-    ItemType.Typed<ItemMeta> FLOW_POTTERY_SHERD = getItemType("flow_pottery_sherd");
-    ItemType.Typed<ItemMeta> FRIEND_POTTERY_SHERD = getItemType("friend_pottery_sherd");
-    ItemType.Typed<ItemMeta> GUSTER_POTTERY_SHERD = getItemType("guster_pottery_sherd");
-    ItemType.Typed<ItemMeta> HEART_POTTERY_SHERD = getItemType("heart_pottery_sherd");
-    ItemType.Typed<ItemMeta> HEARTBREAK_POTTERY_SHERD = getItemType("heartbreak_pottery_sherd");
-    ItemType.Typed<ItemMeta> HOWL_POTTERY_SHERD = getItemType("howl_pottery_sherd");
-    ItemType.Typed<ItemMeta> MINER_POTTERY_SHERD = getItemType("miner_pottery_sherd");
-    ItemType.Typed<ItemMeta> MOURNER_POTTERY_SHERD = getItemType("mourner_pottery_sherd");
-    ItemType.Typed<ItemMeta> PLENTY_POTTERY_SHERD = getItemType("plenty_pottery_sherd");
-    ItemType.Typed<ItemMeta> PRIZE_POTTERY_SHERD = getItemType("prize_pottery_sherd");
-    ItemType.Typed<ItemMeta> SCRAPE_POTTERY_SHERD = getItemType("scrape_pottery_sherd");
-    ItemType.Typed<ItemMeta> SHEAF_POTTERY_SHERD = getItemType("sheaf_pottery_sherd");
-    ItemType.Typed<ItemMeta> SHELTER_POTTERY_SHERD = getItemType("shelter_pottery_sherd");
-    ItemType.Typed<ItemMeta> SKULL_POTTERY_SHERD = getItemType("skull_pottery_sherd");
-    ItemType.Typed<ItemMeta> SNORT_POTTERY_SHERD = getItemType("snort_pottery_sherd");
-    ItemType.Typed<ItemMeta> COPPER_GRATE = getItemType("copper_grate");
-    ItemType.Typed<ItemMeta> EXPOSED_COPPER_GRATE = getItemType("exposed_copper_grate");
-    ItemType.Typed<ItemMeta> WEATHERED_COPPER_GRATE = getItemType("weathered_copper_grate");
-    ItemType.Typed<ItemMeta> OXIDIZED_COPPER_GRATE = getItemType("oxidized_copper_grate");
-    ItemType.Typed<ItemMeta> WAXED_COPPER_GRATE = getItemType("waxed_copper_grate");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER_GRATE = getItemType("waxed_exposed_copper_grate");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER_GRATE = getItemType("waxed_weathered_copper_grate");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER_GRATE = getItemType("waxed_oxidized_copper_grate");
+
+    ItemType.Typed<ItemMeta> CACTUS = getItemType("cactus");
+
+    ItemType.Typed<ItemMeta> CAKE = getItemType("cake");
+
+    ItemType.Typed<ItemMeta> CALCITE = getItemType("calcite");
+
+    ItemType.Typed<ItemMeta> CALIBRATED_SCULK_SENSOR = getItemType("calibrated_sculk_sensor");
+
+    ItemType.Typed<ItemMeta> CAMEL_SPAWN_EGG = getItemType("camel_spawn_egg");
+
+    ItemType.Typed<ItemMeta> CAMPFIRE = getItemType("campfire");
+
+    ItemType.Typed<ItemMeta> CANDLE = getItemType("candle");
+
+    ItemType.Typed<ItemMeta> CARROT = getItemType("carrot");
+
+    ItemType.Typed<ItemMeta> CARROT_ON_A_STICK = getItemType("carrot_on_a_stick");
+
+    ItemType.Typed<ItemMeta> CARTOGRAPHY_TABLE = getItemType("cartography_table");
+
+    ItemType.Typed<ItemMeta> CARVED_PUMPKIN = getItemType("carved_pumpkin");
+
+    ItemType.Typed<ItemMeta> CAT_SPAWN_EGG = getItemType("cat_spawn_egg");
+
+    ItemType.Typed<ItemMeta> CAULDRON = getItemType("cauldron");
+
+    ItemType.Typed<ItemMeta> CAVE_SPIDER_SPAWN_EGG = getItemType("cave_spider_spawn_egg");
+
+    ItemType.Typed<ItemMeta> CHAIN = getItemType("chain");
+
+    ItemType.Typed<ItemMeta> CHAIN_COMMAND_BLOCK = getItemType("chain_command_block");
+
+    ItemType.Typed<ItemMeta> CHAINMAIL_BOOTS = getItemType("chainmail_boots");
+
+    ItemType.Typed<ItemMeta> CHAINMAIL_CHESTPLATE = getItemType("chainmail_chestplate");
+
+    ItemType.Typed<ItemMeta> CHAINMAIL_HELMET = getItemType("chainmail_helmet");
+
+    ItemType.Typed<ItemMeta> CHAINMAIL_LEGGINGS = getItemType("chainmail_leggings");
+
+    ItemType.Typed<ItemMeta> CHARCOAL = getItemType("charcoal");
+
+    ItemType.Typed<ItemMeta> CHERRY_BOAT = getItemType("cherry_boat");
+
+    ItemType.Typed<ItemMeta> CHERRY_BUTTON = getItemType("cherry_button");
+
+    ItemType.Typed<ItemMeta> CHERRY_CHEST_BOAT = getItemType("cherry_chest_boat");
+
+    ItemType.Typed<ItemMeta> CHERRY_DOOR = getItemType("cherry_door");
+
+    ItemType.Typed<ItemMeta> CHERRY_FENCE = getItemType("cherry_fence");
+
+    ItemType.Typed<ItemMeta> CHERRY_FENCE_GATE = getItemType("cherry_fence_gate");
+
+    ItemType.Typed<ItemMeta> CHERRY_HANGING_SIGN = getItemType("cherry_hanging_sign");
+
+    ItemType.Typed<ItemMeta> CHERRY_LEAVES = getItemType("cherry_leaves");
+
+    ItemType.Typed<ItemMeta> CHERRY_LOG = getItemType("cherry_log");
+
+    ItemType.Typed<ItemMeta> CHERRY_PLANKS = getItemType("cherry_planks");
+
+    ItemType.Typed<ItemMeta> CHERRY_PRESSURE_PLATE = getItemType("cherry_pressure_plate");
+
+    ItemType.Typed<ItemMeta> CHERRY_SAPLING = getItemType("cherry_sapling");
+
+    ItemType.Typed<ItemMeta> CHERRY_SIGN = getItemType("cherry_sign");
+
+    ItemType.Typed<ItemMeta> CHERRY_SLAB = getItemType("cherry_slab");
+
+    ItemType.Typed<ItemMeta> CHERRY_STAIRS = getItemType("cherry_stairs");
+
+    ItemType.Typed<ItemMeta> CHERRY_TRAPDOOR = getItemType("cherry_trapdoor");
+
+    ItemType.Typed<ItemMeta> CHERRY_WOOD = getItemType("cherry_wood");
+
+    ItemType.Typed<ItemMeta> CHEST = getItemType("chest");
+
+    ItemType.Typed<ItemMeta> CHEST_MINECART = getItemType("chest_minecart");
+
+    ItemType.Typed<ItemMeta> CHICKEN = getItemType("chicken");
+
+    ItemType.Typed<ItemMeta> CHICKEN_SPAWN_EGG = getItemType("chicken_spawn_egg");
+
+    ItemType.Typed<ItemMeta> CHIPPED_ANVIL = getItemType("chipped_anvil");
+
+    ItemType.Typed<ItemMeta> CHISELED_BOOKSHELF = getItemType("chiseled_bookshelf");
+
+    ItemType.Typed<ItemMeta> CHISELED_COPPER = getItemType("chiseled_copper");
+
+    ItemType.Typed<ItemMeta> CHISELED_DEEPSLATE = getItemType("chiseled_deepslate");
+
+    ItemType.Typed<ItemMeta> CHISELED_NETHER_BRICKS = getItemType("chiseled_nether_bricks");
+
+    ItemType.Typed<ItemMeta> CHISELED_POLISHED_BLACKSTONE = getItemType("chiseled_polished_blackstone");
+
+    ItemType.Typed<ItemMeta> CHISELED_QUARTZ_BLOCK = getItemType("chiseled_quartz_block");
+
+    ItemType.Typed<ItemMeta> CHISELED_RED_SANDSTONE = getItemType("chiseled_red_sandstone");
+
+    ItemType.Typed<ItemMeta> CHISELED_RESIN_BRICKS = getItemType("chiseled_resin_bricks");
+
+    ItemType.Typed<ItemMeta> CHISELED_SANDSTONE = getItemType("chiseled_sandstone");
+
+    ItemType.Typed<ItemMeta> CHISELED_STONE_BRICKS = getItemType("chiseled_stone_bricks");
+
+    ItemType.Typed<ItemMeta> CHISELED_TUFF = getItemType("chiseled_tuff");
+
+    ItemType.Typed<ItemMeta> CHISELED_TUFF_BRICKS = getItemType("chiseled_tuff_bricks");
+
+    ItemType.Typed<ItemMeta> CHORUS_FLOWER = getItemType("chorus_flower");
+
+    ItemType.Typed<ItemMeta> CHORUS_FRUIT = getItemType("chorus_fruit");
+
+    ItemType.Typed<ItemMeta> CHORUS_PLANT = getItemType("chorus_plant");
+
+    ItemType.Typed<ItemMeta> CLAY = getItemType("clay");
+
+    ItemType.Typed<ItemMeta> CLAY_BALL = getItemType("clay_ball");
+
+    ItemType.Typed<ItemMeta> CLOCK = getItemType("clock");
+
+    ItemType.Typed<ItemMeta> CLOSED_EYEBLOSSOM = getItemType("closed_eyeblossom");
+
+    ItemType.Typed<ItemMeta> COAL = getItemType("coal");
+
+    ItemType.Typed<ItemMeta> COAL_BLOCK = getItemType("coal_block");
+
+    ItemType.Typed<ItemMeta> COAL_ORE = getItemType("coal_ore");
+
+    ItemType.Typed<ItemMeta> COARSE_DIRT = getItemType("coarse_dirt");
+
+    ItemType.Typed<ItemMeta> COAST_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("coast_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> COBBLED_DEEPSLATE = getItemType("cobbled_deepslate");
+
+    ItemType.Typed<ItemMeta> COBBLED_DEEPSLATE_SLAB = getItemType("cobbled_deepslate_slab");
+
+    ItemType.Typed<ItemMeta> COBBLED_DEEPSLATE_STAIRS = getItemType("cobbled_deepslate_stairs");
+
+    ItemType.Typed<ItemMeta> COBBLED_DEEPSLATE_WALL = getItemType("cobbled_deepslate_wall");
+
+    ItemType.Typed<ItemMeta> COBBLESTONE = getItemType("cobblestone");
+
+    ItemType.Typed<ItemMeta> COBBLESTONE_SLAB = getItemType("cobblestone_slab");
+
+    ItemType.Typed<ItemMeta> COBBLESTONE_STAIRS = getItemType("cobblestone_stairs");
+
+    ItemType.Typed<ItemMeta> COBBLESTONE_WALL = getItemType("cobblestone_wall");
+
+    ItemType.Typed<ItemMeta> COBWEB = getItemType("cobweb");
+
+    ItemType.Typed<ItemMeta> COCOA_BEANS = getItemType("cocoa_beans");
+
+    ItemType.Typed<ItemMeta> COD = getItemType("cod");
+
+    ItemType.Typed<ItemMeta> COD_BUCKET = getItemType("cod_bucket");
+
+    ItemType.Typed<ItemMeta> COD_SPAWN_EGG = getItemType("cod_spawn_egg");
+
+    ItemType.Typed<ItemMeta> COMMAND_BLOCK = getItemType("command_block");
+
+    ItemType.Typed<ItemMeta> COMMAND_BLOCK_MINECART = getItemType("command_block_minecart");
+
+    ItemType.Typed<ItemMeta> COMPARATOR = getItemType("comparator");
+
+    ItemType.Typed<ItemMeta> COMPASS = getItemType("compass");
+
+    ItemType.Typed<ItemMeta> COMPOSTER = getItemType("composter");
+
+    ItemType.Typed<ItemMeta> CONDUIT = getItemType("conduit");
+
+    ItemType.Typed<ItemMeta> COOKED_BEEF = getItemType("cooked_beef");
+
+    ItemType.Typed<ItemMeta> COOKED_CHICKEN = getItemType("cooked_chicken");
+
+    ItemType.Typed<ItemMeta> COOKED_COD = getItemType("cooked_cod");
+
+    ItemType.Typed<ItemMeta> COOKED_MUTTON = getItemType("cooked_mutton");
+
+    ItemType.Typed<ItemMeta> COOKED_PORKCHOP = getItemType("cooked_porkchop");
+
+    ItemType.Typed<ItemMeta> COOKED_RABBIT = getItemType("cooked_rabbit");
+
+    ItemType.Typed<ItemMeta> COOKED_SALMON = getItemType("cooked_salmon");
+
+    ItemType.Typed<ItemMeta> COOKIE = getItemType("cookie");
+
+    ItemType.Typed<ItemMeta> COPPER_BLOCK = getItemType("copper_block");
+
     ItemType.Typed<ItemMeta> COPPER_BULB = getItemType("copper_bulb");
+
+    ItemType.Typed<ItemMeta> COPPER_DOOR = getItemType("copper_door");
+
+    ItemType.Typed<ItemMeta> COPPER_GRATE = getItemType("copper_grate");
+
+    ItemType.Typed<ItemMeta> COPPER_INGOT = getItemType("copper_ingot");
+
+    ItemType.Typed<ItemMeta> COPPER_ORE = getItemType("copper_ore");
+
+    ItemType.Typed<ItemMeta> COPPER_TRAPDOOR = getItemType("copper_trapdoor");
+
+    ItemType.Typed<ItemMeta> CORNFLOWER = getItemType("cornflower");
+
+    ItemType.Typed<ItemMeta> COW_SPAWN_EGG = getItemType("cow_spawn_egg");
+
+    ItemType.Typed<ItemMeta> CRACKED_DEEPSLATE_BRICKS = getItemType("cracked_deepslate_bricks");
+
+    ItemType.Typed<ItemMeta> CRACKED_DEEPSLATE_TILES = getItemType("cracked_deepslate_tiles");
+
+    ItemType.Typed<ItemMeta> CRACKED_NETHER_BRICKS = getItemType("cracked_nether_bricks");
+
+    ItemType.Typed<ItemMeta> CRACKED_POLISHED_BLACKSTONE_BRICKS = getItemType("cracked_polished_blackstone_bricks");
+
+    ItemType.Typed<ItemMeta> CRACKED_STONE_BRICKS = getItemType("cracked_stone_bricks");
+
+    ItemType.Typed<ItemMeta> CRAFTER = getItemType("crafter");
+
+    ItemType.Typed<ItemMeta> CRAFTING_TABLE = getItemType("crafting_table");
+
+    ItemType.Typed<ItemMeta> CREAKING_HEART = getItemType("creaking_heart");
+
+    ItemType.Typed<ItemMeta> CREAKING_SPAWN_EGG = getItemType("creaking_spawn_egg");
+
+    ItemType.Typed<ItemMeta> CREEPER_BANNER_PATTERN = getItemType("creeper_banner_pattern");
+
+    ItemType.Typed<ItemMeta> CREEPER_HEAD = getItemType("creeper_head");
+
+    ItemType.Typed<ItemMeta> CREEPER_SPAWN_EGG = getItemType("creeper_spawn_egg");
+
+    ItemType.Typed<ItemMeta> CRIMSON_BUTTON = getItemType("crimson_button");
+
+    ItemType.Typed<ItemMeta> CRIMSON_DOOR = getItemType("crimson_door");
+
+    ItemType.Typed<ItemMeta> CRIMSON_FENCE = getItemType("crimson_fence");
+
+    ItemType.Typed<ItemMeta> CRIMSON_FENCE_GATE = getItemType("crimson_fence_gate");
+
+    ItemType.Typed<ItemMeta> CRIMSON_FUNGUS = getItemType("crimson_fungus");
+
+    ItemType.Typed<ItemMeta> CRIMSON_HANGING_SIGN = getItemType("crimson_hanging_sign");
+
+    ItemType.Typed<ItemMeta> CRIMSON_HYPHAE = getItemType("crimson_hyphae");
+
+    ItemType.Typed<ItemMeta> CRIMSON_NYLIUM = getItemType("crimson_nylium");
+
+    ItemType.Typed<ItemMeta> CRIMSON_PLANKS = getItemType("crimson_planks");
+
+    ItemType.Typed<ItemMeta> CRIMSON_PRESSURE_PLATE = getItemType("crimson_pressure_plate");
+
+    ItemType.Typed<ItemMeta> CRIMSON_ROOTS = getItemType("crimson_roots");
+
+    ItemType.Typed<ItemMeta> CRIMSON_SIGN = getItemType("crimson_sign");
+
+    ItemType.Typed<ItemMeta> CRIMSON_SLAB = getItemType("crimson_slab");
+
+    ItemType.Typed<ItemMeta> CRIMSON_STAIRS = getItemType("crimson_stairs");
+
+    ItemType.Typed<ItemMeta> CRIMSON_STEM = getItemType("crimson_stem");
+
+    ItemType.Typed<ItemMeta> CRIMSON_TRAPDOOR = getItemType("crimson_trapdoor");
+
+    ItemType.Typed<ItemMeta> CROSSBOW = getItemType("crossbow");
+
+    ItemType.Typed<ItemMeta> CRYING_OBSIDIAN = getItemType("crying_obsidian");
+
+    ItemType.Typed<ItemMeta> CUT_COPPER = getItemType("cut_copper");
+
+    ItemType.Typed<ItemMeta> CUT_COPPER_SLAB = getItemType("cut_copper_slab");
+
+    ItemType.Typed<ItemMeta> CUT_COPPER_STAIRS = getItemType("cut_copper_stairs");
+
+    ItemType.Typed<ItemMeta> CUT_RED_SANDSTONE = getItemType("cut_red_sandstone");
+
+    ItemType.Typed<ItemMeta> CUT_RED_SANDSTONE_SLAB = getItemType("cut_red_sandstone_slab");
+
+    ItemType.Typed<ItemMeta> CUT_SANDSTONE = getItemType("cut_sandstone");
+
+    ItemType.Typed<ItemMeta> CUT_SANDSTONE_SLAB = getItemType("cut_sandstone_slab");
+
+    ItemType.Typed<ItemMeta> CYAN_BANNER = getItemType("cyan_banner");
+
+    ItemType.Typed<ItemMeta> CYAN_BED = getItemType("cyan_bed");
+
+    ItemType.Typed<ItemMeta> CYAN_BUNDLE = getItemType("cyan_bundle");
+
+    ItemType.Typed<ItemMeta> CYAN_CANDLE = getItemType("cyan_candle");
+
+    ItemType.Typed<ItemMeta> CYAN_CARPET = getItemType("cyan_carpet");
+
+    ItemType.Typed<ItemMeta> CYAN_CONCRETE = getItemType("cyan_concrete");
+
+    ItemType.Typed<ItemMeta> CYAN_CONCRETE_POWDER = getItemType("cyan_concrete_powder");
+
+    ItemType.Typed<ItemMeta> CYAN_DYE = getItemType("cyan_dye");
+
+    ItemType.Typed<ItemMeta> CYAN_GLAZED_TERRACOTTA = getItemType("cyan_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> CYAN_SHULKER_BOX = getItemType("cyan_shulker_box");
+
+    ItemType.Typed<ItemMeta> CYAN_STAINED_GLASS = getItemType("cyan_stained_glass");
+
+    ItemType.Typed<ItemMeta> CYAN_STAINED_GLASS_PANE = getItemType("cyan_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> CYAN_TERRACOTTA = getItemType("cyan_terracotta");
+
+    ItemType.Typed<ItemMeta> CYAN_WOOL = getItemType("cyan_wool");
+
+    ItemType.Typed<ItemMeta> DAMAGED_ANVIL = getItemType("damaged_anvil");
+
+    ItemType.Typed<ItemMeta> DANDELION = getItemType("dandelion");
+
+    ItemType.Typed<ItemMeta> DANGER_POTTERY_SHERD = getItemType("danger_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_BOAT = getItemType("dark_oak_boat");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_BUTTON = getItemType("dark_oak_button");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_CHEST_BOAT = getItemType("dark_oak_chest_boat");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_DOOR = getItemType("dark_oak_door");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_FENCE = getItemType("dark_oak_fence");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_FENCE_GATE = getItemType("dark_oak_fence_gate");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_HANGING_SIGN = getItemType("dark_oak_hanging_sign");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_LEAVES = getItemType("dark_oak_leaves");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_LOG = getItemType("dark_oak_log");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_PLANKS = getItemType("dark_oak_planks");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_PRESSURE_PLATE = getItemType("dark_oak_pressure_plate");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_SAPLING = getItemType("dark_oak_sapling");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_SIGN = getItemType("dark_oak_sign");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_SLAB = getItemType("dark_oak_slab");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_STAIRS = getItemType("dark_oak_stairs");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_TRAPDOOR = getItemType("dark_oak_trapdoor");
+
+    ItemType.Typed<ItemMeta> DARK_OAK_WOOD = getItemType("dark_oak_wood");
+
+    ItemType.Typed<ItemMeta> DARK_PRISMARINE = getItemType("dark_prismarine");
+
+    ItemType.Typed<ItemMeta> DARK_PRISMARINE_SLAB = getItemType("dark_prismarine_slab");
+
+    ItemType.Typed<ItemMeta> DARK_PRISMARINE_STAIRS = getItemType("dark_prismarine_stairs");
+
+    ItemType.Typed<ItemMeta> DAYLIGHT_DETECTOR = getItemType("daylight_detector");
+
+    ItemType.Typed<ItemMeta> DEAD_BRAIN_CORAL = getItemType("dead_brain_coral");
+
+    ItemType.Typed<ItemMeta> DEAD_BRAIN_CORAL_BLOCK = getItemType("dead_brain_coral_block");
+
+    ItemType.Typed<ItemMeta> DEAD_BRAIN_CORAL_FAN = getItemType("dead_brain_coral_fan");
+
+    ItemType.Typed<ItemMeta> DEAD_BUBBLE_CORAL = getItemType("dead_bubble_coral");
+
+    ItemType.Typed<ItemMeta> DEAD_BUBBLE_CORAL_BLOCK = getItemType("dead_bubble_coral_block");
+
+    ItemType.Typed<ItemMeta> DEAD_BUBBLE_CORAL_FAN = getItemType("dead_bubble_coral_fan");
+
+    ItemType.Typed<ItemMeta> DEAD_BUSH = getItemType("dead_bush");
+
+    ItemType.Typed<ItemMeta> DEAD_FIRE_CORAL = getItemType("dead_fire_coral");
+
+    ItemType.Typed<ItemMeta> DEAD_FIRE_CORAL_BLOCK = getItemType("dead_fire_coral_block");
+
+    ItemType.Typed<ItemMeta> DEAD_FIRE_CORAL_FAN = getItemType("dead_fire_coral_fan");
+
+    ItemType.Typed<ItemMeta> DEAD_HORN_CORAL = getItemType("dead_horn_coral");
+
+    ItemType.Typed<ItemMeta> DEAD_HORN_CORAL_BLOCK = getItemType("dead_horn_coral_block");
+
+    ItemType.Typed<ItemMeta> DEAD_HORN_CORAL_FAN = getItemType("dead_horn_coral_fan");
+
+    ItemType.Typed<ItemMeta> DEAD_TUBE_CORAL = getItemType("dead_tube_coral");
+
+    ItemType.Typed<ItemMeta> DEAD_TUBE_CORAL_BLOCK = getItemType("dead_tube_coral_block");
+
+    ItemType.Typed<ItemMeta> DEAD_TUBE_CORAL_FAN = getItemType("dead_tube_coral_fan");
+
+    ItemType.Typed<ItemMeta> DEBUG_STICK = getItemType("debug_stick");
+
+    ItemType.Typed<ItemMeta> DECORATED_POT = getItemType("decorated_pot");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE = getItemType("deepslate");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_BRICK_SLAB = getItemType("deepslate_brick_slab");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_BRICK_STAIRS = getItemType("deepslate_brick_stairs");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_BRICK_WALL = getItemType("deepslate_brick_wall");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_BRICKS = getItemType("deepslate_bricks");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_COAL_ORE = getItemType("deepslate_coal_ore");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_COPPER_ORE = getItemType("deepslate_copper_ore");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_DIAMOND_ORE = getItemType("deepslate_diamond_ore");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_EMERALD_ORE = getItemType("deepslate_emerald_ore");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_GOLD_ORE = getItemType("deepslate_gold_ore");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_IRON_ORE = getItemType("deepslate_iron_ore");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_LAPIS_ORE = getItemType("deepslate_lapis_ore");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_REDSTONE_ORE = getItemType("deepslate_redstone_ore");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_TILE_SLAB = getItemType("deepslate_tile_slab");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_TILE_STAIRS = getItemType("deepslate_tile_stairs");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_TILE_WALL = getItemType("deepslate_tile_wall");
+
+    ItemType.Typed<ItemMeta> DEEPSLATE_TILES = getItemType("deepslate_tiles");
+
+    ItemType.Typed<ItemMeta> DETECTOR_RAIL = getItemType("detector_rail");
+
+    ItemType.Typed<ItemMeta> DIAMOND = getItemType("diamond");
+
+    ItemType.Typed<ItemMeta> DIAMOND_AXE = getItemType("diamond_axe");
+
+    ItemType.Typed<ItemMeta> DIAMOND_BLOCK = getItemType("diamond_block");
+
+    ItemType.Typed<ItemMeta> DIAMOND_BOOTS = getItemType("diamond_boots");
+
+    ItemType.Typed<ItemMeta> DIAMOND_CHESTPLATE = getItemType("diamond_chestplate");
+
+    ItemType.Typed<ItemMeta> DIAMOND_HELMET = getItemType("diamond_helmet");
+
+    ItemType.Typed<ItemMeta> DIAMOND_HOE = getItemType("diamond_hoe");
+
+    ItemType.Typed<ItemMeta> DIAMOND_HORSE_ARMOR = getItemType("diamond_horse_armor");
+
+    ItemType.Typed<ItemMeta> DIAMOND_LEGGINGS = getItemType("diamond_leggings");
+
+    ItemType.Typed<ItemMeta> DIAMOND_ORE = getItemType("diamond_ore");
+
+    ItemType.Typed<ItemMeta> DIAMOND_PICKAXE = getItemType("diamond_pickaxe");
+
+    ItemType.Typed<ItemMeta> DIAMOND_SHOVEL = getItemType("diamond_shovel");
+
+    ItemType.Typed<ItemMeta> DIAMOND_SWORD = getItemType("diamond_sword");
+
+    ItemType.Typed<ItemMeta> DIORITE = getItemType("diorite");
+
+    ItemType.Typed<ItemMeta> DIORITE_SLAB = getItemType("diorite_slab");
+
+    ItemType.Typed<ItemMeta> DIORITE_STAIRS = getItemType("diorite_stairs");
+
+    ItemType.Typed<ItemMeta> DIORITE_WALL = getItemType("diorite_wall");
+
+    ItemType.Typed<ItemMeta> DIRT = getItemType("dirt");
+
+    ItemType.Typed<ItemMeta> DIRT_PATH = getItemType("dirt_path");
+
+    ItemType.Typed<ItemMeta> FIELD_MASONED_BANNER_PATTERN = getItemType("field_masoned_banner_pattern");
+
+    ItemType.Typed<ItemMeta> FLETCHING_TABLE = getItemType("fletching_table");
+
+    ItemType.Typed<ItemMeta> FLOW_BANNER_PATTERN = getItemType("flow_banner_pattern");
+
+    ItemType.Typed<ItemMeta> FLOWER_BANNER_PATTERN = getItemType("flower_banner_pattern");
+
+    ItemType.Typed<ItemMeta> GLOW_BERRIES = getItemType("glow_berries");
+
+    ItemType.Typed<ItemMeta> GOAT_HORN = getItemType("goat_horn");
+
+    ItemType.Typed<ItemMeta> GRINDSTONE = getItemType("grindstone");
+
+    ItemType.Typed<ItemMeta> HONEYCOMB = getItemType("honeycomb");
+
+    ItemType.Typed<ItemMeta> LANTERN = getItemType("lantern");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_5 = getItemType("music_disc_5");
+
+    ItemType.Typed<ItemMeta> DISC_FRAGMENT_5 = getItemType("disc_fragment_5");
+
+    ItemType.Typed<ItemMeta> DISPENSER = getItemType("dispenser");
+
+    ItemType.Typed<ItemMeta> DOLPHIN_SPAWN_EGG = getItemType("dolphin_spawn_egg");
+
+    ItemType.Typed<ItemMeta> DONKEY_SPAWN_EGG = getItemType("donkey_spawn_egg");
+
+    ItemType.Typed<ItemMeta> DRAGON_BREATH = getItemType("dragon_breath");
+
+    ItemType.Typed<ItemMeta> DRAGON_EGG = getItemType("dragon_egg");
+
+    ItemType.Typed<ItemMeta> DRAGON_HEAD = getItemType("dragon_head");
+
+    ItemType.Typed<ItemMeta> DRIED_KELP = getItemType("dried_kelp");
+
+    ItemType.Typed<ItemMeta> DRIED_KELP_BLOCK = getItemType("dried_kelp_block");
+
+    ItemType.Typed<ItemMeta> DRIPSTONE_BLOCK = getItemType("dripstone_block");
+
+    ItemType.Typed<ItemMeta> DROPPER = getItemType("dropper");
+
+    ItemType.Typed<ItemMeta> DROWNED_SPAWN_EGG = getItemType("drowned_spawn_egg");
+
+    ItemType.Typed<ItemMeta> DUNE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("dune_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> ECHO_SHARD = getItemType("echo_shard");
+
+    ItemType.Typed<ItemMeta> EGG = getItemType("egg");
+
+    ItemType.Typed<ItemMeta> ELDER_GUARDIAN_SPAWN_EGG = getItemType("elder_guardian_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ELYTRA = getItemType("elytra");
+
+    ItemType.Typed<ItemMeta> EMERALD = getItemType("emerald");
+
+    ItemType.Typed<ItemMeta> EMERALD_BLOCK = getItemType("emerald_block");
+
+    ItemType.Typed<ItemMeta> EMERALD_ORE = getItemType("emerald_ore");
+
+    ItemType.Typed<ItemMeta> ENCHANTED_BOOK = getItemType("enchanted_book");
+
+    ItemType.Typed<ItemMeta> ENCHANTED_GOLDEN_APPLE = getItemType("enchanted_golden_apple");
+
+    ItemType.Typed<ItemMeta> ENCHANTING_TABLE = getItemType("enchanting_table");
+
+    ItemType.Typed<ItemMeta> END_CRYSTAL = getItemType("end_crystal");
+
+    ItemType.Typed<ItemMeta> END_PORTAL_FRAME = getItemType("end_portal_frame");
+
+    ItemType.Typed<ItemMeta> END_ROD = getItemType("end_rod");
+
+    ItemType.Typed<ItemMeta> END_STONE = getItemType("end_stone");
+
+    ItemType.Typed<ItemMeta> END_STONE_BRICK_SLAB = getItemType("end_stone_brick_slab");
+
+    ItemType.Typed<ItemMeta> END_STONE_BRICK_STAIRS = getItemType("end_stone_brick_stairs");
+
+    ItemType.Typed<ItemMeta> END_STONE_BRICK_WALL = getItemType("end_stone_brick_wall");
+
+    ItemType.Typed<ItemMeta> END_STONE_BRICKS = getItemType("end_stone_bricks");
+
+    ItemType.Typed<ItemMeta> ENDER_CHEST = getItemType("ender_chest");
+
+    ItemType.Typed<ItemMeta> ENDER_DRAGON_SPAWN_EGG = getItemType("ender_dragon_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ENDER_EYE = getItemType("ender_eye");
+
+    ItemType.Typed<ItemMeta> ENDER_PEARL = getItemType("ender_pearl");
+
+    ItemType.Typed<ItemMeta> ENDERMAN_SPAWN_EGG = getItemType("enderman_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ENDERMITE_SPAWN_EGG = getItemType("endermite_spawn_egg");
+
+    ItemType.Typed<ItemMeta> EVOKER_SPAWN_EGG = getItemType("evoker_spawn_egg");
+
+    ItemType.Typed<ItemMeta> EXPERIENCE_BOTTLE = getItemType("experience_bottle");
+
+    ItemType.Typed<ItemMeta> EXPLORER_POTTERY_SHERD = getItemType("explorer_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> EXPOSED_CHISELED_COPPER = getItemType("exposed_chiseled_copper");
+
+    ItemType.Typed<ItemMeta> EXPOSED_COPPER = getItemType("exposed_copper");
+
     ItemType.Typed<ItemMeta> EXPOSED_COPPER_BULB = getItemType("exposed_copper_bulb");
-    ItemType.Typed<ItemMeta> WEATHERED_COPPER_BULB = getItemType("weathered_copper_bulb");
-    ItemType.Typed<ItemMeta> OXIDIZED_COPPER_BULB = getItemType("oxidized_copper_bulb");
-    ItemType.Typed<ItemMeta> WAXED_COPPER_BULB = getItemType("waxed_copper_bulb");
-    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER_BULB = getItemType("waxed_exposed_copper_bulb");
-    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER_BULB = getItemType("waxed_weathered_copper_bulb");
-    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER_BULB = getItemType("waxed_oxidized_copper_bulb");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> TRIAL_SPAWNER = getItemType("trial_spawner");
-    ItemType.Typed<ItemMeta> TRIAL_KEY = getItemType("trial_key");
+
+    ItemType.Typed<ItemMeta> EXPOSED_COPPER_DOOR = getItemType("exposed_copper_door");
+
+    ItemType.Typed<ItemMeta> EXPOSED_COPPER_GRATE = getItemType("exposed_copper_grate");
+
+    ItemType.Typed<ItemMeta> EXPOSED_COPPER_TRAPDOOR = getItemType("exposed_copper_trapdoor");
+
+    ItemType.Typed<ItemMeta> EXPOSED_CUT_COPPER = getItemType("exposed_cut_copper");
+
+    ItemType.Typed<ItemMeta> EXPOSED_CUT_COPPER_SLAB = getItemType("exposed_cut_copper_slab");
+
+    ItemType.Typed<ItemMeta> EXPOSED_CUT_COPPER_STAIRS = getItemType("exposed_cut_copper_stairs");
+
+    ItemType.Typed<ItemMeta> EYE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("eye_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> FARMLAND = getItemType("farmland");
+
+    ItemType.Typed<ItemMeta> FEATHER = getItemType("feather");
+
+    ItemType.Typed<ItemMeta> FERMENTED_SPIDER_EYE = getItemType("fermented_spider_eye");
+
+    ItemType.Typed<ItemMeta> FERN = getItemType("fern");
+
+    ItemType.Typed<ItemMeta> FILLED_MAP = getItemType("filled_map");
+
+    ItemType.Typed<ItemMeta> FIRE_CHARGE = getItemType("fire_charge");
+
+    ItemType.Typed<ItemMeta> FIRE_CORAL = getItemType("fire_coral");
+
+    ItemType.Typed<ItemMeta> FIRE_CORAL_BLOCK = getItemType("fire_coral_block");
+
+    ItemType.Typed<ItemMeta> FIRE_CORAL_FAN = getItemType("fire_coral_fan");
+
+    ItemType.Typed<ItemMeta> FIREWORK_ROCKET = getItemType("firework_rocket");
+
+    ItemType.Typed<ItemMeta> FIREWORK_STAR = getItemType("firework_star");
+
+    ItemType.Typed<ItemMeta> FISHING_ROD = getItemType("fishing_rod");
+
+    ItemType.Typed<ItemMeta> FLINT = getItemType("flint");
+
+    ItemType.Typed<ItemMeta> FLINT_AND_STEEL = getItemType("flint_and_steel");
+
+    ItemType.Typed<ItemMeta> FLOW_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("flow_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> FLOW_POTTERY_SHERD = getItemType("flow_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> FLOWER_POT = getItemType("flower_pot");
+
+    ItemType.Typed<ItemMeta> FLOWERING_AZALEA = getItemType("flowering_azalea");
+
+    ItemType.Typed<ItemMeta> FLOWERING_AZALEA_LEAVES = getItemType("flowering_azalea_leaves");
+
+    ItemType.Typed<ItemMeta> FOX_SPAWN_EGG = getItemType("fox_spawn_egg");
+
+    ItemType.Typed<ItemMeta> FRIEND_POTTERY_SHERD = getItemType("friend_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> FROG_SPAWN_EGG = getItemType("frog_spawn_egg");
+
+    ItemType.Typed<ItemMeta> FROGSPAWN = getItemType("frogspawn");
+
+    ItemType.Typed<ItemMeta> FURNACE = getItemType("furnace");
+
+    ItemType.Typed<ItemMeta> FURNACE_MINECART = getItemType("furnace_minecart");
+
+    ItemType.Typed<ItemMeta> GHAST_SPAWN_EGG = getItemType("ghast_spawn_egg");
+
+    ItemType.Typed<ItemMeta> GHAST_TEAR = getItemType("ghast_tear");
+
+    ItemType.Typed<ItemMeta> GILDED_BLACKSTONE = getItemType("gilded_blackstone");
+
+    ItemType.Typed<ItemMeta> GLASS = getItemType("glass");
+
+    ItemType.Typed<ItemMeta> GLASS_BOTTLE = getItemType("glass_bottle");
+
+    ItemType.Typed<ItemMeta> GLASS_PANE = getItemType("glass_pane");
+
+    ItemType.Typed<ItemMeta> GLISTERING_MELON_SLICE = getItemType("glistering_melon_slice");
+
+    ItemType.Typed<ItemMeta> GLOBE_BANNER_PATTERN = getItemType("globe_banner_pattern");
+
+    ItemType.Typed<ItemMeta> GLOW_INK_SAC = getItemType("glow_ink_sac");
+
+    ItemType.Typed<ItemMeta> GLOW_ITEM_FRAME = getItemType("glow_item_frame");
+
+    ItemType.Typed<ItemMeta> GLOW_LICHEN = getItemType("glow_lichen");
+
+    ItemType.Typed<ItemMeta> GLOW_SQUID_SPAWN_EGG = getItemType("glow_squid_spawn_egg");
+
+    ItemType.Typed<ItemMeta> GLOWSTONE = getItemType("glowstone");
+
+    ItemType.Typed<ItemMeta> GLOWSTONE_DUST = getItemType("glowstone_dust");
+
+    ItemType.Typed<ItemMeta> GOAT_SPAWN_EGG = getItemType("goat_spawn_egg");
+
+    ItemType.Typed<ItemMeta> GOLD_BLOCK = getItemType("gold_block");
+
+    ItemType.Typed<ItemMeta> GOLD_INGOT = getItemType("gold_ingot");
+
+    ItemType.Typed<ItemMeta> GOLD_NUGGET = getItemType("gold_nugget");
+
+    ItemType.Typed<ItemMeta> GOLD_ORE = getItemType("gold_ore");
+
+    ItemType.Typed<ItemMeta> GOLDEN_APPLE = getItemType("golden_apple");
+
+    ItemType.Typed<ItemMeta> GOLDEN_AXE = getItemType("golden_axe");
+
+    ItemType.Typed<ItemMeta> GOLDEN_BOOTS = getItemType("golden_boots");
+
+    ItemType.Typed<ItemMeta> GOLDEN_CARROT = getItemType("golden_carrot");
+
+    ItemType.Typed<ItemMeta> GOLDEN_CHESTPLATE = getItemType("golden_chestplate");
+
+    ItemType.Typed<ItemMeta> GOLDEN_HELMET = getItemType("golden_helmet");
+
+    ItemType.Typed<ItemMeta> GOLDEN_HOE = getItemType("golden_hoe");
+
+    ItemType.Typed<ItemMeta> GOLDEN_HORSE_ARMOR = getItemType("golden_horse_armor");
+
+    ItemType.Typed<ItemMeta> GOLDEN_LEGGINGS = getItemType("golden_leggings");
+
+    ItemType.Typed<ItemMeta> GOLDEN_PICKAXE = getItemType("golden_pickaxe");
+
+    ItemType.Typed<ItemMeta> GOLDEN_SHOVEL = getItemType("golden_shovel");
+
+    ItemType.Typed<ItemMeta> GOLDEN_SWORD = getItemType("golden_sword");
+
+    ItemType.Typed<ItemMeta> GRANITE = getItemType("granite");
+
+    ItemType.Typed<ItemMeta> GRANITE_SLAB = getItemType("granite_slab");
+
+    ItemType.Typed<ItemMeta> GRANITE_STAIRS = getItemType("granite_stairs");
+
+    ItemType.Typed<ItemMeta> GRANITE_WALL = getItemType("granite_wall");
+
+    ItemType.Typed<ItemMeta> GRASS_BLOCK = getItemType("grass_block");
+
+    ItemType.Typed<ItemMeta> GRAVEL = getItemType("gravel");
+
+    ItemType.Typed<ItemMeta> GRAY_BANNER = getItemType("gray_banner");
+
+    ItemType.Typed<ItemMeta> GRAY_BED = getItemType("gray_bed");
+
+    ItemType.Typed<ItemMeta> GRAY_BUNDLE = getItemType("gray_bundle");
+
+    ItemType.Typed<ItemMeta> GRAY_CANDLE = getItemType("gray_candle");
+
+    ItemType.Typed<ItemMeta> GRAY_CARPET = getItemType("gray_carpet");
+
+    ItemType.Typed<ItemMeta> GRAY_CONCRETE = getItemType("gray_concrete");
+
+    ItemType.Typed<ItemMeta> GRAY_CONCRETE_POWDER = getItemType("gray_concrete_powder");
+
+    ItemType.Typed<ItemMeta> GRAY_DYE = getItemType("gray_dye");
+
+    ItemType.Typed<ItemMeta> GRAY_GLAZED_TERRACOTTA = getItemType("gray_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> GRAY_SHULKER_BOX = getItemType("gray_shulker_box");
+
+    ItemType.Typed<ItemMeta> GRAY_STAINED_GLASS = getItemType("gray_stained_glass");
+
+    ItemType.Typed<ItemMeta> GRAY_STAINED_GLASS_PANE = getItemType("gray_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> GRAY_TERRACOTTA = getItemType("gray_terracotta");
+
+    ItemType.Typed<ItemMeta> GRAY_WOOL = getItemType("gray_wool");
+
+    ItemType.Typed<ItemMeta> GREEN_BANNER = getItemType("green_banner");
+
+    ItemType.Typed<ItemMeta> GREEN_BED = getItemType("green_bed");
+
+    ItemType.Typed<ItemMeta> GREEN_BUNDLE = getItemType("green_bundle");
+
+    ItemType.Typed<ItemMeta> GREEN_CANDLE = getItemType("green_candle");
+
+    ItemType.Typed<ItemMeta> GREEN_CARPET = getItemType("green_carpet");
+
+    ItemType.Typed<ItemMeta> GREEN_CONCRETE = getItemType("green_concrete");
+
+    ItemType.Typed<ItemMeta> GREEN_CONCRETE_POWDER = getItemType("green_concrete_powder");
+
+    ItemType.Typed<ItemMeta> GREEN_DYE = getItemType("green_dye");
+
+    ItemType.Typed<ItemMeta> GREEN_GLAZED_TERRACOTTA = getItemType("green_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> GREEN_SHULKER_BOX = getItemType("green_shulker_box");
+
+    ItemType.Typed<ItemMeta> GREEN_STAINED_GLASS = getItemType("green_stained_glass");
+
+    ItemType.Typed<ItemMeta> GREEN_STAINED_GLASS_PANE = getItemType("green_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> GREEN_TERRACOTTA = getItemType("green_terracotta");
+
+    ItemType.Typed<ItemMeta> GREEN_WOOL = getItemType("green_wool");
+
+    ItemType.Typed<ItemMeta> GUARDIAN_SPAWN_EGG = getItemType("guardian_spawn_egg");
+
+    ItemType.Typed<ItemMeta> GUNPOWDER = getItemType("gunpowder");
+
+    ItemType.Typed<ItemMeta> GUSTER_BANNER_PATTERN = getItemType("guster_banner_pattern");
+
+    ItemType.Typed<ItemMeta> GUSTER_POTTERY_SHERD = getItemType("guster_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> HANGING_ROOTS = getItemType("hanging_roots");
+
+    ItemType.Typed<ItemMeta> HAY_BLOCK = getItemType("hay_block");
+
+    ItemType.Typed<ItemMeta> HEART_OF_THE_SEA = getItemType("heart_of_the_sea");
+
+    ItemType.Typed<ItemMeta> HEART_POTTERY_SHERD = getItemType("heart_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> HEARTBREAK_POTTERY_SHERD = getItemType("heartbreak_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> HEAVY_CORE = getItemType("heavy_core");
+
+    ItemType.Typed<ItemMeta> HEAVY_WEIGHTED_PRESSURE_PLATE = getItemType("heavy_weighted_pressure_plate");
+
+    ItemType.Typed<ItemMeta> HOGLIN_SPAWN_EGG = getItemType("hoglin_spawn_egg");
+
+    ItemType.Typed<ItemMeta> HONEY_BLOCK = getItemType("honey_block");
+
+    ItemType.Typed<ItemMeta> HONEY_BOTTLE = getItemType("honey_bottle");
+
+    ItemType.Typed<ItemMeta> HONEYCOMB_BLOCK = getItemType("honeycomb_block");
+
+    ItemType.Typed<ItemMeta> HOPPER = getItemType("hopper");
+
+    ItemType.Typed<ItemMeta> HOPPER_MINECART = getItemType("hopper_minecart");
+
+    ItemType.Typed<ItemMeta> HORN_CORAL = getItemType("horn_coral");
+
+    ItemType.Typed<ItemMeta> HORN_CORAL_BLOCK = getItemType("horn_coral_block");
+
+    ItemType.Typed<ItemMeta> HORN_CORAL_FAN = getItemType("horn_coral_fan");
+
+    ItemType.Typed<ItemMeta> HORSE_SPAWN_EGG = getItemType("horse_spawn_egg");
+
+    ItemType.Typed<ItemMeta> HOST_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("host_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> HOWL_POTTERY_SHERD = getItemType("howl_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> HUSK_SPAWN_EGG = getItemType("husk_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ICE = getItemType("ice");
+
+    ItemType.Typed<ItemMeta> INFESTED_CHISELED_STONE_BRICKS = getItemType("infested_chiseled_stone_bricks");
+
+    ItemType.Typed<ItemMeta> INFESTED_COBBLESTONE = getItemType("infested_cobblestone");
+
+    ItemType.Typed<ItemMeta> INFESTED_CRACKED_STONE_BRICKS = getItemType("infested_cracked_stone_bricks");
+
+    ItemType.Typed<ItemMeta> INFESTED_DEEPSLATE = getItemType("infested_deepslate");
+
+    ItemType.Typed<ItemMeta> INFESTED_MOSSY_STONE_BRICKS = getItemType("infested_mossy_stone_bricks");
+
+    ItemType.Typed<ItemMeta> INFESTED_STONE = getItemType("infested_stone");
+
+    ItemType.Typed<ItemMeta> INFESTED_STONE_BRICKS = getItemType("infested_stone_bricks");
+
+    ItemType.Typed<ItemMeta> INK_SAC = getItemType("ink_sac");
+
+    ItemType.Typed<ItemMeta> IRON_AXE = getItemType("iron_axe");
+
+    ItemType.Typed<ItemMeta> IRON_BARS = getItemType("iron_bars");
+
+    ItemType.Typed<ItemMeta> IRON_BLOCK = getItemType("iron_block");
+
+    ItemType.Typed<ItemMeta> IRON_BOOTS = getItemType("iron_boots");
+
+    ItemType.Typed<ItemMeta> IRON_CHESTPLATE = getItemType("iron_chestplate");
+
+    ItemType.Typed<ItemMeta> IRON_DOOR = getItemType("iron_door");
+
+    ItemType.Typed<ItemMeta> IRON_GOLEM_SPAWN_EGG = getItemType("iron_golem_spawn_egg");
+
+    ItemType.Typed<ItemMeta> IRON_HELMET = getItemType("iron_helmet");
+
+    ItemType.Typed<ItemMeta> IRON_HOE = getItemType("iron_hoe");
+
+    ItemType.Typed<ItemMeta> IRON_HORSE_ARMOR = getItemType("iron_horse_armor");
+
+    ItemType.Typed<ItemMeta> IRON_INGOT = getItemType("iron_ingot");
+
+    ItemType.Typed<ItemMeta> IRON_LEGGINGS = getItemType("iron_leggings");
+
+    ItemType.Typed<ItemMeta> IRON_NUGGET = getItemType("iron_nugget");
+
+    ItemType.Typed<ItemMeta> IRON_ORE = getItemType("iron_ore");
+
+    ItemType.Typed<ItemMeta> IRON_PICKAXE = getItemType("iron_pickaxe");
+
+    ItemType.Typed<ItemMeta> IRON_SHOVEL = getItemType("iron_shovel");
+
+    ItemType.Typed<ItemMeta> IRON_SWORD = getItemType("iron_sword");
+
+    ItemType.Typed<ItemMeta> IRON_TRAPDOOR = getItemType("iron_trapdoor");
+
+    ItemType.Typed<ItemMeta> ITEM_FRAME = getItemType("item_frame");
+
+    ItemType.Typed<ItemMeta> JACK_O_LANTERN = getItemType("jack_o_lantern");
+
+    ItemType.Typed<ItemMeta> JIGSAW = getItemType("jigsaw");
+
+    ItemType.Typed<ItemMeta> JUKEBOX = getItemType("jukebox");
+
+    ItemType.Typed<ItemMeta> JUNGLE_BOAT = getItemType("jungle_boat");
+
+    ItemType.Typed<ItemMeta> JUNGLE_BUTTON = getItemType("jungle_button");
+
+    ItemType.Typed<ItemMeta> JUNGLE_CHEST_BOAT = getItemType("jungle_chest_boat");
+
+    ItemType.Typed<ItemMeta> JUNGLE_DOOR = getItemType("jungle_door");
+
+    ItemType.Typed<ItemMeta> JUNGLE_FENCE = getItemType("jungle_fence");
+
+    ItemType.Typed<ItemMeta> JUNGLE_FENCE_GATE = getItemType("jungle_fence_gate");
+
+    ItemType.Typed<ItemMeta> JUNGLE_HANGING_SIGN = getItemType("jungle_hanging_sign");
+
+    ItemType.Typed<ItemMeta> JUNGLE_LEAVES = getItemType("jungle_leaves");
+
+    ItemType.Typed<ItemMeta> JUNGLE_LOG = getItemType("jungle_log");
+
+    ItemType.Typed<ItemMeta> JUNGLE_PLANKS = getItemType("jungle_planks");
+
+    ItemType.Typed<ItemMeta> JUNGLE_PRESSURE_PLATE = getItemType("jungle_pressure_plate");
+
+    ItemType.Typed<ItemMeta> JUNGLE_SAPLING = getItemType("jungle_sapling");
+
+    ItemType.Typed<ItemMeta> JUNGLE_SIGN = getItemType("jungle_sign");
+
+    ItemType.Typed<ItemMeta> JUNGLE_SLAB = getItemType("jungle_slab");
+
+    ItemType.Typed<ItemMeta> JUNGLE_STAIRS = getItemType("jungle_stairs");
+
+    ItemType.Typed<ItemMeta> JUNGLE_TRAPDOOR = getItemType("jungle_trapdoor");
+
+    ItemType.Typed<ItemMeta> JUNGLE_WOOD = getItemType("jungle_wood");
+
+    ItemType.Typed<ItemMeta> KELP = getItemType("kelp");
+
+    ItemType.Typed<ItemMeta> KNOWLEDGE_BOOK = getItemType("knowledge_book");
+
+    ItemType.Typed<ItemMeta> LADDER = getItemType("ladder");
+
+    ItemType.Typed<ItemMeta> LAPIS_BLOCK = getItemType("lapis_block");
+
+    ItemType.Typed<ItemMeta> LAPIS_LAZULI = getItemType("lapis_lazuli");
+
+    ItemType.Typed<ItemMeta> LAPIS_ORE = getItemType("lapis_ore");
+
+    ItemType.Typed<ItemMeta> LARGE_AMETHYST_BUD = getItemType("large_amethyst_bud");
+
+    ItemType.Typed<ItemMeta> LARGE_FERN = getItemType("large_fern");
+
+    ItemType.Typed<ItemMeta> LAVA_BUCKET = getItemType("lava_bucket");
+
+    ItemType.Typed<ItemMeta> LEAD = getItemType("lead");
+
+    ItemType.Typed<ItemMeta> LEATHER = getItemType("leather");
+
+    ItemType.Typed<ItemMeta> LEATHER_BOOTS = getItemType("leather_boots");
+
+    ItemType.Typed<ItemMeta> LEATHER_CHESTPLATE = getItemType("leather_chestplate");
+
+    ItemType.Typed<ItemMeta> LEATHER_HELMET = getItemType("leather_helmet");
+
+    ItemType.Typed<ItemMeta> LEATHER_HORSE_ARMOR = getItemType("leather_horse_armor");
+
+    ItemType.Typed<ItemMeta> LEATHER_LEGGINGS = getItemType("leather_leggings");
+
+    ItemType.Typed<ItemMeta> LECTERN = getItemType("lectern");
+
+    ItemType.Typed<ItemMeta> LEVER = getItemType("lever");
+
+    ItemType.Typed<ItemMeta> LIGHT = getItemType("light");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_BANNER = getItemType("light_blue_banner");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_BED = getItemType("light_blue_bed");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_BUNDLE = getItemType("light_blue_bundle");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_CANDLE = getItemType("light_blue_candle");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_CARPET = getItemType("light_blue_carpet");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_CONCRETE = getItemType("light_blue_concrete");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_CONCRETE_POWDER = getItemType("light_blue_concrete_powder");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_DYE = getItemType("light_blue_dye");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_GLAZED_TERRACOTTA = getItemType("light_blue_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_SHULKER_BOX = getItemType("light_blue_shulker_box");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_STAINED_GLASS = getItemType("light_blue_stained_glass");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_STAINED_GLASS_PANE = getItemType("light_blue_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_TERRACOTTA = getItemType("light_blue_terracotta");
+
+    ItemType.Typed<ItemMeta> LIGHT_BLUE_WOOL = getItemType("light_blue_wool");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_BANNER = getItemType("light_gray_banner");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_BED = getItemType("light_gray_bed");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_BUNDLE = getItemType("light_gray_bundle");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_CANDLE = getItemType("light_gray_candle");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_CARPET = getItemType("light_gray_carpet");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_CONCRETE = getItemType("light_gray_concrete");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_CONCRETE_POWDER = getItemType("light_gray_concrete_powder");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_DYE = getItemType("light_gray_dye");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_GLAZED_TERRACOTTA = getItemType("light_gray_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_SHULKER_BOX = getItemType("light_gray_shulker_box");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_STAINED_GLASS = getItemType("light_gray_stained_glass");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_STAINED_GLASS_PANE = getItemType("light_gray_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_TERRACOTTA = getItemType("light_gray_terracotta");
+
+    ItemType.Typed<ItemMeta> LIGHT_GRAY_WOOL = getItemType("light_gray_wool");
+
+    ItemType.Typed<ItemMeta> LIGHT_WEIGHTED_PRESSURE_PLATE = getItemType("light_weighted_pressure_plate");
+
+    ItemType.Typed<ItemMeta> LIGHTNING_ROD = getItemType("lightning_rod");
+
+    ItemType.Typed<ItemMeta> LILAC = getItemType("lilac");
+
+    ItemType.Typed<ItemMeta> LILY_OF_THE_VALLEY = getItemType("lily_of_the_valley");
+
+    ItemType.Typed<ItemMeta> LILY_PAD = getItemType("lily_pad");
+
+    ItemType.Typed<ItemMeta> LIME_BANNER = getItemType("lime_banner");
+
+    ItemType.Typed<ItemMeta> LIME_BED = getItemType("lime_bed");
+
+    ItemType.Typed<ItemMeta> LIME_BUNDLE = getItemType("lime_bundle");
+
+    ItemType.Typed<ItemMeta> LIME_CANDLE = getItemType("lime_candle");
+
+    ItemType.Typed<ItemMeta> LIME_CARPET = getItemType("lime_carpet");
+
+    ItemType.Typed<ItemMeta> LIME_CONCRETE = getItemType("lime_concrete");
+
+    ItemType.Typed<ItemMeta> LIME_CONCRETE_POWDER = getItemType("lime_concrete_powder");
+
+    ItemType.Typed<ItemMeta> LIME_DYE = getItemType("lime_dye");
+
+    ItemType.Typed<ItemMeta> LIME_GLAZED_TERRACOTTA = getItemType("lime_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> LIME_SHULKER_BOX = getItemType("lime_shulker_box");
+
+    ItemType.Typed<ItemMeta> LIME_STAINED_GLASS = getItemType("lime_stained_glass");
+
+    ItemType.Typed<ItemMeta> LIME_STAINED_GLASS_PANE = getItemType("lime_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> LIME_TERRACOTTA = getItemType("lime_terracotta");
+
+    ItemType.Typed<ItemMeta> LIME_WOOL = getItemType("lime_wool");
+
+    ItemType.Typed<ItemMeta> LINGERING_POTION = getItemType("lingering_potion");
+
+    ItemType.Typed<ItemMeta> LLAMA_SPAWN_EGG = getItemType("llama_spawn_egg");
+
+    ItemType.Typed<ItemMeta> LODESTONE = getItemType("lodestone");
+
+    ItemType.Typed<ItemMeta> LOOM = getItemType("loom");
+
+    ItemType.Typed<ItemMeta> MACE = getItemType("mace");
+
+    ItemType.Typed<ItemMeta> MAGENTA_BANNER = getItemType("magenta_banner");
+
+    ItemType.Typed<ItemMeta> MAGENTA_BED = getItemType("magenta_bed");
+
+    ItemType.Typed<ItemMeta> MAGENTA_BUNDLE = getItemType("magenta_bundle");
+
+    ItemType.Typed<ItemMeta> MAGENTA_CANDLE = getItemType("magenta_candle");
+
+    ItemType.Typed<ItemMeta> MAGENTA_CARPET = getItemType("magenta_carpet");
+
+    ItemType.Typed<ItemMeta> MAGENTA_CONCRETE = getItemType("magenta_concrete");
+
+    ItemType.Typed<ItemMeta> MAGENTA_CONCRETE_POWDER = getItemType("magenta_concrete_powder");
+
+    ItemType.Typed<ItemMeta> MAGENTA_DYE = getItemType("magenta_dye");
+
+    ItemType.Typed<ItemMeta> MAGENTA_GLAZED_TERRACOTTA = getItemType("magenta_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> MAGENTA_SHULKER_BOX = getItemType("magenta_shulker_box");
+
+    ItemType.Typed<ItemMeta> MAGENTA_STAINED_GLASS = getItemType("magenta_stained_glass");
+
+    ItemType.Typed<ItemMeta> MAGENTA_STAINED_GLASS_PANE = getItemType("magenta_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> MAGENTA_TERRACOTTA = getItemType("magenta_terracotta");
+
+    ItemType.Typed<ItemMeta> MAGENTA_WOOL = getItemType("magenta_wool");
+
+    ItemType.Typed<ItemMeta> MAGMA_BLOCK = getItemType("magma_block");
+
+    ItemType.Typed<ItemMeta> MAGMA_CREAM = getItemType("magma_cream");
+
+    ItemType.Typed<ItemMeta> MAGMA_CUBE_SPAWN_EGG = getItemType("magma_cube_spawn_egg");
+
+    ItemType.Typed<ItemMeta> MANGROVE_BOAT = getItemType("mangrove_boat");
+
+    ItemType.Typed<ItemMeta> MANGROVE_BUTTON = getItemType("mangrove_button");
+
+    ItemType.Typed<ItemMeta> MANGROVE_CHEST_BOAT = getItemType("mangrove_chest_boat");
+
+    ItemType.Typed<ItemMeta> MANGROVE_DOOR = getItemType("mangrove_door");
+
+    ItemType.Typed<ItemMeta> MANGROVE_FENCE = getItemType("mangrove_fence");
+
+    ItemType.Typed<ItemMeta> MANGROVE_FENCE_GATE = getItemType("mangrove_fence_gate");
+
+    ItemType.Typed<ItemMeta> MANGROVE_HANGING_SIGN = getItemType("mangrove_hanging_sign");
+
+    ItemType.Typed<ItemMeta> MANGROVE_LEAVES = getItemType("mangrove_leaves");
+
+    ItemType.Typed<ItemMeta> MANGROVE_LOG = getItemType("mangrove_log");
+
+    ItemType.Typed<ItemMeta> MANGROVE_PLANKS = getItemType("mangrove_planks");
+
+    ItemType.Typed<ItemMeta> MANGROVE_PRESSURE_PLATE = getItemType("mangrove_pressure_plate");
+
+    ItemType.Typed<ItemMeta> MANGROVE_PROPAGULE = getItemType("mangrove_propagule");
+
+    ItemType.Typed<ItemMeta> MANGROVE_ROOTS = getItemType("mangrove_roots");
+
+    ItemType.Typed<ItemMeta> MANGROVE_SIGN = getItemType("mangrove_sign");
+
+    ItemType.Typed<ItemMeta> MANGROVE_SLAB = getItemType("mangrove_slab");
+
+    ItemType.Typed<ItemMeta> MANGROVE_STAIRS = getItemType("mangrove_stairs");
+
+    ItemType.Typed<ItemMeta> MANGROVE_TRAPDOOR = getItemType("mangrove_trapdoor");
+
+    ItemType.Typed<ItemMeta> MANGROVE_WOOD = getItemType("mangrove_wood");
+
+    ItemType.Typed<ItemMeta> MAP = getItemType("map");
+
+    ItemType.Typed<ItemMeta> MEDIUM_AMETHYST_BUD = getItemType("medium_amethyst_bud");
+
+    ItemType.Typed<ItemMeta> MELON = getItemType("melon");
+
+    ItemType.Typed<ItemMeta> MELON_SEEDS = getItemType("melon_seeds");
+
+    ItemType.Typed<ItemMeta> MELON_SLICE = getItemType("melon_slice");
+
+    ItemType.Typed<ItemMeta> MILK_BUCKET = getItemType("milk_bucket");
+
+    ItemType.Typed<ItemMeta> MINECART = getItemType("minecart");
+
+    ItemType.Typed<ItemMeta> MINER_POTTERY_SHERD = getItemType("miner_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> MOJANG_BANNER_PATTERN = getItemType("mojang_banner_pattern");
+
+    ItemType.Typed<ItemMeta> MOOSHROOM_SPAWN_EGG = getItemType("mooshroom_spawn_egg");
+
+    ItemType.Typed<ItemMeta> MOSS_BLOCK = getItemType("moss_block");
+
+    ItemType.Typed<ItemMeta> MOSS_CARPET = getItemType("moss_carpet");
+
+    ItemType.Typed<ItemMeta> MOSSY_COBBLESTONE = getItemType("mossy_cobblestone");
+
+    ItemType.Typed<ItemMeta> MOSSY_COBBLESTONE_SLAB = getItemType("mossy_cobblestone_slab");
+
+    ItemType.Typed<ItemMeta> MOSSY_COBBLESTONE_STAIRS = getItemType("mossy_cobblestone_stairs");
+
+    ItemType.Typed<ItemMeta> MOSSY_COBBLESTONE_WALL = getItemType("mossy_cobblestone_wall");
+
+    ItemType.Typed<ItemMeta> MOSSY_STONE_BRICK_SLAB = getItemType("mossy_stone_brick_slab");
+
+    ItemType.Typed<ItemMeta> MOSSY_STONE_BRICK_STAIRS = getItemType("mossy_stone_brick_stairs");
+
+    ItemType.Typed<ItemMeta> MOSSY_STONE_BRICK_WALL = getItemType("mossy_stone_brick_wall");
+
+    ItemType.Typed<ItemMeta> MOSSY_STONE_BRICKS = getItemType("mossy_stone_bricks");
+
+    ItemType.Typed<ItemMeta> MOURNER_POTTERY_SHERD = getItemType("mourner_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> MUD = getItemType("mud");
+
+    ItemType.Typed<ItemMeta> MUD_BRICK_SLAB = getItemType("mud_brick_slab");
+
+    ItemType.Typed<ItemMeta> MUD_BRICK_STAIRS = getItemType("mud_brick_stairs");
+
+    ItemType.Typed<ItemMeta> MUD_BRICK_WALL = getItemType("mud_brick_wall");
+
+    ItemType.Typed<ItemMeta> MUD_BRICKS = getItemType("mud_bricks");
+
+    ItemType.Typed<ItemMeta> MUDDY_MANGROVE_ROOTS = getItemType("muddy_mangrove_roots");
+
+    ItemType.Typed<ItemMeta> MULE_SPAWN_EGG = getItemType("mule_spawn_egg");
+
+    ItemType.Typed<ItemMeta> MUSHROOM_STEM = getItemType("mushroom_stem");
+
+    ItemType.Typed<ItemMeta> MUSHROOM_STEW = getItemType("mushroom_stew");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_11 = getItemType("music_disc_11");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_13 = getItemType("music_disc_13");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_BLOCKS = getItemType("music_disc_blocks");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_CAT = getItemType("music_disc_cat");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_CHIRP = getItemType("music_disc_chirp");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_CREATOR = getItemType("music_disc_creator");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_CREATOR_MUSIC_BOX = getItemType("music_disc_creator_music_box");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_FAR = getItemType("music_disc_far");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_MALL = getItemType("music_disc_mall");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_MELLOHI = getItemType("music_disc_mellohi");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_OTHERSIDE = getItemType("music_disc_otherside");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_PIGSTEP = getItemType("music_disc_pigstep");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_PRECIPICE = getItemType("music_disc_precipice");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_RELIC = getItemType("music_disc_relic");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_STAL = getItemType("music_disc_stal");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_STRAD = getItemType("music_disc_strad");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_WAIT = getItemType("music_disc_wait");
+
+    ItemType.Typed<ItemMeta> MUSIC_DISC_WARD = getItemType("music_disc_ward");
+
+    ItemType.Typed<ItemMeta> MUTTON = getItemType("mutton");
+
+    ItemType.Typed<ItemMeta> MYCELIUM = getItemType("mycelium");
+
+    ItemType.Typed<ItemMeta> NAME_TAG = getItemType("name_tag");
+
+    ItemType.Typed<ItemMeta> NAUTILUS_SHELL = getItemType("nautilus_shell");
+
+    ItemType.Typed<ItemMeta> NETHER_BRICK = getItemType("nether_brick");
+
+    ItemType.Typed<ItemMeta> NETHER_BRICK_FENCE = getItemType("nether_brick_fence");
+
+    ItemType.Typed<ItemMeta> NETHER_BRICK_SLAB = getItemType("nether_brick_slab");
+
+    ItemType.Typed<ItemMeta> NETHER_BRICK_STAIRS = getItemType("nether_brick_stairs");
+
+    ItemType.Typed<ItemMeta> NETHER_BRICK_WALL = getItemType("nether_brick_wall");
+
+    ItemType.Typed<ItemMeta> NETHER_BRICKS = getItemType("nether_bricks");
+
+    ItemType.Typed<ItemMeta> NETHER_GOLD_ORE = getItemType("nether_gold_ore");
+
+    ItemType.Typed<ItemMeta> NETHER_QUARTZ_ORE = getItemType("nether_quartz_ore");
+
+    ItemType.Typed<ItemMeta> NETHER_SPROUTS = getItemType("nether_sprouts");
+
+    ItemType.Typed<ItemMeta> NETHER_STAR = getItemType("nether_star");
+
+    ItemType.Typed<ItemMeta> NETHER_WART = getItemType("nether_wart");
+
+    ItemType.Typed<ItemMeta> NETHER_WART_BLOCK = getItemType("nether_wart_block");
+
+    ItemType.Typed<ItemMeta> NETHERITE_AXE = getItemType("netherite_axe");
+
+    ItemType.Typed<ItemMeta> NETHERITE_BLOCK = getItemType("netherite_block");
+
+    ItemType.Typed<ItemMeta> NETHERITE_BOOTS = getItemType("netherite_boots");
+
+    ItemType.Typed<ItemMeta> NETHERITE_CHESTPLATE = getItemType("netherite_chestplate");
+
+    ItemType.Typed<ItemMeta> NETHERITE_HELMET = getItemType("netherite_helmet");
+
+    ItemType.Typed<ItemMeta> NETHERITE_HOE = getItemType("netherite_hoe");
+
+    ItemType.Typed<ItemMeta> NETHERITE_INGOT = getItemType("netherite_ingot");
+
+    ItemType.Typed<ItemMeta> NETHERITE_LEGGINGS = getItemType("netherite_leggings");
+
+    ItemType.Typed<ItemMeta> NETHERITE_PICKAXE = getItemType("netherite_pickaxe");
+
+    ItemType.Typed<ItemMeta> NETHERITE_SCRAP = getItemType("netherite_scrap");
+
+    ItemType.Typed<ItemMeta> NETHERITE_SHOVEL = getItemType("netherite_shovel");
+
+    ItemType.Typed<ItemMeta> NETHERITE_SWORD = getItemType("netherite_sword");
+
+    ItemType.Typed<ItemMeta> NETHERITE_UPGRADE_SMITHING_TEMPLATE = getItemType("netherite_upgrade_smithing_template");
+
+    ItemType.Typed<ItemMeta> NETHERRACK = getItemType("netherrack");
+
+    ItemType.Typed<ItemMeta> NOTE_BLOCK = getItemType("note_block");
+
+    ItemType.Typed<ItemMeta> OAK_BOAT = getItemType("oak_boat");
+
+    ItemType.Typed<ItemMeta> OAK_BUTTON = getItemType("oak_button");
+
+    ItemType.Typed<ItemMeta> OAK_CHEST_BOAT = getItemType("oak_chest_boat");
+
+    ItemType.Typed<ItemMeta> OAK_DOOR = getItemType("oak_door");
+
+    ItemType.Typed<ItemMeta> OAK_FENCE = getItemType("oak_fence");
+
+    ItemType.Typed<ItemMeta> OAK_FENCE_GATE = getItemType("oak_fence_gate");
+
+    ItemType.Typed<ItemMeta> OAK_HANGING_SIGN = getItemType("oak_hanging_sign");
+
+    ItemType.Typed<ItemMeta> OAK_LEAVES = getItemType("oak_leaves");
+
+    ItemType.Typed<ItemMeta> OAK_LOG = getItemType("oak_log");
+
+    ItemType.Typed<ItemMeta> OAK_PLANKS = getItemType("oak_planks");
+
+    ItemType.Typed<ItemMeta> OAK_PRESSURE_PLATE = getItemType("oak_pressure_plate");
+
+    ItemType.Typed<ItemMeta> OAK_SAPLING = getItemType("oak_sapling");
+
+    ItemType.Typed<ItemMeta> OAK_SIGN = getItemType("oak_sign");
+
+    ItemType.Typed<ItemMeta> OAK_SLAB = getItemType("oak_slab");
+
+    ItemType.Typed<ItemMeta> OAK_STAIRS = getItemType("oak_stairs");
+
+    ItemType.Typed<ItemMeta> OAK_TRAPDOOR = getItemType("oak_trapdoor");
+
+    ItemType.Typed<ItemMeta> OAK_WOOD = getItemType("oak_wood");
+
+    ItemType.Typed<ItemMeta> OBSERVER = getItemType("observer");
+
+    ItemType.Typed<ItemMeta> OBSIDIAN = getItemType("obsidian");
+
+    ItemType.Typed<ItemMeta> OCELOT_SPAWN_EGG = getItemType("ocelot_spawn_egg");
+
+    ItemType.Typed<ItemMeta> OCHRE_FROGLIGHT = getItemType("ochre_froglight");
+
+    ItemType.Typed<ItemMeta> OMINOUS_BOTTLE = getItemType("ominous_bottle");
+
     ItemType.Typed<ItemMeta> OMINOUS_TRIAL_KEY = getItemType("ominous_trial_key");
-    /**
-     * ItemMeta: {@link BlockStateMeta}
-     */
-    ItemType.Typed<BlockStateMeta> VAULT = getItemType("vault");
-    /**
-     * ItemMeta: {@link OminousBottleMeta}
-     */
-    ItemType.Typed<OminousBottleMeta> OMINOUS_BOTTLE = getItemType("ominous_bottle");
+
+    ItemType.Typed<ItemMeta> OPEN_EYEBLOSSOM = getItemType("open_eyeblossom");
+
+    ItemType.Typed<ItemMeta> ORANGE_BANNER = getItemType("orange_banner");
+
+    ItemType.Typed<ItemMeta> ORANGE_BED = getItemType("orange_bed");
+
+    ItemType.Typed<ItemMeta> ORANGE_BUNDLE = getItemType("orange_bundle");
+
+    ItemType.Typed<ItemMeta> ORANGE_CANDLE = getItemType("orange_candle");
+
+    ItemType.Typed<ItemMeta> ORANGE_CARPET = getItemType("orange_carpet");
+
+    ItemType.Typed<ItemMeta> ORANGE_CONCRETE = getItemType("orange_concrete");
+
+    ItemType.Typed<ItemMeta> ORANGE_CONCRETE_POWDER = getItemType("orange_concrete_powder");
+
+    ItemType.Typed<ItemMeta> ORANGE_DYE = getItemType("orange_dye");
+
+    ItemType.Typed<ItemMeta> ORANGE_GLAZED_TERRACOTTA = getItemType("orange_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> ORANGE_SHULKER_BOX = getItemType("orange_shulker_box");
+
+    ItemType.Typed<ItemMeta> ORANGE_STAINED_GLASS = getItemType("orange_stained_glass");
+
+    ItemType.Typed<ItemMeta> ORANGE_STAINED_GLASS_PANE = getItemType("orange_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> ORANGE_TERRACOTTA = getItemType("orange_terracotta");
+
+    ItemType.Typed<ItemMeta> ORANGE_TULIP = getItemType("orange_tulip");
+
+    ItemType.Typed<ItemMeta> ORANGE_WOOL = getItemType("orange_wool");
+
+    ItemType.Typed<ItemMeta> OXEYE_DAISY = getItemType("oxeye_daisy");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_CHISELED_COPPER = getItemType("oxidized_chiseled_copper");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_COPPER = getItemType("oxidized_copper");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_COPPER_BULB = getItemType("oxidized_copper_bulb");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_COPPER_DOOR = getItemType("oxidized_copper_door");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_COPPER_GRATE = getItemType("oxidized_copper_grate");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_COPPER_TRAPDOOR = getItemType("oxidized_copper_trapdoor");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_CUT_COPPER = getItemType("oxidized_cut_copper");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_CUT_COPPER_SLAB = getItemType("oxidized_cut_copper_slab");
+
+    ItemType.Typed<ItemMeta> OXIDIZED_CUT_COPPER_STAIRS = getItemType("oxidized_cut_copper_stairs");
+
+    ItemType.Typed<ItemMeta> PACKED_ICE = getItemType("packed_ice");
+
+    ItemType.Typed<ItemMeta> PACKED_MUD = getItemType("packed_mud");
+
+    ItemType.Typed<ItemMeta> PAINTING = getItemType("painting");
+
+    ItemType.Typed<ItemMeta> PALE_HANGING_MOSS = getItemType("pale_hanging_moss");
+
+    ItemType.Typed<ItemMeta> PALE_MOSS_BLOCK = getItemType("pale_moss_block");
+
+    ItemType.Typed<ItemMeta> PALE_MOSS_CARPET = getItemType("pale_moss_carpet");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_BOAT = getItemType("pale_oak_boat");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_BUTTON = getItemType("pale_oak_button");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_CHEST_BOAT = getItemType("pale_oak_chest_boat");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_DOOR = getItemType("pale_oak_door");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_FENCE = getItemType("pale_oak_fence");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_FENCE_GATE = getItemType("pale_oak_fence_gate");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_HANGING_SIGN = getItemType("pale_oak_hanging_sign");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_LEAVES = getItemType("pale_oak_leaves");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_LOG = getItemType("pale_oak_log");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_PLANKS = getItemType("pale_oak_planks");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_PRESSURE_PLATE = getItemType("pale_oak_pressure_plate");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_SAPLING = getItemType("pale_oak_sapling");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_SIGN = getItemType("pale_oak_sign");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_SLAB = getItemType("pale_oak_slab");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_STAIRS = getItemType("pale_oak_stairs");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_TRAPDOOR = getItemType("pale_oak_trapdoor");
+
+    ItemType.Typed<ItemMeta> PALE_OAK_WOOD = getItemType("pale_oak_wood");
+
+    ItemType.Typed<ItemMeta> PANDA_SPAWN_EGG = getItemType("panda_spawn_egg");
+
+    ItemType.Typed<ItemMeta> PAPER = getItemType("paper");
+
+    ItemType.Typed<ItemMeta> PARROT_SPAWN_EGG = getItemType("parrot_spawn_egg");
+
+    ItemType.Typed<ItemMeta> PEARLESCENT_FROGLIGHT = getItemType("pearlescent_froglight");
+
+    ItemType.Typed<ItemMeta> PEONY = getItemType("peony");
+
+    ItemType.Typed<ItemMeta> PETRIFIED_OAK_SLAB = getItemType("petrified_oak_slab");
+
+    ItemType.Typed<ItemMeta> PHANTOM_MEMBRANE = getItemType("phantom_membrane");
+
+    ItemType.Typed<ItemMeta> PHANTOM_SPAWN_EGG = getItemType("phantom_spawn_egg");
+
+    ItemType.Typed<ItemMeta> PIG_SPAWN_EGG = getItemType("pig_spawn_egg");
+
+    ItemType.Typed<ItemMeta> PIGLIN_BANNER_PATTERN = getItemType("piglin_banner_pattern");
+
+    ItemType.Typed<ItemMeta> PIGLIN_BRUTE_SPAWN_EGG = getItemType("piglin_brute_spawn_egg");
+
+    ItemType.Typed<ItemMeta> PIGLIN_HEAD = getItemType("piglin_head");
+
+    ItemType.Typed<ItemMeta> PIGLIN_SPAWN_EGG = getItemType("piglin_spawn_egg");
+
+    ItemType.Typed<ItemMeta> PILLAGER_SPAWN_EGG = getItemType("pillager_spawn_egg");
+
+    ItemType.Typed<ItemMeta> PINK_BANNER = getItemType("pink_banner");
+
+    ItemType.Typed<ItemMeta> PINK_BED = getItemType("pink_bed");
+
+    ItemType.Typed<ItemMeta> PINK_BUNDLE = getItemType("pink_bundle");
+
+    ItemType.Typed<ItemMeta> PINK_CANDLE = getItemType("pink_candle");
+
+    ItemType.Typed<ItemMeta> PINK_CARPET = getItemType("pink_carpet");
+
+    ItemType.Typed<ItemMeta> PINK_CONCRETE = getItemType("pink_concrete");
+
+    ItemType.Typed<ItemMeta> PINK_CONCRETE_POWDER = getItemType("pink_concrete_powder");
+
+    ItemType.Typed<ItemMeta> PINK_DYE = getItemType("pink_dye");
+
+    ItemType.Typed<ItemMeta> PINK_GLAZED_TERRACOTTA = getItemType("pink_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> PINK_PETALS = getItemType("pink_petals");
+
+    ItemType.Typed<ItemMeta> PINK_SHULKER_BOX = getItemType("pink_shulker_box");
+
+    ItemType.Typed<ItemMeta> PINK_STAINED_GLASS = getItemType("pink_stained_glass");
+
+    ItemType.Typed<ItemMeta> PINK_STAINED_GLASS_PANE = getItemType("pink_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> PINK_TERRACOTTA = getItemType("pink_terracotta");
+
+    ItemType.Typed<ItemMeta> PINK_TULIP = getItemType("pink_tulip");
+
+    ItemType.Typed<ItemMeta> PINK_WOOL = getItemType("pink_wool");
+
+    ItemType.Typed<ItemMeta> PISTON = getItemType("piston");
+
+    ItemType.Typed<ItemMeta> PITCHER_PLANT = getItemType("pitcher_plant");
+
+    ItemType.Typed<ItemMeta> PITCHER_POD = getItemType("pitcher_pod");
+
+    ItemType.Typed<ItemMeta> PLAYER_HEAD = getItemType("player_head");
+
+    ItemType.Typed<ItemMeta> PLENTY_POTTERY_SHERD = getItemType("plenty_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> PODZOL = getItemType("podzol");
+
+    ItemType.Typed<ItemMeta> POINTED_DRIPSTONE = getItemType("pointed_dripstone");
+
+    ItemType.Typed<ItemMeta> POISONOUS_POTATO = getItemType("poisonous_potato");
+
+    ItemType.Typed<ItemMeta> POLAR_BEAR_SPAWN_EGG = getItemType("polar_bear_spawn_egg");
+
+    ItemType.Typed<ItemMeta> POLISHED_ANDESITE = getItemType("polished_andesite");
+
+    ItemType.Typed<ItemMeta> POLISHED_ANDESITE_SLAB = getItemType("polished_andesite_slab");
+
+    ItemType.Typed<ItemMeta> POLISHED_ANDESITE_STAIRS = getItemType("polished_andesite_stairs");
+
+    ItemType.Typed<ItemMeta> POLISHED_BASALT = getItemType("polished_basalt");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE = getItemType("polished_blackstone");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BRICK_SLAB = getItemType("polished_blackstone_brick_slab");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BRICK_STAIRS = getItemType("polished_blackstone_brick_stairs");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BRICK_WALL = getItemType("polished_blackstone_brick_wall");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BRICKS = getItemType("polished_blackstone_bricks");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_BUTTON = getItemType("polished_blackstone_button");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_PRESSURE_PLATE = getItemType("polished_blackstone_pressure_plate");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_SLAB = getItemType("polished_blackstone_slab");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_STAIRS = getItemType("polished_blackstone_stairs");
+
+    ItemType.Typed<ItemMeta> POLISHED_BLACKSTONE_WALL = getItemType("polished_blackstone_wall");
+
+    ItemType.Typed<ItemMeta> POLISHED_DEEPSLATE = getItemType("polished_deepslate");
+
+    ItemType.Typed<ItemMeta> POLISHED_DEEPSLATE_SLAB = getItemType("polished_deepslate_slab");
+
+    ItemType.Typed<ItemMeta> POLISHED_DEEPSLATE_STAIRS = getItemType("polished_deepslate_stairs");
+
+    ItemType.Typed<ItemMeta> POLISHED_DEEPSLATE_WALL = getItemType("polished_deepslate_wall");
+
+    ItemType.Typed<ItemMeta> POLISHED_DIORITE = getItemType("polished_diorite");
+
+    ItemType.Typed<ItemMeta> POLISHED_DIORITE_SLAB = getItemType("polished_diorite_slab");
+
+    ItemType.Typed<ItemMeta> POLISHED_DIORITE_STAIRS = getItemType("polished_diorite_stairs");
+
+    ItemType.Typed<ItemMeta> POLISHED_GRANITE = getItemType("polished_granite");
+
+    ItemType.Typed<ItemMeta> POLISHED_GRANITE_SLAB = getItemType("polished_granite_slab");
+
+    ItemType.Typed<ItemMeta> POLISHED_GRANITE_STAIRS = getItemType("polished_granite_stairs");
+
+    ItemType.Typed<ItemMeta> POLISHED_TUFF = getItemType("polished_tuff");
+
+    ItemType.Typed<ItemMeta> POLISHED_TUFF_SLAB = getItemType("polished_tuff_slab");
+
+    ItemType.Typed<ItemMeta> POLISHED_TUFF_STAIRS = getItemType("polished_tuff_stairs");
+
+    ItemType.Typed<ItemMeta> POLISHED_TUFF_WALL = getItemType("polished_tuff_wall");
+
+    ItemType.Typed<ItemMeta> POPPED_CHORUS_FRUIT = getItemType("popped_chorus_fruit");
+
+    ItemType.Typed<ItemMeta> POPPY = getItemType("poppy");
+
+    ItemType.Typed<ItemMeta> PORKCHOP = getItemType("porkchop");
+
+    ItemType.Typed<ItemMeta> POTATO = getItemType("potato");
+
+    ItemType.Typed<ItemMeta> POTION = getItemType("potion");
+
+    ItemType.Typed<ItemMeta> POWDER_SNOW_BUCKET = getItemType("powder_snow_bucket");
+
+    ItemType.Typed<ItemMeta> POWERED_RAIL = getItemType("powered_rail");
+
+    ItemType.Typed<ItemMeta> PRISMARINE = getItemType("prismarine");
+
+    ItemType.Typed<ItemMeta> PRISMARINE_BRICK_SLAB = getItemType("prismarine_brick_slab");
+
+    ItemType.Typed<ItemMeta> PRISMARINE_BRICK_STAIRS = getItemType("prismarine_brick_stairs");
+
+    ItemType.Typed<ItemMeta> PRISMARINE_BRICKS = getItemType("prismarine_bricks");
+
+    ItemType.Typed<ItemMeta> PRISMARINE_CRYSTALS = getItemType("prismarine_crystals");
+
+    ItemType.Typed<ItemMeta> PRISMARINE_SHARD = getItemType("prismarine_shard");
+
+    ItemType.Typed<ItemMeta> PRISMARINE_SLAB = getItemType("prismarine_slab");
+
+    ItemType.Typed<ItemMeta> PRISMARINE_STAIRS = getItemType("prismarine_stairs");
+
+    ItemType.Typed<ItemMeta> PRISMARINE_WALL = getItemType("prismarine_wall");
+
+    ItemType.Typed<ItemMeta> PRIZE_POTTERY_SHERD = getItemType("prize_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> PUFFERFISH = getItemType("pufferfish");
+
+    ItemType.Typed<ItemMeta> PUFFERFISH_BUCKET = getItemType("pufferfish_bucket");
+
+    ItemType.Typed<ItemMeta> PUFFERFISH_SPAWN_EGG = getItemType("pufferfish_spawn_egg");
+
+    ItemType.Typed<ItemMeta> PUMPKIN = getItemType("pumpkin");
+
+    ItemType.Typed<ItemMeta> PUMPKIN_PIE = getItemType("pumpkin_pie");
+
+    ItemType.Typed<ItemMeta> PUMPKIN_SEEDS = getItemType("pumpkin_seeds");
+
+    ItemType.Typed<ItemMeta> PURPLE_BANNER = getItemType("purple_banner");
+
+    ItemType.Typed<ItemMeta> PURPLE_BED = getItemType("purple_bed");
+
+    ItemType.Typed<ItemMeta> PURPLE_BUNDLE = getItemType("purple_bundle");
+
+    ItemType.Typed<ItemMeta> PURPLE_CANDLE = getItemType("purple_candle");
+
+    ItemType.Typed<ItemMeta> PURPLE_CARPET = getItemType("purple_carpet");
+
+    ItemType.Typed<ItemMeta> PURPLE_CONCRETE = getItemType("purple_concrete");
+
+    ItemType.Typed<ItemMeta> PURPLE_CONCRETE_POWDER = getItemType("purple_concrete_powder");
+
+    ItemType.Typed<ItemMeta> PURPLE_DYE = getItemType("purple_dye");
+
+    ItemType.Typed<ItemMeta> PURPLE_GLAZED_TERRACOTTA = getItemType("purple_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> PURPLE_SHULKER_BOX = getItemType("purple_shulker_box");
+
+    ItemType.Typed<ItemMeta> PURPLE_STAINED_GLASS = getItemType("purple_stained_glass");
+
+    ItemType.Typed<ItemMeta> PURPLE_STAINED_GLASS_PANE = getItemType("purple_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> PURPLE_TERRACOTTA = getItemType("purple_terracotta");
+
+    ItemType.Typed<ItemMeta> PURPLE_WOOL = getItemType("purple_wool");
+
+    ItemType.Typed<ItemMeta> PURPUR_BLOCK = getItemType("purpur_block");
+
+    ItemType.Typed<ItemMeta> PURPUR_PILLAR = getItemType("purpur_pillar");
+
+    ItemType.Typed<ItemMeta> PURPUR_SLAB = getItemType("purpur_slab");
+
+    ItemType.Typed<ItemMeta> PURPUR_STAIRS = getItemType("purpur_stairs");
+
+    ItemType.Typed<ItemMeta> QUARTZ = getItemType("quartz");
+
+    ItemType.Typed<ItemMeta> QUARTZ_BLOCK = getItemType("quartz_block");
+
+    ItemType.Typed<ItemMeta> QUARTZ_BRICKS = getItemType("quartz_bricks");
+
+    ItemType.Typed<ItemMeta> QUARTZ_PILLAR = getItemType("quartz_pillar");
+
+    ItemType.Typed<ItemMeta> QUARTZ_SLAB = getItemType("quartz_slab");
+
+    ItemType.Typed<ItemMeta> QUARTZ_STAIRS = getItemType("quartz_stairs");
+
+    ItemType.Typed<ItemMeta> RABBIT = getItemType("rabbit");
+
+    ItemType.Typed<ItemMeta> RABBIT_FOOT = getItemType("rabbit_foot");
+
+    ItemType.Typed<ItemMeta> RABBIT_HIDE = getItemType("rabbit_hide");
+
+    ItemType.Typed<ItemMeta> RABBIT_SPAWN_EGG = getItemType("rabbit_spawn_egg");
+
+    ItemType.Typed<ItemMeta> RABBIT_STEW = getItemType("rabbit_stew");
+
+    ItemType.Typed<ItemMeta> RAIL = getItemType("rail");
+
+    ItemType.Typed<ItemMeta> RAISER_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("raiser_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> RAVAGER_SPAWN_EGG = getItemType("ravager_spawn_egg");
+
+    ItemType.Typed<ItemMeta> RAW_COPPER = getItemType("raw_copper");
+
+    ItemType.Typed<ItemMeta> RAW_COPPER_BLOCK = getItemType("raw_copper_block");
+
+    ItemType.Typed<ItemMeta> RAW_GOLD = getItemType("raw_gold");
+
+    ItemType.Typed<ItemMeta> RAW_GOLD_BLOCK = getItemType("raw_gold_block");
+
+    ItemType.Typed<ItemMeta> RAW_IRON = getItemType("raw_iron");
+
+    ItemType.Typed<ItemMeta> RAW_IRON_BLOCK = getItemType("raw_iron_block");
+
+    ItemType.Typed<ItemMeta> RECOVERY_COMPASS = getItemType("recovery_compass");
+
+    ItemType.Typed<ItemMeta> RED_BANNER = getItemType("red_banner");
+
+    ItemType.Typed<ItemMeta> RED_BED = getItemType("red_bed");
+
+    ItemType.Typed<ItemMeta> RED_BUNDLE = getItemType("red_bundle");
+
+    ItemType.Typed<ItemMeta> RED_CANDLE = getItemType("red_candle");
+
+    ItemType.Typed<ItemMeta> RED_CARPET = getItemType("red_carpet");
+
+    ItemType.Typed<ItemMeta> RED_CONCRETE = getItemType("red_concrete");
+
+    ItemType.Typed<ItemMeta> RED_CONCRETE_POWDER = getItemType("red_concrete_powder");
+
+    ItemType.Typed<ItemMeta> RED_DYE = getItemType("red_dye");
+
+    ItemType.Typed<ItemMeta> RED_GLAZED_TERRACOTTA = getItemType("red_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> RED_MUSHROOM = getItemType("red_mushroom");
+
+    ItemType.Typed<ItemMeta> RED_MUSHROOM_BLOCK = getItemType("red_mushroom_block");
+
+    ItemType.Typed<ItemMeta> RED_NETHER_BRICK_SLAB = getItemType("red_nether_brick_slab");
+
+    ItemType.Typed<ItemMeta> RED_NETHER_BRICK_STAIRS = getItemType("red_nether_brick_stairs");
+
+    ItemType.Typed<ItemMeta> RED_NETHER_BRICK_WALL = getItemType("red_nether_brick_wall");
+
+    ItemType.Typed<ItemMeta> RED_NETHER_BRICKS = getItemType("red_nether_bricks");
+
+    ItemType.Typed<ItemMeta> RED_SAND = getItemType("red_sand");
+
+    ItemType.Typed<ItemMeta> RED_SANDSTONE = getItemType("red_sandstone");
+
+    ItemType.Typed<ItemMeta> RED_SANDSTONE_SLAB = getItemType("red_sandstone_slab");
+
+    ItemType.Typed<ItemMeta> RED_SANDSTONE_STAIRS = getItemType("red_sandstone_stairs");
+
+    ItemType.Typed<ItemMeta> RED_SANDSTONE_WALL = getItemType("red_sandstone_wall");
+
+    ItemType.Typed<ItemMeta> RED_SHULKER_BOX = getItemType("red_shulker_box");
+
+    ItemType.Typed<ItemMeta> RED_STAINED_GLASS = getItemType("red_stained_glass");
+
+    ItemType.Typed<ItemMeta> RED_STAINED_GLASS_PANE = getItemType("red_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> RED_TERRACOTTA = getItemType("red_terracotta");
+
+    ItemType.Typed<ItemMeta> RED_TULIP = getItemType("red_tulip");
+
+    ItemType.Typed<ItemMeta> RED_WOOL = getItemType("red_wool");
+
+    ItemType.Typed<ItemMeta> REDSTONE = getItemType("redstone");
+
+    ItemType.Typed<ItemMeta> REDSTONE_BLOCK = getItemType("redstone_block");
+
+    ItemType.Typed<ItemMeta> REDSTONE_LAMP = getItemType("redstone_lamp");
+
+    ItemType.Typed<ItemMeta> REDSTONE_ORE = getItemType("redstone_ore");
+
+    ItemType.Typed<ItemMeta> REDSTONE_TORCH = getItemType("redstone_torch");
+
+    ItemType.Typed<ItemMeta> REINFORCED_DEEPSLATE = getItemType("reinforced_deepslate");
+
+    ItemType.Typed<ItemMeta> REPEATER = getItemType("repeater");
+
+    ItemType.Typed<ItemMeta> REPEATING_COMMAND_BLOCK = getItemType("repeating_command_block");
+
+    ItemType.Typed<ItemMeta> RESIN_BLOCK = getItemType("resin_block");
+
+    ItemType.Typed<ItemMeta> RESIN_BRICK = getItemType("resin_brick");
+
+    ItemType.Typed<ItemMeta> RESIN_BRICK_SLAB = getItemType("resin_brick_slab");
+
+    ItemType.Typed<ItemMeta> RESIN_BRICK_STAIRS = getItemType("resin_brick_stairs");
+
+    ItemType.Typed<ItemMeta> RESIN_BRICK_WALL = getItemType("resin_brick_wall");
+
+    ItemType.Typed<ItemMeta> RESIN_BRICKS = getItemType("resin_bricks");
+
+    ItemType.Typed<ItemMeta> RESIN_CLUMP = getItemType("resin_clump");
+
+    ItemType.Typed<ItemMeta> RESPAWN_ANCHOR = getItemType("respawn_anchor");
+
+    ItemType.Typed<ItemMeta> RIB_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("rib_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> ROOTED_DIRT = getItemType("rooted_dirt");
+
+    ItemType.Typed<ItemMeta> ROSE_BUSH = getItemType("rose_bush");
+
+    ItemType.Typed<ItemMeta> ROTTEN_FLESH = getItemType("rotten_flesh");
+
+    ItemType.Typed<ItemMeta> SADDLE = getItemType("saddle");
+
+    ItemType.Typed<ItemMeta> SALMON = getItemType("salmon");
+
+    ItemType.Typed<ItemMeta> SALMON_BUCKET = getItemType("salmon_bucket");
+
+    ItemType.Typed<ItemMeta> SALMON_SPAWN_EGG = getItemType("salmon_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SAND = getItemType("sand");
+
+    ItemType.Typed<ItemMeta> SANDSTONE = getItemType("sandstone");
+
+    ItemType.Typed<ItemMeta> SANDSTONE_SLAB = getItemType("sandstone_slab");
+
+    ItemType.Typed<ItemMeta> SANDSTONE_STAIRS = getItemType("sandstone_stairs");
+
+    ItemType.Typed<ItemMeta> SANDSTONE_WALL = getItemType("sandstone_wall");
+
+    ItemType.Typed<ItemMeta> SCAFFOLDING = getItemType("scaffolding");
+
+    ItemType.Typed<ItemMeta> SCRAPE_POTTERY_SHERD = getItemType("scrape_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> SCULK = getItemType("sculk");
+
+    ItemType.Typed<ItemMeta> SCULK_CATALYST = getItemType("sculk_catalyst");
+
+    ItemType.Typed<ItemMeta> SCULK_SENSOR = getItemType("sculk_sensor");
+
+    ItemType.Typed<ItemMeta> SCULK_SHRIEKER = getItemType("sculk_shrieker");
+
+    ItemType.Typed<ItemMeta> SCULK_VEIN = getItemType("sculk_vein");
+
+    ItemType.Typed<ItemMeta> SEA_LANTERN = getItemType("sea_lantern");
+
+    ItemType.Typed<ItemMeta> SEA_PICKLE = getItemType("sea_pickle");
+
+    ItemType.Typed<ItemMeta> SEAGRASS = getItemType("seagrass");
+
+    ItemType.Typed<ItemMeta> SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("sentry_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("shaper_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> SHEAF_POTTERY_SHERD = getItemType("sheaf_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> SHEARS = getItemType("shears");
+
+    ItemType.Typed<ItemMeta> SHEEP_SPAWN_EGG = getItemType("sheep_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SHELTER_POTTERY_SHERD = getItemType("shelter_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> SHIELD = getItemType("shield");
+
+    ItemType.Typed<ItemMeta> SHORT_GRASS = getItemType("short_grass");
+
+    ItemType.Typed<ItemMeta> SHROOMLIGHT = getItemType("shroomlight");
+
+    ItemType.Typed<ItemMeta> SHULKER_BOX = getItemType("shulker_box");
+
+    ItemType.Typed<ItemMeta> SHULKER_SHELL = getItemType("shulker_shell");
+
+    ItemType.Typed<ItemMeta> SHULKER_SPAWN_EGG = getItemType("shulker_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("silence_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> SILVERFISH_SPAWN_EGG = getItemType("silverfish_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SKELETON_HORSE_SPAWN_EGG = getItemType("skeleton_horse_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SKELETON_SKULL = getItemType("skeleton_skull");
+
+    ItemType.Typed<ItemMeta> SKELETON_SPAWN_EGG = getItemType("skeleton_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SKULL_BANNER_PATTERN = getItemType("skull_banner_pattern");
+
+    ItemType.Typed<ItemMeta> SKULL_POTTERY_SHERD = getItemType("skull_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> SLIME_BALL = getItemType("slime_ball");
+
+    ItemType.Typed<ItemMeta> SLIME_BLOCK = getItemType("slime_block");
+
+    ItemType.Typed<ItemMeta> SLIME_SPAWN_EGG = getItemType("slime_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SMALL_AMETHYST_BUD = getItemType("small_amethyst_bud");
+
+    ItemType.Typed<ItemMeta> SMALL_DRIPLEAF = getItemType("small_dripleaf");
+
+    ItemType.Typed<ItemMeta> SMITHING_TABLE = getItemType("smithing_table");
+
+    ItemType.Typed<ItemMeta> SMOKER = getItemType("smoker");
+
+    ItemType.Typed<ItemMeta> SMOOTH_BASALT = getItemType("smooth_basalt");
+
+    ItemType.Typed<ItemMeta> SMOOTH_QUARTZ = getItemType("smooth_quartz");
+
+    ItemType.Typed<ItemMeta> SMOOTH_QUARTZ_SLAB = getItemType("smooth_quartz_slab");
+
+    ItemType.Typed<ItemMeta> SMOOTH_QUARTZ_STAIRS = getItemType("smooth_quartz_stairs");
+
+    ItemType.Typed<ItemMeta> SMOOTH_RED_SANDSTONE = getItemType("smooth_red_sandstone");
+
+    ItemType.Typed<ItemMeta> SMOOTH_RED_SANDSTONE_SLAB = getItemType("smooth_red_sandstone_slab");
+
+    ItemType.Typed<ItemMeta> SMOOTH_RED_SANDSTONE_STAIRS = getItemType("smooth_red_sandstone_stairs");
+
+    ItemType.Typed<ItemMeta> SMOOTH_SANDSTONE = getItemType("smooth_sandstone");
+
+    ItemType.Typed<ItemMeta> SMOOTH_SANDSTONE_SLAB = getItemType("smooth_sandstone_slab");
+
+    ItemType.Typed<ItemMeta> SMOOTH_SANDSTONE_STAIRS = getItemType("smooth_sandstone_stairs");
+
+    ItemType.Typed<ItemMeta> SMOOTH_STONE = getItemType("smooth_stone");
+
+    ItemType.Typed<ItemMeta> SMOOTH_STONE_SLAB = getItemType("smooth_stone_slab");
+
+    ItemType.Typed<ItemMeta> SNIFFER_EGG = getItemType("sniffer_egg");
+
+    ItemType.Typed<ItemMeta> SNIFFER_SPAWN_EGG = getItemType("sniffer_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SNORT_POTTERY_SHERD = getItemType("snort_pottery_sherd");
+
+    ItemType.Typed<ItemMeta> SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("snout_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> SNOW = getItemType("snow");
+
+    ItemType.Typed<ItemMeta> SNOW_BLOCK = getItemType("snow_block");
+
+    ItemType.Typed<ItemMeta> SNOW_GOLEM_SPAWN_EGG = getItemType("snow_golem_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SNOWBALL = getItemType("snowball");
+
+    ItemType.Typed<ItemMeta> SOUL_CAMPFIRE = getItemType("soul_campfire");
+
+    ItemType.Typed<ItemMeta> SOUL_LANTERN = getItemType("soul_lantern");
+
+    ItemType.Typed<ItemMeta> SOUL_SAND = getItemType("soul_sand");
+
+    ItemType.Typed<ItemMeta> SOUL_SOIL = getItemType("soul_soil");
+
+    ItemType.Typed<ItemMeta> SOUL_TORCH = getItemType("soul_torch");
+
+    ItemType.Typed<ItemMeta> SPAWNER = getItemType("spawner");
+
+    ItemType.Typed<ItemMeta> SPECTRAL_ARROW = getItemType("spectral_arrow");
+
+    ItemType.Typed<ItemMeta> SPIDER_EYE = getItemType("spider_eye");
+
+    ItemType.Typed<ItemMeta> SPIDER_SPAWN_EGG = getItemType("spider_spawn_egg");
+
+    ItemType.Typed<ItemMeta> SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("spire_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> SPLASH_POTION = getItemType("splash_potion");
+
+    ItemType.Typed<ItemMeta> SPONGE = getItemType("sponge");
+
+    ItemType.Typed<ItemMeta> SPORE_BLOSSOM = getItemType("spore_blossom");
+
+    ItemType.Typed<ItemMeta> SPRUCE_BOAT = getItemType("spruce_boat");
+
+    ItemType.Typed<ItemMeta> SPRUCE_BUTTON = getItemType("spruce_button");
+
+    ItemType.Typed<ItemMeta> SPRUCE_CHEST_BOAT = getItemType("spruce_chest_boat");
+
+    ItemType.Typed<ItemMeta> SPRUCE_DOOR = getItemType("spruce_door");
+
+    ItemType.Typed<ItemMeta> SPRUCE_FENCE = getItemType("spruce_fence");
+
+    ItemType.Typed<ItemMeta> SPRUCE_FENCE_GATE = getItemType("spruce_fence_gate");
+
+    ItemType.Typed<ItemMeta> SPRUCE_HANGING_SIGN = getItemType("spruce_hanging_sign");
+
+    ItemType.Typed<ItemMeta> SPRUCE_LEAVES = getItemType("spruce_leaves");
+
+    ItemType.Typed<ItemMeta> SPRUCE_LOG = getItemType("spruce_log");
+
+    ItemType.Typed<ItemMeta> SPRUCE_PLANKS = getItemType("spruce_planks");
+
+    ItemType.Typed<ItemMeta> SPRUCE_PRESSURE_PLATE = getItemType("spruce_pressure_plate");
+
+    ItemType.Typed<ItemMeta> SPRUCE_SAPLING = getItemType("spruce_sapling");
+
+    ItemType.Typed<ItemMeta> SPRUCE_SIGN = getItemType("spruce_sign");
+
+    ItemType.Typed<ItemMeta> SPRUCE_SLAB = getItemType("spruce_slab");
+
+    ItemType.Typed<ItemMeta> SPRUCE_STAIRS = getItemType("spruce_stairs");
+
+    ItemType.Typed<ItemMeta> SPRUCE_TRAPDOOR = getItemType("spruce_trapdoor");
+
+    ItemType.Typed<ItemMeta> SPRUCE_WOOD = getItemType("spruce_wood");
+
+    ItemType.Typed<ItemMeta> SPYGLASS = getItemType("spyglass");
+
+    ItemType.Typed<ItemMeta> SQUID_SPAWN_EGG = getItemType("squid_spawn_egg");
+
+    ItemType.Typed<ItemMeta> STICK = getItemType("stick");
+
+    ItemType.Typed<ItemMeta> STICKY_PISTON = getItemType("sticky_piston");
+
+    ItemType.Typed<ItemMeta> STONE = getItemType("stone");
+
+    ItemType.Typed<ItemMeta> STONE_AXE = getItemType("stone_axe");
+
+    ItemType.Typed<ItemMeta> STONE_BRICK_SLAB = getItemType("stone_brick_slab");
+
+    ItemType.Typed<ItemMeta> STONE_BRICK_STAIRS = getItemType("stone_brick_stairs");
+
+    ItemType.Typed<ItemMeta> STONE_BRICK_WALL = getItemType("stone_brick_wall");
+
+    ItemType.Typed<ItemMeta> STONE_BRICKS = getItemType("stone_bricks");
+
+    ItemType.Typed<ItemMeta> STONE_BUTTON = getItemType("stone_button");
+
+    ItemType.Typed<ItemMeta> STONE_HOE = getItemType("stone_hoe");
+
+    ItemType.Typed<ItemMeta> STONE_PICKAXE = getItemType("stone_pickaxe");
+
+    ItemType.Typed<ItemMeta> STONE_PRESSURE_PLATE = getItemType("stone_pressure_plate");
+
+    ItemType.Typed<ItemMeta> STONE_SHOVEL = getItemType("stone_shovel");
+
+    ItemType.Typed<ItemMeta> STONE_SLAB = getItemType("stone_slab");
+
+    ItemType.Typed<ItemMeta> STONE_STAIRS = getItemType("stone_stairs");
+
+    ItemType.Typed<ItemMeta> STONE_SWORD = getItemType("stone_sword");
+
+    ItemType.Typed<ItemMeta> STONECUTTER = getItemType("stonecutter");
+
+    ItemType.Typed<ItemMeta> STRAY_SPAWN_EGG = getItemType("stray_spawn_egg");
+
+    ItemType.Typed<ItemMeta> STRIDER_SPAWN_EGG = getItemType("strider_spawn_egg");
+
+    ItemType.Typed<ItemMeta> STRING = getItemType("string");
+
+    ItemType.Typed<ItemMeta> STRIPPED_ACACIA_LOG = getItemType("stripped_acacia_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_ACACIA_WOOD = getItemType("stripped_acacia_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_BAMBOO_BLOCK = getItemType("stripped_bamboo_block");
+
+    ItemType.Typed<ItemMeta> STRIPPED_BIRCH_LOG = getItemType("stripped_birch_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_BIRCH_WOOD = getItemType("stripped_birch_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_CHERRY_LOG = getItemType("stripped_cherry_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_CHERRY_WOOD = getItemType("stripped_cherry_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_CRIMSON_HYPHAE = getItemType("stripped_crimson_hyphae");
+
+    ItemType.Typed<ItemMeta> STRIPPED_CRIMSON_STEM = getItemType("stripped_crimson_stem");
+
+    ItemType.Typed<ItemMeta> STRIPPED_DARK_OAK_LOG = getItemType("stripped_dark_oak_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_DARK_OAK_WOOD = getItemType("stripped_dark_oak_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_JUNGLE_LOG = getItemType("stripped_jungle_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_JUNGLE_WOOD = getItemType("stripped_jungle_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_MANGROVE_LOG = getItemType("stripped_mangrove_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_MANGROVE_WOOD = getItemType("stripped_mangrove_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_OAK_LOG = getItemType("stripped_oak_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_OAK_WOOD = getItemType("stripped_oak_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_PALE_OAK_LOG = getItemType("stripped_pale_oak_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_PALE_OAK_WOOD = getItemType("stripped_pale_oak_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_SPRUCE_LOG = getItemType("stripped_spruce_log");
+
+    ItemType.Typed<ItemMeta> STRIPPED_SPRUCE_WOOD = getItemType("stripped_spruce_wood");
+
+    ItemType.Typed<ItemMeta> STRIPPED_WARPED_HYPHAE = getItemType("stripped_warped_hyphae");
+
+    ItemType.Typed<ItemMeta> STRIPPED_WARPED_STEM = getItemType("stripped_warped_stem");
+
+    ItemType.Typed<ItemMeta> STRUCTURE_BLOCK = getItemType("structure_block");
+
+    ItemType.Typed<ItemMeta> STRUCTURE_VOID = getItemType("structure_void");
+
+    ItemType.Typed<ItemMeta> SUGAR = getItemType("sugar");
+
+    ItemType.Typed<ItemMeta> SUGAR_CANE = getItemType("sugar_cane");
+
+    ItemType.Typed<ItemMeta> SUNFLOWER = getItemType("sunflower");
+
+    ItemType.Typed<ItemMeta> SUSPICIOUS_GRAVEL = getItemType("suspicious_gravel");
+
+    ItemType.Typed<ItemMeta> SUSPICIOUS_SAND = getItemType("suspicious_sand");
+
+    ItemType.Typed<ItemMeta> SUSPICIOUS_STEW = getItemType("suspicious_stew");
+
+    ItemType.Typed<ItemMeta> SWEET_BERRIES = getItemType("sweet_berries");
+
+    ItemType.Typed<ItemMeta> TADPOLE_BUCKET = getItemType("tadpole_bucket");
+
+    ItemType.Typed<ItemMeta> TADPOLE_SPAWN_EGG = getItemType("tadpole_spawn_egg");
+
+    ItemType.Typed<ItemMeta> TALL_GRASS = getItemType("tall_grass");
+
+    ItemType.Typed<ItemMeta> TARGET = getItemType("target");
+
+    ItemType.Typed<ItemMeta> TERRACOTTA = getItemType("terracotta");
+
+    ItemType.Typed<ItemMeta> TIDE_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("tide_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> TINTED_GLASS = getItemType("tinted_glass");
+
+    ItemType.Typed<ItemMeta> TIPPED_ARROW = getItemType("tipped_arrow");
+
+    ItemType.Typed<ItemMeta> TNT = getItemType("tnt");
+
+    ItemType.Typed<ItemMeta> TNT_MINECART = getItemType("tnt_minecart");
+
+    ItemType.Typed<ItemMeta> TORCH = getItemType("torch");
+
+    ItemType.Typed<ItemMeta> TORCHFLOWER = getItemType("torchflower");
+
+    ItemType.Typed<ItemMeta> TORCHFLOWER_SEEDS = getItemType("torchflower_seeds");
+
+    ItemType.Typed<ItemMeta> TOTEM_OF_UNDYING = getItemType("totem_of_undying");
+
+    ItemType.Typed<ItemMeta> TRADER_LLAMA_SPAWN_EGG = getItemType("trader_llama_spawn_egg");
+
+    ItemType.Typed<ItemMeta> TRAPPED_CHEST = getItemType("trapped_chest");
+
+    ItemType.Typed<ItemMeta> TRIAL_KEY = getItemType("trial_key");
+
+    ItemType.Typed<ItemMeta> TRIAL_SPAWNER = getItemType("trial_spawner");
+
+    ItemType.Typed<ItemMeta> TRIDENT = getItemType("trident");
+
+    ItemType.Typed<ItemMeta> TRIPWIRE_HOOK = getItemType("tripwire_hook");
+
+    ItemType.Typed<ItemMeta> TROPICAL_FISH = getItemType("tropical_fish");
+
+    ItemType.Typed<ItemMeta> TROPICAL_FISH_BUCKET = getItemType("tropical_fish_bucket");
+
+    ItemType.Typed<ItemMeta> TROPICAL_FISH_SPAWN_EGG = getItemType("tropical_fish_spawn_egg");
+
+    ItemType.Typed<ItemMeta> TUBE_CORAL = getItemType("tube_coral");
+
+    ItemType.Typed<ItemMeta> TUBE_CORAL_BLOCK = getItemType("tube_coral_block");
+
+    ItemType.Typed<ItemMeta> TUBE_CORAL_FAN = getItemType("tube_coral_fan");
+
+    ItemType.Typed<ItemMeta> TUFF = getItemType("tuff");
+
+    ItemType.Typed<ItemMeta> TUFF_BRICK_SLAB = getItemType("tuff_brick_slab");
+
+    ItemType.Typed<ItemMeta> TUFF_BRICK_STAIRS = getItemType("tuff_brick_stairs");
+
+    ItemType.Typed<ItemMeta> TUFF_BRICK_WALL = getItemType("tuff_brick_wall");
+
+    ItemType.Typed<ItemMeta> TUFF_BRICKS = getItemType("tuff_bricks");
+
+    ItemType.Typed<ItemMeta> TUFF_SLAB = getItemType("tuff_slab");
+
+    ItemType.Typed<ItemMeta> TUFF_STAIRS = getItemType("tuff_stairs");
+
+    ItemType.Typed<ItemMeta> TUFF_WALL = getItemType("tuff_wall");
+
+    ItemType.Typed<ItemMeta> TURTLE_EGG = getItemType("turtle_egg");
+
+    ItemType.Typed<ItemMeta> TURTLE_HELMET = getItemType("turtle_helmet");
+
+    ItemType.Typed<ItemMeta> TURTLE_SCUTE = getItemType("turtle_scute");
+
+    ItemType.Typed<ItemMeta> TURTLE_SPAWN_EGG = getItemType("turtle_spawn_egg");
+
+    ItemType.Typed<ItemMeta> TWISTING_VINES = getItemType("twisting_vines");
+
+    ItemType.Typed<ItemMeta> VAULT = getItemType("vault");
+
+    ItemType.Typed<ItemMeta> VERDANT_FROGLIGHT = getItemType("verdant_froglight");
+
+    ItemType.Typed<ItemMeta> VEX_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("vex_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> VEX_SPAWN_EGG = getItemType("vex_spawn_egg");
+
+    ItemType.Typed<ItemMeta> VILLAGER_SPAWN_EGG = getItemType("villager_spawn_egg");
+
+    ItemType.Typed<ItemMeta> VINDICATOR_SPAWN_EGG = getItemType("vindicator_spawn_egg");
+
+    ItemType.Typed<ItemMeta> VINE = getItemType("vine");
+
+    ItemType.Typed<ItemMeta> WANDERING_TRADER_SPAWN_EGG = getItemType("wandering_trader_spawn_egg");
+
+    ItemType.Typed<ItemMeta> WARD_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("ward_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> WARDEN_SPAWN_EGG = getItemType("warden_spawn_egg");
+
+    ItemType.Typed<ItemMeta> WARPED_BUTTON = getItemType("warped_button");
+
+    ItemType.Typed<ItemMeta> WARPED_DOOR = getItemType("warped_door");
+
+    ItemType.Typed<ItemMeta> WARPED_FENCE = getItemType("warped_fence");
+
+    ItemType.Typed<ItemMeta> WARPED_FENCE_GATE = getItemType("warped_fence_gate");
+
+    ItemType.Typed<ItemMeta> WARPED_FUNGUS = getItemType("warped_fungus");
+
+    ItemType.Typed<ItemMeta> WARPED_FUNGUS_ON_A_STICK = getItemType("warped_fungus_on_a_stick");
+
+    ItemType.Typed<ItemMeta> WARPED_HANGING_SIGN = getItemType("warped_hanging_sign");
+
+    ItemType.Typed<ItemMeta> WARPED_HYPHAE = getItemType("warped_hyphae");
+
+    ItemType.Typed<ItemMeta> WARPED_NYLIUM = getItemType("warped_nylium");
+
+    ItemType.Typed<ItemMeta> WARPED_PLANKS = getItemType("warped_planks");
+
+    ItemType.Typed<ItemMeta> WARPED_PRESSURE_PLATE = getItemType("warped_pressure_plate");
+
+    ItemType.Typed<ItemMeta> WARPED_ROOTS = getItemType("warped_roots");
+
+    ItemType.Typed<ItemMeta> WARPED_SIGN = getItemType("warped_sign");
+
+    ItemType.Typed<ItemMeta> WARPED_SLAB = getItemType("warped_slab");
+
+    ItemType.Typed<ItemMeta> WARPED_STAIRS = getItemType("warped_stairs");
+
+    ItemType.Typed<ItemMeta> WARPED_STEM = getItemType("warped_stem");
+
+    ItemType.Typed<ItemMeta> WARPED_TRAPDOOR = getItemType("warped_trapdoor");
+
+    ItemType.Typed<ItemMeta> WARPED_WART_BLOCK = getItemType("warped_wart_block");
+
+    ItemType.Typed<ItemMeta> WATER_BUCKET = getItemType("water_bucket");
+
+    ItemType.Typed<ItemMeta> WAXED_CHISELED_COPPER = getItemType("waxed_chiseled_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_COPPER_BLOCK = getItemType("waxed_copper_block");
+
+    ItemType.Typed<ItemMeta> WAXED_COPPER_BULB = getItemType("waxed_copper_bulb");
+
+    ItemType.Typed<ItemMeta> WAXED_COPPER_DOOR = getItemType("waxed_copper_door");
+
+    ItemType.Typed<ItemMeta> WAXED_COPPER_GRATE = getItemType("waxed_copper_grate");
+
+    ItemType.Typed<ItemMeta> WAXED_COPPER_TRAPDOOR = getItemType("waxed_copper_trapdoor");
+
+    ItemType.Typed<ItemMeta> WAXED_CUT_COPPER = getItemType("waxed_cut_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_CUT_COPPER_SLAB = getItemType("waxed_cut_copper_slab");
+
+    ItemType.Typed<ItemMeta> WAXED_CUT_COPPER_STAIRS = getItemType("waxed_cut_copper_stairs");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_CHISELED_COPPER = getItemType("waxed_exposed_chiseled_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER = getItemType("waxed_exposed_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER_BULB = getItemType("waxed_exposed_copper_bulb");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER_DOOR = getItemType("waxed_exposed_copper_door");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER_GRATE = getItemType("waxed_exposed_copper_grate");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_COPPER_TRAPDOOR = getItemType("waxed_exposed_copper_trapdoor");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_CUT_COPPER = getItemType("waxed_exposed_cut_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_CUT_COPPER_SLAB = getItemType("waxed_exposed_cut_copper_slab");
+
+    ItemType.Typed<ItemMeta> WAXED_EXPOSED_CUT_COPPER_STAIRS = getItemType("waxed_exposed_cut_copper_stairs");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_CHISELED_COPPER = getItemType("waxed_oxidized_chiseled_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER = getItemType("waxed_oxidized_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER_BULB = getItemType("waxed_oxidized_copper_bulb");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER_DOOR = getItemType("waxed_oxidized_copper_door");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER_GRATE = getItemType("waxed_oxidized_copper_grate");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_COPPER_TRAPDOOR = getItemType("waxed_oxidized_copper_trapdoor");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_CUT_COPPER = getItemType("waxed_oxidized_cut_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_CUT_COPPER_SLAB = getItemType("waxed_oxidized_cut_copper_slab");
+
+    ItemType.Typed<ItemMeta> WAXED_OXIDIZED_CUT_COPPER_STAIRS = getItemType("waxed_oxidized_cut_copper_stairs");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_CHISELED_COPPER = getItemType("waxed_weathered_chiseled_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER = getItemType("waxed_weathered_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER_BULB = getItemType("waxed_weathered_copper_bulb");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER_DOOR = getItemType("waxed_weathered_copper_door");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER_GRATE = getItemType("waxed_weathered_copper_grate");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_COPPER_TRAPDOOR = getItemType("waxed_weathered_copper_trapdoor");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_CUT_COPPER = getItemType("waxed_weathered_cut_copper");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_CUT_COPPER_SLAB = getItemType("waxed_weathered_cut_copper_slab");
+
+    ItemType.Typed<ItemMeta> WAXED_WEATHERED_CUT_COPPER_STAIRS = getItemType("waxed_weathered_cut_copper_stairs");
+
+    ItemType.Typed<ItemMeta> WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("wayfinder_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> WEATHERED_CHISELED_COPPER = getItemType("weathered_chiseled_copper");
+
+    ItemType.Typed<ItemMeta> WEATHERED_COPPER = getItemType("weathered_copper");
+
+    ItemType.Typed<ItemMeta> WEATHERED_COPPER_BULB = getItemType("weathered_copper_bulb");
+
+    ItemType.Typed<ItemMeta> WEATHERED_COPPER_DOOR = getItemType("weathered_copper_door");
+
+    ItemType.Typed<ItemMeta> WEATHERED_COPPER_GRATE = getItemType("weathered_copper_grate");
+
+    ItemType.Typed<ItemMeta> WEATHERED_COPPER_TRAPDOOR = getItemType("weathered_copper_trapdoor");
+
+    ItemType.Typed<ItemMeta> WEATHERED_CUT_COPPER = getItemType("weathered_cut_copper");
+
+    ItemType.Typed<ItemMeta> WEATHERED_CUT_COPPER_SLAB = getItemType("weathered_cut_copper_slab");
+
+    ItemType.Typed<ItemMeta> WEATHERED_CUT_COPPER_STAIRS = getItemType("weathered_cut_copper_stairs");
+
+    ItemType.Typed<ItemMeta> WEEPING_VINES = getItemType("weeping_vines");
+
+    ItemType.Typed<ItemMeta> WET_SPONGE = getItemType("wet_sponge");
+
+    ItemType.Typed<ItemMeta> WHEAT = getItemType("wheat");
+
+    ItemType.Typed<ItemMeta> WHEAT_SEEDS = getItemType("wheat_seeds");
+
+    ItemType.Typed<ItemMeta> WHITE_BANNER = getItemType("white_banner");
+
+    ItemType.Typed<ItemMeta> WHITE_BED = getItemType("white_bed");
+
+    ItemType.Typed<ItemMeta> WHITE_BUNDLE = getItemType("white_bundle");
+
+    ItemType.Typed<ItemMeta> WHITE_CANDLE = getItemType("white_candle");
+
+    ItemType.Typed<ItemMeta> WHITE_CARPET = getItemType("white_carpet");
+
+    ItemType.Typed<ItemMeta> WHITE_CONCRETE = getItemType("white_concrete");
+
+    ItemType.Typed<ItemMeta> WHITE_CONCRETE_POWDER = getItemType("white_concrete_powder");
+
+    ItemType.Typed<ItemMeta> WHITE_DYE = getItemType("white_dye");
+
+    ItemType.Typed<ItemMeta> WHITE_GLAZED_TERRACOTTA = getItemType("white_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> WHITE_SHULKER_BOX = getItemType("white_shulker_box");
+
+    ItemType.Typed<ItemMeta> WHITE_STAINED_GLASS = getItemType("white_stained_glass");
+
+    ItemType.Typed<ItemMeta> WHITE_STAINED_GLASS_PANE = getItemType("white_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> WHITE_TERRACOTTA = getItemType("white_terracotta");
+
+    ItemType.Typed<ItemMeta> WHITE_TULIP = getItemType("white_tulip");
+
+    ItemType.Typed<ItemMeta> WHITE_WOOL = getItemType("white_wool");
+
+    ItemType.Typed<ItemMeta> WILD_ARMOR_TRIM_SMITHING_TEMPLATE = getItemType("wild_armor_trim_smithing_template");
+
+    ItemType.Typed<ItemMeta> WIND_CHARGE = getItemType("wind_charge");
+
+    ItemType.Typed<ItemMeta> WITCH_SPAWN_EGG = getItemType("witch_spawn_egg");
+
+    ItemType.Typed<ItemMeta> WITHER_ROSE = getItemType("wither_rose");
+
+    ItemType.Typed<ItemMeta> WITHER_SKELETON_SKULL = getItemType("wither_skeleton_skull");
+
+    ItemType.Typed<ItemMeta> WITHER_SKELETON_SPAWN_EGG = getItemType("wither_skeleton_spawn_egg");
+
+    ItemType.Typed<ItemMeta> WITHER_SPAWN_EGG = getItemType("wither_spawn_egg");
+
+    ItemType.Typed<ItemMeta> WOLF_ARMOR = getItemType("wolf_armor");
+
+    ItemType.Typed<ItemMeta> WOLF_SPAWN_EGG = getItemType("wolf_spawn_egg");
+
+    ItemType.Typed<ItemMeta> WOODEN_AXE = getItemType("wooden_axe");
+
+    ItemType.Typed<ItemMeta> WOODEN_HOE = getItemType("wooden_hoe");
+
+    ItemType.Typed<ItemMeta> WOODEN_PICKAXE = getItemType("wooden_pickaxe");
+
+    ItemType.Typed<ItemMeta> WOODEN_SHOVEL = getItemType("wooden_shovel");
+
+    ItemType.Typed<ItemMeta> WOODEN_SWORD = getItemType("wooden_sword");
+
+    ItemType.Typed<ItemMeta> WRITABLE_BOOK = getItemType("writable_book");
+
+    ItemType.Typed<ItemMeta> WRITTEN_BOOK = getItemType("written_book");
+
+    ItemType.Typed<ItemMeta> YELLOW_BANNER = getItemType("yellow_banner");
+
+    ItemType.Typed<ItemMeta> YELLOW_BED = getItemType("yellow_bed");
+
+    ItemType.Typed<ItemMeta> YELLOW_BUNDLE = getItemType("yellow_bundle");
+
+    ItemType.Typed<ItemMeta> YELLOW_CANDLE = getItemType("yellow_candle");
+
+    ItemType.Typed<ItemMeta> YELLOW_CARPET = getItemType("yellow_carpet");
+
+    ItemType.Typed<ItemMeta> YELLOW_CONCRETE = getItemType("yellow_concrete");
+
+    ItemType.Typed<ItemMeta> YELLOW_CONCRETE_POWDER = getItemType("yellow_concrete_powder");
+
+    ItemType.Typed<ItemMeta> YELLOW_DYE = getItemType("yellow_dye");
+
+    ItemType.Typed<ItemMeta> YELLOW_GLAZED_TERRACOTTA = getItemType("yellow_glazed_terracotta");
+
+    ItemType.Typed<ItemMeta> YELLOW_SHULKER_BOX = getItemType("yellow_shulker_box");
+
+    ItemType.Typed<ItemMeta> YELLOW_STAINED_GLASS = getItemType("yellow_stained_glass");
+
+    ItemType.Typed<ItemMeta> YELLOW_STAINED_GLASS_PANE = getItemType("yellow_stained_glass_pane");
+
+    ItemType.Typed<ItemMeta> YELLOW_TERRACOTTA = getItemType("yellow_terracotta");
+
+    ItemType.Typed<ItemMeta> YELLOW_WOOL = getItemType("yellow_wool");
+
+    ItemType.Typed<ItemMeta> ZOGLIN_SPAWN_EGG = getItemType("zoglin_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ZOMBIE_HEAD = getItemType("zombie_head");
+
+    ItemType.Typed<ItemMeta> ZOMBIE_HORSE_SPAWN_EGG = getItemType("zombie_horse_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ZOMBIE_SPAWN_EGG = getItemType("zombie_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ZOMBIE_VILLAGER_SPAWN_EGG = getItemType("zombie_villager_spawn_egg");
+
+    ItemType.Typed<ItemMeta> ZOMBIFIED_PIGLIN_SPAWN_EGG = getItemType("zombified_piglin_spawn_egg");
+    // End generate - ItemType
     //</editor-fold>
 
     @NotNull
@@ -2401,7 +3041,7 @@ public interface ItemType extends Keyed, Translatable, net.kyori.adventure.trans
      * Get the {@link CreativeCategory} to which this item type belongs.
      *
      * @return the creative category. null if does not belong to a category
-     * @deprecated creative categories no longer exist on the server
+     <!-- * @deprecated use #getCreativeCategories() -->
      */
     @Nullable
     @Deprecated(since = "1.20.6")
diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
index 0910dd287d..dae93515d3 100644
--- a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
+++ b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
@@ -14,50 +14,30 @@ import org.jetbrains.annotations.NotNull;
  */
 public interface TrimMaterial extends Keyed, Translatable {
 
-    /**
-     * {@link Material#QUARTZ}.
-     */
-    public static final TrimMaterial QUARTZ = getTrimMaterial("quartz");
-    /**
-     * {@link Material#IRON_INGOT}.
-     */
-    public static final TrimMaterial IRON = getTrimMaterial("iron");
-    /**
-     * {@link Material#NETHERITE_INGOT}.
-     */
-    public static final TrimMaterial NETHERITE = getTrimMaterial("netherite");
-    /**
-     * {@link Material#REDSTONE}.
-     */
-    public static final TrimMaterial REDSTONE = getTrimMaterial("redstone");
-    /**
-     * {@link Material#COPPER_INGOT}.
-     */
-    public static final TrimMaterial COPPER = getTrimMaterial("copper");
-    /**
-     * {@link Material#GOLD_INGOT}.
-     */
-    public static final TrimMaterial GOLD = getTrimMaterial("gold");
-    /**
-     * {@link Material#EMERALD}.
-     */
-    public static final TrimMaterial EMERALD = getTrimMaterial("emerald");
-    /**
-     * {@link Material#DIAMOND}.
-     */
-    public static final TrimMaterial DIAMOND = getTrimMaterial("diamond");
-    /**
-     * {@link Material#LAPIS_LAZULI}.
-     */
-    public static final TrimMaterial LAPIS = getTrimMaterial("lapis");
-    /**
-     * {@link Material#AMETHYST_SHARD}.
-     */
-    public static final TrimMaterial AMETHYST = getTrimMaterial("amethyst");
-    /**
-     * {@link Material#RESIN_BRICK}.
-     */
-    public static final TrimMaterial RESIN = getTrimMaterial("resin");
+    // Start generate - TrimMaterial
+    // @GeneratedFrom 1.21.4
+    TrimMaterial AMETHYST = getTrimMaterial("amethyst");
+
+    TrimMaterial COPPER = getTrimMaterial("copper");
+
+    TrimMaterial DIAMOND = getTrimMaterial("diamond");
+
+    TrimMaterial EMERALD = getTrimMaterial("emerald");
+
+    TrimMaterial GOLD = getTrimMaterial("gold");
+
+    TrimMaterial IRON = getTrimMaterial("iron");
+
+    TrimMaterial LAPIS = getTrimMaterial("lapis");
+
+    TrimMaterial NETHERITE = getTrimMaterial("netherite");
+
+    TrimMaterial QUARTZ = getTrimMaterial("quartz");
+
+    TrimMaterial REDSTONE = getTrimMaterial("redstone");
+
+    TrimMaterial RESIN = getTrimMaterial("resin");
+    // End generate - TrimMaterial
 
     @NotNull
     private static TrimMaterial getTrimMaterial(@NotNull String key) {
@@ -99,6 +79,5 @@ public interface TrimMaterial extends Keyed, Translatable {
     default net.kyori.adventure.key.@org.jetbrains.annotations.NotNull Key key() {
         return org.bukkit.Keyed.super.key();
     }
-
     // Paper end - Registry#getKey
 }
diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java
index 9360e27b0b..a2807a865d 100644
--- a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java
+++ b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java
@@ -14,78 +14,44 @@ import org.jetbrains.annotations.NotNull;
  */
 public interface TrimPattern extends Keyed, Translatable {
 
-    /**
-     * {@link Material#SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern SENTRY = getTrimPattern("sentry");
-    /**
-     * {@link Material#DUNE_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern DUNE = getTrimPattern("dune");
-    /**
-     * {@link Material#COAST_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern COAST = getTrimPattern("coast");
-    /**
-     * {@link Material#WILD_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern WILD = getTrimPattern("wild");
-    /**
-     * {@link Material#WARD_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern WARD = getTrimPattern("ward");
-    /**
-     * {@link Material#EYE_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern EYE = getTrimPattern("eye");
-    /**
-     * {@link Material#VEX_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern VEX = getTrimPattern("vex");
-    /**
-     * {@link Material#TIDE_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern TIDE = getTrimPattern("tide");
-    /**
-     * {@link Material#SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern SNOUT = getTrimPattern("snout");
-    /**
-     * {@link Material#RIB_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern RIB = getTrimPattern("rib");
-    /**
-     * {@link Material#SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern SPIRE = getTrimPattern("spire");
-    /**
-     * {@link Material#WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern WAYFINDER = getTrimPattern("wayfinder");
-    /**
-     * {@link Material#SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern SHAPER = getTrimPattern("shaper");
-    /**
-     * {@link Material#SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern SILENCE = getTrimPattern("silence");
-    /**
-     * {@link Material#RAISER_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern RAISER = getTrimPattern("raiser");
-    /**
-     * {@link Material#HOST_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern HOST = getTrimPattern("host");
-    /**
-     * {@link Material#FLOW_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern FLOW = getTrimPattern("flow");
-    /**
-     * {@link Material#BOLT_ARMOR_TRIM_SMITHING_TEMPLATE}.
-     */
-    public static final TrimPattern BOLT = getTrimPattern("bolt");
+    // Start generate - TrimPattern
+    // @GeneratedFrom 1.21.4
+    TrimPattern BOLT = getTrimPattern("bolt");
+
+    TrimPattern COAST = getTrimPattern("coast");
+
+    TrimPattern DUNE = getTrimPattern("dune");
+
+    TrimPattern EYE = getTrimPattern("eye");
+
+    TrimPattern FLOW = getTrimPattern("flow");
+
+    TrimPattern HOST = getTrimPattern("host");
+
+    TrimPattern RAISER = getTrimPattern("raiser");
+
+    TrimPattern RIB = getTrimPattern("rib");
+
+    TrimPattern SENTRY = getTrimPattern("sentry");
+
+    TrimPattern SHAPER = getTrimPattern("shaper");
+
+    TrimPattern SILENCE = getTrimPattern("silence");
+
+    TrimPattern SNOUT = getTrimPattern("snout");
+
+    TrimPattern SPIRE = getTrimPattern("spire");
+
+    TrimPattern TIDE = getTrimPattern("tide");
+
+    TrimPattern VEX = getTrimPattern("vex");
+
+    TrimPattern WARD = getTrimPattern("ward");
+
+    TrimPattern WAYFINDER = getTrimPattern("wayfinder");
+
+    TrimPattern WILD = getTrimPattern("wild");
+    // End generate - TrimPattern
 
     @NotNull
     private static TrimPattern getTrimPattern(@NotNull String key) {
diff --git a/paper-api/src/main/java/org/bukkit/inventory/recipe/CookingBookCategory.java b/paper-api/src/main/java/org/bukkit/inventory/recipe/CookingBookCategory.java
index 9990a7abf8..c6b2403c09 100644
--- a/paper-api/src/main/java/org/bukkit/inventory/recipe/CookingBookCategory.java
+++ b/paper-api/src/main/java/org/bukkit/inventory/recipe/CookingBookCategory.java
@@ -5,7 +5,10 @@ package org.bukkit.inventory.recipe;
  */
 public enum CookingBookCategory {
 
+    // Start generate - CookingBookCategory
+    // @GeneratedFrom 1.21.4
     FOOD,
     BLOCKS,
     MISC;
+    // End generate - CookingBookCategory
 }
diff --git a/paper-api/src/main/java/org/bukkit/inventory/recipe/CraftingBookCategory.java b/paper-api/src/main/java/org/bukkit/inventory/recipe/CraftingBookCategory.java
index 09a6a1b9b9..e6028649e9 100644
--- a/paper-api/src/main/java/org/bukkit/inventory/recipe/CraftingBookCategory.java
+++ b/paper-api/src/main/java/org/bukkit/inventory/recipe/CraftingBookCategory.java
@@ -5,8 +5,11 @@ package org.bukkit.inventory.recipe;
  */
 public enum CraftingBookCategory {
 
+    // Start generate - CraftingBookCategory
+    // @GeneratedFrom 1.21.4
     BUILDING,
     REDSTONE,
     EQUIPMENT,
     MISC;
+    // End generate - CraftingBookCategory
 }
diff --git a/paper-api/src/main/java/org/bukkit/map/MapCursor.java b/paper-api/src/main/java/org/bukkit/map/MapCursor.java
index 7f5682c80f..d9dfd90d11 100644
--- a/paper-api/src/main/java/org/bukkit/map/MapCursor.java
+++ b/paper-api/src/main/java/org/bukkit/map/MapCursor.java
@@ -7,6 +7,7 @@ import org.bukkit.Keyed;
 import org.bukkit.NamespacedKey;
 import org.bukkit.Registry;
 import org.bukkit.util.OldEnum;
+import org.jetbrains.annotations.ApiStatus;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -287,56 +288,79 @@ public final class MapCursor {
      */
     public interface Type extends OldEnum<Type>, Keyed {
 
-        Type PLAYER = getType("player");
-        Type FRAME = getType("frame");
-        Type RED_MARKER = getType("red_marker");
-        Type BLUE_MARKER = getType("blue_marker");
-        Type TARGET_X = getType("target_x");
-        Type TARGET_POINT = getType("target_point");
-        Type PLAYER_OFF_MAP = getType("player_off_map");
-        Type PLAYER_OFF_LIMITS = getType("player_off_limits");
-        Type MANSION = getType("mansion");
-        Type MONUMENT = getType("monument");
-        Type BANNER_WHITE = getType("banner_white");
-        Type BANNER_ORANGE = getType("banner_orange");
-        Type BANNER_MAGENTA = getType("banner_magenta");
-        Type BANNER_LIGHT_BLUE = getType("banner_light_blue");
-        Type BANNER_YELLOW = getType("banner_yellow");
-        Type BANNER_LIME = getType("banner_lime");
-        Type BANNER_PINK = getType("banner_pink");
-        Type BANNER_GRAY = getType("banner_gray");
-        Type BANNER_LIGHT_GRAY = getType("banner_light_gray");
-        Type BANNER_CYAN = getType("banner_cyan");
-        Type BANNER_PURPLE = getType("banner_purple");
-        Type BANNER_BLUE = getType("banner_blue");
-        Type BANNER_BROWN = getType("banner_brown");
-        Type BANNER_GREEN = getType("banner_green");
-        Type BANNER_RED = getType("banner_red");
+        // Start generate - MapCursorType
+        // @GeneratedFrom 1.21.4
         Type BANNER_BLACK = getType("banner_black");
-        Type RED_X = getType("red_x");
-        @org.bukkit.MinecraftExperimental(org.bukkit.MinecraftExperimental.Requires.TRADE_REBALANCE) // Paper - add missing annotation
-        @org.jetbrains.annotations.ApiStatus.Experimental // Paper - add missing annotation
-        Type VILLAGE_DESERT = getType("village_desert");
-        @org.bukkit.MinecraftExperimental(org.bukkit.MinecraftExperimental.Requires.TRADE_REBALANCE) // Paper - add missing annotation
-        @org.jetbrains.annotations.ApiStatus.Experimental // Paper - add missing annotation
-        Type VILLAGE_PLAINS = getType("village_plains");
-        @org.bukkit.MinecraftExperimental(org.bukkit.MinecraftExperimental.Requires.TRADE_REBALANCE) // Paper - add missing annotation
-        @org.jetbrains.annotations.ApiStatus.Experimental // Paper - add missing annotation
-        Type VILLAGE_SAVANNA = getType("village_savanna");
-        @org.bukkit.MinecraftExperimental(org.bukkit.MinecraftExperimental.Requires.TRADE_REBALANCE) // Paper - add missing annotation
-        @org.jetbrains.annotations.ApiStatus.Experimental // Paper - add missing annotation
-        Type VILLAGE_SNOWY = getType("village_snowy");
-        @org.bukkit.MinecraftExperimental(org.bukkit.MinecraftExperimental.Requires.TRADE_REBALANCE) // Paper - add missing annotation
-        @org.jetbrains.annotations.ApiStatus.Experimental // Paper - add missing annotation
-        Type VILLAGE_TAIGA = getType("village_taiga");
-        @org.bukkit.MinecraftExperimental(org.bukkit.MinecraftExperimental.Requires.TRADE_REBALANCE) // Paper - add missing annotation
-        @org.jetbrains.annotations.ApiStatus.Experimental // Paper - add missing annotation
+
+        Type BANNER_BLUE = getType("banner_blue");
+
+        Type BANNER_BROWN = getType("banner_brown");
+
+        Type BANNER_CYAN = getType("banner_cyan");
+
+        Type BANNER_GRAY = getType("banner_gray");
+
+        Type BANNER_GREEN = getType("banner_green");
+
+        Type BANNER_LIGHT_BLUE = getType("banner_light_blue");
+
+        Type BANNER_LIGHT_GRAY = getType("banner_light_gray");
+
+        Type BANNER_LIME = getType("banner_lime");
+
+        Type BANNER_MAGENTA = getType("banner_magenta");
+
+        Type BANNER_ORANGE = getType("banner_orange");
+
+        Type BANNER_PINK = getType("banner_pink");
+
+        Type BANNER_PURPLE = getType("banner_purple");
+
+        Type BANNER_RED = getType("banner_red");
+
+        Type BANNER_WHITE = getType("banner_white");
+
+        Type BANNER_YELLOW = getType("banner_yellow");
+
+        Type BLUE_MARKER = getType("blue_marker");
+
+        Type FRAME = getType("frame");
+
         Type JUNGLE_TEMPLE = getType("jungle_temple");
-        @org.bukkit.MinecraftExperimental(org.bukkit.MinecraftExperimental.Requires.TRADE_REBALANCE) // Paper - add missing annotation
-        @org.jetbrains.annotations.ApiStatus.Experimental // Paper - add missing annotation
+
+        Type MANSION = getType("mansion");
+
+        Type MONUMENT = getType("monument");
+
+        Type PLAYER = getType("player");
+
+        Type PLAYER_OFF_LIMITS = getType("player_off_limits");
+
+        Type PLAYER_OFF_MAP = getType("player_off_map");
+
+        Type RED_MARKER = getType("red_marker");
+
+        Type RED_X = getType("red_x");
+
         Type SWAMP_HUT = getType("swamp_hut");
+
+        Type TARGET_POINT = getType("target_point");
+
+        Type TARGET_X = getType("target_x");
+
         Type TRIAL_CHAMBERS = getType("trial_chambers");
 
+        Type VILLAGE_DESERT = getType("village_desert");
+
+        Type VILLAGE_PLAINS = getType("village_plains");
+
+        Type VILLAGE_SAVANNA = getType("village_savanna");
+
+        Type VILLAGE_SNOWY = getType("village_snowy");
+
+        Type VILLAGE_TAIGA = getType("village_taiga");
+        // End generate - MapCursorType
+
         @NotNull
         private static Type getType(@NotNull String key) {
             return Registry.MAP_DECORATION_TYPE.getOrThrow(NamespacedKey.minecraft(key));
@@ -348,7 +372,7 @@ public final class MapCursor {
          * @return the value
          * @apiNote Internal Use Only
          */
-        @org.jetbrains.annotations.ApiStatus.Internal // Paper
+        @ApiStatus.Internal // Paper
         byte getValue();
 
         /**
@@ -358,7 +382,7 @@ public final class MapCursor {
          * @return the matching type
          * @apiNote Internal Use Only
          */
-        @org.jetbrains.annotations.ApiStatus.Internal // Paper
+        @ApiStatus.Internal // Paper
         @Nullable
         static Type byValue(byte value) {
             for (Type t : values()) {
@@ -373,7 +397,7 @@ public final class MapCursor {
          * @deprecated only for backwards compatibility, use {@link Registry#get(NamespacedKey)} instead.
          */
         @NotNull
-        @Deprecated(since = "1.21", forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
+        @Deprecated(since = "1.21", forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
         static Type valueOf(@NotNull String name) {
             Type type = Registry.MAP_DECORATION_TYPE.get(NamespacedKey.fromString(name.toLowerCase(Locale.ROOT)));
             Preconditions.checkArgument(type != null, "No Type found with the name %s", name);
@@ -385,7 +409,7 @@ public final class MapCursor {
          * @deprecated use {@link Registry#iterator()}.
          */
         @NotNull
-        @Deprecated(since = "1.21", forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
+        @Deprecated(since = "1.21", forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
         static Type[] values() {
             return Lists.newArrayList(Registry.MAP_DECORATION_TYPE).toArray(new Type[0]);
         }
diff --git a/paper-api/src/main/java/org/bukkit/map/MapPalette.java b/paper-api/src/main/java/org/bukkit/map/MapPalette.java
index 6995f9cc08..797a180415 100644
--- a/paper-api/src/main/java/org/bukkit/map/MapPalette.java
+++ b/paper-api/src/main/java/org/bukkit/map/MapPalette.java
@@ -18,16 +18,6 @@ public final class MapPalette {
     // Internal mechanisms
     private MapPalette() {}
 
-    @NotNull
-    private static Color c(int r, int g, int b) {
-        return new Color(r, g, b);
-    }
-
-    @NotNull
-    private static Color c(int r, int g, int b, int a) {
-        return new Color(r, g, b, a);
-    }
-
     private static double getDistance(@NotNull Color c1, @NotNull Color c2) {
         // Paper start - Optimize color distance calculation by removing floating point math
         int rsum = c1.getRed() + c2.getRed(); // Use sum instead of mean for no division
@@ -46,68 +36,257 @@ public final class MapPalette {
 
     @NotNull
     static final Color[] colors = {
-        c(0, 0, 0, 0), c(0, 0, 0, 0), c(0, 0, 0, 0), c(0, 0, 0, 0),
-        c(89, 125, 39), c(109, 153, 48), c(127, 178, 56), c(67, 94, 29),
-        c(174, 164, 115), c(213, 201, 140), c(247, 233, 163), c(130, 123, 86),
-        c(140, 140, 140), c(171, 171, 171), c(199, 199, 199), c(105, 105, 105),
-        c(180, 0, 0), c(220, 0, 0), c(255, 0, 0), c(135, 0, 0),
-        c(112, 112, 180), c(138, 138, 220), c(160, 160, 255), c(84, 84, 135),
-        c(117, 117, 117), c(144, 144, 144), c(167, 167, 167), c(88, 88, 88),
-        c(0, 87, 0), c(0, 106, 0), c(0, 124, 0), c(0, 65, 0),
-        c(180, 180, 180), c(220, 220, 220), c(255, 255, 255), c(135, 135, 135),
-        c(115, 118, 129), c(141, 144, 158), c(164, 168, 184), c(86, 88, 97),
-        c(106, 76, 54), c(130, 94, 66), c(151, 109, 77), c(79, 57, 40),
-        c(79, 79, 79), c(96, 96, 96), c(112, 112, 112), c(59, 59, 59),
-        c(45, 45, 180), c(55, 55, 220), c(64, 64, 255), c(33, 33, 135),
-        c(100, 84, 50), c(123, 102, 62), c(143, 119, 72), c(75, 63, 38),
-        c(180, 177, 172), c(220, 217, 211), c(255, 252, 245), c(135, 133, 129),
-        c(152, 89, 36), c(186, 109, 44), c(216, 127, 51), c(114, 67, 27),
-        c(125, 53, 152), c(153, 65, 186), c(178, 76, 216), c(94, 40, 114),
-        c(72, 108, 152), c(88, 132, 186), c(102, 153, 216), c(54, 81, 114),
-        c(161, 161, 36), c(197, 197, 44), c(229, 229, 51), c(121, 121, 27),
-        c(89, 144, 17), c(109, 176, 21), c(127, 204, 25), c(67, 108, 13),
-        c(170, 89, 116), c(208, 109, 142), c(242, 127, 165), c(128, 67, 87),
-        c(53, 53, 53), c(65, 65, 65), c(76, 76, 76), c(40, 40, 40),
-        c(108, 108, 108), c(132, 132, 132), c(153, 153, 153), c(81, 81, 81),
-        c(53, 89, 108), c(65, 109, 132), c(76, 127, 153), c(40, 67, 81),
-        c(89, 44, 125), c(109, 54, 153), c(127, 63, 178), c(67, 33, 94),
-        c(36, 53, 125), c(44, 65, 153), c(51, 76, 178), c(27, 40, 94),
-        c(72, 53, 36), c(88, 65, 44), c(102, 76, 51), c(54, 40, 27),
-        c(72, 89, 36), c(88, 109, 44), c(102, 127, 51), c(54, 67, 27),
-        c(108, 36, 36), c(132, 44, 44), c(153, 51, 51), c(81, 27, 27),
-        c(17, 17, 17), c(21, 21, 21), c(25, 25, 25), c(13, 13, 13),
-        c(176, 168, 54), c(215, 205, 66), c(250, 238, 77), c(132, 126, 40),
-        c(64, 154, 150), c(79, 188, 183), c(92, 219, 213), c(48, 115, 112),
-        c(52, 90, 180), c(63, 110, 220), c(74, 128, 255), c(39, 67, 135),
-        c(0, 153, 40), c(0, 187, 50), c(0, 217, 58), c(0, 114, 30),
-        c(91, 60, 34), c(111, 74, 42), c(129, 86, 49), c(68, 45, 25),
-        c(79, 1, 0), c(96, 1, 0), c(112, 2, 0), c(59, 1, 0),
-        c(147, 124, 113), c(180, 152, 138), c(209, 177, 161), c(110, 93, 85),
-        c(112, 57, 25), c(137, 70, 31), c(159, 82, 36), c(84, 43, 19),
-        c(105, 61, 76), c(128, 75, 93), c(149, 87, 108), c(78, 46, 57),
-        c(79, 76, 97), c(96, 93, 119), c(112, 108, 138), c(59, 57, 73),
-        c(131, 93, 25), c(160, 114, 31), c(186, 133, 36), c(98, 70, 19),
-        c(72, 82, 37), c(88, 100, 45), c(103, 117, 53), c(54, 61, 28),
-        c(112, 54, 55), c(138, 66, 67), c(160, 77, 78), c(84, 40, 41),
-        c(40, 28, 24), c(49, 35, 30), c(57, 41, 35), c(30, 21, 18),
-        c(95, 75, 69), c(116, 92, 84), c(135, 107, 98), c(71, 56, 51),
-        c(61, 64, 64), c(75, 79, 79), c(87, 92, 92), c(46, 48, 48),
-        c(86, 51, 62), c(105, 62, 75), c(122, 73, 88), c(64, 38, 46),
-        c(53, 43, 64), c(65, 53, 79), c(76, 62, 92), c(40, 32, 48),
-        c(53, 35, 24), c(65, 43, 30), c(76, 50, 35), c(40, 26, 18),
-        c(53, 57, 29), c(65, 70, 36), c(76, 82, 42), c(40, 43, 22),
-        c(100, 42, 32), c(122, 51, 39), c(142, 60, 46), c(75, 31, 24),
-        c(26, 15, 11), c(31, 18, 13), c(37, 22, 16), c(19, 11, 8),
-        c(133, 33, 34), c(163, 41, 42), c(189, 48, 49), c(100, 25, 25),
-        c(104, 44, 68), c(127, 54, 83), c(148, 63, 97), c(78, 33, 51),
-        c(64, 17, 20), c(79, 21, 25), c(92, 25, 29), c(48, 13, 15),
-        c(15, 88, 94), c(18, 108, 115), c(22, 126, 134), c(11, 66, 70),
-        c(40, 100, 98), c(50, 122, 120), c(58, 142, 140), c(30, 75, 74),
-        c(60, 31, 43), c(74, 37, 53), c(86, 44, 62), c(45, 23, 32),
-        c(14, 127, 93), c(17, 155, 114), c(20, 180, 133), c(10, 95, 70),
-        c(70, 70, 70), c(86, 86, 86), c(100, 100, 100), c(52, 52, 52),
-        c(152, 123, 103), c(186, 150, 126), c(216, 175, 147), c(114, 92, 77),
-        c(89, 117, 105), c(109, 144, 129), c(127, 167, 150), c(67, 88, 79)
+        // Start generate - MapPalette#colors
+        // @GeneratedFrom 1.21.4
+        new Color(0x00000000, true),
+        new Color(0x00000000, true),
+        new Color(0x00000000, true),
+        new Color(0x00000000, true),
+        new Color(0x597D27),
+        new Color(0x6D9930),
+        new Color(0x7FB238),
+        new Color(0x435E1D),
+        new Color(0xAEA473),
+        new Color(0xD5C98C),
+        new Color(0xF7E9A3),
+        new Color(0x827B56),
+        new Color(0x8C8C8C),
+        new Color(0xABABAB),
+        new Color(0xC7C7C7),
+        new Color(0x696969),
+        new Color(0xB40000),
+        new Color(0xDC0000),
+        new Color(0xFF0000),
+        new Color(0x870000),
+        new Color(0x7070B4),
+        new Color(0x8A8ADC),
+        new Color(0xA0A0FF),
+        new Color(0x545487),
+        new Color(0x757575),
+        new Color(0x909090),
+        new Color(0xA7A7A7),
+        new Color(0x585858),
+        new Color(0x005700),
+        new Color(0x006A00),
+        new Color(0x007C00),
+        new Color(0x004100),
+        new Color(0xB4B4B4),
+        new Color(0xDCDCDC),
+        new Color(0xFFFFFF),
+        new Color(0x878787),
+        new Color(0x737681),
+        new Color(0x8D909E),
+        new Color(0xA4A8B8),
+        new Color(0x565861),
+        new Color(0x6A4C36),
+        new Color(0x825E42),
+        new Color(0x976D4D),
+        new Color(0x4F3928),
+        new Color(0x4F4F4F),
+        new Color(0x606060),
+        new Color(0x707070),
+        new Color(0x3B3B3B),
+        new Color(0x2D2DB4),
+        new Color(0x3737DC),
+        new Color(0x4040FF),
+        new Color(0x212187),
+        new Color(0x645432),
+        new Color(0x7B663E),
+        new Color(0x8F7748),
+        new Color(0x4B3F26),
+        new Color(0xB4B1AC),
+        new Color(0xDCD9D3),
+        new Color(0xFFFCF5),
+        new Color(0x878581),
+        new Color(0x985924),
+        new Color(0xBA6D2C),
+        new Color(0xD87F33),
+        new Color(0x72431B),
+        new Color(0x7D3598),
+        new Color(0x9941BA),
+        new Color(0xB24CD8),
+        new Color(0x5E2872),
+        new Color(0x486C98),
+        new Color(0x5884BA),
+        new Color(0x6699D8),
+        new Color(0x365172),
+        new Color(0xA1A124),
+        new Color(0xC5C52C),
+        new Color(0xE5E533),
+        new Color(0x79791B),
+        new Color(0x599011),
+        new Color(0x6DB015),
+        new Color(0x7FCC19),
+        new Color(0x436C0D),
+        new Color(0xAA5974),
+        new Color(0xD06D8E),
+        new Color(0xF27FA5),
+        new Color(0x804357),
+        new Color(0x353535),
+        new Color(0x414141),
+        new Color(0x4C4C4C),
+        new Color(0x282828),
+        new Color(0x6C6C6C),
+        new Color(0x848484),
+        new Color(0x999999),
+        new Color(0x515151),
+        new Color(0x35596C),
+        new Color(0x416D84),
+        new Color(0x4C7F99),
+        new Color(0x284351),
+        new Color(0x592C7D),
+        new Color(0x6D3699),
+        new Color(0x7F3FB2),
+        new Color(0x43215E),
+        new Color(0x24357D),
+        new Color(0x2C4199),
+        new Color(0x334CB2),
+        new Color(0x1B285E),
+        new Color(0x483524),
+        new Color(0x58412C),
+        new Color(0x664C33),
+        new Color(0x36281B),
+        new Color(0x485924),
+        new Color(0x586D2C),
+        new Color(0x667F33),
+        new Color(0x36431B),
+        new Color(0x6C2424),
+        new Color(0x842C2C),
+        new Color(0x993333),
+        new Color(0x511B1B),
+        new Color(0x111111),
+        new Color(0x151515),
+        new Color(0x191919),
+        new Color(0x0D0D0D),
+        new Color(0xB0A836),
+        new Color(0xD7CD42),
+        new Color(0xFAEE4D),
+        new Color(0x847E28),
+        new Color(0x409A96),
+        new Color(0x4FBCB7),
+        new Color(0x5CDBD5),
+        new Color(0x307370),
+        new Color(0x345AB4),
+        new Color(0x3F6EDC),
+        new Color(0x4A80FF),
+        new Color(0x274387),
+        new Color(0x009928),
+        new Color(0x00BB32),
+        new Color(0x00D93A),
+        new Color(0x00721E),
+        new Color(0x5B3C22),
+        new Color(0x6F4A2A),
+        new Color(0x815631),
+        new Color(0x442D19),
+        new Color(0x4F0100),
+        new Color(0x600100),
+        new Color(0x700200),
+        new Color(0x3B0100),
+        new Color(0x937C71),
+        new Color(0xB4988A),
+        new Color(0xD1B1A1),
+        new Color(0x6E5D55),
+        new Color(0x703919),
+        new Color(0x89461F),
+        new Color(0x9F5224),
+        new Color(0x542B13),
+        new Color(0x693D4C),
+        new Color(0x804B5D),
+        new Color(0x95576C),
+        new Color(0x4E2E39),
+        new Color(0x4F4C61),
+        new Color(0x605D77),
+        new Color(0x706C8A),
+        new Color(0x3B3949),
+        new Color(0x835D19),
+        new Color(0xA0721F),
+        new Color(0xBA8524),
+        new Color(0x624613),
+        new Color(0x485225),
+        new Color(0x58642D),
+        new Color(0x677535),
+        new Color(0x363D1C),
+        new Color(0x703637),
+        new Color(0x8A4243),
+        new Color(0xA04D4E),
+        new Color(0x542829),
+        new Color(0x281C18),
+        new Color(0x31231E),
+        new Color(0x392923),
+        new Color(0x1E1512),
+        new Color(0x5F4B45),
+        new Color(0x745C54),
+        new Color(0x876B62),
+        new Color(0x473833),
+        new Color(0x3D4040),
+        new Color(0x4B4F4F),
+        new Color(0x575C5C),
+        new Color(0x2E3030),
+        new Color(0x56333E),
+        new Color(0x693E4B),
+        new Color(0x7A4958),
+        new Color(0x40262E),
+        new Color(0x352B40),
+        new Color(0x41354F),
+        new Color(0x4C3E5C),
+        new Color(0x282030),
+        new Color(0x352318),
+        new Color(0x412B1E),
+        new Color(0x4C3223),
+        new Color(0x281A12),
+        new Color(0x35391D),
+        new Color(0x414624),
+        new Color(0x4C522A),
+        new Color(0x282B16),
+        new Color(0x642A20),
+        new Color(0x7A3327),
+        new Color(0x8E3C2E),
+        new Color(0x4B1F18),
+        new Color(0x1A0F0B),
+        new Color(0x1F120D),
+        new Color(0x251610),
+        new Color(0x130B08),
+        new Color(0x852122),
+        new Color(0xA3292A),
+        new Color(0xBD3031),
+        new Color(0x641919),
+        new Color(0x682C44),
+        new Color(0x7F3653),
+        new Color(0x943F61),
+        new Color(0x4E2133),
+        new Color(0x401114),
+        new Color(0x4F1519),
+        new Color(0x5C191D),
+        new Color(0x300D0F),
+        new Color(0x0F585E),
+        new Color(0x126C73),
+        new Color(0x167E86),
+        new Color(0x0B4246),
+        new Color(0x286462),
+        new Color(0x327A78),
+        new Color(0x3A8E8C),
+        new Color(0x1E4B4A),
+        new Color(0x3C1F2B),
+        new Color(0x4A2535),
+        new Color(0x562C3E),
+        new Color(0x2D1720),
+        new Color(0x0E7F5D),
+        new Color(0x119B72),
+        new Color(0x14B485),
+        new Color(0x0A5F46),
+        new Color(0x464646),
+        new Color(0x565656),
+        new Color(0x646464),
+        new Color(0x343434),
+        new Color(0x987B67),
+        new Color(0xBA967E),
+        new Color(0xD8AF93),
+        new Color(0x725C4D),
+        new Color(0x597569),
+        new Color(0x6D9081),
+        new Color(0x7FA796),
+        new Color(0x43584F),
+        // End generate - MapPalette#colors
     };
 
     // Interface
@@ -264,7 +443,7 @@ public final class MapPalette {
             }
         }
 
-        // Minecraft has 143 colors, some of which have negative byte representations
+        // Minecraft has 248 colors, some of which have negative byte representations
         return (byte) (index < 128 ? index : -129 + (index - 127));
     }
 
@@ -278,7 +457,7 @@ public final class MapPalette {
     @Deprecated(since = "1.6.2", forRemoval = true) // Paper
     @NotNull
     public static Color getColor(byte index) {
-        // Minecraft has 143 colors, some of which have negative byte representations
+        // Minecraft has 248 colors, some of which have negative byte representations
         return colors[index >= 0 ? index : index + 256];
     }
 
diff --git a/paper-api/src/main/java/org/bukkit/potion/PotionType.java b/paper-api/src/main/java/org/bukkit/potion/PotionType.java
index 912eb2f48c..c41eccbc2c 100644
--- a/paper-api/src/main/java/org/bukkit/potion/PotionType.java
+++ b/paper-api/src/main/java/org/bukkit/potion/PotionType.java
@@ -15,53 +15,55 @@ import org.jetbrains.annotations.Nullable;
  * the Creative mode inventory
  */
 public enum PotionType implements Keyed, io.papermc.paper.world.flag.FeatureDependant { // Paper - feature flag API
-    WATER("water"),
-    MUNDANE("mundane"),
-    THICK("thick"),
+    // Start generate - PotionType
+    // @GeneratedFrom 1.21.4
     AWKWARD("awkward"),
-    NIGHT_VISION("night_vision"),
-    LONG_NIGHT_VISION("long_night_vision"),
-    INVISIBILITY("invisibility"),
-    LONG_INVISIBILITY("long_invisibility"),
-    LEAPING("leaping"),
-    LONG_LEAPING("long_leaping"),
-    STRONG_LEAPING("strong_leaping"),
     FIRE_RESISTANCE("fire_resistance"),
-    LONG_FIRE_RESISTANCE("long_fire_resistance"),
-    SWIFTNESS("swiftness"),
-    LONG_SWIFTNESS("long_swiftness"),
-    STRONG_SWIFTNESS("strong_swiftness"),
-    SLOWNESS("slowness"),
-    LONG_SLOWNESS("long_slowness"),
-    STRONG_SLOWNESS("strong_slowness"),
-    WATER_BREATHING("water_breathing"),
-    LONG_WATER_BREATHING("long_water_breathing"),
-    HEALING("healing"),
-    STRONG_HEALING("strong_healing"),
     HARMING("harming"),
-    STRONG_HARMING("strong_harming"),
-    POISON("poison"),
+    HEALING("healing"),
+    INFESTED("infested"),
+    INVISIBILITY("invisibility"),
+    LEAPING("leaping"),
+    LONG_FIRE_RESISTANCE("long_fire_resistance"),
+    LONG_INVISIBILITY("long_invisibility"),
+    LONG_LEAPING("long_leaping"),
+    LONG_NIGHT_VISION("long_night_vision"),
     LONG_POISON("long_poison"),
-    STRONG_POISON("strong_poison"),
-    REGENERATION("regeneration"),
     LONG_REGENERATION("long_regeneration"),
-    STRONG_REGENERATION("strong_regeneration"),
-    STRENGTH("strength"),
+    LONG_SLOW_FALLING("long_slow_falling"),
+    LONG_SLOWNESS("long_slowness"),
     LONG_STRENGTH("long_strength"),
-    STRONG_STRENGTH("strong_strength"),
-    WEAKNESS("weakness"),
+    LONG_SWIFTNESS("long_swiftness"),
+    LONG_TURTLE_MASTER("long_turtle_master"),
+    LONG_WATER_BREATHING("long_water_breathing"),
     LONG_WEAKNESS("long_weakness"),
     LUCK("luck"),
-    TURTLE_MASTER("turtle_master"),
-    LONG_TURTLE_MASTER("long_turtle_master"),
-    STRONG_TURTLE_MASTER("strong_turtle_master"),
-    SLOW_FALLING("slow_falling"),
-    LONG_SLOW_FALLING("long_slow_falling"),
-    WIND_CHARGED("wind_charged"),
-    WEAVING("weaving"),
+    MUNDANE("mundane"),
+    NIGHT_VISION("night_vision"),
     OOZING("oozing"),
-    INFESTED("infested"),
-    ;
+    POISON("poison"),
+    REGENERATION("regeneration"),
+    SLOW_FALLING("slow_falling"),
+    SLOWNESS("slowness"),
+    STRENGTH("strength"),
+    STRONG_HARMING("strong_harming"),
+    STRONG_HEALING("strong_healing"),
+    STRONG_LEAPING("strong_leaping"),
+    STRONG_POISON("strong_poison"),
+    STRONG_REGENERATION("strong_regeneration"),
+    STRONG_SLOWNESS("strong_slowness"),
+    STRONG_STRENGTH("strong_strength"),
+    STRONG_SWIFTNESS("strong_swiftness"),
+    STRONG_TURTLE_MASTER("strong_turtle_master"),
+    SWIFTNESS("swiftness"),
+    THICK("thick"),
+    TURTLE_MASTER("turtle_master"),
+    WATER("water"),
+    WATER_BREATHING("water_breathing"),
+    WEAKNESS("weakness"),
+    WEAVING("weaving"),
+    WIND_CHARGED("wind_charged");
+    // End generate - PotionType
 
     private final NamespacedKey key;
     private final Supplier<InternalPotionData> internalPotionDataSupplier;
diff --git a/paper-api/src/main/java/org/bukkit/scoreboard/DisplaySlot.java b/paper-api/src/main/java/org/bukkit/scoreboard/DisplaySlot.java
index 21cd2ba659..0ba0cf10ec 100644
--- a/paper-api/src/main/java/org/bukkit/scoreboard/DisplaySlot.java
+++ b/paper-api/src/main/java/org/bukkit/scoreboard/DisplaySlot.java
@@ -1,30 +1,31 @@
 package org.bukkit.scoreboard;
 
-import net.kyori.adventure.text.format.NamedTextColor; // Paper
 /**
  * Locations for displaying objectives to the player
  */
 public enum DisplaySlot {
-    // Paper start
-    BELOW_NAME("below_name"),
+    // Start generate - DisplaySlot
+    // @GeneratedFrom 1.21.4
     PLAYER_LIST("list"),
     SIDEBAR("sidebar"),
-    SIDEBAR_TEAM_BLACK(NamedTextColor.BLACK),
-    SIDEBAR_TEAM_DARK_BLUE(NamedTextColor.DARK_BLUE),
-    SIDEBAR_TEAM_DARK_GREEN(NamedTextColor.DARK_GREEN),
-    SIDEBAR_TEAM_DARK_AQUA(NamedTextColor.DARK_AQUA),
-    SIDEBAR_TEAM_DARK_RED(NamedTextColor.DARK_RED),
-    SIDEBAR_TEAM_DARK_PURPLE(NamedTextColor.DARK_PURPLE),
-    SIDEBAR_TEAM_GOLD(NamedTextColor.GOLD),
-    SIDEBAR_TEAM_GRAY(NamedTextColor.GRAY),
-    SIDEBAR_TEAM_DARK_GRAY(NamedTextColor.DARK_GRAY),
-    SIDEBAR_TEAM_BLUE(NamedTextColor.BLUE),
-    SIDEBAR_TEAM_GREEN(NamedTextColor.GREEN),
-    SIDEBAR_TEAM_AQUA(NamedTextColor.AQUA),
-    SIDEBAR_TEAM_RED(NamedTextColor.RED),
-    SIDEBAR_TEAM_LIGHT_PURPLE(NamedTextColor.LIGHT_PURPLE),
-    SIDEBAR_TEAM_YELLOW(NamedTextColor.YELLOW),
-    SIDEBAR_TEAM_WHITE(NamedTextColor.WHITE);
+    BELOW_NAME("below_name"),
+    SIDEBAR_TEAM_BLACK("sidebar.team.black"),
+    SIDEBAR_TEAM_DARK_BLUE("sidebar.team.dark_blue"),
+    SIDEBAR_TEAM_DARK_GREEN("sidebar.team.dark_green"),
+    SIDEBAR_TEAM_DARK_AQUA("sidebar.team.dark_aqua"),
+    SIDEBAR_TEAM_DARK_RED("sidebar.team.dark_red"),
+    SIDEBAR_TEAM_DARK_PURPLE("sidebar.team.dark_purple"),
+    SIDEBAR_TEAM_GOLD("sidebar.team.gold"),
+    SIDEBAR_TEAM_GRAY("sidebar.team.gray"),
+    SIDEBAR_TEAM_DARK_GRAY("sidebar.team.dark_gray"),
+    SIDEBAR_TEAM_BLUE("sidebar.team.blue"),
+    SIDEBAR_TEAM_GREEN("sidebar.team.green"),
+    SIDEBAR_TEAM_AQUA("sidebar.team.aqua"),
+    SIDEBAR_TEAM_RED("sidebar.team.red"),
+    SIDEBAR_TEAM_LIGHT_PURPLE("sidebar.team.light_purple"),
+    SIDEBAR_TEAM_YELLOW("sidebar.team.yellow"),
+    SIDEBAR_TEAM_WHITE("sidebar.team.white");
+    // End generate - DisplaySlot
 
     public static final net.kyori.adventure.util.Index<String, DisplaySlot> NAMES = net.kyori.adventure.util.Index.create(DisplaySlot.class, DisplaySlot::getId);
 
@@ -34,10 +35,6 @@ public enum DisplaySlot {
         this.id = id;
     }
 
-    DisplaySlot(@org.jetbrains.annotations.NotNull NamedTextColor color) {
-        this.id = "sidebar.team." + color;
-    }
-
     /**
      * Get the string id of this display slot.
      *
@@ -51,5 +48,4 @@ public enum DisplaySlot {
     public String toString() {
         return this.id;
     }
-    // Paper end
 }
diff --git a/paper-api/src/main/java/org/bukkit/tag/DamageTypeTags.java b/paper-api/src/main/java/org/bukkit/tag/DamageTypeTags.java
index 548122148d..1525af8f1c 100644
--- a/paper-api/src/main/java/org/bukkit/tag/DamageTypeTags.java
+++ b/paper-api/src/main/java/org/bukkit/tag/DamageTypeTags.java
@@ -13,147 +13,81 @@ import org.jetbrains.annotations.Nullable;
 @ApiStatus.Experimental
 public final class DamageTypeTags {
 
-    /**
-     * Vanilla tag representing damage types which damage helmets.
-     */
-    public static final Tag<DamageType> DAMAGES_HELMET = getTag("damages_helmet");
-    /**
-     * Vanilla tag representing damage types which bypass armor.
-     */
-    public static final Tag<DamageType> BYPASSES_ARMOR = getTag("bypasses_armor");
-    /**
-     * Vanilla tag representing damage types which bypass shields.
-     */
-    public static final Tag<DamageType> BYPASSES_SHIELD = getTag("bypasses_shield");
-    /**
-     * Vanilla tag representing damage types which bypass invulnerability.
-     */
-    public static final Tag<DamageType> BYPASSES_INVULNERABILITY = getTag("bypasses_invulnerability");
-    /**
-     * Vanilla tag representing damage types which bypass cooldowns.
-     * <br>
-     * <b>Note:</b> this can be null unless a datapack add values to this tag because vanilla not has any values for this.
-     */
-    @Nullable
-    public static final Tag<DamageType> BYPASSES_COOLDOWN = getTag("bypasses_cooldown");
-    /**
-     * Vanilla tag representing damage types which bypass effects.
-     */
-    public static final Tag<DamageType> BYPASSES_EFFECTS = getTag("bypasses_effects");
-    /**
-     * Vanilla tag representing damage types which bypass resistance.
-     */
-    public static final Tag<DamageType> BYPASSES_RESISTANCE = getTag("bypasses_resistance");
-    /**
-     * Vanilla tag representing damage types which bypass enchantments.
-     */
-    public static final Tag<DamageType> BYPASSES_ENCHANTMENTS = getTag("bypasses_enchantments");
-    /**
-     * Vanilla tag representing all fire damage types.
-     */
-    public static final Tag<DamageType> IS_FIRE = getTag("is_fire");
-    /**
-     * Vanilla tag representing damage types which originate from projectiles.
-     */
-    public static final Tag<DamageType> IS_PROJECTILE = getTag("is_projectile");
-    /**
-     * Vanilla tag representing damage types which witches are resistant to.
-     */
-    public static final Tag<DamageType> WITCH_RESISTANT_TO = getTag("witch_resistant_to");
-    /**
-     * Vanilla tag representing all explosion damage types.
-     */
-    public static final Tag<DamageType> IS_EXPLOSION = getTag("is_explosion");
-    /**
-     * Vanilla tag representing all fall damage types.
-     */
-    public static final Tag<DamageType> IS_FALL = getTag("is_fall");
-    /**
-     * Vanilla tag representing all drowning damage types.
-     */
-    public static final Tag<DamageType> IS_DROWNING = getTag("is_drowning");
-    /**
-     * Vanilla tag representing all freezing damage types.
-     */
-    public static final Tag<DamageType> IS_FREEZING = getTag("is_freezing");
-    /**
-     * Vanilla tag representing all lightning damage types.
-     */
-    public static final Tag<DamageType> IS_LIGHTNING = getTag("is_lightning");
-    /**
-     * Vanilla tag representing damage types which do not cause entities to
-     * anger.
-     */
-    public static final Tag<DamageType> NO_ANGER = getTag("no_anger");
-    /**
-     * Vanilla tag representing damage types which do not cause an impact.
-     */
-    public static final Tag<DamageType> NO_IMPACT = getTag("no_impact");
-    /**
-     * Vanilla tag representing damage types which cause maximum fall damage.
-     */
-    public static final Tag<DamageType> ALWAYS_MOST_SIGNIFICANT_FALL = getTag("always_most_significant_fall");
-    /**
-     * Vanilla tag representing damage types which withers are immune to.
-     */
-    public static final Tag<DamageType> WITHER_IMMUNE_TO = getTag("wither_immune_to");
-    /**
-     * Vanilla tag representing damage types which ignite armor stands.
-     */
-    public static final Tag<DamageType> IGNITES_ARMOR_STANDS = getTag("ignites_armor_stands");
-    /**
-     * Vanilla tag representing damage types which burn armor stands.
-     */
-    public static final Tag<DamageType> BURNS_ARMOR_STANDS = getTag("burns_armor_stands");
-    /**
-     * Vanilla tag representing damage types which avoid guardian thorn damage.
-     */
-    public static final Tag<DamageType> AVOIDS_GUARDIAN_THORNS = getTag("avoids_guardian_thorns");
-    /**
-     * Vanilla tag representing damage types which always trigger silverfish.
-     */
-    public static final Tag<DamageType> ALWAYS_TRIGGERS_SILVERFISH = getTag("always_triggers_silverfish");
-    /**
-     * Vanilla tag representing damage types which always hurt enderdragons.
-     */
+    // Start generate - DamageTypeTags
+    // @GeneratedFrom 1.21.4
     public static final Tag<DamageType> ALWAYS_HURTS_ENDER_DRAGONS = getTag("always_hurts_ender_dragons");
-    /**
-     * Vanilla tag representing damage types which do not cause knockback.
-     */
-    public static final Tag<DamageType> NO_KNOCKBACK = getTag("no_knockback");
-    /**
-     * Vanilla tag representing damage types which always kill armor stands.
-     */
+
     public static final Tag<DamageType> ALWAYS_KILLS_ARMOR_STANDS = getTag("always_kills_armor_stands");
-    /**
-     * Vanilla tag representing damage types which can break armor stands.
-     */
-    public static final Tag<DamageType> CAN_BREAK_ARMOR_STAND = getTag("can_break_armor_stand");
-    /**
-     * Vanilla tag representing damage types which bypass wolf armor.
-     */
-    public static final Tag<DamageType> BYPASSES_WOLF_ARMOR = getTag("bypasses_wolf_armor");
-    /**
-     * Vanilla tag representing damage types which are from player attacks.
-     */
-    public static final Tag<DamageType> IS_PLAYER_ATTACK = getTag("is_player_attack");
-    /**
-     * Vanilla tag representing damage types which originate from hot blocks.
-     */
+
+    public static final Tag<DamageType> ALWAYS_MOST_SIGNIFICANT_FALL = getTag("always_most_significant_fall");
+
+    public static final Tag<DamageType> ALWAYS_TRIGGERS_SILVERFISH = getTag("always_triggers_silverfish");
+
+    public static final Tag<DamageType> AVOIDS_GUARDIAN_THORNS = getTag("avoids_guardian_thorns");
+
     public static final Tag<DamageType> BURN_FROM_STEPPING = getTag("burn_from_stepping");
-    /**
-     * Vanilla tag representing damage types which cause entities to panic.
-     */
+
+    public static final Tag<DamageType> BURNS_ARMOR_STANDS = getTag("burns_armor_stands");
+
+    public static final Tag<DamageType> BYPASSES_ARMOR = getTag("bypasses_armor");
+
+    public static final Tag<DamageType> BYPASSES_EFFECTS = getTag("bypasses_effects");
+
+    public static final Tag<DamageType> BYPASSES_ENCHANTMENTS = getTag("bypasses_enchantments");
+
+    public static final Tag<DamageType> BYPASSES_INVULNERABILITY = getTag("bypasses_invulnerability");
+
+    public static final Tag<DamageType> BYPASSES_RESISTANCE = getTag("bypasses_resistance");
+
+    public static final Tag<DamageType> BYPASSES_SHIELD = getTag("bypasses_shield");
+
+    public static final Tag<DamageType> BYPASSES_WOLF_ARMOR = getTag("bypasses_wolf_armor");
+
+    public static final Tag<DamageType> CAN_BREAK_ARMOR_STAND = getTag("can_break_armor_stand");
+
+    public static final Tag<DamageType> DAMAGES_HELMET = getTag("damages_helmet");
+
+    public static final Tag<DamageType> IGNITES_ARMOR_STANDS = getTag("ignites_armor_stands");
+
+    public static final Tag<DamageType> IS_DROWNING = getTag("is_drowning");
+
+    public static final Tag<DamageType> IS_EXPLOSION = getTag("is_explosion");
+
+    public static final Tag<DamageType> IS_FALL = getTag("is_fall");
+
+    public static final Tag<DamageType> IS_FIRE = getTag("is_fire");
+
+    public static final Tag<DamageType> IS_FREEZING = getTag("is_freezing");
+
+    public static final Tag<DamageType> IS_LIGHTNING = getTag("is_lightning");
+
+    public static final Tag<DamageType> IS_PLAYER_ATTACK = getTag("is_player_attack");
+
+    public static final Tag<DamageType> IS_PROJECTILE = getTag("is_projectile");
+
+    public static final Tag<DamageType> MACE_SMASH = getTag("mace_smash");
+
+    public static final Tag<DamageType> NO_ANGER = getTag("no_anger");
+
+    public static final Tag<DamageType> NO_IMPACT = getTag("no_impact");
+
+    public static final Tag<DamageType> NO_KNOCKBACK = getTag("no_knockback");
+
     public static final Tag<DamageType> PANIC_CAUSES = getTag("panic_causes");
-    /**
-     * Vanilla tag representing environmental damage types which cause entities
-     * to panic.
-     */
+
     public static final Tag<DamageType> PANIC_ENVIRONMENTAL_CAUSES = getTag("panic_environmental_causes");
+
+    public static final Tag<DamageType> WITCH_RESISTANT_TO = getTag("witch_resistant_to");
+
+    public static final Tag<DamageType> WITHER_IMMUNE_TO = getTag("wither_immune_to");
+    // End generate - DamageTypeTags
     /**
      * Vanilla tag representing damage types which originate from mace smashes.
+     *
+     * @deprecated use {@link #MACE_SMASH}
      */
-    public static final Tag<DamageType> IS_MACE_SMASH = getTag("mace_smash");
+    @Deprecated(since = "1.21.4", forRemoval = true)
+    public static final Tag<DamageType> IS_MACE_SMASH = MACE_SMASH;
     /**
      * Internal use only.
      */
diff --git a/paper-api/src/test/java/org/bukkit/BukkitMirrorTest.java b/paper-api/src/test/java/org/bukkit/BukkitMirrorTest.java
deleted file mode 100644
index 5974ceea58..0000000000
--- a/paper-api/src/test/java/org/bukkit/BukkitMirrorTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.bukkit;
-
-import static org.bukkit.support.MatcherAssert.*;
-import static org.hamcrest.Matchers.*;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.stream.Stream;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-
-@org.junit.jupiter.api.Disabled // Paper
-public class BukkitMirrorTest {
-
-    public static Stream<Arguments> data() {
-        return Stream.of(Server.class.getDeclaredMethods())
-                .map(method -> {
-                    try {
-                        return Arguments.of(
-                                method,
-                                method.toGenericString().substring("public abstract ".length()).replace("(", "{").replace(")", "}"),
-                                Bukkit.class.getDeclaredMethod(method.getName(), method.getParameterTypes())
-                        );
-                    } catch (NoSuchMethodException e) {
-                        throw new RuntimeException(e);
-                    }
-                });
-    }
-
-    @ParameterizedTest
-    @MethodSource("data")
-    public void isStatic(Method server, String name, Method bukkit) throws Throwable {
-        assertThat(Modifier.isStatic(bukkit.getModifiers()), is(true));
-    }
-
-    @ParameterizedTest
-    @MethodSource("data")
-    public void isDeprecated(Method server, String name, Method bukkit) throws Throwable {
-        assertThat(bukkit.isAnnotationPresent(Deprecated.class), is(server.isAnnotationPresent(Deprecated.class)));
-    }
-
-    @ParameterizedTest
-    @MethodSource("data")
-    public void returnType(Method server, String name, Method bukkit) throws Throwable {
-        assertThat(bukkit.getReturnType(), is((Object) server.getReturnType()));
-        // assertThat(bukkit.getGenericReturnType(), is(server.getGenericReturnType())); // too strict on <T> type generics
-    }
-
-    @ParameterizedTest
-    @MethodSource("data")
-    public void parameterTypes(Method server, String name, Method bukkit) throws Throwable {
-        // assertThat(bukkit.getGenericParameterTypes(), is(server.getGenericParameterTypes())); // too strict on <T> type generics
-    }
-
-    @ParameterizedTest
-    @MethodSource("data")
-    public void declaredException(Method server, String name, Method bukkit) throws Throwable {
-        assertThat(bukkit.getGenericExceptionTypes(), is(server.getGenericExceptionTypes()));
-    }
-}
diff --git a/paper-api/src/test/java/org/bukkit/NamespacedKeyTest.java b/paper-api/src/test/java/org/bukkit/NamespacedKeyTest.java
index d4e9e24b70..7d81f92008 100644
--- a/paper-api/src/test/java/org/bukkit/NamespacedKeyTest.java
+++ b/paper-api/src/test/java/org/bukkit/NamespacedKeyTest.java
@@ -29,12 +29,6 @@ public class NamespacedKeyTest {
         assertNull(NamespacedKey.fromString("foo:bar:bazz"));
     }
 
-    @org.junit.jupiter.api.Disabled // Paper - Fixup NamespacedKey handling
-    @Test
-    public void testFromStringEmptyInput() {
-        assertThrows(IllegalArgumentException.class, () -> NamespacedKey.fromString(""));
-    }
-
     @Test
     public void testFromStringNullInput() {
         assertThrows(IllegalArgumentException.class, () -> NamespacedKey.fromString(null));
@@ -75,12 +69,4 @@ public class NamespacedKeyTest {
         new NamespacedKey("loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas",
                 "loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas").toString();
     }
-
-    @org.junit.jupiter.api.Disabled // Paper - Fixup NamespacedKey handling
-    @Test
-    public void testAboveLength() {
-        assertThrows(IllegalArgumentException.class, () -> new NamespacedKey("loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas",
-                "loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas/"
-                + "loremipsumdolorsitametconsecteturadipiscingelitduisvolutpatvelitsitametmaximusscelerisquemorbiullamcorperexacconsequategestas").toString());
-    }
 }
diff --git a/paper-api/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java b/paper-api/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java
index c6b49c7e0a..d9a9306e9e 100644
--- a/paper-api/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java
+++ b/paper-api/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java
@@ -546,46 +546,6 @@ public abstract class ConfigurationSectionTest {
         assertFalse(section.isVector("doesntExist"));
     }
 
-    @Test
-    @org.junit.jupiter.api.Disabled("ItemStack can't exist without the Server, test moved to server")
-    public void testGetItemStack_String() {
-        ConfigurationSection section = getConfigurationSection();
-        String key = "exists";
-        ItemStack value = new ItemStack(Material.ACACIA_WOOD, 50);
-
-        section.set(key, value);
-
-        assertEquals(value, section.getItemStack(key));
-        assertNull(section.getString("doesntExist"));
-    }
-
-    @Test
-    @org.junit.jupiter.api.Disabled("ItemStack can't exist without the Server, test moved to server")
-    public void testGetItemStack_String_ItemStack() {
-        ConfigurationSection section = getConfigurationSection();
-        String key = "exists";
-        ItemStack value = new ItemStack(Material.ACACIA_WOOD, 50);
-        ItemStack def = new ItemStack(Material.STONE, 1);
-
-        section.set(key, value);
-
-        assertEquals(value, section.getItemStack(key, def));
-        assertEquals(def, section.getItemStack("doesntExist", def));
-    }
-
-    @Test
-    @org.junit.jupiter.api.Disabled("ItemStack can't exist without the Server, test moved to server")
-    public void testIsItemStack() {
-        ConfigurationSection section = getConfigurationSection();
-        String key = "exists";
-        ItemStack value = new ItemStack(Material.ACACIA_WOOD, 50);
-
-        section.set(key, value);
-
-        assertTrue(section.isItemStack(key));
-        assertFalse(section.isItemStack("doesntExist"));
-    }
-
     @Test
     public void testGetConfigurationSection() {
         ConfigurationSection section = getConfigurationSection();
diff --git a/paper-api/src/test/java/org/bukkit/entity/memory/MemoryKeyTest.java b/paper-api/src/test/java/org/bukkit/entity/memory/MemoryKeyTest.java
deleted file mode 100644
index 2e426a9089..0000000000
--- a/paper-api/src/test/java/org/bukkit/entity/memory/MemoryKeyTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.bukkit.entity.memory;
-
-import static org.junit.jupiter.api.Assertions.*;
-import java.util.Arrays;
-import java.util.List;
-import org.bukkit.NamespacedKey;
-import org.junit.jupiter.api.Test;
-
-public class MemoryKeyTest {
-
-    @Test
-    public void shouldContainAllMemories() {
-        List<MemoryKey> memories = Arrays.asList(MemoryKey.HOME, MemoryKey.JOB_SITE, MemoryKey.MEETING_POINT);
-        assertTrue(MemoryKey.values().containsAll(memories));
-    }
-
-    @Test
-    public void shouldGetMemoryKeyHomeByNamespacedKey() {
-        assertEquals(MemoryKey.HOME, MemoryKey.getByKey(NamespacedKey.minecraft("home")));
-    }
-
-    @Test
-    public void shouldGetMemoryKeyJobSiteByNamespacedKey() {
-        assertEquals(MemoryKey.JOB_SITE, MemoryKey.getByKey(NamespacedKey.minecraft("job_site")));
-    }
-
-    @Test
-    public void shouldGetMemoryKeyMeetingPointByNamespacedKey() {
-        assertEquals(MemoryKey.MEETING_POINT, MemoryKey.getByKey(NamespacedKey.minecraft("meeting_point")));
-    }
-
-    @Test
-    public void shouldReturnNullWhenNamespacedKeyisNotPresentAsMemoryKey() {
-        assertNull(MemoryKey.getByKey(NamespacedKey.minecraft("not_present")));
-    }
-
-    @Test
-    public void shouldReturnNullWhenNamespacedKeyisNull() {
-        assertNull(MemoryKey.getByKey(null));
-    }
-}
diff --git a/paper-generator/.editorconfig b/paper-generator/.editorconfig
new file mode 100644
index 0000000000..71c3cd0c32
--- /dev/null
+++ b/paper-generator/.editorconfig
@@ -0,0 +1,3 @@
+[*.java]
+ij_java_generate_final_locals = false
+ij_java_generate_final_parameters = false
diff --git a/paper-generator/build.gradle.kts b/paper-generator/build.gradle.kts
new file mode 100644
index 0000000000..fe43a1459e
--- /dev/null
+++ b/paper-generator/build.gradle.kts
@@ -0,0 +1,129 @@
+import io.papermc.paperweight.util.defaultJavaLauncher
+
+plugins {
+    java
+    id("io.papermc.paperweight.source-generator")
+}
+
+paperweight {
+    atFile.set(layout.projectDirectory.file("wideners.at"))
+}
+
+repositories {
+    mavenLocal() // todo publish typewriter somewhere
+}
+
+val serverRuntimeClasspath by configurations.registering { // resolvable?
+    isCanBeConsumed = false
+    isCanBeResolved = true
+}
+
+dependencies {
+    minecraftJar(project(":paper-server", "mappedJarOutgoing"))
+    implementation(project(":paper-server", "macheMinecraftLibraries"))
+
+    implementation("com.squareup:javapoet:1.13.0")
+    implementation(project(":paper-api"))
+    implementation("io.papermc.typewriter:typewriter:1.0-SNAPSHOT") {
+        isTransitive = false // paper-api already have everything
+    }
+    implementation("io.github.classgraph:classgraph:4.8.47")
+    implementation("org.jetbrains:annotations:26.0.1")
+    testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
+    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
+
+    serverRuntimeClasspath(project(":paper-server", "runtimeConfiguration"))
+}
+
+val gameVersion = providers.gradleProperty("mcVersion")
+
+val rewriteApi = tasks.registerGenerationTask("rewriteApi", true, "paper-api") {
+    description = "Rewrite existing API classes"
+    mainClass.set("io.papermc.generator.Main\$Rewriter")
+    classpath(sourceSets.main.map { it.runtimeClasspath })
+}
+
+val rewriteImpl = tasks.registerGenerationTask("rewriteImpl", true, "paper-server") {
+    description = "Rewrite existing implementation classes"
+    mainClass.set("io.papermc.generator.Main\$Rewriter")
+    classpath(sourceSets.main.map { it.runtimeClasspath })
+    args(serverRuntimeClasspath.get().asPath)
+}
+
+tasks.register("rewrite") {
+    group = "generation"
+    description = "Rewrite existing API classes and its implementation"
+    dependsOn(rewriteApi, rewriteImpl)
+}
+
+
+val generateApi = tasks.registerGenerationTask("generateApi", false, "paper-api") {
+    description = "Generate new API classes"
+    mainClass.set("io.papermc.generator.Main\$Generator")
+    classpath(sourceSets.main.map { it.runtimeClasspath })
+}
+
+val generateImpl = tasks.registerGenerationTask("generateImpl", false, "paper-server") {
+    description = "Generate new implementation classes"
+    mainClass.set("io.papermc.generator.Main\$Generator")
+    classpath(sourceSets.main.map { it.runtimeClasspath })
+}
+
+tasks.register("generate") {
+    group = "generation"
+    description = "Generate new API classes and its implementation"
+    dependsOn(generateApi, generateImpl)
+}
+
+if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
+    val scanOldGeneratedSourceCode by tasks.registering(JavaExec::class) {
+        group = "verification"
+        description = "Scan source code to detect outdated generated code"
+        javaLauncher = javaToolchains.defaultJavaLauncher(project)
+        mainClass.set("io.papermc.generator.rewriter.utils.ScanOldGeneratedSourceCode")
+        classpath(sourceSets.main.map { it.runtimeClasspath })
+
+        val projectDirs = listOf("paper-api", "paper-server").map { rootProject.layout.projectDirectory.dir(it) }
+        args(projectDirs.map { it.asFile.absolutePath })
+        val workDirs = projectDirs.map { it.dir("src/main/java") }
+
+        workDirs.forEach { inputs.dir(it) }
+        inputs.property("gameVersion", gameVersion)
+        outputs.dirs(workDirs)
+    }
+    tasks.check {
+        dependsOn(scanOldGeneratedSourceCode)
+    }
+}
+
+fun TaskContainer.registerGenerationTask(
+    name: String,
+    rewrite: Boolean,
+    vararg targetProjects: String,
+    block: JavaExec.() -> Unit
+): TaskProvider<JavaExec> = register<JavaExec>(name) {
+    group = "generation"
+    dependsOn(project.tasks.check)
+    javaLauncher = project.javaToolchains.defaultJavaLauncher(project)
+    inputs.property("gameVersion", gameVersion)
+    inputs.dir(layout.projectDirectory.dir("src/main/java")).withPathSensitivity(PathSensitivity.RELATIVE)
+    val projectDirs = targetProjects.map { rootProject.layout.projectDirectory.dir(it) }
+    args(projectDirs.map { it.asFile.absolutePath })
+    systemProperty("paper.updatingMinecraft", providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean())
+    if (rewrite) {
+        val source = projectDirs.map { it.dir("src/main/java") }
+        source.forEach { inputs.dir(it) }
+        outputs.dirs(source)
+    } else {
+        outputs.dirs(projectDirs.map { it.dir("src/generated/java") })
+    }
+
+    block(this)
+}
+
+tasks.test {
+    useJUnitPlatform()
+}
+
+group = "io.papermc.paper"
+version = "1.0-SNAPSHOT"
diff --git a/paper-generator/src/main/java/io/papermc/generator/Generators.java b/paper-generator/src/main/java/io/papermc/generator/Generators.java
new file mode 100644
index 0000000000..ae7353b5b4
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/Generators.java
@@ -0,0 +1,23 @@
+package io.papermc.generator;
+
+import io.papermc.generator.registry.RegistryBootstrapper;
+import io.papermc.generator.types.SourceGenerator;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataBootstrapper;
+import io.papermc.generator.types.goal.MobGoalGenerator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import net.minecraft.Util;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface Generators {
+
+    List<SourceGenerator> API = Collections.unmodifiableList(Util.make(new ArrayList<>(), list -> {
+        RegistryBootstrapper.bootstrap(list);
+        list.add(new MobGoalGenerator("VanillaGoal", "com.destroystokyo.paper.entity.ai"));
+        // todo extract fields for registry based api
+    }));
+
+    List<SourceGenerator> SERVER = Collections.unmodifiableList(Util.make(new ArrayList<>(), CraftBlockDataBootstrapper::bootstrap));
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/Main.java b/paper-generator/src/main/java/io/papermc/generator/Main.java
new file mode 100644
index 0000000000..d1e6acacf3
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/Main.java
@@ -0,0 +1,117 @@
+package io.papermc.generator;
+
+import com.google.common.util.concurrent.MoreExecutors;
+import com.mojang.logging.LogUtils;
+import io.papermc.generator.rewriter.registration.PaperPatternSourceSetRewriter;
+import io.papermc.generator.rewriter.registration.PatternSourceSetRewriter;
+import io.papermc.generator.types.SourceGenerator;
+import io.papermc.generator.utils.experimental.ExperimentalCollector;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.SharedConstants;
+import net.minecraft.commands.Commands;
+import net.minecraft.core.HolderLookup;
+import net.minecraft.core.LayeredRegistryAccess;
+import net.minecraft.core.Registry;
+import net.minecraft.core.RegistryAccess;
+import net.minecraft.resources.RegistryDataLoader;
+import net.minecraft.server.Bootstrap;
+import net.minecraft.server.RegistryLayer;
+import net.minecraft.server.ReloadableServerResources;
+import net.minecraft.server.packs.PackType;
+import net.minecraft.server.packs.repository.Pack;
+import net.minecraft.server.packs.repository.PackRepository;
+import net.minecraft.server.packs.repository.ServerPacksSource;
+import net.minecraft.server.packs.resources.MultiPackResourceManager;
+import net.minecraft.tags.TagKey;
+import net.minecraft.tags.TagLoader;
+import net.minecraft.world.flag.FeatureFlags;
+import org.apache.commons.io.file.PathUtils;
+import org.jspecify.annotations.NullMarked;
+import org.slf4j.Logger;
+
+@NullMarked
+public class Main {
+
+    private static final Logger LOGGER = LogUtils.getLogger();
+    public static final RegistryAccess.Frozen REGISTRY_ACCESS;
+    public static final Map<TagKey<?>, String> EXPERIMENTAL_TAGS;
+
+    static {
+        SharedConstants.tryDetectVersion();
+        Bootstrap.bootStrap();
+        Bootstrap.validate();
+
+        PackRepository resourceRepository = ServerPacksSource.createVanillaTrustedRepository();
+        resourceRepository.reload();
+        MultiPackResourceManager resourceManager = new MultiPackResourceManager(PackType.SERVER_DATA, resourceRepository.getAvailablePacks().stream().map(Pack::open).toList());
+        LayeredRegistryAccess<RegistryLayer> layers = RegistryLayer.createRegistryAccess();
+        List<Registry.PendingTags<?>> pendingTags = TagLoader.loadTagsForExistingRegistries(resourceManager, layers.getLayer(RegistryLayer.STATIC));
+        List<HolderLookup.RegistryLookup<?>> worldGenLayer = TagLoader.buildUpdatedLookups(layers.getAccessForLoading(RegistryLayer.WORLDGEN), pendingTags);
+        RegistryAccess.Frozen frozenWorldgenRegistries = RegistryDataLoader.load(resourceManager, worldGenLayer, RegistryDataLoader.WORLDGEN_REGISTRIES);
+        layers = layers.replaceFrom(RegistryLayer.WORLDGEN, frozenWorldgenRegistries);
+        REGISTRY_ACCESS = layers.compositeAccess().freeze();
+        ReloadableServerResources reloadableServerResources = ReloadableServerResources.loadResources(
+            resourceManager,
+            layers,
+            pendingTags,
+            FeatureFlags.VANILLA_SET,
+            Commands.CommandSelection.DEDICATED,
+            0,
+            MoreExecutors.directExecutor(),
+            MoreExecutors.directExecutor()
+        ).join();
+        reloadableServerResources.updateStaticRegistryTags();
+        EXPERIMENTAL_TAGS = ExperimentalCollector.collectTags(resourceManager);
+    }
+
+    private Main() {
+    }
+
+    public static class Rewriter extends Main {
+
+        public static void main(String[] args) {
+            boolean isApi = args[0].endsWith("-api");
+            PatternSourceSetRewriter sourceSet = args.length >= 2 ? PaperPatternSourceSetRewriter.from(args[1]) : new PaperPatternSourceSetRewriter();
+            (isApi ? Rewriters.API : Rewriters.SERVER).accept(sourceSet);
+            try {
+                sourceSet.apply(Path.of(args[0], "src/main/java"));
+            } catch (RuntimeException ex) {
+                throw ex;
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    public static class Generator extends Main {
+
+        public static void main(String[] args) {
+            boolean isApi = args[0].endsWith("-api");
+
+            try {
+                generate(Path.of(args[0]), isApi ? Generators.API : Generators.SERVER);
+            } catch (RuntimeException ex) {
+                throw ex;
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        private static void generate(Path sourceSet, Collection<SourceGenerator> generators) throws IOException {
+            Path output = sourceSet.resolve("src/generated/java");
+            if (Files.exists(output)) {
+                PathUtils.deleteDirectory(output);
+            }
+
+            for (SourceGenerator generator : generators) {
+                generator.writeToFile(output);
+            }
+            LOGGER.info("Files written to {}", output.toAbsolutePath());
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java
new file mode 100644
index 0000000000..462ca768b6
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java
@@ -0,0 +1,217 @@
+package io.papermc.generator;
+
+import io.papermc.generator.registry.RegistryBootstrapper;
+import io.papermc.generator.registry.RegistryEntries;
+import io.papermc.generator.rewriter.registration.PatternSourceSetRewriter;
+import io.papermc.generator.rewriter.types.Types;
+import io.papermc.generator.rewriter.types.registry.EnumRegistryRewriter;
+import io.papermc.generator.rewriter.types.registry.FeatureFlagRewriter;
+import io.papermc.generator.rewriter.types.registry.RegistryFieldRewriter;
+import io.papermc.generator.rewriter.types.registry.RegistryTagRewriter;
+import io.papermc.generator.rewriter.types.registry.TagRewriter;
+import io.papermc.generator.rewriter.types.simple.BlockTypeRewriter;
+import io.papermc.generator.rewriter.types.simple.CraftBlockDataMapping;
+import io.papermc.generator.rewriter.types.simple.CraftBlockEntityStateMapping;
+import io.papermc.generator.rewriter.types.simple.CraftPotionUtilRewriter;
+import io.papermc.generator.rewriter.types.simple.EntityTypeRewriter;
+import io.papermc.generator.rewriter.types.simple.ItemTypeRewriter;
+import io.papermc.generator.rewriter.types.simple.MapPaletteRewriter;
+import io.papermc.generator.rewriter.types.simple.MaterialRewriter;
+import io.papermc.generator.rewriter.types.simple.MemoryKeyRewriter;
+import io.papermc.generator.rewriter.types.registry.PaperFeatureFlagMapping;
+import io.papermc.generator.rewriter.types.simple.StatisticRewriter;
+import io.papermc.generator.rewriter.types.simple.trial.DataComponentTypesRewriter;
+import io.papermc.generator.rewriter.types.simple.trial.VillagerProfessionRewriter;
+import io.papermc.generator.types.goal.MobGoalNames;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.paper.datacomponent.DataComponentTypes;
+import io.papermc.paper.datacomponent.item.consumable.ItemUseAnimation;
+import io.papermc.typewriter.preset.EnumCloneRewriter;
+import io.papermc.typewriter.preset.model.EnumValue;
+import java.util.Map;
+import java.util.function.Consumer;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import javax.lang.model.SourceVersion;
+import net.kyori.adventure.text.format.NamedTextColor;
+import net.minecraft.core.Holder;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.tags.TagKey;
+import net.minecraft.world.entity.Mob;
+import net.minecraft.world.item.Rarity;
+import org.bukkit.Art;
+import org.bukkit.FeatureFlag;
+import org.bukkit.Fluid;
+import org.bukkit.GameEvent;
+import org.bukkit.JukeboxSong;
+import org.bukkit.Material;
+import org.bukkit.MusicInstrument;
+import org.bukkit.Sound;
+import org.bukkit.Statistic;
+import org.bukkit.Tag;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.block.Biome;
+import org.bukkit.block.BlockType;
+import org.bukkit.block.banner.PatternType;
+import org.bukkit.damage.DamageType;
+import org.bukkit.entity.Boat;
+import org.bukkit.entity.Cat;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Fox;
+import org.bukkit.entity.Frog;
+import org.bukkit.entity.Panda;
+import org.bukkit.entity.Salmon;
+import org.bukkit.entity.Sniffer;
+import org.bukkit.entity.TropicalFish;
+import org.bukkit.entity.Villager;
+import org.bukkit.entity.Wolf;
+import org.bukkit.entity.memory.MemoryKey;
+import org.bukkit.generator.structure.Structure;
+import org.bukkit.generator.structure.StructureType;
+import org.bukkit.inventory.ItemRarity;
+import org.bukkit.inventory.ItemType;
+import org.bukkit.inventory.meta.trim.TrimMaterial;
+import org.bukkit.inventory.meta.trim.TrimPattern;
+import org.bukkit.inventory.recipe.CookingBookCategory;
+import org.bukkit.inventory.recipe.CraftingBookCategory;
+import org.bukkit.map.MapCursor;
+import org.bukkit.map.MapPalette;
+import org.bukkit.potion.PotionType;
+import org.bukkit.scoreboard.DisplaySlot;
+import org.bukkit.tag.DamageTypeTags;
+import org.jspecify.annotations.NullMarked;
+
+import static io.papermc.generator.rewriter.registration.PaperPatternSourceSetRewriter.composite;
+import static io.papermc.generator.rewriter.registration.RewriterHolder.holder;
+import static io.papermc.generator.utils.Formatting.quoted;
+
+@NullMarked
+public final class Rewriters {
+
+    public static void bootstrap(PatternSourceSetRewriter apiSourceSet, PatternSourceSetRewriter serverSourceSet) {
+        bootstrapApi(apiSourceSet);
+        bootstrapServer(serverSourceSet);
+    }
+
+    public static final Consumer<PatternSourceSetRewriter> API = Rewriters::bootstrapApi;
+    public static final Consumer<PatternSourceSetRewriter> SERVER = Rewriters::bootstrapServer;
+
+    private static void bootstrapApi(PatternSourceSetRewriter sourceSet) {
+        sourceSet
+            .register("PotionType", PotionType.class, new EnumRegistryRewriter<>(Registries.POTION))
+            .register("EntityType", EntityType.class, new EntityTypeRewriter())
+            .register("DisplaySlot", DisplaySlot.class, new EnumCloneRewriter<>(net.minecraft.world.scores.DisplaySlot.class) {
+                @Override
+                protected EnumValue.Builder rewriteEnumValue(net.minecraft.world.scores.DisplaySlot slot) {
+                    final String name;
+                    if (slot == net.minecraft.world.scores.DisplaySlot.LIST) {
+                        name = "PLAYER_LIST";
+                    } else {
+                        name = Formatting.formatKeyAsField(slot.getSerializedName());
+                    }
+
+                    return EnumValue.builder(name).argument(quoted(slot.getSerializedName()));
+                }
+            })
+            .register("SnifferState", Sniffer.State.class, new EnumCloneRewriter<>(net.minecraft.world.entity.animal.sniffer.Sniffer.State.class))
+            .register("PandaGene", Panda.Gene.class, new EnumCloneRewriter<>(net.minecraft.world.entity.animal.Panda.Gene.class) {
+                @Override
+                protected EnumValue.Builder rewriteEnumValue(net.minecraft.world.entity.animal.Panda.Gene gene) {
+                    return super.rewriteEnumValue(gene).argument(String.valueOf(gene.isRecessive()));
+                }
+            })
+            .register("CookingBookCategory", CookingBookCategory.class, new EnumCloneRewriter<>(net.minecraft.world.item.crafting.CookingBookCategory.class))
+            .register("CraftingBookCategory", CraftingBookCategory.class, new EnumCloneRewriter<>(net.minecraft.world.item.crafting.CraftingBookCategory.class))
+            .register("TropicalFishPattern", TropicalFish.Pattern.class, new EnumCloneRewriter<>(net.minecraft.world.entity.animal.TropicalFish.Pattern.class))
+            .register("BoatStatus", Boat.Status.class, new EnumCloneRewriter<>(net.minecraft.world.entity.vehicle.Boat.Status.class))
+            .register("FoxType", Fox.Type.class, new EnumCloneRewriter<>(net.minecraft.world.entity.animal.Fox.Variant.class))
+            .register("SalmonVariant", Salmon.Variant.class, new EnumCloneRewriter<>(net.minecraft.world.entity.animal.Salmon.Variant.class))
+            .register("ItemUseAnimation", ItemUseAnimation.class, new EnumCloneRewriter<>(net.minecraft.world.item.ItemUseAnimation.class))
+            .register("ItemRarity", ItemRarity.class, new EnumCloneRewriter<>(Rarity.class) {
+                @Override
+                protected EnumValue.Builder rewriteEnumValue(Rarity rarity) {
+                    return super.rewriteEnumValue(rarity).argument(
+                        "%s.%s".formatted(NamedTextColor.class.getSimpleName(), rarity.color().name())
+                    );
+                }
+            })
+            .register(Material.class, composite(
+                holder("Blocks", new MaterialRewriter.Blocks()),
+                //holder("Material#isTransparent", MaterialRewriter.IsTransparent()),
+
+                holder("Items", new MaterialRewriter.Items())
+            ))
+            .register(Statistic.class, composite(
+                holder("StatisticCustom", new StatisticRewriter.Custom()),
+                holder("StatisticType", new StatisticRewriter.Type())
+            ))
+            .register(Villager.class, composite(
+                holder("VillagerType", Villager.Type.class, new RegistryFieldRewriter<>(Registries.VILLAGER_TYPE, "getType")),
+                holder("VillagerProfession", Villager.Profession.class, new VillagerProfessionRewriter())
+            ))
+            .register("JukeboxSong", JukeboxSong.class, new RegistryFieldRewriter<>(Registries.JUKEBOX_SONG, "get") {
+                @Override
+                protected String rewriteFieldName(Holder.Reference<net.minecraft.world.item.JukeboxSong> reference) {
+                    String keyedName = super.rewriteFieldName(reference);
+                    if (!SourceVersion.isIdentifier(keyedName)) {
+                        // fallback to field names for invalid identifier (happens for 5, 11, 13 etc.)
+                        return RegistryEntries.byRegistryKey(Registries.JUKEBOX_SONG).getFieldNames().get(reference.key());
+                    }
+                    return keyedName;
+                }
+            })
+            .register("DamageTypeTags", DamageTypeTags.class, new RegistryTagRewriter<>(Registries.DAMAGE_TYPE, DamageType.class))
+            .register("MapCursorType", MapCursor.Type.class, new RegistryFieldRewriter<>(Registries.MAP_DECORATION_TYPE, "getType"))
+            .register("Structure", Structure.class, new RegistryFieldRewriter<>(Registries.STRUCTURE, "getStructure"))
+            .register("StructureType", StructureType.class, new RegistryFieldRewriter<>(Registries.STRUCTURE_TYPE, "getStructureType"))
+            .register("TrimPattern", TrimPattern.class, new RegistryFieldRewriter<>(Registries.TRIM_PATTERN, "getTrimPattern"))
+            .register("TrimMaterial", TrimMaterial.class, new RegistryFieldRewriter<>(Registries.TRIM_MATERIAL, "getTrimMaterial"))
+            .register("DamageType", DamageType.class, new RegistryFieldRewriter<>(Registries.DAMAGE_TYPE, "getDamageType"))
+            .register("GameEvent", GameEvent.class, new RegistryFieldRewriter<>(Registries.GAME_EVENT, "getEvent"))
+            .register("MusicInstrument", MusicInstrument.class, new RegistryFieldRewriter<>(Registries.INSTRUMENT, "getInstrument"))
+            .register("WolfVariant", Wolf.Variant.class, new RegistryFieldRewriter<>(Registries.WOLF_VARIANT, "getVariant"))
+            .register("CatType", Cat.Type.class, new RegistryFieldRewriter<>(Registries.CAT_VARIANT, "getType"))
+            .register("FrogVariant", Frog.Variant.class, new RegistryFieldRewriter<>(Registries.FROG_VARIANT, "getVariant"))
+            .register("PatternType", PatternType.class, new RegistryFieldRewriter<>(Registries.BANNER_PATTERN, "getType"))
+            .register("Biome", Biome.class, new RegistryFieldRewriter<>(Registries.BIOME, "getBiome"))
+            .register("Fluid", Fluid.class, new RegistryFieldRewriter<>(Registries.FLUID, "getFluid"))
+            .register("Attribute", Attribute.class, new RegistryFieldRewriter<>(Registries.ATTRIBUTE, "getAttribute"))
+            .register("Sound", Sound.class, new RegistryFieldRewriter<>(Registries.SOUND_EVENT, "getSound"))
+            .register("Art", Art.class, new RegistryFieldRewriter<>(Registries.PAINTING_VARIANT, "getArt"))
+            .register("MemoryKey", MemoryKey.class, new MemoryKeyRewriter())
+            .register("DataComponentTypes", DataComponentTypes.class, new DataComponentTypesRewriter())
+            .register("ItemType", ItemType.class, new ItemTypeRewriter())
+            .register("BlockType", BlockType.class, new BlockTypeRewriter())
+            .register("FeatureFlag", FeatureFlag.class, new FeatureFlagRewriter())
+            .register("Tag", Tag.class, new TagRewriter())
+            .register("MapPalette#colors", MapPalette.class, new MapPaletteRewriter());
+        RegistryBootstrapper.bootstrapApi(sourceSet);
+    }
+
+    private static void bootstrapServer(PatternSourceSetRewriter sourceSet) {
+        sourceSet
+            .register("CraftBlockData#MAP", Types.CRAFT_BLOCK_DATA, new CraftBlockDataMapping())
+            .register("CraftBlockEntityStates", Types.CRAFT_BLOCK_STATES, new CraftBlockEntityStateMapping())
+            .register(Types.CRAFT_STATISTIC, composite(
+                holder("CraftStatisticCustom", new StatisticRewriter.CraftCustom()),
+                holder("CraftStatisticType", new StatisticRewriter.CraftType())
+            ))
+            .register(Types.CRAFT_POTION_UTIL, composite(
+                holder("CraftPotionUtil#upgradeable", new CraftPotionUtilRewriter("strong")),
+                holder("CraftPotionUtil#extendable", new CraftPotionUtilRewriter("long"))
+            ))
+            .register("PaperFeatureFlagProviderImpl#FLAGS", Types.PAPER_FEATURE_FLAG_PROVIDER_IMPL, new PaperFeatureFlagMapping())
+            .register("MobGoalHelper#bukkitMap", Types.MOB_GOAL_HELPER, new SearchReplaceRewriter() {
+                @Override
+                protected void insert(SearchMetadata metadata, StringBuilder builder) {
+                    for (Map.Entry<Class<? extends Mob>, Class<? extends org.bukkit.entity.Mob>> entry : MobGoalNames.bukkitMap.entrySet()) {
+                        builder.append(metadata.indent()).append("bukkitMap.put(%s.class, %s.class);".formatted(
+                            entry.getKey().getCanonicalName(), this.importCollector.getShortName(entry.getValue())
+                        ));
+                        builder.append('\n');
+                    }
+                }
+            });
+        RegistryBootstrapper.bootstrapServer(sourceSet);
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java
new file mode 100644
index 0000000000..c84fcee518
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java
@@ -0,0 +1,45 @@
+package io.papermc.generator.registry;
+
+import io.papermc.generator.rewriter.registration.PatternSourceSetRewriter;
+import io.papermc.generator.rewriter.types.Types;
+import io.papermc.generator.rewriter.types.registry.PaperRegistriesRewriter;
+import io.papermc.generator.rewriter.types.registry.RegistryEventsRewriter;
+import io.papermc.generator.types.SourceGenerator;
+import io.papermc.generator.types.registry.GeneratedKeyType;
+import io.papermc.generator.types.registry.GeneratedTagKeyType;
+import io.papermc.paper.registry.event.RegistryEvents;
+import java.util.List;
+import net.minecraft.core.registries.Registries;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class RegistryBootstrapper {
+
+    private static final String PAPER_REGISTRY_PACKAGE = "io.papermc.paper.registry";
+
+    public static void bootstrap(List<SourceGenerator> generators) {
+        // typed/tag keys
+        RegistryEntries.forEach(entry -> {
+            generators.add(new GeneratedKeyType<>(PAPER_REGISTRY_PACKAGE + ".keys", entry));
+            if (entry.registry().listTags().findAny().isPresent()) {
+                generators.add(new GeneratedTagKeyType(entry, PAPER_REGISTRY_PACKAGE + ".keys.tags"));
+            }
+        });
+
+        // todo remove once entity type is a registry
+        generators.add(new GeneratedTagKeyType(RegistryEntries.byRegistryKey(Registries.ENTITY_TYPE), PAPER_REGISTRY_PACKAGE + ".keys.tags"));
+    }
+
+    public static void bootstrap(PatternSourceSetRewriter apiSourceSet, PatternSourceSetRewriter serverSourceSet) {
+        bootstrapApi(apiSourceSet);
+        bootstrapServer(serverSourceSet);
+    }
+
+    public static void bootstrapApi(PatternSourceSetRewriter sourceSet) {
+        sourceSet.register("RegistryEvents", RegistryEvents.class, new RegistryEventsRewriter());
+    }
+
+    public static void bootstrapServer(PatternSourceSetRewriter sourceSet) {
+        sourceSet.register("RegistryDefinitions", Types.PAPER_REGISTRIES, new PaperRegistriesRewriter());
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java
new file mode 100644
index 0000000000..4c065cf69d
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java
@@ -0,0 +1,204 @@
+package io.papermc.generator.registry;
+
+import io.papermc.generator.utils.ClassHelper;
+import io.papermc.paper.datacomponent.DataComponentType;
+import io.papermc.paper.datacomponent.DataComponentTypes;
+import io.papermc.paper.registry.data.BannerPatternRegistryEntry;
+import io.papermc.paper.registry.data.DamageTypeRegistryEntry;
+import io.papermc.paper.registry.data.EnchantmentRegistryEntry;
+import io.papermc.paper.registry.data.GameEventRegistryEntry;
+import io.papermc.paper.registry.data.PaintingVariantRegistryEntry;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+import net.minecraft.core.Registry;
+import net.minecraft.core.component.DataComponents;
+import net.minecraft.core.particles.ParticleTypes;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.sounds.SoundEvents;
+import net.minecraft.world.damagesource.DamageTypes;
+import net.minecraft.world.effect.MobEffects;
+import net.minecraft.world.entity.ai.attributes.Attributes;
+import net.minecraft.world.entity.ai.memory.MemoryModuleType;
+import net.minecraft.world.entity.animal.CatVariant;
+import net.minecraft.world.entity.animal.FrogVariant;
+import net.minecraft.world.entity.animal.WolfVariants;
+import net.minecraft.world.entity.decoration.PaintingVariants;
+import net.minecraft.world.entity.npc.VillagerProfession;
+import net.minecraft.world.entity.npc.VillagerType;
+import net.minecraft.world.item.Instruments;
+import net.minecraft.world.item.Items;
+import net.minecraft.world.item.JukeboxSongs;
+import net.minecraft.world.item.alchemy.Potions;
+import net.minecraft.world.item.enchantment.Enchantments;
+import net.minecraft.world.item.equipment.trim.TrimMaterials;
+import net.minecraft.world.item.equipment.trim.TrimPatterns;
+import net.minecraft.world.level.biome.Biomes;
+import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.entity.BannerPatterns;
+import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
+import net.minecraft.world.level.material.Fluids;
+import net.minecraft.world.level.saveddata.maps.MapDecorationTypes;
+import org.bukkit.Art;
+import org.bukkit.Fluid;
+import org.bukkit.GameEvent;
+import org.bukkit.JukeboxSong;
+import org.bukkit.Keyed;
+import org.bukkit.MusicInstrument;
+import org.bukkit.Particle;
+import org.bukkit.Sound;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.block.Biome;
+import org.bukkit.block.BlockType;
+import org.bukkit.block.banner.PatternType;
+import org.bukkit.damage.DamageType;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Cat;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Frog;
+import org.bukkit.entity.Villager;
+import org.bukkit.entity.Wolf;
+import org.bukkit.entity.memory.MemoryKey;
+import org.bukkit.generator.structure.Structure;
+import org.bukkit.generator.structure.StructureType;
+import org.bukkit.inventory.ItemType;
+import org.bukkit.inventory.MenuType;
+import org.bukkit.inventory.meta.trim.TrimMaterial;
+import org.bukkit.inventory.meta.trim.TrimPattern;
+import org.bukkit.map.MapCursor;
+import org.bukkit.potion.PotionEffectType;
+import org.bukkit.potion.PotionType;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class RegistryEntries {
+
+    // CraftBukkit entry where implementation start by "Craft"
+    private static <T> RegistryEntry<T> entry(ResourceKey<? extends Registry<T>> registryKey, Class<?> holderElementsClass, Class<? extends Keyed> apiClass) {
+        return entry(registryKey, holderElementsClass, apiClass, "Craft");
+    }
+
+    private static <T> RegistryEntry<T> entry(ResourceKey<? extends Registry<T>> registryKey, Class<?> holderElementsClass, Class<? extends Keyed> apiClass, String implPrefix) {
+        String name = io.papermc.typewriter.util.ClassHelper.retrieveFullNestedName(apiClass);
+        RegistryKeyField<T> registryKeyField = (RegistryKeyField<T>) REGISTRY_KEY_FIELDS.get(registryKey);
+        String[] classes = name.split("\\.");
+        if (classes.length == 0) {
+            return new RegistryEntry<>(registryKey, registryKeyField, holderElementsClass, apiClass, implPrefix.concat(apiClass.getSimpleName()));
+        }
+
+        String implName = Arrays.stream(classes).map(implPrefix::concat).collect(Collectors.joining("."));
+        return new RegistryEntry<>(registryKey, registryKeyField, holderElementsClass, apiClass, implName);
+    }
+
+    @Deprecated
+    private static <T> RegistryEntry<T> inconsistentEntry(ResourceKey<? extends Registry<T>> registryKey, Class<?> holderElementsClass, Class<? extends Keyed> apiClass, String implClass) {
+        return new RegistryEntry<>(registryKey, (RegistryKeyField<T>) REGISTRY_KEY_FIELDS.get(registryKey), holderElementsClass, apiClass, implClass);
+    }
+
+    private static final Map<ResourceKey<? extends Registry<?>>, RegistryKeyField<?>> REGISTRY_KEY_FIELDS;
+    static {
+        Map<ResourceKey<? extends Registry<?>>, RegistryKeyField<?>> registryKeyFields = new IdentityHashMap<>();
+        try {
+            for (Field field : Registries.class.getDeclaredFields()) {
+                if (!ResourceKey.class.isAssignableFrom(field.getType())) {
+                    continue;
+                }
+
+                if (ClassHelper.isStaticConstant(field, Modifier.PUBLIC)) {
+                    Type elementType = ClassHelper.getNestedTypeParameter(field.getGenericType(), ResourceKey.class, Registry.class, null);
+                    if (elementType != null) {
+                        registryKeyFields.put(((ResourceKey<? extends Registry<?>>) field.get(null)), new RegistryKeyField<>(ClassHelper.eraseType(elementType), field.getName()));
+                    }
+                }
+            }
+        } catch (ReflectiveOperationException ex) {
+            throw new RuntimeException(ex);
+        }
+        REGISTRY_KEY_FIELDS = Collections.unmodifiableMap(registryKeyFields);
+    }
+
+    public static final Set<Class<?>> REGISTRY_CLASS_NAME_BASED_ON_API = Set.of(
+        BlockType.class,
+        ItemType.class
+    );
+
+    public static final List<RegistryEntry<?>> BUILT_IN = List.of(
+        entry(Registries.GAME_EVENT, net.minecraft.world.level.gameevent.GameEvent.class, GameEvent.class).apiRegistryBuilder(GameEventRegistryEntry.Builder.class, "PaperGameEventRegistryEntry.PaperBuilder"),
+        entry(Registries.STRUCTURE_TYPE, net.minecraft.world.level.levelgen.structure.StructureType.class, StructureType.class),
+        entry(Registries.MOB_EFFECT, MobEffects.class, PotionEffectType.class),
+        entry(Registries.BLOCK, Blocks.class, BlockType.class),
+        entry(Registries.ITEM, Items.class, ItemType.class),
+        entry(Registries.CAT_VARIANT, CatVariant.class, Cat.Type.class),
+        entry(Registries.FROG_VARIANT, FrogVariant.class, Frog.Variant.class),
+        entry(Registries.VILLAGER_PROFESSION, VillagerProfession.class, Villager.Profession.class),
+        entry(Registries.VILLAGER_TYPE, VillagerType.class, Villager.Type.class),
+        entry(Registries.MAP_DECORATION_TYPE, MapDecorationTypes.class, MapCursor.Type.class),
+        entry(Registries.MENU, net.minecraft.world.inventory.MenuType.class, MenuType.class),
+        entry(Registries.ATTRIBUTE, Attributes.class, Attribute.class),
+        entry(Registries.FLUID, Fluids.class, Fluid.class),
+        entry(Registries.SOUND_EVENT, SoundEvents.class, Sound.class).allowDirect().apiRegistryField("SOUNDS"),
+        entry(Registries.DATA_COMPONENT_TYPE, DataComponents.class, DataComponentType.class, "Paper").preload(DataComponentTypes.class).apiAccessName("of")
+    );
+
+    public static final List<RegistryEntry<?>> DATA_DRIVEN = List.of(
+        entry(Registries.BIOME, Biomes.class, Biome.class).delayed(),
+        entry(Registries.STRUCTURE, BuiltinStructures.class, Structure.class).delayed(),
+        entry(Registries.TRIM_MATERIAL, TrimMaterials.class, TrimMaterial.class).allowDirect().delayed(),
+        entry(Registries.TRIM_PATTERN, TrimPatterns.class, TrimPattern.class).allowDirect().delayed(),
+        entry(Registries.DAMAGE_TYPE, DamageTypes.class, DamageType.class).apiRegistryBuilder(DamageTypeRegistryEntry.Builder.class, "PaperDamageTypeRegistryEntry.PaperBuilder").delayed(),
+        entry(Registries.WOLF_VARIANT, WolfVariants.class, Wolf.Variant.class).delayed(),
+        entry(Registries.ENCHANTMENT, Enchantments.class, Enchantment.class).apiRegistryBuilder(EnchantmentRegistryEntry.Builder.class, "PaperEnchantmentRegistryEntry.PaperBuilder").serializationUpdater("ENCHANTMENT_RENAME").delayed(),
+        entry(Registries.JUKEBOX_SONG, JukeboxSongs.class, JukeboxSong.class).delayed(),
+        entry(Registries.BANNER_PATTERN, BannerPatterns.class, PatternType.class).allowDirect().apiRegistryBuilder(BannerPatternRegistryEntry.Builder.class, "PaperBannerPatternRegistryEntry.PaperBuilder").delayed(),
+        entry(Registries.PAINTING_VARIANT, PaintingVariants.class, Art.class).allowDirect().apiRegistryBuilder(PaintingVariantRegistryEntry.Builder.class, "PaperPaintingVariantRegistryEntry.PaperBuilder").apiRegistryField("ART").delayed(),
+        entry(Registries.INSTRUMENT, Instruments.class, MusicInstrument.class).allowDirect().delayed()
+    );
+
+    public static final List<RegistryEntry<?>> API_ONLY = List.of(
+        entry(Registries.ENTITY_TYPE, net.minecraft.world.entity.EntityType.class, EntityType.class),
+        entry(Registries.PARTICLE_TYPE, ParticleTypes.class, Particle.class),
+        entry(Registries.POTION, Potions.class, PotionType.class),
+        entry(Registries.MEMORY_MODULE_TYPE, MemoryModuleType.class, MemoryKey.class)
+    );
+
+    public static final Map<ResourceKey<? extends Registry<?>>, RegistryEntry<?>> BY_REGISTRY_KEY;
+    static {
+        Map<ResourceKey<? extends Registry<?>>, RegistryEntry<?>> byRegistryKey = new IdentityHashMap<>(BUILT_IN.size() + DATA_DRIVEN.size() + API_ONLY.size());
+        forEach(entry -> {
+            byRegistryKey.put(entry.registryKey(), entry);
+        }, RegistryEntries.BUILT_IN, RegistryEntries.DATA_DRIVEN, RegistryEntries.API_ONLY);
+        BY_REGISTRY_KEY = Collections.unmodifiableMap(byRegistryKey);
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> RegistryEntry<T> byRegistryKey(ResourceKey<? extends Registry<T>> registryKey) {
+        return (RegistryEntry<T>) Objects.requireNonNull(BY_REGISTRY_KEY.get(registryKey));
+    }
+
+    // real registries
+    public static void forEach(Consumer<RegistryEntry<?>> callback) {
+        forEach(callback, RegistryEntries.BUILT_IN, RegistryEntries.DATA_DRIVEN);
+    }
+
+    @SafeVarargs
+    public static void forEach(Consumer<RegistryEntry<?>> callback, List<RegistryEntry<?>>... datas) {
+        for (List<RegistryEntry<?>> data : datas) {
+            for (RegistryEntry<?> entry : data) {
+                callback.accept(entry);
+            }
+        }
+    }
+
+    private RegistryEntries() {
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntry.java b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntry.java
new file mode 100644
index 0000000000..26cbd71ca5
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntry.java
@@ -0,0 +1,214 @@
+package io.papermc.generator.registry;
+
+import com.google.common.base.Preconditions;
+import io.papermc.generator.Main;
+import io.papermc.generator.utils.ClassHelper;
+import java.lang.constant.ConstantDescs;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Function;
+import javax.lang.model.SourceVersion;
+import net.minecraft.core.Holder;
+import net.minecraft.core.Registry;
+import net.minecraft.resources.ResourceKey;
+import org.bukkit.Keyed;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+@NullMarked
+public final class RegistryEntry<T> {
+
+    private final ResourceKey<? extends Registry<T>> registryKey;
+    private final RegistryKeyField<T> registryKeyField;
+    private final Class<T> elementClass;
+    private final Class<?> holderElementsClass;
+    private boolean allowDirect;
+
+    private final Class<? extends Keyed> apiClass; // TODO remove Keyed
+    private Class<?> preloadClass;
+    private final String implClass;
+
+    private @Nullable Class<?> apiRegistryBuilder;
+    private @Nullable String apiRegistryBuilderImpl;
+
+    private @Nullable String fieldRename;
+    private boolean delayed;
+    private String apiAccessName = ConstantDescs.INIT_NAME;
+    private Optional<String> apiRegistryField = Optional.empty();
+
+    private @Nullable Map<ResourceKey<T>, String> fieldNames;
+
+    public RegistryEntry(ResourceKey<? extends Registry<T>> registryKey, RegistryKeyField<T> registryKeyField, Class<?> holderElementsClass, Class<? extends Keyed> apiClass, String implClass) {
+        this.registryKey = registryKey;
+        this.registryKeyField = registryKeyField;
+        this.elementClass = registryKeyField.elementClass();
+        this.holderElementsClass = holderElementsClass;
+        this.apiClass = apiClass;
+        this.preloadClass = apiClass;
+        this.implClass = implClass;
+    }
+
+    public ResourceKey<? extends Registry<T>> registryKey() {
+        return this.registryKey;
+    }
+
+    public Registry<T> registry() {
+        return Main.REGISTRY_ACCESS.lookupOrThrow(this.registryKey);
+    }
+
+    public String registryKeyField() {
+        return this.registryKeyField.name();
+    }
+
+    public Class<? extends Keyed> apiClass() {
+        return this.apiClass;
+    }
+
+    public String implClass() {
+        return this.implClass;
+    }
+
+    public RegistryEntry<T> allowDirect() {
+        this.allowDirect = true;
+        return this;
+    }
+
+    public RegistryEntry<T> delayed() {
+        this.delayed = true;
+        return this;
+    }
+
+    public RegistryEntry<T> preload(Class<?> klass) {
+        this.preloadClass = klass;
+        return this;
+    }
+
+    public RegistryEntry<T> apiAccessName(String name) {
+        Preconditions.checkArgument(SourceVersion.isIdentifier(name) && !SourceVersion.isKeyword(name), "Invalid accessor name");
+        this.apiAccessName = name;
+        return this;
+    }
+
+    public RegistryEntry<T> serializationUpdater(String fieldName) {
+        this.fieldRename = fieldName;
+        return this;
+    }
+
+    public boolean canAllowDirect() {
+        return this.allowDirect;
+    }
+
+    public boolean isDelayed() {
+        return this.delayed;
+    }
+
+    public String apiAccessName() {
+        return this.apiAccessName;
+    }
+
+    public Class<?> preloadClass() {
+        return this.preloadClass;
+    }
+
+    public @Nullable String fieldRename() {
+        return this.fieldRename;
+    }
+
+    public @Nullable Class<?> apiRegistryBuilder() {
+        return this.apiRegistryBuilder;
+    }
+
+    public @Nullable String apiRegistryBuilderImpl() {
+        return this.apiRegistryBuilderImpl;
+    }
+
+    public RegistryEntry<T> apiRegistryBuilder(Class<?> builderClass, String builderImplClass) {
+        this.apiRegistryBuilder = builderClass;
+        this.apiRegistryBuilderImpl = builderImplClass;
+        return this;
+    }
+
+    public Optional<String> apiRegistryField() {
+        return this.apiRegistryField;
+    }
+
+    public RegistryEntry<T> apiRegistryField(String registryField) {
+        this.apiRegistryField = Optional.of(registryField);
+        return this;
+    }
+
+    public String keyClassName() {
+        if (RegistryEntries.REGISTRY_CLASS_NAME_BASED_ON_API.contains(this.apiClass)) {
+            return this.apiClass.getSimpleName();
+        }
+
+        return this.elementClass.getSimpleName();
+    }
+
+    public boolean allowCustomKeys() {
+        return this.apiRegistryBuilder != null || RegistryEntries.DATA_DRIVEN.contains(this);
+    }
+
+    private <TO> Map<ResourceKey<T>, TO> getFields(Map<ResourceKey<T>, TO> map, Function<Field, @Nullable TO> transform) {
+        Registry<T> registry = this.registry();
+        try {
+            for (Field field : this.holderElementsClass.getDeclaredFields()) {
+                if (!ResourceKey.class.isAssignableFrom(field.getType()) && !Holder.Reference.class.isAssignableFrom(field.getType()) && !this.elementClass.isAssignableFrom(field.getType())) {
+                    continue;
+                }
+
+                if (ClassHelper.isStaticConstant(field, Modifier.PUBLIC)) {
+                    ResourceKey<T> key = null;
+                    if (this.elementClass.isAssignableFrom(field.getType())) {
+                        key = registry.getResourceKey(this.elementClass.cast(field.get(null))).orElseThrow();
+                    } else {
+                        if (field.getGenericType() instanceof ParameterizedType complexType && complexType.getActualTypeArguments().length == 1 &&
+                            complexType.getActualTypeArguments()[0] == this.elementClass) {
+
+                            if (Holder.Reference.class.isAssignableFrom(field.getType())) {
+                                key = ((Holder.Reference<T>) field.get(null)).key();
+                            } else {
+                                key = (ResourceKey<T>) field.get(null);
+                            }
+                        }
+                    }
+                    if (key != null) {
+                        TO value = transform.apply(field);
+                        if (value != null) {
+                            map.put(key, value);
+                        }
+                    }
+                }
+            }
+        } catch (ReflectiveOperationException ex) {
+            throw new RuntimeException(ex);
+        }
+        return map;
+    }
+
+    public Map<ResourceKey<T>, String> getFieldNames() {
+        if (this.fieldNames == null) {
+            this.fieldNames = this.getFields(Field::getName);
+        }
+        return this.fieldNames;
+    }
+
+    public <TO> Map<ResourceKey<T>, TO> getFields(Function<Field, @Nullable TO> transform) {
+        return Collections.unmodifiableMap(this.getFields(new IdentityHashMap<>(), transform));
+    }
+
+    @Override
+    public String toString() {
+        return "RegistryEntry[" +
+            "registryKey=" + this.registryKey + ", " +
+            "registryKeyField=" + this.registryKeyField + ", " +
+            "apiClass=" + this.apiClass + ", " +
+            "implClass=" + this.implClass + ", " +
+            ']';
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/registry/RegistryKeyField.java b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryKeyField.java
new file mode 100644
index 0000000000..7a91f0bd4b
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryKeyField.java
@@ -0,0 +1,7 @@
+package io.papermc.generator.registry;
+
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public record RegistryKeyField<T>(Class<T> elementClass, String name) {
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/PaperPatternSourceSetRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/PaperPatternSourceSetRewriter.java
new file mode 100644
index 0000000000..2735b23a8c
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/PaperPatternSourceSetRewriter.java
@@ -0,0 +1,75 @@
+package io.papermc.generator.rewriter.registration;
+
+import io.papermc.generator.rewriter.utils.Annotations;
+import io.papermc.generator.types.SimpleGenerator;
+import io.papermc.paper.generated.GeneratedFrom;
+import io.papermc.typewriter.ClassNamed;
+import io.papermc.typewriter.SourceFile;
+import io.papermc.typewriter.context.IndentUnit;
+import io.papermc.typewriter.context.SourcesMetadata;
+import io.papermc.typewriter.registration.SourceSetRewriterImpl;
+import io.papermc.typewriter.replace.CompositeRewriter;
+import io.papermc.typewriter.replace.ReplaceOptions;
+import io.papermc.typewriter.replace.ReplaceOptionsLike;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.io.File;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.SharedConstants;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.VisibleForTesting;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+@NullMarked
+public class PaperPatternSourceSetRewriter extends SourceSetRewriterImpl<PatternSourceSetRewriter> implements PatternSourceSetRewriter {
+
+    private static final String COMMENT_MARKER_FORMAT = "%s generate - %s"; // {0} = Start|End {1} = pattern
+    private static final IndentUnit INDENT_UNIT = IndentUnit.parse(SimpleGenerator.INDENT_UNIT);
+
+    public PaperPatternSourceSetRewriter() {
+        this(Collections.emptySet());
+    }
+
+    public PaperPatternSourceSetRewriter(Set<Path> classpath) {
+        super(SourcesMetadata.of(INDENT_UNIT, b -> b.classpath(classpath))); // let the runtime java version since it will always be in sync with what paperweight use
+    }
+
+    public static PaperPatternSourceSetRewriter from(String classpath) {
+        return new PaperPatternSourceSetRewriter(Arrays.stream(classpath.split(File.pathSeparator)).map(Path::of).collect(Collectors.toSet()));
+    }
+
+    @VisibleForTesting
+    public SourcesMetadata getMetadata() {
+        return this.metadata;
+    }
+
+    private static ReplaceOptionsLike getOptions(String pattern, @Nullable ClassNamed targetClass) {
+        return ReplaceOptions.between(
+                COMMENT_MARKER_FORMAT.formatted("Start", pattern),
+                COMMENT_MARKER_FORMAT.formatted("End", pattern)
+            )
+            .generatedComment(Annotations.annotationStyle(GeneratedFrom.class) + " " + SharedConstants.getCurrentVersion().getName())
+            .targetClass(targetClass);
+    }
+
+    @Override
+    public PatternSourceSetRewriter register(String pattern, ClassNamed targetClass, SearchReplaceRewriter rewriter) {
+        return super.register(SourceFile.of(targetClass.topLevel()), rewriter.withOptions(getOptions(pattern, targetClass)).customName(pattern));
+    }
+
+    @Override
+    public PatternSourceSetRewriter register(ClassNamed mainClass, CompositeRewriter rewriter) {
+        return super.register(SourceFile.of(mainClass), rewriter);
+    }
+
+    @Contract(value = "_ -> new", pure = true)
+    public static CompositeRewriter composite(RewriterHolder... holders) {
+        return CompositeRewriter.bind(Arrays.stream(holders)
+            .map(holder -> holder.transform(PaperPatternSourceSetRewriter::getOptions))
+            .toArray(SearchReplaceRewriter[]::new));
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/PatternSourceSetRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/PatternSourceSetRewriter.java
new file mode 100644
index 0000000000..0189efb104
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/PatternSourceSetRewriter.java
@@ -0,0 +1,23 @@
+package io.papermc.generator.rewriter.registration;
+
+import io.papermc.typewriter.ClassNamed;
+import io.papermc.typewriter.registration.SourceSetRewriter;
+import io.papermc.typewriter.replace.CompositeRewriter;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface PatternSourceSetRewriter extends SourceSetRewriter<PatternSourceSetRewriter> {
+
+    default PatternSourceSetRewriter register(String pattern, Class<?> targetClass, SearchReplaceRewriter rewriter) {
+        return register(pattern, new ClassNamed(targetClass), rewriter);
+    }
+
+    PatternSourceSetRewriter register(String pattern, ClassNamed targetClass, SearchReplaceRewriter rewriter);
+
+    default PatternSourceSetRewriter register(Class<?> mainClass, CompositeRewriter rewriter) {
+        return this.register(new ClassNamed(mainClass), rewriter);
+    }
+
+    PatternSourceSetRewriter register(ClassNamed mainClass, CompositeRewriter rewriter);
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/RewriterHolder.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/RewriterHolder.java
new file mode 100644
index 0000000000..0d4809a214
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/registration/RewriterHolder.java
@@ -0,0 +1,27 @@
+package io.papermc.generator.rewriter.registration;
+
+import io.papermc.typewriter.ClassNamed;
+import io.papermc.typewriter.replace.ReplaceOptionsLike;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.util.function.BiFunction;
+import org.jetbrains.annotations.Contract;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+@NullMarked
+public record RewriterHolder(String pattern, @Nullable ClassNamed targetClass, SearchReplaceRewriter rewriter) {
+
+    @Contract(value = "_, _, _ -> new", pure = true)
+    public static RewriterHolder holder(String pattern, @Nullable Class<?> targetClass, SearchReplaceRewriter rewriter) {
+        return new RewriterHolder(pattern, targetClass == null ? null : new ClassNamed(targetClass), rewriter);
+    }
+
+    @Contract(value = "_, _ -> new", pure = true)
+    public static RewriterHolder holder(String pattern, SearchReplaceRewriter rewriter) {
+        return holder(pattern, null, rewriter);
+    }
+
+    public SearchReplaceRewriter transform(BiFunction<String, @Nullable ClassNamed, ReplaceOptionsLike> patternMapper) {
+        return this.rewriter.withOptions(patternMapper.apply(this.pattern, this.targetClass)).customName(this.pattern);
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/Types.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/Types.java
new file mode 100644
index 0000000000..f733d019dc
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/Types.java
@@ -0,0 +1,28 @@
+package io.papermc.generator.rewriter.types;
+
+import io.papermc.typewriter.ClassNamed;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class Types {
+
+    public static final String BASE_PACKAGE = "org.bukkit.craftbukkit";
+
+    public static final ClassNamed CRAFT_BLOCK_DATA = ClassNamed.of(BASE_PACKAGE + ".block.data", "CraftBlockData");
+
+    public static final ClassNamed CRAFT_BLOCK_STATES = ClassNamed.of(BASE_PACKAGE + ".block", "CraftBlockStates");
+
+    public static final ClassNamed CRAFT_STATISTIC = ClassNamed.of(BASE_PACKAGE, "CraftStatistic");
+
+    public static final ClassNamed CRAFT_POTION_UTIL = ClassNamed.of(BASE_PACKAGE + ".potion", "CraftPotionUtil");
+
+    public static final ClassNamed FIELD_RENAME = ClassNamed.of(BASE_PACKAGE + ".legacy", "FieldRename");
+
+    public static final ClassNamed PAPER_REGISTRIES = ClassNamed.of("io.papermc.paper.registry", "PaperRegistries");
+
+    public static final ClassNamed PAPER_FEATURE_FLAG_PROVIDER_IMPL = ClassNamed.of("io.papermc.paper.world.flag", "PaperFeatureFlagProviderImpl");
+
+    public static final ClassNamed PAPER_SIMPLE_REGISTRY = ClassNamed.of("io.papermc.paper.registry", "PaperSimpleRegistry");
+
+    public static final ClassNamed MOB_GOAL_HELPER = ClassNamed.of("com.destroystokyo.paper.entity.ai", "MobGoalHelper");
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/EnumRegistryRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/EnumRegistryRewriter.java
new file mode 100644
index 0000000000..4c6d055d89
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/EnumRegistryRewriter.java
@@ -0,0 +1,82 @@
+package io.papermc.generator.rewriter.types.registry;
+
+import com.google.common.base.Suppliers;
+import io.papermc.generator.Main;
+import io.papermc.generator.rewriter.utils.Annotations;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.generator.utils.experimental.ExperimentalCollector;
+import io.papermc.generator.utils.experimental.SingleFlagHolder;
+import io.papermc.typewriter.preset.EnumRewriter;
+import io.papermc.typewriter.preset.model.EnumValue;
+import java.util.Map;
+import java.util.function.Supplier;
+import net.minecraft.core.Holder;
+import net.minecraft.core.Registry;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.world.flag.FeatureElement;
+import net.minecraft.world.flag.FeatureFlags;
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+import static io.papermc.generator.utils.Formatting.quoted;
+
+@NullMarked
+@ApiStatus.Obsolete
+public class EnumRegistryRewriter<T> extends EnumRewriter<Holder.Reference<T>> {
+
+    private final Registry<T> registry;
+    private final Supplier<Map<ResourceKey<T>, SingleFlagHolder>> experimentalKeys;
+    private final boolean isFilteredRegistry;
+    private final boolean hasKeyArgument;
+
+    public EnumRegistryRewriter(ResourceKey<? extends Registry<T>> registryKey) {
+        this(registryKey, true);
+    }
+
+    protected EnumRegistryRewriter(ResourceKey<? extends Registry<T>> registryKey, boolean hasKeyArgument) {
+        this.registry = Main.REGISTRY_ACCESS.lookupOrThrow(registryKey);
+        this.experimentalKeys = Suppliers.memoize(() -> ExperimentalCollector.collectDataDrivenElementIds(this.registry));
+        this.isFilteredRegistry = FeatureElement.FILTERED_REGISTRIES.contains(registryKey);
+        this.hasKeyArgument = hasKeyArgument;
+    }
+
+    @Override
+    protected Iterable<Holder.Reference<T>> getValues() {
+        return this.registry.listElements().sorted(Formatting.alphabeticKeyOrder(reference -> reference.key().location().getPath()))::iterator;
+    }
+
+    @Override
+    protected EnumValue.Builder rewriteEnumValue(Holder.Reference<T> reference) {
+        EnumValue.Builder value = EnumValue.builder(Formatting.formatKeyAsField(reference.key().location().getPath()));
+        if (this.hasKeyArgument) {
+            value.argument(quoted(reference.key().location().getPath()));
+        }
+        return value;
+    }
+
+    @Override
+    protected void appendEnumValue(Holder.Reference<T> reference, StringBuilder builder, String indent, boolean reachEnd) {
+        // experimental annotation
+        SingleFlagHolder requiredFeature = this.getRequiredFeature(reference);
+        if (requiredFeature != null) {
+            Annotations.experimentalAnnotations(builder, indent, this.importCollector, requiredFeature);
+        }
+
+        super.appendEnumValue(reference, builder, indent, reachEnd);
+    }
+
+    protected @Nullable SingleFlagHolder getRequiredFeature(Holder.Reference<T> reference) {
+        if (this.isFilteredRegistry) {
+            // built-in registry
+            FeatureElement element = (FeatureElement) reference.value();
+            if (FeatureFlags.isExperimental(element.requiredFeatures())) {
+                return SingleFlagHolder.fromSet(element.requiredFeatures());
+            }
+        } else {
+            // data-driven registry
+            return this.experimentalKeys.get().get(reference.key());
+        }
+        return null;
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/FeatureFlagRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/FeatureFlagRewriter.java
new file mode 100644
index 0000000000..ede08c4a00
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/FeatureFlagRewriter.java
@@ -0,0 +1,61 @@
+package io.papermc.generator.rewriter.types.registry;
+
+import com.mojang.logging.LogUtils;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.typewriter.SourceFile;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.util.Iterator;
+import java.util.Map;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.flag.FeatureFlag;
+import net.minecraft.world.flag.FeatureFlagSet;
+import net.minecraft.world.flag.FeatureFlags;
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
+import org.slf4j.Logger;
+
+import static io.papermc.generator.rewriter.utils.Annotations.annotation;
+import static io.papermc.generator.utils.Formatting.quoted;
+
+@NullMarked
+public class FeatureFlagRewriter extends SearchReplaceRewriter {
+
+    private static final Logger LOGGER = LogUtils.getLogger();
+
+    @Override
+    public boolean registerFor(SourceFile file) {
+        try {
+            org.bukkit.FeatureFlag.class.getDeclaredMethod("create", String.class);
+        } catch (NoSuchMethodException e) {
+            LOGGER.error("Fetch method not found, skipping the rewriter for feature flag", e);
+            return false;
+        }
+
+        return super.registerFor(file);
+    }
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        Iterator<Map.Entry<ResourceLocation, FeatureFlag>> flagIterator = FeatureFlags.REGISTRY.names.entrySet().stream().sorted(Formatting.alphabeticKeyOrder(entry -> entry.getKey().getPath())).iterator();
+        while (flagIterator.hasNext()) {
+            Map.Entry<ResourceLocation, FeatureFlag> entry = flagIterator.next();
+            ResourceLocation name = entry.getKey();
+            if (FeatureFlags.isExperimental(FeatureFlagSet.of(entry.getValue()))) {
+                builder.append(metadata.indent()).append(annotation(ApiStatus.Experimental.class, this.importCollector)).append('\n');
+            }
+
+            builder.append(metadata.indent());
+
+            builder.append(org.bukkit.FeatureFlag.class.getSimpleName()).append(' ').append(Formatting.formatKeyAsField(name.getPath()));
+            builder.append(" = ");
+            builder.append("create(%s)".formatted(quoted(name.getPath())));
+            builder.append(';');
+
+            builder.append('\n');
+            if (flagIterator.hasNext()) {
+                builder.append('\n');
+            }
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperFeatureFlagMapping.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperFeatureFlagMapping.java
new file mode 100644
index 0000000000..06287f65a0
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperFeatureFlagMapping.java
@@ -0,0 +1,30 @@
+package io.papermc.generator.rewriter.types.registry;
+
+import io.papermc.generator.utils.Formatting;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.util.Iterator;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.flag.FeatureFlags;
+import org.bukkit.FeatureFlag;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class PaperFeatureFlagMapping extends SearchReplaceRewriter {
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        Iterator<ResourceLocation> flagIterator = FeatureFlags.REGISTRY.toNames(FeatureFlags.REGISTRY.allFlags()).stream().sorted(Formatting.alphabeticKeyOrder(ResourceLocation::getPath)).iterator();
+
+        while (flagIterator.hasNext()) {
+            ResourceLocation name = flagIterator.next();
+            String keyedName = Formatting.formatKeyAsField(name.getPath());
+            builder.append(metadata.indent());
+            builder.append("%s.%s, %s.%s".formatted(FeatureFlag.class.getSimpleName(), keyedName, FeatureFlags.class.getSimpleName(), keyedName));
+            if (flagIterator.hasNext()) {
+                builder.append(',');
+            }
+            builder.append('\n');
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java
new file mode 100644
index 0000000000..ce5c691140
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java
@@ -0,0 +1,94 @@
+package io.papermc.generator.rewriter.types.registry;
+
+import com.google.common.base.CaseFormat;
+import io.papermc.generator.registry.RegistryEntries;
+import io.papermc.generator.registry.RegistryEntry;
+import io.papermc.generator.rewriter.types.Types;
+import io.papermc.paper.registry.RegistryKey;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.lang.constant.ConstantDescs;
+import net.minecraft.core.registries.Registries;
+import org.bukkit.Registry;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class PaperRegistriesRewriter extends SearchReplaceRewriter {
+
+    private void appendEntry(String indent, StringBuilder builder, RegistryEntry<?> entry, boolean canBeDelayed, boolean apiOnly) {
+        builder.append(indent);
+        builder.append("start");
+        builder.append('(');
+        builder.append(Registries.class.getSimpleName()).append('.').append(entry.registryKeyField());
+        builder.append(", ");
+        builder.append(RegistryKey.class.getSimpleName()).append('.').append(entry.registryKeyField());
+        builder.append(").");
+        if (apiOnly) {
+            builder.append("apiOnly(");
+            if (entry.apiClass().isEnum()) {
+                builder.append(this.importCollector.getShortName(Types.PAPER_SIMPLE_REGISTRY)).append("::").append(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, entry.registryKey().location().getPath()));
+            } else {
+                builder.append("() -> ");
+                builder.append(Registry.class.getCanonicalName()).append('.').append(entry.apiRegistryField().orElse(entry.registryKeyField()));
+            }
+            builder.append(')');
+        } else {
+            builder.append("craft(");
+            builder.append(this.importCollector.getShortName(entry.preloadClass())).append(".class");
+            builder.append(", ");
+
+            builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(entry.implClass()).resolve(this.classResolver))).append("::").append(entry.apiAccessName().equals(ConstantDescs.INIT_NAME) ? "new" : entry.apiAccessName());
+
+            if (entry.canAllowDirect()) {
+                builder.append(", ");
+                builder.append(Boolean.TRUE.toString());
+            }
+            builder.append(')');
+
+            if (entry.fieldRename() != null) {
+                builder.append(".serializationUpdater(").append(Types.FIELD_RENAME.simpleName()).append('.').append(entry.fieldRename()).append(")");
+            }
+
+            if (entry.apiRegistryBuilderImpl() != null) {
+                builder.append(".writable(");
+                builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(entry.apiRegistryBuilderImpl()).resolve(this.classResolver))).append("::new");
+                builder.append(')');
+            } else {
+                builder.append(".build()");
+            }
+        }
+        if (canBeDelayed && entry.isDelayed()) {
+            builder.append(".delayed()");
+        }
+        builder.append(',');
+        builder.append('\n');
+    }
+
+    @Override
+    public void insert(SearchMetadata metadata, StringBuilder builder) {
+        builder.append(metadata.indent()).append("// built-in");
+        builder.append('\n');
+
+        for (RegistryEntry<?> entry : RegistryEntries.BUILT_IN) {
+            appendEntry(metadata.indent(), builder, entry, false, false);
+        }
+
+        builder.append('\n');
+        builder.append(metadata.indent()).append("// data-driven");
+        builder.append('\n');
+
+        for (RegistryEntry<?> entry : RegistryEntries.DATA_DRIVEN) {
+            appendEntry(metadata.indent(), builder, entry, true, false);
+        }
+
+        builder.append('\n');
+        builder.append(metadata.indent()).append("// api-only");
+        builder.append('\n');
+
+        for (RegistryEntry<?> entry : RegistryEntries.API_ONLY) {
+            appendEntry(metadata.indent(), builder, entry, false, true);
+        }
+
+        builder.deleteCharAt(builder.length() - 2); // delete extra comma...
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryEventsRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryEventsRewriter.java
new file mode 100644
index 0000000000..6d289d4d05
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryEventsRewriter.java
@@ -0,0 +1,33 @@
+package io.papermc.generator.rewriter.types.registry;
+
+import io.papermc.generator.registry.RegistryEntries;
+import io.papermc.paper.registry.RegistryKey;
+import io.papermc.paper.registry.event.RegistryEventProvider;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import org.jspecify.annotations.NullMarked;
+
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+
+@NullMarked
+public class RegistryEventsRewriter extends SearchReplaceRewriter {
+
+    @Override
+    public void insert(SearchMetadata metadata, StringBuilder builder) {
+        RegistryEntries.forEach(entry -> {
+            if (entry.apiRegistryBuilder() != null) {
+                builder.append(metadata.indent());
+                builder.append("%s %s %s ".formatted(PUBLIC, STATIC, FINAL));
+                builder.append(RegistryEventProvider.class.getSimpleName());
+                builder.append("<").append(this.importCollector.getShortName(entry.apiClass())).append(", ").append(this.importCollector.getShortName(entry.apiRegistryBuilder())).append('>');
+                builder.append(' ');
+                builder.append(entry.registryKeyField());
+                builder.append(" = ");
+                builder.append("create(").append(RegistryKey.class.getSimpleName()).append('.').append(entry.registryKeyField()).append(");");
+                builder.append('\n');
+            }
+        });
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryFieldRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryFieldRewriter.java
new file mode 100644
index 0000000000..835c3fd1c0
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryFieldRewriter.java
@@ -0,0 +1,135 @@
+package io.papermc.generator.rewriter.types.registry;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Suppliers;
+import com.mojang.logging.LogUtils;
+import io.papermc.generator.Main;
+import io.papermc.generator.rewriter.utils.Annotations;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.generator.utils.experimental.ExperimentalCollector;
+import io.papermc.generator.utils.experimental.SingleFlagHolder;
+import io.papermc.typewriter.ClassNamed;
+import io.papermc.typewriter.SourceFile;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Supplier;
+import net.minecraft.core.Holder;
+import net.minecraft.core.Registry;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.world.flag.FeatureElement;
+import net.minecraft.world.flag.FeatureFlags;
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+import org.slf4j.Logger;
+
+import static io.papermc.generator.utils.Formatting.quoted;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+
+@NullMarked
+public class RegistryFieldRewriter<T> extends SearchReplaceRewriter {
+
+    private static final Logger LOGGER = LogUtils.getLogger();
+
+    private final ResourceKey<? extends Registry<T>> registryKey;
+    private final boolean isFilteredRegistry;
+    private final @Nullable String fetchMethod;
+
+    protected @MonotonicNonNull ClassNamed fieldClass;
+    private @MonotonicNonNull Supplier<Map<ResourceKey<T>, SingleFlagHolder>> experimentalKeys;
+
+    public RegistryFieldRewriter(ResourceKey<? extends Registry<T>> registryKey, @Nullable String fetchMethod) {
+        this.registryKey = registryKey;
+        this.isFilteredRegistry = FeatureElement.FILTERED_REGISTRIES.contains(registryKey);
+        this.fetchMethod = fetchMethod;
+    }
+
+    @Override
+    public boolean registerFor(SourceFile file) {
+        this.fieldClass = this.options.targetClass().orElse(file.mainClass());
+        Preconditions.checkState(this.fieldClass.knownClass() != null, "This rewriter can't run without knowing the field class at runtime!");
+
+        if (this.fetchMethod != null) {
+            try {
+                this.fieldClass.knownClass().getDeclaredMethod(this.fetchMethod, String.class);
+            } catch (NoSuchMethodException e) {
+                LOGGER.error("Fetch method not found, skipping the rewriter for registry fields of {}", this.registryKey, e);
+                return false;
+            }
+        }
+
+        return super.registerFor(file);
+    }
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        boolean isInterface = Objects.requireNonNull(this.fieldClass.knownClass()).isInterface();
+        Registry<T> registry = Main.REGISTRY_ACCESS.lookupOrThrow(this.registryKey);
+        this.experimentalKeys = Suppliers.memoize(() -> ExperimentalCollector.collectDataDrivenElementIds(registry));
+        Iterator<Holder.Reference<T>> referenceIterator = registry.listElements().filter(this::canPrintField).sorted(Formatting.alphabeticKeyOrder(reference -> reference.key().location().getPath())).iterator();
+
+        while (referenceIterator.hasNext()) {
+            Holder.Reference<T> reference = referenceIterator.next();
+
+            this.rewriteJavadocs(reference, metadata.replacedContent(), metadata.indent(), builder);
+
+            SingleFlagHolder requiredFeature = this.getRequiredFeature(reference);
+            if (requiredFeature != null) {
+                Annotations.experimentalAnnotations(builder, metadata.indent(), this.importCollector, requiredFeature);
+            }
+
+            builder.append(metadata.indent());
+            if (!isInterface) {
+                builder.append("%s %s %s ".formatted(PUBLIC, STATIC, FINAL));
+            }
+
+            builder.append(this.rewriteFieldType(reference)).append(' ').append(this.rewriteFieldName(reference));
+            builder.append(" = ");
+            builder.append(this.rewriteFieldValue(reference));
+            builder.append(';');
+
+            builder.append('\n');
+            if (referenceIterator.hasNext()) {
+                builder.append('\n');
+            }
+        }
+    }
+
+    protected void rewriteJavadocs(Holder.Reference<T> reference, String replacedContent, String indent, StringBuilder builder) {
+    }
+
+    protected boolean canPrintField(Holder.Reference<T> reference) {
+        return true;
+    }
+
+    protected String rewriteFieldType(Holder.Reference<T> reference) {
+        return this.fieldClass.simpleName();
+    }
+
+    protected String rewriteFieldName(Holder.Reference<T> reference) {
+        return Formatting.formatKeyAsField(reference.key().location().getPath());
+    }
+
+    protected String rewriteFieldValue(Holder.Reference<T> reference) {
+        return "%s(%s)".formatted(this.fetchMethod, quoted(reference.key().location().getPath()));
+    }
+
+    protected @Nullable SingleFlagHolder getRequiredFeature(Holder.Reference<T> reference) {
+        if (this.isFilteredRegistry) {
+            // built-in registry
+            FeatureElement element = (FeatureElement) reference.value();
+            if (FeatureFlags.isExperimental(element.requiredFeatures())) {
+                return SingleFlagHolder.fromSet(element.requiredFeatures());
+            }
+        } else {
+            // data-driven registry
+            return this.experimentalKeys.get().get(reference.key());
+        }
+        return null;
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryTagRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryTagRewriter.java
new file mode 100644
index 0000000000..0e28a8610b
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryTagRewriter.java
@@ -0,0 +1,92 @@
+package io.papermc.generator.rewriter.types.registry;
+
+import com.google.common.base.Preconditions;
+import com.mojang.logging.LogUtils;
+import io.papermc.generator.Main;
+import io.papermc.generator.rewriter.utils.Annotations;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.generator.utils.experimental.SingleFlagHolder;
+import io.papermc.typewriter.ClassNamed;
+import io.papermc.typewriter.SourceFile;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.util.Iterator;
+import net.minecraft.core.Registry;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.tags.TagKey;
+import org.bukkit.Keyed;
+import org.bukkit.Tag;
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
+import org.slf4j.Logger;
+
+import static io.papermc.generator.utils.Formatting.quoted;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+
+@NullMarked
+@ApiStatus.Obsolete
+public class RegistryTagRewriter<T> extends SearchReplaceRewriter {
+
+    private static final Logger LOGGER = LogUtils.getLogger();
+
+    private final ResourceKey<? extends Registry<T>> registryKey;
+    private final Class<? extends Keyed> apiClass;
+    private final String fetchMethod = "getTag";
+
+    public RegistryTagRewriter(ResourceKey<? extends Registry<T>> registryKey, Class<? extends Keyed> apiClass) {
+        this.registryKey = registryKey;
+        this.apiClass = apiClass;
+    }
+
+    @Override
+    public boolean registerFor(SourceFile file) {
+        ClassNamed holderClass = this.options.targetClass().orElse(file.mainClass());
+        Preconditions.checkState(holderClass.knownClass() != null, "This rewriter can't run without knowing the field class at runtime!");
+        try {
+            holderClass.knownClass().getDeclaredMethod(this.fetchMethod, String.class);
+        } catch (NoSuchMethodException e) {
+            LOGGER.error("Fetch method not found, skipping the rewriter for registry tag fields of {}", this.registryKey, e);
+            return false;
+        }
+
+        return super.registerFor(file);
+    }
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        Registry<T> registry = Main.REGISTRY_ACCESS.lookupOrThrow(this.registryKey);
+        Iterator<? extends TagKey<T>> keyIterator = registry.listTagIds().sorted(Formatting.alphabeticKeyOrder(reference -> reference.location().getPath())).iterator();
+
+        while (keyIterator.hasNext()) {
+            TagKey<T> tagKey = keyIterator.next();
+
+            String featureFlagName = Main.EXPERIMENTAL_TAGS.get(tagKey);
+            if (featureFlagName != null) {
+                Annotations.experimentalAnnotations(builder, metadata.indent(), this.importCollector, SingleFlagHolder.fromName(featureFlagName));
+            }
+
+            builder.append(metadata.indent());
+            builder.append("%s %s %s ".formatted(PUBLIC, STATIC, FINAL));
+
+            builder.append("%s<%s>".formatted(Tag.class.getSimpleName(), this.apiClass.getSimpleName())).append(' ').append(this.rewriteFieldName(tagKey));
+            builder.append(" = ");
+            builder.append(this.rewriteFieldValue(tagKey));
+            builder.append(';');
+
+            builder.append('\n');
+            if (keyIterator.hasNext()) {
+                builder.append('\n');
+            }
+        }
+    }
+
+    protected String rewriteFieldName(TagKey<T> tagKey) {
+        return Formatting.formatKeyAsField(tagKey.location().getPath());
+    }
+
+    protected String rewriteFieldValue(TagKey<T> tagKey) {
+        return "%s(%s)".formatted(this.fetchMethod, quoted(tagKey.location().getPath()));
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/TagRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/TagRewriter.java
new file mode 100644
index 0000000000..fa553ad7c3
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/TagRewriter.java
@@ -0,0 +1,91 @@
+package io.papermc.generator.rewriter.types.registry;
+
+import io.papermc.generator.Main;
+import io.papermc.generator.rewriter.utils.Annotations;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.generator.utils.experimental.SingleFlagHolder;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.util.Iterator;
+import java.util.Locale;
+import net.minecraft.core.Registry;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.tags.TagKey;
+import org.bukkit.Bukkit;
+import org.bukkit.Fluid;
+import org.bukkit.GameEvent;
+import org.bukkit.Keyed;
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.bukkit.entity.EntityType;
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
+
+import static io.papermc.generator.utils.Formatting.quoted;
+
+@NullMarked
+@ApiStatus.Obsolete
+public class TagRewriter extends SearchReplaceRewriter {
+
+    public record TagRegistry(String legacyFolderName, Class<? extends Keyed> apiType, ResourceKey<? extends Registry<?>> registryKey) { // TODO remove Keyed
+    }
+
+    private static final TagRegistry[] SUPPORTED_REGISTRIES = { // 1.21 folder name are normalized to registry key but api will stay as is
+        new TagRegistry("blocks", Material.class, Registries.BLOCK),
+        new TagRegistry("items", Material.class, Registries.ITEM),
+        new TagRegistry("fluids", Fluid.class, Registries.FLUID),
+        new TagRegistry("entity_types", EntityType.class, Registries.ENTITY_TYPE),
+        new TagRegistry("game_events", GameEvent.class, Registries.GAME_EVENT)
+        // new TagRegistry("damage_types", DamageType.class, Registries.DAMAGE_TYPE) - separate in DamageTypeTags
+    };
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        for (int i = 0, len = SUPPORTED_REGISTRIES.length; i < len; i++) {
+            final TagRegistry tagRegistry = SUPPORTED_REGISTRIES[i];
+
+            final ResourceKey<? extends Registry<?>> registryKey = tagRegistry.registryKey();
+            final Registry<?> registry = Main.REGISTRY_ACCESS.lookupOrThrow(registryKey);
+
+            final String fieldPrefix = Formatting.formatTagFieldPrefix(tagRegistry.legacyFolderName(), registryKey);
+            final String registryFieldName = "REGISTRY_" + tagRegistry.legacyFolderName().toUpperCase(Locale.ENGLISH);
+
+            if (i != 0) {
+                builder.append('\n'); // extra line before the registry field
+            }
+
+            // registry name field
+            builder.append(metadata.indent());
+            builder.append("%s %s = %s;".formatted(String.class.getSimpleName(), registryFieldName, quoted(tagRegistry.legacyFolderName())));
+
+            builder.append('\n');
+            builder.append('\n');
+
+            Iterator<? extends TagKey<?>> keyIterator = registry.listTagIds().sorted(Formatting.alphabeticKeyOrder(tagKey -> tagKey.location().getPath())).iterator();
+
+            while (keyIterator.hasNext()) {
+                TagKey<?> tagKey = keyIterator.next();
+                final String keyPath = tagKey.location().getPath();
+                final String fieldName = fieldPrefix + Formatting.formatKeyAsField(keyPath);
+
+                // tag field
+                String featureFlagName = Main.EXPERIMENTAL_TAGS.get(tagKey);
+                if (featureFlagName != null) {
+                    Annotations.experimentalAnnotations(builder, metadata.indent(), this.importCollector, SingleFlagHolder.fromName(featureFlagName));
+                }
+
+                builder.append(metadata.indent());
+                builder.append("%s<%s>".formatted(this.source.mainClass().simpleName(), this.importCollector.getShortName(tagRegistry.apiType()))).append(' ').append(fieldName);
+                builder.append(" = ");
+                builder.append("%s.getTag(%s, %s.minecraft(%s), %s.class)".formatted(Bukkit.class.getSimpleName(), registryFieldName, NamespacedKey.class.getSimpleName(), quoted(keyPath), tagRegistry.apiType().getSimpleName())); // assume type is imported properly
+                builder.append(';');
+
+                builder.append('\n');
+                if (keyIterator.hasNext()) {
+                    builder.append('\n');
+                }
+            }
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/BlockTypeRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/BlockTypeRewriter.java
new file mode 100644
index 0000000000..9a496c75e1
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/BlockTypeRewriter.java
@@ -0,0 +1,27 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import io.papermc.generator.rewriter.types.registry.RegistryFieldRewriter;
+import io.papermc.generator.utils.BlockStateMapping;
+import io.papermc.typewriter.util.ClassHelper;
+import net.minecraft.core.Holder;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.world.level.block.Block;
+import org.bukkit.block.BlockType;
+import org.bukkit.block.data.BlockData;
+
+public class BlockTypeRewriter extends RegistryFieldRewriter<Block> {
+
+    public BlockTypeRewriter() {
+        super(Registries.BLOCK, "getBlockType");
+    }
+
+    @Override
+    protected String rewriteFieldType(Holder.Reference<Block> reference) {
+        Class<? extends BlockData> blockData = BlockStateMapping.getBestSuitedApiClass(reference.value().getClass());
+        if (blockData == null) {
+            blockData = BlockData.class;
+        }
+
+        return "%s<%s>".formatted(ClassHelper.retrieveFullNestedName(BlockType.Typed.class), this.importCollector.getShortName(blockData));
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftBlockDataMapping.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftBlockDataMapping.java
new file mode 100644
index 0000000000..2a090056e0
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftBlockDataMapping.java
@@ -0,0 +1,19 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import io.papermc.generator.rewriter.types.Types;
+import io.papermc.generator.utils.BlockStateMapping;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.util.Comparator;
+
+public class CraftBlockDataMapping extends SearchReplaceRewriter {
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        BlockStateMapping.MAPPING.entrySet().stream().sorted(Comparator.comparing(entry -> entry.getKey().getCanonicalName())).forEach(entry -> {
+            builder.append(metadata.indent());
+            builder.append("register(%s.class, %s.block.impl.%s::new);".formatted(entry.getKey().getCanonicalName(), Types.BASE_PACKAGE, entry.getValue().implName()));
+            builder.append('\n');
+        });
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftBlockEntityStateMapping.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftBlockEntityStateMapping.java
new file mode 100644
index 0000000000..2fd4d0c69f
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftBlockEntityStateMapping.java
@@ -0,0 +1,21 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import io.papermc.generator.utils.BlockEntityMapping;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import net.minecraft.world.level.block.entity.BlockEntityType;
+
+public class CraftBlockEntityStateMapping extends SearchReplaceRewriter {
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        BlockEntityMapping.MAPPING.entrySet().stream().sorted(Formatting.alphabeticKeyOrder(entry -> entry.getKey().location().getPath())).forEach(entry -> {
+            builder.append(metadata.indent());
+            builder.append("register(%s.%s, %s.class, %s::new);".formatted(
+                BlockEntityType.class.getSimpleName(), Formatting.formatKeyAsField(entry.getKey().location().getPath()),
+                entry.getValue(), entry.getValue()));
+            builder.append('\n');
+        });
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftPotionUtilRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftPotionUtilRewriter.java
new file mode 100644
index 0000000000..df57fadbc8
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftPotionUtilRewriter.java
@@ -0,0 +1,32 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import io.papermc.generator.utils.Formatting;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.util.Locale;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.resources.ResourceLocation;
+import org.bukkit.potion.PotionType;
+
+@Deprecated(forRemoval = true)
+public class CraftPotionUtilRewriter extends SearchReplaceRewriter {
+
+    private final String statePrefix;
+
+    public CraftPotionUtilRewriter(String statePrefix) {
+        this.statePrefix = statePrefix;
+    }
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        String upperStatePrefix = this.statePrefix.toUpperCase(Locale.ENGLISH);
+        BuiltInRegistries.POTION.keySet().stream()
+            .filter(key -> BuiltInRegistries.POTION.containsKey(key.withPath(path -> this.statePrefix + "_" + path)))
+            .sorted(Formatting.alphabeticKeyOrder(ResourceLocation::getPath)).forEach(key -> {
+                String keyedName = Formatting.formatKeyAsField(key.getPath());
+                builder.append(metadata.indent());
+                builder.append(".put(%s.%s, %s.%s_%s)".formatted(PotionType.class.getSimpleName(), keyedName, PotionType.class.getSimpleName(), upperStatePrefix, keyedName));
+                builder.append('\n');
+            });
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/EntityTypeRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/EntityTypeRewriter.java
new file mode 100644
index 0000000000..19d9c89640
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/EntityTypeRewriter.java
@@ -0,0 +1,176 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import com.google.common.base.CaseFormat;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import io.papermc.generator.registry.RegistryEntries;
+import io.papermc.generator.rewriter.types.registry.EnumRegistryRewriter;
+import io.papermc.generator.types.goal.MobGoalNames;
+import io.papermc.typewriter.ClassNamed;
+import io.papermc.typewriter.preset.model.EnumValue;
+import io.papermc.typewriter.util.ClassResolver;
+import it.unimi.dsi.fastutil.objects.Object2IntMap;
+import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
+import java.lang.reflect.ParameterizedType;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.Util;
+import net.minecraft.core.Holder;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.world.entity.Entity;
+import net.minecraft.world.entity.EntityType;
+import net.minecraft.world.entity.Mob;
+
+import static io.papermc.generator.utils.Formatting.quoted;
+
+public class EntityTypeRewriter extends EnumRegistryRewriter<EntityType<?>> {
+
+    private static final Map<ResourceKey<EntityType<?>>, Class<? extends Entity>> ENTITY_GENERIC_TYPES =
+        RegistryEntries.byRegistryKey(Registries.ENTITY_TYPE).getFields(field -> {
+            if (field.getGenericType() instanceof ParameterizedType complexType && complexType.getActualTypeArguments().length == 1) {
+                return (Class<? extends Entity>) complexType.getActualTypeArguments()[0];
+            }
+            return null;
+        });
+
+    private static final Map<String, String> CLASS_RENAMES = ImmutableMap.<String, String>builder()
+        .put("ExperienceBottle", "ThrownExpBottle")
+        .put("EyeOfEnder", "EnderSignal")
+        .put("EndCrystal", "EnderCrystal")
+        .put("FireworkRocket", "Firework")
+        .put("FishingBobber", "FishHook")
+        .put("LeashKnot", "LeashHitch")
+        .put("LightningBolt", "LightningStrike")
+        .put("Potion", "ThrownPotion")
+        .put("Tnt", "TNTPrimed")
+        .put("ChestMinecart", "StorageMinecart")
+        .put("CommandBlockMinecart", "CommandMinecart")
+        .put("TntMinecart", "ExplosiveMinecart")
+        .put("FurnaceMinecart", "PoweredMinecart")
+        .buildOrThrow();
+
+    @Deprecated
+    private static final Object2IntMap<EntityType<?>> LEGACY_ID = Util.make(new Object2IntOpenHashMap<>(), map -> {
+        map.put(EntityType.ITEM, 1);
+        map.put(EntityType.EXPERIENCE_ORB, 2);
+        map.put(EntityType.AREA_EFFECT_CLOUD, 3);
+        map.put(EntityType.ELDER_GUARDIAN, 4);
+        map.put(EntityType.WITHER_SKELETON, 5);
+        map.put(EntityType.STRAY, 6);
+        map.put(EntityType.EGG, 7);
+        map.put(EntityType.LEASH_KNOT, 8);
+        map.put(EntityType.PAINTING, 9);
+        map.put(EntityType.ARROW, 10);
+        map.put(EntityType.SNOWBALL, 11);
+        map.put(EntityType.FIREBALL, 12);
+        map.put(EntityType.SMALL_FIREBALL, 13);
+        map.put(EntityType.ENDER_PEARL, 14);
+        map.put(EntityType.EYE_OF_ENDER, 15);
+        map.put(EntityType.POTION, 16);
+        map.put(EntityType.EXPERIENCE_BOTTLE, 17);
+        map.put(EntityType.ITEM_FRAME, 18);
+        map.put(EntityType.WITHER_SKULL, 19);
+        map.put(EntityType.TNT, 20);
+        map.put(EntityType.FALLING_BLOCK, 21);
+        map.put(EntityType.FIREWORK_ROCKET, 22);
+        map.put(EntityType.HUSK, 23);
+        map.put(EntityType.SPECTRAL_ARROW, 24);
+        map.put(EntityType.SHULKER_BULLET, 25);
+        map.put(EntityType.DRAGON_FIREBALL, 26);
+        map.put(EntityType.ZOMBIE_VILLAGER, 27);
+        map.put(EntityType.SKELETON_HORSE, 28);
+        map.put(EntityType.ZOMBIE_HORSE, 29);
+        map.put(EntityType.ARMOR_STAND, 30);
+        map.put(EntityType.DONKEY, 31);
+        map.put(EntityType.MULE, 32);
+        map.put(EntityType.EVOKER_FANGS, 33);
+        map.put(EntityType.EVOKER, 34);
+        map.put(EntityType.VEX, 35);
+        map.put(EntityType.VINDICATOR, 36);
+        map.put(EntityType.ILLUSIONER, 37);
+
+        map.put(EntityType.COMMAND_BLOCK_MINECART, 40);
+        map.put(EntityType.MINECART, 42);
+        map.put(EntityType.CHEST_MINECART, 43);
+        map.put(EntityType.FURNACE_MINECART, 44);
+        map.put(EntityType.TNT_MINECART, 45);
+        map.put(EntityType.HOPPER_MINECART, 46);
+        map.put(EntityType.SPAWNER_MINECART, 47);
+
+        map.put(EntityType.CREEPER, 50);
+        map.put(EntityType.SKELETON, 51);
+        map.put(EntityType.SPIDER, 52);
+        map.put(EntityType.GIANT, 53);
+        map.put(EntityType.ZOMBIE, 54);
+        map.put(EntityType.SLIME, 55);
+        map.put(EntityType.GHAST, 56);
+        map.put(EntityType.ZOMBIFIED_PIGLIN, 57);
+        map.put(EntityType.ENDERMAN, 58);
+        map.put(EntityType.CAVE_SPIDER, 59);
+        map.put(EntityType.SILVERFISH, 60);
+        map.put(EntityType.BLAZE, 61);
+        map.put(EntityType.MAGMA_CUBE, 62);
+        map.put(EntityType.ENDER_DRAGON, 63);
+        map.put(EntityType.WITHER, 64);
+        map.put(EntityType.BAT, 65);
+        map.put(EntityType.WITCH, 66);
+        map.put(EntityType.ENDERMITE, 67);
+        map.put(EntityType.GUARDIAN, 68);
+        map.put(EntityType.SHULKER, 69);
+
+        map.put(EntityType.PIG, 90);
+        map.put(EntityType.SHEEP, 91);
+        map.put(EntityType.COW, 92);
+        map.put(EntityType.CHICKEN, 93);
+        map.put(EntityType.SQUID, 94);
+        map.put(EntityType.WOLF, 95);
+        map.put(EntityType.MOOSHROOM, 96);
+        map.put(EntityType.SNOW_GOLEM, 97);
+        map.put(EntityType.OCELOT, 98);
+        map.put(EntityType.IRON_GOLEM, 99);
+        map.put(EntityType.HORSE, 100);
+        map.put(EntityType.RABBIT, 101);
+        map.put(EntityType.POLAR_BEAR, 102);
+        map.put(EntityType.LLAMA, 103);
+        map.put(EntityType.LLAMA_SPIT, 104);
+        map.put(EntityType.PARROT, 105);
+
+        map.put(EntityType.VILLAGER, 120);
+
+        map.put(EntityType.END_CRYSTAL, 200);
+    });
+
+    private static final ClassResolver runtime = new ClassResolver(EntityTypeRewriter.class.getClassLoader());
+
+    public EntityTypeRewriter() {
+        super(Registries.ENTITY_TYPE, false);
+    }
+
+    @Override
+    protected EnumValue.Builder rewriteEnumValue(Holder.Reference<EntityType<?>> reference) {
+        String path = reference.key().location().getPath();
+        List<String> arguments = new ArrayList<>(4);
+        arguments.add(quoted(path));
+        arguments.add(toBukkitClass(reference).concat(".class"));
+        arguments.add(Integer.toString(LEGACY_ID.getOrDefault(reference.value(), -1)));
+
+        if (!reference.value().canSummon()) {
+            arguments.add(Boolean.FALSE.toString());
+        }
+        return super.rewriteEnumValue(reference).arguments(arguments);
+    }
+
+    private String toBukkitClass(Holder.Reference<EntityType<?>> reference) {
+        Class<? extends Entity> internalClass = ENTITY_GENERIC_TYPES.get(reference.key());
+        if (Mob.class.isAssignableFrom(internalClass)) {
+            return this.importCollector.getShortName(MobGoalNames.bukkitMap.get((Class<? extends Mob>) internalClass));
+        }
+
+        String className = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, reference.key().location().getPath()); // use the key instead of the internal class name since name match a bit more
+        ClassNamed resolvedClass = this.classNamedView.findFirst(CLASS_RENAMES.getOrDefault(className, className)).resolve(runtime);
+        Preconditions.checkArgument(org.bukkit.entity.Entity.class.isAssignableFrom(resolvedClass.knownClass()), "Generic type must be an entity");
+        return this.importCollector.getShortName(this.classNamedView.findFirst(CLASS_RENAMES.getOrDefault(className, className)).resolve(runtime));
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/ItemTypeRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/ItemTypeRewriter.java
new file mode 100644
index 0000000000..232cf52237
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/ItemTypeRewriter.java
@@ -0,0 +1,27 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import io.papermc.generator.rewriter.types.registry.RegistryFieldRewriter;
+import io.papermc.typewriter.util.ClassHelper;
+import net.minecraft.core.Holder;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.world.item.Item;
+import net.minecraft.world.item.Items;
+import org.bukkit.inventory.ItemType;
+import org.bukkit.inventory.meta.ItemMeta;
+
+@Deprecated // bad generic
+public class ItemTypeRewriter extends RegistryFieldRewriter<Item> {
+
+    public ItemTypeRewriter() {
+        super(Registries.ITEM, "getItemType");
+    }
+
+    @Override
+    protected String rewriteFieldType(Holder.Reference<Item> reference) {
+        if (reference.value().equals(Items.AIR)) {
+            return super.rewriteFieldType(reference);
+        }
+
+        return "%s<%s>".formatted(ClassHelper.retrieveFullNestedName(ItemType.Typed.class), ItemMeta.class.getSimpleName());
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MapPaletteRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MapPaletteRewriter.java
new file mode 100644
index 0000000000..18f4902389
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MapPaletteRewriter.java
@@ -0,0 +1,41 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import com.mojang.logging.LogUtils;
+import io.papermc.typewriter.replace.SearchMetadata;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import java.awt.Color;
+import net.minecraft.world.level.material.MapColor;
+import org.jspecify.annotations.Nullable;
+import org.slf4j.Logger;
+
+public class MapPaletteRewriter extends SearchReplaceRewriter {
+
+    private static final Logger LOGGER = LogUtils.getLogger();
+    private static final boolean UPDATING = Boolean.getBoolean("paper.updatingMinecraft");
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        int count = 0;
+        for (@Nullable MapColor mapColor : MapColor.MATERIAL_COLORS) {
+            if (mapColor == null) {
+                continue;
+            }
+
+            for (MapColor.Brightness brightness : MapColor.Brightness.values()) {
+                builder.append(metadata.indent());
+                Color color = new Color(mapColor.calculateARGBColor(brightness), true);
+                if (color.getAlpha() != 0xFF) {
+                    builder.append("new %s(0x%08X, true),".formatted(color.getClass().getSimpleName(), color.getRGB()));
+                } else {
+                    builder.append("new %s(0x%06X),".formatted(color.getClass().getSimpleName(), color.getRGB() & 0x00FFFFFF));
+                }
+                builder.append('\n');
+                count++;
+            }
+        }
+
+        if (UPDATING) {
+            LOGGER.warn("There are {} map colors, check CraftMapView#render for possible change and update md5 hash in CraftMapColorCache", count);
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MaterialRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MaterialRewriter.java
new file mode 100644
index 0000000000..1380f9f248
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MaterialRewriter.java
@@ -0,0 +1,111 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import io.papermc.generator.rewriter.types.registry.EnumRegistryRewriter;
+import io.papermc.generator.utils.BlockStateMapping;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.typewriter.preset.model.EnumValue;
+import java.util.Optional;
+import net.minecraft.core.Holder;
+import net.minecraft.core.component.DataComponents;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.world.item.Item;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.WallSignBlock;
+import org.bukkit.block.data.BlockData;
+
+import static io.papermc.generator.utils.Formatting.asCode;
+
+@Deprecated(forRemoval = true)
+public class MaterialRewriter {
+
+    // blocks
+
+    public static class Blocks extends EnumRegistryRewriter<Block> {
+
+        public Blocks() {
+            super(Registries.BLOCK, false);
+        }
+
+        @Override
+        protected Iterable<Holder.Reference<Block>> getValues() {
+            return BuiltInRegistries.BLOCK.listElements().filter(reference -> !reference.value().equals(net.minecraft.world.level.block.Blocks.AIR))
+                .sorted(Formatting.alphabeticKeyOrder(reference -> reference.key().location().getPath()))::iterator;
+        }
+
+        @Override
+        protected EnumValue.Builder rewriteEnumValue(Holder.Reference<Block> reference) {
+            EnumValue.Builder value = super.rewriteEnumValue(reference);
+            Block block = reference.value();
+            if (BlockStateMapping.MAPPING.containsKey(block.getClass())) {
+                // some block can also be represented as item in that enum
+                // doing a double job
+                Optional<Item> equivalentItem = BuiltInRegistries.ITEM.getOptional(reference.key().location());
+
+                if (equivalentItem.isEmpty() && block instanceof WallSignBlock) {
+                    // wall sign block stack size is 16 for some reason like the sign item?
+                    // but that rule doesn't work for the wall hanging sign block??
+                    equivalentItem = Optional.of(block.asItem());
+                }
+
+                Class<?> blockData = BlockStateMapping.getBestSuitedApiClass(block.getClass());
+                if (blockData == null) {
+                    blockData = BlockData.class;
+                }
+                if (equivalentItem.isPresent() && equivalentItem.get().getDefaultMaxStackSize() != Item.DEFAULT_MAX_STACK_SIZE) {
+                    return value.arguments(Integer.toString(-1), Integer.toString(equivalentItem.get().getDefaultMaxStackSize()), this.importCollector.getShortName(blockData).concat(".class"));
+                }
+                return value.arguments(Integer.toString(-1), this.importCollector.getShortName(blockData).concat(".class"));
+            }
+            return value.argument(Integer.toString(-1)); // id not needed for non legacy material
+        }
+    }
+
+    /* todo test is broken
+    public static class IsTransparent extends SwitchCaseRewriter {
+
+        public IsTransparent() {
+            super(false);
+        }
+
+        @Override
+        protected Iterable<String> getCases() {
+            return BuiltInRegistries.BLOCK.holders().filter(reference -> reference.value().defaultBlockState().useShapeForLightOcclusion())
+            .map(reference -> reference.key().location().getPath().toUpperCase(Locale.ENGLISH)).sorted(Formatting.ALPHABETIC_KEY_ORDER)::iterator;
+        }
+    }*/
+
+    // items
+
+    public static class Items extends EnumRegistryRewriter<Item> {
+
+        public Items() {
+            super(Registries.ITEM, false);
+        }
+
+        @Override
+        protected Iterable<Holder.Reference<Item>> getValues() {
+            return BuiltInRegistries.ITEM.listElements().filter(reference -> BuiltInRegistries.BLOCK.getOptional(reference.key().location()).isEmpty() || reference.value().equals(net.minecraft.world.item.Items.AIR))
+                .sorted(Formatting.alphabeticKeyOrder(reference -> reference.key().location().getPath()))::iterator;
+        }
+
+        @Override
+        protected EnumValue.Builder rewriteEnumValue(Holder.Reference<Item> reference) {
+            EnumValue.Builder value = super.rewriteEnumValue(reference);
+            Item item = reference.value();
+            int maxStackSize = item.getDefaultMaxStackSize();
+            int maxDamage = item.components().getOrDefault(DataComponents.MAX_DAMAGE, 0);
+
+            if (maxStackSize != Item.DEFAULT_MAX_STACK_SIZE) {
+                if (maxDamage != 0) {
+                    value.arguments(asCode(-1, maxStackSize, maxDamage));
+                } else {
+                    value.arguments(asCode(-1, maxStackSize));
+                }
+                return value;
+            }
+
+            return value.argument(Integer.toString(-1)); // id not needed for non legacy material
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java
new file mode 100644
index 0000000000..08e321aabd
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java
@@ -0,0 +1,116 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import com.google.gson.internal.Primitives;
+import io.papermc.generator.registry.RegistryEntries;
+import io.papermc.generator.rewriter.types.registry.RegistryFieldRewriter;
+import io.papermc.generator.utils.ClassHelper;
+import java.lang.reflect.ParameterizedType;
+import java.util.Map;
+import java.util.Set;
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.GlobalPos;
+import net.minecraft.core.Holder;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.util.Unit;
+import net.minecraft.world.damagesource.DamageSource;
+import net.minecraft.world.entity.Entity;
+import net.minecraft.world.entity.ai.behavior.PositionTracker;
+import net.minecraft.world.entity.ai.memory.MemoryModuleType;
+import net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities;
+import net.minecraft.world.entity.ai.memory.WalkTarget;
+import net.minecraft.world.level.pathfinder.Path;
+import net.minecraft.world.phys.Vec3;
+import org.bukkit.Location;
+import org.bukkit.NamespacedKey;
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+
+import static io.papermc.generator.utils.Formatting.quoted;
+
+@Deprecated
+public class MemoryKeyRewriter extends RegistryFieldRewriter<MemoryModuleType<?>> {
+
+    private static final Map<ResourceKey<MemoryModuleType<?>>, Class<?>> MEMORY_GENERIC_TYPES = RegistryEntries.byRegistryKey(Registries.MEMORY_MODULE_TYPE).getFields(field -> {
+        if (field.getGenericType() instanceof ParameterizedType complexType && complexType.getActualTypeArguments().length == 1) {
+            return ClassHelper.eraseType(complexType.getActualTypeArguments()[0]);
+        }
+        return null;
+    });
+
+    public MemoryKeyRewriter() {
+        super(Registries.MEMORY_MODULE_TYPE, null);
+    }
+
+    // this api is not implemented and is not backed by a proper registry
+    private static final Set<Class<?>> IGNORED_TYPES = Set.of(
+        NearestVisibleLivingEntities.class,
+        WalkTarget.class,
+        PositionTracker.class,
+        Path.class,
+        DamageSource.class,
+        Vec3.class,
+        BlockPos.class,
+        Unit.class,
+        Void.class
+    );
+
+    private static final Set<Class<?>> IGNORED_SUB_TYPES = Set.of(
+        Iterable.class,
+        Map.class,
+        Entity.class
+    );
+
+    private static final Map<Class<?>, Class<?>> API_BRIDGE = Map.of(
+        GlobalPos.class, Location.class
+    );
+
+    private static final Map<String, String> FIELD_RENAMES = Map.of(
+        "LIKED_NOTEBLOCK", "LIKED_NOTEBLOCK_POSITION"
+    );
+
+    @Override
+    protected boolean canPrintField(Holder.Reference<MemoryModuleType<?>> reference) {
+        Class<?> memoryType = MEMORY_GENERIC_TYPES.get(reference.key());
+        if (IGNORED_TYPES.contains(memoryType)) {
+            return false;
+        }
+        for (Class<?> subType : IGNORED_SUB_TYPES) {
+            if (subType.isAssignableFrom(memoryType)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    private @MonotonicNonNull Class<?> apiMemoryType;
+
+    @Override
+    protected String rewriteFieldType(Holder.Reference<MemoryModuleType<?>> reference) {
+        Class<?> memoryType = MEMORY_GENERIC_TYPES.get(reference.key());
+
+        if (!Primitives.isWrapperType(memoryType) && API_BRIDGE.containsKey(memoryType)) {
+            this.apiMemoryType = API_BRIDGE.get(memoryType);
+        } else {
+            this.apiMemoryType = memoryType;
+        }
+
+        return "%s<%s>".formatted(this.fieldClass.simpleName(), this.importCollector.getShortName(this.apiMemoryType));
+    }
+
+    @Override
+    protected String rewriteFieldName(Holder.Reference<MemoryModuleType<?>> reference) {
+        String keyedName = super.rewriteFieldName(reference);
+        return FIELD_RENAMES.getOrDefault(keyedName, keyedName);
+    }
+
+    @Override
+    protected String rewriteFieldValue(Holder.Reference<MemoryModuleType<?>> reference) {
+        return "new %s<>(%s.minecraft(%s), %s.class)".formatted(
+            this.fieldClass.simpleName(),
+            NamespacedKey.class.getSimpleName(),
+            quoted(reference.key().location().getPath()),
+            this.apiMemoryType.getSimpleName() // assume the type is already import (see above in rewriteFieldType)
+        );
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/StatisticRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/StatisticRewriter.java
new file mode 100644
index 0000000000..fe67513b1b
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/StatisticRewriter.java
@@ -0,0 +1,170 @@
+package io.papermc.generator.rewriter.types.simple;
+
+import com.google.common.collect.ImmutableMap;
+import io.papermc.generator.rewriter.types.registry.EnumRegistryRewriter;
+import io.papermc.generator.utils.ClassHelper;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.typewriter.preset.model.EnumValue;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Map;
+import net.minecraft.core.Holder;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.stats.StatType;
+import net.minecraft.stats.Stats;
+import net.minecraft.world.entity.EntityType;
+import net.minecraft.world.item.Item;
+import net.minecraft.world.level.block.Block;
+import org.bukkit.Statistic;
+
+import static io.papermc.generator.utils.Formatting.quoted;
+
+@Deprecated(forRemoval = true)
+public class StatisticRewriter {
+
+    private static final Map<String, String> FIELD_RENAMES = ImmutableMap.<String, String>builder()
+        .put("DROP", "DROP_COUNT")
+        .put("DROPPED", "DROP")
+        .put("PICKED_UP", "PICKUP")
+        .put("PLAY_TIME", "PLAY_ONE_MINUTE")
+        .put("CROUCH_TIME", "SNEAK_TIME")
+        .put("MINED", "MINE_BLOCK")
+        .put("USED", "USE_ITEM")
+        .put("BROKEN", "BREAK_ITEM")
+        .put("CRAFTED", "CRAFT_ITEM")
+        .put("KILLED", "KILL_ENTITY")
+        .put("KILLED_BY", "ENTITY_KILLED_BY")
+        .put("EAT_CAKE_SLICE", "CAKE_SLICES_EATEN")
+        .put("FILL_CAULDRON", "CAULDRON_FILLED")
+        .put("USE_CAULDRON", "CAULDRON_USED")
+        .put("CLEAN_ARMOR", "ARMOR_CLEANED")
+        .put("CLEAN_BANNER", "BANNER_CLEANED")
+        .put("INTERACT_WITH_BREWINGSTAND", "BREWINGSTAND_INTERACTION")
+        .put("INTERACT_WITH_BEACON", "BEACON_INTERACTION")
+        .put("INSPECT_DROPPER", "DROPPER_INSPECTED")
+        .put("INSPECT_HOPPER", "HOPPER_INSPECTED")
+        .put("INSPECT_DISPENSER", "DISPENSER_INSPECTED")
+        .put("PLAY_NOTEBLOCK", "NOTEBLOCK_PLAYED")
+        .put("TUNE_NOTEBLOCK", "NOTEBLOCK_TUNED")
+        .put("POT_FLOWER", "FLOWER_POTTED")
+        .put("TRIGGER_TRAPPED_CHEST", "TRAPPED_CHEST_TRIGGERED")
+        .put("OPEN_ENDERCHEST", "ENDERCHEST_OPENED")
+        .put("ENCHANT_ITEM", "ITEM_ENCHANTED")
+        .put("PLAY_RECORD", "RECORD_PLAYED")
+        .put("INTERACT_WITH_FURNACE", "FURNACE_INTERACTION")
+        .put("INTERACT_WITH_CRAFTING_TABLE", "CRAFTING_TABLE_INTERACTION")
+        .put("OPEN_CHEST", "CHEST_OPENED")
+        .put("OPEN_SHULKER_BOX", "SHULKER_BOX_OPENED")
+        .buildOrThrow();
+
+    public static class Custom extends EnumRegistryRewriter<ResourceLocation> {
+
+        public Custom() {
+            super(Registries.CUSTOM_STAT, false);
+        }
+
+        @Override
+        protected EnumValue.Builder rewriteEnumValue(Holder.Reference<ResourceLocation> reference) {
+            return super.rewriteEnumValue(reference).rename(name -> FIELD_RENAMES.getOrDefault(name, name));
+        }
+    }
+
+    public static class CraftCustom extends EnumRegistryRewriter<ResourceLocation> {
+
+        private static final Map<String, String> INTERNAL_FIELD_RENAMES = Map.of(
+            "SNEAK_TIME", "CROUCH_TIME"
+        );
+
+        public CraftCustom() {
+            super(Registries.CUSTOM_STAT, false);
+        }
+
+        @Override
+        protected EnumValue.Builder rewriteEnumValue(Holder.Reference<ResourceLocation> reference) {
+            String keyedName = Formatting.formatKeyAsField(reference.key().location().getPath());
+
+            return super.rewriteEnumValue(reference)
+                .rename(name -> FIELD_RENAMES.getOrDefault(name, name))
+                .argument("%s.%s".formatted(Stats.class.getSimpleName(), INTERNAL_FIELD_RENAMES.getOrDefault(keyedName, keyedName)));
+        }
+    }
+
+    public static class Type extends EnumRegistryRewriter<StatType<?>> {
+
+        private static final Map<Class<?>, String> TYPE_MAPPING = Map.of(
+            Item.class, "ITEM",
+            Block.class, "BLOCK",
+            EntityType.class, "ENTITY"
+        );
+
+        private static final Map<StatType<?>, Class<?>> FIELD_GENERIC_TYPE;
+
+        static {
+            final Map<StatType<?>, Class<?>> map = new IdentityHashMap<>();
+
+            try {
+                for (Field field : Stats.class.getDeclaredFields()) {
+                    if (field.getType() != StatType.class) {
+                        continue;
+                    }
+
+                    if (ClassHelper.isStaticConstant(field, Modifier.PUBLIC)) {
+                        java.lang.reflect.Type genericType = ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0];
+                        map.put((StatType<?>) field.get(null), ClassHelper.eraseType(genericType));
+                    }
+                }
+            } catch (ReflectiveOperationException ex) {
+                throw new RuntimeException(ex);
+            }
+            FIELD_GENERIC_TYPE = Collections.unmodifiableMap(map);
+        }
+
+        public Type() {
+            super(Registries.STAT_TYPE, false);
+        }
+
+        @Override
+        protected Iterable<Holder.Reference<StatType<?>>> getValues() {
+            return BuiltInRegistries.STAT_TYPE.listElements().filter(reference -> reference.value() != Stats.CUSTOM)
+                .sorted(Formatting.alphabeticKeyOrder(reference -> reference.key().location().getPath()))::iterator;
+        }
+
+        @Override
+        protected EnumValue.Builder rewriteEnumValue(Holder.Reference<StatType<?>> reference) {
+            Class<?> genericType = FIELD_GENERIC_TYPE.get(reference.value());
+            if (!TYPE_MAPPING.containsKey(genericType)) {
+                throw new IllegalStateException("Unable to translate stat type generic " + genericType.getCanonicalName() + " into the api!");
+            }
+
+            return super.rewriteEnumValue(reference)
+                .rename(name -> FIELD_RENAMES.getOrDefault(name, name))
+                .argument("%s.%s".formatted(Statistic.Type.class.getSimpleName(), TYPE_MAPPING.get(genericType))); // find a more direct way?
+
+        }
+    }
+
+    public static class CraftType extends EnumRegistryRewriter<StatType<?>> {
+
+        public CraftType() {
+            super(Registries.STAT_TYPE, false);
+        }
+
+        @Override
+        protected Iterable<Holder.Reference<StatType<?>>> getValues() {
+            return BuiltInRegistries.STAT_TYPE.listElements().filter(reference -> reference.value() != Stats.CUSTOM)
+                .sorted(Formatting.alphabeticKeyOrder(reference -> reference.key().location().getPath()))::iterator;
+        }
+
+        @Override
+        protected EnumValue.Builder rewriteEnumValue(Holder.Reference<StatType<?>> reference) {
+            return super.rewriteEnumValue(reference)
+                .rename(name -> FIELD_RENAMES.getOrDefault(name, name))
+                .argument("%s.withDefaultNamespace(%s)".formatted(ResourceLocation.class.getSimpleName(), quoted(reference.key().location().getPath())));
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/package-info.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/package-info.java
new file mode 100644
index 0000000000..fbb169e219
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/package-info.java
@@ -0,0 +1,4 @@
+@NullMarked
+package io.papermc.generator.rewriter.types.simple;
+
+import org.jspecify.annotations.NullMarked;
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/DataComponentTypesRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/DataComponentTypesRewriter.java
new file mode 100644
index 0000000000..4a1f3fab4c
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/DataComponentTypesRewriter.java
@@ -0,0 +1,261 @@
+package io.papermc.generator.rewriter.types.simple.trial;
+
+import com.google.gson.internal.Primitives;
+import com.mojang.serialization.Codec;
+import io.papermc.generator.registry.RegistryEntries;
+import io.papermc.generator.rewriter.types.registry.RegistryFieldRewriter;
+import io.papermc.generator.utils.ClassHelper;
+import io.papermc.paper.datacomponent.item.BlockItemDataProperties;
+import io.papermc.paper.datacomponent.item.ItemAdventurePredicate;
+import io.papermc.paper.datacomponent.item.ItemArmorTrim;
+import io.papermc.typewriter.ClassNamed;
+import io.papermc.typewriter.parser.Lexer;
+import io.papermc.typewriter.parser.sequence.SequenceTokens;
+import io.papermc.typewriter.parser.sequence.TokenTaskBuilder;
+import io.papermc.typewriter.parser.token.CharSequenceBlockToken;
+import io.papermc.typewriter.parser.token.CharSequenceToken;
+import io.papermc.typewriter.parser.token.TokenType;
+import io.papermc.typewriter.replace.SearchMetadata;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Predicate;
+import java.util.function.UnaryOperator;
+import net.kyori.adventure.key.Key;
+import net.minecraft.core.Holder;
+import net.minecraft.core.component.DataComponentType;
+import net.minecraft.core.component.DataComponents;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.network.chat.Component;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.util.ExtraCodecs;
+import net.minecraft.util.Unit;
+import net.minecraft.world.item.AdventureModePredicate;
+import net.minecraft.world.item.Instrument;
+import net.minecraft.world.item.Rarity;
+import net.minecraft.world.item.component.BlockItemStateProperties;
+import net.minecraft.world.item.component.FireworkExplosion;
+import net.minecraft.world.item.crafting.Recipe;
+import net.minecraft.world.item.equipment.trim.ArmorTrim;
+import org.bukkit.FireworkEffect;
+import org.bukkit.MusicInstrument;
+import org.bukkit.inventory.ItemRarity;
+import org.checkerframework.checker.index.qual.NonNegative;
+import org.checkerframework.checker.index.qual.Positive;
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+import org.jspecify.annotations.Nullable;
+
+import static io.papermc.generator.utils.Formatting.quoted;
+
+public class DataComponentTypesRewriter extends RegistryFieldRewriter<DataComponentType<?>> {
+
+    public DataComponentTypesRewriter() {
+        super(Registries.DATA_COMPONENT_TYPE, null);
+    }
+
+    private static final Set<TokenType> FORMAT_TOKENS = EnumSet.of(
+        TokenType.COMMENT,
+        TokenType.SINGLE_COMMENT
+    );
+
+    private @MonotonicNonNull Map<String, CharSequenceBlockToken> javadocsPerConstant;
+
+    private Map<String, CharSequenceBlockToken> parseConstantJavadocs(String content) {
+        Map<String, CharSequenceBlockToken> map = new HashMap<>();
+
+        Lexer lex = new Lexer(content.toCharArray());
+        lex.checkMarkdownDocComments = !this.sourcesMetadata.canSkipMarkdownDocComments();
+        SequenceTokens.wrap(lex, FORMAT_TOKENS)
+            .group(action -> {
+                ProtoConstant constant = new ProtoConstant();
+                action
+                    .map(TokenType.JAVADOC, token -> {
+                        constant.javadocs(((CharSequenceBlockToken) token));
+                    }, TokenTaskBuilder::asOptional)
+                    .skip(TokenType.PUBLIC).skip(TokenType.STATIC).skip(TokenType.FINAL)
+                    .skipQualifiedName(Predicate.isEqual(TokenType.JAVADOC))
+                    .skipClosure(TokenType.LT, TokenType.GT, true, TokenTaskBuilder::asOptional) // skip generic
+                    .map(TokenType.IDENTIFIER, token -> {
+                        constant.name(((CharSequenceToken) token).value());
+                    })
+                    .skip(TokenType.IDENTIFIER)
+                    .skipClosure(TokenType.LPAREN, TokenType.RPAREN, true)
+                    .map(TokenType.SECO, $ -> {
+                        if (constant.isComplete()) {
+                            map.put(constant.name(), constant.javadocs());
+                        }
+                    });
+            }, TokenTaskBuilder::asRepeatable)
+            .executeOrThrow();
+
+        return map;
+    }
+
+    private static final Set<DataComponentType<?>> UNSUPPORTED_TYPES = Set.of(
+        DataComponents.CUSTOM_DATA,
+        DataComponents.CREATIVE_SLOT_LOCK,
+        DataComponents.DEBUG_STICK_STATE,
+        DataComponents.ENTITY_DATA,
+        DataComponents.BUCKET_ENTITY_DATA,
+        DataComponents.BLOCK_ENTITY_DATA,
+        DataComponents.BEES,
+        DataComponents.LOCK
+    );
+
+    private static final Map<ResourceKey<DataComponentType<?>>, Type> COMPONENT_GENERIC_TYPES = RegistryEntries.byRegistryKey(Registries.DATA_COMPONENT_TYPE).getFields(field -> {
+        if (field.getGenericType() instanceof ParameterizedType complexType && complexType.getActualTypeArguments().length == 1) {
+            return complexType.getActualTypeArguments()[0];
+        }
+        return null;
+    });
+
+    private static final Map<Class<?>, Class<?>> API_BRIDGE = Map.of(
+        Component.class, net.kyori.adventure.text.Component.class,
+        ResourceLocation.class, Key.class,
+        Instrument.class, MusicInstrument.class,
+        FireworkExplosion.class, FireworkEffect.class,
+        Rarity.class, ItemRarity.class,
+        ArmorTrim.class, ItemArmorTrim.class,
+        // renames
+        BlockItemStateProperties.class, BlockItemDataProperties.class,
+        AdventureModePredicate.class, ItemAdventurePredicate.class
+    );
+
+    @Deprecated
+    private static final Map<String, String> FIELD_RENAMES = Map.of(
+        "BLOCK_STATE", "BLOCK_DATA"
+    );
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        this.javadocsPerConstant = parseConstantJavadocs(metadata.replacedContent());
+        super.insert(metadata, builder);
+    }
+
+    @Override
+    protected boolean canPrintField(Holder.Reference<DataComponentType<?>> reference) {
+        return !UNSUPPORTED_TYPES.contains(reference.value());
+    }
+
+    @Override
+    protected void rewriteJavadocs(Holder.Reference<DataComponentType<?>> reference, String replacedContent, String indent, StringBuilder builder) {
+        String constantName = this.rewriteFieldName(reference);
+        if (this.javadocsPerConstant.containsKey(constantName)) {
+            CharSequenceBlockToken token = this.javadocsPerConstant.get(constantName);
+            builder.append(indent).append(replacedContent, token.pos(), token.endPos()).append('\n');
+        }
+    }
+
+    private boolean isValued;
+
+    private Class<?> handleParameterizedType(Type type) {
+        if (type instanceof ParameterizedType complexType) {
+            Type[] args = complexType.getActualTypeArguments();
+            if (args.length != 1) {
+                throw new UnsupportedOperationException("Unsupported type " + complexType);
+            }
+
+            Class<?> baseClass = ClassHelper.eraseType(complexType);
+            if (baseClass == Holder.class) {
+                return ClassHelper.eraseType(args[0]);
+            }
+            if (baseClass == ResourceKey.class) {
+                Class<?> componentClass = ClassHelper.eraseType(args[0]);
+                if (componentClass == Recipe.class) {
+                    return ResourceLocation.class; // special case recipe registry is not really a thing
+                }
+            }
+        }
+
+        throw new UnsupportedOperationException("Unsupported type " + type);
+    }
+
+    @Override
+    protected String rewriteFieldType(Holder.Reference<DataComponentType<?>> reference) {
+        Type componentType = COMPONENT_GENERIC_TYPES.get(reference.key());
+        this.isValued = componentType != Unit.class;
+        if (this.isValued) {
+            Class<?> componentClass = null;
+            UnaryOperator<String> tryToWrap = UnaryOperator.identity();
+            if (!reference.value().isTransient()) {
+                final Class<? extends Annotation> annotation = getEquivalentAnnotation(reference.value().codecOrThrow());
+                if (annotation != null) {
+                    tryToWrap = value -> "@%s %s".formatted(this.importCollector.getShortName(annotation), value);
+                }
+            }
+
+            if (componentType instanceof Class<?> clazz) {
+                componentClass = clazz;
+            } else if (componentType instanceof ParameterizedType complexType) {
+                Type[] args = complexType.getActualTypeArguments();
+                if (args.length != 1) {
+                    throw new UnsupportedOperationException("Unsupported type " + componentType);
+                }
+
+                Class<?> baseClass = ClassHelper.eraseType(complexType);
+                if (baseClass == List.class) {
+                    tryToWrap = value -> "%s<%s>".formatted(this.importCollector.getShortName(List.class), value);
+                    componentClass = this.handleParameterizedType(args[0]);
+                } else {
+                    componentClass = this.handleParameterizedType(complexType);
+                }
+            }
+
+            if (componentClass == null) {
+                throw new UnsupportedOperationException("Unsupported type " + componentType);
+            }
+
+            Class<?> apiComponentClass = null;
+            if (Primitives.isWrapperType(componentClass)) {
+                apiComponentClass = componentClass;
+            } else if (API_BRIDGE.containsKey(componentClass)) {
+                apiComponentClass = API_BRIDGE.get(componentClass);
+            }
+
+            final ClassNamed finalClass;
+            if (apiComponentClass == null) {
+                finalClass = this.classNamedView.tryFindFirst(io.papermc.typewriter.util.ClassHelper.retrieveFullNestedName(componentClass)).orElse(null);
+            } else {
+                finalClass = new ClassNamed(apiComponentClass);
+            }
+            return "%s.%s<%s>".formatted(
+                io.papermc.paper.datacomponent.DataComponentType.class.getSimpleName(),
+                io.papermc.paper.datacomponent.DataComponentType.Valued.class.getSimpleName(),
+                tryToWrap.apply(Optional.ofNullable(finalClass).map(this.importCollector::getShortName).orElse(componentClass.getSimpleName()))
+            );
+        } else {
+            return "%s.%s".formatted(
+                io.papermc.paper.datacomponent.DataComponentType.class.getSimpleName(),
+                io.papermc.paper.datacomponent.DataComponentType.NonValued.class.getSimpleName()
+            );
+        }
+    }
+
+    private @Nullable Class<? extends Annotation> getEquivalentAnnotation(Codec<?> codec) {
+        Class<? extends Annotation> annotation = null; // int range maybe?
+        if (codec == ExtraCodecs.POSITIVE_INT || codec == ExtraCodecs.POSITIVE_FLOAT) {
+            annotation = Positive.class;
+        } else if (codec == ExtraCodecs.NON_NEGATIVE_INT || codec == ExtraCodecs.NON_NEGATIVE_FLOAT) {
+            annotation = NonNegative.class;
+        }
+        return annotation;
+    }
+
+    @Override
+    protected String rewriteFieldName(Holder.Reference<DataComponentType<?>> reference) {
+        String keyedName = super.rewriteFieldName(reference);
+        return FIELD_RENAMES.getOrDefault(keyedName, keyedName);
+    }
+
+    @Override
+    protected String rewriteFieldValue(Holder.Reference<DataComponentType<?>> reference) {
+        return "%s(%s)".formatted(this.isValued ? "valued" : "unvalued", quoted(reference.key().location().getPath()));
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/ProtoConstant.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/ProtoConstant.java
new file mode 100644
index 0000000000..c370f0c81d
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/ProtoConstant.java
@@ -0,0 +1,30 @@
+package io.papermc.generator.rewriter.types.simple.trial;
+
+import io.papermc.typewriter.parser.token.CharSequenceBlockToken;
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+
+class ProtoConstant {
+
+    private @MonotonicNonNull String name;
+    private @MonotonicNonNull CharSequenceBlockToken token;
+
+    public void name(String name) {
+        this.name = name;
+    }
+
+    public void javadocs(CharSequenceBlockToken token) {
+        this.token = token;
+    }
+
+    public String name() {
+        return this.name;
+    }
+
+    public CharSequenceBlockToken javadocs() {
+        return this.token;
+    }
+
+    public boolean isComplete() {
+        return this.name != null && this.token != null;
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/VillagerProfessionRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/VillagerProfessionRewriter.java
new file mode 100644
index 0000000000..52884792aa
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/VillagerProfessionRewriter.java
@@ -0,0 +1,101 @@
+package io.papermc.generator.rewriter.types.simple.trial;
+
+import io.papermc.generator.rewriter.types.registry.RegistryFieldRewriter;
+import io.papermc.typewriter.parser.Lexer;
+import io.papermc.typewriter.parser.sequence.SequenceTokens;
+import io.papermc.typewriter.parser.sequence.TokenTaskBuilder;
+import io.papermc.typewriter.parser.token.CharSequenceBlockToken;
+import io.papermc.typewriter.parser.token.CharSequenceToken;
+import io.papermc.typewriter.parser.token.TokenType;
+import io.papermc.typewriter.replace.SearchMetadata;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Predicate;
+import net.minecraft.core.Holder;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.world.entity.npc.VillagerProfession;
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+
+public class VillagerProfessionRewriter extends RegistryFieldRewriter<VillagerProfession> {
+
+    public VillagerProfessionRewriter() {
+        super(Registries.VILLAGER_PROFESSION, "getProfession");
+    }
+
+    private static final Set<TokenType> FORMAT_TOKENS = EnumSet.of(
+        TokenType.COMMENT,
+        TokenType.SINGLE_COMMENT
+    );
+
+    private @MonotonicNonNull Map<String, CharSequenceBlockToken> javadocsPerConstant;
+
+    private Map<String, CharSequenceBlockToken> parseConstantJavadocs(String content) {
+        Map<String, CharSequenceBlockToken> map = new HashMap<>();
+
+        Lexer lex = new Lexer(content.toCharArray());
+        lex.checkMarkdownDocComments = !this.sourcesMetadata.canSkipMarkdownDocComments();
+        SequenceTokens.wrap(lex, FORMAT_TOKENS)
+            .group(action -> {
+                ProtoConstant constant = new ProtoConstant();
+                action
+                    .map(TokenType.JAVADOC, token -> {
+                        constant.javadocs(((CharSequenceBlockToken) token));
+                    }, TokenTaskBuilder::asOptional)
+                    .skipQualifiedName(Predicate.isEqual(TokenType.JAVADOC))
+                    .map(TokenType.IDENTIFIER, token -> {
+                        constant.name(((CharSequenceToken) token).value());
+                    })
+                    .skip(TokenType.IDENTIFIER)
+                    .skipClosure(TokenType.LPAREN, TokenType.RPAREN, true)
+                    .map(TokenType.SECO, $ -> {
+                        if (constant.isComplete()) {
+                            map.put(constant.name(), constant.javadocs());
+                        }
+                    });
+            }, TokenTaskBuilder::asRepeatable)
+            .executeOrThrow();
+        /*
+        for enums:
+        Set<TokenType> endMarkers = Set.of(TokenType.CO, TokenType.SECO); // move to static
+        SequenceTokens.wrap(lex, FORMAT_TOKENS)
+            .group(action -> {
+                ProtoConstant constant = new ProtoConstant();
+                action
+                    .map(TokenType.JAVADOC, token -> {
+                        constant.javadocs(((CharSequenceBlockToken) token).value());
+                    }, TokenTaskBuilder::asOptional)
+                    .map(TokenType.IDENTIFIER, token -> {
+                        constant.name(((CharSequenceToken) token).value());
+                    })
+                    .skipClosure(TokenType.LPAREN, TokenType.RPAREN, true)
+                    .skipClosure(TokenType.LSCOPE, TokenType.RSCOPE, true)
+                    .map(endMarkers::contains, $ -> {
+                        // this part will probably fail for the last entry for enum without end (,;)
+                        if (constant.isComplete()) {
+                            map.put(constant.name(), constant.javadocs());
+                        }
+                    });
+            }, TokenTaskBuilder::asRepeatable)
+            .executeOrThrow();
+        */
+
+        return map;
+    }
+
+    @Override
+    protected void insert(SearchMetadata metadata, StringBuilder builder) {
+        this.javadocsPerConstant = parseConstantJavadocs(metadata.replacedContent());
+        super.insert(metadata, builder);
+    }
+
+    @Override
+    protected void rewriteJavadocs(Holder.Reference<VillagerProfession> reference, String replacedContent, String indent, StringBuilder builder) {
+        String constantName = this.rewriteFieldName(reference);
+        if (this.javadocsPerConstant.containsKey(constantName)) {
+            CharSequenceBlockToken token = this.javadocsPerConstant.get(constantName);
+            builder.append(indent).append(replacedContent, token.pos(), token.endPos()).append('\n');
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/package-info.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/package-info.java
new file mode 100644
index 0000000000..7f71a4035f
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/trial/package-info.java
@@ -0,0 +1,6 @@
+@ApiStatus.Experimental
+@NullMarked
+package io.papermc.generator.rewriter.types.simple.trial;
+
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/utils/Annotations.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/utils/Annotations.java
new file mode 100644
index 0000000000..a2e58656e0
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/utils/Annotations.java
@@ -0,0 +1,48 @@
+package io.papermc.generator.rewriter.utils;
+
+import io.papermc.generator.utils.experimental.SingleFlagHolder;
+import io.papermc.typewriter.context.ImportCollector;
+import io.papermc.typewriter.util.ClassHelper;
+import java.lang.annotation.Annotation;
+import org.bukkit.MinecraftExperimental;
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class Annotations {
+
+    public static String annotation(Class<? extends Annotation> clazz, ImportCollector collector) {
+        return "@%s".formatted(collector.getShortName(clazz));
+    }
+
+    public static String annotationStyle(Class<? extends Annotation> clazz) {
+        return "@%s".formatted(ClassHelper.retrieveFullNestedName(clazz));
+    }
+
+    public static String annotation(Class<? extends Annotation> clazz, ImportCollector collector, String param, String value) {
+        String annotation = annotation(clazz, collector);
+        if (value.isEmpty()) {
+            return annotation;
+        }
+        return "%s(%s = %s)".formatted(annotation, param, value);
+    }
+
+    public static String annotation(Class<? extends Annotation> clazz, ImportCollector collector, String value) {
+        String annotation = annotation(clazz, collector);
+        if (value.isEmpty()) {
+            return annotation;
+        }
+        return "%s(%s)".formatted(annotation, value);
+    }
+
+    public static void experimentalAnnotations(StringBuilder builder, String indent, ImportCollector importCollector, SingleFlagHolder requiredFeature) {
+        builder.append(indent).append(annotation(MinecraftExperimental.class, importCollector, "%s.%s".formatted(
+            importCollector.getShortName(MinecraftExperimental.Requires.class, false), requiredFeature.asAnnotationMember().name()
+        ))).append('\n');
+
+        builder.append(indent).append(annotation(ApiStatus.Experimental.class, importCollector)).append('\n');
+    }
+
+    private Annotations() {
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/utils/ScanOldGeneratedSourceCode.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/utils/ScanOldGeneratedSourceCode.java
new file mode 100644
index 0000000000..8700bb44ae
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/utils/ScanOldGeneratedSourceCode.java
@@ -0,0 +1,109 @@
+package io.papermc.generator.rewriter.utils;
+
+import io.papermc.generator.Rewriters;
+import io.papermc.generator.rewriter.registration.PaperPatternSourceSetRewriter;
+import io.papermc.paper.generated.GeneratedFrom;
+import io.papermc.typewriter.SourceFile;
+import io.papermc.typewriter.SourceRewriter;
+import io.papermc.typewriter.context.FileMetadata;
+import io.papermc.typewriter.context.IndentUnit;
+import io.papermc.typewriter.parser.StringReader;
+import io.papermc.typewriter.replace.CommentMarker;
+import io.papermc.typewriter.replace.SearchReplaceRewriter;
+import io.papermc.typewriter.replace.SearchReplaceRewriterBase;
+import net.minecraft.SharedConstants;
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import static io.papermc.typewriter.replace.CommentMarker.EMPTY_MARKER;
+
+public class ScanOldGeneratedSourceCode {
+
+    private static final String CURRENT_VERSION;
+
+    static {
+        SharedConstants.tryDetectVersion();
+        CURRENT_VERSION = SharedConstants.getCurrentVersion().getName();
+    }
+
+    public static void main(String[] args) throws IOException {
+        PaperPatternSourceSetRewriter apiSourceSet = new PaperPatternSourceSetRewriter();
+        PaperPatternSourceSetRewriter serverSourceSet = new PaperPatternSourceSetRewriter();
+
+        Rewriters.bootstrap(apiSourceSet, serverSourceSet);
+
+        checkOutdated(apiSourceSet, Path.of(args[0], "src/main/java"));
+        checkOutdated(serverSourceSet, Path.of(args[1], "src/main/java"));
+    }
+
+    private static void checkOutdated(PaperPatternSourceSetRewriter sourceSetRewriter, Path sourceSet) throws IOException {
+        IndentUnit globalIndentUnit = sourceSetRewriter.getMetadata().indentUnit();;
+        for (Map.Entry<SourceFile, SourceRewriter> entry : sourceSetRewriter.getRewriters().entrySet()) {
+            SourceRewriter rewriter = entry.getValue();
+            if (!(rewriter instanceof SearchReplaceRewriterBase srt) ||
+                srt.getRewriters().stream().noneMatch(SearchReplaceRewriter::hasGeneratedComment)) {
+                continue;
+            }
+
+            SourceFile file = entry.getKey();
+            IndentUnit indentUnit = file.metadata().flatMap(FileMetadata::indentUnit).orElse(globalIndentUnit);
+            Set<SearchReplaceRewriter> rewriters = new HashSet<>(srt.getRewriters());
+            try (LineNumberReader reader = new LineNumberReader(Files.newBufferedReader(sourceSet.resolve(file.path()), StandardCharsets.UTF_8))) {
+                while (true) {
+                    String line = reader.readLine();
+                    if (line == null) {
+                        break;
+                    }
+                    if (line.isEmpty()) {
+                        continue;
+                    }
+
+                    CommentMarker marker = srt.searchStartMarker(new StringReader(line), indentUnit, rewriters);
+                    if (marker != EMPTY_MARKER) {
+                        int startIndentSize = marker.indentSize();
+                        if (startIndentSize % indentUnit.size() != 0) {
+                            continue;
+                        }
+
+                        String nextLine = reader.readLine();
+                        if (nextLine == null) {
+                            break;
+                        }
+                        if (nextLine.isEmpty()) {
+                            continue;
+                        }
+
+                        StringReader nextLineIterator = new StringReader(nextLine);
+                        int indentSize = nextLineIterator.skipChars(indentUnit.character());
+                        if (indentSize != startIndentSize) {
+                            continue;
+                        }
+
+                        String generatedComment = "// %s ".formatted(Annotations.annotationStyle(GeneratedFrom.class));
+                        if (nextLineIterator.trySkipString(generatedComment) && nextLineIterator.canRead()) {
+                            String generatedVersion = nextLineIterator.getRemaining();
+                            if (!CURRENT_VERSION.equals(generatedVersion)) {
+                                throw new AssertionError(
+                                    "Code at line %d in %s is marked as being generated in version %s when the current version is %s".formatted(
+                                    reader.getLineNumber(), file.mainClass().canonicalName(), generatedVersion, CURRENT_VERSION)
+                                );
+                            }
+
+                            if (!marker.owner().getOptions().multipleOperation()) {
+                                if (rewriters.remove(marker.owner()) && rewriters.isEmpty()) {
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/OverriddenClassGenerator.java b/paper-generator/src/main/java/io/papermc/generator/types/OverriddenClassGenerator.java
new file mode 100644
index 0000000000..d610fdeb2c
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/OverriddenClassGenerator.java
@@ -0,0 +1,46 @@
+package io.papermc.generator.types;
+
+import com.mojang.logging.LogUtils;
+import com.squareup.javapoet.MethodSpec;
+import io.papermc.generator.utils.Annotations;
+import java.util.Arrays;
+import org.jspecify.annotations.NullMarked;
+import org.slf4j.Logger;
+
+import static javax.lang.model.element.Modifier.PUBLIC;
+
+@NullMarked
+public abstract class OverriddenClassGenerator<T> extends SimpleGenerator {
+
+    private static final Logger LOGGER = LogUtils.getLogger();
+
+    protected final Class<? extends T> baseClass;
+    protected boolean printWarningOnMissingOverride;
+
+    protected OverriddenClassGenerator(Class<T> baseClass, String className, String packageName) {
+        super(className, packageName);
+        this.baseClass = baseClass;
+    }
+
+    public MethodSpec.Builder createMethod(String name, Class<?>... parameterTypes) {
+        MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder(name)
+            .addModifiers(PUBLIC);
+        if (methodExists(name, parameterTypes)) {
+            methodBuilder.addAnnotation(Annotations.OVERRIDE);
+        } else {
+            if (this.printWarningOnMissingOverride) {
+                LOGGER.warn("Method {}#{}{} didn't override a known api method!", this.className, name, Arrays.toString(parameterTypes));
+            }
+        }
+        return methodBuilder;
+    }
+
+    protected boolean methodExists(String name, Class<?>... parameterTypes) {
+        try {
+            this.baseClass.getMethod(name, parameterTypes);
+            return true;
+        } catch (NoSuchMethodException e) {
+            return false;
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/SimpleEnumGenerator.java b/paper-generator/src/main/java/io/papermc/generator/types/SimpleEnumGenerator.java
new file mode 100644
index 0000000000..282a30568a
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/SimpleEnumGenerator.java
@@ -0,0 +1,30 @@
+package io.papermc.generator.types;
+
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.utils.Annotations;
+import javax.lang.model.element.Modifier;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class SimpleEnumGenerator<T extends Enum<T>> extends SimpleGenerator {
+
+    private final Class<T> enumClass;
+
+    public SimpleEnumGenerator(Class<T> enumClass, String packageName) {
+        super(enumClass.getSimpleName(), packageName);
+        this.enumClass = enumClass;
+    }
+
+    @Override
+    protected TypeSpec getTypeSpec() {
+        TypeSpec.Builder typeBuilder = TypeSpec.enumBuilder(this.enumClass.getSimpleName())
+            .addModifiers(Modifier.PUBLIC)
+            .addAnnotations(Annotations.CLASS_HEADER);
+
+        for (T enumValue : this.enumClass.getEnumConstants()) {
+            typeBuilder.addEnumConstant(enumValue.name());
+        }
+
+        return typeBuilder.build();
+    }
+}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/types/SimpleGenerator.java b/paper-generator/src/main/java/io/papermc/generator/types/SimpleGenerator.java
similarity index 78%
rename from paper-api-generator/src/main/java/io/papermc/generator/types/SimpleGenerator.java
rename to paper-generator/src/main/java/io/papermc/generator/types/SimpleGenerator.java
index 3608b449f8..c4476d50a3 100644
--- a/paper-api-generator/src/main/java/io/papermc/generator/types/SimpleGenerator.java
+++ b/paper-generator/src/main/java/io/papermc/generator/types/SimpleGenerator.java
@@ -2,13 +2,16 @@ package io.papermc.generator.types;
 
 import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.TypeSpec;
-
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
+import org.jspecify.annotations.NullMarked;
 
+@NullMarked
 public abstract class SimpleGenerator implements SourceGenerator {
 
+    public static final String INDENT_UNIT = "    ";
+
     protected final String className;
     protected final String packageName;
 
@@ -19,14 +22,15 @@ public abstract class SimpleGenerator implements SourceGenerator {
 
     protected abstract TypeSpec getTypeSpec();
 
-    protected abstract JavaFile.Builder file(JavaFile.Builder builder);
+    protected JavaFile.Builder file(JavaFile.Builder builder) {
+        return builder;
+    }
 
     @Override
     public void writeToFile(Path parent) throws IOException {
-
         JavaFile.Builder builder = JavaFile.builder(this.packageName, this.getTypeSpec());
         this.file(builder)
-            .indent("    ")
+            .indent(INDENT_UNIT)
             .skipJavaLangImports(true);
 
         builder.build().writeTo(parent, StandardCharsets.UTF_8);
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/types/SourceGenerator.java b/paper-generator/src/main/java/io/papermc/generator/types/SourceGenerator.java
similarity index 76%
rename from paper-api-generator/src/main/java/io/papermc/generator/types/SourceGenerator.java
rename to paper-generator/src/main/java/io/papermc/generator/types/SourceGenerator.java
index 2d550fa421..434b7b4822 100644
--- a/paper-api-generator/src/main/java/io/papermc/generator/types/SourceGenerator.java
+++ b/paper-generator/src/main/java/io/papermc/generator/types/SourceGenerator.java
@@ -2,7 +2,9 @@ package io.papermc.generator.types;
 
 import java.io.IOException;
 import java.nio.file.Path;
+import org.jspecify.annotations.NullMarked;
 
+@NullMarked
 public interface SourceGenerator {
 
     void writeToFile(Path parent) throws IOException;
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/Types.java b/paper-generator/src/main/java/io/papermc/generator/types/Types.java
new file mode 100644
index 0000000000..84b52e7940
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/Types.java
@@ -0,0 +1,14 @@
+package io.papermc.generator.types;
+
+import com.squareup.javapoet.ClassName;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class Types {
+
+    public static final String BASE_PACKAGE = "org.bukkit.craftbukkit";
+
+    public static final ClassName CRAFT_BLOCK_DATA = ClassName.get(BASE_PACKAGE + ".block.data", "CraftBlockData");
+
+    public static final ClassName CRAFT_BLOCK = ClassName.get(BASE_PACKAGE + ".block", "CraftBlock");
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/CraftBlockDataBootstrapper.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/CraftBlockDataBootstrapper.java
new file mode 100644
index 0000000000..fbdd1f3f21
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/CraftBlockDataBootstrapper.java
@@ -0,0 +1,23 @@
+package io.papermc.generator.types.craftblockdata;
+
+import com.google.common.base.Preconditions;
+import io.papermc.generator.types.SourceGenerator;
+import io.papermc.generator.utils.BlockStateMapping;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.world.level.block.Block;
+import org.bukkit.block.data.BlockData;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class CraftBlockDataBootstrapper {
+
+    public static void bootstrap(List<SourceGenerator> generators) {
+        for (Map.Entry<Class<? extends Block>, BlockStateMapping.BlockData> entry : BlockStateMapping.MAPPING.entrySet()) {
+            Class<? extends BlockData> api = BlockStateMapping.getBestSuitedApiClass(entry.getValue());
+            Preconditions.checkState(api != null, "Unknown custom BlockData api class for " + entry.getKey().getCanonicalName());
+
+            generators.add(new CraftBlockDataGenerator<>(entry.getKey(), entry.getValue(), api));
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/CraftBlockDataGenerator.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/CraftBlockDataGenerator.java
new file mode 100644
index 0000000000..2f2e125198
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/CraftBlockDataGenerator.java
@@ -0,0 +1,243 @@
+package io.papermc.generator.types.craftblockdata;
+
+import com.google.common.base.CaseFormat;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import com.mojang.datafixers.util.Either;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.OverriddenClassGenerator;
+import io.papermc.generator.types.Types;
+import io.papermc.generator.types.craftblockdata.property.PropertyMaker;
+import io.papermc.generator.types.craftblockdata.property.PropertyWriter;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.converter.Converters;
+import io.papermc.generator.types.craftblockdata.property.holder.DataPropertyMaker;
+import io.papermc.generator.types.craftblockdata.property.holder.VirtualField;
+import io.papermc.generator.types.craftblockdata.property.holder.converter.DataConverter;
+import io.papermc.generator.types.craftblockdata.property.holder.converter.DataConverters;
+import io.papermc.generator.utils.Annotations;
+import io.papermc.generator.utils.BlockStateMapping;
+import io.papermc.generator.utils.CommonVariable;
+import io.papermc.generator.utils.NamingManager;
+import it.unimi.dsi.fastutil.Pair;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.Map;
+import java.util.function.BiConsumer;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.ChiseledBookShelfBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.bukkit.Axis;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.Rail;
+import org.jspecify.annotations.NullMarked;
+
+import static io.papermc.generator.utils.NamingManager.keywordGet;
+import static io.papermc.generator.utils.NamingManager.keywordGetSet;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+
+@NullMarked
+public class CraftBlockDataGenerator<T extends BlockData> extends OverriddenClassGenerator<T> {
+
+    private final Class<? extends Block> blockClass;
+    private final BlockStateMapping.BlockData blockData;
+
+    protected CraftBlockDataGenerator(Class<? extends Block> blockClass, BlockStateMapping.BlockData blockData, Class<T> baseClass) {
+        super(baseClass, blockData.implName(), Types.BASE_PACKAGE + ".block.impl");
+        this.blockClass = blockClass;
+        this.blockData = blockData;
+        this.printWarningOnMissingOverride = true;
+    }
+
+    // default keywords: get/set
+    // for single boolean property: get = is
+    // for indexed boolean property: get = has
+    private static final Map<Property<?>, NamingManager.AccessKeyword> FLUENT_KEYWORD = ImmutableMap.<Property<?>, NamingManager.AccessKeyword>builder()
+        .put(BlockStateProperties.ATTACH_FACE, keywordGetSet("getAttached", "setAttached")) // todo remove this once switch methods are gone
+        .put(BlockStateProperties.EYE, keywordGet("has"))
+        .put(BlockStateProperties.BERRIES, keywordGet("has")) // spigot method rename
+        // data holder keywords is only needed for the first property they hold
+        .put(ChiseledBookShelfBlock.SLOT_OCCUPIED_PROPERTIES.getFirst(), keywordGet("is"))
+        .buildOrThrow();
+
+    private static final Map<Property<?>, BiConsumer<ParameterSpec, MethodSpec.Builder>> SETTER_PRECONDITIONS = Map.of(
+        BlockStateProperties.FACING, (param, method) -> {
+            method.addStatement("$T.checkArgument($N.isCartesian(), $S)", Preconditions.class, param, "Invalid face, only cartesian face are allowed for this property!");
+        },
+        BlockStateProperties.HORIZONTAL_FACING, (param, method) -> {
+            method.addStatement("$1T.checkArgument($2N.isCartesian() && $2N.getModY() == 0, $3S)", Preconditions.class, param, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        },
+        BlockStateProperties.FACING_HOPPER, (param, method) -> {
+            method.addStatement("$1T.checkArgument($2N.isCartesian() && $2N != $3T.UP, $4S)", Preconditions.class, param, BlockFace.class, "Invalid face, only cartesian face (excluding UP) are allowed for this property!");
+        },
+        BlockStateProperties.VERTICAL_DIRECTION, (param, method) -> {
+            method.addStatement("$T.checkArgument($N.getModY() != 0, $S)", Preconditions.class, param, "Invalid face, only vertical face are allowed for this property!");
+        },
+        BlockStateProperties.ROTATION_16, (param, method) -> {
+            method.addStatement("$1T.checkArgument($2N != $3T.SELF && $2N.getModY() == 0, $4S)", Preconditions.class, param, BlockFace.class, "Invalid face, only horizontal face are allowed for this property!");
+        },
+        BlockStateProperties.HORIZONTAL_AXIS, (param, method) -> {
+            method.addStatement("$1T.checkArgument($2N == $3T.X || $2N == $3T.Z, $4S)", Preconditions.class, param, Axis.class, "Invalid axis, only horizontal axis are allowed for this property!");
+        },
+        BlockStateProperties.RAIL_SHAPE_STRAIGHT, (param, method) -> {
+            method.addStatement("$1T.checkArgument($2N != $3T.NORTH_EAST && $2N != $3T.NORTH_WEST && $2N != $3T.SOUTH_EAST && $2N != $3T.SOUTH_WEST, $4S)", Preconditions.class, param, Rail.Shape.class, "Invalid rail shape, only straight rail are allowed for this property!");
+        }
+    );
+
+    private TypeSpec.Builder propertyHolder() {
+        TypeSpec.Builder typeBuilder = TypeSpec.classBuilder(this.className)
+            .addModifiers(PUBLIC)
+            .addAnnotation(Annotations.GENERATED_FROM)
+            .superclass(Types.CRAFT_BLOCK_DATA)
+            .addSuperinterface(this.baseClass);
+
+        ParameterSpec parameter = ParameterSpec.builder(BlockState.class, "state").build();
+        MethodSpec constructor = MethodSpec.constructorBuilder()
+            .addModifiers(PUBLIC)
+            .addParameter(parameter)
+            .addStatement("super($N)", parameter)
+            .build();
+
+        typeBuilder.addMethod(constructor);
+        return typeBuilder;
+    }
+
+    @Override
+    protected TypeSpec getTypeSpec() {
+        TypeSpec.Builder typeBuilder = this.propertyHolder();
+
+        for (Property<?> property : this.blockData.properties()) {
+            Pair<Class<?>, String> fieldName = PropertyWriter.referenceFieldFromVar(this.blockClass, property, this.blockData.propertyFields());
+
+            PropertyMaker propertyMaker = PropertyMaker.make(property);
+
+            final String varName;
+            if (this.blockData.propertyFields().containsKey(property)) {
+                // get the name from the local class or fallback to the generic BlockStateProperties constant name if not found
+                varName = this.blockData.propertyFields().get(property).getName();
+            } else {
+                varName = fieldName.right();
+            }
+
+            FieldSpec.Builder fieldBuilder = FieldSpec.builder(propertyMaker.getPropertyType(), varName, PRIVATE, STATIC, FINAL)
+                .initializer("$T.$L", fieldName.left(), fieldName.right());
+            FieldSpec field = fieldBuilder.build();
+
+            typeBuilder.addField(field);
+
+            ConverterBase converter = Converters.getOrDefault(property, propertyMaker);
+            Class<?> apiClass = converter.getApiType();
+
+            NamingManager.AccessKeyword accessKeyword = null;
+            if (apiClass == Boolean.TYPE) {
+                accessKeyword = keywordGet("is");
+            }
+            accessKeyword = FLUENT_KEYWORD.getOrDefault(property, accessKeyword);
+            NamingManager naming = new NamingManager(accessKeyword, CaseFormat.LOWER_UNDERSCORE, property.getName());
+
+            // get
+            {
+                MethodSpec.Builder methodBuilder = createMethod(naming.simpleGetterName(name -> !name.startsWith("is_") && !name.startsWith("has_")));
+                converter.convertGetter(methodBuilder, field);
+                methodBuilder.returns(apiClass);
+
+                typeBuilder.addMethod(methodBuilder.build());
+            }
+
+            // set
+            {
+                String paramName = naming.paramName(apiClass);
+                ParameterSpec parameter = ParameterSpec.builder(apiClass, paramName, FINAL).build();
+
+                MethodSpec.Builder methodBuilder = createMethod(naming.simpleSetterName(name -> !name.startsWith("is_")), apiClass).addParameter(parameter);
+                if (!apiClass.isPrimitive()) {
+                    methodBuilder.addStatement("$T.checkArgument($N != null, $S)", Preconditions.class, parameter, "%s cannot be null!".formatted(paramName));
+                }
+                if (SETTER_PRECONDITIONS.containsKey(property)) {
+                    SETTER_PRECONDITIONS.get(property).accept(parameter, methodBuilder);
+                }
+                converter.convertSetter(methodBuilder, field, parameter);
+
+                typeBuilder.addMethod(methodBuilder.build());
+            }
+
+            // extra
+            propertyMaker.addExtras(typeBuilder, field, this, naming);
+        }
+
+        for (Map.Entry<Either<Field, VirtualField>, Collection<Property<?>>> complexFields : this.blockData.complexPropertyFields().asMap().entrySet()) {
+            Either<Field, VirtualField> fieldData = complexFields.getKey();
+            Collection<Property<?>> properties = complexFields.getValue();
+            Property<?> firstProperty = properties.iterator().next();
+
+            PropertyMaker propertyMaker = PropertyMaker.make(firstProperty);
+            ConverterBase propertyConverter = Converters.getOrDefault(firstProperty, propertyMaker);
+
+            DataPropertyMaker dataPropertyMaker = DataPropertyMaker.make(properties, this.blockClass, fieldData);
+
+            FieldSpec field = dataPropertyMaker.getOrCreateField(this.blockData.propertyFields()).build();
+            typeBuilder.addField(field);
+
+            DataConverter converter = DataConverters.getOrThrow(dataPropertyMaker.getType());
+            Class<?> apiClass = propertyConverter.getApiType();
+
+            NamingManager.AccessKeyword accessKeyword = null;
+            if (apiClass == Boolean.TYPE) {
+                accessKeyword = NamingManager.keywordGet("has");
+            }
+            accessKeyword = FLUENT_KEYWORD.getOrDefault(firstProperty, accessKeyword);
+            NamingManager naming = new NamingManager(accessKeyword, CaseFormat.UPPER_UNDERSCORE, dataPropertyMaker.getBaseName());
+
+            ParameterSpec indexParameter = ParameterSpec.builder(dataPropertyMaker.getIndexClass(), dataPropertyMaker.getIndexClass() == Integer.TYPE ? CommonVariable.INDEX : naming.paramName(dataPropertyMaker.getIndexClass()), FINAL).build();
+
+            // get
+            {
+                MethodSpec.Builder methodBuilder = createMethod(naming.simpleGetterName(name -> true), dataPropertyMaker.getIndexClass())
+                    .addParameter(indexParameter);
+                if (!dataPropertyMaker.getIndexClass().isPrimitive()) {
+                    methodBuilder.addStatement("$T.checkArgument($N != null, $S)", Preconditions.class, indexParameter, "%s cannot be null!".formatted(indexParameter.name));
+                }
+                converter.convertGetter(propertyConverter, methodBuilder, field, indexParameter);
+                methodBuilder.returns(apiClass);
+
+                typeBuilder.addMethod(methodBuilder.build());
+            }
+
+            // set
+            {
+                String paramName = naming.paramName(apiClass);
+                ParameterSpec parameter = ParameterSpec.builder(apiClass, paramName, FINAL).build();
+
+                MethodSpec.Builder methodBuilder = createMethod(naming.simpleSetterName(name -> true), dataPropertyMaker.getIndexClass(), apiClass)
+                    .addParameter(indexParameter)
+                    .addParameter(parameter);
+                if (!dataPropertyMaker.getIndexClass().isPrimitive()) {
+                    methodBuilder.addStatement("$T.checkArgument($N != null, $S)", Preconditions.class, indexParameter, "%s cannot be null!".formatted(indexParameter.name));
+                }
+                if (!apiClass.isPrimitive()) {
+                    methodBuilder.addStatement("$T.checkArgument($N != null, $S)", Preconditions.class, parameter, "%s cannot be null!".formatted(paramName));
+                }
+                if (SETTER_PRECONDITIONS.containsKey(firstProperty)) {
+                    SETTER_PRECONDITIONS.get(firstProperty).accept(parameter, methodBuilder);
+                }
+                converter.convertSetter(propertyConverter, methodBuilder, field, indexParameter, parameter);
+
+                typeBuilder.addMethod(methodBuilder.build());
+            }
+
+            // extra
+            dataPropertyMaker.addExtras(typeBuilder, field, indexParameter, propertyConverter, this, naming);
+        }
+
+        return typeBuilder.build();
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/EnumPropertyWriter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/EnumPropertyWriter.java
new file mode 100644
index 0000000000..9c38001d09
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/EnumPropertyWriter.java
@@ -0,0 +1,46 @@
+package io.papermc.generator.types.craftblockdata.property;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeName;
+import io.papermc.generator.utils.BlockStateMapping;
+import net.minecraft.util.StringRepresentable;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class EnumPropertyWriter<T extends Enum<T> & StringRepresentable> extends PropertyWriter<T> {
+
+    protected EnumPropertyWriter(EnumProperty<T> property) {
+        super(property);
+    }
+
+    @Override
+    public TypeName getPropertyType() {
+        if (this.property.getClass() == EnumProperty.class) { // exact match
+            return ParameterizedTypeName.get(this.property.getClass(), this.property.getValueClass());
+        }
+        return super.getPropertyType();
+    }
+
+    @Override
+    protected Class<?> processApiType() {
+        Class<?> apiClass = this.property.getValueClass();
+        apiClass = BlockStateMapping.ENUM_BRIDGE.get(apiClass);
+        if (apiClass == null) {
+            throw new IllegalStateException("Unknown enum type for " + this.property);
+        }
+        return apiClass;
+    }
+
+    @Override
+    public void convertGetter(MethodSpec.Builder method, FieldSpec field) {
+        method.addStatement("return " + this.rawGetExprent().formatted("$N"), field, this.getApiType());
+    }
+
+    @Override
+    public String rawGetExprent() {
+        return "this.get(%s, $T.class)";
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/IntegerPropertyWriter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/IntegerPropertyWriter.java
new file mode 100644
index 0000000000..5d5fb8c8be
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/IntegerPropertyWriter.java
@@ -0,0 +1,44 @@
+package io.papermc.generator.types.craftblockdata.property;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.types.craftblockdata.property.converter.Converters;
+import io.papermc.generator.utils.NamingManager;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class IntegerPropertyWriter extends PropertyWriter<Integer> {
+
+    protected IntegerPropertyWriter(IntegerProperty property) {
+        super(property);
+    }
+
+    @Override
+    public void addExtras(TypeSpec.Builder builder, FieldSpec field, CraftBlockDataGenerator<?> generator, NamingManager naming) {
+        if (Converters.has(this.property)) {
+            return;
+        }
+
+        IntegerProperty property = (IntegerProperty) this.property;
+
+        if (property.min != 0 || property.getName().equals(BlockStateProperties.LEVEL.getName())) { // special case (levelled: composter)
+            MethodSpec.Builder methodBuilder = generator.createMethod(naming.getterName(name -> true).pre("Minimum").concat());
+            methodBuilder.addStatement("return $N.min", field);
+            methodBuilder.returns(this.getApiType());
+
+            builder.addMethod(methodBuilder.build());
+        }
+
+        {
+            MethodSpec.Builder methodBuilder = generator.createMethod(naming.getterName(name -> true).pre("Maximum").concat());
+            methodBuilder.addStatement("return $N.max", field);
+            methodBuilder.returns(this.getApiType());
+
+            builder.addMethod(methodBuilder.build());
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/PropertyMaker.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/PropertyMaker.java
new file mode 100644
index 0000000000..0560e19f07
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/PropertyMaker.java
@@ -0,0 +1,25 @@
+package io.papermc.generator.types.craftblockdata.property;
+
+import com.squareup.javapoet.TypeName;
+import io.papermc.generator.types.craftblockdata.property.appender.AppenderBase;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface PropertyMaker extends ConverterBase, AppenderBase {
+
+    TypeName getPropertyType();
+
+    static <T extends Comparable<T>> PropertyMaker make(Property<T> property) {
+        if (property instanceof IntegerProperty intProperty) {
+            return new IntegerPropertyWriter(intProperty);
+        }
+        if (property instanceof EnumProperty<?> enumProperty) {
+            return new EnumPropertyWriter<>(enumProperty);
+        }
+        return new PropertyWriter<>(property);
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/PropertyWriter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/PropertyWriter.java
new file mode 100644
index 0000000000..60c93f27a9
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/PropertyWriter.java
@@ -0,0 +1,88 @@
+package io.papermc.generator.types.craftblockdata.property;
+
+import com.google.common.base.Suppliers;
+import com.google.common.primitives.Primitives;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.TypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.types.craftblockdata.property.appender.PropertyAppenders;
+import io.papermc.generator.utils.BlockStateMapping;
+import io.papermc.generator.utils.NamingManager;
+import it.unimi.dsi.fastutil.Pair;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Map;
+import java.util.function.Supplier;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class PropertyWriter<T extends Comparable<T>> implements PropertyMaker {
+
+    protected final Property<T> property;
+    private final Supplier<Class<?>> apiClassSupplier;
+
+    protected PropertyWriter(Property<T> property) {
+        this.property = property;
+        this.apiClassSupplier = Suppliers.memoize(this::processApiType);
+    }
+
+    @Override
+    public TypeName getPropertyType() {
+        return TypeName.get(this.property.getClass());
+    }
+
+    protected Class<?> processApiType() {
+        Class<T> apiClass = this.property.getValueClass();
+        if (Primitives.isWrapperType(apiClass)) {
+            apiClass = Primitives.unwrap(apiClass);
+        }
+        return apiClass;
+    }
+
+    @Override
+    public Class<?> getApiType() {
+        return this.apiClassSupplier.get();
+    }
+
+    @Override
+    public String rawSetExprent() {
+        return "this.set(%s, $N)";
+    }
+
+    @Override
+    public String rawGetExprent() {
+        return "this.get(%s)";
+    }
+
+    @Override
+    public void addExtras(TypeSpec.Builder builder, FieldSpec field, CraftBlockDataGenerator<?> generator, NamingManager naming) {
+        PropertyAppenders.ifPresent(this.property, appender -> appender.addExtras(builder, field, generator, naming));
+    }
+
+    public static Pair<Class<?>, String> referenceField(Class<? extends Block> from, Property<?> property, Map<Property<?>, Field> fields) {
+        Class<?> fieldAccess = from;
+        Field field = fields.get(property);
+        if (field == null || !Modifier.isPublic(field.getModifiers())) {
+            fieldAccess = BlockStateProperties.class;
+            field = BlockStateMapping.FALLBACK_GENERIC_FIELDS.get(property);
+        }
+        return Pair.of(fieldAccess, field.getName());
+    }
+
+    public static Pair<Class<?>, String> referenceFieldFromVar(Class<? extends Block> from, Property<?> property, Map<Property<?>, Field> fields) {
+        Class<?> fieldAccess = from;
+        Field field = fields.get(property);
+        Field genericField = BlockStateMapping.FALLBACK_GENERIC_FIELDS.get(property);
+        if (field == null || !Modifier.isPublic(field.getModifiers()) || !genericField.getType().equals(field.getType())) {
+            // field type can differ from BlockStateProperties constants (that's the case for the shulker box (#FACING) and the vault (#STATE)) ref: 1.20.5
+            // in that case fallback to the more accurate type to avoid compile error
+            fieldAccess = BlockStateProperties.class;
+            field = genericField;
+        }
+        return Pair.of(fieldAccess, field.getName());
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/AppenderBase.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/AppenderBase.java
new file mode 100644
index 0000000000..b1e149e75b
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/AppenderBase.java
@@ -0,0 +1,13 @@
+package io.papermc.generator.types.craftblockdata.property.appender;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.utils.NamingManager;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface AppenderBase {
+
+    void addExtras(TypeSpec.Builder builder, FieldSpec field, CraftBlockDataGenerator<?> generator, NamingManager naming);
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/EnumValuesAppender.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/EnumValuesAppender.java
new file mode 100644
index 0000000000..0898c37475
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/EnumValuesAppender.java
@@ -0,0 +1,45 @@
+package io.papermc.generator.types.craftblockdata.property.appender;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.utils.NamingManager;
+import java.util.Set;
+import net.minecraft.util.StringRepresentable;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class EnumValuesAppender<T extends Enum<T> & StringRepresentable, A extends Enum<A>> implements PropertyAppender<T, A> {
+
+    private final EnumProperty<T> property;
+    private final Class<A> apiType;
+    private final String methodName;
+
+    public EnumValuesAppender(EnumProperty<T> property, Class<A> apiType, String methodName) {
+        this.property = property;
+        this.apiType = apiType;
+        this.methodName = methodName;
+    }
+
+    @Override
+    public EnumProperty<T> getProperty() {
+        return this.property;
+    }
+
+    @Override
+    public Class<A> getApiType() {
+        return this.apiType;
+    }
+
+    @Override
+    public void addExtras(TypeSpec.Builder builder, FieldSpec field, CraftBlockDataGenerator<?> generator, NamingManager naming) {
+        MethodSpec.Builder methodBuilder = generator.createMethod(this.methodName);
+        methodBuilder.addStatement("return this.getValues($N, $T.class)", field, this.apiType);
+        methodBuilder.returns(ParameterizedTypeName.get(Set.class, this.apiType));
+
+        builder.addMethod(methodBuilder.build());
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/PropertyAppender.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/PropertyAppender.java
new file mode 100644
index 0000000000..63bc0dbd28
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/PropertyAppender.java
@@ -0,0 +1,12 @@
+package io.papermc.generator.types.craftblockdata.property.appender;
+
+import net.minecraft.world.level.block.state.properties.Property;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface PropertyAppender<T extends Comparable<T>, A> extends AppenderBase {
+
+    Property<T> getProperty();
+
+    Class<A> getApiType();
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/PropertyAppenders.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/PropertyAppenders.java
new file mode 100644
index 0000000000..9ddfe158c6
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/appender/PropertyAppenders.java
@@ -0,0 +1,33 @@
+package io.papermc.generator.types.craftblockdata.property.appender;
+
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.bukkit.Axis;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Rail;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class PropertyAppenders {
+
+    private static final Map<Property<?>, AppenderBase> APPENDERS = Stream.of(
+        new EnumValuesAppender<>(BlockStateProperties.AXIS, Axis.class, "getAxes"),
+        new EnumValuesAppender<>(BlockStateProperties.HORIZONTAL_AXIS, Axis.class, "getAxes"),
+        new EnumValuesAppender<>(BlockStateProperties.FACING, BlockFace.class, "getFaces"),
+        new EnumValuesAppender<>(BlockStateProperties.HORIZONTAL_FACING, BlockFace.class, "getFaces"),
+        new EnumValuesAppender<>(BlockStateProperties.FACING_HOPPER, BlockFace.class, "getFaces"),
+        new EnumValuesAppender<>(BlockStateProperties.RAIL_SHAPE, Rail.Shape.class, "getShapes"),
+        new EnumValuesAppender<>(BlockStateProperties.RAIL_SHAPE_STRAIGHT, Rail.Shape.class, "getShapes"),
+        new EnumValuesAppender<>(BlockStateProperties.VERTICAL_DIRECTION, BlockFace.class, "getVerticalDirections")
+    ).collect(Collectors.toUnmodifiableMap(PropertyAppender::getProperty, key -> key));
+
+    public static void ifPresent(Property<?> property, Consumer<AppenderBase> callback) {
+        if (APPENDERS.containsKey(property)) {
+            callback.accept(APPENDERS.get(property));
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/Converter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/Converter.java
new file mode 100644
index 0000000000..f4c3205c84
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/Converter.java
@@ -0,0 +1,13 @@
+package io.papermc.generator.types.craftblockdata.property.converter;
+
+import net.minecraft.world.level.block.state.properties.Property;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface Converter<T extends Comparable<T>, A> extends ConverterBase {
+
+    Property<T> getProperty();
+
+    @Override
+    Class<A> getApiType();
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/ConverterBase.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/ConverterBase.java
new file mode 100644
index 0000000000..cbe2e0f59a
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/ConverterBase.java
@@ -0,0 +1,24 @@
+package io.papermc.generator.types.craftblockdata.property.converter;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface ConverterBase {
+
+    Class<?> getApiType();
+
+    default void convertSetter(MethodSpec.Builder method, FieldSpec field, ParameterSpec parameter) {
+        method.addStatement(this.rawSetExprent().formatted("$N"), field, parameter);
+    }
+
+    String rawSetExprent(); // this go on two layers which can be hard to follow refactor?
+
+    default void convertGetter(MethodSpec.Builder method, FieldSpec field) {
+        method.addStatement("return " + this.rawGetExprent().formatted("$N"), field);
+    }
+
+    String rawGetExprent();
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/Converters.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/Converters.java
new file mode 100644
index 0000000000..ee2f8d3d5f
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/Converters.java
@@ -0,0 +1,25 @@
+package io.papermc.generator.types.craftblockdata.property.converter;
+
+import io.papermc.generator.types.craftblockdata.property.PropertyMaker;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class Converters {
+
+    private static final Map<Property<?>, ConverterBase> CONVERTERS = Stream.of(
+        new RotationConverter(),
+        new NoteConverter()
+    ).collect(Collectors.toUnmodifiableMap(Converter::getProperty, key -> key));
+
+    public static ConverterBase getOrDefault(Property<?> property, PropertyMaker maker) {
+        return CONVERTERS.getOrDefault(property, maker);
+    }
+
+    public static boolean has(Property<?> property) {
+        return CONVERTERS.containsKey(property);
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/NoteConverter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/NoteConverter.java
new file mode 100644
index 0000000000..91189dd6a5
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/NoteConverter.java
@@ -0,0 +1,37 @@
+package io.papermc.generator.types.craftblockdata.property.converter;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.bukkit.Note;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class NoteConverter implements Converter<Integer, Note> {
+
+    @Override
+    public Property<Integer> getProperty() {
+        return BlockStateProperties.NOTE;
+    }
+
+    @Override
+    public Class<Note> getApiType() {
+        return Note.class;
+    }
+
+    @Override
+    public String rawSetExprent() {
+        return "this.set(%s, (int) $N.getId())";
+    }
+
+    @Override
+    public void convertGetter(MethodSpec.Builder method, FieldSpec field) {
+        method.addStatement("return " + this.rawGetExprent().formatted("$N"), this.getApiType(), field);
+    }
+
+    @Override
+    public String rawGetExprent() {
+        return "new $T(this.get(%s))";
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/RotationConverter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/RotationConverter.java
new file mode 100644
index 0000000000..7726efd33c
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/converter/RotationConverter.java
@@ -0,0 +1,45 @@
+package io.papermc.generator.types.craftblockdata.property.converter;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.Property;
+import net.minecraft.world.level.block.state.properties.RotationSegment;
+import org.bukkit.block.BlockFace;
+import org.bukkit.util.Vector;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class RotationConverter implements Converter<Integer, BlockFace> {
+
+    private static final String DIRECTION_VAR = "dir";
+    private static final String ANGLE_VAR = "angle";
+
+    @Override
+    public Property<Integer> getProperty() {
+        return BlockStateProperties.ROTATION_16;
+    }
+
+    @Override
+    public Class<BlockFace> getApiType() {
+        return BlockFace.class;
+    }
+
+    @Override
+    public void convertSetter(MethodSpec.Builder method, FieldSpec field, ParameterSpec parameter) {
+        method.addStatement("$T $L = $N.getDirection()", Vector.class, DIRECTION_VAR, parameter);
+        method.addStatement("$1T $2L = ($1T) -$3T.toDegrees($3T.atan2($4L.getX(), $4L.getZ()))", Float.TYPE, ANGLE_VAR, Math.class, DIRECTION_VAR);
+        method.addStatement(this.rawSetExprent().formatted("$N", ANGLE_VAR), field, RotationSegment.class);
+    }
+
+    @Override
+    public String rawSetExprent() {
+        return "this.set(%s, $T.convertToSegment(%s))";
+    }
+
+    @Override
+    public String rawGetExprent() {
+        return "CraftBlockData.ROTATION_CYCLE[this.get(%s)]";
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataHolderType.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataHolderType.java
new file mode 100644
index 0000000000..86a70923c1
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataHolderType.java
@@ -0,0 +1,7 @@
+package io.papermc.generator.types.craftblockdata.property.holder;
+
+public enum DataHolderType {
+    MAP,
+    LIST,
+    ARRAY
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyMaker.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyMaker.java
new file mode 100644
index 0000000000..117b2cd8a2
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyMaker.java
@@ -0,0 +1,31 @@
+package io.papermc.generator.types.craftblockdata.property.holder;
+
+import com.mojang.datafixers.util.Either;
+import com.squareup.javapoet.FieldSpec;
+import io.papermc.generator.types.craftblockdata.property.holder.appender.DataAppender;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.Map;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface DataPropertyMaker extends DataAppender {
+
+    FieldSpec.Builder getOrCreateField(Map<Property<?>, Field> fields);
+
+    Class<?> getIndexClass();
+
+    @Override
+    DataHolderType getType();
+
+    String getBaseName();
+
+    static DataPropertyMaker make(Collection<? extends Property<?>> properties, Class<? extends Block> blockClass, Either<Field, VirtualField> fieldData) {
+        return fieldData.map(
+            field -> new DataPropertyWriter(field, properties, blockClass),
+            virtualField -> new VirtualDataPropertyWriter(virtualField, properties, blockClass)
+        );
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyWriter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyWriter.java
new file mode 100644
index 0000000000..965b26e7e6
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyWriter.java
@@ -0,0 +1,162 @@
+package io.papermc.generator.types.craftblockdata.property.holder;
+
+import com.squareup.javapoet.ClassName;
+import com.squareup.javapoet.CodeBlock;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.Types;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.appender.DataAppenders;
+import io.papermc.generator.utils.BlockStateMapping;
+import io.papermc.generator.utils.ClassHelper;
+import io.papermc.generator.utils.CommonVariable;
+import io.papermc.generator.utils.NamingManager;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.ChiseledBookShelfBlock;
+import net.minecraft.world.level.block.MossyCarpetBlock;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.bukkit.block.BlockFace;
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+import org.jspecify.annotations.NullMarked;
+
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.STATIC;
+
+@NullMarked
+public class DataPropertyWriter extends DataPropertyWriterBase {
+
+    private record FieldKey(Class<? extends Block> blockClass, String fieldName) {
+    }
+
+    private static FieldKey key(Class<? extends Block> blockClass, String fieldName) {
+        return new FieldKey(blockClass, fieldName);
+    }
+
+    private static final Map<String, String> FIELD_TO_BASE_NAME = Map.of(
+        BlockStateMapping.PIPE_FIELD_NAME, "FACE"
+    );
+
+    private static final Map<FieldKey, String> FIELD_TO_BASE_NAME_SPECIFICS = Map.of(
+        key(ChiseledBookShelfBlock.class, "SLOT_OCCUPIED_PROPERTIES"), "SLOT_OCCUPIED",
+        key(MossyCarpetBlock.class, "PROPERTY_BY_DIRECTION"), "HEIGHT"
+    );
+
+    protected final Field field;
+    protected @MonotonicNonNull DataHolderType type;
+    protected @MonotonicNonNull Class<?> indexClass, internalIndexClass;
+    protected @MonotonicNonNull TypeName fieldType;
+
+    protected DataPropertyWriter(Field field, Collection<? extends Property<?>> properties, Class<? extends Block> blockClass) {
+        super(properties, blockClass);
+        this.field = field;
+        this.computeTypes(field);
+    }
+
+    protected void computeTypes(Field field) {
+        this.fieldType = TypeName.get(field.getGenericType());
+
+        if (field.getType().isArray()) {
+            this.type = DataHolderType.ARRAY;
+            this.indexClass = Integer.TYPE;
+        } else if (List.class.isAssignableFrom(field.getType())) {
+            this.type = DataHolderType.LIST;
+            this.indexClass = Integer.TYPE;
+        } else if (Map.class.isAssignableFrom(field.getType()) && field.getGenericType() instanceof ParameterizedType complexType) {
+            this.type = DataHolderType.MAP;
+            this.internalIndexClass = ClassHelper.eraseType(complexType.getActualTypeArguments()[0]);
+            if (this.internalIndexClass.isEnum()) {
+                this.indexClass = BlockStateMapping.ENUM_BRIDGE.getOrDefault(this.internalIndexClass, (Class<? extends Enum<?>>) this.internalIndexClass);
+                this.fieldType = ParameterizedTypeName.get(
+                    ClassName.get(field.getType()),
+                    ClassName.get(this.indexClass),
+                    ClassName.get(complexType.getActualTypeArguments()[1])
+                );
+            } else {
+                this.indexClass = this.internalIndexClass;
+            }
+        } else {
+            throw new IllegalStateException("Don't know how to turn " + field + " into api");
+        }
+    }
+
+    @Override
+    public FieldSpec.Builder getOrCreateField(Map<Property<?>, Field> fields) {
+        FieldSpec.Builder fieldBuilder = FieldSpec.builder(this.fieldType, this.field.getName(), PRIVATE, STATIC, FINAL);
+        if (Modifier.isPublic(this.field.getModifiers())) {
+            // accessible phew
+            if (this.type == DataHolderType.MAP &&
+                this.internalIndexClass == Direction.class && this.indexClass == BlockFace.class) { // Direction -> BlockFace
+                // convert the key manually only this one is needed for now
+                fieldBuilder.initializer("$[$1T.$2L.entrySet().stream()\n.collect($3T.toMap($4L -> $5T.notchToBlockFace($4L.getKey()), $4L -> $4L.getValue()))$]",
+                    this.blockClass, this.field.getName(), Collectors.class, CommonVariable.MAP_ENTRY, Types.CRAFT_BLOCK);
+            } else {
+                fieldBuilder.initializer("$T.$L", this.blockClass, this.field.getName());
+            }
+        } else {
+            if (this.type == DataHolderType.ARRAY || this.type == DataHolderType.LIST) {
+                CodeBlock.Builder code = CodeBlock.builder();
+                this.createSyntheticCollection(code, this.type == DataHolderType.ARRAY, fields);
+                fieldBuilder.initializer(code.build());
+            } else if (this.type == DataHolderType.MAP) {
+                CodeBlock.Builder code = CodeBlock.builder();
+                this.createSyntheticMap(code, this.indexClass, fields);
+                fieldBuilder.initializer(code.build());
+            }
+        }
+        return fieldBuilder;
+    }
+
+    @Override
+    public Class<?> getIndexClass() {
+        return this.indexClass;
+    }
+
+    @Override
+    public DataHolderType getType() {
+        return this.type;
+    }
+
+    @Override
+    public String getBaseName() {
+        String constantName = this.field.getName();
+
+        FieldKey key = key(this.blockClass, constantName);
+        if (FIELD_TO_BASE_NAME_SPECIFICS.containsKey(key)) {
+            return FIELD_TO_BASE_NAME_SPECIFICS.get(key);
+        }
+
+        if (FIELD_TO_BASE_NAME.containsKey(constantName)) {
+            return FIELD_TO_BASE_NAME.get(constantName);
+        }
+        return stripFieldAccessKeyword(constantName);
+    }
+
+    private static final List<String> CUSTOM_KEYWORD = List.of("HAS", "IS", "CAN");
+
+    private String stripFieldAccessKeyword(String name) {
+        for (String keyword : CUSTOM_KEYWORD) {
+            if (name.startsWith(keyword + "_")) {
+                return name.substring(keyword.length() + 1);
+            }
+        }
+        return name;
+    }
+
+    @Override
+    public void addExtras(TypeSpec.Builder builder, FieldSpec field, ParameterSpec indexParameter, ConverterBase childConverter, CraftBlockDataGenerator<?> generator, NamingManager naming) {
+        DataAppenders.ifPresent(this.type, appender -> appender.addExtras(builder, field, indexParameter, childConverter, generator, naming));
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyWriterBase.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyWriterBase.java
new file mode 100644
index 0000000000..ef6aa97629
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/DataPropertyWriterBase.java
@@ -0,0 +1,66 @@
+package io.papermc.generator.types.craftblockdata.property.holder;
+
+import com.squareup.javapoet.CodeBlock;
+import io.papermc.generator.types.craftblockdata.property.PropertyWriter;
+import io.papermc.generator.utils.Formatting;
+import it.unimi.dsi.fastutil.Pair;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public abstract class DataPropertyWriterBase implements DataPropertyMaker {
+
+    protected final Collection<? extends Property<?>> properties;
+    protected final Class<? extends Block> blockClass;
+
+    protected DataPropertyWriterBase(Collection<? extends Property<?>> properties, Class<? extends Block> blockClass) {
+        this.properties = properties;
+        this.blockClass = blockClass;
+    }
+
+    protected void createSyntheticCollection(CodeBlock.Builder code, boolean isArray, Map<Property<?>, Field> fields) {
+        if (isArray) {
+            code.add("{\n");
+        } else {
+            code.add("$T.of(\n", List.class);
+        }
+        code.indent();
+        Iterator<? extends Property<?>> it = this.properties.iterator();
+        while (it.hasNext()) {
+            Property<?> property = it.next();
+            Pair<Class<?>, String> fieldName = PropertyWriter.referenceField(this.blockClass, property, fields);
+            code.add("$T.$L", fieldName.left(), fieldName.right());
+            if (it.hasNext()) {
+                code.add(",");
+            }
+            code.add("\n");
+        }
+        code.unindent().add(isArray ? "}" : ")");
+    }
+
+    protected void createSyntheticMap(CodeBlock.Builder code, Class<?> indexClass, Map<Property<?>, Field> fields) {
+        // assume indexClass is an enum with its values matching the property names
+        code.add("$T.of(\n", Map.class).indent();
+        Iterator<? extends Property<?>> it = this.properties.iterator();
+        while (it.hasNext()) {
+            Property<?> property = it.next();
+            String name = Formatting.formatKeyAsField(property.getName());
+            Pair<Class<?>, String> fieldName = PropertyWriter.referenceField(this.blockClass, property, fields);
+            code.add("$T.$L, $T.$L", indexClass, name, fieldName.left(), fieldName.right());
+            if (it.hasNext()) {
+                code.add(",");
+            }
+            code.add("\n");
+        }
+        code.unindent().add(")");
+    }
+
+    @Override
+    public abstract Class<?> getIndexClass();
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/VirtualDataPropertyWriter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/VirtualDataPropertyWriter.java
new file mode 100644
index 0000000000..df7ef4cfda
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/VirtualDataPropertyWriter.java
@@ -0,0 +1,99 @@
+package io.papermc.generator.types.craftblockdata.property.holder;
+
+import com.squareup.javapoet.ArrayTypeName;
+import com.squareup.javapoet.CodeBlock;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.utils.BlockStateMapping;
+import io.papermc.generator.utils.NamingManager;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+import org.jspecify.annotations.NullMarked;
+
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.STATIC;
+
+@NullMarked
+public class VirtualDataPropertyWriter extends DataPropertyWriterBase {
+
+    private final VirtualField virtualField;
+    protected @MonotonicNonNull Class<?> indexClass;
+    protected @MonotonicNonNull TypeName fieldType;
+
+    protected VirtualDataPropertyWriter(VirtualField virtualField, Collection<? extends Property<?>> properties, Class<? extends Block> blockClass) {
+        super(properties, blockClass);
+        this.virtualField = virtualField;
+        this.computeTypes(virtualField);
+    }
+
+    protected void computeTypes(VirtualField virtualField) {
+        switch (virtualField.holderType()) {
+            case ARRAY -> {
+                this.indexClass = Integer.TYPE;
+                this.fieldType = ArrayTypeName.of(virtualField.valueType());
+            }
+            case LIST -> {
+                this.indexClass = Integer.TYPE;
+                this.fieldType = ParameterizedTypeName.get(List.class, virtualField.valueType());
+            }
+            case MAP -> {
+                if (virtualField.keyClass() != null) {
+                    this.indexClass = virtualField.keyClass();
+                } else {
+                    this.indexClass = this.properties.iterator().next().getValueClass();
+                    if (this.indexClass.isEnum()) {
+                        this.indexClass = BlockStateMapping.ENUM_BRIDGE.getOrDefault(this.indexClass, (Class<? extends Enum<?>>) this.indexClass);
+                    }
+                }
+                this.fieldType = ParameterizedTypeName.get(Map.class, this.indexClass, virtualField.valueType());
+            }
+        }
+    }
+
+    @Override
+    public FieldSpec.Builder getOrCreateField(Map<Property<?>, Field> fields) {
+        FieldSpec.Builder fieldBuilder = FieldSpec.builder(this.fieldType, this.virtualField.name(), PRIVATE, STATIC, FINAL);
+        if (this.getType() == DataHolderType.ARRAY || this.getType() == DataHolderType.LIST) {
+            CodeBlock.Builder code = CodeBlock.builder();
+            this.createSyntheticCollection(code, this.getType() == DataHolderType.ARRAY, fields);
+            fieldBuilder.initializer(code.build());
+        } else if (this.getType() == DataHolderType.MAP) {
+            CodeBlock.Builder code = CodeBlock.builder();
+            this.createSyntheticMap(code, this.indexClass, fields);
+            fieldBuilder.initializer(code.build());
+        }
+
+        return fieldBuilder;
+    }
+
+    @Override
+    public Class<?> getIndexClass() {
+        return this.indexClass;
+    }
+
+    @Override
+    public DataHolderType getType() {
+        return this.virtualField.holderType();
+    }
+
+    @Override
+    public String getBaseName() {
+        return this.virtualField.baseName();
+    }
+
+    @Override
+    public void addExtras(TypeSpec.Builder builder, FieldSpec field, ParameterSpec indexParameter, ConverterBase converter, CraftBlockDataGenerator<?> generator, NamingManager naming) {
+
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/VirtualField.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/VirtualField.java
new file mode 100644
index 0000000000..26245f80d7
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/VirtualField.java
@@ -0,0 +1,72 @@
+package io.papermc.generator.types.craftblockdata.property.holder;
+
+import com.google.common.base.Preconditions;
+import com.google.common.reflect.TypeToken;
+import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.List;
+import net.minecraft.world.level.block.state.properties.Property;
+import org.jetbrains.annotations.Contract;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+@NullMarked
+public record VirtualField(
+    String name,
+    Type valueType,
+    DataHolderType holderType,
+    String baseName,
+    @Nullable Class<?> keyClass,
+    Collection<? extends Property<?>> values
+) {
+
+    @Contract(value = "_, _, _, _ -> new", pure = true)
+    public static <T extends Property<? extends Comparable<?>>> VirtualField.FieldValue<T> createCollection(String name, TypeToken<T> valueType, boolean isArray, String baseName) {
+        return new VirtualField.FieldValue<>(name, valueType, isArray ? DataHolderType.ARRAY : DataHolderType.LIST, baseName, null);
+    }
+
+    @Contract(value = "_, _, _, _ -> new", pure = true)
+    public static <T extends Property<? extends Comparable<?>>> VirtualField.FieldValue<T> createCollection(String name, Class<T> valueType, boolean isArray, String baseName) {
+        return createCollection(name, TypeToken.of(valueType), isArray, baseName);
+    }
+
+    @Contract(value = "_, _, _, _ -> new", pure = true)
+    public static <T extends Property<? extends Comparable<?>>> VirtualField.FieldValue<T> createMap(String name, Class<?> keyClass, TypeToken<T> valueType, String baseName) {
+        return new VirtualField.FieldValue<>(name, valueType, DataHolderType.MAP, baseName, keyClass);
+    }
+
+    @Contract(value = "_, _, _, _ -> new", pure = true)
+    public static <T extends Property<? extends Comparable<?>>> VirtualField.FieldValue<T> createMap(String name, Class<?> keyClass, Class<T> valueType, String baseName) {
+        return createMap(name, keyClass, TypeToken.of(valueType), baseName);
+    }
+
+    public static class FieldValue<T extends Property<? extends Comparable<?>>> {
+
+        private final String name;
+        private final DataHolderType holderType;
+        private final TypeToken<T> valueTypeToken;
+        private final String baseName;
+        private final @Nullable Class<?> keyClass;
+
+        private @Nullable Collection<T> values;
+
+        public FieldValue(String name, TypeToken<T> valueTypeToken, DataHolderType holderType, String baseName, @Nullable Class<?> keyClass) {
+            this.name = name;
+            this.valueTypeToken = valueTypeToken;
+            this.holderType = holderType;
+            this.baseName = baseName;
+            this.keyClass = keyClass;
+        }
+
+        @Contract(value = "_ -> this", mutates = "this")
+        public FieldValue<T> withValues(Collection<T> properties) {
+            this.values = List.copyOf(properties);
+            return this;
+        }
+
+        public VirtualField make() {
+            Preconditions.checkState(this.values != null && !this.values.isEmpty(), "The field should doesn't have any content");
+            return new VirtualField(this.name, this.valueTypeToken.getType(), this.holderType, this.baseName, this.keyClass, this.values);
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/ArrayAppender.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/ArrayAppender.java
new file mode 100644
index 0000000000..88853a234f
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/ArrayAppender.java
@@ -0,0 +1,54 @@
+package io.papermc.generator.types.craftblockdata.property.holder.appender;
+
+import com.google.common.collect.ImmutableSet;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import io.papermc.generator.utils.CommonVariable;
+import io.papermc.generator.utils.NamingManager;
+import java.util.Set;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class ArrayAppender implements DataAppender {
+
+    @Override
+    public DataHolderType getType() {
+        return DataHolderType.ARRAY;
+    }
+
+    @Override
+    public void addExtras(TypeSpec.Builder builder, FieldSpec field, ParameterSpec indexParameter, ConverterBase childConverter, CraftBlockDataGenerator<?> generator, NamingManager naming) {
+        if (childConverter.getApiType() == Boolean.TYPE) {
+            String collectVarName = naming.getVariableNameWrapper().post("s").concat();
+            MethodSpec.Builder methodBuilder = generator.createMethod(naming.getMethodNameWrapper().post("s").concat());
+            methodBuilder.addStatement("$T $L = $T.builder()", ParameterizedTypeName.get(ImmutableSet.Builder.class, Integer.class), collectVarName, ImmutableSet.class);
+            methodBuilder.beginControlFlow("for (int $1L = 0, len = $2N.length; $1L < len; $1L++)", CommonVariable.INDEX, field);
+            {
+                methodBuilder.beginControlFlow("if (" + childConverter.rawGetExprent().formatted("$N[$N]") + ")", field, indexParameter);
+                {
+                    methodBuilder.addStatement("$L.add($L)", collectVarName, CommonVariable.INDEX);
+                }
+                methodBuilder.endControlFlow();
+            }
+            methodBuilder.endControlFlow();
+            methodBuilder.addStatement("return $L.build()", collectVarName);
+            methodBuilder.returns(ParameterizedTypeName.get(Set.class, Integer.class));
+
+            builder.addMethod(methodBuilder.build());
+        }
+
+        {
+            MethodSpec.Builder methodBuilder = generator.createMethod(naming.getMethodNameWrapper().pre("Maximum").post("s").concat());
+            methodBuilder.addStatement("return $N.length", field);
+            methodBuilder.returns(Integer.TYPE);
+
+            builder.addMethod(methodBuilder.build());
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/DataAppender.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/DataAppender.java
new file mode 100644
index 0000000000..3d42772f69
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/DataAppender.java
@@ -0,0 +1,18 @@
+package io.papermc.generator.types.craftblockdata.property.holder.appender;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import io.papermc.generator.utils.NamingManager;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface DataAppender {
+
+    DataHolderType getType();
+
+    void addExtras(TypeSpec.Builder builder, FieldSpec field, ParameterSpec indexParameter, ConverterBase converter, CraftBlockDataGenerator<?> generator, NamingManager naming);
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/DataAppenders.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/DataAppenders.java
new file mode 100644
index 0000000000..fb484ff56b
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/DataAppenders.java
@@ -0,0 +1,24 @@
+package io.papermc.generator.types.craftblockdata.property.holder.appender;
+
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class DataAppenders {
+
+    private static final Map<DataHolderType, DataAppender> APPENDERS = Stream.of(
+        new ArrayAppender(),
+        new ListAppender(),
+        new MapAppender()
+    ).collect(Collectors.toUnmodifiableMap(DataAppender::getType, key -> key));
+
+    public static void ifPresent(DataHolderType type, Consumer<DataAppender> callback) {
+        if (APPENDERS.containsKey(type)) {
+            callback.accept(APPENDERS.get(type));
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/ListAppender.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/ListAppender.java
new file mode 100644
index 0000000000..67c4d72bac
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/ListAppender.java
@@ -0,0 +1,61 @@
+package io.papermc.generator.types.craftblockdata.property.holder.appender;
+
+import com.google.common.collect.ImmutableSet;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import io.papermc.generator.utils.CommonVariable;
+import io.papermc.generator.utils.NamingManager;
+import java.util.Map;
+import java.util.Set;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class ListAppender implements DataAppender {
+
+    private static final Map<String, String> METHOD_BASE_RENAMES = Map.of(
+        "SlotOccupied", "OccupiedSlot"
+    );
+
+    @Override
+    public DataHolderType getType() {
+        return DataHolderType.LIST;
+    }
+
+    @Override
+    public void addExtras(TypeSpec.Builder builder, FieldSpec field, ParameterSpec indexParameter, ConverterBase childConverter, CraftBlockDataGenerator<?> generator, NamingManager naming) {
+        NamingManager.NameWrapper methodName = NamingManager.NameWrapper.wrap("get", METHOD_BASE_RENAMES.getOrDefault(naming.getMethodBaseName(), naming.getMethodBaseName()));
+
+        if (childConverter.getApiType() == Boolean.TYPE) {
+            String collectVarName = naming.getVariableNameWrapper().post("s").concat();
+            MethodSpec.Builder methodBuilder = generator.createMethod(methodName.post("s").concat());
+            methodBuilder.addStatement("$T $L = $T.builder()", ParameterizedTypeName.get(ImmutableSet.Builder.class, Integer.class), collectVarName, ImmutableSet.class);
+            methodBuilder.beginControlFlow("for (int $1L = 0, size = $2N.size(); $1L < size; $1L++)", CommonVariable.INDEX, field);
+            {
+                methodBuilder.beginControlFlow("if (" + childConverter.rawGetExprent().formatted("$N.get($N)") + ")", field, indexParameter);
+                {
+                    methodBuilder.addStatement("$L.add($L)", collectVarName, CommonVariable.INDEX);
+                }
+                methodBuilder.endControlFlow();
+            }
+            methodBuilder.endControlFlow();
+            methodBuilder.addStatement("return $L.build()", collectVarName);
+            methodBuilder.returns(ParameterizedTypeName.get(Set.class, Integer.class));
+
+            builder.addMethod(methodBuilder.build());
+        }
+
+        {
+            MethodSpec.Builder methodBuilder = generator.createMethod(methodName.pre("Maximum").post("s").concat());
+            methodBuilder.addStatement("return $N.size()", field);
+            methodBuilder.returns(Integer.TYPE);
+
+            builder.addMethod(methodBuilder.build());
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/MapAppender.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/MapAppender.java
new file mode 100644
index 0000000000..f7ebd43ffd
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/appender/MapAppender.java
@@ -0,0 +1,58 @@
+package io.papermc.generator.types.craftblockdata.property.holder.appender;
+
+import com.google.common.collect.ImmutableSet;
+import com.squareup.javapoet.ClassName;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerator;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import io.papermc.generator.utils.CommonVariable;
+import io.papermc.generator.utils.NamingManager;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class MapAppender implements DataAppender {
+
+    @Override
+    public DataHolderType getType() {
+        return DataHolderType.MAP;
+    }
+
+    @Override
+    public void addExtras(TypeSpec.Builder builder, FieldSpec field, ParameterSpec indexParameter, ConverterBase childConverter, CraftBlockDataGenerator<?> generator, NamingManager naming) {
+        if (childConverter.getApiType() == Boolean.TYPE) {
+            String collectVarName = naming.getVariableNameWrapper().post("s").concat();
+            MethodSpec.Builder methodBuilder = generator.createMethod(naming.getMethodNameWrapper().post("s").concat());
+            methodBuilder.addStatement("$T $L = $T.builder()", ParameterizedTypeName.get(ClassName.get(ImmutableSet.Builder.class), indexParameter.type), collectVarName, ImmutableSet.class);
+            methodBuilder.beginControlFlow("for ($T $N : $N.entrySet())", ParameterizedTypeName.get(ClassName.get(Map.Entry.class), indexParameter.type, ClassName.get(BooleanProperty.class)), CommonVariable.MAP_ENTRY, field);
+            {
+                methodBuilder.beginControlFlow("if (" + childConverter.rawGetExprent().formatted("$L.getValue()") + ")", CommonVariable.MAP_ENTRY);
+                {
+                    methodBuilder.addStatement("$L.add($N.getKey())", collectVarName, CommonVariable.MAP_ENTRY);
+                }
+                methodBuilder.endControlFlow();
+            }
+            methodBuilder.endControlFlow();
+            methodBuilder.addStatement("return $L.build()", collectVarName);
+            methodBuilder.returns(ParameterizedTypeName.get(ClassName.get(Set.class), indexParameter.type));
+
+            builder.addMethod(methodBuilder.build());
+        }
+
+        {
+            MethodSpec.Builder methodBuilder = generator.createMethod(naming.getMethodNameWrapper().pre("Allowed").post("s").concat());
+            methodBuilder.addStatement("return $T.unmodifiableSet($N.keySet())", Collections.class, field);
+            methodBuilder.returns(ParameterizedTypeName.get(ClassName.get(Set.class), indexParameter.type));
+
+            builder.addMethod(methodBuilder.build());
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/ArrayConverter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/ArrayConverter.java
new file mode 100644
index 0000000000..a9b943bc0a
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/ArrayConverter.java
@@ -0,0 +1,32 @@
+package io.papermc.generator.types.craftblockdata.property.holder.converter;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import io.papermc.generator.types.craftblockdata.property.EnumPropertyWriter;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class ArrayConverter implements DataConverter {
+
+    @Override
+    public DataHolderType getType() {
+        return DataHolderType.ARRAY;
+    }
+
+    @Override
+    public void convertSetter(ConverterBase childConverter, MethodSpec.Builder method, FieldSpec field, ParameterSpec indexParameter, ParameterSpec parameter) {
+        method.addStatement(childConverter.rawSetExprent().formatted("$N[$N]"), field, indexParameter, parameter);
+    }
+
+    @Override
+    public void convertGetter(ConverterBase childConverter, MethodSpec.Builder method, FieldSpec field, ParameterSpec indexParameter) {
+        if (childConverter instanceof EnumPropertyWriter<?> enumConverter) {
+            method.addStatement("return " + childConverter.rawGetExprent().formatted("$N[$N]"), field, indexParameter, enumConverter.getApiType());
+        } else {
+            method.addStatement("return " + childConverter.rawGetExprent().formatted("$N[$N]"), field, indexParameter);
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/DataConverter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/DataConverter.java
new file mode 100644
index 0000000000..596eb31cc6
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/DataConverter.java
@@ -0,0 +1,18 @@
+package io.papermc.generator.types.craftblockdata.property.holder.converter;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface DataConverter {
+
+    DataHolderType getType();
+
+    void convertSetter(ConverterBase childConverter, MethodSpec.Builder method, FieldSpec field, ParameterSpec indexParameter, ParameterSpec parameter);
+
+    void convertGetter(ConverterBase childConverter, MethodSpec.Builder method, FieldSpec field, ParameterSpec indexParameter);
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/DataConverters.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/DataConverters.java
new file mode 100644
index 0000000000..cfe7e37d4e
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/DataConverters.java
@@ -0,0 +1,25 @@
+package io.papermc.generator.types.craftblockdata.property.holder.converter;
+
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class DataConverters {
+
+    private static final Map<DataHolderType, DataConverter> CONVERTERS = Stream.of(
+        new ArrayConverter(),
+        new ListConverter(),
+        new MapConverter()
+    ).collect(Collectors.toUnmodifiableMap(DataConverter::getType, key -> key));
+
+    public static DataConverter getOrThrow(DataHolderType type) {
+        DataConverter converter = CONVERTERS.get(type);
+        if (converter == null) {
+            throw new IllegalStateException("Cannot handle data holder type: " + type);
+        }
+        return converter;
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/ListConverter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/ListConverter.java
new file mode 100644
index 0000000000..157b519345
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/ListConverter.java
@@ -0,0 +1,32 @@
+package io.papermc.generator.types.craftblockdata.property.holder.converter;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import io.papermc.generator.types.craftblockdata.property.EnumPropertyWriter;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class ListConverter implements DataConverter {
+
+    @Override
+    public DataHolderType getType() {
+        return DataHolderType.LIST;
+    }
+
+    @Override
+    public void convertSetter(ConverterBase childConverter, MethodSpec.Builder method, FieldSpec field, ParameterSpec indexParameter, ParameterSpec parameter) {
+        method.addStatement(childConverter.rawSetExprent().formatted("$N.get($N)"), field, indexParameter, parameter);
+    }
+
+    @Override
+    public void convertGetter(ConverterBase childConverter, MethodSpec.Builder method, FieldSpec field, ParameterSpec indexParameter) {
+        if (childConverter instanceof EnumPropertyWriter<?> enumConverter) {
+            method.addStatement("return " + childConverter.rawGetExprent().formatted("$N.get($N)"), field, indexParameter, enumConverter.getApiType());
+        } else {
+            method.addStatement("return " + childConverter.rawGetExprent().formatted("$N.get($N)"), field, indexParameter);
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/MapConverter.java b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/MapConverter.java
new file mode 100644
index 0000000000..73903ef5f9
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/craftblockdata/property/holder/converter/MapConverter.java
@@ -0,0 +1,45 @@
+package io.papermc.generator.types.craftblockdata.property.holder.converter;
+
+import com.google.common.base.Preconditions;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import io.papermc.generator.types.craftblockdata.property.EnumPropertyWriter;
+import io.papermc.generator.types.craftblockdata.property.converter.ConverterBase;
+import io.papermc.generator.types.craftblockdata.property.holder.DataHolderType;
+import java.util.stream.Collectors;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class MapConverter implements DataConverter {
+
+    private static final String PROPERTY_VAR = "property";
+
+    @Override
+    public DataHolderType getType() {
+        return DataHolderType.MAP;
+    }
+
+    @Override
+    public void convertSetter(ConverterBase childConverter, MethodSpec.Builder method, FieldSpec field, ParameterSpec indexParameter, ParameterSpec parameter) {
+        method.addStatement("$T $L = $N.get($N)", ((ParameterizedTypeName) field.type).typeArguments.get(1), PROPERTY_VAR, field, indexParameter);
+        method.addStatement("$T.checkArgument($N != null, $S, $N.keySet().stream().map($T::name).collect($T.joining($S)))",
+            Preconditions.class, PROPERTY_VAR, "Invalid " + indexParameter.name + ", only %s are allowed!", field, Enum.class, Collectors.class, ", ");
+
+        method.addStatement(childConverter.rawSetExprent().formatted("$L"), PROPERTY_VAR, parameter);
+    }
+
+    @Override
+    public void convertGetter(ConverterBase childConverter, MethodSpec.Builder method, FieldSpec field, ParameterSpec indexParameter) {
+        method.addStatement("$T $L = $N.get($N)", ((ParameterizedTypeName) field.type).typeArguments.get(1), PROPERTY_VAR, field, indexParameter);
+        method.addStatement("$T.checkArgument($N != null, $S, $N.keySet().stream().map($T::name).collect($T.joining($S)))",
+            Preconditions.class, PROPERTY_VAR, "Invalid " + indexParameter.name + ", only %s are allowed!", field, Enum.class, Collectors.class, ", ");
+
+        if (childConverter instanceof EnumPropertyWriter<?> enumConverter) {
+            method.addStatement("return " + childConverter.rawGetExprent().formatted("$L"), PROPERTY_VAR, enumConverter.getApiType());
+        } else {
+            method.addStatement("return " + childConverter.rawGetExprent().formatted("$L"), PROPERTY_VAR);
+        }
+    }
+}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/types/goal/MobGoalGenerator.java b/paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalGenerator.java
similarity index 76%
rename from paper-api-generator/src/main/java/io/papermc/generator/types/goal/MobGoalGenerator.java
rename to paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalGenerator.java
index abcc93e61a..0740f0d3bd 100644
--- a/paper-api-generator/src/main/java/io/papermc/generator/types/goal/MobGoalGenerator.java
+++ b/paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalGenerator.java
@@ -3,7 +3,6 @@ package io.papermc.generator.types.goal;
 import com.destroystokyo.paper.entity.ai.GoalKey;
 import com.squareup.javapoet.ClassName;
 import com.squareup.javapoet.FieldSpec;
-import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.MethodSpec;
 import com.squareup.javapoet.ParameterSpec;
 import com.squareup.javapoet.ParameterizedTypeName;
@@ -16,28 +15,29 @@ import io.papermc.generator.types.SimpleGenerator;
 import io.papermc.generator.utils.Annotations;
 import io.papermc.generator.utils.Formatting;
 import io.papermc.generator.utils.Javadocs;
+import io.papermc.typewriter.util.ClassHelper;
 import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Stream;
 import net.minecraft.world.entity.ai.goal.Goal;
+import net.minecraft.world.entity.ai.goal.GoalSelector;
 import net.minecraft.world.entity.ai.goal.WrappedGoal;
 import org.bukkit.NamespacedKey;
 import org.bukkit.entity.Mob;
-import org.checkerframework.checker.nullness.qual.NonNull;
-import org.checkerframework.framework.qual.DefaultQualifier;
-import org.jetbrains.annotations.Nullable;
+import org.jspecify.annotations.NullMarked;
 
 import static javax.lang.model.element.Modifier.FINAL;
 import static javax.lang.model.element.Modifier.PRIVATE;
 import static javax.lang.model.element.Modifier.PUBLIC;
 import static javax.lang.model.element.Modifier.STATIC;
 
-@DefaultQualifier(NonNull.class)
+@NullMarked
 public class MobGoalGenerator extends SimpleGenerator {
 
-    private static final String CLASS_HEADER = Javadocs.getVersionDependentClassHeader("Mob Goals");
+    private static final String CLASS_HEADER = Javadocs.getVersionDependentClassHeader("keys", "Mob Goals");
 
-    public MobGoalGenerator(final String keysClassName, final String pkg) {
-        super(keysClassName, pkg);
+    public MobGoalGenerator(String className, String packageName) {
+        super(className, packageName);
     }
 
     @Override
@@ -51,9 +51,8 @@ public class MobGoalGenerator extends SimpleGenerator {
             .addJavadoc(CLASS_HEADER);
 
         TypeName mobType = ParameterizedTypeName.get(ClassName.get(Class.class), type);
-        TypeName keyType = TypeName.get(String.class);
 
-        ParameterSpec keyParam = ParameterSpec.builder(keyType, "key", FINAL).build();
+        ParameterSpec keyParam = ParameterSpec.builder(String.class, "key", FINAL).build();
         ParameterSpec typeParam = ParameterSpec.builder(mobType, "type", FINAL).build();
         MethodSpec.Builder createMethod = MethodSpec.methodBuilder("create")
             .addModifiers(PRIVATE, STATIC)
@@ -68,33 +67,25 @@ public class MobGoalGenerator extends SimpleGenerator {
             classes = scanResult.getSubclasses(Goal.class.getName()).loadClasses(Goal.class);
         }
 
-        List<GoalKey<Mob>> vanillaNames = classes.stream()
+        Stream<GoalKey<Mob>> vanillaGoals = classes.stream()
             .filter(clazz -> !java.lang.reflect.Modifier.isAbstract(clazz.getModifiers()))
+            .filter(clazz -> !clazz.isAnonymousClass() || ClassHelper.getTopLevelClass(clazz) != GoalSelector.class)
             .filter(clazz -> !WrappedGoal.class.equals(clazz)) // TODO - properly fix
-            .map(goalClass -> MobGoalNames.getKey(goalClass.getName(), goalClass))
-            .filter((key) -> !MobGoalNames.isIgnored(key.getNamespacedKey().getKey()))
+            .map(MobGoalNames::getKey)
             .sorted(Comparator.<GoalKey<?>, String>comparing(o -> o.getEntityClass().getSimpleName())
                 .thenComparing(vanillaGoalKey -> vanillaGoalKey.getNamespacedKey().getKey())
-            )
-            .toList();
+            );
 
-
-        for (final GoalKey<?> goalKey : vanillaNames) {
-            TypeName typedKey = ParameterizedTypeName.get(GoalKey.class, goalKey.getEntityClass());
-            NamespacedKey key = goalKey.getNamespacedKey();
-
-            String keyPath = key.getKey();
+        vanillaGoals.forEach(goalKey -> {
+            String keyPath = goalKey.getNamespacedKey().getKey();
             String fieldName = Formatting.formatKeyAsField(keyPath);
+
+            TypeName typedKey = ParameterizedTypeName.get(GoalKey.class, goalKey.getEntityClass());
             FieldSpec.Builder fieldBuilder = FieldSpec.builder(typedKey, fieldName, PUBLIC, STATIC, FINAL)
                 .initializer("$N($S, $T.class)", createMethod.build(), keyPath, goalKey.getEntityClass());
             typeBuilder.addField(fieldBuilder.build());
-        }
+        });
 
         return typeBuilder.addMethod(createMethod.build()).build();
     }
-
-    @Override
-    protected JavaFile.Builder file(JavaFile.Builder builder) {
-        return builder;
-    }
 }
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java b/paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java
similarity index 51%
rename from paper-api-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java
rename to paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java
index 047b9af5f7..261763fb53 100644
--- a/paper-api-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java
+++ b/paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java
@@ -2,140 +2,32 @@ package io.papermc.generator.types.goal;
 
 import com.destroystokyo.paper.entity.RangedEntity;
 import com.destroystokyo.paper.entity.ai.GoalKey;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import net.minecraft.world.entity.FlyingMob;
-import net.minecraft.world.entity.PathfinderMob;
-import net.minecraft.world.entity.TamableAnimal;
-import net.minecraft.world.entity.ai.goal.Goal;
-import net.minecraft.world.entity.ambient.AmbientCreature;
-import net.minecraft.world.entity.animal.AbstractFish;
-import net.minecraft.world.entity.animal.AbstractGolem;
-import net.minecraft.world.entity.animal.AbstractSchoolingFish;
-import net.minecraft.world.entity.animal.Animal;
-import net.minecraft.world.entity.animal.Pufferfish;
-import net.minecraft.world.entity.animal.ShoulderRidingEntity;
-import net.minecraft.world.entity.animal.SnowGolem;
-import net.minecraft.world.entity.animal.WaterAnimal;
-import net.minecraft.world.entity.animal.horse.AbstractChestedHorse;
-import net.minecraft.world.entity.boss.wither.WitherBoss;
-import net.minecraft.world.entity.monster.AbstractIllager;
-import net.minecraft.world.entity.monster.EnderMan;
-import net.minecraft.world.entity.monster.PatrollingMonster;
-import net.minecraft.world.entity.monster.RangedAttackMob;
-import net.minecraft.world.entity.monster.SpellcasterIllager;
-import net.minecraft.world.entity.monster.ZombifiedPiglin;
-import net.minecraft.world.entity.monster.piglin.AbstractPiglin;
-import org.bukkit.NamespacedKey;
-import org.bukkit.entity.AbstractHorse;
-import org.bukkit.entity.AbstractSkeleton;
-import org.bukkit.entity.AbstractVillager;
-import org.bukkit.entity.Ageable;
-import org.bukkit.entity.Ambient;
-import org.bukkit.entity.Animals;
-import org.bukkit.entity.Bat;
-import org.bukkit.entity.Bee;
-import org.bukkit.entity.Blaze;
-import org.bukkit.entity.Cat;
-import org.bukkit.entity.CaveSpider;
-import org.bukkit.entity.ChestedHorse;
-import org.bukkit.entity.Chicken;
-import org.bukkit.entity.Cod;
-import org.bukkit.entity.Cow;
-import org.bukkit.entity.Creature;
-import org.bukkit.entity.Creeper;
-import org.bukkit.entity.Dolphin;
-import org.bukkit.entity.Donkey;
-import org.bukkit.entity.Drowned;
-import org.bukkit.entity.ElderGuardian;
-import org.bukkit.entity.EnderDragon;
-import org.bukkit.entity.Enderman;
-import org.bukkit.entity.Endermite;
-import org.bukkit.entity.Evoker;
-import org.bukkit.entity.Fish;
-import org.bukkit.entity.Flying;
-import org.bukkit.entity.Fox;
-import org.bukkit.entity.Ghast;
-import org.bukkit.entity.Giant;
-import org.bukkit.entity.Golem;
-import org.bukkit.entity.Guardian;
-import org.bukkit.entity.Hoglin;
-import org.bukkit.entity.Horse;
-import org.bukkit.entity.Husk;
-import org.bukkit.entity.Illager;
-import org.bukkit.entity.Illusioner;
-import org.bukkit.entity.IronGolem;
-import org.bukkit.entity.Llama;
-import org.bukkit.entity.MagmaCube;
-import org.bukkit.entity.Mob;
-import org.bukkit.entity.Monster;
-import org.bukkit.entity.Mule;
-import org.bukkit.entity.MushroomCow;
-import org.bukkit.entity.Ocelot;
-import org.bukkit.entity.Panda;
-import org.bukkit.entity.Parrot;
-import org.bukkit.entity.Phantom;
-import org.bukkit.entity.Pig;
-import org.bukkit.entity.PigZombie;
-import org.bukkit.entity.Piglin;
-import org.bukkit.entity.PiglinAbstract;
-import org.bukkit.entity.PiglinBrute;
-import org.bukkit.entity.Pillager;
-import org.bukkit.entity.PolarBear;
-import org.bukkit.entity.PufferFish;
-import org.bukkit.entity.Rabbit;
-import org.bukkit.entity.Raider;
-import org.bukkit.entity.Ravager;
-import org.bukkit.entity.Salmon;
-import org.bukkit.entity.Sheep;
-import org.bukkit.entity.Shulker;
-import org.bukkit.entity.Silverfish;
-import org.bukkit.entity.Skeleton;
-import org.bukkit.entity.SkeletonHorse;
-import org.bukkit.entity.Slime;
-import org.bukkit.entity.Snowman;
-import org.bukkit.entity.Spellcaster;
-import org.bukkit.entity.Spider;
-import org.bukkit.entity.Squid;
-import org.bukkit.entity.Stray;
-import org.bukkit.entity.Strider;
-import org.bukkit.entity.Tameable;
-import org.bukkit.entity.TraderLlama;
-import org.bukkit.entity.TropicalFish;
-import org.bukkit.entity.Turtle;
-import org.bukkit.entity.Vex;
-import org.bukkit.entity.Villager;
-import org.bukkit.entity.Vindicator;
-import org.bukkit.entity.WanderingTrader;
-import org.bukkit.entity.WaterMob;
-import org.bukkit.entity.Witch;
-import org.bukkit.entity.Wither;
-import org.bukkit.entity.WitherSkeleton;
-import org.bukkit.entity.Wolf;
-import org.bukkit.entity.Zoglin;
-import org.bukkit.entity.Zombie;
-import org.bukkit.entity.ZombieHorse;
-import org.bukkit.entity.ZombieVillager;
-
+import com.google.common.base.CaseFormat;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.paper.entity.SchoolableFish;
 import java.lang.reflect.Constructor;
 import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Locale;
+import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Set;
+import net.minecraft.world.entity.ai.goal.Goal;
+import net.minecraft.world.entity.monster.RangedAttackMob;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.bukkit.NamespacedKey;
+import org.bukkit.entity.*;
+import org.jspecify.annotations.NullMarked;
 
-public class MobGoalNames {
+@NullMarked
+public final class MobGoalNames { // todo sync with MobGoalHelper ideally this should not be duplicated
 
     private static final Map<Class<? extends Goal>, Class<? extends Mob>> entityClassCache = new HashMap<>();
-    public static final Map<Class<? extends net.minecraft.world.entity.Mob>, Class<? extends Mob>> bukkitMap = new HashMap<>();
-
+    public static final Map<Class<? extends net.minecraft.world.entity.Mob>, Class<? extends Mob>> bukkitMap = new LinkedHashMap<>();
 
     static {
         //<editor-fold defaultstate="collapsed" desc="bukkitMap Entities">
         bukkitMap.put(net.minecraft.world.entity.Mob.class, Mob.class);
         bukkitMap.put(net.minecraft.world.entity.AgeableMob.class, Ageable.class);
-        bukkitMap.put(AmbientCreature.class, Ambient.class);
-        bukkitMap.put(Animal.class, Animals.class);
+        bukkitMap.put(net.minecraft.world.entity.ambient.AmbientCreature.class, Ambient.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.Animal.class, Animals.class);
         bukkitMap.put(net.minecraft.world.entity.ambient.Bat.class, Bat.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Bee.class, Bee.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Blaze.class, Blaze.class);
@@ -144,51 +36,51 @@ public class MobGoalNames {
         bukkitMap.put(net.minecraft.world.entity.animal.Chicken.class, Chicken.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Cod.class, Cod.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Cow.class, Cow.class);
-        bukkitMap.put(PathfinderMob.class, Creature.class);
+        bukkitMap.put(net.minecraft.world.entity.PathfinderMob.class, Creature.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Creeper.class, Creeper.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Dolphin.class, Dolphin.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Drowned.class, Drowned.class);
         bukkitMap.put(net.minecraft.world.entity.boss.enderdragon.EnderDragon.class, EnderDragon.class);
-        bukkitMap.put(EnderMan.class, Enderman.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.EnderMan.class, Enderman.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Endermite.class, Endermite.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Evoker.class, Evoker.class);
-        bukkitMap.put(AbstractFish.class, Fish.class);
-        bukkitMap.put(AbstractSchoolingFish.class, io.papermc.paper.entity.SchoolableFish.class);
-        bukkitMap.put(FlyingMob.class, Flying.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.AbstractFish.class, Fish.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.AbstractSchoolingFish.class, SchoolableFish.class);
+        bukkitMap.put(net.minecraft.world.entity.FlyingMob.class, Flying.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Fox.class, Fox.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Ghast.class, Ghast.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Giant.class, Giant.class);
-        bukkitMap.put(AbstractGolem.class, Golem.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.AbstractGolem.class, Golem.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Guardian.class, Guardian.class);
         bukkitMap.put(net.minecraft.world.entity.monster.ElderGuardian.class, ElderGuardian.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.Horse.class, Horse.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.AbstractHorse.class, AbstractHorse.class);
-        bukkitMap.put(AbstractChestedHorse.class, ChestedHorse.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.horse.AbstractChestedHorse.class, ChestedHorse.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.Donkey.class, Donkey.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.Mule.class, Mule.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.SkeletonHorse.class, SkeletonHorse.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.ZombieHorse.class, ZombieHorse.class);
         bukkitMap.put(net.minecraft.world.entity.animal.camel.Camel.class, org.bukkit.entity.Camel.class);
-        bukkitMap.put(AbstractIllager.class, Illager.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.AbstractIllager.class, Illager.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Illusioner.class, Illusioner.class);
-        bukkitMap.put(SpellcasterIllager.class, Spellcaster.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.SpellcasterIllager.class, Spellcaster.class);
         bukkitMap.put(net.minecraft.world.entity.animal.IronGolem.class, IronGolem.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.Llama.class, Llama.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.TraderLlama.class, TraderLlama.class);
         bukkitMap.put(net.minecraft.world.entity.monster.MagmaCube.class, MagmaCube.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Monster.class, Monster.class);
-        bukkitMap.put(PatrollingMonster.class, Raider.class); // close enough
+        bukkitMap.put(net.minecraft.world.entity.monster.PatrollingMonster.class, Raider.class); // close enough
         bukkitMap.put(net.minecraft.world.entity.animal.MushroomCow.class, MushroomCow.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Ocelot.class, Ocelot.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Panda.class, Panda.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Parrot.class, Parrot.class);
-        bukkitMap.put(ShoulderRidingEntity.class, Parrot.class); // close enough
+        bukkitMap.put(net.minecraft.world.entity.animal.ShoulderRidingEntity.class, Parrot.class); // close enough
         bukkitMap.put(net.minecraft.world.entity.monster.Phantom.class, Phantom.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Pig.class, Pig.class);
-        bukkitMap.put(ZombifiedPiglin.class, PigZombie.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.ZombifiedPiglin.class, PigZombie.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Pillager.class, Pillager.class);
         bukkitMap.put(net.minecraft.world.entity.animal.PolarBear.class, PolarBear.class);
-        bukkitMap.put(Pufferfish.class, PufferFish.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.Pufferfish.class, PufferFish.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Rabbit.class, Rabbit.class);
         bukkitMap.put(net.minecraft.world.entity.raid.Raider.class, Raider.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Ravager.class, Ravager.class);
@@ -201,10 +93,10 @@ public class MobGoalNames {
         bukkitMap.put(net.minecraft.world.entity.monster.Stray.class, Stray.class);
         bukkitMap.put(net.minecraft.world.entity.monster.WitherSkeleton.class, WitherSkeleton.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Slime.class, Slime.class);
-        bukkitMap.put(SnowGolem.class, Snowman.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.SnowGolem.class, Snowman.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Spider.class, Spider.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Squid.class, Squid.class);
-        bukkitMap.put(TamableAnimal.class, Tameable.class);
+        bukkitMap.put(net.minecraft.world.entity.TamableAnimal.class, Tameable.class);
         bukkitMap.put(net.minecraft.world.entity.animal.TropicalFish.class, TropicalFish.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Turtle.class, Turtle.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Vex.class, Vex.class);
@@ -212,108 +104,85 @@ public class MobGoalNames {
         bukkitMap.put(net.minecraft.world.entity.npc.AbstractVillager.class, AbstractVillager.class);
         bukkitMap.put(net.minecraft.world.entity.npc.WanderingTrader.class, WanderingTrader.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Vindicator.class, Vindicator.class);
-        bukkitMap.put(WaterAnimal.class, WaterMob.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.WaterAnimal.class, WaterMob.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Witch.class, Witch.class);
-        bukkitMap.put(WitherBoss.class, Wither.class);
+        bukkitMap.put(net.minecraft.world.entity.boss.wither.WitherBoss.class, Wither.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Wolf.class, Wolf.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Zombie.class, Zombie.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Husk.class, Husk.class);
         bukkitMap.put(net.minecraft.world.entity.monster.ZombieVillager.class, ZombieVillager.class);
         bukkitMap.put(net.minecraft.world.entity.monster.hoglin.Hoglin.class, Hoglin.class);
         bukkitMap.put(net.minecraft.world.entity.monster.piglin.Piglin.class, Piglin.class);
-        bukkitMap.put(AbstractPiglin.class, PiglinAbstract.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.piglin.AbstractPiglin.class, PiglinAbstract.class);
         bukkitMap.put(net.minecraft.world.entity.monster.piglin.PiglinBrute.class, PiglinBrute.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Strider.class, Strider.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Zoglin.class, Zoglin.class);
-        bukkitMap.put(net.minecraft.world.entity.GlowSquid.class, org.bukkit.entity.GlowSquid.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.axolotl.Axolotl.class, org.bukkit.entity.Axolotl.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.goat.Goat.class, org.bukkit.entity.Goat.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.frog.Frog.class, org.bukkit.entity.Frog.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.frog.Tadpole.class, org.bukkit.entity.Tadpole.class);
-        bukkitMap.put(net.minecraft.world.entity.monster.warden.Warden.class, org.bukkit.entity.Warden.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.allay.Allay.class, org.bukkit.entity.Allay.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.sniffer.Sniffer.class, org.bukkit.entity.Sniffer.class);
-        bukkitMap.put(net.minecraft.world.entity.monster.breeze.Breeze.class, org.bukkit.entity.Breeze.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.armadillo.Armadillo.class, org.bukkit.entity.Armadillo.class);
-        bukkitMap.put(net.minecraft.world.entity.monster.Bogged.class, org.bukkit.entity.Bogged.class);
-        bukkitMap.put(net.minecraft.world.entity.monster.creaking.Creaking.class, org.bukkit.entity.Creaking.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.AgeableWaterCreature.class, org.bukkit.entity.Squid.class); // close enough
+        bukkitMap.put(net.minecraft.world.entity.GlowSquid.class, GlowSquid.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.axolotl.Axolotl.class, Axolotl.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.goat.Goat.class, Goat.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.frog.Frog.class, Frog.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.frog.Tadpole.class, Tadpole.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.warden.Warden.class, Warden.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.allay.Allay.class, Allay.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.sniffer.Sniffer.class, Sniffer.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.breeze.Breeze.class, Breeze.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.armadillo.Armadillo.class, Armadillo.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.Bogged.class, Bogged.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.creaking.Creaking.class, Creaking.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.AgeableWaterCreature.class, Squid.class); // close enough
         //</editor-fold>
     }
 
-    private static final BiMap<String, String> deobfuscationMap = HashBiMap.create();
-    static final Set<String> ignored = new HashSet<>();
+    private static final Map<String, String> deobfuscationMap = new HashMap<>();
 
     static {
+        // TODO these kinda should be checked on each release, in case obfuscation changes
         deobfuscationMap.put("abstract_skeleton_1", "abstract_skeleton_melee");
-
-        ignored.add("goal_selector_1");
-        ignored.add("goal_selector_2");
-        ignored.add("selector_1");
-        ignored.add("selector_2");
-        ignored.add("wrapped");
     }
 
-    public static String getUsableName(String name) {
-        final String original = name;
-        name = name.substring(name.lastIndexOf(".") + 1);
-        boolean flag = false;
+    private static String getPathName(String name) {
+        String pathName = name.substring(name.lastIndexOf('.') + 1);
+        boolean needDeobfMap = false;
+
         // inner classes
-        if (name.contains("$")) {
-            String cut = name.substring(name.indexOf("$") + 1);
-            if (cut.length() <= 2) {
-                name = name.replace("Entity", "");
-                name = name.replace("$", "_");
-                flag = true;
-            } else {
-                // mapped, wooo
-                name = cut;
+        int firstInnerDelimiter = pathName.indexOf('$');
+        if (firstInnerDelimiter != -1) {
+            String innerClassName = pathName.substring(firstInnerDelimiter + 1);
+            for (String nestedClass : innerClassName.split("\\$")) {
+                if (NumberUtils.isDigits(nestedClass)) {
+                    needDeobfMap = true;
+                    break;
+                }
             }
+            if (!needDeobfMap) {
+                pathName = innerClassName;
+            }
+            pathName = pathName.replace('$', '_');
+            // mapped, wooo!
         }
 
-        name = name.replace("PathfinderGoal", "");
-        name = name.replace("TargetGoal", "");
-        name = name.replace("Goal", "");
-        StringBuilder sb = new StringBuilder();
-        for (char c : name.toCharArray()) {
-            if (c >= 'A' && c <= 'Z') {
-                sb.append("_");
-                sb.append(Character.toLowerCase(c));
-            } else {
-                sb.append(c);
-            }
-        }
-        name = sb.toString();
-        name = name.replaceFirst("_", "");
+        pathName = Formatting.stripWordOfCamelCaseName(pathName, "TargetGoal", true); // replace last? reverse search?
+        pathName = Formatting.stripWordOfCamelCaseName(pathName, "Goal", true);
+        pathName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, pathName);
 
-        if (flag && !deobfuscationMap.containsKey(name.toLowerCase(Locale.ROOT)) && !ignored.contains(name)) {
-            System.out.println("need to map " + original + " (" + name.toLowerCase(Locale.ROOT) + ")");
+        if (needDeobfMap && !deobfuscationMap.containsKey(pathName)) {
+            System.err.println("need to map " + name + " (" + pathName + ")");
         }
 
         // did we rename this key?
-        return deobfuscationMap.getOrDefault(name, name);
+        return deobfuscationMap.getOrDefault(pathName, pathName);
     }
 
-    public static boolean isIgnored(String name) {
-        return ignored.contains(name);
-    }
-
-
-    public static <T extends Mob> GoalKey<T> getKey(String clazzName, Class<? extends Goal> goalClass) {
-        String name = getUsableName(clazzName);
-        if (MobGoalNames.isIgnored(name)) {
-            //noinspection unchecked
-            return (GoalKey<T>) GoalKey.of(Mob.class, NamespacedKey.minecraft(name));
-        }
+    public static <T extends Mob> GoalKey<T> getKey(Class<? extends Goal> goalClass) {
+        String name = getPathName(goalClass.getName());
         return GoalKey.of(getEntity(goalClass), NamespacedKey.minecraft(name));
     }
 
-    public static <T extends Mob> Class<T> getEntity(Class<? extends Goal> goalClass) {
+    private static <T extends Mob> Class<T> getEntity(Class<? extends Goal> goalClass) {
         //noinspection unchecked
         return (Class<T>) entityClassCache.computeIfAbsent(goalClass, key -> {
             for (Constructor<?> ctor : key.getDeclaredConstructors()) {
-                for (int i = 0; i < ctor.getParameterCount(); i++) {
-                    Class<?> param = ctor.getParameterTypes()[i];
+                for (Class<?> param : ctor.getParameterTypes()) {
                     if (net.minecraft.world.entity.Mob.class.isAssignableFrom(param)) {
                         //noinspection unchecked
                         return toBukkitClass((Class<? extends net.minecraft.world.entity.Mob>) param);
@@ -322,11 +191,11 @@ public class MobGoalNames {
                     }
                 }
             }
-            throw new RuntimeException("Can't figure out applicable entity for mob goal " + goalClass); // maybe just return EntityInsentient?
+            throw new RuntimeException("Can't figure out applicable entity for mob goal " + goalClass); // maybe just return Mob?
         });
     }
 
-    public static Class<? extends Mob> toBukkitClass(Class<? extends net.minecraft.world.entity.Mob> nmsClass) {
+    private static Class<? extends Mob> toBukkitClass(Class<? extends net.minecraft.world.entity.Mob> nmsClass) {
         Class<? extends Mob> bukkitClass = bukkitMap.get(nmsClass);
         if (bukkitClass == null) {
             throw new RuntimeException("Can't figure out applicable bukkit entity for nms entity " + nmsClass); // maybe just return Mob?
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedKeyType.java b/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedKeyType.java
new file mode 100644
index 0000000000..7dd3af4d33
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedKeyType.java
@@ -0,0 +1,133 @@
+package io.papermc.generator.types.registry;
+
+import com.google.common.base.Suppliers;
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.registry.RegistryEntry;
+import io.papermc.generator.types.SimpleGenerator;
+import io.papermc.generator.utils.Annotations;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.generator.utils.Javadocs;
+import io.papermc.generator.utils.experimental.ExperimentalCollector;
+import io.papermc.generator.utils.experimental.SingleFlagHolder;
+import io.papermc.paper.registry.RegistryKey;
+import io.papermc.paper.registry.TypedKey;
+import java.util.Map;
+import java.util.function.Supplier;
+import javax.lang.model.SourceVersion;
+import net.kyori.adventure.key.Key;
+import net.minecraft.core.Holder;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.world.flag.FeatureElement;
+import net.minecraft.world.flag.FeatureFlags;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+import static com.squareup.javapoet.TypeSpec.classBuilder;
+import static io.papermc.generator.utils.Annotations.EXPERIMENTAL_API_ANNOTATION;
+import static io.papermc.generator.utils.Annotations.experimentalAnnotations;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+
+@NullMarked
+public class GeneratedKeyType<T> extends SimpleGenerator {
+
+    private final RegistryEntry<T> entry;
+    private final Supplier<Map<ResourceKey<T>, SingleFlagHolder>> experimentalKeys;
+    private final boolean isFilteredRegistry;
+
+    public GeneratedKeyType(String packageName, RegistryEntry<T> entry) {
+        super(entry.keyClassName().concat("Keys"), packageName);
+        this.entry = entry;
+        this.experimentalKeys = Suppliers.memoize(() -> ExperimentalCollector.collectDataDrivenElementIds(entry.registry()));
+        this.isFilteredRegistry = FeatureElement.FILTERED_REGISTRIES.contains(entry.registryKey());
+    }
+
+    private MethodSpec.Builder createMethod(TypeName returnType) {
+        boolean publicCreateKeyMethod = this.entry.allowCustomKeys();
+
+        ParameterSpec keyParam = ParameterSpec.builder(Key.class, "key", FINAL).build();
+        MethodSpec.Builder create = MethodSpec.methodBuilder("create")
+            .addModifiers(publicCreateKeyMethod ? PUBLIC : PRIVATE, STATIC)
+            .addParameter(keyParam)
+            .addCode("return $T.create($T.$L, $N);", TypedKey.class, RegistryKey.class, this.entry.registryKeyField(), keyParam)
+            .returns(returnType);
+        if (publicCreateKeyMethod) {
+            create.addJavadoc(Javadocs.CREATE_TYPED_KEY_JAVADOC, this.entry.apiClass(), this.entry.registryKey().location().toString());
+        }
+        return create;
+    }
+
+    private TypeSpec.Builder keyHolderType() {
+        return classBuilder(this.className)
+            .addModifiers(PUBLIC, FINAL)
+            .addJavadoc(Javadocs.getVersionDependentClassHeader("keys", "{@link $T#$L}"), RegistryKey.class, this.entry.registryKeyField())
+            .addAnnotations(Annotations.CLASS_HEADER)
+            .addMethod(MethodSpec.constructorBuilder()
+                .addModifiers(PRIVATE)
+                .build()
+            );
+    }
+
+    @Override
+    protected TypeSpec getTypeSpec() {
+        TypeName typedKeyType = ParameterizedTypeName.get(TypedKey.class, this.entry.apiClass());
+
+        TypeSpec.Builder typeBuilder = this.keyHolderType();
+        MethodSpec.Builder createMethod = this.createMethod(typedKeyType);
+
+        boolean allExperimental = true;
+        for (Holder.Reference<T> reference : this.entry.registry().listElements().sorted(Formatting.alphabeticKeyOrder(reference -> reference.key().location().getPath())).toList()) {
+            ResourceKey<T> key = reference.key();
+            String keyPath = key.location().getPath();
+            String fieldName = Formatting.formatKeyAsField(keyPath);
+            if (!SourceVersion.isIdentifier(fieldName) && this.entry.getFieldNames().containsKey(key)) {
+                fieldName = this.entry.getFieldNames().get(key);
+            }
+
+            FieldSpec.Builder fieldBuilder = FieldSpec.builder(typedKeyType, fieldName, PUBLIC, STATIC, FINAL)
+                .initializer("$N(key($S))", createMethod.build(), keyPath)
+                .addJavadoc(Javadocs.getVersionDependentField("{@code $L}"), key.location().toString());
+
+            SingleFlagHolder requiredFeature = this.getRequiredFeature(reference);
+            if (requiredFeature != null) {
+                fieldBuilder.addAnnotations(experimentalAnnotations(requiredFeature));
+            } else {
+                allExperimental = false;
+            }
+            typeBuilder.addField(fieldBuilder.build());
+        }
+
+        if (allExperimental) {
+            typeBuilder.addAnnotation(EXPERIMENTAL_API_ANNOTATION);
+            createMethod.addAnnotation(EXPERIMENTAL_API_ANNOTATION);
+        }
+        return typeBuilder.addMethod(createMethod.build()).build();
+    }
+
+    @Override
+    protected JavaFile.Builder file(JavaFile.Builder builder) {
+        return builder.addStaticImport(Key.class, "key");
+    }
+
+    protected @Nullable SingleFlagHolder getRequiredFeature(Holder.Reference<T> reference) {
+        if (this.isFilteredRegistry) {
+            // built-in registry
+            FeatureElement element = (FeatureElement) reference.value();
+            if (FeatureFlags.isExperimental(element.requiredFeatures())) {
+                return SingleFlagHolder.fromSet(element.requiredFeatures());
+            }
+        } else {
+            // data-driven registry
+            return this.experimentalKeys.get().get(reference.key());
+        }
+        return null;
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedTagKeyType.java b/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedTagKeyType.java
new file mode 100644
index 0000000000..e1c5cb71f0
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedTagKeyType.java
@@ -0,0 +1,103 @@
+package io.papermc.generator.types.registry;
+
+import com.squareup.javapoet.FieldSpec;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeName;
+import com.squareup.javapoet.TypeSpec;
+import io.papermc.generator.Main;
+import io.papermc.generator.registry.RegistryEntry;
+import io.papermc.generator.types.SimpleGenerator;
+import io.papermc.generator.utils.Annotations;
+import io.papermc.generator.utils.Formatting;
+import io.papermc.generator.utils.Javadocs;
+import io.papermc.generator.utils.experimental.SingleFlagHolder;
+import io.papermc.paper.registry.RegistryKey;
+import io.papermc.paper.registry.tag.TagKey;
+import java.util.concurrent.atomic.AtomicBoolean;
+import net.kyori.adventure.key.Key;
+import org.jspecify.annotations.NullMarked;
+
+import static com.squareup.javapoet.TypeSpec.classBuilder;
+import static io.papermc.generator.utils.Annotations.EXPERIMENTAL_API_ANNOTATION;
+import static io.papermc.generator.utils.Annotations.experimentalAnnotations;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+
+@NullMarked
+public class GeneratedTagKeyType extends SimpleGenerator {
+
+    private final RegistryEntry<?> entry;
+
+    public GeneratedTagKeyType(RegistryEntry<?> entry, String packageName) {
+        super(entry.keyClassName().concat("TagKeys"), packageName);
+        this.entry = entry;
+    }
+
+    private MethodSpec.Builder createMethod(TypeName returnType) {
+        boolean publicCreateKeyMethod = true; // tag lifecycle event exists
+
+        ParameterSpec keyParam = ParameterSpec.builder(Key.class, "key", FINAL).build();
+        MethodSpec.Builder create = MethodSpec.methodBuilder("create")
+            .addModifiers(publicCreateKeyMethod ? PUBLIC : PRIVATE, STATIC)
+            .addParameter(keyParam)
+            .addCode("return $T.create($T.$L, $N);", TagKey.class, RegistryKey.class, this.entry.registryKeyField(), keyParam)
+            .returns(returnType);
+        if (publicCreateKeyMethod) {
+            create.addAnnotation(EXPERIMENTAL_API_ANNOTATION); // TODO remove once not experimental
+            create.addJavadoc(Javadocs.CREATED_TAG_KEY_JAVADOC, this.entry.apiClass(), this.entry.registryKey().location().toString());
+        }
+        return create;
+    }
+
+    private TypeSpec.Builder keyHolderType() {
+        return classBuilder(this.className)
+            .addModifiers(PUBLIC, FINAL)
+            .addJavadoc(Javadocs.getVersionDependentClassHeader("tag keys", "{@link $T#$L}"), RegistryKey.class, this.entry.registryKeyField())
+            .addAnnotations(Annotations.CLASS_HEADER)
+            .addMethod(MethodSpec.constructorBuilder()
+                .addModifiers(PRIVATE)
+                .build()
+            );
+    }
+
+    @Override
+    protected TypeSpec getTypeSpec() {
+        TypeName tagKeyType = ParameterizedTypeName.get(TagKey.class, this.entry.apiClass());
+
+        TypeSpec.Builder typeBuilder = this.keyHolderType();
+        MethodSpec.Builder createMethod = this.createMethod(tagKeyType);
+
+        AtomicBoolean allExperimental = new AtomicBoolean(true);
+        this.entry.registry().listTagIds().sorted(Formatting.alphabeticKeyOrder(tagKey -> tagKey.location().getPath())).forEach(tagKey -> {
+            String fieldName = Formatting.formatKeyAsField(tagKey.location().getPath());
+            FieldSpec.Builder fieldBuilder = FieldSpec.builder(tagKeyType, fieldName, PUBLIC, STATIC, FINAL)
+                .initializer("$N(key($S))", createMethod.build(), tagKey.location().getPath())
+                .addJavadoc(Javadocs.getVersionDependentField("{@code $L}"), "#" + tagKey.location());
+
+            String featureFlagName = Main.EXPERIMENTAL_TAGS.get(tagKey);
+            if (featureFlagName != null) {
+                fieldBuilder.addAnnotations(experimentalAnnotations(SingleFlagHolder.fromName(featureFlagName)));
+            } else {
+                allExperimental.set(false);
+            }
+            typeBuilder.addField(fieldBuilder.build());
+        });
+        if (allExperimental.get()) {
+            typeBuilder.addAnnotation(EXPERIMENTAL_API_ANNOTATION);
+            createMethod.addAnnotation(EXPERIMENTAL_API_ANNOTATION);
+        } else {
+            typeBuilder.addAnnotation(EXPERIMENTAL_API_ANNOTATION); // TODO experimental API
+        }
+        return typeBuilder.addMethod(createMethod.build()).build();
+    }
+
+    @Override
+    protected JavaFile.Builder file(JavaFile.Builder builder) {
+        return builder.addStaticImport(Key.class, "key");
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/Annotations.java b/paper-generator/src/main/java/io/papermc/generator/utils/Annotations.java
new file mode 100644
index 0000000000..47322695e4
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/Annotations.java
@@ -0,0 +1,48 @@
+package io.papermc.generator.utils;
+
+import com.squareup.javapoet.AnnotationSpec;
+import io.papermc.generator.utils.experimental.SingleFlagHolder;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.List;
+import net.minecraft.SharedConstants;
+import org.bukkit.MinecraftExperimental;
+import org.jetbrains.annotations.ApiStatus;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class Annotations {
+
+    public static List<AnnotationSpec> experimentalAnnotations(SingleFlagHolder requiredFeature) {
+        AnnotationSpec.Builder builder = AnnotationSpec.builder(MinecraftExperimental.class);
+        builder.addMember("value", "$T.$L", MinecraftExperimental.Requires.class, requiredFeature.asAnnotationMember().name());
+
+        return List.of(
+            AnnotationSpec.builder(ApiStatus.Experimental.class).build(),
+            builder.build()
+        );
+    }
+
+    public static AnnotationSpec suppressWarnings(String... values) {
+        AnnotationSpec.Builder builder = AnnotationSpec.builder(SuppressWarnings.class);
+        for (String value : values) {
+            builder.addMember("value", "$S", value);
+        }
+        return builder.build();
+    }
+
+    @ApiStatus.Experimental
+    public static final AnnotationSpec EXPERIMENTAL_API_ANNOTATION = AnnotationSpec.builder(ApiStatus.Experimental.class).build();
+    public static final AnnotationSpec NULL_MARKED = AnnotationSpec.builder(NullMarked.class).build();
+    public static final AnnotationSpec OVERRIDE = AnnotationSpec.builder(Override.class).build();
+    public static final AnnotationSpec GENERATED_FROM = AnnotationSpec.builder(GeneratedFrom.class)
+        .addMember("value", "$S", SharedConstants.getCurrentVersion().getName())
+        .build();
+    public static final Iterable<AnnotationSpec> CLASS_HEADER = List.of(
+        suppressWarnings("unused", "SpellCheckingInspection"),
+        NULL_MARKED,
+        GENERATED_FROM
+    );
+
+    private Annotations() {
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/BlockEntityMapping.java b/paper-generator/src/main/java/io/papermc/generator/utils/BlockEntityMapping.java
new file mode 100644
index 0000000000..d8d7d0f56a
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/BlockEntityMapping.java
@@ -0,0 +1,37 @@
+package io.papermc.generator.utils;
+
+import com.google.common.base.CaseFormat;
+import com.google.common.collect.ImmutableMap;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Map;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.world.level.block.entity.BlockEntityType;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class BlockEntityMapping {
+
+    // if this become painful/too weird like the blockdata just rename the impl directly again
+    private static final Map<String, String> RENAMES = ImmutableMap.<String, String>builder()
+        .put("CraftFurnace", "CraftFurnaceFurnace")
+        .put("CraftMobSpawner", "CraftCreatureSpawner")
+        .put("CraftPiston", "CraftMovingPiston")
+        .put("CraftTrappedChest", "CraftChest") // not really a rename
+        .buildOrThrow();
+
+    public static final Map<ResourceKey<BlockEntityType<?>>, String> MAPPING;
+
+    static {
+        Map<ResourceKey<BlockEntityType<?>>, String> mapping = new IdentityHashMap<>();
+        BuiltInRegistries.BLOCK_ENTITY_TYPE.registryKeySet().forEach(key -> {
+            String name = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, key.location().getPath());
+            String implName = "Craft".concat(name);
+
+            mapping.put(key, RENAMES.getOrDefault(implName, implName));
+        });
+
+        MAPPING = Collections.unmodifiableMap(mapping);
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/BlockStateMapping.java b/paper-generator/src/main/java/io/papermc/generator/utils/BlockStateMapping.java
new file mode 100644
index 0000000000..07cc283b46
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/BlockStateMapping.java
@@ -0,0 +1,504 @@
+package io.papermc.generator.utils;
+
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Multimap;
+import com.google.common.reflect.TypeToken;
+import com.mojang.datafixers.util.Either;
+import io.papermc.generator.types.craftblockdata.property.holder.VirtualField;
+import java.lang.reflect.Field;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.BiConsumer;
+import net.minecraft.core.Direction;
+import net.minecraft.core.FrontAndTop;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.util.StringRepresentable;
+import net.minecraft.world.level.block.AbstractFurnaceBlock;
+import net.minecraft.world.level.block.BigDripleafStemBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.CommandBlock;
+import net.minecraft.world.level.block.IronBarsBlock;
+import net.minecraft.world.level.block.MultifaceBlock;
+import net.minecraft.world.level.block.NoteBlock;
+import net.minecraft.world.level.block.PipeBlock;
+import net.minecraft.world.level.block.StructureBlock;
+import net.minecraft.world.level.block.WallBlock;
+import net.minecraft.world.level.block.entity.trialspawner.TrialSpawnerState;
+import net.minecraft.world.level.block.entity.vault.VaultState;
+import net.minecraft.world.level.block.state.properties.AttachFace;
+import net.minecraft.world.level.block.state.properties.BambooLeaves;
+import net.minecraft.world.level.block.state.properties.BedPart;
+import net.minecraft.world.level.block.state.properties.BellAttachType;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.ChestType;
+import net.minecraft.world.level.block.state.properties.ComparatorMode;
+import net.minecraft.world.level.block.state.properties.DoorHingeSide;
+import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
+import net.minecraft.world.level.block.state.properties.DripstoneThickness;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.Half;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.properties.PistonType;
+import net.minecraft.world.level.block.state.properties.Property;
+import net.minecraft.world.level.block.state.properties.RailShape;
+import net.minecraft.world.level.block.state.properties.RedstoneSide;
+import net.minecraft.world.level.block.state.properties.SculkSensorPhase;
+import net.minecraft.world.level.block.state.properties.SlabType;
+import net.minecraft.world.level.block.state.properties.StairsShape;
+import net.minecraft.world.level.block.state.properties.StructureMode;
+import net.minecraft.world.level.block.state.properties.Tilt;
+import net.minecraft.world.level.block.state.properties.WallSide;
+import org.bukkit.Axis;
+import org.bukkit.Instrument;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.Orientation;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.block.data.AnaloguePowerable;
+import org.bukkit.block.data.Bisected;
+import org.bukkit.block.data.Brushable;
+import org.bukkit.block.data.Directional;
+import org.bukkit.block.data.FaceAttachable;
+import org.bukkit.block.data.Hangable;
+import org.bukkit.block.data.Hatchable;
+import org.bukkit.block.data.Levelled;
+import org.bukkit.block.data.Lightable;
+import org.bukkit.block.data.MultipleFacing;
+import org.bukkit.block.data.Openable;
+import org.bukkit.block.data.Orientable;
+import org.bukkit.block.data.Powerable;
+import org.bukkit.block.data.Rail;
+import org.bukkit.block.data.Rotatable;
+import org.bukkit.block.data.Snowable;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.block.data.type.Bamboo;
+import org.bukkit.block.data.type.Bed;
+import org.bukkit.block.data.type.Bell;
+import org.bukkit.block.data.type.BigDripleaf;
+import org.bukkit.block.data.type.Chest;
+import org.bukkit.block.data.type.Comparator;
+import org.bukkit.block.data.type.Door;
+import org.bukkit.block.data.type.Dripleaf;
+import org.bukkit.block.data.type.Fence;
+import org.bukkit.block.data.type.Furnace;
+import org.bukkit.block.data.type.PointedDripstone;
+import org.bukkit.block.data.type.RedstoneRail;
+import org.bukkit.block.data.type.RedstoneWire;
+import org.bukkit.block.data.type.ResinClump;
+import org.bukkit.block.data.type.SculkSensor;
+import org.bukkit.block.data.type.Slab;
+import org.bukkit.block.data.type.Stairs;
+import org.bukkit.block.data.type.Switch;
+import org.bukkit.block.data.type.TechnicalPiston;
+import org.bukkit.block.data.type.TrialSpawner;
+import org.bukkit.block.data.type.Vault;
+import org.bukkit.block.data.type.Wall;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+@NullMarked
+public final class BlockStateMapping {
+
+    public static final String PIPE_FIELD_NAME = "PROPERTY_BY_DIRECTION";
+
+    public record BlockData(String implName, @Nullable Class<? extends org.bukkit.block.data.BlockData> api,
+                            Collection<? extends Property<?>> properties, Map<Property<?>, Field> propertyFields,
+                            Multimap<Either<Field, VirtualField>, Property<?>> complexPropertyFields) {
+    }
+
+    private static final Map<String, String> API_RENAMES = ImmutableMap.<String, String>builder()
+        .put("SnowLayer", "Snow")
+        .put("StainedGlassPane", "GlassPane") // weird that this one implements glass pane but not the regular glass pane
+        .put("CeilingHangingSign", "HangingSign")
+        .put("RedStoneWire", "RedstoneWire")
+        .put("TripWire", "Tripwire")
+        .put("TripWireHook", "TripwireHook")
+        .put("Tnt", "TNT")
+        .put("BambooStalk", "Bamboo")
+        .put("Farm", "Farmland")
+        .put("ChiseledBookShelf", "ChiseledBookshelf")
+        .put("StandingSign", "Sign")
+        .put("FenceGate", "Gate")
+        .buildOrThrow();
+
+    private static final Set<Class<? extends Block>> BLOCK_SUFFIX_INTENDED = Set.of(
+        CommandBlock.class,
+        StructureBlock.class,
+        NoteBlock.class
+    );
+
+    // virtual data that doesn't exist as constant in the source but still organized this way in the api
+    public static final ImmutableMultimap<Class<?>, VirtualField> VIRTUAL_NODES = ImmutableMultimap.<Class<?>, VirtualField>builder()
+        .put(WallBlock.class,
+            VirtualField.createMap("PROPERTY_BY_FACE", BlockFace.class, new TypeToken<EnumProperty<WallSide>>() {}, "HEIGHT")
+            .withValues(List.of(
+                WallBlock.EAST_WALL,
+                WallBlock.NORTH_WALL,
+                WallBlock.SOUTH_WALL,
+                WallBlock.WEST_WALL
+            )).make())
+        .build();
+
+    public static final Map<Property<?>, Field> FALLBACK_GENERIC_FIELDS;
+
+    static {
+        Map<Property<?>, Field> fallbackGenericFields = new HashMap<>();
+        fetchProperties(BlockStateProperties.class, (field, property) -> fallbackGenericFields.put(property, field), null);
+        FALLBACK_GENERIC_FIELDS = Collections.unmodifiableMap(fallbackGenericFields);
+    }
+
+    public static final Map<Class<? extends Block>, BlockData> MAPPING;
+
+    static {
+        Map<Class<? extends Block>, Collection<Property<?>>> specialBlocks = new IdentityHashMap<>();
+        for (Block block : BuiltInRegistries.BLOCK) {
+            if (!block.getStateDefinition().getProperties().isEmpty()) {
+                specialBlocks.put(block.getClass(), block.getStateDefinition().getProperties());
+            }
+        }
+
+        Map<Class<? extends Block>, BlockData> map = new IdentityHashMap<>();
+        for (Map.Entry<Class<? extends Block>, Collection<Property<?>>> entry : specialBlocks.entrySet()) {
+            Class<? extends Block> specialBlock = entry.getKey();
+
+            Collection<Property<?>> properties = new ArrayList<>(entry.getValue());
+
+            Map<Property<?>, Field> propertyFields = new HashMap<>(properties.size());
+            Multimap<Either<Field, VirtualField>, Property<?>> complexPropertyFields = ArrayListMultimap.create();
+
+            fetchProperties(specialBlock, (field, property) -> {
+                if (properties.contains(property)) {
+                    propertyFields.put(property, field);
+                }
+            }, (field, property) -> {
+                if (field.getName().equals(BlockStateMapping.PIPE_FIELD_NAME) &&
+                    PipeBlock.PROPERTY_BY_DIRECTION.containsValue(property)) { // need another check to avoid conflict with redstone connection
+                    // handled later with further check
+                    return;
+                }
+
+                if (properties.remove(property)) { // handle those separately and only count if the property was in the state definition
+                    complexPropertyFields.put(Either.left(field), property);
+                }
+            });
+
+            // multiple facing
+            List<Property<?>> commonPipeProperties = new ArrayList<>(properties);
+            commonPipeProperties.retainAll(PipeBlock.PROPERTY_BY_DIRECTION.values());
+            if (commonPipeProperties.size() >= 2) {
+                Field field = fetchPipeFieldMap(specialBlock);
+                if (field != null) {
+                    properties.removeAll(commonPipeProperties);
+                    complexPropertyFields.putAll(Either.left(field), commonPipeProperties);
+                }
+            }
+
+            // virtual nodes
+            if (VIRTUAL_NODES.containsKey(specialBlock)) {
+                for (VirtualField virtualField : VIRTUAL_NODES.get(specialBlock)) {
+                    for (Property<?> property : virtualField.values()) {
+                        if (properties.remove(property)) {
+                            complexPropertyFields.put(Either.right(virtualField), property);
+                        } else {
+                            throw new IllegalStateException("Unhandled virtual node " + virtualField.name() + " for " + property);
+                        }
+                    }
+                }
+            }
+
+            String apiName = formatApiName(specialBlock);
+            String implName = "Craft".concat(apiName); // before renames
+
+            apiName = Formatting.stripWordOfCamelCaseName(apiName, "Base", true);
+            apiName = API_RENAMES.getOrDefault(apiName, apiName);
+
+            Class<? extends org.bukkit.block.data.BlockData> api = ClassHelper.classOr("org.bukkit.block.data.type." + apiName, null);
+            if (api == null) {
+                Class<?> directParent = specialBlock.getSuperclass();
+                if (specialBlocks.containsKey(directParent)) {
+                    // if the properties are the same then always consider the parent
+                    // check deeper in the tree?
+                    if (specialBlocks.get(directParent).equals(entry.getValue())) {
+                        String parentApiName = formatApiName(directParent);
+                        parentApiName = Formatting.stripWordOfCamelCaseName(parentApiName, "Base", true);
+                        parentApiName = API_RENAMES.getOrDefault(parentApiName, parentApiName);
+                        api = ClassHelper.classOr("org.bukkit.block.data.type." + parentApiName, api);
+                    }
+                }
+            }
+            if (api == null) { // todo remove this part
+                if (AbstractFurnaceBlock.class.isAssignableFrom(specialBlock)) {
+                    api = Furnace.class; // for smoker and blast furnace
+                } else if (specialBlock == BigDripleafStemBlock.class) {
+                    api = Dripleaf.class;
+                } else if (specialBlock == IronBarsBlock.class) {
+                    api = Fence.class; // for glass pane (regular) and iron bars
+                } else if (specialBlock == MultifaceBlock.class) {
+                    api = ResinClump.class;
+                }
+            }
+
+            map.put(specialBlock, new BlockData(implName, api, properties, propertyFields, complexPropertyFields));
+        }
+        MAPPING = Collections.unmodifiableMap(map);
+    }
+
+    private static final Map<String, Class<? extends org.bukkit.block.data.BlockData>> NAME_TO_DATA = Map.of(
+        BlockStateProperties.AGE_1.getName(), Ageable.class,
+        BlockStateProperties.LEVEL.getName(), Levelled.class
+    );
+
+    private static final Map<Property<?>, Class<? extends org.bukkit.block.data.BlockData>> PROPERTY_TO_DATA = ImmutableMap.<Property<?>, Class<? extends org.bukkit.block.data.BlockData>>builder()
+        // levelled and ageable are done using the property name
+        .put(BlockStateProperties.POWER, AnaloguePowerable.class)
+        .put(BlockStateProperties.HALF, Bisected.class)
+        .put(BlockStateProperties.DOUBLE_BLOCK_HALF, Bisected.class)
+        .put(BlockStateProperties.DUSTED, Brushable.class)
+        .put(BlockStateProperties.FACING, Directional.class)
+        .put(BlockStateProperties.HORIZONTAL_FACING, Directional.class)
+        .put(BlockStateProperties.ATTACH_FACE, FaceAttachable.class)
+        .put(BlockStateProperties.HANGING, Hangable.class)
+        .put(BlockStateProperties.HATCH, Hatchable.class)
+        .put(BlockStateProperties.LIT, Lightable.class)
+        // multiple facing is done by matching two or more pipe block properties
+        .put(BlockStateProperties.OPEN, Openable.class)
+        .put(BlockStateProperties.HORIZONTAL_AXIS, Orientable.class)
+        .put(BlockStateProperties.AXIS, Orientable.class)
+        .put(BlockStateProperties.POWERED, Powerable.class)
+        .put(BlockStateProperties.RAIL_SHAPE, Rail.class)
+        .put(BlockStateProperties.RAIL_SHAPE_STRAIGHT, Rail.class)
+        .put(BlockStateProperties.ROTATION_16, Rotatable.class)
+        .put(BlockStateProperties.SNOWY, Snowable.class)
+        .put(BlockStateProperties.WATERLOGGED, Waterlogged.class)
+        .buildOrThrow();
+
+    private static final Map<Property<?>, Class<? extends org.bukkit.block.data.BlockData>> MAIN_PROPERTY_TO_DATA = Map.of(
+        BlockStateProperties.PISTON_TYPE, TechnicalPiston.class,
+        BlockStateProperties.STAIRS_SHAPE, Stairs.class
+    );
+
+    public static final Map<Class<? extends Enum<? extends StringRepresentable>>, Class<? extends Enum<?>>> ENUM_BRIDGE = ImmutableMap.<Class<? extends Enum<? extends StringRepresentable>>, Class<? extends Enum<?>>>builder()
+        .put(DoorHingeSide.class, Door.Hinge.class)
+        .put(SlabType.class, Slab.Type.class)
+        .put(StructureMode.class, org.bukkit.block.data.type.StructureBlock.Mode.class)
+        .put(DripstoneThickness.class, PointedDripstone.Thickness.class)
+        .put(WallSide.class, Wall.Height.class)
+        .put(BellAttachType.class, Bell.Attachment.class)
+        .put(NoteBlockInstrument.class, Instrument.class)
+        .put(StairsShape.class, Stairs.Shape.class)
+        .put(Direction.class, BlockFace.class)
+        .put(ComparatorMode.class, Comparator.Mode.class)
+        .put(PistonType.class, TechnicalPiston.Type.class)
+        .put(BedPart.class, Bed.Part.class)
+        .put(Half.class, Bisected.Half.class)
+        .put(AttachFace.class, FaceAttachable.AttachedFace.class)
+        .put(RailShape.class, Rail.Shape.class)
+        .put(SculkSensorPhase.class, SculkSensor.Phase.class)
+        .put(DoubleBlockHalf.class, Bisected.Half.class)
+        .put(Tilt.class, BigDripleaf.Tilt.class)
+        .put(ChestType.class, Chest.Type.class)
+        .put(RedstoneSide.class, RedstoneWire.Connection.class)
+        .put(Direction.Axis.class, Axis.class)
+        .put(BambooLeaves.class, Bamboo.Leaves.class)
+        .put(TrialSpawnerState.class, TrialSpawner.State.class)
+        .put(FrontAndTop.class, Orientation.class)
+        .put(VaultState.class, Vault.State.class)
+        .buildOrThrow();
+
+    public static @Nullable Class<? extends org.bukkit.block.data.BlockData> getBestSuitedApiClass(Class<?> block) {
+        if (!MAPPING.containsKey(block)) {
+            return null;
+        }
+
+        return getBestSuitedApiClass(MAPPING.get(block));
+    }
+
+    public static @Nullable Class<? extends org.bukkit.block.data.BlockData> getBestSuitedApiClass(BlockData data) {
+        if (data.api() != null) {
+            return data.api();
+        }
+
+        int pipeProps = 0;
+        Set<Class<? extends org.bukkit.block.data.BlockData>> extensions = new LinkedHashSet<>();
+        for (Property<?> property : data.properties()) {
+            if (MAIN_PROPERTY_TO_DATA.containsKey(property)) {
+                return MAIN_PROPERTY_TO_DATA.get(property);
+            }
+
+            if (NAME_TO_DATA.containsKey(property.getName())) {
+                extensions.add(NAME_TO_DATA.get(property.getName()));
+                continue;
+            }
+
+            if (PROPERTY_TO_DATA.containsKey(property)) {
+                extensions.add(PROPERTY_TO_DATA.get(property));
+                continue;
+            }
+
+            if (PipeBlock.PROPERTY_BY_DIRECTION.containsValue(property)) {
+                pipeProps++;
+            }
+        }
+
+        if (!extensions.isEmpty()) {
+            if (isExactly(extensions, Switch.class)) {
+                return Switch.class;
+            }
+            if (isExactly(extensions, RedstoneRail.class)) {
+                return RedstoneRail.class;
+            }
+
+            return extensions.iterator().next();
+        }
+
+        for (Property<?> property : data.complexPropertyFields().values()) {
+            if (PipeBlock.PROPERTY_BY_DIRECTION.containsValue(property)) {
+                pipeProps++;
+            }
+        }
+
+        if (pipeProps >= 2) {
+            return MultipleFacing.class;
+        }
+        return null;
+    }
+
+    private static boolean isExactly(Set<Class<? extends org.bukkit.block.data.BlockData>> extensions, Class<? extends org.bukkit.block.data.BlockData> globClass) {
+        return extensions.equals(ClassHelper.getAllInterfaces(globClass, org.bukkit.block.data.BlockData.class, new HashSet<>()));
+    }
+
+    private static String formatApiName(Class<?> specialBlock) {
+        String apiName = specialBlock.getSimpleName();
+        if (!BLOCK_SUFFIX_INTENDED.contains(specialBlock)) {
+            return apiName.substring(0, apiName.length() - "Block".length());
+        }
+        return apiName;
+    }
+
+    private static @Nullable Field fetchPipeFieldMap(Class<?> block) {
+        Field field = null;
+        Class<?> searchClass = block;
+        do {
+            try {
+                field = searchClass.getDeclaredField(PIPE_FIELD_NAME);
+            } catch (NoSuchFieldException ignored) {
+            }
+            searchClass = searchClass.getSuperclass();
+        } while (field == null && searchClass != Block.class);
+
+        if (field == null) {
+            return null;
+        }
+
+        if (!ClassHelper.isStaticConstant(field, 0)) {
+            return null;
+        }
+
+        if (Map.class.isAssignableFrom(field.getType()) && field.getGenericType() instanceof ParameterizedType complexType) {
+            Type[] args = complexType.getActualTypeArguments();
+            if (args.length == 2 && args[0] == Direction.class && args[1] == BooleanProperty.class) {
+                if (field.trySetAccessible()) {
+                    try {
+                        List<BooleanProperty> properties = new ArrayList<>(((Map<Direction, BooleanProperty>) field.get(null)).values());
+                        int originalSize = properties.size();
+                        properties.retainAll(PipeBlock.PROPERTY_BY_DIRECTION.values());
+                        if (properties.size() != originalSize) {
+                            return null;
+                        }
+                    } catch (ReflectiveOperationException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+                return field;
+            }
+        }
+        return null;
+    }
+
+    private static boolean handleComplexType(Field field, BiConsumer<Field, Property<?>> complexCallback) throws IllegalAccessException {
+        if (field.getType().isArray() && Property.class.isAssignableFrom(field.getType().getComponentType())) {
+            if (!field.trySetAccessible()) {
+                return true;
+            }
+
+            for (Property<?> property : (Property<?>[]) field.get(null)) {
+                complexCallback.accept(field, property);
+            }
+            return true;
+        }
+        if (Iterable.class.isAssignableFrom(field.getType()) && field.getGenericType() instanceof ParameterizedType complexType) {
+            Type[] args = complexType.getActualTypeArguments();
+            if (args.length == 1 && Property.class.isAssignableFrom(ClassHelper.eraseType(args[0]))) {
+                if (!field.trySetAccessible()) {
+                    return true;
+                }
+
+                for (Property<?> property : (Iterable<Property<?>>) field.get(null)) {
+                    complexCallback.accept(field, property);
+                }
+            }
+            return true;
+        }
+        if (Map.class.isAssignableFrom(field.getType()) && field.getGenericType() instanceof ParameterizedType complexType) {
+            if (!field.trySetAccessible()) {
+                return true;
+            }
+
+            Type[] args = complexType.getActualTypeArguments();
+            if (args.length == 2 && Property.class.isAssignableFrom(ClassHelper.eraseType(args[1]))) {
+                for (Property<?> property : ((Map<?, Property<?>>) field.get(null)).values()) {
+                    complexCallback.accept(field, property);
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static void fetchProperties(Class<?> block, BiConsumer<Field, Property<?>> simpleCallback, @Nullable BiConsumer<Field, Property<?>> complexCallback) {
+        try {
+            for (Field field : block.getDeclaredFields()) {
+                if (ClassHelper.isStaticConstant(field, 0)) {
+                    if (complexCallback != null && handleComplexType(field, complexCallback)) {
+                        continue;
+                    }
+
+                    if (!Property.class.isAssignableFrom(field.getType())) {
+                        continue;
+                    }
+
+                    if (field.trySetAccessible()) {
+                        Property<?> property = ((Property<?>) field.get(null));
+                        simpleCallback.accept(field, property);
+                    }
+                }
+            }
+        } catch (ReflectiveOperationException ex) {
+            throw new RuntimeException(ex);
+        }
+
+        if (block.isInterface()) {
+            return;
+        }
+
+        // look deeper
+        if (block.getSuperclass() != null && block.getSuperclass() != Block.class) {
+            fetchProperties(block.getSuperclass(), simpleCallback, complexCallback);
+        }
+        for (Class<?> ext : block.getInterfaces()) {
+            fetchProperties(ext, simpleCallback, complexCallback);
+        }
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/ClassHelper.java b/paper-generator/src/main/java/io/papermc/generator/utils/ClassHelper.java
new file mode 100644
index 0000000000..51e3df843e
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/ClassHelper.java
@@ -0,0 +1,72 @@
+package io.papermc.generator.utils;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+import java.util.Set;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+@NullMarked
+public final class ClassHelper {
+
+    public static Set<Class<?>> getAllInterfaces(Class<?> clazz, Class<?> ignored, Set<Class<?>> interfaces) {
+        Class<?>[] classes = clazz.getInterfaces();
+        interfaces.addAll(Arrays.asList(classes));
+        for (Class<?> farClass : classes) {
+            if (farClass == ignored) {
+                continue;
+            }
+            getAllInterfaces(farClass, ignored, interfaces);
+        }
+        interfaces.remove(ignored);
+        return interfaces;
+    }
+
+    public static @Nullable Type getNestedTypeParameter(Type type, @Nullable Class<?>... classes) {
+        for (Class<?> clazz : classes) {
+            if (!(type instanceof ParameterizedType complexType)) {
+                return null;
+            }
+
+            Type[] types = complexType.getActualTypeArguments();
+            if (types.length != 1) {
+                return null;
+            }
+
+            if (clazz == null || eraseType(types[0]) == clazz) {
+                type = types[0];
+            }
+        }
+
+        return type;
+    }
+
+    public static Class<?> eraseType(Type type) {
+        if (type instanceof Class<?> clazz) {
+            return clazz;
+        }
+        if (type instanceof ParameterizedType complexType) {
+            return eraseType(complexType.getRawType());
+        }
+        throw new UnsupportedOperationException("Don't know how to turn " + type + " into its erased type!");
+    }
+
+    public static boolean isStaticConstant(Field field, int extraFlags) {
+        int flags = extraFlags | Modifier.STATIC | Modifier.FINAL;
+        return (field.getModifiers() & flags) == flags;
+    }
+
+    public static <T> @Nullable Class<? extends T> classOr(String className, @Nullable Class<? extends T> defaultClass) {
+        try {
+            return (Class<? extends T>) Class.forName(className);
+        } catch (ClassNotFoundException ignored) {
+            return defaultClass;
+        }
+    }
+
+    private ClassHelper() {
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/CommonVariable.java b/paper-generator/src/main/java/io/papermc/generator/utils/CommonVariable.java
new file mode 100644
index 0000000000..55ea8c742f
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/CommonVariable.java
@@ -0,0 +1,10 @@
+package io.papermc.generator.utils;
+
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class CommonVariable {
+
+    public static final String INDEX = "index";
+    public static final String MAP_ENTRY = "entry";
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/Formatting.java b/paper-generator/src/main/java/io/papermc/generator/utils/Formatting.java
new file mode 100644
index 0000000000..e571a785f2
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/Formatting.java
@@ -0,0 +1,111 @@
+package io.papermc.generator.utils;
+
+import java.util.Optional;
+import org.apache.commons.lang3.math.NumberUtils;
+import java.util.Comparator;
+import java.util.Locale;
+import java.util.OptionalInt;
+import java.util.function.Function;
+import java.util.regex.Pattern;
+import java.util.stream.IntStream;
+import net.minecraft.core.Registry;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.resources.ResourceKey;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class Formatting {
+
+    private static final Pattern ILLEGAL_FIELD_CHARACTERS = Pattern.compile("[.-/]");
+
+    public static String formatKeyAsField(String path) {
+        return ILLEGAL_FIELD_CHARACTERS.matcher(path.toUpperCase(Locale.ENGLISH)).replaceAll("_");
+    }
+
+    public static String formatTagFieldPrefix(String name, ResourceKey<? extends Registry<?>> registryKey) {
+        if (registryKey == Registries.BLOCK) {
+            return "";
+        }
+        if (registryKey == Registries.GAME_EVENT) {
+            return "GAME_EVENT_"; // Paper doesn't follow the format (should be GAME_EVENTS_) (pre 1.21)
+        }
+        return name.toUpperCase(Locale.ENGLISH) + "_";
+    }
+
+    public static Optional<String> formatTagKey(String tagDir, String resourcePath) {
+        int tagsIndex = resourcePath.indexOf(tagDir);
+        int dotIndex = resourcePath.lastIndexOf('.');
+        if (tagsIndex == -1 || dotIndex == -1) {
+            return Optional.empty();
+        }
+        return Optional.of(resourcePath.substring(tagsIndex + tagDir.length() + 1, dotIndex)); // namespace/tags/registry_key/[tag_key].json
+    }
+
+    public static String quoted(String value) {
+        return "\"" + value + "\"";
+    }
+
+    public static String asCode(Enum<?> enumValue) {
+        return enumValue.getClass().getSimpleName() + "." + enumValue.name();
+    }
+
+    public static String[] asCode(int... values) {
+        return IntStream.of(values).mapToObj(Integer::toString).toArray(String[]::new);
+    }
+
+    public static String stripWordOfCamelCaseName(String name, String word, boolean onlyOnce) {
+        String newName = name;
+        int startIndex = 0;
+        while (true) {
+            int baseIndex = newName.indexOf(word, startIndex);
+            if (baseIndex == -1) {
+                return newName;
+            }
+
+            if ((baseIndex > 0 && !Character.isLowerCase(newName.charAt(baseIndex - 1))) ||
+                (baseIndex + word.length() < newName.length() && !Character.isUpperCase(newName.charAt(baseIndex + word.length())))) {
+                startIndex = baseIndex + word.length();
+                continue;
+            }
+
+            newName = newName.substring(0, baseIndex) + newName.substring(baseIndex + word.length());
+            startIndex = baseIndex;
+            if (onlyOnce) {
+                break;
+            }
+        }
+        return newName;
+    }
+
+    public static final Comparator<String> ALPHABETIC_KEY_ORDER = alphabeticKeyOrder(path -> path);
+
+    public static <T> Comparator<T> alphabeticKeyOrder(Function<T, String> mapper) {
+        return (o1, o2) -> {
+            String path1 = mapper.apply(o1);
+            String path2 = mapper.apply(o2);
+
+            OptionalInt trailingInt1 = tryParseTrailingInt(path1);
+            OptionalInt trailingInt2 = tryParseTrailingInt(path2);
+
+            if (trailingInt1.isPresent() && trailingInt2.isPresent()) {
+                return Integer.compare(trailingInt1.getAsInt(), trailingInt2.getAsInt());
+            }
+
+            return path1.compareTo(path2);
+        };
+    }
+
+    private static OptionalInt tryParseTrailingInt(String path) {
+        int delimiterIndex = path.lastIndexOf('_');
+        if (delimiterIndex != -1) {
+            String score = path.substring(delimiterIndex + 1);
+            if (NumberUtils.isDigits(score)) {
+                return OptionalInt.of(Integer.parseInt(score));
+            }
+        }
+        return OptionalInt.empty();
+    }
+
+    private Formatting() {
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/Javadocs.java b/paper-generator/src/main/java/io/papermc/generator/utils/Javadocs.java
new file mode 100644
index 0000000000..4c52440793
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/Javadocs.java
@@ -0,0 +1,44 @@
+package io.papermc.generator.utils;
+
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public final class Javadocs {
+
+    public static String getVersionDependentClassHeader(String objectIdentifier, String headerIdentifier) {
+        return """
+            Vanilla %s for %s.
+            
+            @apiNote The fields provided here are a direct representation of
+            what is available from the vanilla game source. They may be
+            changed (including removals) on any Minecraft version
+            bump, so cross-version compatibility is not provided on the
+            same level as it is on most of the other API.
+            """.formatted(objectIdentifier, headerIdentifier);
+    }
+
+    public static String getVersionDependentField(String headerIdentifier) {
+        return """
+            %s
+            
+            @apiNote This field is version-dependant and may be removed in future Minecraft versions
+            """.formatted(headerIdentifier);
+    }
+
+    public static final String CREATE_TYPED_KEY_JAVADOC = """
+        Creates a typed key for {@link $T} in the registry {@code $L}.
+        
+        @param key the value's key in the registry
+        @return a new typed key
+        """;
+
+    public static final String CREATED_TAG_KEY_JAVADOC = """
+        Creates a tag key for {@link $T} in the registry {@code $L}.
+        
+        @param key the tag key's key
+        @return a new tag key
+        """;
+
+    private Javadocs() {
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/NamingManager.java b/paper-generator/src/main/java/io/papermc/generator/utils/NamingManager.java
new file mode 100644
index 0000000000..d5ca379ae7
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/NamingManager.java
@@ -0,0 +1,141 @@
+package io.papermc.generator.utils;
+
+import com.google.common.base.CaseFormat;
+import java.util.Optional;
+import java.util.function.Predicate;
+import javax.lang.model.SourceVersion;
+import org.jetbrains.annotations.Contract;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+@NullMarked
+public class NamingManager {
+
+    private final @Nullable AccessKeyword accessKeyword;
+    private final String baseName;
+    private final String lowerCamelName, upperCamelName;
+
+    public NamingManager(NamingManager.@Nullable AccessKeyword accessKeyword, CaseFormat format, String baseName) {
+        this.accessKeyword = accessKeyword; // this is a little bit too restrictive for extra data hmm
+        this.baseName = baseName;
+        this.upperCamelName = format.to(CaseFormat.UPPER_CAMEL, baseName);
+        this.lowerCamelName = format.to(CaseFormat.LOWER_CAMEL, baseName);
+    }
+
+    public String getVariableName() {
+        return this.lowerCamelName;
+    }
+
+    public String getMethodBaseName() {
+        return this.upperCamelName;
+    }
+
+    public NameWrapper getMethodNameWrapper() {
+        return NameWrapper.wrap("get", this.upperCamelName);
+    }
+
+    public NameWrapper getVariableNameWrapper() {
+        return NameWrapper.wrap("", this.lowerCamelName);
+    }
+
+    public NameWrapper getterName(Predicate<String> keywordPredicate) {
+        return accessName(keywordPredicate, AccessKeyword::get, "get");
+    }
+
+    public NameWrapper setterName(Predicate<String> keywordPredicate) {
+        return accessName(keywordPredicate, AccessKeyword::set, "set");
+    }
+
+    public String simpleGetterName(Predicate<String> keywordPredicate) {
+        return getterName(keywordPredicate).concat();
+    }
+
+    public String simpleSetterName(Predicate<String> keywordPredicate) {
+        return setterName(keywordPredicate).concat();
+    }
+
+    private NameWrapper accessName(Predicate<String> keywordPredicate, KeywordFetcher keywordFetcher, String fallbackKeyword) {
+        final String name;
+        String accessKeyword;
+        if (keywordPredicate.test(this.baseName)) {
+            accessKeyword = Optional.ofNullable(this.accessKeyword).flatMap(keywordFetcher::fetch).orElse(fallbackKeyword);
+            name = this.upperCamelName;
+        } else {
+            accessKeyword = "";
+            name = this.lowerCamelName;
+        }
+        return NameWrapper.wrap(accessKeyword, name);
+    }
+
+    public String paramName(Class<?> type) {
+        final String paramName;
+        if (type.isPrimitive()) {
+            paramName = this.lowerCamelName;
+        } else {
+            paramName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, type.getSimpleName());
+        }
+        return ensureValidName(paramName);
+    }
+
+    public static String ensureValidName(String name) {
+        if (!SourceVersion.isIdentifier(name) || SourceVersion.isKeyword(name)) {
+            return "_" + name;
+        }
+        return name;
+    }
+
+    public static class NameWrapper {
+
+        private final String keyword;
+        private final String name;
+        private String preValue = "", postValue = "";
+
+        private NameWrapper(String keyword, String name) {
+            this.keyword = keyword;
+            this.name = name;
+        }
+
+        public static NameWrapper wrap(String keyword, String name) {
+            return new NameWrapper(keyword, name);
+        }
+
+        @Contract(value = "_ -> this", mutates = "this")
+        public NameWrapper pre(String value) {
+            this.preValue = value;
+            return this;
+        }
+
+        @Contract(value = "_ -> this", mutates = "this")
+        public NameWrapper post(String value) {
+            this.postValue = value;
+            return this;
+        }
+
+        public String concat() {
+            String finalName = this.keyword + this.preValue + this.name + this.postValue;
+            this.preValue = this.postValue = ""; // reset
+            return ensureValidName(finalName);
+        }
+    }
+
+    @FunctionalInterface
+    private interface KeywordFetcher {
+
+        Optional<String> fetch(AccessKeyword accessKeyword);
+    }
+
+    public static AccessKeyword keywordGet(String keyword) {
+        return new AccessKeyword(Optional.of(keyword), Optional.empty());
+    }
+
+    public static AccessKeyword keywordSet(String keyword) {
+        return new AccessKeyword(Optional.empty(), Optional.of(keyword));
+    }
+
+    public static AccessKeyword keywordGetSet(String getter, String setter) {
+        return new AccessKeyword(Optional.of(getter), Optional.of(setter));
+    }
+
+    public record AccessKeyword(Optional<String> get, Optional<String> set) {
+    }
+}
diff --git a/paper-api-generator/src/main/java/io/papermc/generator/utils/CollectingContext.java b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/CollectingContext.java
similarity index 51%
rename from paper-api-generator/src/main/java/io/papermc/generator/utils/CollectingContext.java
rename to paper-generator/src/main/java/io/papermc/generator/utils/experimental/CollectingContext.java
index c2fbaa2a05..c360dc6faf 100644
--- a/paper-api-generator/src/main/java/io/papermc/generator/utils/CollectingContext.java
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/CollectingContext.java
@@ -1,4 +1,4 @@
-package io.papermc.generator.utils;
+package io.papermc.generator.utils.experimental;
 
 import com.mojang.serialization.Lifecycle;
 import io.papermc.generator.Main;
@@ -8,21 +8,20 @@ import net.minecraft.core.HolderGetter;
 import net.minecraft.core.Registry;
 import net.minecraft.data.worldgen.BootstrapContext;
 import net.minecraft.resources.ResourceKey;
-import org.checkerframework.checker.nullness.qual.NonNull;
-import org.checkerframework.framework.qual.DefaultQualifier;
+import org.jspecify.annotations.NullMarked;
 
-@DefaultQualifier(NonNull.class)
+@NullMarked
 public record CollectingContext<T>(Set<ResourceKey<T>> registered,
                                    Registry<T> registry) implements BootstrapContext<T> {
 
     @Override
-    public Holder.Reference<T> register(final ResourceKey<T> resourceKey, final @NonNull T t, final Lifecycle lifecycle) {
-        this.registered.add(resourceKey);
-        return Holder.Reference.createStandAlone(this.registry, resourceKey);
+    public Holder.Reference<T> register(ResourceKey<T> key, T value, Lifecycle lifecycle) {
+        this.registered.add(key);
+        return Holder.Reference.createStandAlone(this.registry, key);
     }
 
     @Override
-    public <S> HolderGetter<S> lookup(final ResourceKey<? extends Registry<? extends S>> resourceKey) {
-        return Main.REGISTRY_ACCESS.lookupOrThrow(resourceKey);
+    public <S> HolderGetter<S> lookup(ResourceKey<? extends Registry<? extends S>> key) {
+        return Main.REGISTRY_ACCESS.lookupOrThrow(key);
     }
 }
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/experimental/ExperimentalCollector.java b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/ExperimentalCollector.java
new file mode 100644
index 0000000000..5e715d0383
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/ExperimentalCollector.java
@@ -0,0 +1,132 @@
+package io.papermc.generator.utils.experimental;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
+import com.mojang.logging.LogUtils;
+import io.papermc.generator.Main;
+import io.papermc.generator.utils.Formatting;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.BiConsumer;
+import java.util.stream.Collectors;
+import net.minecraft.core.Registry;
+import net.minecraft.core.RegistryAccess;
+import net.minecraft.core.RegistrySetBuilder;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.data.registries.TradeRebalanceRegistries;
+import net.minecraft.data.registries.VanillaRegistries;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.server.packs.PackResources;
+import net.minecraft.server.packs.PackType;
+import net.minecraft.server.packs.repository.BuiltInPackSource;
+import net.minecraft.server.packs.resources.MultiPackResourceManager;
+import net.minecraft.tags.TagKey;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+import org.slf4j.Logger;
+
+@NullMarked
+public final class ExperimentalCollector {
+
+    private static final Logger LOGGER = LogUtils.getLogger();
+
+    private static final Map<ResourceKey<? extends Registry<?>>, RegistrySetBuilder.RegistryBootstrap<?>> VANILLA_REGISTRY_ENTRIES = VanillaRegistries.BUILDER.entries.stream()
+        .collect(Collectors.toMap(RegistrySetBuilder.RegistryStub::key, RegistrySetBuilder.RegistryStub::bootstrap));
+
+    private static final Map<RegistrySetBuilder, SingleFlagHolder> EXPERIMENTAL_REGISTRY_FLAGS = Map.of(
+        // Update for Experimental API
+        TradeRebalanceRegistries.BUILDER, FlagHolders.TRADE_REBALANCE
+    );
+
+    private static final Multimap<ResourceKey<? extends Registry<?>>, Map.Entry<SingleFlagHolder, RegistrySetBuilder.RegistryBootstrap<?>>> EXPERIMENTAL_REGISTRY_ENTRIES;
+    static {
+        EXPERIMENTAL_REGISTRY_ENTRIES = HashMultimap.create();
+        for (Map.Entry<RegistrySetBuilder, SingleFlagHolder> entry : EXPERIMENTAL_REGISTRY_FLAGS.entrySet()) {
+            for (RegistrySetBuilder.RegistryStub<?> stub : entry.getKey().entries) {
+                EXPERIMENTAL_REGISTRY_ENTRIES.put(stub.key(), Map.entry(entry.getValue(), stub.bootstrap()));
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> Map<ResourceKey<T>, SingleFlagHolder> collectDataDrivenElementIds(Registry<T> registry) {
+        Collection<Map.Entry<SingleFlagHolder, RegistrySetBuilder.RegistryBootstrap<?>>> experimentalEntries = EXPERIMENTAL_REGISTRY_ENTRIES.get(registry.key());
+        if (experimentalEntries.isEmpty()) {
+            return Collections.emptyMap();
+        }
+
+        Map<ResourceKey<T>, SingleFlagHolder> result = new IdentityHashMap<>();
+        for (Map.Entry<SingleFlagHolder, RegistrySetBuilder.RegistryBootstrap<?>> experimentalEntry : experimentalEntries) {
+            RegistrySetBuilder.RegistryBootstrap<T> experimentalBootstrap = (RegistrySetBuilder.RegistryBootstrap<T>) experimentalEntry.getValue();
+            Set<ResourceKey<T>> experimental = Collections.newSetFromMap(new IdentityHashMap<>());
+            CollectingContext<T> experimentalCollector = new CollectingContext<>(experimental, registry);
+            experimentalBootstrap.run(experimentalCollector);
+            result.putAll(experimental.stream().collect(Collectors.toMap(key -> key, key -> experimentalEntry.getKey())));
+        }
+
+        RegistrySetBuilder.@Nullable RegistryBootstrap<T> vanillaBootstrap = (RegistrySetBuilder.RegistryBootstrap<T>) VANILLA_REGISTRY_ENTRIES.get(registry.key());
+        if (vanillaBootstrap != null) {
+            Set<ResourceKey<T>> vanilla = Collections.newSetFromMap(new IdentityHashMap<>());
+            CollectingContext<T> vanillaCollector = new CollectingContext<>(vanilla, registry);
+            vanillaBootstrap.run(vanillaCollector);
+            result.keySet().removeAll(vanilla);
+        }
+        return result;
+    }
+
+    // collect all the tags by grabbing the json from the data-packs
+    // another (probably) way is to hook into the data generator like the typed keys generator
+    public static Map<TagKey<?>, String> collectTags(MultiPackResourceManager resourceManager) {
+        Map<TagKey<?>, String> result = new IdentityHashMap<>();
+
+        // collect all vanilla tags
+        Multimap<ResourceKey<? extends Registry<?>>, String> vanillaTags = HashMultimap.create();
+        PackResources vanillaPack = resourceManager.listPacks()
+            .filter(packResources -> packResources.packId().equals(BuiltInPackSource.VANILLA_ID))
+            .findFirst()
+            .orElseThrow();
+        collectTagsFromPack(vanillaPack, (entry, path) -> vanillaTags.put(entry.key(), path));
+
+        // then distinct with other data-pack tags to know for sure newly created tags and so experimental one
+        resourceManager.listPacks().forEach(pack -> {
+            String packId = pack.packId();
+            if (packId.equals(BuiltInPackSource.VANILLA_ID)) return;
+
+            collectTagsFromPack(pack, (entry, path) -> {
+                if (vanillaTags.get(entry.key()).contains(path)) {
+                    return;
+                }
+
+                result.put(entry.value().listTagIds()
+                    .filter(tagKey -> tagKey.location().getPath().equals(path))
+                    .findFirst()
+                    .orElseThrow(), packId);
+            });
+        });
+        return Collections.unmodifiableMap(result);
+    }
+
+    private static void collectTagsFromPack(PackResources pack, BiConsumer<RegistryAccess.RegistryEntry<?>, String> output) {
+        Set<String> namespaces = pack.getNamespaces(PackType.SERVER_DATA);
+
+        for (String namespace : namespaces) {
+            Main.REGISTRY_ACCESS.registries().forEach(entry -> {
+                // this is probably expensive but can't find another way around and data-pack loader has similar logic
+                // the issue is that registry key can have parent/key but tag key can also have parent/key so parsing become a mess
+                // without having at least one of the two values
+                String tagDir = Registries.tagsDirPath(entry.key());
+                pack.listResources(PackType.SERVER_DATA, namespace, tagDir, (id, supplier) -> {
+                    Formatting.formatTagKey(tagDir, id.getPath()).ifPresentOrElse(path -> output.accept(entry, path), () -> {
+                        LOGGER.warn("Unable to parse the path: {}/{}/{}.json in the data-pack {} into a tag key", namespace, tagDir, id.getPath(), pack.packId());
+                    });
+                });
+            });
+        }
+    }
+
+    private ExperimentalCollector() {
+    }
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/experimental/FlagHolder.java b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/FlagHolder.java
new file mode 100644
index 0000000000..a6c9ad76f0
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/FlagHolder.java
@@ -0,0 +1,16 @@
+package io.papermc.generator.utils.experimental;
+
+import net.minecraft.world.flag.FeatureFlag;
+import net.minecraft.world.flag.FeatureFlagSet;
+import net.minecraft.world.flag.FeatureFlags;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public interface FlagHolder {
+
+    default FeatureFlagSet flagSet() {
+        return FeatureFlags.REGISTRY.subset(this.flag());
+    }
+
+    FeatureFlag flag();
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/experimental/FlagHolders.java b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/FlagHolders.java
new file mode 100644
index 0000000000..1472ebb594
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/FlagHolders.java
@@ -0,0 +1,24 @@
+package io.papermc.generator.utils.experimental;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+import net.minecraft.Util;
+import net.minecraft.world.flag.FeatureFlag;
+import net.minecraft.world.flag.FeatureFlags;
+import org.bukkit.MinecraftExperimental;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class FlagHolders {
+
+    public static final SingleFlagHolder TRADE_REBALANCE = SingleFlagHolder.fromValue(FeatureFlags.TRADE_REBALANCE);
+    public static final SingleFlagHolder REDSTONE_EXPERIMENTS = SingleFlagHolder.fromValue(FeatureFlags.REDSTONE_EXPERIMENTS);
+    public static final SingleFlagHolder MINECART_IMPROVEMENTS = SingleFlagHolder.fromValue(FeatureFlags.MINECART_IMPROVEMENTS);
+
+    static final Map<FeatureFlag, MinecraftExperimental.Requires> ANNOTATION_EQUIVALENT = Util.make(new HashMap<SingleFlagHolder, MinecraftExperimental.Requires>(), map -> {
+        map.put(TRADE_REBALANCE, MinecraftExperimental.Requires.TRADE_REBALANCE);
+        map.put(REDSTONE_EXPERIMENTS, MinecraftExperimental.Requires.REDSTONE_EXPERIMENTS);
+        map.put(MINECART_IMPROVEMENTS, MinecraftExperimental.Requires.MINECART_IMPROVEMENTS);
+    }).entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey().flag(), Map.Entry::getValue));
+}
diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/experimental/SingleFlagHolder.java b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/SingleFlagHolder.java
new file mode 100644
index 0000000000..497805310f
--- /dev/null
+++ b/paper-generator/src/main/java/io/papermc/generator/utils/experimental/SingleFlagHolder.java
@@ -0,0 +1,49 @@
+package io.papermc.generator.utils.experimental;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.HashBiMap;
+import java.util.HashMap;
+import java.util.Map;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.flag.FeatureFlag;
+import net.minecraft.world.flag.FeatureFlagSet;
+import net.minecraft.world.flag.FeatureFlags;
+import org.bukkit.MinecraftExperimental;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public record SingleFlagHolder(FeatureFlag flag) implements FlagHolder { // todo support multiple flags?
+
+    private static final Map<String, FeatureFlag> FEATURE_FLAG_CACHE = new HashMap<>();
+    private static final Map<FeatureFlag, ResourceLocation> FEATURE_FLAG_NAME = HashBiMap.create(FeatureFlags.REGISTRY.names).inverse();
+
+    static SingleFlagHolder fromValue(FeatureFlag flag) {
+        return new SingleFlagHolder(flag);
+    }
+
+    public static SingleFlagHolder fromSet(FeatureFlagSet standaloneSet) {
+        Preconditions.checkArgument(Long.bitCount(standaloneSet.mask) == 1, "Flag set size must be equals to 1.");
+
+        for (FeatureFlag flag : FeatureFlags.REGISTRY.names.values()) {
+            if (standaloneSet.contains(flag)) {
+                return fromValue(flag);
+            }
+        }
+
+        throw new IllegalStateException();
+    }
+
+    public static SingleFlagHolder fromName(String name) {
+        return fromValue(FEATURE_FLAG_CACHE.computeIfAbsent(name, key -> {
+            return FeatureFlags.REGISTRY.names.get(ResourceLocation.withDefaultNamespace(key));
+        }));
+    }
+
+    public MinecraftExperimental.Requires asAnnotationMember() {
+        MinecraftExperimental.Requires annotationMember = FlagHolders.ANNOTATION_EQUIVALENT.get(this.flag);
+        if (annotationMember == null) {
+            throw new UnsupportedOperationException("Don't know that feature flag: " + FEATURE_FLAG_NAME.get(this.flag));
+        }
+        return annotationMember;
+    }
+}
diff --git a/paper-generator/src/test/java/io/papermc/generator/BlockStatePropertyTest.java b/paper-generator/src/test/java/io/papermc/generator/BlockStatePropertyTest.java
new file mode 100644
index 0000000000..d0c6c2cfa2
--- /dev/null
+++ b/paper-generator/src/test/java/io/papermc/generator/BlockStatePropertyTest.java
@@ -0,0 +1,74 @@
+package io.papermc.generator;
+
+import io.papermc.generator.utils.BlockStateMapping;
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import io.papermc.generator.utils.ClassHelper;
+import net.minecraft.SharedConstants;
+import net.minecraft.server.Bootstrap;
+import net.minecraft.world.level.block.ChiseledBookShelfBlock;
+import net.minecraft.world.level.block.MossyCarpetBlock;
+import net.minecraft.world.level.block.PipeBlock;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+public class BlockStatePropertyTest {
+
+    private static Set<Class<? extends Comparable<?>>> ENUM_PROPERTY_VALUES;
+
+    @BeforeAll
+    public static void getAllProperties() {
+        // bootstrap
+        SharedConstants.tryDetectVersion();
+        Bootstrap.bootStrap();
+        Bootstrap.validate();
+
+        // get all properties
+        Set<Class<? extends Comparable<?>>> enumPropertyValues = Collections.newSetFromMap(new IdentityHashMap<>());
+        try {
+            for (Field field : BlockStateProperties.class.getDeclaredFields()) {
+                if (ClassHelper.isStaticConstant(field, Modifier.PUBLIC)) {
+                    if (!EnumProperty.class.isAssignableFrom(field.getType())) {
+                        continue;
+                    }
+
+                    enumPropertyValues.add(((EnumProperty<?>) field.get(null)).getValueClass());
+                }
+            }
+            ENUM_PROPERTY_VALUES = Collections.unmodifiableSet(enumPropertyValues);
+        } catch (ReflectiveOperationException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Test
+    public void testReferences() throws NoSuchFieldException, IllegalAccessException {
+        // if renamed should change DataPropertyWriter#FIELD_TO_BASE_NAME/FIELD_TO_BASE_NAME_SPECIFICS
+        MethodHandles.Lookup lookup = MethodHandles.lookup();
+        lookup.findStaticVarHandle(ChiseledBookShelfBlock.class, "SLOT_OCCUPIED_PROPERTIES", List.class);
+        lookup.findStaticVarHandle(PipeBlock.class, "PROPERTY_BY_DIRECTION", Map.class);
+        MethodHandles.privateLookupIn(MossyCarpetBlock.class, lookup).findStaticVarHandle(MossyCarpetBlock.class, "PROPERTY_BY_DIRECTION", Map.class);
+    }
+
+    @Test
+    public void testBridge() {
+        Set<String> missingApiEquivalents = new HashSet<>();
+        for (Class<? extends Comparable<?>> value : ENUM_PROPERTY_VALUES) {
+            if (!BlockStateMapping.ENUM_BRIDGE.containsKey(value)) {
+                missingApiEquivalents.add(value.getCanonicalName());
+            }
+        }
+
+        Assertions.assertTrue(missingApiEquivalents.isEmpty(), () -> "Missing some api equivalent in the block state mapping enum bridge (BlockStateMapping#ENUM_BRIDGE) : " + String.join(", ", missingApiEquivalents));
+    }
+}
diff --git a/paper-api-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java b/paper-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java
similarity index 74%
rename from paper-api-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java
rename to paper-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java
index 9bc9f6b400..56052d6b58 100644
--- a/paper-api-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java
+++ b/paper-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java
@@ -3,21 +3,21 @@ package io.papermc.generator;
 import io.github.classgraph.ClassGraph;
 import io.github.classgraph.ScanResult;
 import io.papermc.generator.types.goal.MobGoalNames;
+import java.util.ArrayList;
+import java.util.List;
 import net.minecraft.world.entity.Entity;
 import net.minecraft.world.entity.Mob;
 import org.junit.jupiter.api.Test;
-import java.util.ArrayList;
-import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class MobGoalConverterTest {
 
     @Test
     public void testBukkitMap() {
         final List<Class<Mob>> classes;
-        try (ScanResult scanResult = new ClassGraph().enableAllInfo().whitelistPackages(Entity.class.getPackageName()).scan()) {
+        try (ScanResult scanResult = new ClassGraph().enableClassInfo().whitelistPackages(Entity.class.getPackageName()).scan()) {
             classes = scanResult.getSubclasses(Mob.class.getName()).loadClasses(Mob.class);
         }
 
@@ -30,8 +30,6 @@ public class MobGoalConverterTest {
             }
         }
 
-        if (!missingClasses.isEmpty()) {
-            fail("Missing some entity classes in the bukkit map: " + String.join(", ", missingClasses));
-        }
+        assertTrue(missingClasses.isEmpty(), () -> "Missing some entity classes in the bukkit map: " + String.join(", ", missingClasses));
     }
 }
diff --git a/paper-generator/src/test/java/io/papermc/generator/RegistryMigrationTest.java b/paper-generator/src/test/java/io/papermc/generator/RegistryMigrationTest.java
new file mode 100644
index 0000000000..61a2648438
--- /dev/null
+++ b/paper-generator/src/test/java/io/papermc/generator/RegistryMigrationTest.java
@@ -0,0 +1,50 @@
+package io.papermc.generator;
+
+import io.papermc.generator.registry.RegistryEntries;
+import io.papermc.generator.registry.RegistryEntry;
+import java.util.HashSet;
+import java.util.Set;
+import net.minecraft.SharedConstants;
+import net.minecraft.core.Registry;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.server.Bootstrap;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+public class RegistryMigrationTest {
+
+    @BeforeAll
+    public static void setup() {
+        SharedConstants.tryDetectVersion();
+        Bootstrap.bootStrap();
+        Bootstrap.validate();
+    }
+
+    @Test
+    public void testBuiltInToDataDriven() {
+        Set<String> migratedRegistries = new HashSet<>();
+        for (RegistryEntry<?> entry : RegistryEntries.BUILT_IN) {
+            ResourceKey<? extends Registry<?>> key = entry.registryKey();
+            if (!BuiltInRegistries.REGISTRY.containsKey(key.location())) {
+                migratedRegistries.add(key.toString());
+            }
+        }
+
+        Assertions.assertTrue(migratedRegistries.isEmpty(), () -> "Some registries have become data-driven: %s".formatted(String.join(", ", migratedRegistries)));
+    }
+
+    @Test
+    public void testDataDrivenToBuiltIn() { // shouldn't really happen but just in case
+        Set<String> migratedRegistries = new HashSet<>();
+        for (RegistryEntry<?> entry : RegistryEntries.DATA_DRIVEN) {
+            ResourceKey<? extends Registry<?>> key = entry.registryKey();
+            if (BuiltInRegistries.REGISTRY.containsKey(key.location())) {
+                migratedRegistries.add(key.toString());
+            }
+        }
+
+        Assertions.assertTrue(migratedRegistries.isEmpty(), () -> "Some registries have become built-in: %s".formatted(String.join(", ", migratedRegistries)));
+    }
+}
diff --git a/paper-api-generator/wideners.at b/paper-generator/wideners.at
similarity index 52%
rename from paper-api-generator/wideners.at
rename to paper-generator/wideners.at
index 6c8ce1529e..9e582e37be 100644
--- a/paper-api-generator/wideners.at
+++ b/paper-generator/wideners.at
@@ -1,6 +1,10 @@
+public net/minecraft/world/level/material/MapColor MATERIAL_COLORS
+public net/minecraft/world/level/block/state/properties/IntegerProperty min
+
 # for auto-marking experimental stuff
 public net/minecraft/core/RegistrySetBuilder entries
 public net/minecraft/core/RegistrySetBuilder$RegistryStub
 public net/minecraft/data/registries/VanillaRegistries BUILDER
-public net/minecraft/data/registries/WinterDropRegistries BUILDER
 public net/minecraft/data/registries/TradeRebalanceRegistries BUILDER
+public net/minecraft/world/flag/FeatureFlagRegistry names
+public net/minecraft/world/flag/FeatureFlagSet mask
diff --git a/paper-server/build.gradle.kts b/paper-server/build.gradle.kts
index b3a223e152..3adf26d487 100644
--- a/paper-server/build.gradle.kts
+++ b/paper-server/build.gradle.kts
@@ -1,10 +1,14 @@
 import io.papermc.paperweight.attribute.DevBundleOutput
 import io.papermc.paperweight.util.*
+import io.papermc.paperweight.util.data.FileEntry
+import paper.libs.com.google.gson.annotations.SerializedName
 import java.time.Instant
+import kotlin.io.path.readText
 
 plugins {
     `java-library`
     `maven-publish`
+    idea
     id("io.papermc.paperweight.core")
 }
 
@@ -46,6 +50,30 @@ tasks.generateDevelopmentBundle {
     )
 }
 
+data class PackVersion(
+    val data: Double,
+    val resource: Double
+)
+
+data class Version(
+    @SerializedName("pack_version")
+    val packVersion: PackVersion
+)
+
+tasks.processResources {
+    val packVersion: Provider<Int> = tasks.extractFromBundler.flatMap { it.serverJar }.map {
+        it.path.openZip().use { fs ->
+            return@map gson.fromJson(fs.getPath(FileEntry.VERSION_JSON).readText(), Version::class.java).packVersion.data.toInt()
+        }
+    }
+    inputs.property("version", packVersion)
+    filesMatching("data/minecraft/datapacks/paper/pack.mcmeta") {
+        expand(mapOf(
+            "version" to packVersion.get()
+        ))
+    }
+}
+
 abstract class Services {
     @get:Inject
     abstract val softwareComponentFactory: SoftwareComponentFactory
@@ -107,6 +135,10 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) {
 }
 val alsoShade: Configuration by configurations.creating
 
+val runtimeConfiguration by configurations.consumable("runtimeConfiguration") {
+    attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
+}
+
 // Configure mockito agent that is needed in newer java versions
 val mockitoAgent = configurations.register("mockitoAgent")
 abstract class MockitoAgentProvider : CommandLineArgumentProvider {
@@ -125,6 +157,7 @@ dependencies {
     implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21
     implementation("net.minecrell:terminalconsoleappender:1.3.0")
     implementation("net.kyori:adventure-text-serializer-ansi:4.18.0") // Keep in sync with adventureVersion from Paper-API build file
+    runtimeConfiguration(sourceSets.main.map { it.runtimeClasspath })
 
     /*
       Required to add the missing Log4j2Plugins.dat file from log4j-core
@@ -213,13 +246,13 @@ tasks.compileTestJava {
     options.compilerArgs.add("-parameters")
 }
 
-val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks.ScanJarForBadCalls::class) {
+val scanJarForBadCalls by tasks.registering(io.papermc.paperweight.tasks.ScanJarForBadCalls::class) {
     badAnnotations.add("Lio/papermc/paper/annotation/DoNotUse;")
     jarToScan.set(tasks.jar.flatMap { it.archiveFile })
     classpath.from(configurations.compileClasspath)
 }
 tasks.check {
-    dependsOn(scanJar)
+    dependsOn(scanJarForBadCalls)
 }
 
 // Use TCA for console improvements
@@ -250,6 +283,32 @@ tasks.test {
     jvmArgumentProviders.add(provider)
 }
 
+val generatedDir: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath()
+idea {
+    module {
+        generatedSourceDirs.add(generatedDir.toFile())
+    }
+}
+sourceSets {
+    main {
+        java {
+            srcDir(generatedDir)
+        }
+    }
+}
+
+if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
+    val scanJarForOldGeneratedCode by tasks.registering(io.papermc.paperweight.tasks.ScanJarForOldGeneratedCode::class) {
+        mcVersion.set(providers.gradleProperty("mcVersion"))
+        annotation.set("Lio/papermc/paper/generated/GeneratedFrom;")
+        jarToScan.set(tasks.jar.flatMap { it.archiveFile })
+        classpath.from(configurations.compileClasspath)
+    }
+    tasks.check {
+        dependsOn(scanJarForOldGeneratedCode)
+    }
+}
+
 fun TaskContainer.registerRunTask(
     name: String,
     block: JavaExec.() -> Unit
diff --git a/paper-server/patches/sources/net/minecraft/world/entity/ai/goal/Goal.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/ai/goal/Goal.java.patch
index 8760a911ad..e64289b685 100644
--- a/paper-server/patches/sources/net/minecraft/world/entity/ai/goal/Goal.java.patch
+++ b/paper-server/patches/sources/net/minecraft/world/entity/ai/goal/Goal.java.patch
@@ -23,13 +23,13 @@
      }
  
 +    // Paper start - Mob goal api
-+    private com.destroystokyo.paper.entity.ai.PaperVanillaGoal<?> vanillaGoal;
-+    public <T extends org.bukkit.entity.Mob> com.destroystokyo.paper.entity.ai.Goal<T> asPaperVanillaGoal() {
-+        if (this.vanillaGoal == null) {
-+            this.vanillaGoal = new com.destroystokyo.paper.entity.ai.PaperVanillaGoal<>(this);
++    private com.destroystokyo.paper.entity.ai.PaperGoal<?> paperGoal;
++    public <T extends org.bukkit.entity.Mob> com.destroystokyo.paper.entity.ai.Goal<T> asPaperGoal() {
++        if (this.paperGoal == null) {
++            this.paperGoal = new com.destroystokyo.paper.entity.ai.PaperGoal<>(this);
 +        }
 +        //noinspection unchecked
-+        return (com.destroystokyo.paper.entity.ai.Goal<T>) this.vanillaGoal;
++        return (com.destroystokyo.paper.entity.ai.Goal<T>) this.paperGoal;
 +    }
 +    // Paper end - Mob goal api
 +
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAmethystCluster.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAmethystCluster.java
new file mode 100644
index 0000000000..831c41b3ab
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAmethystCluster.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.AmethystClusterBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.AmethystCluster;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftAmethystCluster extends CraftBlockData implements AmethystCluster {
+    private static final EnumProperty<Direction> FACING = AmethystClusterBlock.FACING;
+
+    private static final BooleanProperty WATERLOGGED = AmethystClusterBlock.WATERLOGGED;
+
+    public CraftAmethystCluster(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAnvil.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAnvil.java
new file mode 100644
index 0000000000..e2c1b6bbb2
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAnvil.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.AnvilBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftAnvil extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = AnvilBlock.FACING;
+
+    public CraftAnvil(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAttachedStem.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAttachedStem.java
new file mode 100644
index 0000000000..b6b30b3d4e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftAttachedStem.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.AttachedStemBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftAttachedStem extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = AttachedStemBlock.FACING;
+
+    public CraftAttachedStem(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBambooStalk.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBambooStalk.java
new file mode 100644
index 0000000000..1031dd696d
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBambooStalk.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.BambooStalkBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BambooLeaves;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Bamboo;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBambooStalk extends CraftBlockData implements Bamboo {
+    private static final IntegerProperty AGE = BambooStalkBlock.AGE;
+
+    private static final EnumProperty<BambooLeaves> LEAVES = BambooStalkBlock.LEAVES;
+
+    private static final IntegerProperty STAGE = BambooStalkBlock.STAGE;
+
+    public CraftBambooStalk(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+
+    @Override
+    public Bamboo.Leaves getLeaves() {
+        return this.get(LEAVES, Bamboo.Leaves.class);
+    }
+
+    @Override
+    public void setLeaves(final Bamboo.Leaves leaves) {
+        Preconditions.checkArgument(leaves != null, "leaves cannot be null!");
+        this.set(LEAVES, leaves);
+    }
+
+    @Override
+    public int getStage() {
+        return this.get(STAGE);
+    }
+
+    @Override
+    public void setStage(final int stage) {
+        this.set(STAGE, stage);
+    }
+
+    @Override
+    public int getMaximumStage() {
+        return STAGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBanner.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBanner.java
new file mode 100644
index 0000000000..f07ba5234e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBanner.java
@@ -0,0 +1,35 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.BannerBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.RotationSegment;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Rotatable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+import org.bukkit.util.Vector;
+
+@GeneratedFrom("1.21.4")
+public class CraftBanner extends CraftBlockData implements Rotatable {
+    private static final IntegerProperty ROTATION = BannerBlock.ROTATION;
+
+    public CraftBanner(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getRotation() {
+        return CraftBlockData.ROTATION_CYCLE[this.get(ROTATION)];
+    }
+
+    @Override
+    public void setRotation(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace != BlockFace.SELF && blockFace.getModY() == 0, "Invalid face, only horizontal face are allowed for this property!");
+        Vector dir = blockFace.getDirection();
+        float angle = (float) -Math.toDegrees(Math.atan2(dir.getX(), dir.getZ()));
+        this.set(ROTATION, RotationSegment.convertToSegment(angle));
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBarrel.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBarrel.java
new file mode 100644
index 0000000000..2fc5700748
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBarrel.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.BarrelBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Barrel;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBarrel extends CraftBlockData implements Barrel {
+    private static final EnumProperty<Direction> FACING = BarrelBlock.FACING;
+
+    private static final BooleanProperty OPEN = BarrelBlock.OPEN;
+
+    public CraftBarrel(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isOpen() {
+        return this.get(OPEN);
+    }
+
+    @Override
+    public void setOpen(final boolean open) {
+        this.set(OPEN, open);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBarrier.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBarrier.java
new file mode 100644
index 0000000000..5e98c3c2d6
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBarrier.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.BarrierBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBarrier extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = BarrierBlock.WATERLOGGED;
+
+    public CraftBarrier(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralFan.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralFan.java
new file mode 100644
index 0000000000..80a323967e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralFan.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.BaseCoralFanBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBaseCoralFan extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = BaseCoralFanBlock.WATERLOGGED;
+
+    public CraftBaseCoralFan(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralPlant.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralPlant.java
new file mode 100644
index 0000000000..280375a289
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralPlant.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.BaseCoralPlantBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBaseCoralPlant extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = BaseCoralPlantBlock.WATERLOGGED;
+
+    public CraftBaseCoralPlant(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralWallFan.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralWallFan.java
new file mode 100644
index 0000000000..ff28922760
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBaseCoralWallFan.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.BaseCoralWallFanBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.CoralWallFan;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBaseCoralWallFan extends CraftBlockData implements CoralWallFan {
+    private static final EnumProperty<Direction> FACING = BaseCoralWallFanBlock.FACING;
+
+    private static final BooleanProperty WATERLOGGED = BaseCoralWallFanBlock.WATERLOGGED;
+
+    public CraftBaseCoralWallFan(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBed.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
new file mode 100644
index 0000000000..049322cce5
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.BedBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BedPart;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Bed;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBed extends CraftBlockData implements Bed {
+    private static final EnumProperty<Direction> FACING = BedBlock.FACING;
+
+    private static final BooleanProperty OCCUPIED = BedBlock.OCCUPIED;
+
+    private static final EnumProperty<BedPart> PART = BedBlock.PART;
+
+    public CraftBed(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isOccupied() {
+        return this.get(OCCUPIED);
+    }
+
+    @Override
+    public void setOccupied(final boolean occupied) {
+        this.set(OCCUPIED, occupied);
+    }
+
+    @Override
+    public Bed.Part getPart() {
+        return this.get(PART, Bed.Part.class);
+    }
+
+    @Override
+    public void setPart(final Bed.Part part) {
+        Preconditions.checkArgument(part != null, "part cannot be null!");
+        this.set(PART, part);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBeehive.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBeehive.java
new file mode 100644
index 0000000000..994cff12f3
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBeehive.java
@@ -0,0 +1,56 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.BeehiveBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Beehive;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBeehive extends CraftBlockData implements Beehive {
+    private static final EnumProperty<Direction> FACING = BeehiveBlock.FACING;
+
+    private static final IntegerProperty HONEY_LEVEL = BeehiveBlock.HONEY_LEVEL;
+
+    public CraftBeehive(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public int getHoneyLevel() {
+        return this.get(HONEY_LEVEL);
+    }
+
+    @Override
+    public void setHoneyLevel(final int honeyLevel) {
+        this.set(HONEY_LEVEL, honeyLevel);
+    }
+
+    @Override
+    public int getMaximumHoneyLevel() {
+        return HONEY_LEVEL.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBeetroot.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBeetroot.java
new file mode 100644
index 0000000000..58f4cc5f89
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBeetroot.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.BeetrootBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBeetroot extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = BeetrootBlock.AGE;
+
+    public CraftBeetroot(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBell.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBell.java
new file mode 100644
index 0000000000..416207e094
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBell.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.BellBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BellAttachType;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Bell;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBell extends CraftBlockData implements Bell {
+    private static final EnumProperty<BellAttachType> ATTACHMENT = BellBlock.ATTACHMENT;
+
+    private static final EnumProperty<Direction> FACING = BellBlock.FACING;
+
+    private static final BooleanProperty POWERED = BellBlock.POWERED;
+
+    public CraftBell(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Bell.Attachment getAttachment() {
+        return this.get(ATTACHMENT, Bell.Attachment.class);
+    }
+
+    @Override
+    public void setAttachment(final Bell.Attachment attachment) {
+        Preconditions.checkArgument(attachment != null, "attachment cannot be null!");
+        this.set(ATTACHMENT, attachment);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleaf.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleaf.java
new file mode 100644
index 0000000000..5f12b03389
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleaf.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.BigDripleafBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.BigDripleaf;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBigDripleaf extends CraftBlockData implements BigDripleaf {
+    private static final EnumProperty<Direction> FACING = BigDripleafBlock.FACING;
+
+    private static final EnumProperty<net.minecraft.world.level.block.state.properties.Tilt> TILT = BlockStateProperties.TILT;
+
+    private static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
+
+    public CraftBigDripleaf(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public BigDripleaf.Tilt getTilt() {
+        return this.get(TILT, BigDripleaf.Tilt.class);
+    }
+
+    @Override
+    public void setTilt(final BigDripleaf.Tilt tilt) {
+        Preconditions.checkArgument(tilt != null, "tilt cannot be null!");
+        this.set(TILT, tilt);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleafStem.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleafStem.java
new file mode 100644
index 0000000000..3e724f3c77
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleafStem.java
@@ -0,0 +1,52 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.BigDripleafStemBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Dripleaf;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBigDripleafStem extends CraftBlockData implements Dripleaf {
+    private static final EnumProperty<Direction> FACING = BigDripleafStemBlock.FACING;
+
+    private static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
+
+    public CraftBigDripleafStem(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBlastFurnace.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBlastFurnace.java
new file mode 100644
index 0000000000..3c4b042f42
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBlastFurnace.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.BlastFurnaceBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Furnace;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBlastFurnace extends CraftBlockData implements Furnace {
+    private static final EnumProperty<Direction> FACING = BlastFurnaceBlock.FACING;
+
+    private static final BooleanProperty LIT = BlastFurnaceBlock.LIT;
+
+    public CraftBlastFurnace(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBrewingStand.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBrewingStand.java
new file mode 100644
index 0000000000..f62fec5183
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBrewingStand.java
@@ -0,0 +1,45 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.world.level.block.BrewingStandBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.BrewingStand;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBrewingStand extends CraftBlockData implements BrewingStand {
+    private static final BooleanProperty[] HAS_BOTTLE = BrewingStandBlock.HAS_BOTTLE;
+
+    public CraftBrewingStand(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean hasBottle(final int index) {
+        return this.get(HAS_BOTTLE[index]);
+    }
+
+    @Override
+    public void setBottle(final int index, final boolean bottle) {
+        this.set(HAS_BOTTLE[index], bottle);
+    }
+
+    @Override
+    public Set<Integer> getBottles() {
+        ImmutableSet.Builder<Integer> bottles = ImmutableSet.builder();
+        for (int index = 0, len = HAS_BOTTLE.length; index < len; index++) {
+            if (this.get(HAS_BOTTLE[index])) {
+                bottles.add(index);
+            }
+        }
+        return bottles.build();
+    }
+
+    @Override
+    public int getMaximumBottles() {
+        return HAS_BOTTLE.length;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBrushable.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBrushable.java
new file mode 100644
index 0000000000..7b9eb43830
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBrushable.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Brushable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBrushable extends CraftBlockData implements Brushable {
+    private static final IntegerProperty DUSTED = BlockStateProperties.DUSTED;
+
+    public CraftBrushable(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getDusted() {
+        return this.get(DUSTED);
+    }
+
+    @Override
+    public void setDusted(final int dusted) {
+        this.set(DUSTED, dusted);
+    }
+
+    @Override
+    public int getMaximumDusted() {
+        return DUSTED.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBubbleColumn.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBubbleColumn.java
new file mode 100644
index 0000000000..d0af329ea7
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftBubbleColumn.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.BubbleColumnBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.BubbleColumn;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftBubbleColumn extends CraftBlockData implements BubbleColumn {
+    private static final BooleanProperty DRAG_DOWN = BubbleColumnBlock.DRAG_DOWN;
+
+    public CraftBubbleColumn(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isDrag() {
+        return this.get(DRAG_DOWN);
+    }
+
+    @Override
+    public void setDrag(final boolean drag) {
+        this.set(DRAG_DOWN, drag);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftButton.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftButton.java
new file mode 100644
index 0000000000..0123210a4f
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftButton.java
@@ -0,0 +1,66 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.ButtonBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.AttachFace;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Switch;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftButton extends CraftBlockData implements Switch {
+    private static final EnumProperty<AttachFace> FACE = ButtonBlock.FACE;
+
+    private static final EnumProperty<Direction> FACING = ButtonBlock.FACING;
+
+    private static final BooleanProperty POWERED = ButtonBlock.POWERED;
+
+    public CraftButton(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public org.bukkit.block.data.FaceAttachable.AttachedFace getAttachedFace() {
+        return this.get(FACE, org.bukkit.block.data.FaceAttachable.AttachedFace.class);
+    }
+
+    @Override
+    public void setAttachedFace(
+            final org.bukkit.block.data.FaceAttachable.AttachedFace attachedFace) {
+        Preconditions.checkArgument(attachedFace != null, "attachedFace cannot be null!");
+        this.set(FACE, attachedFace);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCactus.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCactus.java
new file mode 100644
index 0000000000..56bccb51af
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCactus.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CactusBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCactus extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = CactusBlock.AGE;
+
+    public CraftCactus(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCake.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCake.java
new file mode 100644
index 0000000000..bccea8fa76
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCake.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CakeBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Cake;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCake extends CraftBlockData implements Cake {
+    private static final IntegerProperty BITES = CakeBlock.BITES;
+
+    public CraftCake(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getBites() {
+        return this.get(BITES);
+    }
+
+    @Override
+    public void setBites(final int bites) {
+        this.set(BITES, bites);
+    }
+
+    @Override
+    public int getMaximumBites() {
+        return BITES.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCalibratedSculkSensor.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCalibratedSculkSensor.java
new file mode 100644
index 0000000000..204cb08638
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCalibratedSculkSensor.java
@@ -0,0 +1,83 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.CalibratedSculkSensorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.SculkSensorPhase;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.CalibratedSculkSensor;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCalibratedSculkSensor extends CraftBlockData implements CalibratedSculkSensor {
+    private static final EnumProperty<Direction> FACING = CalibratedSculkSensorBlock.FACING;
+
+    private static final IntegerProperty POWER = CalibratedSculkSensorBlock.POWER;
+
+    private static final EnumProperty<SculkSensorPhase> PHASE = CalibratedSculkSensorBlock.PHASE;
+
+    private static final BooleanProperty WATERLOGGED = CalibratedSculkSensorBlock.WATERLOGGED;
+
+    public CraftCalibratedSculkSensor(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public int getPower() {
+        return this.get(POWER);
+    }
+
+    @Override
+    public void setPower(final int power) {
+        this.set(POWER, power);
+    }
+
+    @Override
+    public int getMaximumPower() {
+        return POWER.max;
+    }
+
+    @Override
+    public org.bukkit.block.data.type.SculkSensor.Phase getSculkSensorPhase() {
+        return this.get(PHASE, org.bukkit.block.data.type.SculkSensor.Phase.class);
+    }
+
+    @Override
+    public void setSculkSensorPhase(final org.bukkit.block.data.type.SculkSensor.Phase phase) {
+        Preconditions.checkArgument(phase != null, "phase cannot be null!");
+        this.set(PHASE, phase);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCampfire.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCampfire.java
new file mode 100644
index 0000000000..90199950ce
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCampfire.java
@@ -0,0 +1,75 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.CampfireBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Campfire;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCampfire extends CraftBlockData implements Campfire {
+    private static final EnumProperty<Direction> FACING = CampfireBlock.FACING;
+
+    private static final BooleanProperty LIT = CampfireBlock.LIT;
+
+    private static final BooleanProperty SIGNAL_FIRE = CampfireBlock.SIGNAL_FIRE;
+
+    private static final BooleanProperty WATERLOGGED = CampfireBlock.WATERLOGGED;
+
+    public CraftCampfire(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+
+    @Override
+    public boolean isSignalFire() {
+        return this.get(SIGNAL_FIRE);
+    }
+
+    @Override
+    public void setSignalFire(final boolean signalFire) {
+        this.set(SIGNAL_FIRE, signalFire);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
new file mode 100644
index 0000000000..c721f2f336
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
@@ -0,0 +1,62 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CandleBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Candle;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCandle extends CraftBlockData implements Candle {
+    private static final IntegerProperty CANDLES = CandleBlock.CANDLES;
+
+    private static final BooleanProperty LIT = CandleBlock.LIT;
+
+    private static final BooleanProperty WATERLOGGED = CandleBlock.WATERLOGGED;
+
+    public CraftCandle(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getCandles() {
+        return this.get(CANDLES);
+    }
+
+    @Override
+    public void setCandles(final int candles) {
+        this.set(CANDLES, candles);
+    }
+
+    @Override
+    public int getMinimumCandles() {
+        return CANDLES.min;
+    }
+
+    @Override
+    public int getMaximumCandles() {
+        return CANDLES.max;
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCandleCake.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCandleCake.java
new file mode 100644
index 0000000000..72b5084542
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCandleCake.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CandleCakeBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Lightable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCandleCake extends CraftBlockData implements Lightable {
+    private static final BooleanProperty LIT = CandleCakeBlock.LIT;
+
+    public CraftCandleCake(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCarrot.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCarrot.java
new file mode 100644
index 0000000000..c3c220831d
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCarrot.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CarrotBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCarrot extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = CarrotBlock.AGE;
+
+    public CraftCarrot(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCarvedPumpkin.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCarvedPumpkin.java
new file mode 100644
index 0000000000..9481407850
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCarvedPumpkin.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.CarvedPumpkinBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCarvedPumpkin extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = CarvedPumpkinBlock.FACING;
+
+    public CraftCarvedPumpkin(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCaveVines.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCaveVines.java
new file mode 100644
index 0000000000..3ac13dc312
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCaveVines.java
@@ -0,0 +1,45 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CaveVinesBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.CaveVines;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCaveVines extends CraftBlockData implements CaveVines {
+    private static final IntegerProperty AGE = CaveVinesBlock.AGE;
+
+    private static final BooleanProperty BERRIES = CaveVinesBlock.BERRIES;
+
+    public CraftCaveVines(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+
+    @Override
+    public boolean hasBerries() {
+        return this.get(BERRIES);
+    }
+
+    @Override
+    public void setBerries(final boolean berries) {
+        this.set(BERRIES, berries);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCaveVinesPlant.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCaveVinesPlant.java
new file mode 100644
index 0000000000..4e12a4e601
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCaveVinesPlant.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CaveVinesPlantBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.CaveVinesPlant;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCaveVinesPlant extends CraftBlockData implements CaveVinesPlant {
+    private static final BooleanProperty BERRIES = CaveVinesPlantBlock.BERRIES;
+
+    public CraftCaveVinesPlant(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean hasBerries() {
+        return this.get(BERRIES);
+    }
+
+    @Override
+    public void setBerries(final boolean berries) {
+        this.set(BERRIES, berries);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCeilingHangingSign.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCeilingHangingSign.java
new file mode 100644
index 0000000000..b504aef24a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCeilingHangingSign.java
@@ -0,0 +1,60 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CeilingHangingSignBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.RotationSegment;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.HangingSign;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+import org.bukkit.util.Vector;
+
+@GeneratedFrom("1.21.4")
+public class CraftCeilingHangingSign extends CraftBlockData implements HangingSign {
+    private static final BooleanProperty ATTACHED = CeilingHangingSignBlock.ATTACHED;
+
+    private static final IntegerProperty ROTATION = CeilingHangingSignBlock.ROTATION;
+
+    private static final BooleanProperty WATERLOGGED = CeilingHangingSignBlock.WATERLOGGED;
+
+    public CraftCeilingHangingSign(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isAttached() {
+        return this.get(ATTACHED);
+    }
+
+    @Override
+    public void setAttached(final boolean attached) {
+        this.set(ATTACHED, attached);
+    }
+
+    @Override
+    public BlockFace getRotation() {
+        return CraftBlockData.ROTATION_CYCLE[this.get(ROTATION)];
+    }
+
+    @Override
+    public void setRotation(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace != BlockFace.SELF && blockFace.getModY() == 0, "Invalid face, only horizontal face are allowed for this property!");
+        Vector dir = blockFace.getDirection();
+        float angle = (float) -Math.toDegrees(Math.atan2(dir.getX(), dir.getZ()));
+        this.set(ROTATION, RotationSegment.convertToSegment(angle));
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChain.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChain.java
new file mode 100644
index 0000000000..c6f0e6dd7a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChain.java
@@ -0,0 +1,50 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.ChainBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.Axis;
+import org.bukkit.block.data.type.Chain;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftChain extends CraftBlockData implements Chain {
+    private static final EnumProperty<Direction.Axis> AXIS = ChainBlock.AXIS;
+
+    private static final BooleanProperty WATERLOGGED = ChainBlock.WATERLOGGED;
+
+    public CraftChain(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Axis getAxis() {
+        return this.get(AXIS, Axis.class);
+    }
+
+    @Override
+    public void setAxis(final Axis axis) {
+        Preconditions.checkArgument(axis != null, "axis cannot be null!");
+        this.set(AXIS, axis);
+    }
+
+    @Override
+    public Set<Axis> getAxes() {
+        return this.getValues(AXIS, Axis.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChest.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChest.java
new file mode 100644
index 0000000000..7d39da6c17
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChest.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.ChestBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.ChestType;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Chest;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftChest extends CraftBlockData implements Chest {
+    private static final EnumProperty<Direction> FACING = ChestBlock.FACING;
+
+    private static final EnumProperty<ChestType> TYPE = ChestBlock.TYPE;
+
+    private static final BooleanProperty WATERLOGGED = ChestBlock.WATERLOGGED;
+
+    public CraftChest(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public Chest.Type getType() {
+        return this.get(TYPE, Chest.Type.class);
+    }
+
+    @Override
+    public void setType(final Chest.Type type) {
+        Preconditions.checkArgument(type != null, "type cannot be null!");
+        this.set(TYPE, type);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChiseledBookShelf.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChiseledBookShelf.java
new file mode 100644
index 0000000000..45d1c7bc8a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChiseledBookShelf.java
@@ -0,0 +1,70 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.List;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.ChiseledBookShelfBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.ChiseledBookshelf;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftChiseledBookShelf extends CraftBlockData implements ChiseledBookshelf {
+    private static final EnumProperty<Direction> HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING;
+
+    private static final List<BooleanProperty> SLOT_OCCUPIED_PROPERTIES = ChiseledBookShelfBlock.SLOT_OCCUPIED_PROPERTIES;
+
+    public CraftChiseledBookShelf(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(HORIZONTAL_FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(HORIZONTAL_FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(HORIZONTAL_FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isSlotOccupied(final int index) {
+        return this.get(SLOT_OCCUPIED_PROPERTIES.get(index));
+    }
+
+    @Override
+    public void setSlotOccupied(final int index, final boolean slotOccupied) {
+        this.set(SLOT_OCCUPIED_PROPERTIES.get(index), slotOccupied);
+    }
+
+    @Override
+    public Set<Integer> getOccupiedSlots() {
+        ImmutableSet.Builder<Integer> slotOccupieds = ImmutableSet.builder();
+        for (int index = 0, size = SLOT_OCCUPIED_PROPERTIES.size(); index < size; index++) {
+            if (this.get(SLOT_OCCUPIED_PROPERTIES.get(index))) {
+                slotOccupieds.add(index);
+            }
+        }
+        return slotOccupieds.build();
+    }
+
+    @Override
+    public int getMaximumOccupiedSlots() {
+        return SLOT_OCCUPIED_PROPERTIES.size();
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChorusFlower.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChorusFlower.java
new file mode 100644
index 0000000000..244340552a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChorusFlower.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.ChorusFlowerBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftChorusFlower extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = ChorusFlowerBlock.AGE;
+
+    public CraftChorusFlower(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChorusPlant.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChorusPlant.java
new file mode 100644
index 0000000000..3f416ad238
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftChorusPlant.java
@@ -0,0 +1,58 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.ChorusPlantBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.MultipleFacing;
+import org.bukkit.craftbukkit.block.CraftBlock;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftChorusPlant extends CraftBlockData implements MultipleFacing {
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = ChorusPlantBlock.PROPERTY_BY_DIRECTION.entrySet().stream()
+            .collect(Collectors.toMap(entry -> CraftBlock.notchToBlockFace(entry.getKey()), entry -> entry.getValue()));
+
+    public CraftChorusPlant(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCocoa.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCocoa.java
new file mode 100644
index 0000000000..1ed614dc53
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCocoa.java
@@ -0,0 +1,56 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.CocoaBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Cocoa;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCocoa extends CraftBlockData implements Cocoa {
+    private static final IntegerProperty AGE = CocoaBlock.AGE;
+
+    private static final EnumProperty<Direction> FACING = CocoaBlock.FACING;
+
+    public CraftCocoa(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCommandBlock.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCommandBlock.java
new file mode 100644
index 0000000000..61289edc85
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCommandBlock.java
@@ -0,0 +1,50 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.CommandBlock;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCommandBlock extends CraftBlockData implements CommandBlock {
+    private static final BooleanProperty CONDITIONAL = net.minecraft.world.level.block.CommandBlock.CONDITIONAL;
+
+    private static final EnumProperty<Direction> FACING = net.minecraft.world.level.block.CommandBlock.FACING;
+
+    public CraftCommandBlock(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isConditional() {
+        return this.get(CONDITIONAL);
+    }
+
+    @Override
+    public void setConditional(final boolean conditional) {
+        this.set(CONDITIONAL, conditional);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftComparator.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftComparator.java
new file mode 100644
index 0000000000..b6aa094ed7
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftComparator.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.ComparatorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.ComparatorMode;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Comparator;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftComparator extends CraftBlockData implements Comparator {
+    private static final EnumProperty<Direction> FACING = ComparatorBlock.FACING;
+
+    private static final EnumProperty<ComparatorMode> MODE = ComparatorBlock.MODE;
+
+    private static final BooleanProperty POWERED = ComparatorBlock.POWERED;
+
+    public CraftComparator(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public Comparator.Mode getMode() {
+        return this.get(MODE, Comparator.Mode.class);
+    }
+
+    @Override
+    public void setMode(final Comparator.Mode mode) {
+        Preconditions.checkArgument(mode != null, "mode cannot be null!");
+        this.set(MODE, mode);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
new file mode 100644
index 0000000000..8fb91b98d3
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
@@ -0,0 +1,37 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.ComposterBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Levelled;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftComposter extends CraftBlockData implements Levelled {
+    private static final IntegerProperty LEVEL = ComposterBlock.LEVEL;
+
+    public CraftComposter(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getLevel() {
+        return this.get(LEVEL);
+    }
+
+    @Override
+    public void setLevel(final int level) {
+        this.set(LEVEL, level);
+    }
+
+    @Override
+    public int getMinimumLevel() {
+        return LEVEL.min;
+    }
+
+    @Override
+    public int getMaximumLevel() {
+        return LEVEL.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftConduit.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftConduit.java
new file mode 100644
index 0000000000..a09c79ed64
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftConduit.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.ConduitBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftConduit extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = ConduitBlock.WATERLOGGED;
+
+    public CraftConduit(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCopperBulb.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCopperBulb.java
new file mode 100644
index 0000000000..52b835e6f1
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCopperBulb.java
@@ -0,0 +1,39 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CopperBulbBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.CopperBulb;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCopperBulb extends CraftBlockData implements CopperBulb {
+    private static final BooleanProperty LIT = CopperBulbBlock.LIT;
+
+    private static final BooleanProperty POWERED = CopperBulbBlock.POWERED;
+
+    public CraftCopperBulb(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralFan.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralFan.java
new file mode 100644
index 0000000000..7fa5a10845
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralFan.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CoralFanBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCoralFan extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = CoralFanBlock.WATERLOGGED;
+
+    public CraftCoralFan(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralPlant.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralPlant.java
new file mode 100644
index 0000000000..7c4a1f8f24
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralPlant.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CoralPlantBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCoralPlant extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = CoralPlantBlock.WATERLOGGED;
+
+    public CraftCoralPlant(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralWallFan.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralWallFan.java
new file mode 100644
index 0000000000..a35e57703b
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCoralWallFan.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.CoralWallFanBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.CoralWallFan;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCoralWallFan extends CraftBlockData implements CoralWallFan {
+    private static final EnumProperty<Direction> FACING = CoralWallFanBlock.FACING;
+
+    private static final BooleanProperty WATERLOGGED = CoralWallFanBlock.WATERLOGGED;
+
+    public CraftCoralWallFan(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCrafter.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCrafter.java
new file mode 100644
index 0000000000..84489458cd
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCrafter.java
@@ -0,0 +1,56 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.core.FrontAndTop;
+import net.minecraft.world.level.block.CrafterBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.data.type.Crafter;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCrafter extends CraftBlockData implements Crafter {
+    private static final BooleanProperty CRAFTING = CrafterBlock.CRAFTING;
+
+    private static final EnumProperty<FrontAndTop> ORIENTATION = BlockStateProperties.ORIENTATION;
+
+    private static final BooleanProperty TRIGGERED = CrafterBlock.TRIGGERED;
+
+    public CraftCrafter(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isCrafting() {
+        return this.get(CRAFTING);
+    }
+
+    @Override
+    public void setCrafting(final boolean crafting) {
+        this.set(CRAFTING, crafting);
+    }
+
+    @Override
+    public org.bukkit.block.Orientation getOrientation() {
+        return this.get(ORIENTATION, org.bukkit.block.Orientation.class);
+    }
+
+    @Override
+    public void setOrientation(final org.bukkit.block.Orientation orientation) {
+        Preconditions.checkArgument(orientation != null, "orientation cannot be null!");
+        this.set(ORIENTATION, orientation);
+    }
+
+    @Override
+    public boolean isTriggered() {
+        return this.get(TRIGGERED);
+    }
+
+    @Override
+    public void setTriggered(final boolean triggered) {
+        this.set(TRIGGERED, triggered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCreakingHeart.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCreakingHeart.java
new file mode 100644
index 0000000000..36955486d9
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCreakingHeart.java
@@ -0,0 +1,62 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.CreakingHeartBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.Axis;
+import org.bukkit.block.data.type.CreakingHeart;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCreakingHeart extends CraftBlockData implements CreakingHeart {
+    private static final BooleanProperty ACTIVE = CreakingHeartBlock.ACTIVE;
+
+    private static final EnumProperty<Direction.Axis> AXIS = CreakingHeartBlock.AXIS;
+
+    private static final BooleanProperty NATURAL = CreakingHeartBlock.NATURAL;
+
+    public CraftCreakingHeart(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isActive() {
+        return this.get(ACTIVE);
+    }
+
+    @Override
+    public void setActive(final boolean active) {
+        this.set(ACTIVE, active);
+    }
+
+    @Override
+    public Axis getAxis() {
+        return this.get(AXIS, Axis.class);
+    }
+
+    @Override
+    public void setAxis(final Axis axis) {
+        Preconditions.checkArgument(axis != null, "axis cannot be null!");
+        this.set(AXIS, axis);
+    }
+
+    @Override
+    public Set<Axis> getAxes() {
+        return this.getValues(AXIS, Axis.class);
+    }
+
+    @Override
+    public boolean isNatural() {
+        return this.get(NATURAL);
+    }
+
+    @Override
+    public void setNatural(final boolean natural) {
+        this.set(NATURAL, natural);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCrop.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCrop.java
new file mode 100644
index 0000000000..af49c4f671
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftCrop.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.CropBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftCrop extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = CropBlock.AGE;
+
+    public CraftCrop(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDaylightDetector.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDaylightDetector.java
new file mode 100644
index 0000000000..3fd6e3a9e3
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDaylightDetector.java
@@ -0,0 +1,45 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.DaylightDetectorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.DaylightDetector;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftDaylightDetector extends CraftBlockData implements DaylightDetector {
+    private static final BooleanProperty INVERTED = DaylightDetectorBlock.INVERTED;
+
+    private static final IntegerProperty POWER = DaylightDetectorBlock.POWER;
+
+    public CraftDaylightDetector(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isInverted() {
+        return this.get(INVERTED);
+    }
+
+    @Override
+    public void setInverted(final boolean inverted) {
+        this.set(INVERTED, inverted);
+    }
+
+    @Override
+    public int getPower() {
+        return this.get(POWER);
+    }
+
+    @Override
+    public void setPower(final int power) {
+        this.set(POWER, power);
+    }
+
+    @Override
+    public int getMaximumPower() {
+        return POWER.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
new file mode 100644
index 0000000000..91169c404f
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
@@ -0,0 +1,64 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.DecoratedPotBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.DecoratedPot;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftDecoratedPot extends CraftBlockData implements DecoratedPot {
+    private static final BooleanProperty CRACKED = DecoratedPotBlock.CRACKED;
+
+    private static final EnumProperty<Direction> HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING;
+
+    private static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
+
+    public CraftDecoratedPot(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isCracked() {
+        return this.get(CRACKED);
+    }
+
+    @Override
+    public void setCracked(final boolean cracked) {
+        this.set(CRACKED, cracked);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(HORIZONTAL_FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(HORIZONTAL_FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(HORIZONTAL_FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDetectorRail.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDetectorRail.java
new file mode 100644
index 0000000000..207dd7018a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDetectorRail.java
@@ -0,0 +1,62 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.world.level.block.DetectorRailBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.RailShape;
+import org.bukkit.block.data.type.RedstoneRail;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftDetectorRail extends CraftBlockData implements RedstoneRail {
+    private static final BooleanProperty POWERED = DetectorRailBlock.POWERED;
+
+    private static final EnumProperty<RailShape> SHAPE = DetectorRailBlock.SHAPE;
+
+    private static final BooleanProperty WATERLOGGED = DetectorRailBlock.WATERLOGGED;
+
+    public CraftDetectorRail(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public org.bukkit.block.data.Rail.Shape getShape() {
+        return this.get(SHAPE, org.bukkit.block.data.Rail.Shape.class);
+    }
+
+    @Override
+    public void setShape(final org.bukkit.block.data.Rail.Shape shape) {
+        Preconditions.checkArgument(shape != null, "shape cannot be null!");
+        Preconditions.checkArgument(shape != org.bukkit.block.data.Rail.Shape.NORTH_EAST && shape != org.bukkit.block.data.Rail.Shape.NORTH_WEST && shape != org.bukkit.block.data.Rail.Shape.SOUTH_EAST && shape != org.bukkit.block.data.Rail.Shape.SOUTH_WEST, "Invalid rail shape, only straight rail are allowed for this property!");
+        this.set(SHAPE, shape);
+    }
+
+    @Override
+    public Set<org.bukkit.block.data.Rail.Shape> getShapes() {
+        return this.getValues(SHAPE, org.bukkit.block.data.Rail.Shape.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDispenser.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDispenser.java
new file mode 100644
index 0000000000..2432203ee0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDispenser.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.DispenserBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Dispenser;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftDispenser extends CraftBlockData implements Dispenser {
+    private static final EnumProperty<Direction> FACING = DispenserBlock.FACING;
+
+    private static final BooleanProperty TRIGGERED = DispenserBlock.TRIGGERED;
+
+    public CraftDispenser(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isTriggered() {
+        return this.get(TRIGGERED);
+    }
+
+    @Override
+    public void setTriggered(final boolean triggered) {
+        this.set(TRIGGERED, triggered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDoor.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDoor.java
new file mode 100644
index 0000000000..4864583b38
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDoor.java
@@ -0,0 +1,91 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.DoorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.DoorHingeSide;
+import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Door;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftDoor extends CraftBlockData implements Door {
+    private static final EnumProperty<Direction> FACING = DoorBlock.FACING;
+
+    private static final EnumProperty<DoubleBlockHalf> HALF = DoorBlock.HALF;
+
+    private static final EnumProperty<DoorHingeSide> HINGE = DoorBlock.HINGE;
+
+    private static final BooleanProperty OPEN = DoorBlock.OPEN;
+
+    private static final BooleanProperty POWERED = DoorBlock.POWERED;
+
+    public CraftDoor(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public org.bukkit.block.data.Bisected.Half getHalf() {
+        return this.get(HALF, org.bukkit.block.data.Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final org.bukkit.block.data.Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+
+    @Override
+    public Door.Hinge getHinge() {
+        return this.get(HINGE, Door.Hinge.class);
+    }
+
+    @Override
+    public void setHinge(final Door.Hinge hinge) {
+        Preconditions.checkArgument(hinge != null, "hinge cannot be null!");
+        this.set(HINGE, hinge);
+    }
+
+    @Override
+    public boolean isOpen() {
+        return this.get(OPEN);
+    }
+
+    @Override
+    public void setOpen(final boolean open) {
+        this.set(OPEN, open);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDoublePlant.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDoublePlant.java
new file mode 100644
index 0000000000..dc79cdefc4
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDoublePlant.java
@@ -0,0 +1,30 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.DoublePlantBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.data.Bisected;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftDoublePlant extends CraftBlockData implements Bisected {
+    private static final EnumProperty<DoubleBlockHalf> HALF = DoublePlantBlock.HALF;
+
+    public CraftDoublePlant(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Bisected.Half getHalf() {
+        return this.get(HALF, Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDropper.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDropper.java
new file mode 100644
index 0000000000..20ed535fbe
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftDropper.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.DropperBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Dispenser;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftDropper extends CraftBlockData implements Dispenser {
+    private static final EnumProperty<Direction> FACING = DropperBlock.FACING;
+
+    private static final BooleanProperty TRIGGERED = DropperBlock.TRIGGERED;
+
+    public CraftDropper(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isTriggered() {
+        return this.get(TRIGGERED);
+    }
+
+    @Override
+    public void setTriggered(final boolean triggered) {
+        this.set(TRIGGERED, triggered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEndPortalFrame.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEndPortalFrame.java
new file mode 100644
index 0000000000..9adcada07f
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEndPortalFrame.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.EndPortalFrameBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.EndPortalFrame;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftEndPortalFrame extends CraftBlockData implements EndPortalFrame {
+    private static final BooleanProperty HAS_EYE = EndPortalFrameBlock.HAS_EYE;
+
+    private static final EnumProperty<Direction> FACING = EndPortalFrameBlock.FACING;
+
+    public CraftEndPortalFrame(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean hasEye() {
+        return this.get(HAS_EYE);
+    }
+
+    @Override
+    public void setEye(final boolean eye) {
+        this.set(HAS_EYE, eye);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEndRod.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEndRod.java
new file mode 100644
index 0000000000..1fd7c67b3e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEndRod.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.EndRodBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftEndRod extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = EndRodBlock.FACING;
+
+    public CraftEndRod(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEnderChest.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEnderChest.java
new file mode 100644
index 0000000000..4bfcb66901
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftEnderChest.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.EnderChestBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.EnderChest;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftEnderChest extends CraftBlockData implements EnderChest {
+    private static final EnumProperty<Direction> FACING = EnderChestBlock.FACING;
+
+    private static final BooleanProperty WATERLOGGED = EnderChestBlock.WATERLOGGED;
+
+    public CraftEnderChest(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFarm.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFarm.java
new file mode 100644
index 0000000000..a6cdeddfb8
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFarm.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.FarmBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Farmland;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftFarm extends CraftBlockData implements Farmland {
+    private static final IntegerProperty MOISTURE = FarmBlock.MOISTURE;
+
+    public CraftFarm(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getMoisture() {
+        return this.get(MOISTURE);
+    }
+
+    @Override
+    public void setMoisture(final int moisture) {
+        this.set(MOISTURE, moisture);
+    }
+
+    @Override
+    public int getMaximumMoisture() {
+        return MOISTURE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFence.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFence.java
new file mode 100644
index 0000000000..a64b1ba919
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFence.java
@@ -0,0 +1,73 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.FenceBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Fence;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftFence extends CraftBlockData implements Fence {
+    private static final BooleanProperty WATERLOGGED = FenceBlock.WATERLOGGED;
+
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.EAST, FenceBlock.EAST,
+        BlockFace.NORTH, FenceBlock.NORTH,
+        BlockFace.SOUTH, FenceBlock.SOUTH,
+        BlockFace.WEST, FenceBlock.WEST
+    );
+
+    public CraftFence(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFenceGate.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFenceGate.java
new file mode 100644
index 0000000000..141da08ff9
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFenceGate.java
@@ -0,0 +1,75 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.FenceGateBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Gate;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftFenceGate extends CraftBlockData implements Gate {
+    private static final EnumProperty<Direction> FACING = FenceGateBlock.FACING;
+
+    private static final BooleanProperty IN_WALL = FenceGateBlock.IN_WALL;
+
+    private static final BooleanProperty OPEN = FenceGateBlock.OPEN;
+
+    private static final BooleanProperty POWERED = FenceGateBlock.POWERED;
+
+    public CraftFenceGate(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isInWall() {
+        return this.get(IN_WALL);
+    }
+
+    @Override
+    public void setInWall(final boolean inWall) {
+        this.set(IN_WALL, inWall);
+    }
+
+    @Override
+    public boolean isOpen() {
+        return this.get(OPEN);
+    }
+
+    @Override
+    public void setOpen(final boolean open) {
+        this.set(OPEN, open);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFire.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFire.java
new file mode 100644
index 0000000000..5d4dd7ff4d
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFire.java
@@ -0,0 +1,80 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.FireBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Fire;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftFire extends CraftBlockData implements Fire {
+    private static final IntegerProperty AGE = FireBlock.AGE;
+
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.EAST, FireBlock.EAST,
+        BlockFace.NORTH, FireBlock.NORTH,
+        BlockFace.SOUTH, FireBlock.SOUTH,
+        BlockFace.UP, FireBlock.UP,
+        BlockFace.WEST, FireBlock.WEST
+    );
+
+    public CraftFire(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFrostedIce.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFrostedIce.java
new file mode 100644
index 0000000000..2a22da158a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFrostedIce.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.FrostedIceBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftFrostedIce extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = FrostedIceBlock.AGE;
+
+    public CraftFrostedIce(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFurnace.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFurnace.java
new file mode 100644
index 0000000000..03a5810d92
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftFurnace.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.FurnaceBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Furnace;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftFurnace extends CraftBlockData implements Furnace {
+    private static final EnumProperty<Direction> FACING = FurnaceBlock.FACING;
+
+    private static final BooleanProperty LIT = FurnaceBlock.LIT;
+
+    public CraftFurnace(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGlazedTerracotta.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGlazedTerracotta.java
new file mode 100644
index 0000000000..41477f4e76
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGlazedTerracotta.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.GlazedTerracottaBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftGlazedTerracotta extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = GlazedTerracottaBlock.FACING;
+
+    public CraftGlazedTerracotta(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGlowLichen.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGlowLichen.java
new file mode 100644
index 0000000000..6309ca7020
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGlowLichen.java
@@ -0,0 +1,76 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.GlowLichenBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.GlowLichen;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftGlowLichen extends CraftBlockData implements GlowLichen {
+    private static final BooleanProperty WATERLOGGED = GlowLichenBlock.WATERLOGGED;
+
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.DOWN, BlockStateProperties.DOWN,
+        BlockFace.EAST, BlockStateProperties.EAST,
+        BlockFace.NORTH, BlockStateProperties.NORTH,
+        BlockFace.SOUTH, BlockStateProperties.SOUTH,
+        BlockFace.UP, BlockStateProperties.UP,
+        BlockFace.WEST, BlockStateProperties.WEST
+    );
+
+    public CraftGlowLichen(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGrass.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGrass.java
new file mode 100644
index 0000000000..ba074f78e3
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGrass.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.GrassBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Snowable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftGrass extends CraftBlockData implements Snowable {
+    private static final BooleanProperty SNOWY = GrassBlock.SNOWY;
+
+    public CraftGrass(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isSnowy() {
+        return this.get(SNOWY);
+    }
+
+    @Override
+    public void setSnowy(final boolean snowy) {
+        this.set(SNOWY, snowy);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGrindstone.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGrindstone.java
new file mode 100644
index 0000000000..0b6bdc8d6e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftGrindstone.java
@@ -0,0 +1,53 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.GrindstoneBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.AttachFace;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Grindstone;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftGrindstone extends CraftBlockData implements Grindstone {
+    private static final EnumProperty<AttachFace> FACE = GrindstoneBlock.FACE;
+
+    private static final EnumProperty<Direction> FACING = GrindstoneBlock.FACING;
+
+    public CraftGrindstone(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public org.bukkit.block.data.FaceAttachable.AttachedFace getAttachedFace() {
+        return this.get(FACE, org.bukkit.block.data.FaceAttachable.AttachedFace.class);
+    }
+
+    @Override
+    public void setAttachedFace(
+            final org.bukkit.block.data.FaceAttachable.AttachedFace attachedFace) {
+        Preconditions.checkArgument(attachedFace != null, "attachedFace cannot be null!");
+        this.set(FACE, attachedFace);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHangingMoss.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHangingMoss.java
new file mode 100644
index 0000000000..fc46827a7b
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHangingMoss.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.HangingMossBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.HangingMoss;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftHangingMoss extends CraftBlockData implements HangingMoss {
+    private static final BooleanProperty TIP = HangingMossBlock.TIP;
+
+    public CraftHangingMoss(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isTip() {
+        return this.get(TIP);
+    }
+
+    @Override
+    public void setTip(final boolean tip) {
+        this.set(TIP, tip);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHangingRoots.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHangingRoots.java
new file mode 100644
index 0000000000..a8952773a4
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHangingRoots.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftHangingRoots extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
+
+    public CraftHangingRoots(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHay.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHay.java
new file mode 100644
index 0000000000..c9175d9b54
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHay.java
@@ -0,0 +1,37 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.HayBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.Axis;
+import org.bukkit.block.data.Orientable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftHay extends CraftBlockData implements Orientable {
+    private static final EnumProperty<Direction.Axis> AXIS = HayBlock.AXIS;
+
+    public CraftHay(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Axis getAxis() {
+        return this.get(AXIS, Axis.class);
+    }
+
+    @Override
+    public void setAxis(final Axis axis) {
+        Preconditions.checkArgument(axis != null, "axis cannot be null!");
+        this.set(AXIS, axis);
+    }
+
+    @Override
+    public Set<Axis> getAxes() {
+        return this.getValues(AXIS, Axis.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHeavyCore.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHeavyCore.java
new file mode 100644
index 0000000000..a9a3b69c40
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHeavyCore.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.HeavyCoreBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftHeavyCore extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = HeavyCoreBlock.WATERLOGGED;
+
+    public CraftHeavyCore(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHopper.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHopper.java
new file mode 100644
index 0000000000..a334bf2ef5
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHopper.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.HopperBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Hopper;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftHopper extends CraftBlockData implements Hopper {
+    private static final BooleanProperty ENABLED = HopperBlock.ENABLED;
+
+    private static final EnumProperty<Direction> FACING = HopperBlock.FACING;
+
+    public CraftHopper(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return this.get(ENABLED);
+    }
+
+    @Override
+    public void setEnabled(final boolean enabled) {
+        this.set(ENABLED, enabled);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace != BlockFace.UP, "Invalid face, only cartesian face (excluding UP) are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHugeMushroom.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHugeMushroom.java
new file mode 100644
index 0000000000..bf4998ab31
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftHugeMushroom.java
@@ -0,0 +1,63 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.HugeMushroomBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.MultipleFacing;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftHugeMushroom extends CraftBlockData implements MultipleFacing {
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.DOWN, HugeMushroomBlock.DOWN,
+        BlockFace.EAST, HugeMushroomBlock.EAST,
+        BlockFace.NORTH, HugeMushroomBlock.NORTH,
+        BlockFace.SOUTH, HugeMushroomBlock.SOUTH,
+        BlockFace.UP, HugeMushroomBlock.UP,
+        BlockFace.WEST, HugeMushroomBlock.WEST
+    );
+
+    public CraftHugeMushroom(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftInfestedRotatedPillar.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftInfestedRotatedPillar.java
new file mode 100644
index 0000000000..b09bd1c67c
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftInfestedRotatedPillar.java
@@ -0,0 +1,37 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.Axis;
+import org.bukkit.block.data.Orientable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftInfestedRotatedPillar extends CraftBlockData implements Orientable {
+    private static final EnumProperty<Direction.Axis> AXIS = BlockStateProperties.AXIS;
+
+    public CraftInfestedRotatedPillar(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Axis getAxis() {
+        return this.get(AXIS, Axis.class);
+    }
+
+    @Override
+    public void setAxis(final Axis axis) {
+        Preconditions.checkArgument(axis != null, "axis cannot be null!");
+        this.set(AXIS, axis);
+    }
+
+    @Override
+    public Set<Axis> getAxes() {
+        return this.getValues(AXIS, Axis.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftIronBars.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftIronBars.java
new file mode 100644
index 0000000000..2f4d30045e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftIronBars.java
@@ -0,0 +1,73 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.IronBarsBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Fence;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftIronBars extends CraftBlockData implements Fence {
+    private static final BooleanProperty WATERLOGGED = IronBarsBlock.WATERLOGGED;
+
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.EAST, IronBarsBlock.EAST,
+        BlockFace.NORTH, IronBarsBlock.NORTH,
+        BlockFace.SOUTH, IronBarsBlock.SOUTH,
+        BlockFace.WEST, IronBarsBlock.WEST
+    );
+
+    public CraftIronBars(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftJigsaw.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftJigsaw.java
new file mode 100644
index 0000000000..7ca563029f
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftJigsaw.java
@@ -0,0 +1,30 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.core.FrontAndTop;
+import net.minecraft.world.level.block.JigsawBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.data.type.Jigsaw;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftJigsaw extends CraftBlockData implements Jigsaw {
+    private static final EnumProperty<FrontAndTop> ORIENTATION = JigsawBlock.ORIENTATION;
+
+    public CraftJigsaw(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public org.bukkit.block.Orientation getOrientation() {
+        return this.get(ORIENTATION, org.bukkit.block.Orientation.class);
+    }
+
+    @Override
+    public void setOrientation(final org.bukkit.block.Orientation orientation) {
+        Preconditions.checkArgument(orientation != null, "orientation cannot be null!");
+        this.set(ORIENTATION, orientation);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftJukebox.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftJukebox.java
new file mode 100644
index 0000000000..e27dfadb79
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftJukebox.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.JukeboxBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.Jukebox;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftJukebox extends CraftBlockData implements Jukebox {
+    private static final BooleanProperty HAS_RECORD = JukeboxBlock.HAS_RECORD;
+
+    public CraftJukebox(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean hasRecord() {
+        return this.get(HAS_RECORD);
+    }
+
+    @Override
+    public void setHasRecord(final boolean hasRecord) {
+        this.set(HAS_RECORD, hasRecord);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftKelp.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftKelp.java
new file mode 100644
index 0000000000..8cb9493a92
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftKelp.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.KelpBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftKelp extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = KelpBlock.AGE;
+
+    public CraftKelp(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLadder.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLadder.java
new file mode 100644
index 0000000000..6e5f188398
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLadder.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.LadderBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Ladder;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLadder extends CraftBlockData implements Ladder {
+    private static final EnumProperty<Direction> FACING = LadderBlock.FACING;
+
+    private static final BooleanProperty WATERLOGGED = LadderBlock.WATERLOGGED;
+
+    public CraftLadder(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLantern.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLantern.java
new file mode 100644
index 0000000000..7f7da89829
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLantern.java
@@ -0,0 +1,39 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.LanternBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.Lantern;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLantern extends CraftBlockData implements Lantern {
+    private static final BooleanProperty HANGING = LanternBlock.HANGING;
+
+    private static final BooleanProperty WATERLOGGED = LanternBlock.WATERLOGGED;
+
+    public CraftLantern(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isHanging() {
+        return this.get(HANGING);
+    }
+
+    @Override
+    public void setHanging(final boolean hanging) {
+        this.set(HANGING, hanging);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
new file mode 100644
index 0000000000..f85a88d549
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
@@ -0,0 +1,37 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.LayeredCauldronBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Levelled;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLayeredCauldron extends CraftBlockData implements Levelled {
+    private static final IntegerProperty LEVEL = LayeredCauldronBlock.LEVEL;
+
+    public CraftLayeredCauldron(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getLevel() {
+        return this.get(LEVEL);
+    }
+
+    @Override
+    public void setLevel(final int level) {
+        this.set(LEVEL, level);
+    }
+
+    @Override
+    public int getMinimumLevel() {
+        return LEVEL.min;
+    }
+
+    @Override
+    public int getMaximumLevel() {
+        return LEVEL.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
new file mode 100644
index 0000000000..53b4645e77
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
@@ -0,0 +1,62 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.LeavesBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Leaves;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLeaves extends CraftBlockData implements Leaves {
+    private static final IntegerProperty DISTANCE = LeavesBlock.DISTANCE;
+
+    private static final BooleanProperty PERSISTENT = LeavesBlock.PERSISTENT;
+
+    private static final BooleanProperty WATERLOGGED = LeavesBlock.WATERLOGGED;
+
+    public CraftLeaves(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getDistance() {
+        return this.get(DISTANCE);
+    }
+
+    @Override
+    public void setDistance(final int distance) {
+        this.set(DISTANCE, distance);
+    }
+
+    @Override
+    public int getMinimumDistance() {
+        return DISTANCE.min;
+    }
+
+    @Override
+    public int getMaximumDistance() {
+        return DISTANCE.max;
+    }
+
+    @Override
+    public boolean isPersistent() {
+        return this.get(PERSISTENT);
+    }
+
+    @Override
+    public void setPersistent(final boolean persistent) {
+        this.set(PERSISTENT, persistent);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLectern.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLectern.java
new file mode 100644
index 0000000000..354dbed159
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLectern.java
@@ -0,0 +1,63 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.LecternBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Lectern;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLectern extends CraftBlockData implements Lectern {
+    private static final EnumProperty<Direction> FACING = LecternBlock.FACING;
+
+    private static final BooleanProperty HAS_BOOK = LecternBlock.HAS_BOOK;
+
+    private static final BooleanProperty POWERED = LecternBlock.POWERED;
+
+    public CraftLectern(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean hasBook() {
+        return this.get(HAS_BOOK);
+    }
+
+    @Override
+    public void setHasBook(final boolean hasBook) {
+        this.set(HAS_BOOK, hasBook);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLever.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLever.java
new file mode 100644
index 0000000000..6c133aaf61
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLever.java
@@ -0,0 +1,66 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.LeverBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.AttachFace;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Switch;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLever extends CraftBlockData implements Switch {
+    private static final EnumProperty<AttachFace> FACE = LeverBlock.FACE;
+
+    private static final EnumProperty<Direction> FACING = LeverBlock.FACING;
+
+    private static final BooleanProperty POWERED = LeverBlock.POWERED;
+
+    public CraftLever(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public org.bukkit.block.data.FaceAttachable.AttachedFace getAttachedFace() {
+        return this.get(FACE, org.bukkit.block.data.FaceAttachable.AttachedFace.class);
+    }
+
+    @Override
+    public void setAttachedFace(
+            final org.bukkit.block.data.FaceAttachable.AttachedFace attachedFace) {
+        Preconditions.checkArgument(attachedFace != null, "attachedFace cannot be null!");
+        this.set(FACE, attachedFace);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLight.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
new file mode 100644
index 0000000000..cb6c4b10f9
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
@@ -0,0 +1,50 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.LightBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Light;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLight extends CraftBlockData implements Light {
+    private static final IntegerProperty LEVEL = LightBlock.LEVEL;
+
+    private static final BooleanProperty WATERLOGGED = LightBlock.WATERLOGGED;
+
+    public CraftLight(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getLevel() {
+        return this.get(LEVEL);
+    }
+
+    @Override
+    public void setLevel(final int level) {
+        this.set(LEVEL, level);
+    }
+
+    @Override
+    public int getMinimumLevel() {
+        return LEVEL.min;
+    }
+
+    @Override
+    public int getMaximumLevel() {
+        return LEVEL.max;
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLightningRod.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLightningRod.java
new file mode 100644
index 0000000000..30075eb59a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLightningRod.java
@@ -0,0 +1,63 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.LightningRodBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.LightningRod;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLightningRod extends CraftBlockData implements LightningRod {
+    private static final EnumProperty<Direction> FACING = LightningRodBlock.FACING;
+
+    private static final BooleanProperty POWERED = LightningRodBlock.POWERED;
+
+    private static final BooleanProperty WATERLOGGED = LightningRodBlock.WATERLOGGED;
+
+    public CraftLightningRod(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLiquid.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLiquid.java
new file mode 100644
index 0000000000..da8090c1b6
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLiquid.java
@@ -0,0 +1,37 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.LiquidBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Levelled;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLiquid extends CraftBlockData implements Levelled {
+    private static final IntegerProperty LEVEL = LiquidBlock.LEVEL;
+
+    public CraftLiquid(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getLevel() {
+        return this.get(LEVEL);
+    }
+
+    @Override
+    public void setLevel(final int level) {
+        this.set(LEVEL, level);
+    }
+
+    @Override
+    public int getMinimumLevel() {
+        return LEVEL.min;
+    }
+
+    @Override
+    public int getMaximumLevel() {
+        return LEVEL.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLoom.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLoom.java
new file mode 100644
index 0000000000..69fdbc9602
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftLoom.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.LoomBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftLoom extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = LoomBlock.FACING;
+
+    public CraftLoom(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
new file mode 100644
index 0000000000..347893b746
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
@@ -0,0 +1,62 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.MangroveLeavesBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Leaves;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftMangroveLeaves extends CraftBlockData implements Leaves {
+    private static final IntegerProperty DISTANCE = MangroveLeavesBlock.DISTANCE;
+
+    private static final BooleanProperty PERSISTENT = MangroveLeavesBlock.PERSISTENT;
+
+    private static final BooleanProperty WATERLOGGED = MangroveLeavesBlock.WATERLOGGED;
+
+    public CraftMangroveLeaves(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getDistance() {
+        return this.get(DISTANCE);
+    }
+
+    @Override
+    public void setDistance(final int distance) {
+        this.set(DISTANCE, distance);
+    }
+
+    @Override
+    public int getMinimumDistance() {
+        return DISTANCE.min;
+    }
+
+    @Override
+    public int getMaximumDistance() {
+        return DISTANCE.max;
+    }
+
+    @Override
+    public boolean isPersistent() {
+        return this.get(PERSISTENT);
+    }
+
+    @Override
+    public void setPersistent(final boolean persistent) {
+        this.set(PERSISTENT, persistent);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangrovePropagule.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangrovePropagule.java
new file mode 100644
index 0000000000..3ffd6a4a7d
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangrovePropagule.java
@@ -0,0 +1,75 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.MangrovePropaguleBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.MangrovePropagule;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftMangrovePropagule extends CraftBlockData implements MangrovePropagule {
+    private static final IntegerProperty AGE = MangrovePropaguleBlock.AGE;
+
+    private static final BooleanProperty HANGING = MangrovePropaguleBlock.HANGING;
+
+    private static final IntegerProperty STAGE = MangrovePropaguleBlock.STAGE;
+
+    private static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
+
+    public CraftMangrovePropagule(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+
+    @Override
+    public boolean isHanging() {
+        return this.get(HANGING);
+    }
+
+    @Override
+    public void setHanging(final boolean hanging) {
+        this.set(HANGING, hanging);
+    }
+
+    @Override
+    public int getStage() {
+        return this.get(STAGE);
+    }
+
+    @Override
+    public void setStage(final int stage) {
+        this.set(STAGE, stage);
+    }
+
+    @Override
+    public int getMaximumStage() {
+        return STAGE.max;
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangroveRoots.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangroveRoots.java
new file mode 100644
index 0000000000..9c65ec726f
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMangroveRoots.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.MangroveRootsBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftMangroveRoots extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = MangroveRootsBlock.WATERLOGGED;
+
+    public CraftMangroveRoots(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMossyCarpet.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMossyCarpet.java
new file mode 100644
index 0000000000..1ccfb34613
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMossyCarpet.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.MossyCarpetBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.WallSide;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.MossyCarpet;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftMossyCarpet extends CraftBlockData implements MossyCarpet {
+    private static final BooleanProperty BASE = MossyCarpetBlock.BASE;
+
+    private static final Map<BlockFace, EnumProperty<WallSide>> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.NORTH, BlockStateProperties.NORTH_WALL,
+        BlockFace.SOUTH, BlockStateProperties.SOUTH_WALL,
+        BlockFace.WEST, BlockStateProperties.WEST_WALL,
+        BlockFace.EAST, BlockStateProperties.EAST_WALL
+    );
+
+    public CraftMossyCarpet(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isBottom() {
+        return this.get(BASE);
+    }
+
+    @Override
+    public void setBottom(final boolean bottom) {
+        this.set(BASE, bottom);
+    }
+
+    @Override
+    public org.bukkit.block.data.type.Wall.Height getHeight(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        EnumProperty<WallSide> property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property, org.bukkit.block.data.type.Wall.Height.class);
+    }
+
+    @Override
+    public void setHeight(final BlockFace blockFace,
+            final org.bukkit.block.data.type.Wall.Height height) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(height != null, "height cannot be null!");
+        EnumProperty<WallSide> property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, height);
+    }
+
+    public Set<BlockFace> getAllowedHeights() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMovingPiston.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMovingPiston.java
new file mode 100644
index 0000000000..e601fe8b4a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMovingPiston.java
@@ -0,0 +1,52 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.piston.MovingPistonBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.PistonType;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.TechnicalPiston;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftMovingPiston extends CraftBlockData implements TechnicalPiston {
+    private static final EnumProperty<Direction> FACING = MovingPistonBlock.FACING;
+
+    private static final EnumProperty<PistonType> TYPE = MovingPistonBlock.TYPE;
+
+    public CraftMovingPiston(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public TechnicalPiston.Type getType() {
+        return this.get(TYPE, TechnicalPiston.Type.class);
+    }
+
+    @Override
+    public void setType(final TechnicalPiston.Type type) {
+        Preconditions.checkArgument(type != null, "type cannot be null!");
+        this.set(TYPE, type);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMultiface.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMultiface.java
new file mode 100644
index 0000000000..1dc6c3ce42
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMultiface.java
@@ -0,0 +1,76 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.MultifaceBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.ResinClump;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftMultiface extends CraftBlockData implements ResinClump {
+    private static final BooleanProperty WATERLOGGED = MultifaceBlock.WATERLOGGED;
+
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.DOWN, BlockStateProperties.DOWN,
+        BlockFace.EAST, BlockStateProperties.EAST,
+        BlockFace.NORTH, BlockStateProperties.NORTH,
+        BlockFace.SOUTH, BlockStateProperties.SOUTH,
+        BlockFace.UP, BlockStateProperties.UP,
+        BlockFace.WEST, BlockStateProperties.WEST
+    );
+
+    public CraftMultiface(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMycelium.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMycelium.java
new file mode 100644
index 0000000000..ff6b8b483b
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftMycelium.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.MyceliumBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Snowable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftMycelium extends CraftBlockData implements Snowable {
+    private static final BooleanProperty SNOWY = MyceliumBlock.SNOWY;
+
+    public CraftMycelium(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isSnowy() {
+        return this.get(SNOWY);
+    }
+
+    @Override
+    public void setSnowy(final boolean snowy) {
+        this.set(SNOWY, snowy);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNetherPortal.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNetherPortal.java
new file mode 100644
index 0000000000..8a0133e804
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNetherPortal.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.NetherPortalBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.Axis;
+import org.bukkit.block.data.Orientable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftNetherPortal extends CraftBlockData implements Orientable {
+    private static final EnumProperty<Direction.Axis> AXIS = NetherPortalBlock.AXIS;
+
+    public CraftNetherPortal(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Axis getAxis() {
+        return this.get(AXIS, Axis.class);
+    }
+
+    @Override
+    public void setAxis(final Axis axis) {
+        Preconditions.checkArgument(axis != null, "axis cannot be null!");
+        Preconditions.checkArgument(axis == Axis.X || axis == Axis.Z, "Invalid axis, only horizontal axis are allowed for this property!");
+        this.set(AXIS, axis);
+    }
+
+    @Override
+    public Set<Axis> getAxes() {
+        return this.getValues(AXIS, Axis.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNetherWart.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNetherWart.java
new file mode 100644
index 0000000000..f86f2255dd
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNetherWart.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.NetherWartBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftNetherWart extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = NetherWartBlock.AGE;
+
+    public CraftNetherWart(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNoteBlock.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNoteBlock.java
new file mode 100644
index 0000000000..eef2c6abf0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftNoteBlock.java
@@ -0,0 +1,58 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import org.bukkit.Instrument;
+import org.bukkit.Note;
+import org.bukkit.block.data.type.NoteBlock;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftNoteBlock extends CraftBlockData implements NoteBlock {
+    private static final EnumProperty<NoteBlockInstrument> INSTRUMENT = net.minecraft.world.level.block.NoteBlock.INSTRUMENT;
+
+    private static final IntegerProperty NOTE = net.minecraft.world.level.block.NoteBlock.NOTE;
+
+    private static final BooleanProperty POWERED = net.minecraft.world.level.block.NoteBlock.POWERED;
+
+    public CraftNoteBlock(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Instrument getInstrument() {
+        return this.get(INSTRUMENT, Instrument.class);
+    }
+
+    @Override
+    public void setInstrument(final Instrument instrument) {
+        Preconditions.checkArgument(instrument != null, "instrument cannot be null!");
+        this.set(INSTRUMENT, instrument);
+    }
+
+    @Override
+    public Note getNote() {
+        return new Note(this.get(NOTE));
+    }
+
+    @Override
+    public void setNote(final Note note) {
+        Preconditions.checkArgument(note != null, "note cannot be null!");
+        this.set(NOTE, (int) note.getId());
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftObserver.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftObserver.java
new file mode 100644
index 0000000000..ea4abed7c0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftObserver.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.ObserverBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Observer;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftObserver extends CraftBlockData implements Observer {
+    private static final EnumProperty<Direction> FACING = ObserverBlock.FACING;
+
+    private static final BooleanProperty POWERED = ObserverBlock.POWERED;
+
+    public CraftObserver(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftParticleLeaves.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftParticleLeaves.java
new file mode 100644
index 0000000000..1916f88c09
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftParticleLeaves.java
@@ -0,0 +1,62 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.ParticleLeavesBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Leaves;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftParticleLeaves extends CraftBlockData implements Leaves {
+    private static final IntegerProperty DISTANCE = ParticleLeavesBlock.DISTANCE;
+
+    private static final BooleanProperty PERSISTENT = ParticleLeavesBlock.PERSISTENT;
+
+    private static final BooleanProperty WATERLOGGED = ParticleLeavesBlock.WATERLOGGED;
+
+    public CraftParticleLeaves(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getDistance() {
+        return this.get(DISTANCE);
+    }
+
+    @Override
+    public void setDistance(final int distance) {
+        this.set(DISTANCE, distance);
+    }
+
+    @Override
+    public int getMinimumDistance() {
+        return DISTANCE.min;
+    }
+
+    @Override
+    public int getMaximumDistance() {
+        return DISTANCE.max;
+    }
+
+    @Override
+    public boolean isPersistent() {
+        return this.get(PERSISTENT);
+    }
+
+    @Override
+    public void setPersistent(final boolean persistent) {
+        this.set(PERSISTENT, persistent);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPiglinWallSkull.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPiglinWallSkull.java
new file mode 100644
index 0000000000..b00af0b955
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPiglinWallSkull.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.PiglinWallSkullBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.WallSkull;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPiglinWallSkull extends CraftBlockData implements WallSkull {
+    private static final EnumProperty<Direction> FACING = PiglinWallSkullBlock.FACING;
+
+    private static final BooleanProperty POWERED = PiglinWallSkullBlock.POWERED;
+
+    public CraftPiglinWallSkull(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
new file mode 100644
index 0000000000..fbb11e55e5
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
@@ -0,0 +1,61 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.PinkPetalsBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.PinkPetals;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPinkPetals extends CraftBlockData implements PinkPetals {
+    private static final EnumProperty<Direction> FACING = PinkPetalsBlock.FACING;
+
+    private static final IntegerProperty AMOUNT = PinkPetalsBlock.AMOUNT;
+
+    public CraftPinkPetals(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public int getFlowerAmount() {
+        return this.get(AMOUNT);
+    }
+
+    @Override
+    public void setFlowerAmount(final int flowerAmount) {
+        this.set(AMOUNT, flowerAmount);
+    }
+
+    @Override
+    public int getMinimumFlowerAmount() {
+        return AMOUNT.min;
+    }
+
+    @Override
+    public int getMaximumFlowerAmount() {
+        return AMOUNT.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPistonBase.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPistonBase.java
new file mode 100644
index 0000000000..921e5dfd2c
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPistonBase.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.piston.PistonBaseBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Piston;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPistonBase extends CraftBlockData implements Piston {
+    private static final BooleanProperty EXTENDED = PistonBaseBlock.EXTENDED;
+
+    private static final EnumProperty<Direction> FACING = PistonBaseBlock.FACING;
+
+    public CraftPistonBase(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isExtended() {
+        return this.get(EXTENDED);
+    }
+
+    @Override
+    public void setExtended(final boolean extended) {
+        this.set(EXTENDED, extended);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPistonHead.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPistonHead.java
new file mode 100644
index 0000000000..488859ba96
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPistonHead.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.piston.PistonHeadBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.PistonType;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.PistonHead;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPistonHead extends CraftBlockData implements PistonHead {
+    private static final EnumProperty<Direction> FACING = PistonHeadBlock.FACING;
+
+    private static final BooleanProperty SHORT = PistonHeadBlock.SHORT;
+
+    private static final EnumProperty<PistonType> TYPE = PistonHeadBlock.TYPE;
+
+    public CraftPistonHead(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isShort() {
+        return this.get(SHORT);
+    }
+
+    @Override
+    public void setShort(final boolean _short) {
+        this.set(SHORT, _short);
+    }
+
+    @Override
+    public org.bukkit.block.data.type.TechnicalPiston.Type getType() {
+        return this.get(TYPE, org.bukkit.block.data.type.TechnicalPiston.Type.class);
+    }
+
+    @Override
+    public void setType(final org.bukkit.block.data.type.TechnicalPiston.Type type) {
+        Preconditions.checkArgument(type != null, "type cannot be null!");
+        this.set(TYPE, type);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPitcherCrop.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPitcherCrop.java
new file mode 100644
index 0000000000..8a93c6c5cc
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPitcherCrop.java
@@ -0,0 +1,48 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.PitcherCropBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.PitcherCrop;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPitcherCrop extends CraftBlockData implements PitcherCrop {
+    private static final IntegerProperty AGE = PitcherCropBlock.AGE;
+
+    private static final EnumProperty<DoubleBlockHalf> HALF = PitcherCropBlock.HALF;
+
+    public CraftPitcherCrop(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+
+    @Override
+    public org.bukkit.block.data.Bisected.Half getHalf() {
+        return this.get(HALF, org.bukkit.block.data.Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final org.bukkit.block.data.Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPlayerHead.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPlayerHead.java
new file mode 100644
index 0000000000..67b71d0df7
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPlayerHead.java
@@ -0,0 +1,48 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.PlayerHeadBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.RotationSegment;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Skull;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+import org.bukkit.util.Vector;
+
+@GeneratedFrom("1.21.4")
+public class CraftPlayerHead extends CraftBlockData implements Skull {
+    private static final BooleanProperty POWERED = PlayerHeadBlock.POWERED;
+
+    private static final IntegerProperty ROTATION = PlayerHeadBlock.ROTATION;
+
+    public CraftPlayerHead(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public BlockFace getRotation() {
+        return CraftBlockData.ROTATION_CYCLE[this.get(ROTATION)];
+    }
+
+    @Override
+    public void setRotation(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace != BlockFace.SELF && blockFace.getModY() == 0, "Invalid face, only horizontal face are allowed for this property!");
+        Vector dir = blockFace.getDirection();
+        float angle = (float) -Math.toDegrees(Math.atan2(dir.getX(), dir.getZ()));
+        this.set(ROTATION, RotationSegment.convertToSegment(angle));
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPlayerWallHead.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPlayerWallHead.java
new file mode 100644
index 0000000000..e4399bdf28
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPlayerWallHead.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.PlayerWallHeadBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.WallSkull;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPlayerWallHead extends CraftBlockData implements WallSkull {
+    private static final EnumProperty<Direction> FACING = PlayerWallHeadBlock.FACING;
+
+    private static final BooleanProperty POWERED = PlayerWallHeadBlock.POWERED;
+
+    public CraftPlayerWallHead(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPointedDripstone.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPointedDripstone.java
new file mode 100644
index 0000000000..ca4ae12a7b
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPointedDripstone.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.PointedDripstoneBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.DripstoneThickness;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.PointedDripstone;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPointedDripstone extends CraftBlockData implements PointedDripstone {
+    private static final EnumProperty<DripstoneThickness> THICKNESS = PointedDripstoneBlock.THICKNESS;
+
+    private static final EnumProperty<Direction> TIP_DIRECTION = PointedDripstoneBlock.TIP_DIRECTION;
+
+    private static final BooleanProperty WATERLOGGED = PointedDripstoneBlock.WATERLOGGED;
+
+    public CraftPointedDripstone(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public PointedDripstone.Thickness getThickness() {
+        return this.get(THICKNESS, PointedDripstone.Thickness.class);
+    }
+
+    @Override
+    public void setThickness(final PointedDripstone.Thickness thickness) {
+        Preconditions.checkArgument(thickness != null, "thickness cannot be null!");
+        this.set(THICKNESS, thickness);
+    }
+
+    @Override
+    public BlockFace getVerticalDirection() {
+        return this.get(TIP_DIRECTION, BlockFace.class);
+    }
+
+    @Override
+    public void setVerticalDirection(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.getModY() != 0, "Invalid face, only vertical face are allowed for this property!");
+        this.set(TIP_DIRECTION, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getVerticalDirections() {
+        return this.getValues(TIP_DIRECTION, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPotato.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPotato.java
new file mode 100644
index 0000000000..95fc35aa58
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPotato.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.PotatoBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPotato extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = PotatoBlock.AGE;
+
+    public CraftPotato(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPoweredRail.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPoweredRail.java
new file mode 100644
index 0000000000..f60f0b8bab
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPoweredRail.java
@@ -0,0 +1,62 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.world.level.block.PoweredRailBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.RailShape;
+import org.bukkit.block.data.type.RedstoneRail;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPoweredRail extends CraftBlockData implements RedstoneRail {
+    private static final BooleanProperty POWERED = PoweredRailBlock.POWERED;
+
+    private static final EnumProperty<RailShape> SHAPE = PoweredRailBlock.SHAPE;
+
+    private static final BooleanProperty WATERLOGGED = PoweredRailBlock.WATERLOGGED;
+
+    public CraftPoweredRail(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public org.bukkit.block.data.Rail.Shape getShape() {
+        return this.get(SHAPE, org.bukkit.block.data.Rail.Shape.class);
+    }
+
+    @Override
+    public void setShape(final org.bukkit.block.data.Rail.Shape shape) {
+        Preconditions.checkArgument(shape != null, "shape cannot be null!");
+        Preconditions.checkArgument(shape != org.bukkit.block.data.Rail.Shape.NORTH_EAST && shape != org.bukkit.block.data.Rail.Shape.NORTH_WEST && shape != org.bukkit.block.data.Rail.Shape.SOUTH_EAST && shape != org.bukkit.block.data.Rail.Shape.SOUTH_WEST, "Invalid rail shape, only straight rail are allowed for this property!");
+        this.set(SHAPE, shape);
+    }
+
+    @Override
+    public Set<org.bukkit.block.data.Rail.Shape> getShapes() {
+        return this.getValues(SHAPE, org.bukkit.block.data.Rail.Shape.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlate.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlate.java
new file mode 100644
index 0000000000..e54321bbcc
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlate.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.PressurePlateBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Powerable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftPressurePlate extends CraftBlockData implements Powerable {
+    private static final BooleanProperty POWERED = PressurePlateBlock.POWERED;
+
+    public CraftPressurePlate(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRail.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRail.java
new file mode 100644
index 0000000000..374bca36bd
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRail.java
@@ -0,0 +1,49 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.world.level.block.RailBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.RailShape;
+import org.bukkit.block.data.Rail;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRail extends CraftBlockData implements Rail {
+    private static final EnumProperty<RailShape> SHAPE = RailBlock.SHAPE;
+
+    private static final BooleanProperty WATERLOGGED = RailBlock.WATERLOGGED;
+
+    public CraftRail(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Rail.Shape getShape() {
+        return this.get(SHAPE, Rail.Shape.class);
+    }
+
+    @Override
+    public void setShape(final Rail.Shape shape) {
+        Preconditions.checkArgument(shape != null, "shape cannot be null!");
+        this.set(SHAPE, shape);
+    }
+
+    @Override
+    public Set<Rail.Shape> getShapes() {
+        return this.getValues(SHAPE, Rail.Shape.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedStoneOre.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedStoneOre.java
new file mode 100644
index 0000000000..051e5ed532
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedStoneOre.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.RedStoneOreBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Lightable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRedStoneOre extends CraftBlockData implements Lightable {
+    private static final BooleanProperty LIT = RedStoneOreBlock.LIT;
+
+    public CraftRedStoneOre(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedStoneWire.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedStoneWire.java
new file mode 100644
index 0000000000..4defded3c9
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedStoneWire.java
@@ -0,0 +1,66 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.RedStoneWireBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.RedstoneSide;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.RedstoneWire;
+import org.bukkit.craftbukkit.block.CraftBlock;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRedStoneWire extends CraftBlockData implements RedstoneWire {
+    private static final IntegerProperty POWER = RedStoneWireBlock.POWER;
+
+    private static final Map<BlockFace, EnumProperty<RedstoneSide>> PROPERTY_BY_DIRECTION = RedStoneWireBlock.PROPERTY_BY_DIRECTION.entrySet().stream()
+            .collect(Collectors.toMap(entry -> CraftBlock.notchToBlockFace(entry.getKey()), entry -> entry.getValue()));
+
+    public CraftRedStoneWire(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getPower() {
+        return this.get(POWER);
+    }
+
+    @Override
+    public void setPower(final int power) {
+        this.set(POWER, power);
+    }
+
+    @Override
+    public int getMaximumPower() {
+        return POWER.max;
+    }
+
+    @Override
+    public RedstoneWire.Connection getFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        EnumProperty<RedstoneSide> property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property, RedstoneWire.Connection.class);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final RedstoneWire.Connection connection) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(connection != null, "connection cannot be null!");
+        EnumProperty<RedstoneSide> property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, connection);
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneLamp.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneLamp.java
new file mode 100644
index 0000000000..da418939ab
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneLamp.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.RedstoneLampBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Lightable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRedstoneLamp extends CraftBlockData implements Lightable {
+    private static final BooleanProperty LIT = RedstoneLampBlock.LIT;
+
+    public CraftRedstoneLamp(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorch.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorch.java
new file mode 100644
index 0000000000..7a2b141b3c
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorch.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.RedstoneTorchBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Lightable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRedstoneTorch extends CraftBlockData implements Lightable {
+    private static final BooleanProperty LIT = RedstoneTorchBlock.LIT;
+
+    public CraftRedstoneTorch(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneWallTorch.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneWallTorch.java
new file mode 100644
index 0000000000..ff25a7ff54
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneWallTorch.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.RedstoneWallTorchBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.RedstoneWallTorch;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRedstoneWallTorch extends CraftBlockData implements RedstoneWallTorch {
+    private static final EnumProperty<Direction> FACING = RedstoneWallTorchBlock.FACING;
+
+    private static final BooleanProperty LIT = RedstoneWallTorchBlock.LIT;
+
+    public CraftRedstoneWallTorch(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRepeater.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRepeater.java
new file mode 100644
index 0000000000..8cd0d0a7e0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRepeater.java
@@ -0,0 +1,86 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.RepeaterBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Repeater;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRepeater extends CraftBlockData implements Repeater {
+    private static final IntegerProperty DELAY = RepeaterBlock.DELAY;
+
+    private static final EnumProperty<Direction> FACING = RepeaterBlock.FACING;
+
+    private static final BooleanProperty LOCKED = RepeaterBlock.LOCKED;
+
+    private static final BooleanProperty POWERED = RepeaterBlock.POWERED;
+
+    public CraftRepeater(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getDelay() {
+        return this.get(DELAY);
+    }
+
+    @Override
+    public void setDelay(final int delay) {
+        this.set(DELAY, delay);
+    }
+
+    @Override
+    public int getMinimumDelay() {
+        return DELAY.min;
+    }
+
+    @Override
+    public int getMaximumDelay() {
+        return DELAY.max;
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isLocked() {
+        return this.get(LOCKED);
+    }
+
+    @Override
+    public void setLocked(final boolean locked) {
+        this.set(LOCKED, locked);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRespawnAnchor.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRespawnAnchor.java
new file mode 100644
index 0000000000..e02515177c
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRespawnAnchor.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.RespawnAnchorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.RespawnAnchor;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRespawnAnchor extends CraftBlockData implements RespawnAnchor {
+    private static final IntegerProperty CHARGE = RespawnAnchorBlock.CHARGE;
+
+    public CraftRespawnAnchor(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getCharges() {
+        return this.get(CHARGE);
+    }
+
+    @Override
+    public void setCharges(final int charges) {
+        this.set(CHARGE, charges);
+    }
+
+    @Override
+    public int getMaximumCharges() {
+        return CHARGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRotatedPillar.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRotatedPillar.java
new file mode 100644
index 0000000000..01154d6897
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftRotatedPillar.java
@@ -0,0 +1,37 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.RotatedPillarBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.Axis;
+import org.bukkit.block.data.Orientable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftRotatedPillar extends CraftBlockData implements Orientable {
+    private static final EnumProperty<Direction.Axis> AXIS = RotatedPillarBlock.AXIS;
+
+    public CraftRotatedPillar(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Axis getAxis() {
+        return this.get(AXIS, Axis.class);
+    }
+
+    @Override
+    public void setAxis(final Axis axis) {
+        Preconditions.checkArgument(axis != null, "axis cannot be null!");
+        this.set(AXIS, axis);
+    }
+
+    @Override
+    public Set<Axis> getAxes() {
+        return this.getValues(AXIS, Axis.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSapling.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSapling.java
new file mode 100644
index 0000000000..73807dc42d
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSapling.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SaplingBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Sapling;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSapling extends CraftBlockData implements Sapling {
+    private static final IntegerProperty STAGE = SaplingBlock.STAGE;
+
+    public CraftSapling(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getStage() {
+        return this.get(STAGE);
+    }
+
+    @Override
+    public void setStage(final int stage) {
+        this.set(STAGE, stage);
+    }
+
+    @Override
+    public int getMaximumStage() {
+        return STAGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftScaffolding.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftScaffolding.java
new file mode 100644
index 0000000000..dc402bcd8a
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftScaffolding.java
@@ -0,0 +1,57 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.ScaffoldingBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Scaffolding;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftScaffolding extends CraftBlockData implements Scaffolding {
+    private static final BooleanProperty BOTTOM = ScaffoldingBlock.BOTTOM;
+
+    private static final IntegerProperty DISTANCE = ScaffoldingBlock.DISTANCE;
+
+    private static final BooleanProperty WATERLOGGED = ScaffoldingBlock.WATERLOGGED;
+
+    public CraftScaffolding(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isBottom() {
+        return this.get(BOTTOM);
+    }
+
+    @Override
+    public void setBottom(final boolean bottom) {
+        this.set(BOTTOM, bottom);
+    }
+
+    @Override
+    public int getDistance() {
+        return this.get(DISTANCE);
+    }
+
+    @Override
+    public void setDistance(final int distance) {
+        this.set(DISTANCE, distance);
+    }
+
+    @Override
+    public int getMaximumDistance() {
+        return DISTANCE.max;
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkCatalyst.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkCatalyst.java
new file mode 100644
index 0000000000..10b7799850
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkCatalyst.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SculkCatalystBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.SculkCatalyst;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSculkCatalyst extends CraftBlockData implements SculkCatalyst {
+    private static final BooleanProperty PULSE = SculkCatalystBlock.PULSE;
+
+    public CraftSculkCatalyst(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isBloom() {
+        return this.get(PULSE);
+    }
+
+    @Override
+    public void setBloom(final boolean bloom) {
+        this.set(PULSE, bloom);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkSensor.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkSensor.java
new file mode 100644
index 0000000000..090f4af3be
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkSensor.java
@@ -0,0 +1,61 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SculkSensorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.SculkSensorPhase;
+import org.bukkit.block.data.type.SculkSensor;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSculkSensor extends CraftBlockData implements SculkSensor {
+    private static final IntegerProperty POWER = SculkSensorBlock.POWER;
+
+    private static final EnumProperty<SculkSensorPhase> PHASE = SculkSensorBlock.PHASE;
+
+    private static final BooleanProperty WATERLOGGED = SculkSensorBlock.WATERLOGGED;
+
+    public CraftSculkSensor(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getPower() {
+        return this.get(POWER);
+    }
+
+    @Override
+    public void setPower(final int power) {
+        this.set(POWER, power);
+    }
+
+    @Override
+    public int getMaximumPower() {
+        return POWER.max;
+    }
+
+    @Override
+    public SculkSensor.Phase getSculkSensorPhase() {
+        return this.get(PHASE, SculkSensor.Phase.class);
+    }
+
+    @Override
+    public void setSculkSensorPhase(final SculkSensor.Phase phase) {
+        Preconditions.checkArgument(phase != null, "phase cannot be null!");
+        this.set(PHASE, phase);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkShrieker.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkShrieker.java
new file mode 100644
index 0000000000..e8e1631bdf
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkShrieker.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SculkShriekerBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.SculkShrieker;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSculkShrieker extends CraftBlockData implements SculkShrieker {
+    private static final BooleanProperty CAN_SUMMON = SculkShriekerBlock.CAN_SUMMON;
+
+    private static final BooleanProperty SHRIEKING = SculkShriekerBlock.SHRIEKING;
+
+    private static final BooleanProperty WATERLOGGED = SculkShriekerBlock.WATERLOGGED;
+
+    public CraftSculkShrieker(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isCanSummon() {
+        return this.get(CAN_SUMMON);
+    }
+
+    @Override
+    public void setCanSummon(final boolean canSummon) {
+        this.set(CAN_SUMMON, canSummon);
+    }
+
+    @Override
+    public boolean isShrieking() {
+        return this.get(SHRIEKING);
+    }
+
+    @Override
+    public void setShrieking(final boolean shrieking) {
+        this.set(SHRIEKING, shrieking);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java
new file mode 100644
index 0000000000..2de16b55b6
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java
@@ -0,0 +1,76 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.SculkVeinBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.SculkVein;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSculkVein extends CraftBlockData implements SculkVein {
+    private static final BooleanProperty WATERLOGGED = SculkVeinBlock.WATERLOGGED;
+
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.DOWN, BlockStateProperties.DOWN,
+        BlockFace.EAST, BlockStateProperties.EAST,
+        BlockFace.NORTH, BlockStateProperties.NORTH,
+        BlockFace.SOUTH, BlockStateProperties.SOUTH,
+        BlockFace.UP, BlockStateProperties.UP,
+        BlockFace.WEST, BlockStateProperties.WEST
+    );
+
+    public CraftSculkVein(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSeaPickle.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSeaPickle.java
new file mode 100644
index 0000000000..db0b38c9eb
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSeaPickle.java
@@ -0,0 +1,50 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SeaPickleBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.SeaPickle;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSeaPickle extends CraftBlockData implements SeaPickle {
+    private static final IntegerProperty PICKLES = SeaPickleBlock.PICKLES;
+
+    private static final BooleanProperty WATERLOGGED = SeaPickleBlock.WATERLOGGED;
+
+    public CraftSeaPickle(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getPickles() {
+        return this.get(PICKLES);
+    }
+
+    @Override
+    public void setPickles(final int pickles) {
+        this.set(PICKLES, pickles);
+    }
+
+    @Override
+    public int getMinimumPickles() {
+        return PICKLES.min;
+    }
+
+    @Override
+    public int getMaximumPickles() {
+        return PICKLES.max;
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftShulkerBox.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftShulkerBox.java
new file mode 100644
index 0000000000..e9c77a5d1c
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftShulkerBox.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.ShulkerBoxBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftShulkerBox extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = ShulkerBoxBlock.FACING;
+
+    public CraftShulkerBox(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian(), "Invalid face, only cartesian face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSkull.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSkull.java
new file mode 100644
index 0000000000..158f643ad3
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSkull.java
@@ -0,0 +1,48 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SkullBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.RotationSegment;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Skull;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+import org.bukkit.util.Vector;
+
+@GeneratedFrom("1.21.4")
+public class CraftSkull extends CraftBlockData implements Skull {
+    private static final BooleanProperty POWERED = SkullBlock.POWERED;
+
+    private static final IntegerProperty ROTATION = SkullBlock.ROTATION;
+
+    public CraftSkull(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public BlockFace getRotation() {
+        return CraftBlockData.ROTATION_CYCLE[this.get(ROTATION)];
+    }
+
+    @Override
+    public void setRotation(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace != BlockFace.SELF && blockFace.getModY() == 0, "Invalid face, only horizontal face are allowed for this property!");
+        Vector dir = blockFace.getDirection();
+        float angle = (float) -Math.toDegrees(Math.atan2(dir.getX(), dir.getZ()));
+        this.set(ROTATION, RotationSegment.convertToSegment(angle));
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSlab.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSlab.java
new file mode 100644
index 0000000000..98f3a8c857
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSlab.java
@@ -0,0 +1,43 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SlabBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.SlabType;
+import org.bukkit.block.data.type.Slab;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSlab extends CraftBlockData implements Slab {
+    private static final EnumProperty<SlabType> TYPE = SlabBlock.TYPE;
+
+    private static final BooleanProperty WATERLOGGED = SlabBlock.WATERLOGGED;
+
+    public CraftSlab(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Slab.Type getType() {
+        return this.get(TYPE, Slab.Type.class);
+    }
+
+    @Override
+    public void setType(final Slab.Type type) {
+        Preconditions.checkArgument(type != null, "type cannot be null!");
+        this.set(TYPE, type);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSmallDripleaf.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSmallDripleaf.java
new file mode 100644
index 0000000000..4554ace052
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSmallDripleaf.java
@@ -0,0 +1,66 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.SmallDripleafBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.SmallDripleaf;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSmallDripleaf extends CraftBlockData implements SmallDripleaf {
+    private static final EnumProperty<Direction> FACING = SmallDripleafBlock.FACING;
+
+    private static final EnumProperty<DoubleBlockHalf> HALF = SmallDripleafBlock.HALF;
+
+    private static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
+
+    public CraftSmallDripleaf(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public org.bukkit.block.data.Bisected.Half getHalf() {
+        return this.get(HALF, org.bukkit.block.data.Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final org.bukkit.block.data.Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSmoker.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSmoker.java
new file mode 100644
index 0000000000..5e467f577e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSmoker.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.SmokerBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Furnace;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSmoker extends CraftBlockData implements Furnace {
+    private static final EnumProperty<Direction> FACING = SmokerBlock.FACING;
+
+    private static final BooleanProperty LIT = SmokerBlock.LIT;
+
+    public CraftSmoker(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnifferEgg.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnifferEgg.java
new file mode 100644
index 0000000000..5b95935a34
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnifferEgg.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SnifferEggBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Hatchable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSnifferEgg extends CraftBlockData implements Hatchable {
+    private static final IntegerProperty HATCH = SnifferEggBlock.HATCH;
+
+    public CraftSnifferEgg(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getHatch() {
+        return this.get(HATCH);
+    }
+
+    @Override
+    public void setHatch(final int hatch) {
+        this.set(HATCH, hatch);
+    }
+
+    @Override
+    public int getMaximumHatch() {
+        return HATCH.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnowLayer.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnowLayer.java
new file mode 100644
index 0000000000..22c64f985f
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnowLayer.java
@@ -0,0 +1,37 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SnowLayerBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.Snow;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSnowLayer extends CraftBlockData implements Snow {
+    private static final IntegerProperty LAYERS = SnowLayerBlock.LAYERS;
+
+    public CraftSnowLayer(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getLayers() {
+        return this.get(LAYERS);
+    }
+
+    @Override
+    public void setLayers(final int layers) {
+        this.set(LAYERS, layers);
+    }
+
+    @Override
+    public int getMinimumLayers() {
+        return LAYERS.min;
+    }
+
+    @Override
+    public int getMaximumLayers() {
+        return LAYERS.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnowyDirt.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnowyDirt.java
new file mode 100644
index 0000000000..fa3dd4ef6d
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSnowyDirt.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SnowyDirtBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Snowable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSnowyDirt extends CraftBlockData implements Snowable {
+    private static final BooleanProperty SNOWY = SnowyDirtBlock.SNOWY;
+
+    public CraftSnowyDirt(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isSnowy() {
+        return this.get(SNOWY);
+    }
+
+    @Override
+    public void setSnowy(final boolean snowy) {
+        this.set(SNOWY, snowy);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStainedGlassPane.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStainedGlassPane.java
new file mode 100644
index 0000000000..dd6595a5ff
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStainedGlassPane.java
@@ -0,0 +1,73 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.StainedGlassPaneBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.GlassPane;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftStainedGlassPane extends CraftBlockData implements GlassPane {
+    private static final BooleanProperty WATERLOGGED = StainedGlassPaneBlock.WATERLOGGED;
+
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.EAST, StainedGlassPaneBlock.EAST,
+        BlockFace.NORTH, StainedGlassPaneBlock.NORTH,
+        BlockFace.SOUTH, StainedGlassPaneBlock.SOUTH,
+        BlockFace.WEST, StainedGlassPaneBlock.WEST
+    );
+
+    public CraftStainedGlassPane(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStair.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStair.java
new file mode 100644
index 0000000000..30d7d72282
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStair.java
@@ -0,0 +1,78 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.StairBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.StairsShape;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Stairs;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftStair extends CraftBlockData implements Stairs {
+    private static final EnumProperty<Direction> FACING = StairBlock.FACING;
+
+    private static final EnumProperty<net.minecraft.world.level.block.state.properties.Half> HALF = StairBlock.HALF;
+
+    private static final EnumProperty<StairsShape> SHAPE = StairBlock.SHAPE;
+
+    private static final BooleanProperty WATERLOGGED = StairBlock.WATERLOGGED;
+
+    public CraftStair(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public org.bukkit.block.data.Bisected.Half getHalf() {
+        return this.get(HALF, org.bukkit.block.data.Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final org.bukkit.block.data.Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+
+    @Override
+    public Stairs.Shape getShape() {
+        return this.get(SHAPE, Stairs.Shape.class);
+    }
+
+    @Override
+    public void setShape(final Stairs.Shape shape) {
+        Preconditions.checkArgument(shape != null, "shape cannot be null!");
+        this.set(SHAPE, shape);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStandingSign.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStandingSign.java
new file mode 100644
index 0000000000..27defc4856
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStandingSign.java
@@ -0,0 +1,48 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.StandingSignBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.RotationSegment;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Sign;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+import org.bukkit.util.Vector;
+
+@GeneratedFrom("1.21.4")
+public class CraftStandingSign extends CraftBlockData implements Sign {
+    private static final IntegerProperty ROTATION = StandingSignBlock.ROTATION;
+
+    private static final BooleanProperty WATERLOGGED = StandingSignBlock.WATERLOGGED;
+
+    public CraftStandingSign(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getRotation() {
+        return CraftBlockData.ROTATION_CYCLE[this.get(ROTATION)];
+    }
+
+    @Override
+    public void setRotation(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace != BlockFace.SELF && blockFace.getModY() == 0, "Invalid face, only horizontal face are allowed for this property!");
+        Vector dir = blockFace.getDirection();
+        float angle = (float) -Math.toDegrees(Math.atan2(dir.getX(), dir.getZ()));
+        this.set(ROTATION, RotationSegment.convertToSegment(angle));
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStem.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStem.java
new file mode 100644
index 0000000000..f0bff1c763
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStem.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.StemBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftStem extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = StemBlock.AGE;
+
+    public CraftStem(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStonecutter.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStonecutter.java
new file mode 100644
index 0000000000..12a4e6fe91
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStonecutter.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.StonecutterBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftStonecutter extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = StonecutterBlock.FACING;
+
+    public CraftStonecutter(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStructureBlock.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStructureBlock.java
new file mode 100644
index 0000000000..af14ac3a50
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftStructureBlock.java
@@ -0,0 +1,29 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.StructureMode;
+import org.bukkit.block.data.type.StructureBlock;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftStructureBlock extends CraftBlockData implements StructureBlock {
+    private static final EnumProperty<StructureMode> MODE = net.minecraft.world.level.block.StructureBlock.MODE;
+
+    public CraftStructureBlock(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public StructureBlock.Mode getMode() {
+        return this.get(MODE, StructureBlock.Mode.class);
+    }
+
+    @Override
+    public void setMode(final StructureBlock.Mode mode) {
+        Preconditions.checkArgument(mode != null, "mode cannot be null!");
+        this.set(MODE, mode);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSugarCane.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSugarCane.java
new file mode 100644
index 0000000000..b4a60deebf
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSugarCane.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SugarCaneBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSugarCane extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = SugarCaneBlock.AGE;
+
+    public CraftSugarCane(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSweetBerryBush.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSweetBerryBush.java
new file mode 100644
index 0000000000..a69c6df7e2
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftSweetBerryBush.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.SweetBerryBushBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftSweetBerryBush extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = SweetBerryBushBlock.AGE;
+
+    public CraftSweetBerryBush(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTallFlower.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTallFlower.java
new file mode 100644
index 0000000000..83b9168cb0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTallFlower.java
@@ -0,0 +1,30 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.TallFlowerBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.data.Bisected;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTallFlower extends CraftBlockData implements Bisected {
+    private static final EnumProperty<DoubleBlockHalf> HALF = TallFlowerBlock.HALF;
+
+    public CraftTallFlower(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Bisected.Half getHalf() {
+        return this.get(HALF, Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTallSeagrass.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTallSeagrass.java
new file mode 100644
index 0000000000..302493ba8e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTallSeagrass.java
@@ -0,0 +1,30 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.TallSeagrassBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.data.Bisected;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTallSeagrass extends CraftBlockData implements Bisected {
+    private static final EnumProperty<DoubleBlockHalf> HALF = TallSeagrassBlock.HALF;
+
+    public CraftTallSeagrass(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Bisected.Half getHalf() {
+        return this.get(HALF, Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTarget.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTarget.java
new file mode 100644
index 0000000000..023802b815
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTarget.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.AnaloguePowerable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTarget extends CraftBlockData implements AnaloguePowerable {
+    private static final IntegerProperty OUTPUT_POWER = BlockStateProperties.POWER;
+
+    public CraftTarget(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getPower() {
+        return this.get(OUTPUT_POWER);
+    }
+
+    @Override
+    public void setPower(final int power) {
+        this.set(OUTPUT_POWER, power);
+    }
+
+    @Override
+    public int getMaximumPower() {
+        return OUTPUT_POWER.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTnt.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTnt.java
new file mode 100644
index 0000000000..a9cbf259f0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTnt.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.TntBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.TNT;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTnt extends CraftBlockData implements TNT {
+    private static final BooleanProperty UNSTABLE = TntBlock.UNSTABLE;
+
+    public CraftTnt(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isUnstable() {
+        return this.get(UNSTABLE);
+    }
+
+    @Override
+    public void setUnstable(final boolean unstable) {
+        this.set(UNSTABLE, unstable);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTorchflowerCrop.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTorchflowerCrop.java
new file mode 100644
index 0000000000..6d35a414fe
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTorchflowerCrop.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.TorchflowerCropBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTorchflowerCrop extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = TorchflowerCropBlock.AGE;
+
+    public CraftTorchflowerCrop(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrapDoor.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrapDoor.java
new file mode 100644
index 0000000000..aa130a5d90
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrapDoor.java
@@ -0,0 +1,88 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.TrapDoorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.TrapDoor;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTrapDoor extends CraftBlockData implements TrapDoor {
+    private static final EnumProperty<Direction> FACING = TrapDoorBlock.FACING;
+
+    private static final EnumProperty<net.minecraft.world.level.block.state.properties.Half> HALF = TrapDoorBlock.HALF;
+
+    private static final BooleanProperty OPEN = TrapDoorBlock.OPEN;
+
+    private static final BooleanProperty POWERED = TrapDoorBlock.POWERED;
+
+    private static final BooleanProperty WATERLOGGED = TrapDoorBlock.WATERLOGGED;
+
+    public CraftTrapDoor(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public org.bukkit.block.data.Bisected.Half getHalf() {
+        return this.get(HALF, org.bukkit.block.data.Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final org.bukkit.block.data.Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+
+    @Override
+    public boolean isOpen() {
+        return this.get(OPEN);
+    }
+
+    @Override
+    public void setOpen(final boolean open) {
+        this.set(OPEN, open);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrappedChest.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrappedChest.java
new file mode 100644
index 0000000000..5799baf9d0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrappedChest.java
@@ -0,0 +1,65 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.TrappedChestBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.ChestType;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Chest;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTrappedChest extends CraftBlockData implements Chest {
+    private static final EnumProperty<Direction> FACING = TrappedChestBlock.FACING;
+
+    private static final EnumProperty<ChestType> TYPE = TrappedChestBlock.TYPE;
+
+    private static final BooleanProperty WATERLOGGED = TrappedChestBlock.WATERLOGGED;
+
+    public CraftTrappedChest(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public Chest.Type getType() {
+        return this.get(TYPE, Chest.Type.class);
+    }
+
+    @Override
+    public void setType(final Chest.Type type) {
+        Preconditions.checkArgument(type != null, "type cannot be null!");
+        this.set(TYPE, type);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrialSpawner.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrialSpawner.java
new file mode 100644
index 0000000000..7247edf18f
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTrialSpawner.java
@@ -0,0 +1,43 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.TrialSpawnerBlock;
+import net.minecraft.world.level.block.entity.trialspawner.TrialSpawnerState;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.data.type.TrialSpawner;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTrialSpawner extends CraftBlockData implements TrialSpawner {
+    private static final BooleanProperty OMINOUS = TrialSpawnerBlock.OMINOUS;
+
+    private static final EnumProperty<TrialSpawnerState> STATE = TrialSpawnerBlock.STATE;
+
+    public CraftTrialSpawner(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isOminous() {
+        return this.get(OMINOUS);
+    }
+
+    @Override
+    public void setOminous(final boolean ominous) {
+        this.set(OMINOUS, ominous);
+    }
+
+    @Override
+    public TrialSpawner.State getTrialSpawnerState() {
+        return this.get(STATE, TrialSpawner.State.class);
+    }
+
+    @Override
+    public void setTrialSpawnerState(final TrialSpawner.State state) {
+        Preconditions.checkArgument(state != null, "state cannot be null!");
+        this.set(STATE, state);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTripWire.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTripWire.java
new file mode 100644
index 0000000000..bc7f4c9ec0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTripWire.java
@@ -0,0 +1,97 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.TripWireBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Tripwire;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTripWire extends CraftBlockData implements Tripwire {
+    private static final BooleanProperty ATTACHED = TripWireBlock.ATTACHED;
+
+    private static final BooleanProperty DISARMED = TripWireBlock.DISARMED;
+
+    private static final BooleanProperty POWERED = TripWireBlock.POWERED;
+
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = Map.of(
+        BlockFace.EAST, TripWireBlock.EAST,
+        BlockFace.NORTH, TripWireBlock.NORTH,
+        BlockFace.SOUTH, TripWireBlock.SOUTH,
+        BlockFace.WEST, TripWireBlock.WEST
+    );
+
+    public CraftTripWire(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isAttached() {
+        return this.get(ATTACHED);
+    }
+
+    @Override
+    public void setAttached(final boolean attached) {
+        this.set(ATTACHED, attached);
+    }
+
+    @Override
+    public boolean isDisarmed() {
+        return this.get(DISARMED);
+    }
+
+    @Override
+    public void setDisarmed(final boolean disarmed) {
+        this.set(DISARMED, disarmed);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTripWireHook.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTripWireHook.java
new file mode 100644
index 0000000000..69658eefd7
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTripWireHook.java
@@ -0,0 +1,63 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.TripWireHookBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.TripwireHook;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTripWireHook extends CraftBlockData implements TripwireHook {
+    private static final BooleanProperty ATTACHED = TripWireHookBlock.ATTACHED;
+
+    private static final EnumProperty<Direction> FACING = TripWireHookBlock.FACING;
+
+    private static final BooleanProperty POWERED = TripWireHookBlock.POWERED;
+
+    public CraftTripWireHook(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isAttached() {
+        return this.get(ATTACHED);
+    }
+
+    @Override
+    public void setAttached(final boolean attached) {
+        this.set(ATTACHED, attached);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTurtleEgg.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTurtleEgg.java
new file mode 100644
index 0000000000..bc2d3fb7ff
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTurtleEgg.java
@@ -0,0 +1,54 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.TurtleEggBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.type.TurtleEgg;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTurtleEgg extends CraftBlockData implements TurtleEgg {
+    private static final IntegerProperty EGGS = TurtleEggBlock.EGGS;
+
+    private static final IntegerProperty HATCH = TurtleEggBlock.HATCH;
+
+    public CraftTurtleEgg(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getEggs() {
+        return this.get(EGGS);
+    }
+
+    @Override
+    public void setEggs(final int eggs) {
+        this.set(EGGS, eggs);
+    }
+
+    @Override
+    public int getMinimumEggs() {
+        return EGGS.min;
+    }
+
+    @Override
+    public int getMaximumEggs() {
+        return EGGS.max;
+    }
+
+    @Override
+    public int getHatch() {
+        return this.get(HATCH);
+    }
+
+    @Override
+    public void setHatch(final int hatch) {
+        this.set(HATCH, hatch);
+    }
+
+    @Override
+    public int getMaximumHatch() {
+        return HATCH.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTwistingVines.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTwistingVines.java
new file mode 100644
index 0000000000..279ea1ce49
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftTwistingVines.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.TwistingVinesBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftTwistingVines extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = TwistingVinesBlock.AGE;
+
+    public CraftTwistingVines(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftVault.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftVault.java
new file mode 100644
index 0000000000..938391d1e8
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftVault.java
@@ -0,0 +1,66 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.VaultBlock;
+import net.minecraft.world.level.block.entity.vault.VaultState;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BlockStateProperties;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Vault;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftVault extends CraftBlockData implements Vault {
+    private static final EnumProperty<Direction> FACING = VaultBlock.FACING;
+
+    private static final BooleanProperty OMINOUS = VaultBlock.OMINOUS;
+
+    private static final EnumProperty<VaultState> STATE = BlockStateProperties.VAULT_STATE;
+
+    public CraftVault(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isOminous() {
+        return this.get(OMINOUS);
+    }
+
+    @Override
+    public void setOminous(final boolean ominous) {
+        this.set(OMINOUS, ominous);
+    }
+
+    @Override
+    public Vault.State getVaultState() {
+        return this.get(STATE, Vault.State.class);
+    }
+
+    @Override
+    public void setVaultState(final Vault.State state) {
+        Preconditions.checkArgument(state != null, "state cannot be null!");
+        this.set(STATE, state);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftVine.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftVine.java
new file mode 100644
index 0000000000..09463d179c
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftVine.java
@@ -0,0 +1,58 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.VineBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.MultipleFacing;
+import org.bukkit.craftbukkit.block.CraftBlock;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftVine extends CraftBlockData implements MultipleFacing {
+    private static final Map<BlockFace, BooleanProperty> PROPERTY_BY_DIRECTION = VineBlock.PROPERTY_BY_DIRECTION.entrySet().stream()
+            .collect(Collectors.toMap(entry -> CraftBlock.notchToBlockFace(entry.getKey()), entry -> entry.getValue()));
+
+    public CraftVine(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean hasFace(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property);
+    }
+
+    @Override
+    public void setFace(final BlockFace blockFace, final boolean face) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        BooleanProperty property = PROPERTY_BY_DIRECTION.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_DIRECTION.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, face);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        ImmutableSet.Builder<BlockFace> faces = ImmutableSet.builder();
+        for (Map.Entry<BlockFace, BooleanProperty> entry : PROPERTY_BY_DIRECTION.entrySet()) {
+            if (this.get(entry.getValue())) {
+                faces.add(entry.getKey());
+            }
+        }
+        return faces.build();
+    }
+
+    @Override
+    public Set<BlockFace> getAllowedFaces() {
+        return Collections.unmodifiableSet(PROPERTY_BY_DIRECTION.keySet());
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWall.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWall.java
new file mode 100644
index 0000000000..84b1fb4515
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWall.java
@@ -0,0 +1,69 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Map;
+import java.util.stream.Collectors;
+import net.minecraft.world.level.block.WallBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.WallSide;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Wall;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWall extends CraftBlockData implements Wall {
+    private static final BooleanProperty UP = WallBlock.UP;
+
+    private static final BooleanProperty WATERLOGGED = WallBlock.WATERLOGGED;
+
+    private static final Map<BlockFace, EnumProperty<WallSide>> PROPERTY_BY_FACE = Map.of(
+        BlockFace.EAST, WallBlock.EAST_WALL,
+        BlockFace.NORTH, WallBlock.NORTH_WALL,
+        BlockFace.SOUTH, WallBlock.SOUTH_WALL,
+        BlockFace.WEST, WallBlock.WEST_WALL
+    );
+
+    public CraftWall(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isUp() {
+        return this.get(UP);
+    }
+
+    @Override
+    public void setUp(final boolean up) {
+        this.set(UP, up);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+
+    @Override
+    public Wall.Height getHeight(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        EnumProperty<WallSide> property = PROPERTY_BY_FACE.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_FACE.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        return this.get(property, Wall.Height.class);
+    }
+
+    @Override
+    public void setHeight(final BlockFace blockFace, final Wall.Height height) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(height != null, "height cannot be null!");
+        EnumProperty<WallSide> property = PROPERTY_BY_FACE.get(blockFace);
+        Preconditions.checkArgument(property != null, "Invalid blockFace, only %s are allowed!", PROPERTY_BY_FACE.keySet().stream().map(Enum::name).collect(Collectors.joining(", ")));
+        this.set(property, height);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallBanner.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallBanner.java
new file mode 100644
index 0000000000..ca411139c0
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallBanner.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WallBannerBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWallBanner extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = WallBannerBlock.FACING;
+
+    public CraftWallBanner(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallHangingSign.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallHangingSign.java
new file mode 100644
index 0000000000..c960cc4e25
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallHangingSign.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WallHangingSignBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.WallHangingSign;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWallHangingSign extends CraftBlockData implements WallHangingSign {
+    private static final EnumProperty<Direction> FACING = WallHangingSignBlock.FACING;
+
+    private static final BooleanProperty WATERLOGGED = WallHangingSignBlock.WATERLOGGED;
+
+    public CraftWallHangingSign(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallSign.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallSign.java
new file mode 100644
index 0000000000..ad185e86c5
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallSign.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WallSignBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.WallSign;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWallSign extends CraftBlockData implements WallSign {
+    private static final EnumProperty<Direction> FACING = WallSignBlock.FACING;
+
+    private static final BooleanProperty WATERLOGGED = WallSignBlock.WATERLOGGED;
+
+    public CraftWallSign(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallSkull.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallSkull.java
new file mode 100644
index 0000000000..3daa0892be
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallSkull.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WallSkullBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.WallSkull;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWallSkull extends CraftBlockData implements WallSkull {
+    private static final EnumProperty<Direction> FACING = WallSkullBlock.FACING;
+
+    private static final BooleanProperty POWERED = WallSkullBlock.POWERED;
+
+    public CraftWallSkull(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallTorch.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallTorch.java
new file mode 100644
index 0000000000..dd5fe54ebb
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWallTorch.java
@@ -0,0 +1,38 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WallTorchBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Directional;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWallTorch extends CraftBlockData implements Directional {
+    private static final EnumProperty<Direction> FACING = WallTorchBlock.FACING;
+
+    public CraftWallTorch(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWaterloggedTransparent.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWaterloggedTransparent.java
new file mode 100644
index 0000000000..403fbf3439
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWaterloggedTransparent.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.WaterloggedTransparentBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWaterloggedTransparent extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = WaterloggedTransparentBlock.WATERLOGGED;
+
+    public CraftWaterloggedTransparent(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperBulb.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperBulb.java
new file mode 100644
index 0000000000..56b0304d75
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperBulb.java
@@ -0,0 +1,39 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.WeatheringCopperBulbBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.type.CopperBulb;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWeatheringCopperBulb extends CraftBlockData implements CopperBulb {
+    private static final BooleanProperty LIT = WeatheringCopperBulbBlock.LIT;
+
+    private static final BooleanProperty POWERED = WeatheringCopperBulbBlock.POWERED;
+
+    public CraftWeatheringCopperBulb(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isLit() {
+        return this.get(LIT);
+    }
+
+    @Override
+    public void setLit(final boolean lit) {
+        this.set(LIT, lit);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperDoor.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperDoor.java
new file mode 100644
index 0000000000..61b6d84db2
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperDoor.java
@@ -0,0 +1,91 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WeatheringCopperDoorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.DoorHingeSide;
+import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Door;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWeatheringCopperDoor extends CraftBlockData implements Door {
+    private static final EnumProperty<Direction> FACING = WeatheringCopperDoorBlock.FACING;
+
+    private static final EnumProperty<DoubleBlockHalf> HALF = WeatheringCopperDoorBlock.HALF;
+
+    private static final EnumProperty<DoorHingeSide> HINGE = WeatheringCopperDoorBlock.HINGE;
+
+    private static final BooleanProperty OPEN = WeatheringCopperDoorBlock.OPEN;
+
+    private static final BooleanProperty POWERED = WeatheringCopperDoorBlock.POWERED;
+
+    public CraftWeatheringCopperDoor(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public org.bukkit.block.data.Bisected.Half getHalf() {
+        return this.get(HALF, org.bukkit.block.data.Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final org.bukkit.block.data.Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+
+    @Override
+    public Door.Hinge getHinge() {
+        return this.get(HINGE, Door.Hinge.class);
+    }
+
+    @Override
+    public void setHinge(final Door.Hinge hinge) {
+        Preconditions.checkArgument(hinge != null, "hinge cannot be null!");
+        this.set(HINGE, hinge);
+    }
+
+    @Override
+    public boolean isOpen() {
+        return this.get(OPEN);
+    }
+
+    @Override
+    public void setOpen(final boolean open) {
+        this.set(OPEN, open);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperGrate.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperGrate.java
new file mode 100644
index 0000000000..70baf2c41d
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperGrate.java
@@ -0,0 +1,27 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.WeatheringCopperGrateBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.block.data.Waterlogged;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWeatheringCopperGrate extends CraftBlockData implements Waterlogged {
+    private static final BooleanProperty WATERLOGGED = WeatheringCopperGrateBlock.WATERLOGGED;
+
+    public CraftWeatheringCopperGrate(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperSlab.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperSlab.java
new file mode 100644
index 0000000000..9bf557ae8f
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperSlab.java
@@ -0,0 +1,43 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.WeatheringCopperSlabBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.SlabType;
+import org.bukkit.block.data.type.Slab;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWeatheringCopperSlab extends CraftBlockData implements Slab {
+    private static final EnumProperty<SlabType> TYPE = WeatheringCopperSlabBlock.TYPE;
+
+    private static final BooleanProperty WATERLOGGED = WeatheringCopperSlabBlock.WATERLOGGED;
+
+    public CraftWeatheringCopperSlab(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public Slab.Type getType() {
+        return this.get(TYPE, Slab.Type.class);
+    }
+
+    @Override
+    public void setType(final Slab.Type type) {
+        Preconditions.checkArgument(type != null, "type cannot be null!");
+        this.set(TYPE, type);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperStair.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperStair.java
new file mode 100644
index 0000000000..fbe25b7c1c
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperStair.java
@@ -0,0 +1,78 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WeatheringCopperStairBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import net.minecraft.world.level.block.state.properties.StairsShape;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Stairs;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWeatheringCopperStair extends CraftBlockData implements Stairs {
+    private static final EnumProperty<Direction> FACING = WeatheringCopperStairBlock.FACING;
+
+    private static final EnumProperty<net.minecraft.world.level.block.state.properties.Half> HALF = WeatheringCopperStairBlock.HALF;
+
+    private static final EnumProperty<StairsShape> SHAPE = WeatheringCopperStairBlock.SHAPE;
+
+    private static final BooleanProperty WATERLOGGED = WeatheringCopperStairBlock.WATERLOGGED;
+
+    public CraftWeatheringCopperStair(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public org.bukkit.block.data.Bisected.Half getHalf() {
+        return this.get(HALF, org.bukkit.block.data.Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final org.bukkit.block.data.Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+
+    @Override
+    public Stairs.Shape getShape() {
+        return this.get(SHAPE, Stairs.Shape.class);
+    }
+
+    @Override
+    public void setShape(final Stairs.Shape shape) {
+        Preconditions.checkArgument(shape != null, "shape cannot be null!");
+        this.set(SHAPE, shape);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperTrapDoor.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperTrapDoor.java
new file mode 100644
index 0000000000..1c552b6391
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperTrapDoor.java
@@ -0,0 +1,88 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.TrapDoor;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWeatheringCopperTrapDoor extends CraftBlockData implements TrapDoor {
+    private static final EnumProperty<Direction> FACING = WeatheringCopperTrapDoorBlock.FACING;
+
+    private static final EnumProperty<net.minecraft.world.level.block.state.properties.Half> HALF = WeatheringCopperTrapDoorBlock.HALF;
+
+    private static final BooleanProperty OPEN = WeatheringCopperTrapDoorBlock.OPEN;
+
+    private static final BooleanProperty POWERED = WeatheringCopperTrapDoorBlock.POWERED;
+
+    private static final BooleanProperty WATERLOGGED = WeatheringCopperTrapDoorBlock.WATERLOGGED;
+
+    public CraftWeatheringCopperTrapDoor(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public org.bukkit.block.data.Bisected.Half getHalf() {
+        return this.get(HALF, org.bukkit.block.data.Bisected.Half.class);
+    }
+
+    @Override
+    public void setHalf(final org.bukkit.block.data.Bisected.Half half) {
+        Preconditions.checkArgument(half != null, "half cannot be null!");
+        this.set(HALF, half);
+    }
+
+    @Override
+    public boolean isOpen() {
+        return this.get(OPEN);
+    }
+
+    @Override
+    public void setOpen(final boolean open) {
+        this.set(OPEN, open);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public boolean isWaterlogged() {
+        return this.get(WATERLOGGED);
+    }
+
+    @Override
+    public void setWaterlogged(final boolean waterlogged) {
+        this.set(WATERLOGGED, waterlogged);
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeepingVines.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeepingVines.java
new file mode 100644
index 0000000000..13314a9851
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeepingVines.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.WeepingVinesBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWeepingVines extends CraftBlockData implements Ageable {
+    private static final IntegerProperty AGE = WeepingVinesBlock.AGE;
+
+    public CraftWeepingVines(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getAge() {
+        return this.get(AGE);
+    }
+
+    @Override
+    public void setAge(final int age) {
+        this.set(AGE, age);
+    }
+
+    @Override
+    public int getMaximumAge() {
+        return AGE.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeightedPressurePlate.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeightedPressurePlate.java
new file mode 100644
index 0000000000..05cfecb50e
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWeightedPressurePlate.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.WeightedPressurePlateBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import org.bukkit.block.data.AnaloguePowerable;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWeightedPressurePlate extends CraftBlockData implements AnaloguePowerable {
+    private static final IntegerProperty POWER = WeightedPressurePlateBlock.POWER;
+
+    public CraftWeightedPressurePlate(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public int getPower() {
+        return this.get(POWER);
+    }
+
+    @Override
+    public void setPower(final int power) {
+        this.set(POWER, power);
+    }
+
+    @Override
+    public int getMaximumPower() {
+        return POWER.max;
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkull.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkull.java
new file mode 100644
index 0000000000..a36f82378d
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkull.java
@@ -0,0 +1,48 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import net.minecraft.world.level.block.WitherSkullBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.IntegerProperty;
+import net.minecraft.world.level.block.state.properties.RotationSegment;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Skull;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+import org.bukkit.util.Vector;
+
+@GeneratedFrom("1.21.4")
+public class CraftWitherSkull extends CraftBlockData implements Skull {
+    private static final BooleanProperty POWERED = WitherSkullBlock.POWERED;
+
+    private static final IntegerProperty ROTATION = WitherSkullBlock.ROTATION;
+
+    public CraftWitherSkull(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+
+    @Override
+    public BlockFace getRotation() {
+        return CraftBlockData.ROTATION_CYCLE[this.get(ROTATION)];
+    }
+
+    @Override
+    public void setRotation(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace != BlockFace.SELF && blockFace.getModY() == 0, "Invalid face, only horizontal face are allowed for this property!");
+        Vector dir = blockFace.getDirection();
+        float angle = (float) -Math.toDegrees(Math.atan2(dir.getX(), dir.getZ()));
+        this.set(ROTATION, RotationSegment.convertToSegment(angle));
+    }
+}
diff --git a/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWitherWallSkull.java b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWitherWallSkull.java
new file mode 100644
index 0000000000..33ba595ec1
--- /dev/null
+++ b/paper-server/src/generated/java/org/bukkit/craftbukkit/block/impl/CraftWitherWallSkull.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.block.impl;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.generated.GeneratedFrom;
+import java.util.Set;
+import net.minecraft.core.Direction;
+import net.minecraft.world.level.block.WitherWallSkullBlock;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import net.minecraft.world.level.block.state.properties.EnumProperty;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.WallSkull;
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
+
+@GeneratedFrom("1.21.4")
+public class CraftWitherWallSkull extends CraftBlockData implements WallSkull {
+    private static final EnumProperty<Direction> FACING = WitherWallSkullBlock.FACING;
+
+    private static final BooleanProperty POWERED = WitherWallSkullBlock.POWERED;
+
+    public CraftWitherWallSkull(BlockState state) {
+        super(state);
+    }
+
+    @Override
+    public BlockFace getFacing() {
+        return this.get(FACING, BlockFace.class);
+    }
+
+    @Override
+    public void setFacing(final BlockFace blockFace) {
+        Preconditions.checkArgument(blockFace != null, "blockFace cannot be null!");
+        Preconditions.checkArgument(blockFace.isCartesian() && blockFace.getModY() == 0, "Invalid face, only cartesian horizontal face are allowed for this property!");
+        this.set(FACING, blockFace);
+    }
+
+    @Override
+    public Set<BlockFace> getFaces() {
+        return this.getValues(FACING, BlockFace.class);
+    }
+
+    @Override
+    public boolean isPowered() {
+        return this.get(POWERED);
+    }
+
+    @Override
+    public void setPowered(final boolean powered) {
+        this.set(POWERED, powered);
+    }
+}
diff --git a/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
index 6bdc683b5a..2228860c51 100644
--- a/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
+++ b/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
@@ -3,6 +3,7 @@ package com.destroystokyo.paper.entity.ai;
 import com.destroystokyo.paper.entity.RangedEntity;
 import com.google.common.collect.BiMap;
 import com.google.common.collect.HashBiMap;
+import io.papermc.paper.entity.SchoolableFish;
 import io.papermc.paper.util.ObfHelper;
 import java.lang.reflect.Constructor;
 import java.util.EnumSet;
@@ -10,120 +11,10 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import net.minecraft.world.entity.FlyingMob;
-import net.minecraft.world.entity.PathfinderMob;
-import net.minecraft.world.entity.TamableAnimal;
 import net.minecraft.world.entity.ai.goal.Goal;
-import net.minecraft.world.entity.ambient.AmbientCreature;
-import net.minecraft.world.entity.animal.AbstractFish;
-import net.minecraft.world.entity.animal.AbstractGolem;
-import net.minecraft.world.entity.animal.AbstractSchoolingFish;
-import net.minecraft.world.entity.animal.Animal;
-import net.minecraft.world.entity.animal.Pufferfish;
-import net.minecraft.world.entity.animal.ShoulderRidingEntity;
-import net.minecraft.world.entity.animal.SnowGolem;
-import net.minecraft.world.entity.animal.WaterAnimal;
-import net.minecraft.world.entity.animal.camel.Camel;
-import net.minecraft.world.entity.animal.horse.AbstractChestedHorse;
-import net.minecraft.world.entity.boss.wither.WitherBoss;
-import net.minecraft.world.entity.monster.AbstractIllager;
-import net.minecraft.world.entity.monster.EnderMan;
-import net.minecraft.world.entity.monster.PatrollingMonster;
 import net.minecraft.world.entity.monster.RangedAttackMob;
-import net.minecraft.world.entity.monster.SpellcasterIllager;
-import net.minecraft.world.entity.monster.ZombifiedPiglin;
-import net.minecraft.world.entity.monster.breeze.Breeze;
-import net.minecraft.world.entity.monster.piglin.AbstractPiglin;
 import org.bukkit.NamespacedKey;
-import org.bukkit.entity.AbstractHorse;
-import org.bukkit.entity.AbstractSkeleton;
-import org.bukkit.entity.AbstractVillager;
-import org.bukkit.entity.Ageable;
-import org.bukkit.entity.Ambient;
-import org.bukkit.entity.Animals;
-import org.bukkit.entity.Bat;
-import org.bukkit.entity.Bee;
-import org.bukkit.entity.Blaze;
-import org.bukkit.entity.Cat;
-import org.bukkit.entity.CaveSpider;
-import org.bukkit.entity.ChestedHorse;
-import org.bukkit.entity.Chicken;
-import org.bukkit.entity.Cod;
-import org.bukkit.entity.Cow;
-import org.bukkit.entity.Creature;
-import org.bukkit.entity.Creeper;
-import org.bukkit.entity.Dolphin;
-import org.bukkit.entity.Donkey;
-import org.bukkit.entity.Drowned;
-import org.bukkit.entity.ElderGuardian;
-import org.bukkit.entity.EnderDragon;
-import org.bukkit.entity.Enderman;
-import org.bukkit.entity.Endermite;
-import org.bukkit.entity.Evoker;
-import org.bukkit.entity.Fish;
-import org.bukkit.entity.Flying;
-import org.bukkit.entity.Fox;
-import org.bukkit.entity.Ghast;
-import org.bukkit.entity.Giant;
-import org.bukkit.entity.Golem;
-import org.bukkit.entity.Guardian;
-import org.bukkit.entity.Hoglin;
-import org.bukkit.entity.Horse;
-import org.bukkit.entity.Husk;
-import org.bukkit.entity.Illager;
-import org.bukkit.entity.Illusioner;
-import org.bukkit.entity.IronGolem;
-import org.bukkit.entity.Llama;
-import org.bukkit.entity.MagmaCube;
-import org.bukkit.entity.Mob;
-import org.bukkit.entity.Monster;
-import org.bukkit.entity.Mule;
-import org.bukkit.entity.MushroomCow;
-import org.bukkit.entity.Ocelot;
-import org.bukkit.entity.Panda;
-import org.bukkit.entity.Parrot;
-import org.bukkit.entity.Phantom;
-import org.bukkit.entity.Pig;
-import org.bukkit.entity.PigZombie;
-import org.bukkit.entity.Piglin;
-import org.bukkit.entity.PiglinAbstract;
-import org.bukkit.entity.PiglinBrute;
-import org.bukkit.entity.Pillager;
-import org.bukkit.entity.PolarBear;
-import org.bukkit.entity.PufferFish;
-import org.bukkit.entity.Rabbit;
-import org.bukkit.entity.Raider;
-import org.bukkit.entity.Ravager;
-import org.bukkit.entity.Salmon;
-import org.bukkit.entity.Sheep;
-import org.bukkit.entity.Shulker;
-import org.bukkit.entity.Silverfish;
-import org.bukkit.entity.Skeleton;
-import org.bukkit.entity.SkeletonHorse;
-import org.bukkit.entity.Slime;
-import org.bukkit.entity.Snowman;
-import org.bukkit.entity.Spellcaster;
-import org.bukkit.entity.Spider;
-import org.bukkit.entity.Squid;
-import org.bukkit.entity.Stray;
-import org.bukkit.entity.Strider;
-import org.bukkit.entity.Tameable;
-import org.bukkit.entity.TraderLlama;
-import org.bukkit.entity.TropicalFish;
-import org.bukkit.entity.Turtle;
-import org.bukkit.entity.Vex;
-import org.bukkit.entity.Villager;
-import org.bukkit.entity.Vindicator;
-import org.bukkit.entity.WanderingTrader;
-import org.bukkit.entity.WaterMob;
-import org.bukkit.entity.Witch;
-import org.bukkit.entity.Wither;
-import org.bukkit.entity.WitherSkeleton;
-import org.bukkit.entity.Wolf;
-import org.bukkit.entity.Zoglin;
-import org.bukkit.entity.Zombie;
-import org.bukkit.entity.ZombieHorse;
-import org.bukkit.entity.ZombieVillager;
+import org.bukkit.entity.*;
 
 public class MobGoalHelper {
 
@@ -143,10 +34,13 @@ public class MobGoalHelper {
         ignored.add("selector_2");
         ignored.add("wrapped");
 
+        //<editor-fold defaultstate="collapsed" desc="bukkitMap Entities">
+        // Start generate - MobGoalHelper#bukkitMap
+        // @GeneratedFrom 1.21.4
         bukkitMap.put(net.minecraft.world.entity.Mob.class, Mob.class);
         bukkitMap.put(net.minecraft.world.entity.AgeableMob.class, Ageable.class);
-        bukkitMap.put(AmbientCreature.class, Ambient.class);
-        bukkitMap.put(Animal.class, Animals.class);
+        bukkitMap.put(net.minecraft.world.entity.ambient.AmbientCreature.class, Ambient.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.Animal.class, Animals.class);
         bukkitMap.put(net.minecraft.world.entity.ambient.Bat.class, Bat.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Bee.class, Bee.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Blaze.class, Blaze.class);
@@ -155,51 +49,51 @@ public class MobGoalHelper {
         bukkitMap.put(net.minecraft.world.entity.animal.Chicken.class, Chicken.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Cod.class, Cod.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Cow.class, Cow.class);
-        bukkitMap.put(PathfinderMob.class, Creature.class);
+        bukkitMap.put(net.minecraft.world.entity.PathfinderMob.class, Creature.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Creeper.class, Creeper.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Dolphin.class, Dolphin.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Drowned.class, Drowned.class);
         bukkitMap.put(net.minecraft.world.entity.boss.enderdragon.EnderDragon.class, EnderDragon.class);
-        bukkitMap.put(EnderMan.class, Enderman.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.EnderMan.class, Enderman.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Endermite.class, Endermite.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Evoker.class, Evoker.class);
-        bukkitMap.put(AbstractFish.class, Fish.class);
-        bukkitMap.put(AbstractSchoolingFish.class, io.papermc.paper.entity.SchoolableFish.class);
-        bukkitMap.put(FlyingMob.class, Flying.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.AbstractFish.class, Fish.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.AbstractSchoolingFish.class, SchoolableFish.class);
+        bukkitMap.put(net.minecraft.world.entity.FlyingMob.class, Flying.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Fox.class, Fox.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Ghast.class, Ghast.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Giant.class, Giant.class);
-        bukkitMap.put(AbstractGolem.class, Golem.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.AbstractGolem.class, Golem.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Guardian.class, Guardian.class);
         bukkitMap.put(net.minecraft.world.entity.monster.ElderGuardian.class, ElderGuardian.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.Horse.class, Horse.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.AbstractHorse.class, AbstractHorse.class);
-        bukkitMap.put(AbstractChestedHorse.class, ChestedHorse.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.horse.AbstractChestedHorse.class, ChestedHorse.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.Donkey.class, Donkey.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.Mule.class, Mule.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.SkeletonHorse.class, SkeletonHorse.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.ZombieHorse.class, ZombieHorse.class);
-        bukkitMap.put(Camel.class, org.bukkit.entity.Camel.class);
-        bukkitMap.put(AbstractIllager.class, Illager.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.camel.Camel.class, Camel.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.AbstractIllager.class, Illager.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Illusioner.class, Illusioner.class);
-        bukkitMap.put(SpellcasterIllager.class, Spellcaster.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.SpellcasterIllager.class, Spellcaster.class);
         bukkitMap.put(net.minecraft.world.entity.animal.IronGolem.class, IronGolem.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.Llama.class, Llama.class);
         bukkitMap.put(net.minecraft.world.entity.animal.horse.TraderLlama.class, TraderLlama.class);
         bukkitMap.put(net.minecraft.world.entity.monster.MagmaCube.class, MagmaCube.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Monster.class, Monster.class);
-        bukkitMap.put(PatrollingMonster.class, Raider.class); // close enough
+        bukkitMap.put(net.minecraft.world.entity.monster.PatrollingMonster.class, Raider.class);
         bukkitMap.put(net.minecraft.world.entity.animal.MushroomCow.class, MushroomCow.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Ocelot.class, Ocelot.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Panda.class, Panda.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Parrot.class, Parrot.class);
-        bukkitMap.put(ShoulderRidingEntity.class, Parrot.class); // close enough
+        bukkitMap.put(net.minecraft.world.entity.animal.ShoulderRidingEntity.class, Parrot.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Phantom.class, Phantom.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Pig.class, Pig.class);
-        bukkitMap.put(ZombifiedPiglin.class, PigZombie.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.ZombifiedPiglin.class, PigZombie.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Pillager.class, Pillager.class);
         bukkitMap.put(net.minecraft.world.entity.animal.PolarBear.class, PolarBear.class);
-        bukkitMap.put(Pufferfish.class, PufferFish.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.Pufferfish.class, PufferFish.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Rabbit.class, Rabbit.class);
         bukkitMap.put(net.minecraft.world.entity.raid.Raider.class, Raider.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Ravager.class, Ravager.class);
@@ -212,10 +106,10 @@ public class MobGoalHelper {
         bukkitMap.put(net.minecraft.world.entity.monster.Stray.class, Stray.class);
         bukkitMap.put(net.minecraft.world.entity.monster.WitherSkeleton.class, WitherSkeleton.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Slime.class, Slime.class);
-        bukkitMap.put(SnowGolem.class, Snowman.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.SnowGolem.class, Snowman.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Spider.class, Spider.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Squid.class, Squid.class);
-        bukkitMap.put(TamableAnimal.class, Tameable.class);
+        bukkitMap.put(net.minecraft.world.entity.TamableAnimal.class, Tameable.class);
         bukkitMap.put(net.minecraft.world.entity.animal.TropicalFish.class, TropicalFish.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Turtle.class, Turtle.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Vex.class, Vex.class);
@@ -223,32 +117,34 @@ public class MobGoalHelper {
         bukkitMap.put(net.minecraft.world.entity.npc.AbstractVillager.class, AbstractVillager.class);
         bukkitMap.put(net.minecraft.world.entity.npc.WanderingTrader.class, WanderingTrader.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Vindicator.class, Vindicator.class);
-        bukkitMap.put(WaterAnimal.class, WaterMob.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.WaterAnimal.class, WaterMob.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Witch.class, Witch.class);
-        bukkitMap.put(WitherBoss.class, Wither.class);
+        bukkitMap.put(net.minecraft.world.entity.boss.wither.WitherBoss.class, Wither.class);
         bukkitMap.put(net.minecraft.world.entity.animal.Wolf.class, Wolf.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Zombie.class, Zombie.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Husk.class, Husk.class);
         bukkitMap.put(net.minecraft.world.entity.monster.ZombieVillager.class, ZombieVillager.class);
         bukkitMap.put(net.minecraft.world.entity.monster.hoglin.Hoglin.class, Hoglin.class);
         bukkitMap.put(net.minecraft.world.entity.monster.piglin.Piglin.class, Piglin.class);
-        bukkitMap.put(AbstractPiglin.class, PiglinAbstract.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.piglin.AbstractPiglin.class, PiglinAbstract.class);
         bukkitMap.put(net.minecraft.world.entity.monster.piglin.PiglinBrute.class, PiglinBrute.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Strider.class, Strider.class);
         bukkitMap.put(net.minecraft.world.entity.monster.Zoglin.class, Zoglin.class);
-        bukkitMap.put(net.minecraft.world.entity.GlowSquid.class, org.bukkit.entity.GlowSquid.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.axolotl.Axolotl.class, org.bukkit.entity.Axolotl.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.goat.Goat.class, org.bukkit.entity.Goat.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.frog.Frog.class, org.bukkit.entity.Frog.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.frog.Tadpole.class, org.bukkit.entity.Tadpole.class);
-        bukkitMap.put(net.minecraft.world.entity.monster.warden.Warden.class, org.bukkit.entity.Warden.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.allay.Allay.class, org.bukkit.entity.Allay.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.sniffer.Sniffer.class, org.bukkit.entity.Sniffer.class);
-        bukkitMap.put(Breeze.class, org.bukkit.entity.Breeze.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.armadillo.Armadillo.class, org.bukkit.entity.Armadillo.class);
-        bukkitMap.put(net.minecraft.world.entity.monster.Bogged.class, org.bukkit.entity.Bogged.class);
-        bukkitMap.put(net.minecraft.world.entity.monster.creaking.Creaking.class, org.bukkit.entity.Creaking.class);
-        bukkitMap.put(net.minecraft.world.entity.animal.AgeableWaterCreature.class, org.bukkit.entity.Squid.class); // close enough
+        bukkitMap.put(net.minecraft.world.entity.GlowSquid.class, GlowSquid.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.axolotl.Axolotl.class, Axolotl.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.goat.Goat.class, Goat.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.frog.Frog.class, Frog.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.frog.Tadpole.class, Tadpole.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.warden.Warden.class, Warden.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.allay.Allay.class, Allay.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.sniffer.Sniffer.class, Sniffer.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.breeze.Breeze.class, Breeze.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.armadillo.Armadillo.class, Armadillo.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.Bogged.class, Bogged.class);
+        bukkitMap.put(net.minecraft.world.entity.monster.creaking.Creaking.class, Creaking.class);
+        bukkitMap.put(net.minecraft.world.entity.animal.AgeableWaterCreature.class, Squid.class);
+        // End generate - MobGoalHelper#bukkitMap
+        //</editor-fold>
     }
 
     public static String getUsableName(Class<?> clazz) {
@@ -267,7 +163,6 @@ public class MobGoalHelper {
                 name = cut;
             }
         }
-        name = name.replace("PathfinderGoal", "");
         name = name.replace("TargetGoal", "");
         name = name.replace("Goal", "");
         StringBuilder sb = new StringBuilder();
@@ -365,7 +260,7 @@ public class MobGoalHelper {
                     }
                 }
             }
-            throw new RuntimeException("Can't figure out applicable entity for mob goal " + goalClass); // maybe just return EntityInsentient?
+            throw new RuntimeException("Can't figure out applicable entity for mob goal " + goalClass); // maybe just return Mob?
         });
     }
 
diff --git a/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperVanillaGoal.java b/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperGoal.java
similarity index 89%
rename from paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperVanillaGoal.java
rename to paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperGoal.java
index b5c594a549..74d172166b 100644
--- a/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperVanillaGoal.java
+++ b/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperGoal.java
@@ -7,14 +7,14 @@ import org.bukkit.entity.Mob;
 /**
  * Wraps vanilla in api
  */
-public class PaperVanillaGoal<T extends Mob> implements VanillaGoal<T> {
+public class PaperGoal<T extends Mob> implements com.destroystokyo.paper.entity.ai.Goal<T> {
 
     private final Goal handle;
     private final GoalKey<T> key;
 
     private final EnumSet<GoalType> types;
 
-    public PaperVanillaGoal(Goal handle) {
+    public PaperGoal(Goal handle) {
         this.handle = handle;
         this.key = MobGoalHelper.getKey(handle.getClass());
         this.types = MobGoalHelper.vanillaToPaper(handle);
diff --git a/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperMobGoals.java b/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperMobGoals.java
index 7e72fbb165..a617e3d618 100644
--- a/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperMobGoals.java
+++ b/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/PaperMobGoals.java
@@ -20,8 +20,8 @@ public class PaperMobGoals implements MobGoals {
         CraftMob craftMob = (CraftMob) mob;
         net.minecraft.world.entity.ai.goal.Goal mojangGoal;
 
-        if (goal instanceof PaperVanillaGoal vanillaGoal) {
-            mojangGoal = vanillaGoal.getHandle();
+        if (goal instanceof PaperGoal<?> paperGoal) {
+            mojangGoal = paperGoal.getHandle();
         } else {
             mojangGoal = new PaperCustomGoal<>(goal);
         }
@@ -34,8 +34,8 @@ public class PaperMobGoals implements MobGoals {
         CraftMob craftMob = (CraftMob) mob;
         if (goal instanceof PaperCustomGoal) {
             getHandle(craftMob, goal.getTypes()).removeGoal((net.minecraft.world.entity.ai.goal.Goal) goal);
-        } else if (goal instanceof PaperVanillaGoal) {
-            getHandle(craftMob, goal.getTypes()).removeGoal(((PaperVanillaGoal<?>) goal).getHandle());
+        } else if (goal instanceof PaperGoal) {
+            getHandle(craftMob, goal.getTypes()).removeGoal(((PaperGoal<?>) goal).getHandle());
         } else {
             List<net.minecraft.world.entity.ai.goal.Goal> toRemove = new LinkedList<>();
             for (WrappedGoal item : getHandle(craftMob, goal.getTypes()).getAvailableGoals()) {
@@ -127,7 +127,7 @@ public class PaperMobGoals implements MobGoals {
                 //noinspection unchecked
                 goals.add(((PaperCustomGoal<T>) item.getGoal()).getHandle());
             } else {
-                goals.add(item.getGoal().asPaperVanillaGoal());
+                goals.add(item.getGoal().asPaperGoal());
             }
         }
         return goals;
@@ -150,7 +150,7 @@ public class PaperMobGoals implements MobGoals {
                     //noinspection unchecked
                     goals.add(((PaperCustomGoal<T>) item.getGoal()).getHandle());
                 } else {
-                    goals.add(item.getGoal().asPaperVanillaGoal());
+                    goals.add(item.getGoal().asPaperGoal());
                 }
             }
         }
@@ -178,7 +178,7 @@ public class PaperMobGoals implements MobGoals {
                     //noinspection unchecked
                     goals.add(((PaperCustomGoal<T>) item.getGoal()).getHandle());
                 } else {
-                    goals.add(item.getGoal().asPaperVanillaGoal());
+                    goals.add(item.getGoal().asPaperGoal());
                 }
             });
         return goals;
@@ -201,7 +201,7 @@ public class PaperMobGoals implements MobGoals {
                         //noinspection unchecked
                         goals.add(((PaperCustomGoal<T>) item.getGoal()).getHandle());
                     } else {
-                        goals.add(item.getGoal().asPaperVanillaGoal());
+                        goals.add(item.getGoal().asPaperGoal());
                     }
                 });
         }
diff --git a/paper-server/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java b/paper-server/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java
index 479bc32241..c50e06ff83 100644
--- a/paper-server/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java
+++ b/paper-server/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java
@@ -4,12 +4,7 @@ import com.google.common.base.Preconditions;
 import io.papermc.paper.block.fluid.type.PaperFallingFluidData;
 import io.papermc.paper.block.fluid.type.PaperFlowingFluidData;
 import io.papermc.paper.util.MCUtil;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Function;
 import net.minecraft.world.level.material.FluidState;
-import net.minecraft.world.level.material.LavaFluid;
-import net.minecraft.world.level.material.WaterFluid;
 import org.bukkit.Fluid;
 import org.bukkit.Location;
 import org.bukkit.craftbukkit.CraftFluid;
@@ -88,23 +83,10 @@ public class PaperFluidData implements FluidData {
         return "PaperFluidData{" + this.state + "}";
     }
 
-    /* Registry */
-    private static final Map<Class<? extends net.minecraft.world.level.material.Fluid>, Function<FluidState, PaperFluidData>> MAP = new HashMap<>();
-    static {
-        //<editor-fold desc="PaperFluidData Registration" defaultstate="collapsed">
-        register(LavaFluid.Source.class, PaperFallingFluidData::new);
-        register(WaterFluid.Source.class, PaperFallingFluidData::new);
-        register(LavaFluid.Flowing.class, PaperFlowingFluidData::new);
-        register(WaterFluid.Flowing.class, PaperFlowingFluidData::new);
-        //</editor-fold>
-    }
-
-    static void register(final Class<? extends net.minecraft.world.level.material.Fluid> fluid, final Function<FluidState, PaperFluidData> creator) {
-        Preconditions.checkState(MAP.put(fluid, creator) == null, "Duplicate mapping %s->%s", fluid, creator);
-        MAP.put(fluid, creator);
-    }
-
     public static PaperFluidData createData(final FluidState state) {
-        return MAP.getOrDefault(state.getType().getClass(), PaperFluidData::new).apply(state);
+        if (state.isEmpty()) {
+            return new PaperFluidData(state);
+        }
+        return state.isSource() ? new PaperFallingFluidData(state) : new PaperFlowingFluidData(state);
     }
 }
diff --git a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java
index c0b17315a3..4952df704f 100644
--- a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java
+++ b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java
@@ -83,7 +83,9 @@ public final class PaperRegistries {
     private static final Map<ResourceKey<?>, RegistryEntry<?, ?>> BY_RESOURCE_KEY;
     static {
         REGISTRY_ENTRIES = List.of(
-            // built-ins
+            // Start generate - RegistryDefinitions
+            // @GeneratedFrom 1.21.4
+            // built-in
             start(Registries.GAME_EVENT, RegistryKey.GAME_EVENT).craft(GameEvent.class, CraftGameEvent::new).writable(PaperGameEventRegistryEntry.PaperBuilder::new),
             start(Registries.STRUCTURE_TYPE, RegistryKey.STRUCTURE_TYPE).craft(StructureType.class, CraftStructureType::new).build(),
             start(Registries.MOB_EFFECT, RegistryKey.MOB_EFFECT).craft(PotionEffectType.class, CraftPotionEffectType::new).build(),
@@ -100,7 +102,7 @@ public final class PaperRegistries {
             start(Registries.SOUND_EVENT, RegistryKey.SOUND_EVENT).craft(Sound.class, CraftSound::new, true).build(),
             start(Registries.DATA_COMPONENT_TYPE, RegistryKey.DATA_COMPONENT_TYPE).craft(DataComponentTypes.class, PaperDataComponentType::of).build(),
 
-            // data-drivens
+            // data-driven
             start(Registries.BIOME, RegistryKey.BIOME).craft(Biome.class, CraftBiome::new).build().delayed(),
             start(Registries.STRUCTURE, RegistryKey.STRUCTURE).craft(Structure.class, CraftStructure::new).build().delayed(),
             start(Registries.TRIM_MATERIAL, RegistryKey.TRIM_MATERIAL).craft(TrimMaterial.class, CraftTrimMaterial::new, true).build().delayed(),
@@ -117,7 +119,8 @@ public final class PaperRegistries {
             start(Registries.ENTITY_TYPE, RegistryKey.ENTITY_TYPE).apiOnly(PaperSimpleRegistry::entityType),
             start(Registries.PARTICLE_TYPE, RegistryKey.PARTICLE_TYPE).apiOnly(PaperSimpleRegistry::particleType),
             start(Registries.POTION, RegistryKey.POTION).apiOnly(PaperSimpleRegistry::potion),
-            start(Registries.MEMORY_MODULE_TYPE, RegistryKey.MEMORY_MODULE_TYPE).apiOnly(() -> (org.bukkit.Registry<MemoryKey<?>>) (org.bukkit.Registry) org.bukkit.Registry.MEMORY_MODULE_TYPE)
+            start(Registries.MEMORY_MODULE_TYPE, RegistryKey.MEMORY_MODULE_TYPE).apiOnly(() -> org.bukkit.Registry.MEMORY_MODULE_TYPE)
+            // End generate - RegistryDefinitions
         );
         final Map<RegistryKey<?>, RegistryEntry<?, ?>> byRegistryKey = new IdentityHashMap<>(REGISTRY_ENTRIES.size());
         final Map<ResourceKey<?>, RegistryEntry<?, ?>> byResourceKey = new IdentityHashMap<>(REGISTRY_ENTRIES.size());
diff --git a/paper-server/src/main/java/io/papermc/paper/world/flag/PaperFeatureFlagProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/world/flag/PaperFeatureFlagProviderImpl.java
index f70bc7833f..caa96435e9 100644
--- a/paper-server/src/main/java/io/papermc/paper/world/flag/PaperFeatureFlagProviderImpl.java
+++ b/paper-server/src/main/java/io/papermc/paper/world/flag/PaperFeatureFlagProviderImpl.java
@@ -19,10 +19,13 @@ import org.bukkit.potion.PotionType;
 public class PaperFeatureFlagProviderImpl implements FeatureFlagProvider {
 
     public static final BiMap<FeatureFlag, net.minecraft.world.flag.FeatureFlag> FLAGS = ImmutableBiMap.of(
-        FeatureFlag.VANILLA, FeatureFlags.VANILLA,
-        FeatureFlag.TRADE_REBALANCE, FeatureFlags.TRADE_REBALANCE,
+        // Start generate - PaperFeatureFlagProviderImpl#FLAGS
+        // @GeneratedFrom 1.21.4
         FeatureFlag.MINECART_IMPROVEMENTS, FeatureFlags.MINECART_IMPROVEMENTS,
-        FeatureFlag.REDSTONE_EXPERIMENTS, FeatureFlags.REDSTONE_EXPERIMENTS
+        FeatureFlag.REDSTONE_EXPERIMENTS, FeatureFlags.REDSTONE_EXPERIMENTS,
+        FeatureFlag.TRADE_REBALANCE, FeatureFlags.TRADE_REBALANCE,
+        FeatureFlag.VANILLA, FeatureFlags.VANILLA
+        // End generate - PaperFeatureFlagProviderImpl#FLAGS
     );
 
     @Override
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java
index ccee1f637d..474ba04e57 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java
@@ -20,89 +20,95 @@ import org.bukkit.craftbukkit.inventory.CraftItemType;
 import org.bukkit.entity.EntityType;
 
 public enum CraftStatistic {
-    DAMAGE_DEALT(Stats.DAMAGE_DEALT),
-    DAMAGE_TAKEN(Stats.DAMAGE_TAKEN),
-    DEATHS(Stats.DEATHS),
-    MOB_KILLS(Stats.MOB_KILLS),
-    PLAYER_KILLS(Stats.PLAYER_KILLS),
-    FISH_CAUGHT(Stats.FISH_CAUGHT),
+    // Start generate - CraftStatisticCustom
+    // @GeneratedFrom 1.21.4
     ANIMALS_BRED(Stats.ANIMALS_BRED),
-    LEAVE_GAME(Stats.LEAVE_GAME),
-    JUMP(Stats.JUMP),
-    DROP_COUNT(Stats.DROP),
-    DROP(ResourceLocation.withDefaultNamespace("dropped")),
-    PICKUP(ResourceLocation.withDefaultNamespace("picked_up")),
-    PLAY_ONE_MINUTE(Stats.PLAY_TIME),
-    TOTAL_WORLD_TIME(Stats.TOTAL_WORLD_TIME),
-    WALK_ONE_CM(Stats.WALK_ONE_CM),
-    WALK_ON_WATER_ONE_CM(Stats.WALK_ON_WATER_ONE_CM),
-    FALL_ONE_CM(Stats.FALL_ONE_CM),
-    SNEAK_TIME(Stats.CROUCH_TIME),
-    CLIMB_ONE_CM(Stats.CLIMB_ONE_CM),
-    FLY_ONE_CM(Stats.FLY_ONE_CM),
-    WALK_UNDER_WATER_ONE_CM(Stats.WALK_UNDER_WATER_ONE_CM),
-    MINECART_ONE_CM(Stats.MINECART_ONE_CM),
-    BOAT_ONE_CM(Stats.BOAT_ONE_CM),
-    PIG_ONE_CM(Stats.PIG_ONE_CM),
-    HORSE_ONE_CM(Stats.HORSE_ONE_CM),
-    SPRINT_ONE_CM(Stats.SPRINT_ONE_CM),
-    CROUCH_ONE_CM(Stats.CROUCH_ONE_CM),
     AVIATE_ONE_CM(Stats.AVIATE_ONE_CM),
-    MINE_BLOCK(ResourceLocation.withDefaultNamespace("mined")),
-    USE_ITEM(ResourceLocation.withDefaultNamespace("used")),
-    BREAK_ITEM(ResourceLocation.withDefaultNamespace("broken")),
-    CRAFT_ITEM(ResourceLocation.withDefaultNamespace("crafted")),
-    KILL_ENTITY(ResourceLocation.withDefaultNamespace("killed")),
-    ENTITY_KILLED_BY(ResourceLocation.withDefaultNamespace("killed_by")),
-    TIME_SINCE_DEATH(Stats.TIME_SINCE_DEATH),
-    TALKED_TO_VILLAGER(Stats.TALKED_TO_VILLAGER),
-    TRADED_WITH_VILLAGER(Stats.TRADED_WITH_VILLAGER),
-    CAKE_SLICES_EATEN(Stats.EAT_CAKE_SLICE),
-    CAULDRON_FILLED(Stats.FILL_CAULDRON),
-    CAULDRON_USED(Stats.USE_CAULDRON),
+    BELL_RING(Stats.BELL_RING),
+    BOAT_ONE_CM(Stats.BOAT_ONE_CM),
     ARMOR_CLEANED(Stats.CLEAN_ARMOR),
     BANNER_CLEANED(Stats.CLEAN_BANNER),
-    BREWINGSTAND_INTERACTION(Stats.INTERACT_WITH_BREWINGSTAND),
-    BEACON_INTERACTION(Stats.INTERACT_WITH_BEACON),
-    DROPPER_INSPECTED(Stats.INSPECT_DROPPER),
-    HOPPER_INSPECTED(Stats.INSPECT_HOPPER),
-    DISPENSER_INSPECTED(Stats.INSPECT_DISPENSER),
-    NOTEBLOCK_PLAYED(Stats.PLAY_NOTEBLOCK),
-    NOTEBLOCK_TUNED(Stats.TUNE_NOTEBLOCK),
-    FLOWER_POTTED(Stats.POT_FLOWER),
-    TRAPPED_CHEST_TRIGGERED(Stats.TRIGGER_TRAPPED_CHEST),
-    ENDERCHEST_OPENED(Stats.OPEN_ENDERCHEST),
-    ITEM_ENCHANTED(Stats.ENCHANT_ITEM),
-    RECORD_PLAYED(Stats.PLAY_RECORD),
-    FURNACE_INTERACTION(Stats.INTERACT_WITH_FURNACE),
-    CRAFTING_TABLE_INTERACTION(Stats.INTERACT_WITH_CRAFTING_TABLE),
-    CHEST_OPENED(Stats.OPEN_CHEST),
-    SLEEP_IN_BED(Stats.SLEEP_IN_BED),
-    SHULKER_BOX_OPENED(Stats.OPEN_SHULKER_BOX),
-    TIME_SINCE_REST(Stats.TIME_SINCE_REST),
-    SWIM_ONE_CM(Stats.SWIM_ONE_CM),
+    CLEAN_SHULKER_BOX(Stats.CLEAN_SHULKER_BOX),
+    CLIMB_ONE_CM(Stats.CLIMB_ONE_CM),
+    CROUCH_ONE_CM(Stats.CROUCH_ONE_CM),
+    DAMAGE_ABSORBED(Stats.DAMAGE_ABSORBED),
+    DAMAGE_BLOCKED_BY_SHIELD(Stats.DAMAGE_BLOCKED_BY_SHIELD),
+    DAMAGE_DEALT(Stats.DAMAGE_DEALT),
     DAMAGE_DEALT_ABSORBED(Stats.DAMAGE_DEALT_ABSORBED),
     DAMAGE_DEALT_RESISTED(Stats.DAMAGE_DEALT_RESISTED),
-    DAMAGE_BLOCKED_BY_SHIELD(Stats.DAMAGE_BLOCKED_BY_SHIELD),
-    DAMAGE_ABSORBED(Stats.DAMAGE_ABSORBED),
     DAMAGE_RESISTED(Stats.DAMAGE_RESISTED),
-    CLEAN_SHULKER_BOX(Stats.CLEAN_SHULKER_BOX),
-    OPEN_BARREL(Stats.OPEN_BARREL),
+    DAMAGE_TAKEN(Stats.DAMAGE_TAKEN),
+    DEATHS(Stats.DEATHS),
+    DROP_COUNT(Stats.DROP),
+    CAKE_SLICES_EATEN(Stats.EAT_CAKE_SLICE),
+    ITEM_ENCHANTED(Stats.ENCHANT_ITEM),
+    FALL_ONE_CM(Stats.FALL_ONE_CM),
+    CAULDRON_FILLED(Stats.FILL_CAULDRON),
+    FISH_CAUGHT(Stats.FISH_CAUGHT),
+    FLY_ONE_CM(Stats.FLY_ONE_CM),
+    HORSE_ONE_CM(Stats.HORSE_ONE_CM),
+    DISPENSER_INSPECTED(Stats.INSPECT_DISPENSER),
+    DROPPER_INSPECTED(Stats.INSPECT_DROPPER),
+    HOPPER_INSPECTED(Stats.INSPECT_HOPPER),
+    INTERACT_WITH_ANVIL(Stats.INTERACT_WITH_ANVIL),
+    BEACON_INTERACTION(Stats.INTERACT_WITH_BEACON),
     INTERACT_WITH_BLAST_FURNACE(Stats.INTERACT_WITH_BLAST_FURNACE),
-    INTERACT_WITH_SMOKER(Stats.INTERACT_WITH_SMOKER),
-    INTERACT_WITH_LECTERN(Stats.INTERACT_WITH_LECTERN),
+    BREWINGSTAND_INTERACTION(Stats.INTERACT_WITH_BREWINGSTAND),
     INTERACT_WITH_CAMPFIRE(Stats.INTERACT_WITH_CAMPFIRE),
     INTERACT_WITH_CARTOGRAPHY_TABLE(Stats.INTERACT_WITH_CARTOGRAPHY_TABLE),
+    CRAFTING_TABLE_INTERACTION(Stats.INTERACT_WITH_CRAFTING_TABLE),
+    FURNACE_INTERACTION(Stats.INTERACT_WITH_FURNACE),
+    INTERACT_WITH_GRINDSTONE(Stats.INTERACT_WITH_GRINDSTONE),
+    INTERACT_WITH_LECTERN(Stats.INTERACT_WITH_LECTERN),
     INTERACT_WITH_LOOM(Stats.INTERACT_WITH_LOOM),
+    INTERACT_WITH_SMITHING_TABLE(Stats.INTERACT_WITH_SMITHING_TABLE),
+    INTERACT_WITH_SMOKER(Stats.INTERACT_WITH_SMOKER),
     INTERACT_WITH_STONECUTTER(Stats.INTERACT_WITH_STONECUTTER),
-    BELL_RING(Stats.BELL_RING),
+    JUMP(Stats.JUMP),
+    LEAVE_GAME(Stats.LEAVE_GAME),
+    MINECART_ONE_CM(Stats.MINECART_ONE_CM),
+    MOB_KILLS(Stats.MOB_KILLS),
+    OPEN_BARREL(Stats.OPEN_BARREL),
+    CHEST_OPENED(Stats.OPEN_CHEST),
+    ENDERCHEST_OPENED(Stats.OPEN_ENDERCHEST),
+    SHULKER_BOX_OPENED(Stats.OPEN_SHULKER_BOX),
+    PIG_ONE_CM(Stats.PIG_ONE_CM),
+    NOTEBLOCK_PLAYED(Stats.PLAY_NOTEBLOCK),
+    RECORD_PLAYED(Stats.PLAY_RECORD),
+    PLAY_ONE_MINUTE(Stats.PLAY_TIME),
+    PLAYER_KILLS(Stats.PLAYER_KILLS),
+    FLOWER_POTTED(Stats.POT_FLOWER),
     RAID_TRIGGER(Stats.RAID_TRIGGER),
     RAID_WIN(Stats.RAID_WIN),
-    INTERACT_WITH_ANVIL(Stats.INTERACT_WITH_ANVIL),
-    INTERACT_WITH_GRINDSTONE(Stats.INTERACT_WITH_GRINDSTONE),
+    SLEEP_IN_BED(Stats.SLEEP_IN_BED),
+    SNEAK_TIME(Stats.CROUCH_TIME),
+    SPRINT_ONE_CM(Stats.SPRINT_ONE_CM),
+    STRIDER_ONE_CM(Stats.STRIDER_ONE_CM),
+    SWIM_ONE_CM(Stats.SWIM_ONE_CM),
+    TALKED_TO_VILLAGER(Stats.TALKED_TO_VILLAGER),
     TARGET_HIT(Stats.TARGET_HIT),
-    INTERACT_WITH_SMITHING_TABLE(Stats.INTERACT_WITH_SMITHING_TABLE),
-    STRIDER_ONE_CM(Stats.STRIDER_ONE_CM);
+    TIME_SINCE_DEATH(Stats.TIME_SINCE_DEATH),
+    TIME_SINCE_REST(Stats.TIME_SINCE_REST),
+    TOTAL_WORLD_TIME(Stats.TOTAL_WORLD_TIME),
+    TRADED_WITH_VILLAGER(Stats.TRADED_WITH_VILLAGER),
+    TRAPPED_CHEST_TRIGGERED(Stats.TRIGGER_TRAPPED_CHEST),
+    NOTEBLOCK_TUNED(Stats.TUNE_NOTEBLOCK),
+    CAULDRON_USED(Stats.USE_CAULDRON),
+    WALK_ON_WATER_ONE_CM(Stats.WALK_ON_WATER_ONE_CM),
+    WALK_ONE_CM(Stats.WALK_ONE_CM),
+    WALK_UNDER_WATER_ONE_CM(Stats.WALK_UNDER_WATER_ONE_CM),
+    // End generate - CraftStatisticCustom
+    // Start generate - CraftStatisticType
+    // @GeneratedFrom 1.21.4
+    BREAK_ITEM(ResourceLocation.withDefaultNamespace("broken")),
+    CRAFT_ITEM(ResourceLocation.withDefaultNamespace("crafted")),
+    DROP(ResourceLocation.withDefaultNamespace("dropped")),
+    KILL_ENTITY(ResourceLocation.withDefaultNamespace("killed")),
+    ENTITY_KILLED_BY(ResourceLocation.withDefaultNamespace("killed_by")),
+    MINE_BLOCK(ResourceLocation.withDefaultNamespace("mined")),
+    PICKUP(ResourceLocation.withDefaultNamespace("picked_up")),
+    USE_ITEM(ResourceLocation.withDefaultNamespace("used"));
+    // End generate - CraftStatisticType
     private final ResourceLocation minecraftKey;
     private final org.bukkit.Statistic bukkit;
     private static final BiMap<ResourceLocation, org.bukkit.Statistic> statistics;
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
index 56453454cb..acda45ddab 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
@@ -133,53 +133,54 @@ public final class CraftBlockStates {
     // Paper end
 
     static {
-        // Paper start - simplify
-        register(BlockEntityType.SIGN, CraftSign.class, CraftSign::new);
-        register(BlockEntityType.HANGING_SIGN, CraftHangingSign.class, CraftHangingSign::new);
-        register(BlockEntityType.SKULL, CraftSkull.class, CraftSkull::new);
-        register(BlockEntityType.COMMAND_BLOCK, CraftCommandBlock.class, CraftCommandBlock::new);
+        // Start generate - CraftBlockEntityStates
+        // @GeneratedFrom 1.21.4
         register(BlockEntityType.BANNER, CraftBanner.class, CraftBanner::new);
-        register(BlockEntityType.SHULKER_BOX, CraftShulkerBox.class, CraftShulkerBox::new);
-        register(BlockEntityType.BED, CraftBed.class, CraftBed::new);
-        register(BlockEntityType.BEEHIVE, CraftBeehive.class, CraftBeehive::new);
-        register(BlockEntityType.CAMPFIRE, CraftCampfire.class, CraftCampfire::new);
         register(BlockEntityType.BARREL, CraftBarrel.class, CraftBarrel::new);
         register(BlockEntityType.BEACON, CraftBeacon.class, CraftBeacon::new);
+        register(BlockEntityType.BED, CraftBed.class, CraftBed::new);
+        register(BlockEntityType.BEEHIVE, CraftBeehive.class, CraftBeehive::new);
         register(BlockEntityType.BELL, CraftBell.class, CraftBell::new);
         register(BlockEntityType.BLAST_FURNACE, CraftBlastFurnace.class, CraftBlastFurnace::new);
         register(BlockEntityType.BREWING_STAND, CraftBrewingStand.class, CraftBrewingStand::new);
+        register(BlockEntityType.BRUSHABLE_BLOCK, CraftBrushableBlock.class, CraftBrushableBlock::new);
+        register(BlockEntityType.CALIBRATED_SCULK_SENSOR, CraftCalibratedSculkSensor.class, CraftCalibratedSculkSensor::new);
+        register(BlockEntityType.CAMPFIRE, CraftCampfire.class, CraftCampfire::new);
         register(BlockEntityType.CHEST, CraftChest.class, CraftChest::new);
         register(BlockEntityType.CHISELED_BOOKSHELF, CraftChiseledBookshelf.class, CraftChiseledBookshelf::new);
+        register(BlockEntityType.COMMAND_BLOCK, CraftCommandBlock.class, CraftCommandBlock::new);
         register(BlockEntityType.COMPARATOR, CraftComparator.class, CraftComparator::new);
         register(BlockEntityType.CONDUIT, CraftConduit.class, CraftConduit::new);
+        register(BlockEntityType.CRAFTER, CraftCrafter.class, CraftCrafter::new);
         register(BlockEntityType.CREAKING_HEART, CraftCreakingHeart.class, CraftCreakingHeart::new);
         register(BlockEntityType.DAYLIGHT_DETECTOR, CraftDaylightDetector.class, CraftDaylightDetector::new);
         register(BlockEntityType.DECORATED_POT, CraftDecoratedPot.class, CraftDecoratedPot::new);
         register(BlockEntityType.DISPENSER, CraftDispenser.class, CraftDispenser::new);
         register(BlockEntityType.DROPPER, CraftDropper.class, CraftDropper::new);
         register(BlockEntityType.ENCHANTING_TABLE, CraftEnchantingTable.class, CraftEnchantingTable::new);
-        register(BlockEntityType.ENDER_CHEST, CraftEnderChest.class, CraftEnderChest::new);
         register(BlockEntityType.END_GATEWAY, CraftEndGateway.class, CraftEndGateway::new);
         register(BlockEntityType.END_PORTAL, CraftEndPortal.class, CraftEndPortal::new);
+        register(BlockEntityType.ENDER_CHEST, CraftEnderChest.class, CraftEnderChest::new);
         register(BlockEntityType.FURNACE, CraftFurnaceFurnace.class, CraftFurnaceFurnace::new);
+        register(BlockEntityType.HANGING_SIGN, CraftHangingSign.class, CraftHangingSign::new);
         register(BlockEntityType.HOPPER, CraftHopper.class, CraftHopper::new);
         register(BlockEntityType.JIGSAW, CraftJigsaw.class, CraftJigsaw::new);
         register(BlockEntityType.JUKEBOX, CraftJukebox.class, CraftJukebox::new);
         register(BlockEntityType.LECTERN, CraftLectern.class, CraftLectern::new);
+        register(BlockEntityType.MOB_SPAWNER, CraftCreatureSpawner.class, CraftCreatureSpawner::new);
         register(BlockEntityType.PISTON, CraftMovingPiston.class, CraftMovingPiston::new);
         register(BlockEntityType.SCULK_CATALYST, CraftSculkCatalyst.class, CraftSculkCatalyst::new);
         register(BlockEntityType.SCULK_SENSOR, CraftSculkSensor.class, CraftSculkSensor::new);
         register(BlockEntityType.SCULK_SHRIEKER, CraftSculkShrieker.class, CraftSculkShrieker::new);
-        register(BlockEntityType.CALIBRATED_SCULK_SENSOR, CraftCalibratedSculkSensor.class, CraftCalibratedSculkSensor::new);
+        register(BlockEntityType.SHULKER_BOX, CraftShulkerBox.class, CraftShulkerBox::new);
+        register(BlockEntityType.SIGN, CraftSign.class, CraftSign::new);
+        register(BlockEntityType.SKULL, CraftSkull.class, CraftSkull::new);
         register(BlockEntityType.SMOKER, CraftSmoker.class, CraftSmoker::new);
-        register(BlockEntityType.MOB_SPAWNER, CraftCreatureSpawner.class, CraftCreatureSpawner::new);
         register(BlockEntityType.STRUCTURE_BLOCK, CraftStructureBlock.class, CraftStructureBlock::new);
-        register(BlockEntityType.BRUSHABLE_BLOCK, CraftBrushableBlock.class, CraftBrushableBlock::new); // note: spigot still uses CraftSuspiciousSand impl for that block type
         register(BlockEntityType.TRAPPED_CHEST, CraftChest.class, CraftChest::new);
-        register(BlockEntityType.CRAFTER, CraftCrafter.class, CraftCrafter::new);
         register(BlockEntityType.TRIAL_SPAWNER, CraftTrialSpawner.class, CraftTrialSpawner::new);
         register(BlockEntityType.VAULT, CraftVault.class, CraftVault::new);
-        // Paper end
+        // End generate - CraftBlockEntityStates
     }
 
     private static void register(Material blockType, BlockStateFactory<?> factory) {
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAgeable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAgeable.java
deleted file mode 100644
index 09616eb1b2..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAgeable.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Ageable;
-
-public abstract class CraftAgeable extends CraftBlockData implements Ageable {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger("age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftAgeable.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftAgeable.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftAgeable.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAnaloguePowerable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAnaloguePowerable.java
deleted file mode 100644
index 2b9b115a7b..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAnaloguePowerable.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.AnaloguePowerable;
-
-public abstract class CraftAnaloguePowerable extends CraftBlockData implements AnaloguePowerable {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty POWER = getInteger("power");
-
-    @Override
-    public int getPower() {
-        return this.get(CraftAnaloguePowerable.POWER);
-    }
-
-    @Override
-    public void setPower(int power) {
-        this.set(CraftAnaloguePowerable.POWER, power);
-    }
-
-    @Override
-    public int getMaximumPower() {
-        return getMax(CraftAnaloguePowerable.POWER);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAttachable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAttachable.java
deleted file mode 100644
index 005ff155e1..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftAttachable.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Attachable;
-
-public abstract class CraftAttachable extends CraftBlockData implements Attachable {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty ATTACHED = getBoolean("attached");
-
-    @Override
-    public boolean isAttached() {
-        return this.get(CraftAttachable.ATTACHED);
-    }
-
-    @Override
-    public void setAttached(boolean attached) {
-        this.set(CraftAttachable.ATTACHED, attached);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBisected.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBisected.java
deleted file mode 100644
index c8dd400c7b..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBisected.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Bisected;
-
-public class CraftBisected extends CraftBlockData implements Bisected {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum("half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftBisected.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftBisected.HALF, half);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
index 66e40149a5..a77deb2d7a 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
@@ -340,197 +340,181 @@ public class CraftBlockData implements BlockData {
         return state;
     }
 
-    /**
-     * Get the minimum value allowed by the BlockStateInteger.
-     *
-     * @param state the state to check
-     * @return the minimum value allowed
-     */
-    protected static int getMin(IntegerProperty state) {
-        return state.min;
-    }
+    public static final BlockFace[] ROTATION_CYCLE = {
+        BlockFace.SOUTH, BlockFace.SOUTH_SOUTH_WEST, BlockFace.SOUTH_WEST, BlockFace.WEST_SOUTH_WEST,
+        BlockFace.WEST, BlockFace.WEST_NORTH_WEST, BlockFace.NORTH_WEST, BlockFace.NORTH_NORTH_WEST,
+        BlockFace.NORTH, BlockFace.NORTH_NORTH_EAST, BlockFace.NORTH_EAST, BlockFace.EAST_NORTH_EAST,
+        BlockFace.EAST, BlockFace.EAST_SOUTH_EAST, BlockFace.SOUTH_EAST, BlockFace.SOUTH_SOUTH_EAST
+    };
 
-    /**
-     * Get the maximum value allowed by the BlockStateInteger.
-     *
-     * @param state the state to check
-     * @return the maximum value allowed
-     */
-    protected static int getMax(IntegerProperty state) {
-        return state.max;
-    }
-
-    //
     private static final Map<Class<? extends Block>, Function<net.minecraft.world.level.block.state.BlockState, CraftBlockData>> MAP = new HashMap<>();
 
     static {
         //<editor-fold desc="CraftBlockData Registration" defaultstate="collapsed">
+        // Start generate - CraftBlockData#MAP
+        // @GeneratedFrom 1.21.4
         register(net.minecraft.world.level.block.AmethystClusterBlock.class, org.bukkit.craftbukkit.block.impl.CraftAmethystCluster::new);
-        register(net.minecraft.world.level.block.BigDripleafBlock.class, org.bukkit.craftbukkit.block.impl.CraftBigDripleaf::new);
-        register(net.minecraft.world.level.block.BigDripleafStemBlock.class, org.bukkit.craftbukkit.block.impl.CraftBigDripleafStem::new);
         register(net.minecraft.world.level.block.AnvilBlock.class, org.bukkit.craftbukkit.block.impl.CraftAnvil::new);
-        register(net.minecraft.world.level.block.BambooStalkBlock.class, org.bukkit.craftbukkit.block.impl.CraftBamboo::new);
+        register(net.minecraft.world.level.block.AttachedStemBlock.class, org.bukkit.craftbukkit.block.impl.CraftAttachedStem::new);
+        register(net.minecraft.world.level.block.BambooStalkBlock.class, org.bukkit.craftbukkit.block.impl.CraftBambooStalk::new);
         register(net.minecraft.world.level.block.BannerBlock.class, org.bukkit.craftbukkit.block.impl.CraftBanner::new);
-        register(net.minecraft.world.level.block.WallBannerBlock.class, org.bukkit.craftbukkit.block.impl.CraftBannerWall::new);
         register(net.minecraft.world.level.block.BarrelBlock.class, org.bukkit.craftbukkit.block.impl.CraftBarrel::new);
         register(net.minecraft.world.level.block.BarrierBlock.class, org.bukkit.craftbukkit.block.impl.CraftBarrier::new);
+        register(net.minecraft.world.level.block.BaseCoralFanBlock.class, org.bukkit.craftbukkit.block.impl.CraftBaseCoralFan::new);
+        register(net.minecraft.world.level.block.BaseCoralPlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftBaseCoralPlant::new);
+        register(net.minecraft.world.level.block.BaseCoralWallFanBlock.class, org.bukkit.craftbukkit.block.impl.CraftBaseCoralWallFan::new);
         register(net.minecraft.world.level.block.BedBlock.class, org.bukkit.craftbukkit.block.impl.CraftBed::new);
         register(net.minecraft.world.level.block.BeehiveBlock.class, org.bukkit.craftbukkit.block.impl.CraftBeehive::new);
         register(net.minecraft.world.level.block.BeetrootBlock.class, org.bukkit.craftbukkit.block.impl.CraftBeetroot::new);
         register(net.minecraft.world.level.block.BellBlock.class, org.bukkit.craftbukkit.block.impl.CraftBell::new);
+        register(net.minecraft.world.level.block.BigDripleafBlock.class, org.bukkit.craftbukkit.block.impl.CraftBigDripleaf::new);
+        register(net.minecraft.world.level.block.BigDripleafStemBlock.class, org.bukkit.craftbukkit.block.impl.CraftBigDripleafStem::new);
         register(net.minecraft.world.level.block.BlastFurnaceBlock.class, org.bukkit.craftbukkit.block.impl.CraftBlastFurnace::new);
         register(net.minecraft.world.level.block.BrewingStandBlock.class, org.bukkit.craftbukkit.block.impl.CraftBrewingStand::new);
+        register(net.minecraft.world.level.block.BrushableBlock.class, org.bukkit.craftbukkit.block.impl.CraftBrushable::new);
         register(net.minecraft.world.level.block.BubbleColumnBlock.class, org.bukkit.craftbukkit.block.impl.CraftBubbleColumn::new);
-        register(net.minecraft.world.level.block.ButtonBlock.class, org.bukkit.craftbukkit.block.impl.CraftButtonAbstract::new);
+        register(net.minecraft.world.level.block.ButtonBlock.class, org.bukkit.craftbukkit.block.impl.CraftButton::new);
         register(net.minecraft.world.level.block.CactusBlock.class, org.bukkit.craftbukkit.block.impl.CraftCactus::new);
         register(net.minecraft.world.level.block.CakeBlock.class, org.bukkit.craftbukkit.block.impl.CraftCake::new);
-        register(net.minecraft.world.level.block.CampfireBlock.class, org.bukkit.craftbukkit.block.impl.CraftCampfire::new);
-        register(net.minecraft.world.level.block.CarrotBlock.class, org.bukkit.craftbukkit.block.impl.CraftCarrots::new);
-        register(net.minecraft.world.level.block.ChainBlock.class, org.bukkit.craftbukkit.block.impl.CraftChain::new);
-        register(net.minecraft.world.level.block.ChestBlock.class, org.bukkit.craftbukkit.block.impl.CraftChest::new);
-        register(net.minecraft.world.level.block.TrappedChestBlock.class, org.bukkit.craftbukkit.block.impl.CraftChestTrapped::new);
-        register(net.minecraft.world.level.block.ChorusFlowerBlock.class, org.bukkit.craftbukkit.block.impl.CraftChorusFlower::new);
-        register(net.minecraft.world.level.block.ChorusPlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftChorusFruit::new);
-        register(net.minecraft.world.level.block.WallBlock.class, org.bukkit.craftbukkit.block.impl.CraftCobbleWall::new);
-        register(net.minecraft.world.level.block.CocoaBlock.class, org.bukkit.craftbukkit.block.impl.CraftCocoa::new);
-        register(net.minecraft.world.level.block.CommandBlock.class, org.bukkit.craftbukkit.block.impl.CraftCommand::new);
-        register(net.minecraft.world.level.block.ComposterBlock.class, org.bukkit.craftbukkit.block.impl.CraftComposter::new);
-        register(net.minecraft.world.level.block.ConduitBlock.class, org.bukkit.craftbukkit.block.impl.CraftConduit::new);
-        register(net.minecraft.world.level.block.BaseCoralPlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralDead::new);
-        register(net.minecraft.world.level.block.CoralFanBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralFan::new);
-        register(net.minecraft.world.level.block.BaseCoralFanBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralFanAbstract::new);
-        register(net.minecraft.world.level.block.CoralWallFanBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralFanWall::new);
-        register(net.minecraft.world.level.block.BaseCoralWallFanBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralFanWallAbstract::new);
-        register(net.minecraft.world.level.block.CoralPlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralPlant::new);
-        register(net.minecraft.world.level.block.CropBlock.class, org.bukkit.craftbukkit.block.impl.CraftCrops::new);
-        register(net.minecraft.world.level.block.DaylightDetectorBlock.class, org.bukkit.craftbukkit.block.impl.CraftDaylightDetector::new);
-        register(net.minecraft.world.level.block.SnowyDirtBlock.class, org.bukkit.craftbukkit.block.impl.CraftDirtSnow::new);
-        register(net.minecraft.world.level.block.DispenserBlock.class, org.bukkit.craftbukkit.block.impl.CraftDispenser::new);
-        register(net.minecraft.world.level.block.DoorBlock.class, org.bukkit.craftbukkit.block.impl.CraftDoor::new);
-        register(net.minecraft.world.level.block.DropperBlock.class, org.bukkit.craftbukkit.block.impl.CraftDropper::new);
-        register(net.minecraft.world.level.block.EndRodBlock.class, org.bukkit.craftbukkit.block.impl.CraftEndRod::new);
-        register(net.minecraft.world.level.block.EnderChestBlock.class, org.bukkit.craftbukkit.block.impl.CraftEnderChest::new);
-        register(net.minecraft.world.level.block.EndPortalFrameBlock.class, org.bukkit.craftbukkit.block.impl.CraftEnderPortalFrame::new);
-        register(net.minecraft.world.level.block.FenceBlock.class, org.bukkit.craftbukkit.block.impl.CraftFence::new);
-        register(net.minecraft.world.level.block.FenceGateBlock.class, org.bukkit.craftbukkit.block.impl.CraftFenceGate::new);
-        register(net.minecraft.world.level.block.FireBlock.class, org.bukkit.craftbukkit.block.impl.CraftFire::new);
-        register(net.minecraft.world.level.block.StandingSignBlock.class, org.bukkit.craftbukkit.block.impl.CraftFloorSign::new);
-        register(net.minecraft.world.level.block.LiquidBlock.class, org.bukkit.craftbukkit.block.impl.CraftFluids::new);
-        register(net.minecraft.world.level.block.FurnaceBlock.class, org.bukkit.craftbukkit.block.impl.CraftFurnaceFurace::new);
-        register(net.minecraft.world.level.block.GlazedTerracottaBlock.class, org.bukkit.craftbukkit.block.impl.CraftGlazedTerracotta::new);
-        register(net.minecraft.world.level.block.GrassBlock.class, org.bukkit.craftbukkit.block.impl.CraftGrass::new);
-        register(net.minecraft.world.level.block.GrindstoneBlock.class, org.bukkit.craftbukkit.block.impl.CraftGrindstone::new);
-        register(net.minecraft.world.level.block.HayBlock.class, org.bukkit.craftbukkit.block.impl.CraftHay::new);
-        register(net.minecraft.world.level.block.HopperBlock.class, org.bukkit.craftbukkit.block.impl.CraftHopper::new);
-        register(net.minecraft.world.level.block.HugeMushroomBlock.class, org.bukkit.craftbukkit.block.impl.CraftHugeMushroom::new);
-        register(net.minecraft.world.level.block.FrostedIceBlock.class, org.bukkit.craftbukkit.block.impl.CraftIceFrost::new);
-        register(net.minecraft.world.level.block.IronBarsBlock.class, org.bukkit.craftbukkit.block.impl.CraftIronBars::new);
-        register(net.minecraft.world.level.block.JigsawBlock.class, org.bukkit.craftbukkit.block.impl.CraftJigsaw::new);
-        register(net.minecraft.world.level.block.JukeboxBlock.class, org.bukkit.craftbukkit.block.impl.CraftJukeBox::new);
-        register(net.minecraft.world.level.block.KelpBlock.class, org.bukkit.craftbukkit.block.impl.CraftKelp::new);
-        register(net.minecraft.world.level.block.LadderBlock.class, org.bukkit.craftbukkit.block.impl.CraftLadder::new);
-        register(net.minecraft.world.level.block.LanternBlock.class, org.bukkit.craftbukkit.block.impl.CraftLantern::new);
-        register(net.minecraft.world.level.block.LeavesBlock.class, org.bukkit.craftbukkit.block.impl.CraftLeaves::new);
-        register(net.minecraft.world.level.block.LecternBlock.class, org.bukkit.craftbukkit.block.impl.CraftLectern::new);
-        register(net.minecraft.world.level.block.LeverBlock.class, org.bukkit.craftbukkit.block.impl.CraftLever::new);
-        register(net.minecraft.world.level.block.LoomBlock.class, org.bukkit.craftbukkit.block.impl.CraftLoom::new);
-        register(net.minecraft.world.level.block.DetectorRailBlock.class, org.bukkit.craftbukkit.block.impl.CraftMinecartDetector::new);
-        register(net.minecraft.world.level.block.RailBlock.class, org.bukkit.craftbukkit.block.impl.CraftMinecartTrack::new);
-        register(net.minecraft.world.level.block.MyceliumBlock.class, org.bukkit.craftbukkit.block.impl.CraftMycel::new);
-        register(net.minecraft.world.level.block.NetherWartBlock.class, org.bukkit.craftbukkit.block.impl.CraftNetherWart::new);
-        register(net.minecraft.world.level.block.NoteBlock.class, org.bukkit.craftbukkit.block.impl.CraftNote::new);
-        register(net.minecraft.world.level.block.ObserverBlock.class, org.bukkit.craftbukkit.block.impl.CraftObserver::new);
-        register(net.minecraft.world.level.block.NetherPortalBlock.class, org.bukkit.craftbukkit.block.impl.CraftPortal::new);
-        register(net.minecraft.world.level.block.PotatoBlock.class, org.bukkit.craftbukkit.block.impl.CraftPotatoes::new);
-        register(net.minecraft.world.level.block.PoweredRailBlock.class, org.bukkit.craftbukkit.block.impl.CraftPoweredRail::new);
-        register(net.minecraft.world.level.block.PressurePlateBlock.class, org.bukkit.craftbukkit.block.impl.CraftPressurePlateBinary::new);
-        register(net.minecraft.world.level.block.WeightedPressurePlateBlock.class, org.bukkit.craftbukkit.block.impl.CraftPressurePlateWeighted::new);
-        register(net.minecraft.world.level.block.CarvedPumpkinBlock.class, org.bukkit.craftbukkit.block.impl.CraftPumpkinCarved::new);
-        register(net.minecraft.world.level.block.ComparatorBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneComparator::new);
-        register(net.minecraft.world.level.block.RedstoneLampBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneLamp::new);
-        register(net.minecraft.world.level.block.RedStoneOreBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneOre::new);
-        register(net.minecraft.world.level.block.RedstoneTorchBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneTorch::new);
-        register(net.minecraft.world.level.block.RedstoneWallTorchBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneTorchWall::new);
-        register(net.minecraft.world.level.block.RedStoneWireBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneWire::new);
-        register(net.minecraft.world.level.block.SugarCaneBlock.class, org.bukkit.craftbukkit.block.impl.CraftReed::new);
-        register(net.minecraft.world.level.block.RepeaterBlock.class, org.bukkit.craftbukkit.block.impl.CraftRepeater::new);
-        register(net.minecraft.world.level.block.RespawnAnchorBlock.class, org.bukkit.craftbukkit.block.impl.CraftRespawnAnchor::new);
-        register(net.minecraft.world.level.block.RotatedPillarBlock.class, org.bukkit.craftbukkit.block.impl.CraftRotatable::new);
-        register(net.minecraft.world.level.block.SaplingBlock.class, org.bukkit.craftbukkit.block.impl.CraftSapling::new);
-        register(net.minecraft.world.level.block.ScaffoldingBlock.class, org.bukkit.craftbukkit.block.impl.CraftScaffolding::new);
-        register(net.minecraft.world.level.block.SeaPickleBlock.class, org.bukkit.craftbukkit.block.impl.CraftSeaPickle::new);
-        register(net.minecraft.world.level.block.ShulkerBoxBlock.class, org.bukkit.craftbukkit.block.impl.CraftShulkerBox::new);
-        register(net.minecraft.world.level.block.SkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftSkull::new);
-        register(net.minecraft.world.level.block.PlayerHeadBlock.class, org.bukkit.craftbukkit.block.impl.CraftSkullPlayer::new);
-        register(net.minecraft.world.level.block.PlayerWallHeadBlock.class, org.bukkit.craftbukkit.block.impl.CraftSkullPlayerWall::new);
-        register(net.minecraft.world.level.block.WallSkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftSkullWall::new);
-        register(net.minecraft.world.level.block.SmokerBlock.class, org.bukkit.craftbukkit.block.impl.CraftSmoker::new);
-        register(net.minecraft.world.level.block.SnowLayerBlock.class, org.bukkit.craftbukkit.block.impl.CraftSnow::new);
-        register(net.minecraft.world.level.block.FarmBlock.class, org.bukkit.craftbukkit.block.impl.CraftSoil::new);
-        register(net.minecraft.world.level.block.StainedGlassPaneBlock.class, org.bukkit.craftbukkit.block.impl.CraftStainedGlassPane::new);
-        register(net.minecraft.world.level.block.StairBlock.class, org.bukkit.craftbukkit.block.impl.CraftStairs::new);
-        register(net.minecraft.world.level.block.StemBlock.class, org.bukkit.craftbukkit.block.impl.CraftStem::new);
-        register(net.minecraft.world.level.block.AttachedStemBlock.class, org.bukkit.craftbukkit.block.impl.CraftStemAttached::new);
-        register(net.minecraft.world.level.block.SlabBlock.class, org.bukkit.craftbukkit.block.impl.CraftStepAbstract::new);
-        register(net.minecraft.world.level.block.StonecutterBlock.class, org.bukkit.craftbukkit.block.impl.CraftStonecutter::new);
-        register(net.minecraft.world.level.block.StructureBlock.class, org.bukkit.craftbukkit.block.impl.CraftStructure::new);
-        register(net.minecraft.world.level.block.SweetBerryBushBlock.class, org.bukkit.craftbukkit.block.impl.CraftSweetBerryBush::new);
-        register(net.minecraft.world.level.block.TntBlock.class, org.bukkit.craftbukkit.block.impl.CraftTNT::new);
-        register(net.minecraft.world.level.block.DoublePlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftTallPlant::new);
-        register(net.minecraft.world.level.block.TallFlowerBlock.class, org.bukkit.craftbukkit.block.impl.CraftTallPlantFlower::new);
-        register(net.minecraft.world.level.block.TargetBlock.class, org.bukkit.craftbukkit.block.impl.CraftTarget::new);
-        register(net.minecraft.world.level.block.WallTorchBlock.class, org.bukkit.craftbukkit.block.impl.CraftTorchWall::new);
-        register(net.minecraft.world.level.block.TrapDoorBlock.class, org.bukkit.craftbukkit.block.impl.CraftTrapdoor::new);
-        register(net.minecraft.world.level.block.TripWireBlock.class, org.bukkit.craftbukkit.block.impl.CraftTripwire::new);
-        register(net.minecraft.world.level.block.TripWireHookBlock.class, org.bukkit.craftbukkit.block.impl.CraftTripwireHook::new);
-        register(net.minecraft.world.level.block.TurtleEggBlock.class, org.bukkit.craftbukkit.block.impl.CraftTurtleEgg::new);
-        register(net.minecraft.world.level.block.TwistingVinesBlock.class, org.bukkit.craftbukkit.block.impl.CraftTwistingVines::new);
-        register(net.minecraft.world.level.block.VineBlock.class, org.bukkit.craftbukkit.block.impl.CraftVine::new);
-        register(net.minecraft.world.level.block.WallSignBlock.class, org.bukkit.craftbukkit.block.impl.CraftWallSign::new);
-        register(net.minecraft.world.level.block.WeepingVinesBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeepingVines::new);
-        register(net.minecraft.world.level.block.WitherSkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftWitherSkull::new);
-        register(net.minecraft.world.level.block.WitherWallSkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftWitherSkullWall::new);
-        register(net.minecraft.world.level.block.BrushableBlock.class, org.bukkit.craftbukkit.block.impl.CraftBrushable::new);
         register(net.minecraft.world.level.block.CalibratedSculkSensorBlock.class, org.bukkit.craftbukkit.block.impl.CraftCalibratedSculkSensor::new);
+        register(net.minecraft.world.level.block.CampfireBlock.class, org.bukkit.craftbukkit.block.impl.CraftCampfire::new);
         register(net.minecraft.world.level.block.CandleBlock.class, org.bukkit.craftbukkit.block.impl.CraftCandle::new);
         register(net.minecraft.world.level.block.CandleCakeBlock.class, org.bukkit.craftbukkit.block.impl.CraftCandleCake::new);
+        register(net.minecraft.world.level.block.CarrotBlock.class, org.bukkit.craftbukkit.block.impl.CraftCarrot::new);
+        register(net.minecraft.world.level.block.CarvedPumpkinBlock.class, org.bukkit.craftbukkit.block.impl.CraftCarvedPumpkin::new);
         register(net.minecraft.world.level.block.CaveVinesBlock.class, org.bukkit.craftbukkit.block.impl.CraftCaveVines::new);
         register(net.minecraft.world.level.block.CaveVinesPlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftCaveVinesPlant::new);
         register(net.minecraft.world.level.block.CeilingHangingSignBlock.class, org.bukkit.craftbukkit.block.impl.CraftCeilingHangingSign::new);
+        register(net.minecraft.world.level.block.ChainBlock.class, org.bukkit.craftbukkit.block.impl.CraftChain::new);
+        register(net.minecraft.world.level.block.ChestBlock.class, org.bukkit.craftbukkit.block.impl.CraftChest::new);
         register(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, org.bukkit.craftbukkit.block.impl.CraftChiseledBookShelf::new);
+        register(net.minecraft.world.level.block.ChorusFlowerBlock.class, org.bukkit.craftbukkit.block.impl.CraftChorusFlower::new);
+        register(net.minecraft.world.level.block.ChorusPlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftChorusPlant::new);
+        register(net.minecraft.world.level.block.CocoaBlock.class, org.bukkit.craftbukkit.block.impl.CraftCocoa::new);
+        register(net.minecraft.world.level.block.CommandBlock.class, org.bukkit.craftbukkit.block.impl.CraftCommandBlock::new);
+        register(net.minecraft.world.level.block.ComparatorBlock.class, org.bukkit.craftbukkit.block.impl.CraftComparator::new);
+        register(net.minecraft.world.level.block.ComposterBlock.class, org.bukkit.craftbukkit.block.impl.CraftComposter::new);
+        register(net.minecraft.world.level.block.ConduitBlock.class, org.bukkit.craftbukkit.block.impl.CraftConduit::new);
         register(net.minecraft.world.level.block.CopperBulbBlock.class, org.bukkit.craftbukkit.block.impl.CraftCopperBulb::new);
+        register(net.minecraft.world.level.block.CoralFanBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralFan::new);
+        register(net.minecraft.world.level.block.CoralPlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralPlant::new);
+        register(net.minecraft.world.level.block.CoralWallFanBlock.class, org.bukkit.craftbukkit.block.impl.CraftCoralWallFan::new);
         register(net.minecraft.world.level.block.CrafterBlock.class, org.bukkit.craftbukkit.block.impl.CraftCrafter::new);
         register(net.minecraft.world.level.block.CreakingHeartBlock.class, org.bukkit.craftbukkit.block.impl.CraftCreakingHeart::new);
+        register(net.minecraft.world.level.block.CropBlock.class, org.bukkit.craftbukkit.block.impl.CraftCrop::new);
+        register(net.minecraft.world.level.block.DaylightDetectorBlock.class, org.bukkit.craftbukkit.block.impl.CraftDaylightDetector::new);
         register(net.minecraft.world.level.block.DecoratedPotBlock.class, org.bukkit.craftbukkit.block.impl.CraftDecoratedPot::new);
+        register(net.minecraft.world.level.block.DetectorRailBlock.class, org.bukkit.craftbukkit.block.impl.CraftDetectorRail::new);
+        register(net.minecraft.world.level.block.DispenserBlock.class, org.bukkit.craftbukkit.block.impl.CraftDispenser::new);
+        register(net.minecraft.world.level.block.DoorBlock.class, org.bukkit.craftbukkit.block.impl.CraftDoor::new);
+        register(net.minecraft.world.level.block.DoublePlantBlock.class, org.bukkit.craftbukkit.block.impl.CraftDoublePlant::new);
+        register(net.minecraft.world.level.block.DropperBlock.class, org.bukkit.craftbukkit.block.impl.CraftDropper::new);
+        register(net.minecraft.world.level.block.EndPortalFrameBlock.class, org.bukkit.craftbukkit.block.impl.CraftEndPortalFrame::new);
+        register(net.minecraft.world.level.block.EndRodBlock.class, org.bukkit.craftbukkit.block.impl.CraftEndRod::new);
+        register(net.minecraft.world.level.block.EnderChestBlock.class, org.bukkit.craftbukkit.block.impl.CraftEnderChest::new);
+        register(net.minecraft.world.level.block.FarmBlock.class, org.bukkit.craftbukkit.block.impl.CraftFarm::new);
+        register(net.minecraft.world.level.block.FenceBlock.class, org.bukkit.craftbukkit.block.impl.CraftFence::new);
+        register(net.minecraft.world.level.block.FenceGateBlock.class, org.bukkit.craftbukkit.block.impl.CraftFenceGate::new);
+        register(net.minecraft.world.level.block.FireBlock.class, org.bukkit.craftbukkit.block.impl.CraftFire::new);
+        register(net.minecraft.world.level.block.FrostedIceBlock.class, org.bukkit.craftbukkit.block.impl.CraftFrostedIce::new);
+        register(net.minecraft.world.level.block.FurnaceBlock.class, org.bukkit.craftbukkit.block.impl.CraftFurnace::new);
+        register(net.minecraft.world.level.block.GlazedTerracottaBlock.class, org.bukkit.craftbukkit.block.impl.CraftGlazedTerracotta::new);
         register(net.minecraft.world.level.block.GlowLichenBlock.class, org.bukkit.craftbukkit.block.impl.CraftGlowLichen::new);
+        register(net.minecraft.world.level.block.GrassBlock.class, org.bukkit.craftbukkit.block.impl.CraftGrass::new);
+        register(net.minecraft.world.level.block.GrindstoneBlock.class, org.bukkit.craftbukkit.block.impl.CraftGrindstone::new);
         register(net.minecraft.world.level.block.HangingMossBlock.class, org.bukkit.craftbukkit.block.impl.CraftHangingMoss::new);
         register(net.minecraft.world.level.block.HangingRootsBlock.class, org.bukkit.craftbukkit.block.impl.CraftHangingRoots::new);
+        register(net.minecraft.world.level.block.HayBlock.class, org.bukkit.craftbukkit.block.impl.CraftHay::new);
         register(net.minecraft.world.level.block.HeavyCoreBlock.class, org.bukkit.craftbukkit.block.impl.CraftHeavyCore::new);
+        register(net.minecraft.world.level.block.HopperBlock.class, org.bukkit.craftbukkit.block.impl.CraftHopper::new);
+        register(net.minecraft.world.level.block.HugeMushroomBlock.class, org.bukkit.craftbukkit.block.impl.CraftHugeMushroom::new);
         register(net.minecraft.world.level.block.InfestedRotatedPillarBlock.class, org.bukkit.craftbukkit.block.impl.CraftInfestedRotatedPillar::new);
+        register(net.minecraft.world.level.block.IronBarsBlock.class, org.bukkit.craftbukkit.block.impl.CraftIronBars::new);
+        register(net.minecraft.world.level.block.JigsawBlock.class, org.bukkit.craftbukkit.block.impl.CraftJigsaw::new);
+        register(net.minecraft.world.level.block.JukeboxBlock.class, org.bukkit.craftbukkit.block.impl.CraftJukebox::new);
+        register(net.minecraft.world.level.block.KelpBlock.class, org.bukkit.craftbukkit.block.impl.CraftKelp::new);
+        register(net.minecraft.world.level.block.LadderBlock.class, org.bukkit.craftbukkit.block.impl.CraftLadder::new);
+        register(net.minecraft.world.level.block.LanternBlock.class, org.bukkit.craftbukkit.block.impl.CraftLantern::new);
         register(net.minecraft.world.level.block.LayeredCauldronBlock.class, org.bukkit.craftbukkit.block.impl.CraftLayeredCauldron::new);
+        register(net.minecraft.world.level.block.LeavesBlock.class, org.bukkit.craftbukkit.block.impl.CraftLeaves::new);
+        register(net.minecraft.world.level.block.LecternBlock.class, org.bukkit.craftbukkit.block.impl.CraftLectern::new);
+        register(net.minecraft.world.level.block.LeverBlock.class, org.bukkit.craftbukkit.block.impl.CraftLever::new);
         register(net.minecraft.world.level.block.LightBlock.class, org.bukkit.craftbukkit.block.impl.CraftLight::new);
         register(net.minecraft.world.level.block.LightningRodBlock.class, org.bukkit.craftbukkit.block.impl.CraftLightningRod::new);
+        register(net.minecraft.world.level.block.LiquidBlock.class, org.bukkit.craftbukkit.block.impl.CraftLiquid::new);
+        register(net.minecraft.world.level.block.LoomBlock.class, org.bukkit.craftbukkit.block.impl.CraftLoom::new);
         register(net.minecraft.world.level.block.MangroveLeavesBlock.class, org.bukkit.craftbukkit.block.impl.CraftMangroveLeaves::new);
         register(net.minecraft.world.level.block.MangrovePropaguleBlock.class, org.bukkit.craftbukkit.block.impl.CraftMangrovePropagule::new);
         register(net.minecraft.world.level.block.MangroveRootsBlock.class, org.bukkit.craftbukkit.block.impl.CraftMangroveRoots::new);
         register(net.minecraft.world.level.block.MossyCarpetBlock.class, org.bukkit.craftbukkit.block.impl.CraftMossyCarpet::new);
         register(net.minecraft.world.level.block.MultifaceBlock.class, org.bukkit.craftbukkit.block.impl.CraftMultiface::new);
+        register(net.minecraft.world.level.block.MyceliumBlock.class, org.bukkit.craftbukkit.block.impl.CraftMycelium::new);
+        register(net.minecraft.world.level.block.NetherPortalBlock.class, org.bukkit.craftbukkit.block.impl.CraftNetherPortal::new);
+        register(net.minecraft.world.level.block.NetherWartBlock.class, org.bukkit.craftbukkit.block.impl.CraftNetherWart::new);
+        register(net.minecraft.world.level.block.NoteBlock.class, org.bukkit.craftbukkit.block.impl.CraftNoteBlock::new);
+        register(net.minecraft.world.level.block.ObserverBlock.class, org.bukkit.craftbukkit.block.impl.CraftObserver::new);
         register(net.minecraft.world.level.block.ParticleLeavesBlock.class, org.bukkit.craftbukkit.block.impl.CraftParticleLeaves::new);
         register(net.minecraft.world.level.block.PiglinWallSkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftPiglinWallSkull::new);
         register(net.minecraft.world.level.block.PinkPetalsBlock.class, org.bukkit.craftbukkit.block.impl.CraftPinkPetals::new);
         register(net.minecraft.world.level.block.PitcherCropBlock.class, org.bukkit.craftbukkit.block.impl.CraftPitcherCrop::new);
+        register(net.minecraft.world.level.block.PlayerHeadBlock.class, org.bukkit.craftbukkit.block.impl.CraftPlayerHead::new);
+        register(net.minecraft.world.level.block.PlayerWallHeadBlock.class, org.bukkit.craftbukkit.block.impl.CraftPlayerWallHead::new);
         register(net.minecraft.world.level.block.PointedDripstoneBlock.class, org.bukkit.craftbukkit.block.impl.CraftPointedDripstone::new);
+        register(net.minecraft.world.level.block.PotatoBlock.class, org.bukkit.craftbukkit.block.impl.CraftPotato::new);
+        register(net.minecraft.world.level.block.PoweredRailBlock.class, org.bukkit.craftbukkit.block.impl.CraftPoweredRail::new);
+        register(net.minecraft.world.level.block.PressurePlateBlock.class, org.bukkit.craftbukkit.block.impl.CraftPressurePlate::new);
+        register(net.minecraft.world.level.block.RailBlock.class, org.bukkit.craftbukkit.block.impl.CraftRail::new);
+        register(net.minecraft.world.level.block.RedStoneOreBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedStoneOre::new);
+        register(net.minecraft.world.level.block.RedStoneWireBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedStoneWire::new);
+        register(net.minecraft.world.level.block.RedstoneLampBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneLamp::new);
+        register(net.minecraft.world.level.block.RedstoneTorchBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneTorch::new);
+        register(net.minecraft.world.level.block.RedstoneWallTorchBlock.class, org.bukkit.craftbukkit.block.impl.CraftRedstoneWallTorch::new);
+        register(net.minecraft.world.level.block.RepeaterBlock.class, org.bukkit.craftbukkit.block.impl.CraftRepeater::new);
+        register(net.minecraft.world.level.block.RespawnAnchorBlock.class, org.bukkit.craftbukkit.block.impl.CraftRespawnAnchor::new);
+        register(net.minecraft.world.level.block.RotatedPillarBlock.class, org.bukkit.craftbukkit.block.impl.CraftRotatedPillar::new);
+        register(net.minecraft.world.level.block.SaplingBlock.class, org.bukkit.craftbukkit.block.impl.CraftSapling::new);
+        register(net.minecraft.world.level.block.ScaffoldingBlock.class, org.bukkit.craftbukkit.block.impl.CraftScaffolding::new);
         register(net.minecraft.world.level.block.SculkCatalystBlock.class, org.bukkit.craftbukkit.block.impl.CraftSculkCatalyst::new);
         register(net.minecraft.world.level.block.SculkSensorBlock.class, org.bukkit.craftbukkit.block.impl.CraftSculkSensor::new);
         register(net.minecraft.world.level.block.SculkShriekerBlock.class, org.bukkit.craftbukkit.block.impl.CraftSculkShrieker::new);
         register(net.minecraft.world.level.block.SculkVeinBlock.class, org.bukkit.craftbukkit.block.impl.CraftSculkVein::new);
+        register(net.minecraft.world.level.block.SeaPickleBlock.class, org.bukkit.craftbukkit.block.impl.CraftSeaPickle::new);
+        register(net.minecraft.world.level.block.ShulkerBoxBlock.class, org.bukkit.craftbukkit.block.impl.CraftShulkerBox::new);
+        register(net.minecraft.world.level.block.SkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftSkull::new);
+        register(net.minecraft.world.level.block.SlabBlock.class, org.bukkit.craftbukkit.block.impl.CraftSlab::new);
         register(net.minecraft.world.level.block.SmallDripleafBlock.class, org.bukkit.craftbukkit.block.impl.CraftSmallDripleaf::new);
+        register(net.minecraft.world.level.block.SmokerBlock.class, org.bukkit.craftbukkit.block.impl.CraftSmoker::new);
         register(net.minecraft.world.level.block.SnifferEggBlock.class, org.bukkit.craftbukkit.block.impl.CraftSnifferEgg::new);
+        register(net.minecraft.world.level.block.SnowLayerBlock.class, org.bukkit.craftbukkit.block.impl.CraftSnowLayer::new);
+        register(net.minecraft.world.level.block.SnowyDirtBlock.class, org.bukkit.craftbukkit.block.impl.CraftSnowyDirt::new);
+        register(net.minecraft.world.level.block.StainedGlassPaneBlock.class, org.bukkit.craftbukkit.block.impl.CraftStainedGlassPane::new);
+        register(net.minecraft.world.level.block.StairBlock.class, org.bukkit.craftbukkit.block.impl.CraftStair::new);
+        register(net.minecraft.world.level.block.StandingSignBlock.class, org.bukkit.craftbukkit.block.impl.CraftStandingSign::new);
+        register(net.minecraft.world.level.block.StemBlock.class, org.bukkit.craftbukkit.block.impl.CraftStem::new);
+        register(net.minecraft.world.level.block.StonecutterBlock.class, org.bukkit.craftbukkit.block.impl.CraftStonecutter::new);
+        register(net.minecraft.world.level.block.StructureBlock.class, org.bukkit.craftbukkit.block.impl.CraftStructureBlock::new);
+        register(net.minecraft.world.level.block.SugarCaneBlock.class, org.bukkit.craftbukkit.block.impl.CraftSugarCane::new);
+        register(net.minecraft.world.level.block.SweetBerryBushBlock.class, org.bukkit.craftbukkit.block.impl.CraftSweetBerryBush::new);
+        register(net.minecraft.world.level.block.TallFlowerBlock.class, org.bukkit.craftbukkit.block.impl.CraftTallFlower::new);
         register(net.minecraft.world.level.block.TallSeagrassBlock.class, org.bukkit.craftbukkit.block.impl.CraftTallSeagrass::new);
+        register(net.minecraft.world.level.block.TargetBlock.class, org.bukkit.craftbukkit.block.impl.CraftTarget::new);
+        register(net.minecraft.world.level.block.TntBlock.class, org.bukkit.craftbukkit.block.impl.CraftTnt::new);
         register(net.minecraft.world.level.block.TorchflowerCropBlock.class, org.bukkit.craftbukkit.block.impl.CraftTorchflowerCrop::new);
+        register(net.minecraft.world.level.block.TrapDoorBlock.class, org.bukkit.craftbukkit.block.impl.CraftTrapDoor::new);
+        register(net.minecraft.world.level.block.TrappedChestBlock.class, org.bukkit.craftbukkit.block.impl.CraftTrappedChest::new);
         register(net.minecraft.world.level.block.TrialSpawnerBlock.class, org.bukkit.craftbukkit.block.impl.CraftTrialSpawner::new);
+        register(net.minecraft.world.level.block.TripWireBlock.class, org.bukkit.craftbukkit.block.impl.CraftTripWire::new);
+        register(net.minecraft.world.level.block.TripWireHookBlock.class, org.bukkit.craftbukkit.block.impl.CraftTripWireHook::new);
+        register(net.minecraft.world.level.block.TurtleEggBlock.class, org.bukkit.craftbukkit.block.impl.CraftTurtleEgg::new);
+        register(net.minecraft.world.level.block.TwistingVinesBlock.class, org.bukkit.craftbukkit.block.impl.CraftTwistingVines::new);
         register(net.minecraft.world.level.block.VaultBlock.class, org.bukkit.craftbukkit.block.impl.CraftVault::new);
+        register(net.minecraft.world.level.block.VineBlock.class, org.bukkit.craftbukkit.block.impl.CraftVine::new);
+        register(net.minecraft.world.level.block.WallBannerBlock.class, org.bukkit.craftbukkit.block.impl.CraftWallBanner::new);
+        register(net.minecraft.world.level.block.WallBlock.class, org.bukkit.craftbukkit.block.impl.CraftWall::new);
         register(net.minecraft.world.level.block.WallHangingSignBlock.class, org.bukkit.craftbukkit.block.impl.CraftWallHangingSign::new);
+        register(net.minecraft.world.level.block.WallSignBlock.class, org.bukkit.craftbukkit.block.impl.CraftWallSign::new);
+        register(net.minecraft.world.level.block.WallSkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftWallSkull::new);
+        register(net.minecraft.world.level.block.WallTorchBlock.class, org.bukkit.craftbukkit.block.impl.CraftWallTorch::new);
         register(net.minecraft.world.level.block.WaterloggedTransparentBlock.class, org.bukkit.craftbukkit.block.impl.CraftWaterloggedTransparent::new);
         register(net.minecraft.world.level.block.WeatheringCopperBulbBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperBulb::new);
         register(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperDoor::new);
@@ -538,9 +522,14 @@ public class CraftBlockData implements BlockData {
         register(net.minecraft.world.level.block.WeatheringCopperSlabBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperSlab::new);
         register(net.minecraft.world.level.block.WeatheringCopperStairBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperStair::new);
         register(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperTrapDoor::new);
-        register(net.minecraft.world.level.block.piston.PistonBaseBlock.class, org.bukkit.craftbukkit.block.impl.CraftPiston::new);
-        register(net.minecraft.world.level.block.piston.PistonHeadBlock.class, org.bukkit.craftbukkit.block.impl.CraftPistonExtension::new);
-        register(net.minecraft.world.level.block.piston.MovingPistonBlock.class, org.bukkit.craftbukkit.block.impl.CraftPistonMoving::new);
+        register(net.minecraft.world.level.block.WeepingVinesBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeepingVines::new);
+        register(net.minecraft.world.level.block.WeightedPressurePlateBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeightedPressurePlate::new);
+        register(net.minecraft.world.level.block.WitherSkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftWitherSkull::new);
+        register(net.minecraft.world.level.block.WitherWallSkullBlock.class, org.bukkit.craftbukkit.block.impl.CraftWitherWallSkull::new);
+        register(net.minecraft.world.level.block.piston.MovingPistonBlock.class, org.bukkit.craftbukkit.block.impl.CraftMovingPiston::new);
+        register(net.minecraft.world.level.block.piston.PistonBaseBlock.class, org.bukkit.craftbukkit.block.impl.CraftPistonBase::new);
+        register(net.minecraft.world.level.block.piston.PistonHeadBlock.class, org.bukkit.craftbukkit.block.impl.CraftPistonHead::new);
+        // End generate - CraftBlockData#MAP
         //</editor-fold>
     }
 
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBrushable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBrushable.java
deleted file mode 100644
index dfc651e5b6..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBrushable.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Brushable;
-
-public abstract class CraftBrushable extends CraftBlockData implements Brushable {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DUSTED = getInteger("dusted");
-
-    @Override
-    public int getDusted() {
-        return this.get(CraftBrushable.DUSTED);
-    }
-
-    @Override
-    public void setDusted(int dusted) {
-        this.set(CraftBrushable.DUSTED, dusted);
-    }
-
-    @Override
-    public int getMaximumDusted() {
-        return getMax(CraftBrushable.DUSTED);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftDirectional.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftDirectional.java
deleted file mode 100644
index 88b765e2fa..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftDirectional.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Directional;
-
-public abstract class CraftDirectional extends CraftBlockData implements Directional {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum("facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftDirectional.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftDirectional.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftDirectional.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftFaceAttachable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftFaceAttachable.java
deleted file mode 100644
index 9cf2eb595c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftFaceAttachable.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.FaceAttachable;
-
-public abstract class CraftFaceAttachable extends CraftBlockData implements FaceAttachable {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ATTACH_FACE = getEnum("face");
-
-    @Override
-    public org.bukkit.block.data.FaceAttachable.AttachedFace getAttachedFace() {
-        return this.get(CraftFaceAttachable.ATTACH_FACE, org.bukkit.block.data.FaceAttachable.AttachedFace.class);
-    }
-
-    @Override
-    public void setAttachedFace(org.bukkit.block.data.FaceAttachable.AttachedFace face) {
-        this.set(CraftFaceAttachable.ATTACH_FACE, face);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftHangable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftHangable.java
deleted file mode 100644
index 5b99b7225c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftHangable.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Hangable;
-
-public abstract class CraftHangable extends CraftBlockData implements Hangable {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty HANGING = getBoolean("hanging");
-
-    @Override
-    public boolean isHanging() {
-        return this.get(CraftHangable.HANGING);
-    }
-
-    @Override
-    public void setHanging(boolean hanging) {
-        this.set(CraftHangable.HANGING, hanging);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftHatchable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftHatchable.java
deleted file mode 100644
index 0e23223624..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftHatchable.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Hatchable;
-
-public abstract class CraftHatchable extends CraftBlockData implements Hatchable {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty HATCH = getInteger("hatch");
-
-    @Override
-    public int getHatch() {
-        return this.get(CraftHatchable.HATCH);
-    }
-
-    @Override
-    public void setHatch(int hatch) {
-        this.set(CraftHatchable.HATCH, hatch);
-    }
-
-    @Override
-    public int getMaximumHatch() {
-        return getMax(CraftHatchable.HATCH);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftLevelled.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftLevelled.java
deleted file mode 100644
index a462418296..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftLevelled.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Levelled;
-
-public abstract class CraftLevelled extends CraftBlockData implements Levelled {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty LEVEL = getInteger("level");
-
-    @Override
-    public int getLevel() {
-        return this.get(CraftLevelled.LEVEL);
-    }
-
-    @Override
-    public void setLevel(int level) {
-        this.set(CraftLevelled.LEVEL, level);
-    }
-
-    @Override
-    public int getMaximumLevel() {
-        return getMax(CraftLevelled.LEVEL);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftLightable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftLightable.java
deleted file mode 100644
index ca2b780037..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftLightable.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Lightable;
-
-public abstract class CraftLightable extends CraftBlockData implements Lightable {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean("lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftLightable.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftLightable.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftMultipleFacing.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftMultipleFacing.java
deleted file mode 100644
index 2d0af804bc..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftMultipleFacing.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.MultipleFacing;
-
-public abstract class CraftMultipleFacing extends CraftBlockData implements MultipleFacing {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean("north", true), getBoolean("east", true), getBoolean("south", true), getBoolean("west", true), getBoolean("up", true), getBoolean("down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftMultipleFacing.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftMultipleFacing.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftMultipleFacing.FACES.length; i++) {
-            if (CraftMultipleFacing.FACES[i] != null && this.get(CraftMultipleFacing.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftMultipleFacing.FACES.length; i++) {
-            if (CraftMultipleFacing.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftOpenable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftOpenable.java
deleted file mode 100644
index 46a0e3e4cb..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftOpenable.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Openable;
-
-public abstract class CraftOpenable extends CraftBlockData implements Openable {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OPEN = getBoolean("open");
-
-    @Override
-    public boolean isOpen() {
-        return this.get(CraftOpenable.OPEN);
-    }
-
-    @Override
-    public void setOpen(boolean open) {
-        this.set(CraftOpenable.OPEN, open);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftOrientable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftOrientable.java
deleted file mode 100644
index 55d96a0dc4..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftOrientable.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Orientable;
-
-public class CraftOrientable extends CraftBlockData implements Orientable {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> AXIS = getEnum("axis");
-
-    @Override
-    public org.bukkit.Axis getAxis() {
-        return this.get(CraftOrientable.AXIS, org.bukkit.Axis.class);
-    }
-
-    @Override
-    public void setAxis(org.bukkit.Axis axis) {
-        this.set(CraftOrientable.AXIS, axis);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.Axis> getAxes() {
-        return this.getValues(CraftOrientable.AXIS, org.bukkit.Axis.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftPowerable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftPowerable.java
deleted file mode 100644
index 70c58e0351..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftPowerable.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Powerable;
-
-public abstract class CraftPowerable extends CraftBlockData implements Powerable {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean("powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftPowerable.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftPowerable.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftRail.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftRail.java
deleted file mode 100644
index 8a4937b38c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftRail.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Rail;
-
-public abstract class CraftRail extends CraftBlockData implements Rail {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SHAPE = getEnum("shape");
-
-    @Override
-    public org.bukkit.block.data.Rail.Shape getShape() {
-        return this.get(CraftRail.SHAPE, org.bukkit.block.data.Rail.Shape.class);
-    }
-
-    @Override
-    public void setShape(org.bukkit.block.data.Rail.Shape shape) {
-        this.set(CraftRail.SHAPE, shape);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.data.Rail.Shape> getShapes() {
-        return this.getValues(CraftRail.SHAPE, org.bukkit.block.data.Rail.Shape.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftRotatable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftRotatable.java
deleted file mode 100644
index 665b52ad2a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftRotatable.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Rotatable;
-
-public abstract class CraftRotatable extends CraftBlockData implements Rotatable {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty ROTATION = getInteger("rotation");
-
-    @Override
-    public org.bukkit.block.BlockFace getRotation() {
-        int data = this.get(CraftRotatable.ROTATION);
-        switch (data) {
-            case 0x0:
-                return org.bukkit.block.BlockFace.SOUTH;
-            case 0x1:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_WEST;
-            case 0x2:
-                return org.bukkit.block.BlockFace.SOUTH_WEST;
-            case 0x3:
-                return org.bukkit.block.BlockFace.WEST_SOUTH_WEST;
-            case 0x4:
-                return org.bukkit.block.BlockFace.WEST;
-            case 0x5:
-                return org.bukkit.block.BlockFace.WEST_NORTH_WEST;
-            case 0x6:
-                return org.bukkit.block.BlockFace.NORTH_WEST;
-            case 0x7:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_WEST;
-            case 0x8:
-                return org.bukkit.block.BlockFace.NORTH;
-            case 0x9:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_EAST;
-            case 0xA:
-                return org.bukkit.block.BlockFace.NORTH_EAST;
-            case 0xB:
-                return org.bukkit.block.BlockFace.EAST_NORTH_EAST;
-            case 0xC:
-                return org.bukkit.block.BlockFace.EAST;
-            case 0xD:
-                return org.bukkit.block.BlockFace.EAST_SOUTH_EAST;
-            case 0xE:
-                return org.bukkit.block.BlockFace.SOUTH_EAST;
-            case 0xF:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_EAST;
-            default:
-                throw new IllegalArgumentException("Unknown rotation " + data);
-        }
-    }
-
-    @Override
-    public void setRotation(org.bukkit.block.BlockFace rotation) {
-        int val;
-        switch (rotation) {
-            case SOUTH:
-                val = 0x0;
-                break;
-            case SOUTH_SOUTH_WEST:
-                val = 0x1;
-                break;
-            case SOUTH_WEST:
-                val = 0x2;
-                break;
-            case WEST_SOUTH_WEST:
-                val = 0x3;
-                break;
-            case WEST:
-                val = 0x4;
-                break;
-            case WEST_NORTH_WEST:
-                val = 0x5;
-                break;
-            case NORTH_WEST:
-                val = 0x6;
-                break;
-            case NORTH_NORTH_WEST:
-                val = 0x7;
-                break;
-            case NORTH:
-                val = 0x8;
-                break;
-            case NORTH_NORTH_EAST:
-                val = 0x9;
-                break;
-            case NORTH_EAST:
-                val = 0xA;
-                break;
-            case EAST_NORTH_EAST:
-                val = 0xB;
-                break;
-            case EAST:
-                val = 0xC;
-                break;
-            case EAST_SOUTH_EAST:
-                val = 0xD;
-                break;
-            case SOUTH_EAST:
-                val = 0xE;
-                break;
-            case SOUTH_SOUTH_EAST:
-                val = 0xF;
-                break;
-            default:
-                throw new IllegalArgumentException("Illegal rotation " + rotation);
-        }
-        this.set(CraftRotatable.ROTATION, val);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftSnowable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftSnowable.java
deleted file mode 100644
index 1f5c02feb8..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftSnowable.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Snowable;
-
-public abstract class CraftSnowable extends CraftBlockData implements Snowable {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SNOWY = getBoolean("snowy");
-
-    @Override
-    public boolean isSnowy() {
-        return this.get(CraftSnowable.SNOWY);
-    }
-
-    @Override
-    public void setSnowy(boolean snowy) {
-        this.set(CraftSnowable.SNOWY, snowy);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftWaterlogged.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftWaterlogged.java
deleted file mode 100644
index 73679510b9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftWaterlogged.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bukkit.craftbukkit.block.data;
-
-import org.bukkit.block.data.Waterlogged;
-
-public abstract class CraftWaterlogged extends CraftBlockData implements Waterlogged {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean("waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftWaterlogged.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftWaterlogged.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBamboo.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBamboo.java
deleted file mode 100644
index 2e657e4bcf..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBamboo.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Bamboo;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftBamboo extends CraftBlockData implements Bamboo {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> LEAVES = getEnum("leaves");
-
-    @Override
-    public org.bukkit.block.data.type.Bamboo.Leaves getLeaves() {
-        return this.get(CraftBamboo.LEAVES, org.bukkit.block.data.type.Bamboo.Leaves.class);
-    }
-
-    @Override
-    public void setLeaves(org.bukkit.block.data.type.Bamboo.Leaves leaves) {
-        this.set(CraftBamboo.LEAVES, leaves);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBed.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBed.java
deleted file mode 100644
index f636a6b691..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBed.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Bed;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftBed extends CraftBlockData implements Bed {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> PART = getEnum("part");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OCCUPIED = getBoolean("occupied");
-
-    @Override
-    public org.bukkit.block.data.type.Bed.Part getPart() {
-        return this.get(CraftBed.PART, org.bukkit.block.data.type.Bed.Part.class);
-    }
-
-    @Override
-    public void setPart(org.bukkit.block.data.type.Bed.Part part) {
-        this.set(CraftBed.PART, part);
-    }
-
-    @Override
-    public boolean isOccupied() {
-        return this.get(CraftBed.OCCUPIED);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBeehive.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBeehive.java
deleted file mode 100644
index cf4185a309..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBeehive.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Beehive;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftBeehive extends CraftBlockData implements Beehive {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty HONEY_LEVEL = getInteger("honey_level");
-
-    @Override
-    public int getHoneyLevel() {
-        return this.get(CraftBeehive.HONEY_LEVEL);
-    }
-
-    @Override
-    public void setHoneyLevel(int honeyLevel) {
-        this.set(CraftBeehive.HONEY_LEVEL, honeyLevel);
-    }
-
-    @Override
-    public int getMaximumHoneyLevel() {
-        return getMax(CraftBeehive.HONEY_LEVEL);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBell.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBell.java
deleted file mode 100644
index 7ffb256c33..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBell.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Bell;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftBell extends CraftBlockData implements Bell {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ATTACHMENT = getEnum("attachment");
-
-    @Override
-    public org.bukkit.block.data.type.Bell.Attachment getAttachment() {
-        return this.get(CraftBell.ATTACHMENT, org.bukkit.block.data.type.Bell.Attachment.class);
-    }
-
-    @Override
-    public void setAttachment(org.bukkit.block.data.type.Bell.Attachment leaves) {
-        this.set(CraftBell.ATTACHMENT, leaves);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBigDripleaf.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBigDripleaf.java
deleted file mode 100644
index 25bbb744a8..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBigDripleaf.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.BigDripleaf;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftBigDripleaf extends CraftBlockData implements BigDripleaf {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TILT = getEnum("tilt");
-
-    @Override
-    public Tilt getTilt() {
-        return this.get(CraftBigDripleaf.TILT, org.bukkit.block.data.type.BigDripleaf.Tilt.class);
-    }
-
-    @Override
-    public void setTilt(org.bukkit.block.data.type.BigDripleaf.Tilt tilt) {
-        this.set(CraftBigDripleaf.TILT, tilt);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBrewingStand.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBrewingStand.java
deleted file mode 100644
index fceebad37f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBrewingStand.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.BrewingStand;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftBrewingStand extends CraftBlockData implements BrewingStand {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] HAS_BOTTLE = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean("has_bottle_0"), getBoolean("has_bottle_1"), getBoolean("has_bottle_2")
-    };
-
-    @Override
-    public boolean hasBottle(int bottle) {
-        return this.get(CraftBrewingStand.HAS_BOTTLE[bottle]);
-    }
-
-    @Override
-    public void setBottle(int bottle, boolean has) {
-        this.set(CraftBrewingStand.HAS_BOTTLE[bottle], has);
-    }
-
-    @Override
-    public java.util.Set<Integer> getBottles() {
-        com.google.common.collect.ImmutableSet.Builder<Integer> bottles = com.google.common.collect.ImmutableSet.builder();
-
-        for (int index = 0; index < this.getMaximumBottles(); index++) {
-            if (this.hasBottle(index)) {
-                bottles.add(index);
-            }
-        }
-
-        return bottles.build();
-    }
-
-    @Override
-    public int getMaximumBottles() {
-        return CraftBrewingStand.HAS_BOTTLE.length;
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBrushable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBrushable.java
deleted file mode 100644
index 52f053b7ce..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBrushable.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.Brushable;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftBrushable extends CraftBlockData implements Brushable {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DUSTED = getInteger("dusted");
-
-    @Override
-    public int getDusted() {
-        return this.get(CraftBrushable.DUSTED);
-    }
-
-    @Override
-    public void setDusted(int dusted) {
-        this.set(CraftBrushable.DUSTED, dusted);
-    }
-
-    @Override
-    public int getMaximumDusted() {
-        return getMax(CraftBrushable.DUSTED);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBubbleColumn.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBubbleColumn.java
deleted file mode 100644
index dd9661a5c6..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftBubbleColumn.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.BubbleColumn;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftBubbleColumn extends CraftBlockData implements BubbleColumn {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty DRAG = getBoolean("drag");
-
-    @Override
-    public boolean isDrag() {
-        return this.get(CraftBubbleColumn.DRAG);
-    }
-
-    @Override
-    public void setDrag(boolean drag) {
-        this.set(CraftBubbleColumn.DRAG, drag);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCake.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCake.java
deleted file mode 100644
index d33ab8bc33..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCake.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Cake;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftCake extends CraftBlockData implements Cake {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty BITES = getInteger("bites");
-
-    @Override
-    public int getBites() {
-        return this.get(CraftCake.BITES);
-    }
-
-    @Override
-    public void setBites(int bites) {
-        this.set(CraftCake.BITES, bites);
-    }
-
-    @Override
-    public int getMaximumBites() {
-        return getMax(CraftCake.BITES);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCampfire.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCampfire.java
deleted file mode 100644
index cd69fa35be..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCampfire.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Campfire;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftCampfire extends CraftBlockData implements Campfire {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SIGNAL_FIRE = getBoolean("signal_fire");
-
-    @Override
-    public boolean isSignalFire() {
-        return this.get(CraftCampfire.SIGNAL_FIRE);
-    }
-
-    @Override
-    public void setSignalFire(boolean signalFire) {
-        this.set(CraftCampfire.SIGNAL_FIRE, signalFire);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCandle.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCandle.java
deleted file mode 100644
index 8a3505009d..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCandle.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Candle;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftCandle extends CraftBlockData implements Candle {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty CANDLES = getInteger("candles");
-
-    @Override
-    public int getCandles() {
-        return this.get(CraftCandle.CANDLES);
-    }
-
-    @Override
-    public void setCandles(int candles) {
-        this.set(CraftCandle.CANDLES, candles);
-    }
-
-    @Override
-    public int getMaximumCandles() {
-        return getMax(CraftCandle.CANDLES);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCaveVinesPlant.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCaveVinesPlant.java
deleted file mode 100644
index 52c032e5fb..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCaveVinesPlant.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.CaveVinesPlant;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftCaveVinesPlant extends CraftBlockData implements CaveVinesPlant {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BERRIES = getBoolean("berries");
-
-    @Override
-    public boolean isBerries() {
-        return this.get(CraftCaveVinesPlant.BERRIES);
-    }
-
-    @Override
-    public void setBerries(boolean berries) {
-        this.set(CraftCaveVinesPlant.BERRIES, berries);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftChest.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftChest.java
deleted file mode 100644
index 02ddf75b61..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftChest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Chest;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftChest extends CraftBlockData implements Chest {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum("type");
-
-    @Override
-    public org.bukkit.block.data.type.Chest.Type getType() {
-        return this.get(CraftChest.TYPE, org.bukkit.block.data.type.Chest.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.Chest.Type type) {
-        this.set(CraftChest.TYPE, type);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftChiseledBookshelf.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftChiseledBookshelf.java
deleted file mode 100644
index 49a5c5c6b5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftChiseledBookshelf.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.ChiseledBookshelf;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftChiseledBookshelf extends CraftBlockData implements ChiseledBookshelf {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] SLOT_OCCUPIED = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean("slot_0_occupied"), getBoolean("slot_1_occupied"), getBoolean("slot_2_occupied"),
-        getBoolean("slot_3_occupied"), getBoolean("slot_4_occupied"), getBoolean("slot_5_occupied")
-    };
-
-    @Override
-    public boolean isSlotOccupied(int slot) {
-        return this.get(CraftChiseledBookshelf.SLOT_OCCUPIED[slot]);
-    }
-
-    @Override
-    public void setSlotOccupied(int slot, boolean has) {
-        this.set(CraftChiseledBookshelf.SLOT_OCCUPIED[slot], has);
-    }
-
-    @Override
-    public java.util.Set<Integer> getOccupiedSlots() {
-        com.google.common.collect.ImmutableSet.Builder<Integer> slots = com.google.common.collect.ImmutableSet.builder();
-
-        for (int index = 0; index < this.getMaximumOccupiedSlots(); index++) {
-            if (this.isSlotOccupied(index)) {
-                slots.add(index);
-            }
-        }
-
-        return slots.build();
-    }
-
-    @Override
-    public int getMaximumOccupiedSlots() {
-        return CraftChiseledBookshelf.SLOT_OCCUPIED.length;
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCommandBlock.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCommandBlock.java
deleted file mode 100644
index 453573189b..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCommandBlock.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.CommandBlock;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftCommandBlock extends CraftBlockData implements CommandBlock {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty CONDITIONAL = getBoolean("conditional");
-
-    @Override
-    public boolean isConditional() {
-        return this.get(CraftCommandBlock.CONDITIONAL);
-    }
-
-    @Override
-    public void setConditional(boolean conditional) {
-        this.set(CraftCommandBlock.CONDITIONAL, conditional);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftComparator.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftComparator.java
deleted file mode 100644
index d9bc382369..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftComparator.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Comparator;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftComparator extends CraftBlockData implements Comparator {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> MODE = getEnum("mode");
-
-    @Override
-    public org.bukkit.block.data.type.Comparator.Mode getMode() {
-        return this.get(CraftComparator.MODE, org.bukkit.block.data.type.Comparator.Mode.class);
-    }
-
-    @Override
-    public void setMode(org.bukkit.block.data.type.Comparator.Mode mode) {
-        this.set(CraftComparator.MODE, mode);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCrafter.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCrafter.java
deleted file mode 100644
index b42a212b03..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCrafter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Crafter;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftCrafter extends CraftBlockData implements Crafter {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty CRAFTING = getBoolean("crafting");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty TRIGGERED = getBoolean("triggered");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ORIENTATION = getEnum("orientation");
-
-    @Override
-    public boolean isCrafting() {
-        return this.get(CraftCrafter.CRAFTING);
-    }
-
-    @Override
-    public void setCrafting(boolean crafting) {
-        this.set(CraftCrafter.CRAFTING, crafting);
-    }
-
-    @Override
-    public boolean isTriggered() {
-        return this.get(CraftCrafter.TRIGGERED);
-    }
-
-    @Override
-    public void setTriggered(boolean triggered) {
-        this.set(CraftCrafter.TRIGGERED, triggered);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.Crafter.Orientation getOrientation() {
-        return this.get(CraftCrafter.ORIENTATION, org.bukkit.block.data.type.Crafter.Orientation.class);
-    }
-
-    @Override
-    public void setOrientation(org.bukkit.block.data.type.Crafter.Orientation orientation) {
-        this.set(CraftCrafter.ORIENTATION, orientation);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCreakingHeart.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCreakingHeart.java
deleted file mode 100644
index 03510587af..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftCreakingHeart.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.CreakingHeart;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftCreakingHeart extends CraftBlockData implements CreakingHeart {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty ACTIVE = getBoolean("active");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty NATURAL = getBoolean("natural");
-
-    @Override
-    public boolean isActive() {
-        return this.get(CraftCreakingHeart.ACTIVE);
-    }
-
-    @Override
-    public void setActive(boolean active) {
-        this.set(CraftCreakingHeart.ACTIVE, active);
-    }
-
-    @Override
-    public boolean isNatural() {
-        return this.get(CraftCreakingHeart.NATURAL);
-    }
-
-    @Override
-    public void setNatural(boolean natural) {
-        this.set(CraftCreakingHeart.NATURAL, natural);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDaylightDetector.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDaylightDetector.java
deleted file mode 100644
index 87d092483a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDaylightDetector.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.DaylightDetector;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftDaylightDetector extends CraftBlockData implements DaylightDetector {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty INVERTED = getBoolean("inverted");
-
-    @Override
-    public boolean isInverted() {
-        return this.get(CraftDaylightDetector.INVERTED);
-    }
-
-    @Override
-    public void setInverted(boolean inverted) {
-        this.set(CraftDaylightDetector.INVERTED, inverted);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDispenser.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDispenser.java
deleted file mode 100644
index 911d02e8da..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDispenser.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Dispenser;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftDispenser extends CraftBlockData implements Dispenser {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty TRIGGERED = getBoolean("triggered");
-
-    @Override
-    public boolean isTriggered() {
-        return this.get(CraftDispenser.TRIGGERED);
-    }
-
-    @Override
-    public void setTriggered(boolean triggered) {
-        this.set(CraftDispenser.TRIGGERED, triggered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDoor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDoor.java
deleted file mode 100644
index 9563cb7994..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftDoor.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Door;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftDoor extends CraftBlockData implements Door {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HINGE = getEnum("hinge");
-
-    @Override
-    public org.bukkit.block.data.type.Door.Hinge getHinge() {
-        return this.get(CraftDoor.HINGE, org.bukkit.block.data.type.Door.Hinge.class);
-    }
-
-    @Override
-    public void setHinge(org.bukkit.block.data.type.Door.Hinge hinge) {
-        this.set(CraftDoor.HINGE, hinge);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftEndPortalFrame.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftEndPortalFrame.java
deleted file mode 100644
index d974174864..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftEndPortalFrame.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.EndPortalFrame;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftEndPortalFrame extends CraftBlockData implements EndPortalFrame {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty EYE = getBoolean("eye");
-
-    @Override
-    public boolean hasEye() {
-        return this.get(CraftEndPortalFrame.EYE);
-    }
-
-    @Override
-    public void setEye(boolean eye) {
-        this.set(CraftEndPortalFrame.EYE, eye);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftFarmland.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftFarmland.java
deleted file mode 100644
index b90c918866..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftFarmland.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Farmland;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftFarmland extends CraftBlockData implements Farmland {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty MOISTURE = getInteger("moisture");
-
-    @Override
-    public int getMoisture() {
-        return this.get(CraftFarmland.MOISTURE);
-    }
-
-    @Override
-    public void setMoisture(int moisture) {
-        this.set(CraftFarmland.MOISTURE, moisture);
-    }
-
-    @Override
-    public int getMaximumMoisture() {
-        return getMax(CraftFarmland.MOISTURE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftGate.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftGate.java
deleted file mode 100644
index cd2350f5a7..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftGate.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Gate;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftGate extends CraftBlockData implements Gate {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty IN_WALL = getBoolean("in_wall");
-
-    @Override
-    public boolean isInWall() {
-        return this.get(CraftGate.IN_WALL);
-    }
-
-    @Override
-    public void setInWall(boolean inWall) {
-        this.set(CraftGate.IN_WALL, inWall);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftHangingMoss.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftHangingMoss.java
deleted file mode 100644
index fe8699ed73..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftHangingMoss.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.HangingMoss;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftHangingMoss extends CraftBlockData implements HangingMoss {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty TIP = getBoolean("tip");
-
-    @Override
-    public boolean isTip() {
-        return this.get(CraftHangingMoss.TIP);
-    }
-
-    @Override
-    public void setTip(boolean tip) {
-        this.set(CraftHangingMoss.TIP, tip);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftHopper.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftHopper.java
deleted file mode 100644
index 2da0ea263d..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftHopper.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Hopper;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftHopper extends CraftBlockData implements Hopper {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty ENABLED = getBoolean("enabled");
-
-    @Override
-    public boolean isEnabled() {
-        return this.get(CraftHopper.ENABLED);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        this.set(CraftHopper.ENABLED, enabled);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftJigsaw.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftJigsaw.java
deleted file mode 100644
index 0c88bb8248..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftJigsaw.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Jigsaw;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftJigsaw extends CraftBlockData implements Jigsaw {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ORIENTATION = getEnum("orientation");
-
-    @Override
-    public org.bukkit.block.data.type.Jigsaw.Orientation getOrientation() {
-        return this.get(CraftJigsaw.ORIENTATION, org.bukkit.block.data.type.Jigsaw.Orientation.class);
-    }
-
-    @Override
-    public void setOrientation(org.bukkit.block.data.type.Jigsaw.Orientation orientation) {
-        this.set(CraftJigsaw.ORIENTATION, orientation);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftJukebox.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftJukebox.java
deleted file mode 100644
index 2f22f99bc0..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftJukebox.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Jukebox;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftJukebox extends CraftBlockData implements Jukebox {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty HAS_RECORD = getBoolean("has_record");
-
-    @Override
-    public boolean hasRecord() {
-        return this.get(CraftJukebox.HAS_RECORD);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftLeaves.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftLeaves.java
deleted file mode 100644
index 832c984bc9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftLeaves.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Leaves;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftLeaves extends CraftBlockData implements Leaves {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DISTANCE = getInteger("distance");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty PERSISTENT = getBoolean("persistent");
-
-    @Override
-    public boolean isPersistent() {
-        return this.get(CraftLeaves.PERSISTENT);
-    }
-
-    @Override
-    public void setPersistent(boolean persistent) {
-        this.set(CraftLeaves.PERSISTENT, persistent);
-    }
-
-    @Override
-    public int getDistance() {
-        return this.get(CraftLeaves.DISTANCE);
-    }
-
-    @Override
-    public void setDistance(int distance) {
-        this.set(CraftLeaves.DISTANCE, distance);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftLectern.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftLectern.java
deleted file mode 100644
index dcbe832b19..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftLectern.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Lectern;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftLectern extends CraftBlockData implements Lectern {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty HAS_BOOK = getBoolean("has_book");
-
-    @Override
-    public boolean hasBook() {
-        return this.get(CraftLectern.HAS_BOOK);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftMossyCarpet.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftMossyCarpet.java
deleted file mode 100644
index 80a646334e..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftMossyCarpet.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.MossyCarpet;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftMossyCarpet extends CraftBlockData implements MossyCarpet {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BOTTOM = getBoolean("bottom");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?>[] HEIGHTS = new net.minecraft.world.level.block.state.properties.EnumProperty[]{
-        getEnum("north"), getEnum("east"), getEnum("south"), getEnum("west")
-    };
-
-    @Override
-    public boolean isBottom() {
-        return this.get(CraftMossyCarpet.BOTTOM);
-    }
-
-    @Override
-    public void setBottom(boolean up) {
-        this.set(CraftMossyCarpet.BOTTOM, up);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.MossyCarpet.Height getHeight(org.bukkit.block.BlockFace face) {
-        return this.get(CraftMossyCarpet.HEIGHTS[face.ordinal()], org.bukkit.block.data.type.MossyCarpet.Height.class);
-    }
-
-    @Override
-    public void setHeight(org.bukkit.block.BlockFace face, org.bukkit.block.data.type.MossyCarpet.Height height) {
-        this.set(CraftMossyCarpet.HEIGHTS[face.ordinal()], height);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftNoteBlock.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftNoteBlock.java
deleted file mode 100644
index c44d33fb3a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftNoteBlock.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.NoteBlock;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftNoteBlock extends CraftBlockData implements NoteBlock {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> INSTRUMENT = getEnum("instrument");
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty NOTE = getInteger("note");
-
-    @Override
-    public org.bukkit.Instrument getInstrument() {
-        return this.get(CraftNoteBlock.INSTRUMENT, org.bukkit.Instrument.class);
-    }
-
-    @Override
-    public void setInstrument(org.bukkit.Instrument instrument) {
-        this.set(CraftNoteBlock.INSTRUMENT, instrument);
-    }
-
-    @Override
-    public org.bukkit.Note getNote() {
-       return new org.bukkit.Note(this.get(CraftNoteBlock.NOTE));
-    }
-
-    @Override
-    public void setNote(org.bukkit.Note note) {
-        this.set(CraftNoteBlock.NOTE, (int) note.getId());
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPinkPetals.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPinkPetals.java
deleted file mode 100644
index 97fd7e4a39..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPinkPetals.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.PinkPetals;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftPinkPetals extends CraftBlockData implements PinkPetals {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty FLOWER_AMOUNT = getInteger("flower_amount");
-
-    @Override
-    public int getFlowerAmount() {
-        return this.get(CraftPinkPetals.FLOWER_AMOUNT);
-    }
-
-    @Override
-    public void setFlowerAmount(int flower_amount) {
-        this.set(CraftPinkPetals.FLOWER_AMOUNT, flower_amount);
-    }
-
-    @Override
-    public int getMaximumFlowerAmount() {
-        return getMax(CraftPinkPetals.FLOWER_AMOUNT);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPiston.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPiston.java
deleted file mode 100644
index 193cf626c4..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPiston.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Piston;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftPiston extends CraftBlockData implements Piston {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty EXTENDED = getBoolean("extended");
-
-    @Override
-    public boolean isExtended() {
-        return this.get(CraftPiston.EXTENDED);
-    }
-
-    @Override
-    public void setExtended(boolean extended) {
-        this.set(CraftPiston.EXTENDED, extended);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPistonHead.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPistonHead.java
deleted file mode 100644
index 07447b9550..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPistonHead.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.PistonHead;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftPistonHead extends CraftBlockData implements PistonHead {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SHORT = getBoolean("short");
-
-    @Override
-    public boolean isShort() {
-        return this.get(CraftPistonHead.SHORT);
-    }
-
-    @Override
-    public void setShort(boolean _short) {
-        this.set(CraftPistonHead.SHORT, _short);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPointedDripstone.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPointedDripstone.java
deleted file mode 100644
index bfff4e16b2..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftPointedDripstone.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.PointedDripstone;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftPointedDripstone extends CraftBlockData implements PointedDripstone {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> VERTICAL_DIRECTION = getEnum("vertical_direction");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> THICKNESS = getEnum("thickness");
-
-    @Override
-    public org.bukkit.block.BlockFace getVerticalDirection() {
-        return this.get(CraftPointedDripstone.VERTICAL_DIRECTION, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setVerticalDirection(org.bukkit.block.BlockFace direction) {
-        this.set(CraftPointedDripstone.VERTICAL_DIRECTION, direction);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getVerticalDirections() {
-        return this.getValues(CraftPointedDripstone.VERTICAL_DIRECTION, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.PointedDripstone.Thickness getThickness() {
-        return this.get(CraftPointedDripstone.THICKNESS, org.bukkit.block.data.type.PointedDripstone.Thickness.class);
-    }
-
-    @Override
-    public void setThickness(org.bukkit.block.data.type.PointedDripstone.Thickness thickness) {
-        this.set(CraftPointedDripstone.THICKNESS, thickness);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRedstoneWire.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRedstoneWire.java
deleted file mode 100644
index 9d1f4d0b20..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRedstoneWire.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.RedstoneWire;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftRedstoneWire extends CraftBlockData implements RedstoneWire {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> NORTH = getEnum("north");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> EAST = getEnum("east");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SOUTH = getEnum("south");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> WEST = getEnum("west");
-
-    @Override
-    public org.bukkit.block.data.type.RedstoneWire.Connection getFace(org.bukkit.block.BlockFace face) {
-        switch (face) {
-            case NORTH:
-                return this.get(CraftRedstoneWire.NORTH, org.bukkit.block.data.type.RedstoneWire.Connection.class);
-            case EAST:
-                return this.get(CraftRedstoneWire.EAST, org.bukkit.block.data.type.RedstoneWire.Connection.class);
-            case SOUTH:
-                return this.get(CraftRedstoneWire.SOUTH, org.bukkit.block.data.type.RedstoneWire.Connection.class);
-            case WEST:
-                return this.get(CraftRedstoneWire.WEST, org.bukkit.block.data.type.RedstoneWire.Connection.class);
-            default:
-                throw new IllegalArgumentException("Cannot have face " + face);
-        }
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, org.bukkit.block.data.type.RedstoneWire.Connection connection) {
-        switch (face) {
-            case NORTH:
-                this.set(CraftRedstoneWire.NORTH, connection);
-                break;
-            case EAST:
-                this.set(CraftRedstoneWire.EAST, connection);
-                break;
-            case SOUTH:
-                this.set(CraftRedstoneWire.SOUTH, connection);
-                break;
-            case WEST:
-                this.set(CraftRedstoneWire.WEST, connection);
-                break;
-            default:
-                throw new IllegalArgumentException("Cannot have face " + face);
-        }
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        return com.google.common.collect.ImmutableSet.of(org.bukkit.block.BlockFace.NORTH, org.bukkit.block.BlockFace.EAST, org.bukkit.block.BlockFace.SOUTH, org.bukkit.block.BlockFace.WEST);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRepeater.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRepeater.java
deleted file mode 100644
index 8f2f55f917..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRepeater.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Repeater;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftRepeater extends CraftBlockData implements Repeater {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DELAY = getInteger("delay");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LOCKED = getBoolean("locked");
-
-    @Override
-    public int getDelay() {
-        return this.get(CraftRepeater.DELAY);
-    }
-
-    @Override
-    public void setDelay(int delay) {
-        this.set(CraftRepeater.DELAY, delay);
-    }
-
-    @Override
-    public int getMinimumDelay() {
-        return getMin(CraftRepeater.DELAY);
-    }
-
-    @Override
-    public int getMaximumDelay() {
-        return getMax(CraftRepeater.DELAY);
-    }
-
-    @Override
-    public boolean isLocked() {
-        return this.get(CraftRepeater.LOCKED);
-    }
-
-    @Override
-    public void setLocked(boolean locked) {
-        this.set(CraftRepeater.LOCKED, locked);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRespawnAnchor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRespawnAnchor.java
deleted file mode 100644
index eb4f393801..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftRespawnAnchor.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.RespawnAnchor;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftRespawnAnchor extends CraftBlockData implements RespawnAnchor {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty CHARGES = getInteger("charges");
-
-    @Override
-    public int getCharges() {
-        return this.get(CraftRespawnAnchor.CHARGES);
-    }
-
-    @Override
-    public void setCharges(int charges) {
-        this.set(CraftRespawnAnchor.CHARGES, charges);
-    }
-
-    @Override
-    public int getMaximumCharges() {
-        return getMax(CraftRespawnAnchor.CHARGES);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSapling.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSapling.java
deleted file mode 100644
index a0a4249e7f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSapling.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Sapling;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftSapling extends CraftBlockData implements Sapling {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty STAGE = getInteger("stage");
-
-    @Override
-    public int getStage() {
-        return this.get(CraftSapling.STAGE);
-    }
-
-    @Override
-    public void setStage(int stage) {
-        this.set(CraftSapling.STAGE, stage);
-    }
-
-    @Override
-    public int getMaximumStage() {
-        return getMax(CraftSapling.STAGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftScaffolding.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftScaffolding.java
deleted file mode 100644
index d8f4ddf8cf..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftScaffolding.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Scaffolding;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftScaffolding extends CraftBlockData implements Scaffolding {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BOTTOM = getBoolean("bottom");
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DISTANCE = getInteger("distance");
-
-    @Override
-    public boolean isBottom() {
-        return this.get(CraftScaffolding.BOTTOM);
-    }
-
-    @Override
-    public void setBottom(boolean bottom) {
-        this.set(CraftScaffolding.BOTTOM, bottom);
-    }
-
-    @Override
-    public int getDistance() {
-        return this.get(CraftScaffolding.DISTANCE);
-    }
-
-    @Override
-    public void setDistance(int distance) {
-        this.set(CraftScaffolding.DISTANCE, distance);
-    }
-
-    @Override
-    public int getMaximumDistance() {
-        return getMax(CraftScaffolding.DISTANCE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkCatalyst.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkCatalyst.java
deleted file mode 100644
index 8b714e0371..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkCatalyst.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.SculkCatalyst;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftSculkCatalyst extends CraftBlockData implements SculkCatalyst {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BLOOM = getBoolean("bloom");
-
-    @Override
-    public boolean isBloom() {
-        return this.get(CraftSculkCatalyst.BLOOM);
-    }
-
-    @Override
-    public void setBloom(boolean bloom) {
-        this.set(CraftSculkCatalyst.BLOOM, bloom);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkSensor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkSensor.java
deleted file mode 100644
index de48a235af..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkSensor.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.SculkSensor;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftSculkSensor extends CraftBlockData implements SculkSensor {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> PHASE = getEnum("sculk_sensor_phase");
-
-    @Override
-    public org.bukkit.block.data.type.SculkSensor.Phase getPhase() {
-        return this.get(CraftSculkSensor.PHASE, org.bukkit.block.data.type.SculkSensor.Phase.class);
-    }
-
-    @Override
-    public void setPhase(org.bukkit.block.data.type.SculkSensor.Phase phase) {
-        this.set(CraftSculkSensor.PHASE, phase);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkShrieker.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkShrieker.java
deleted file mode 100644
index a3fb0f17aa..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSculkShrieker.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.SculkShrieker;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftSculkShrieker extends CraftBlockData implements SculkShrieker {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty CAN_SUMMON = getBoolean("can_summon");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SHRIEKING = getBoolean("shrieking");
-
-    @Override
-    public boolean isCanSummon() {
-        return this.get(CraftSculkShrieker.CAN_SUMMON);
-    }
-
-    @Override
-    public void setCanSummon(boolean can_summon) {
-        this.set(CraftSculkShrieker.CAN_SUMMON, can_summon);
-    }
-
-    @Override
-    public boolean isShrieking() {
-        return this.get(CraftSculkShrieker.SHRIEKING);
-    }
-
-    @Override
-    public void setShrieking(boolean shrieking) {
-        this.set(CraftSculkShrieker.SHRIEKING, shrieking);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSeaPickle.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSeaPickle.java
deleted file mode 100644
index 71ab0b24a7..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSeaPickle.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.SeaPickle;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftSeaPickle extends CraftBlockData implements SeaPickle {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty PICKLES = getInteger("pickles");
-
-    @Override
-    public int getPickles() {
-        return this.get(CraftSeaPickle.PICKLES);
-    }
-
-    @Override
-    public void setPickles(int pickles) {
-        this.set(CraftSeaPickle.PICKLES, pickles);
-    }
-
-    @Override
-    public int getMinimumPickles() {
-        return getMin(CraftSeaPickle.PICKLES);
-    }
-
-    @Override
-    public int getMaximumPickles() {
-        return getMax(CraftSeaPickle.PICKLES);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSlab.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSlab.java
deleted file mode 100644
index c64c1baa7e..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSlab.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Slab;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftSlab extends CraftBlockData implements Slab {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum("type");
-
-    @Override
-    public org.bukkit.block.data.type.Slab.Type getType() {
-        return this.get(CraftSlab.TYPE, org.bukkit.block.data.type.Slab.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.Slab.Type type) {
-        this.set(CraftSlab.TYPE, type);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSnow.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSnow.java
deleted file mode 100644
index e3c9182866..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSnow.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Snow;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public class CraftSnow extends CraftBlockData implements Snow {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty LAYERS = getInteger("layers");
-
-    @Override
-    public int getLayers() {
-        return this.get(CraftSnow.LAYERS);
-    }
-
-    @Override
-    public void setLayers(int layers) {
-        this.set(CraftSnow.LAYERS, layers);
-    }
-
-    @Override
-    public int getMinimumLayers() {
-        return getMin(CraftSnow.LAYERS);
-    }
-
-    @Override
-    public int getMaximumLayers() {
-        return getMax(CraftSnow.LAYERS);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftStairs.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftStairs.java
deleted file mode 100644
index 1155492322..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftStairs.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Stairs;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftStairs extends CraftBlockData implements Stairs {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SHAPE = getEnum("shape");
-
-    @Override
-    public org.bukkit.block.data.type.Stairs.Shape getShape() {
-        return this.get(CraftStairs.SHAPE, org.bukkit.block.data.type.Stairs.Shape.class);
-    }
-
-    @Override
-    public void setShape(org.bukkit.block.data.type.Stairs.Shape shape) {
-        this.set(CraftStairs.SHAPE, shape);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftStructureBlock.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftStructureBlock.java
deleted file mode 100644
index dc4cb64ade..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftStructureBlock.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.StructureBlock;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftStructureBlock extends CraftBlockData implements StructureBlock {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> MODE = getEnum("mode");
-
-    @Override
-    public org.bukkit.block.data.type.StructureBlock.Mode getMode() {
-        return this.get(CraftStructureBlock.MODE, org.bukkit.block.data.type.StructureBlock.Mode.class);
-    }
-
-    @Override
-    public void setMode(org.bukkit.block.data.type.StructureBlock.Mode mode) {
-        this.set(CraftStructureBlock.MODE, mode);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSwitch.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSwitch.java
deleted file mode 100644
index f756460fc5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftSwitch.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Switch;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftSwitch extends CraftBlockData implements Switch {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACE = getEnum("face");
-
-    @Override
-    public org.bukkit.block.data.type.Switch.Face getFace() {
-        return this.get(CraftSwitch.FACE, org.bukkit.block.data.type.Switch.Face.class);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.data.type.Switch.Face face) {
-        this.set(CraftSwitch.FACE, face);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTNT.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTNT.java
deleted file mode 100644
index 47fa133dd5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTNT.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.TNT;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftTNT extends CraftBlockData implements TNT {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty UNSTABLE = getBoolean("unstable");
-
-    @Override
-    public boolean isUnstable() {
-        return this.get(CraftTNT.UNSTABLE);
-    }
-
-    @Override
-    public void setUnstable(boolean unstable) {
-        this.set(CraftTNT.UNSTABLE, unstable);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTechnicalPiston.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTechnicalPiston.java
deleted file mode 100644
index 8a9b45733c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTechnicalPiston.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.TechnicalPiston;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftTechnicalPiston extends CraftBlockData implements TechnicalPiston {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum("type");
-
-    @Override
-    public org.bukkit.block.data.type.TechnicalPiston.Type getType() {
-        return this.get(CraftTechnicalPiston.TYPE, org.bukkit.block.data.type.TechnicalPiston.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.TechnicalPiston.Type type) {
-        this.set(CraftTechnicalPiston.TYPE, type);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTrialSpawner.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTrialSpawner.java
deleted file mode 100644
index 9aba1df5d1..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTrialSpawner.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.TrialSpawner;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftTrialSpawner extends CraftBlockData implements TrialSpawner {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TRIAL_SPAWNER_STATE = getEnum("trial_spawner_state");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OMINOUS = getBoolean("ominous");
-
-    @Override
-    public org.bukkit.block.data.type.TrialSpawner.State getTrialSpawnerState() {
-        return this.get(CraftTrialSpawner.TRIAL_SPAWNER_STATE, org.bukkit.block.data.type.TrialSpawner.State.class);
-    }
-
-    @Override
-    public void setTrialSpawnerState(org.bukkit.block.data.type.TrialSpawner.State state) {
-        this.set(CraftTrialSpawner.TRIAL_SPAWNER_STATE, state);
-    }
-
-    @Override
-    public boolean isOminous() {
-        return this.get(CraftTrialSpawner.OMINOUS);
-    }
-
-    @Override
-    public void setOminous(boolean ominous) {
-        this.set(CraftTrialSpawner.OMINOUS, ominous);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTripwire.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTripwire.java
deleted file mode 100644
index 7e943cdf00..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTripwire.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Tripwire;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftTripwire extends CraftBlockData implements Tripwire {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty DISARMED = getBoolean("disarmed");
-
-    @Override
-    public boolean isDisarmed() {
-        return this.get(CraftTripwire.DISARMED);
-    }
-
-    @Override
-    public void setDisarmed(boolean disarmed) {
-        this.set(CraftTripwire.DISARMED, disarmed);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTurtleEgg.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTurtleEgg.java
deleted file mode 100644
index 98c0a4e9cd..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftTurtleEgg.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.TurtleEgg;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftTurtleEgg extends CraftBlockData implements TurtleEgg {
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty EGGS = getInteger("eggs");
-
-    @Override
-    public int getEggs() {
-        return this.get(CraftTurtleEgg.EGGS);
-    }
-
-    @Override
-    public void setEggs(int eggs) {
-        this.set(CraftTurtleEgg.EGGS, eggs);
-    }
-
-    @Override
-    public int getMinimumEggs() {
-        return getMin(CraftTurtleEgg.EGGS);
-    }
-
-    @Override
-    public int getMaximumEggs() {
-        return getMax(CraftTurtleEgg.EGGS);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftVault.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftVault.java
deleted file mode 100644
index 37c850cccb..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftVault.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Vault;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftVault extends CraftBlockData implements Vault {
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> VAULT_STATE = getEnum("vault_state");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OMINOUS = getBoolean("ominous");
-
-    @Override
-    public org.bukkit.block.data.type.Vault.State getVaultState() {
-        return this.get(CraftVault.VAULT_STATE, org.bukkit.block.data.type.Vault.State.class);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.Vault.State getTrialSpawnerState() {
-        return this.getVaultState();
-    }
-
-    @Override
-    public void setVaultState(org.bukkit.block.data.type.Vault.State state) {
-        this.set(CraftVault.VAULT_STATE, state);
-    }
-
-    @Override
-    public void setTrialSpawnerState(org.bukkit.block.data.type.Vault.State state) {
-        this.setVaultState(state);
-    }
-
-    @Override
-    public boolean isOminous() {
-        return this.get(CraftVault.OMINOUS);
-    }
-
-    @Override
-    public void setOminous(boolean ominous) {
-        this.set(CraftVault.OMINOUS, ominous);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftWall.java
deleted file mode 100644
index 00f287a84f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/type/CraftWall.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.bukkit.craftbukkit.block.data.type;
-
-import org.bukkit.block.data.type.Wall;
-import org.bukkit.craftbukkit.block.data.CraftBlockData;
-
-public abstract class CraftWall extends CraftBlockData implements Wall {
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty UP = getBoolean("up");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?>[] HEIGHTS = new net.minecraft.world.level.block.state.properties.EnumProperty[]{
-        getEnum("north"), getEnum("east"), getEnum("south"), getEnum("west")
-    };
-
-    @Override
-    public boolean isUp() {
-        return this.get(CraftWall.UP);
-    }
-
-    @Override
-    public void setUp(boolean up) {
-        this.set(CraftWall.UP, up);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.Wall.Height getHeight(org.bukkit.block.BlockFace face) {
-        return this.get(CraftWall.HEIGHTS[face.ordinal()], org.bukkit.block.data.type.Wall.Height.class);
-    }
-
-    @Override
-    public void setHeight(org.bukkit.block.BlockFace face, org.bukkit.block.data.type.Wall.Height height) {
-        this.set(CraftWall.HEIGHTS[face.ordinal()], height);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftAmethystCluster.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftAmethystCluster.java
deleted file mode 100644
index a78c931b3f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftAmethystCluster.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftAmethystCluster extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.AmethystCluster, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftAmethystCluster() {
-        super();
-    }
-
-    public CraftAmethystCluster(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.AmethystClusterBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftAmethystCluster.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftAmethystCluster.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftAmethystCluster.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.AmethystClusterBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftAmethystCluster.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftAmethystCluster.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftAnvil.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftAnvil.java
deleted file mode 100644
index b2ffbebdeb..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftAnvil.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftAnvil extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftAnvil() {
-        super();
-    }
-
-    public CraftAnvil(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.AnvilBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftAnvil.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftAnvil.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftAnvil.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBamboo.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBamboo.java
deleted file mode 100644
index ef37065539..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBamboo.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBamboo extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Bamboo, org.bukkit.block.data.Ageable, org.bukkit.block.data.type.Sapling {
-
-    public CraftBamboo() {
-        super();
-    }
-
-    public CraftBamboo(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftBamboo
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> LEAVES = getEnum(net.minecraft.world.level.block.BambooStalkBlock.class, "leaves");
-
-    @Override
-    public org.bukkit.block.data.type.Bamboo.Leaves getLeaves() {
-        return this.get(CraftBamboo.LEAVES, org.bukkit.block.data.type.Bamboo.Leaves.class);
-    }
-
-    @Override
-    public void setLeaves(org.bukkit.block.data.type.Bamboo.Leaves leaves) {
-        this.set(CraftBamboo.LEAVES, leaves);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.BambooStalkBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftBamboo.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftBamboo.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftBamboo.AGE);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSapling
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty STAGE = getInteger(net.minecraft.world.level.block.BambooStalkBlock.class, "stage");
-
-    @Override
-    public int getStage() {
-        return this.get(CraftBamboo.STAGE);
-    }
-
-    @Override
-    public void setStage(int stage) {
-        this.set(CraftBamboo.STAGE, stage);
-    }
-
-    @Override
-    public int getMaximumStage() {
-        return getMax(CraftBamboo.STAGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBanner.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBanner.java
deleted file mode 100644
index 79055ee1e1..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBanner.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBanner extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Rotatable {
-
-    public CraftBanner() {
-        super();
-    }
-
-    public CraftBanner(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRotatable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty ROTATION = getInteger(net.minecraft.world.level.block.BannerBlock.class, "rotation");
-
-    @Override
-    public org.bukkit.block.BlockFace getRotation() {
-        int data = this.get(CraftBanner.ROTATION);
-        switch (data) {
-            case 0x0:
-                return org.bukkit.block.BlockFace.SOUTH;
-            case 0x1:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_WEST;
-            case 0x2:
-                return org.bukkit.block.BlockFace.SOUTH_WEST;
-            case 0x3:
-                return org.bukkit.block.BlockFace.WEST_SOUTH_WEST;
-            case 0x4:
-                return org.bukkit.block.BlockFace.WEST;
-            case 0x5:
-                return org.bukkit.block.BlockFace.WEST_NORTH_WEST;
-            case 0x6:
-                return org.bukkit.block.BlockFace.NORTH_WEST;
-            case 0x7:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_WEST;
-            case 0x8:
-                return org.bukkit.block.BlockFace.NORTH;
-            case 0x9:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_EAST;
-            case 0xA:
-                return org.bukkit.block.BlockFace.NORTH_EAST;
-            case 0xB:
-                return org.bukkit.block.BlockFace.EAST_NORTH_EAST;
-            case 0xC:
-                return org.bukkit.block.BlockFace.EAST;
-            case 0xD:
-                return org.bukkit.block.BlockFace.EAST_SOUTH_EAST;
-            case 0xE:
-                return org.bukkit.block.BlockFace.SOUTH_EAST;
-            case 0xF:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_EAST;
-            default:
-                throw new IllegalArgumentException("Unknown rotation " + data);
-        }
-    }
-
-    @Override
-    public void setRotation(org.bukkit.block.BlockFace rotation) {
-        int val;
-        switch (rotation) {
-            case SOUTH:
-                val = 0x0;
-                break;
-            case SOUTH_SOUTH_WEST:
-                val = 0x1;
-                break;
-            case SOUTH_WEST:
-                val = 0x2;
-                break;
-            case WEST_SOUTH_WEST:
-                val = 0x3;
-                break;
-            case WEST:
-                val = 0x4;
-                break;
-            case WEST_NORTH_WEST:
-                val = 0x5;
-                break;
-            case NORTH_WEST:
-                val = 0x6;
-                break;
-            case NORTH_NORTH_WEST:
-                val = 0x7;
-                break;
-            case NORTH:
-                val = 0x8;
-                break;
-            case NORTH_NORTH_EAST:
-                val = 0x9;
-                break;
-            case NORTH_EAST:
-                val = 0xA;
-                break;
-            case EAST_NORTH_EAST:
-                val = 0xB;
-                break;
-            case EAST:
-                val = 0xC;
-                break;
-            case EAST_SOUTH_EAST:
-                val = 0xD;
-                break;
-            case SOUTH_EAST:
-                val = 0xE;
-                break;
-            case SOUTH_SOUTH_EAST:
-                val = 0xF;
-                break;
-            default:
-                throw new IllegalArgumentException("Illegal rotation " + rotation);
-        }
-        this.set(CraftBanner.ROTATION, val);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBannerWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBannerWall.java
deleted file mode 100644
index 03f2ca6784..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBannerWall.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBannerWall extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftBannerWall() {
-        super();
-    }
-
-    public CraftBannerWall(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WallBannerBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftBannerWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftBannerWall.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftBannerWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBarrel.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBarrel.java
deleted file mode 100644
index 511460a8fa..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBarrel.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBarrel extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Barrel, org.bukkit.block.data.Directional, org.bukkit.block.data.Openable {
-
-    public CraftBarrel() {
-        super();
-    }
-
-    public CraftBarrel(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.BarrelBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftBarrel.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftBarrel.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftBarrel.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOpenable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OPEN = getBoolean(net.minecraft.world.level.block.BarrelBlock.class, "open");
-
-    @Override
-    public boolean isOpen() {
-        return this.get(CraftBarrel.OPEN);
-    }
-
-    @Override
-    public void setOpen(boolean open) {
-        this.set(CraftBarrel.OPEN, open);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBarrier.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBarrier.java
deleted file mode 100644
index 1e810e5be4..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBarrier.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBarrier extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftBarrier() {
-        super();
-    }
-
-    public CraftBarrier(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.BarrierBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftBarrier.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftBarrier.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBed.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
deleted file mode 100644
index e5450d3511..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBed extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Bed, org.bukkit.block.data.Directional {
-
-    public CraftBed() {
-        super();
-    }
-
-    public CraftBed(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftBed
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> PART = getEnum(net.minecraft.world.level.block.BedBlock.class, "part");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OCCUPIED = getBoolean(net.minecraft.world.level.block.BedBlock.class, "occupied");
-
-    @Override
-    public org.bukkit.block.data.type.Bed.Part getPart() {
-        return this.get(CraftBed.PART, org.bukkit.block.data.type.Bed.Part.class);
-    }
-
-    @Override
-    public void setPart(org.bukkit.block.data.type.Bed.Part part) {
-        this.set(CraftBed.PART, part);
-    }
-
-    @Override
-    public boolean isOccupied() {
-        return this.get(CraftBed.OCCUPIED);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.BedBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftBed.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftBed.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftBed.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // Paper start
-    @Override
-    public void setOccupied(boolean occupied) {
-        set(CraftBed.OCCUPIED, occupied);
-    }
-    // Paper end
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBeehive.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBeehive.java
deleted file mode 100644
index a081a19ece..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBeehive.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBeehive extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Beehive, org.bukkit.block.data.Directional {
-
-    public CraftBeehive() {
-        super();
-    }
-
-    public CraftBeehive(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftBeehive
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty HONEY_LEVEL = getInteger(net.minecraft.world.level.block.BeehiveBlock.class, "honey_level");
-
-    @Override
-    public int getHoneyLevel() {
-        return this.get(CraftBeehive.HONEY_LEVEL);
-    }
-
-    @Override
-    public void setHoneyLevel(int honeyLevel) {
-        this.set(CraftBeehive.HONEY_LEVEL, honeyLevel);
-    }
-
-    @Override
-    public int getMaximumHoneyLevel() {
-        return getMax(CraftBeehive.HONEY_LEVEL);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.BeehiveBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftBeehive.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftBeehive.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftBeehive.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBeetroot.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBeetroot.java
deleted file mode 100644
index 90b4883f3e..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBeetroot.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBeetroot extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftBeetroot() {
-        super();
-    }
-
-    public CraftBeetroot(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.BeetrootBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftBeetroot.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftBeetroot.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftBeetroot.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBell.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBell.java
deleted file mode 100644
index b534cb23ab..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBell.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBell extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Bell, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftBell() {
-        super();
-    }
-
-    public CraftBell(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftBell
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ATTACHMENT = getEnum(net.minecraft.world.level.block.BellBlock.class, "attachment");
-
-    @Override
-    public org.bukkit.block.data.type.Bell.Attachment getAttachment() {
-        return this.get(CraftBell.ATTACHMENT, org.bukkit.block.data.type.Bell.Attachment.class);
-    }
-
-    @Override
-    public void setAttachment(org.bukkit.block.data.type.Bell.Attachment leaves) {
-        this.set(CraftBell.ATTACHMENT, leaves);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.BellBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftBell.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftBell.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftBell.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.BellBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftBell.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftBell.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleaf.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleaf.java
deleted file mode 100644
index 9fe7d42176..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleaf.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBigDripleaf extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.BigDripleaf, org.bukkit.block.data.type.Dripleaf, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftBigDripleaf() {
-        super();
-    }
-
-    public CraftBigDripleaf(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftBigDripleaf
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TILT = getEnum(net.minecraft.world.level.block.BigDripleafBlock.class, "tilt");
-
-    @Override
-    public Tilt getTilt() {
-        return this.get(CraftBigDripleaf.TILT, org.bukkit.block.data.type.BigDripleaf.Tilt.class);
-    }
-
-    @Override
-    public void setTilt(org.bukkit.block.data.type.BigDripleaf.Tilt tilt) {
-        this.set(CraftBigDripleaf.TILT, tilt);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.BigDripleafBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftBigDripleaf.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftBigDripleaf.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftBigDripleaf.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.BigDripleafBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftBigDripleaf.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftBigDripleaf.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleafStem.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleafStem.java
deleted file mode 100644
index 64b872cbde..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBigDripleafStem.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBigDripleafStem extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Dripleaf, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftBigDripleafStem() {
-        super();
-    }
-
-    public CraftBigDripleafStem(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.BigDripleafStemBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftBigDripleafStem.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftBigDripleafStem.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftBigDripleafStem.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.BigDripleafStemBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftBigDripleafStem.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftBigDripleafStem.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBlastFurnace.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBlastFurnace.java
deleted file mode 100644
index 64e18412c6..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBlastFurnace.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBlastFurnace extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Furnace, org.bukkit.block.data.Directional, org.bukkit.block.data.Lightable {
-
-    public CraftBlastFurnace() {
-        super();
-    }
-
-    public CraftBlastFurnace(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.BlastFurnaceBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftBlastFurnace.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftBlastFurnace.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftBlastFurnace.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.BlastFurnaceBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftBlastFurnace.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftBlastFurnace.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBrewingStand.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBrewingStand.java
deleted file mode 100644
index 1815adec06..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBrewingStand.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBrewingStand extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.BrewingStand {
-
-    public CraftBrewingStand() {
-        super();
-    }
-
-    public CraftBrewingStand(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftBrewingStand
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] HAS_BOTTLE = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.BrewingStandBlock.class, "has_bottle_0"), getBoolean(net.minecraft.world.level.block.BrewingStandBlock.class, "has_bottle_1"), getBoolean(net.minecraft.world.level.block.BrewingStandBlock.class, "has_bottle_2")
-    };
-
-    @Override
-    public boolean hasBottle(int bottle) {
-        return this.get(CraftBrewingStand.HAS_BOTTLE[bottle]);
-    }
-
-    @Override
-    public void setBottle(int bottle, boolean has) {
-        this.set(CraftBrewingStand.HAS_BOTTLE[bottle], has);
-    }
-
-    @Override
-    public java.util.Set<Integer> getBottles() {
-        com.google.common.collect.ImmutableSet.Builder<Integer> bottles = com.google.common.collect.ImmutableSet.builder();
-
-        for (int index = 0; index < this.getMaximumBottles(); index++) {
-            if (this.hasBottle(index)) {
-                bottles.add(index);
-            }
-        }
-
-        return bottles.build();
-    }
-
-    @Override
-    public int getMaximumBottles() {
-        return CraftBrewingStand.HAS_BOTTLE.length;
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBrushable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBrushable.java
deleted file mode 100644
index 303d624263..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBrushable.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBrushable extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Brushable {
-
-    public CraftBrushable() {
-        super();
-    }
-
-    public CraftBrushable(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBrushable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DUSTED = getInteger(net.minecraft.world.level.block.BrushableBlock.class, "dusted");
-
-    @Override
-    public int getDusted() {
-        return this.get(CraftBrushable.DUSTED);
-    }
-
-    @Override
-    public void setDusted(int dusted) {
-        this.set(CraftBrushable.DUSTED, dusted);
-    }
-
-    @Override
-    public int getMaximumDusted() {
-        return getMax(CraftBrushable.DUSTED);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBubbleColumn.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBubbleColumn.java
deleted file mode 100644
index 9c51ee58b9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBubbleColumn.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftBubbleColumn extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.BubbleColumn {
-
-    public CraftBubbleColumn() {
-        super();
-    }
-
-    public CraftBubbleColumn(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftBubbleColumn
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty DRAG = getBoolean(net.minecraft.world.level.block.BubbleColumnBlock.class, "drag");
-
-    @Override
-    public boolean isDrag() {
-        return this.get(CraftBubbleColumn.DRAG);
-    }
-
-    @Override
-    public void setDrag(boolean drag) {
-        this.set(CraftBubbleColumn.DRAG, drag);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftButtonAbstract.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftButtonAbstract.java
deleted file mode 100644
index e71fd199fd..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftButtonAbstract.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftButtonAbstract extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Switch, org.bukkit.block.data.Directional, org.bukkit.block.data.FaceAttachable, org.bukkit.block.data.Powerable {
-
-    public CraftButtonAbstract() {
-        super();
-    }
-
-    public CraftButtonAbstract(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSwitch
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACE = getEnum(net.minecraft.world.level.block.ButtonBlock.class, "face");
-
-    @Override
-    public org.bukkit.block.data.type.Switch.Face getFace() {
-        return this.get(CraftButtonAbstract.FACE, org.bukkit.block.data.type.Switch.Face.class);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.data.type.Switch.Face face) {
-        this.set(CraftButtonAbstract.FACE, face);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.ButtonBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftButtonAbstract.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftButtonAbstract.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftButtonAbstract.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftFaceAttachable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ATTACH_FACE = getEnum(net.minecraft.world.level.block.ButtonBlock.class, "face");
-
-    @Override
-    public org.bukkit.block.data.FaceAttachable.AttachedFace getAttachedFace() {
-        return this.get(CraftButtonAbstract.ATTACH_FACE, org.bukkit.block.data.FaceAttachable.AttachedFace.class);
-    }
-
-    @Override
-    public void setAttachedFace(org.bukkit.block.data.FaceAttachable.AttachedFace face) {
-        this.set(CraftButtonAbstract.ATTACH_FACE, face);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.ButtonBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftButtonAbstract.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftButtonAbstract.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCactus.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCactus.java
deleted file mode 100644
index 463217199f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCactus.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCactus extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftCactus() {
-        super();
-    }
-
-    public CraftCactus(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.CactusBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftCactus.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftCactus.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftCactus.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCake.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCake.java
deleted file mode 100644
index 50347a79b0..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCake.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCake extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Cake {
-
-    public CraftCake() {
-        super();
-    }
-
-    public CraftCake(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftCake
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty BITES = getInteger(net.minecraft.world.level.block.CakeBlock.class, "bites");
-
-    @Override
-    public int getBites() {
-        return this.get(CraftCake.BITES);
-    }
-
-    @Override
-    public void setBites(int bites) {
-        this.set(CraftCake.BITES, bites);
-    }
-
-    @Override
-    public int getMaximumBites() {
-        return getMax(CraftCake.BITES);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCalibratedSculkSensor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCalibratedSculkSensor.java
deleted file mode 100644
index decacf616d..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCalibratedSculkSensor.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCalibratedSculkSensor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CalibratedSculkSensor, org.bukkit.block.data.Directional, org.bukkit.block.data.type.SculkSensor, org.bukkit.block.data.AnaloguePowerable, org.bukkit.block.data.Waterlogged {
-
-    public CraftCalibratedSculkSensor() {
-        super();
-    }
-
-    public CraftCalibratedSculkSensor(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.CalibratedSculkSensorBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftCalibratedSculkSensor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftCalibratedSculkSensor.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftCalibratedSculkSensor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSculkSensor
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> PHASE = getEnum(net.minecraft.world.level.block.CalibratedSculkSensorBlock.class, "sculk_sensor_phase");
-
-    @Override
-    public org.bukkit.block.data.type.SculkSensor.Phase getPhase() {
-        return this.get(CraftCalibratedSculkSensor.PHASE, org.bukkit.block.data.type.SculkSensor.Phase.class);
-    }
-
-    @Override
-    public void setPhase(org.bukkit.block.data.type.SculkSensor.Phase phase) {
-        this.set(CraftCalibratedSculkSensor.PHASE, phase);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAnaloguePowerable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty POWER = getInteger(net.minecraft.world.level.block.CalibratedSculkSensorBlock.class, "power");
-
-    @Override
-    public int getPower() {
-        return this.get(CraftCalibratedSculkSensor.POWER);
-    }
-
-    @Override
-    public void setPower(int power) {
-        this.set(CraftCalibratedSculkSensor.POWER, power);
-    }
-
-    @Override
-    public int getMaximumPower() {
-        return getMax(CraftCalibratedSculkSensor.POWER);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.CalibratedSculkSensorBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCalibratedSculkSensor.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCalibratedSculkSensor.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCampfire.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCampfire.java
deleted file mode 100644
index 52b3b5abe6..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCampfire.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCampfire extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Campfire, org.bukkit.block.data.Directional, org.bukkit.block.data.Lightable, org.bukkit.block.data.Waterlogged {
-
-    public CraftCampfire() {
-        super();
-    }
-
-    public CraftCampfire(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftCampfire
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SIGNAL_FIRE = getBoolean(net.minecraft.world.level.block.CampfireBlock.class, "signal_fire");
-
-    @Override
-    public boolean isSignalFire() {
-        return this.get(CraftCampfire.SIGNAL_FIRE);
-    }
-
-    @Override
-    public void setSignalFire(boolean signalFire) {
-        this.set(CraftCampfire.SIGNAL_FIRE, signalFire);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.CampfireBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftCampfire.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftCampfire.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftCampfire.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.CampfireBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftCampfire.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftCampfire.LIT, lit);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.CampfireBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCampfire.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCampfire.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
deleted file mode 100644
index 08436bfeba..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCandle extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Candle, org.bukkit.block.data.Lightable, org.bukkit.block.data.Waterlogged {
-
-    public CraftCandle() {
-        super();
-    }
-
-    public CraftCandle(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftCandle
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty CANDLES = getInteger(net.minecraft.world.level.block.CandleBlock.class, "candles");
-
-    @Override
-    public int getCandles() {
-        return this.get(CraftCandle.CANDLES);
-    }
-
-    @Override
-    public void setCandles(int candles) {
-        this.set(CraftCandle.CANDLES, candles);
-    }
-
-    @Override
-    public int getMaximumCandles() {
-        return getMax(CraftCandle.CANDLES);
-    }
-    // Paper start
-    @Override
-    public int getMinimumCandles() {
-        return getMin(CraftCandle.CANDLES);
-    }
-    // Paper end
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.CandleBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftCandle.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftCandle.LIT, lit);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.CandleBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCandle.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCandle.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandleCake.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandleCake.java
deleted file mode 100644
index adc224dd4b..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandleCake.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCandleCake extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Lightable {
-
-    public CraftCandleCake() {
-        super();
-    }
-
-    public CraftCandleCake(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.CandleCakeBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftCandleCake.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftCandleCake.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCarrots.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCarrots.java
deleted file mode 100644
index 270416eb51..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCarrots.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCarrots extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftCarrots() {
-        super();
-    }
-
-    public CraftCarrots(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.CarrotBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftCarrots.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftCarrots.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftCarrots.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCaveVines.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCaveVines.java
deleted file mode 100644
index 5b387ce833..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCaveVines.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCaveVines extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CaveVines, org.bukkit.block.data.Ageable, org.bukkit.block.data.type.CaveVinesPlant {
-
-    public CraftCaveVines() {
-        super();
-    }
-
-    public CraftCaveVines(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.CaveVinesBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftCaveVines.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftCaveVines.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftCaveVines.AGE);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftCaveVinesPlant
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BERRIES = getBoolean(net.minecraft.world.level.block.CaveVinesBlock.class, "berries");
-
-    @Override
-    public boolean isBerries() {
-        return this.get(CraftCaveVines.BERRIES);
-    }
-
-    @Override
-    public void setBerries(boolean berries) {
-        this.set(CraftCaveVines.BERRIES, berries);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCaveVinesPlant.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCaveVinesPlant.java
deleted file mode 100644
index b8c199bfbe..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCaveVinesPlant.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCaveVinesPlant extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CaveVinesPlant {
-
-    public CraftCaveVinesPlant() {
-        super();
-    }
-
-    public CraftCaveVinesPlant(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftCaveVinesPlant
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BERRIES = getBoolean(net.minecraft.world.level.block.CaveVinesPlantBlock.class, "berries");
-
-    @Override
-    public boolean isBerries() {
-        return this.get(CraftCaveVinesPlant.BERRIES);
-    }
-
-    @Override
-    public void setBerries(boolean berries) {
-        this.set(CraftCaveVinesPlant.BERRIES, berries);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCeilingHangingSign.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCeilingHangingSign.java
deleted file mode 100644
index fcda570877..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCeilingHangingSign.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCeilingHangingSign extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.HangingSign, org.bukkit.block.data.Attachable, org.bukkit.block.data.Rotatable, org.bukkit.block.data.Waterlogged {
-
-    public CraftCeilingHangingSign() {
-        super();
-    }
-
-    public CraftCeilingHangingSign(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAttachable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty ATTACHED = getBoolean(net.minecraft.world.level.block.CeilingHangingSignBlock.class, "attached");
-
-    @Override
-    public boolean isAttached() {
-        return this.get(CraftCeilingHangingSign.ATTACHED);
-    }
-
-    @Override
-    public void setAttached(boolean attached) {
-        this.set(CraftCeilingHangingSign.ATTACHED, attached);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRotatable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty ROTATION = getInteger(net.minecraft.world.level.block.CeilingHangingSignBlock.class, "rotation");
-
-    @Override
-    public org.bukkit.block.BlockFace getRotation() {
-        int data = this.get(CraftCeilingHangingSign.ROTATION);
-        switch (data) {
-            case 0x0:
-                return org.bukkit.block.BlockFace.SOUTH;
-            case 0x1:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_WEST;
-            case 0x2:
-                return org.bukkit.block.BlockFace.SOUTH_WEST;
-            case 0x3:
-                return org.bukkit.block.BlockFace.WEST_SOUTH_WEST;
-            case 0x4:
-                return org.bukkit.block.BlockFace.WEST;
-            case 0x5:
-                return org.bukkit.block.BlockFace.WEST_NORTH_WEST;
-            case 0x6:
-                return org.bukkit.block.BlockFace.NORTH_WEST;
-            case 0x7:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_WEST;
-            case 0x8:
-                return org.bukkit.block.BlockFace.NORTH;
-            case 0x9:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_EAST;
-            case 0xA:
-                return org.bukkit.block.BlockFace.NORTH_EAST;
-            case 0xB:
-                return org.bukkit.block.BlockFace.EAST_NORTH_EAST;
-            case 0xC:
-                return org.bukkit.block.BlockFace.EAST;
-            case 0xD:
-                return org.bukkit.block.BlockFace.EAST_SOUTH_EAST;
-            case 0xE:
-                return org.bukkit.block.BlockFace.SOUTH_EAST;
-            case 0xF:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_EAST;
-            default:
-                throw new IllegalArgumentException("Unknown rotation " + data);
-        }
-    }
-
-    @Override
-    public void setRotation(org.bukkit.block.BlockFace rotation) {
-        int val;
-        switch (rotation) {
-            case SOUTH:
-                val = 0x0;
-                break;
-            case SOUTH_SOUTH_WEST:
-                val = 0x1;
-                break;
-            case SOUTH_WEST:
-                val = 0x2;
-                break;
-            case WEST_SOUTH_WEST:
-                val = 0x3;
-                break;
-            case WEST:
-                val = 0x4;
-                break;
-            case WEST_NORTH_WEST:
-                val = 0x5;
-                break;
-            case NORTH_WEST:
-                val = 0x6;
-                break;
-            case NORTH_NORTH_WEST:
-                val = 0x7;
-                break;
-            case NORTH:
-                val = 0x8;
-                break;
-            case NORTH_NORTH_EAST:
-                val = 0x9;
-                break;
-            case NORTH_EAST:
-                val = 0xA;
-                break;
-            case EAST_NORTH_EAST:
-                val = 0xB;
-                break;
-            case EAST:
-                val = 0xC;
-                break;
-            case EAST_SOUTH_EAST:
-                val = 0xD;
-                break;
-            case SOUTH_EAST:
-                val = 0xE;
-                break;
-            case SOUTH_SOUTH_EAST:
-                val = 0xF;
-                break;
-            default:
-                throw new IllegalArgumentException("Illegal rotation " + rotation);
-        }
-        this.set(CraftCeilingHangingSign.ROTATION, val);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.CeilingHangingSignBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCeilingHangingSign.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCeilingHangingSign.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChain.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChain.java
deleted file mode 100644
index 50b317d484..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChain.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftChain extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Chain, org.bukkit.block.data.Orientable, org.bukkit.block.data.Waterlogged {
-
-    public CraftChain() {
-        super();
-    }
-
-    public CraftChain(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOrientable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> AXIS = getEnum(net.minecraft.world.level.block.ChainBlock.class, "axis");
-
-    @Override
-    public org.bukkit.Axis getAxis() {
-        return this.get(CraftChain.AXIS, org.bukkit.Axis.class);
-    }
-
-    @Override
-    public void setAxis(org.bukkit.Axis axis) {
-        this.set(CraftChain.AXIS, axis);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.Axis> getAxes() {
-        return this.getValues(CraftChain.AXIS, org.bukkit.Axis.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.ChainBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftChain.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftChain.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChest.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChest.java
deleted file mode 100644
index 383b146dee..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftChest extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Chest, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftChest() {
-        super();
-    }
-
-    public CraftChest(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftChest
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum(net.minecraft.world.level.block.ChestBlock.class, "type");
-
-    @Override
-    public org.bukkit.block.data.type.Chest.Type getType() {
-        return this.get(CraftChest.TYPE, org.bukkit.block.data.type.Chest.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.Chest.Type type) {
-        this.set(CraftChest.TYPE, type);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.ChestBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftChest.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftChest.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftChest.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.ChestBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftChest.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftChest.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChestTrapped.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChestTrapped.java
deleted file mode 100644
index b24a40c084..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChestTrapped.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftChestTrapped extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Chest, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftChestTrapped() {
-        super();
-    }
-
-    public CraftChestTrapped(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftChest
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum(net.minecraft.world.level.block.TrappedChestBlock.class, "type");
-
-    @Override
-    public org.bukkit.block.data.type.Chest.Type getType() {
-        return this.get(CraftChestTrapped.TYPE, org.bukkit.block.data.type.Chest.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.Chest.Type type) {
-        this.set(CraftChestTrapped.TYPE, type);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.TrappedChestBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftChestTrapped.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftChestTrapped.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftChestTrapped.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.TrappedChestBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftChestTrapped.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftChestTrapped.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChiseledBookShelf.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChiseledBookShelf.java
deleted file mode 100644
index 26cfac0ae5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChiseledBookShelf.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftChiseledBookShelf extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.ChiseledBookshelf, org.bukkit.block.data.Directional {
-
-    public CraftChiseledBookShelf() {
-        super();
-    }
-
-    public CraftChiseledBookShelf(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftChiseledBookshelf
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] SLOT_OCCUPIED = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, "slot_0_occupied"), getBoolean(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, "slot_1_occupied"), getBoolean(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, "slot_2_occupied"),
-        getBoolean(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, "slot_3_occupied"), getBoolean(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, "slot_4_occupied"), getBoolean(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, "slot_5_occupied")
-    };
-
-    @Override
-    public boolean isSlotOccupied(int slot) {
-        return this.get(CraftChiseledBookShelf.SLOT_OCCUPIED[slot]);
-    }
-
-    @Override
-    public void setSlotOccupied(int slot, boolean has) {
-        this.set(CraftChiseledBookShelf.SLOT_OCCUPIED[slot], has);
-    }
-
-    @Override
-    public java.util.Set<Integer> getOccupiedSlots() {
-        com.google.common.collect.ImmutableSet.Builder<Integer> slots = com.google.common.collect.ImmutableSet.builder();
-
-        for (int index = 0; index < this.getMaximumOccupiedSlots(); index++) {
-            if (this.isSlotOccupied(index)) {
-                slots.add(index);
-            }
-        }
-
-        return slots.build();
-    }
-
-    @Override
-    public int getMaximumOccupiedSlots() {
-        return CraftChiseledBookShelf.SLOT_OCCUPIED.length;
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftChiseledBookShelf.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftChiseledBookShelf.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftChiseledBookShelf.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChorusFlower.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChorusFlower.java
deleted file mode 100644
index 1c759be1ed..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChorusFlower.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftChorusFlower extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftChorusFlower() {
-        super();
-    }
-
-    public CraftChorusFlower(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.ChorusFlowerBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftChorusFlower.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftChorusFlower.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftChorusFlower.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChorusFruit.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChorusFruit.java
deleted file mode 100644
index 60190a7ce9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftChorusFruit.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftChorusFruit extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.MultipleFacing {
-
-    public CraftChorusFruit() {
-        super();
-    }
-
-    public CraftChorusFruit(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.ChorusPlantBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.ChorusPlantBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.ChorusPlantBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.ChorusPlantBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.ChorusPlantBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.ChorusPlantBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftChorusFruit.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftChorusFruit.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftChorusFruit.FACES.length; i++) {
-            if (CraftChorusFruit.FACES[i] != null && this.get(CraftChorusFruit.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftChorusFruit.FACES.length; i++) {
-            if (CraftChorusFruit.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCobbleWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCobbleWall.java
deleted file mode 100644
index f860bb309a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCobbleWall.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCobbleWall extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Wall, org.bukkit.block.data.Waterlogged {
-
-    public CraftCobbleWall() {
-        super();
-    }
-
-    public CraftCobbleWall(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftWall
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty UP = getBoolean(net.minecraft.world.level.block.WallBlock.class, "up");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?>[] HEIGHTS = new net.minecraft.world.level.block.state.properties.EnumProperty[]{
-        getEnum(net.minecraft.world.level.block.WallBlock.class, "north"), getEnum(net.minecraft.world.level.block.WallBlock.class, "east"), getEnum(net.minecraft.world.level.block.WallBlock.class, "south"), getEnum(net.minecraft.world.level.block.WallBlock.class, "west")
-    };
-
-    @Override
-    public boolean isUp() {
-        return this.get(CraftCobbleWall.UP);
-    }
-
-    @Override
-    public void setUp(boolean up) {
-        this.set(CraftCobbleWall.UP, up);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.Wall.Height getHeight(org.bukkit.block.BlockFace face) {
-        return this.get(CraftCobbleWall.HEIGHTS[face.ordinal()], org.bukkit.block.data.type.Wall.Height.class);
-    }
-
-    @Override
-    public void setHeight(org.bukkit.block.BlockFace face, org.bukkit.block.data.type.Wall.Height height) {
-        this.set(CraftCobbleWall.HEIGHTS[face.ordinal()], height);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.WallBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCobbleWall.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCobbleWall.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCocoa.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCocoa.java
deleted file mode 100644
index 56167946a2..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCocoa.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCocoa extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Cocoa, org.bukkit.block.data.Ageable, org.bukkit.block.data.Directional {
-
-    public CraftCocoa() {
-        super();
-    }
-
-    public CraftCocoa(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.CocoaBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftCocoa.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftCocoa.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftCocoa.AGE);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.CocoaBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftCocoa.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftCocoa.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftCocoa.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCommand.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCommand.java
deleted file mode 100644
index 14a788410c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCommand extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CommandBlock, org.bukkit.block.data.Directional {
-
-    public CraftCommand() {
-        super();
-    }
-
-    public CraftCommand(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftCommandBlock
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty CONDITIONAL = getBoolean(net.minecraft.world.level.block.CommandBlock.class, "conditional");
-
-    @Override
-    public boolean isConditional() {
-        return this.get(CraftCommand.CONDITIONAL);
-    }
-
-    @Override
-    public void setConditional(boolean conditional) {
-        this.set(CraftCommand.CONDITIONAL, conditional);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.CommandBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftCommand.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftCommand.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftCommand.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
deleted file mode 100644
index 5ae27fc8f9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftComposter extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Levelled {
-
-    public CraftComposter() {
-        super();
-    }
-
-    public CraftComposter(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLevelled
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty LEVEL = getInteger(net.minecraft.world.level.block.ComposterBlock.class, "level");
-
-    @Override
-    public int getLevel() {
-        return this.get(CraftComposter.LEVEL);
-    }
-
-    @Override
-    public void setLevel(int level) {
-        this.set(CraftComposter.LEVEL, level);
-    }
-
-    @Override
-    public int getMaximumLevel() {
-        return getMax(CraftComposter.LEVEL);
-    }
-
-    // Paper start
-    @Override
-    public int getMinimumLevel() {
-        return getMin(CraftComposter.LEVEL);
-    }
-    // Paper end
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftConduit.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftConduit.java
deleted file mode 100644
index be87c2d5e6..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftConduit.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftConduit extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftConduit() {
-        super();
-    }
-
-    public CraftConduit(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.ConduitBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftConduit.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftConduit.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCopperBulb.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCopperBulb.java
deleted file mode 100644
index e85ccc6e4a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCopperBulb.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCopperBulb extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CopperBulb, org.bukkit.block.data.Lightable, org.bukkit.block.data.Powerable {
-
-    public CraftCopperBulb() {
-        super();
-    }
-
-    public CraftCopperBulb(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.CopperBulbBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftCopperBulb.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftCopperBulb.LIT, lit);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.CopperBulbBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftCopperBulb.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftCopperBulb.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralDead.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralDead.java
deleted file mode 100644
index 927ee9b69a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralDead.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCoralDead extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftCoralDead() {
-        super();
-    }
-
-    public CraftCoralDead(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.BaseCoralPlantBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCoralDead.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCoralDead.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFan.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFan.java
deleted file mode 100644
index 42f8430d6c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFan.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCoralFan extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftCoralFan() {
-        super();
-    }
-
-    public CraftCoralFan(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.CoralFanBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCoralFan.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCoralFan.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanAbstract.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanAbstract.java
deleted file mode 100644
index 88c371ca28..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanAbstract.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCoralFanAbstract extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftCoralFanAbstract() {
-        super();
-    }
-
-    public CraftCoralFanAbstract(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.BaseCoralFanBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCoralFanAbstract.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCoralFanAbstract.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanWall.java
deleted file mode 100644
index 0928c60c29..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanWall.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCoralFanWall extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CoralWallFan, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftCoralFanWall() {
-        super();
-    }
-
-    public CraftCoralFanWall(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.CoralWallFanBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftCoralFanWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftCoralFanWall.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftCoralFanWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.CoralWallFanBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCoralFanWall.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCoralFanWall.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanWallAbstract.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanWallAbstract.java
deleted file mode 100644
index b1715fcac8..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralFanWallAbstract.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCoralFanWallAbstract extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CoralWallFan, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftCoralFanWallAbstract() {
-        super();
-    }
-
-    public CraftCoralFanWallAbstract(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.BaseCoralWallFanBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftCoralFanWallAbstract.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftCoralFanWallAbstract.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftCoralFanWallAbstract.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.BaseCoralWallFanBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCoralFanWallAbstract.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCoralFanWallAbstract.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralPlant.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralPlant.java
deleted file mode 100644
index 447c4e1db5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCoralPlant.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCoralPlant extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftCoralPlant() {
-        super();
-    }
-
-    public CraftCoralPlant(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.CoralPlantBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftCoralPlant.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftCoralPlant.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCrafter.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCrafter.java
deleted file mode 100644
index 78b8a7cda5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCrafter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCrafter extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Crafter {
-
-    public CraftCrafter() {
-        super();
-    }
-
-    public CraftCrafter(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftCrafter
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty CRAFTING = getBoolean(net.minecraft.world.level.block.CrafterBlock.class, "crafting");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty TRIGGERED = getBoolean(net.minecraft.world.level.block.CrafterBlock.class, "triggered");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ORIENTATION = getEnum(net.minecraft.world.level.block.CrafterBlock.class, "orientation");
-
-    @Override
-    public boolean isCrafting() {
-        return this.get(CraftCrafter.CRAFTING);
-    }
-
-    @Override
-    public void setCrafting(boolean crafting) {
-        this.set(CraftCrafter.CRAFTING, crafting);
-    }
-
-    @Override
-    public boolean isTriggered() {
-        return this.get(CraftCrafter.TRIGGERED);
-    }
-
-    @Override
-    public void setTriggered(boolean triggered) {
-        this.set(CraftCrafter.TRIGGERED, triggered);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.Crafter.Orientation getOrientation() {
-        return this.get(CraftCrafter.ORIENTATION, org.bukkit.block.data.type.Crafter.Orientation.class);
-    }
-
-    @Override
-    public void setOrientation(org.bukkit.block.data.type.Crafter.Orientation orientation) {
-        this.set(CraftCrafter.ORIENTATION, orientation);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCreakingHeart.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCreakingHeart.java
deleted file mode 100644
index 90d6f9655b..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCreakingHeart.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCreakingHeart extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CreakingHeart, org.bukkit.block.data.Orientable {
-
-    public CraftCreakingHeart() {
-        super();
-    }
-
-    public CraftCreakingHeart(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftCreakingHeart
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty ACTIVE = getBoolean(net.minecraft.world.level.block.CreakingHeartBlock.class, "active");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty NATURAL = getBoolean(net.minecraft.world.level.block.CreakingHeartBlock.class, "natural");
-
-    @Override
-    public boolean isActive() {
-        return this.get(CraftCreakingHeart.ACTIVE);
-    }
-
-    @Override
-    public void setActive(boolean active) {
-        this.set(CraftCreakingHeart.ACTIVE, active);
-    }
-
-    @Override
-    public boolean isNatural() {
-        return this.get(CraftCreakingHeart.NATURAL);
-    }
-
-    @Override
-    public void setNatural(boolean natural) {
-        this.set(CraftCreakingHeart.NATURAL, natural);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOrientable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> AXIS = getEnum(net.minecraft.world.level.block.CreakingHeartBlock.class, "axis");
-
-    @Override
-    public org.bukkit.Axis getAxis() {
-        return this.get(CraftCreakingHeart.AXIS, org.bukkit.Axis.class);
-    }
-
-    @Override
-    public void setAxis(org.bukkit.Axis axis) {
-        this.set(CraftCreakingHeart.AXIS, axis);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.Axis> getAxes() {
-        return this.getValues(CraftCreakingHeart.AXIS, org.bukkit.Axis.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCrops.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCrops.java
deleted file mode 100644
index d186de7098..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCrops.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftCrops extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftCrops() {
-        super();
-    }
-
-    public CraftCrops(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.CropBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftCrops.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftCrops.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftCrops.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDaylightDetector.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDaylightDetector.java
deleted file mode 100644
index 3fd2f7b86f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDaylightDetector.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftDaylightDetector extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.DaylightDetector, org.bukkit.block.data.AnaloguePowerable {
-
-    public CraftDaylightDetector() {
-        super();
-    }
-
-    public CraftDaylightDetector(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftDaylightDetector
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty INVERTED = getBoolean(net.minecraft.world.level.block.DaylightDetectorBlock.class, "inverted");
-
-    @Override
-    public boolean isInverted() {
-        return this.get(CraftDaylightDetector.INVERTED);
-    }
-
-    @Override
-    public void setInverted(boolean inverted) {
-        this.set(CraftDaylightDetector.INVERTED, inverted);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAnaloguePowerable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty POWER = getInteger(net.minecraft.world.level.block.DaylightDetectorBlock.class, "power");
-
-    @Override
-    public int getPower() {
-        return this.get(CraftDaylightDetector.POWER);
-    }
-
-    @Override
-    public void setPower(int power) {
-        this.set(CraftDaylightDetector.POWER, power);
-    }
-
-    @Override
-    public int getMaximumPower() {
-        return getMax(CraftDaylightDetector.POWER);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
deleted file mode 100644
index b7ea9a6fba..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftDecoratedPot extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.DecoratedPot, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftDecoratedPot() {
-        super();
-    }
-
-    public CraftDecoratedPot(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.DecoratedPotBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftDecoratedPot.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftDecoratedPot.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftDecoratedPot.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.DecoratedPotBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftDecoratedPot.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftDecoratedPot.WATERLOGGED, waterlogged);
-    }
-
-    // Paper start - add missing block data api
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty CRACKED = getBoolean(net.minecraft.world.level.block.DecoratedPotBlock.class, "cracked");
-
-    @Override
-    public boolean isCracked() {
-        return this.get(CraftDecoratedPot.CRACKED);
-    }
-
-    @Override
-    public void setCracked(final boolean cracked) {
-        this.set(CraftDecoratedPot.CRACKED, cracked);
-    }
-    // Paper end - add missing block data api
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDirtSnow.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDirtSnow.java
deleted file mode 100644
index a2d3b1f7a7..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDirtSnow.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftDirtSnow extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Snowable {
-
-    public CraftDirtSnow() {
-        super();
-    }
-
-    public CraftDirtSnow(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftSnowable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SNOWY = getBoolean(net.minecraft.world.level.block.SnowyDirtBlock.class, "snowy");
-
-    @Override
-    public boolean isSnowy() {
-        return this.get(CraftDirtSnow.SNOWY);
-    }
-
-    @Override
-    public void setSnowy(boolean snowy) {
-        this.set(CraftDirtSnow.SNOWY, snowy);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDispenser.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDispenser.java
deleted file mode 100644
index 444c0ef7b1..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDispenser.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftDispenser extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Dispenser, org.bukkit.block.data.Directional {
-
-    public CraftDispenser() {
-        super();
-    }
-
-    public CraftDispenser(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftDispenser
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty TRIGGERED = getBoolean(net.minecraft.world.level.block.DispenserBlock.class, "triggered");
-
-    @Override
-    public boolean isTriggered() {
-        return this.get(CraftDispenser.TRIGGERED);
-    }
-
-    @Override
-    public void setTriggered(boolean triggered) {
-        this.set(CraftDispenser.TRIGGERED, triggered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.DispenserBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftDispenser.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftDispenser.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftDispenser.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDoor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDoor.java
deleted file mode 100644
index 633e7fd045..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDoor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftDoor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Door, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Openable, org.bukkit.block.data.Powerable {
-
-    public CraftDoor() {
-        super();
-    }
-
-    public CraftDoor(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftDoor
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HINGE = getEnum(net.minecraft.world.level.block.DoorBlock.class, "hinge");
-
-    @Override
-    public org.bukkit.block.data.type.Door.Hinge getHinge() {
-        return this.get(CraftDoor.HINGE, org.bukkit.block.data.type.Door.Hinge.class);
-    }
-
-    @Override
-    public void setHinge(org.bukkit.block.data.type.Door.Hinge hinge) {
-        this.set(CraftDoor.HINGE, hinge);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.DoorBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftDoor.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftDoor.HALF, half);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.DoorBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftDoor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftDoor.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftDoor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOpenable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OPEN = getBoolean(net.minecraft.world.level.block.DoorBlock.class, "open");
-
-    @Override
-    public boolean isOpen() {
-        return this.get(CraftDoor.OPEN);
-    }
-
-    @Override
-    public void setOpen(boolean open) {
-        this.set(CraftDoor.OPEN, open);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.DoorBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftDoor.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftDoor.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDropper.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDropper.java
deleted file mode 100644
index c460bb6766..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDropper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftDropper extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Dispenser, org.bukkit.block.data.Directional {
-
-    public CraftDropper() {
-        super();
-    }
-
-    public CraftDropper(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftDispenser
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty TRIGGERED = getBoolean(net.minecraft.world.level.block.DropperBlock.class, "triggered");
-
-    @Override
-    public boolean isTriggered() {
-        return this.get(CraftDropper.TRIGGERED);
-    }
-
-    @Override
-    public void setTriggered(boolean triggered) {
-        this.set(CraftDropper.TRIGGERED, triggered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.DropperBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftDropper.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftDropper.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftDropper.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEndRod.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEndRod.java
deleted file mode 100644
index 81ad91969c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEndRod.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftEndRod extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftEndRod() {
-        super();
-    }
-
-    public CraftEndRod(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.EndRodBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftEndRod.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftEndRod.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftEndRod.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEnderChest.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEnderChest.java
deleted file mode 100644
index b259fc7fcb..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEnderChest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftEnderChest extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.EnderChest, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftEnderChest() {
-        super();
-    }
-
-    public CraftEnderChest(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.EnderChestBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftEnderChest.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftEnderChest.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftEnderChest.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.EnderChestBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftEnderChest.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftEnderChest.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEnderPortalFrame.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEnderPortalFrame.java
deleted file mode 100644
index d1959292a5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftEnderPortalFrame.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftEnderPortalFrame extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.EndPortalFrame, org.bukkit.block.data.Directional {
-
-    public CraftEnderPortalFrame() {
-        super();
-    }
-
-    public CraftEnderPortalFrame(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftEndPortalFrame
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty EYE = getBoolean(net.minecraft.world.level.block.EndPortalFrameBlock.class, "eye");
-
-    @Override
-    public boolean hasEye() {
-        return this.get(CraftEnderPortalFrame.EYE);
-    }
-
-    @Override
-    public void setEye(boolean eye) {
-        this.set(CraftEnderPortalFrame.EYE, eye);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.EndPortalFrameBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftEnderPortalFrame.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftEnderPortalFrame.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftEnderPortalFrame.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFence.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFence.java
deleted file mode 100644
index 11f2f10703..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFence.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftFence extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Fence, org.bukkit.block.data.MultipleFacing, org.bukkit.block.data.Waterlogged {
-
-    public CraftFence() {
-        super();
-    }
-
-    public CraftFence(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.FenceBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.FenceBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.FenceBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.FenceBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.FenceBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.FenceBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftFence.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftFence.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftFence.FACES.length; i++) {
-            if (CraftFence.FACES[i] != null && this.get(CraftFence.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftFence.FACES.length; i++) {
-            if (CraftFence.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.FenceBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftFence.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftFence.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFenceGate.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFenceGate.java
deleted file mode 100644
index b31474d3b2..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFenceGate.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftFenceGate extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Gate, org.bukkit.block.data.Directional, org.bukkit.block.data.Openable, org.bukkit.block.data.Powerable {
-
-    public CraftFenceGate() {
-        super();
-    }
-
-    public CraftFenceGate(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftGate
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty IN_WALL = getBoolean(net.minecraft.world.level.block.FenceGateBlock.class, "in_wall");
-
-    @Override
-    public boolean isInWall() {
-        return this.get(CraftFenceGate.IN_WALL);
-    }
-
-    @Override
-    public void setInWall(boolean inWall) {
-        this.set(CraftFenceGate.IN_WALL, inWall);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.FenceGateBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftFenceGate.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftFenceGate.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftFenceGate.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOpenable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OPEN = getBoolean(net.minecraft.world.level.block.FenceGateBlock.class, "open");
-
-    @Override
-    public boolean isOpen() {
-        return this.get(CraftFenceGate.OPEN);
-    }
-
-    @Override
-    public void setOpen(boolean open) {
-        this.set(CraftFenceGate.OPEN, open);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.FenceGateBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftFenceGate.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftFenceGate.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFire.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFire.java
deleted file mode 100644
index b4a0566cd9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFire.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftFire extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Fire, org.bukkit.block.data.Ageable, org.bukkit.block.data.MultipleFacing {
-
-    public CraftFire() {
-        super();
-    }
-
-    public CraftFire(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.FireBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftFire.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftFire.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftFire.AGE);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.FireBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.FireBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.FireBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.FireBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.FireBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.FireBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftFire.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftFire.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftFire.FACES.length; i++) {
-            if (CraftFire.FACES[i] != null && this.get(CraftFire.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftFire.FACES.length; i++) {
-            if (CraftFire.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFloorSign.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFloorSign.java
deleted file mode 100644
index 6c5c012370..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFloorSign.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftFloorSign extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Sign, org.bukkit.block.data.Rotatable, org.bukkit.block.data.Waterlogged {
-
-    public CraftFloorSign() {
-        super();
-    }
-
-    public CraftFloorSign(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRotatable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty ROTATION = getInteger(net.minecraft.world.level.block.StandingSignBlock.class, "rotation");
-
-    @Override
-    public org.bukkit.block.BlockFace getRotation() {
-        int data = this.get(CraftFloorSign.ROTATION);
-        switch (data) {
-            case 0x0:
-                return org.bukkit.block.BlockFace.SOUTH;
-            case 0x1:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_WEST;
-            case 0x2:
-                return org.bukkit.block.BlockFace.SOUTH_WEST;
-            case 0x3:
-                return org.bukkit.block.BlockFace.WEST_SOUTH_WEST;
-            case 0x4:
-                return org.bukkit.block.BlockFace.WEST;
-            case 0x5:
-                return org.bukkit.block.BlockFace.WEST_NORTH_WEST;
-            case 0x6:
-                return org.bukkit.block.BlockFace.NORTH_WEST;
-            case 0x7:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_WEST;
-            case 0x8:
-                return org.bukkit.block.BlockFace.NORTH;
-            case 0x9:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_EAST;
-            case 0xA:
-                return org.bukkit.block.BlockFace.NORTH_EAST;
-            case 0xB:
-                return org.bukkit.block.BlockFace.EAST_NORTH_EAST;
-            case 0xC:
-                return org.bukkit.block.BlockFace.EAST;
-            case 0xD:
-                return org.bukkit.block.BlockFace.EAST_SOUTH_EAST;
-            case 0xE:
-                return org.bukkit.block.BlockFace.SOUTH_EAST;
-            case 0xF:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_EAST;
-            default:
-                throw new IllegalArgumentException("Unknown rotation " + data);
-        }
-    }
-
-    @Override
-    public void setRotation(org.bukkit.block.BlockFace rotation) {
-        int val;
-        switch (rotation) {
-            case SOUTH:
-                val = 0x0;
-                break;
-            case SOUTH_SOUTH_WEST:
-                val = 0x1;
-                break;
-            case SOUTH_WEST:
-                val = 0x2;
-                break;
-            case WEST_SOUTH_WEST:
-                val = 0x3;
-                break;
-            case WEST:
-                val = 0x4;
-                break;
-            case WEST_NORTH_WEST:
-                val = 0x5;
-                break;
-            case NORTH_WEST:
-                val = 0x6;
-                break;
-            case NORTH_NORTH_WEST:
-                val = 0x7;
-                break;
-            case NORTH:
-                val = 0x8;
-                break;
-            case NORTH_NORTH_EAST:
-                val = 0x9;
-                break;
-            case NORTH_EAST:
-                val = 0xA;
-                break;
-            case EAST_NORTH_EAST:
-                val = 0xB;
-                break;
-            case EAST:
-                val = 0xC;
-                break;
-            case EAST_SOUTH_EAST:
-                val = 0xD;
-                break;
-            case SOUTH_EAST:
-                val = 0xE;
-                break;
-            case SOUTH_SOUTH_EAST:
-                val = 0xF;
-                break;
-            default:
-                throw new IllegalArgumentException("Illegal rotation " + rotation);
-        }
-        this.set(CraftFloorSign.ROTATION, val);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.StandingSignBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftFloorSign.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftFloorSign.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFluids.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFluids.java
deleted file mode 100644
index 1af5fe48c5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFluids.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftFluids extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Levelled {
-
-    public CraftFluids() {
-        super();
-    }
-
-    public CraftFluids(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLevelled
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty LEVEL = getInteger(net.minecraft.world.level.block.LiquidBlock.class, "level");
-
-    @Override
-    public int getLevel() {
-        return this.get(CraftFluids.LEVEL);
-    }
-
-    @Override
-    public void setLevel(int level) {
-        this.set(CraftFluids.LEVEL, level);
-    }
-
-    @Override
-    public int getMaximumLevel() {
-        return getMax(CraftFluids.LEVEL);
-    }
-
-    // Paper start
-    @Override
-    public int getMinimumLevel() {
-        return getMin(CraftFluids.LEVEL);
-    }
-    // Paper end
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFurnaceFurace.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFurnaceFurace.java
deleted file mode 100644
index 5698cb115b..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFurnaceFurace.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftFurnaceFurace extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Furnace, org.bukkit.block.data.Directional, org.bukkit.block.data.Lightable {
-
-    public CraftFurnaceFurace() {
-        super();
-    }
-
-    public CraftFurnaceFurace(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.FurnaceBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftFurnaceFurace.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftFurnaceFurace.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftFurnaceFurace.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.FurnaceBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftFurnaceFurace.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftFurnaceFurace.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGlazedTerracotta.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGlazedTerracotta.java
deleted file mode 100644
index bae1e6e750..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGlazedTerracotta.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftGlazedTerracotta extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftGlazedTerracotta() {
-        super();
-    }
-
-    public CraftGlazedTerracotta(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.GlazedTerracottaBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftGlazedTerracotta.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftGlazedTerracotta.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftGlazedTerracotta.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGlowLichen.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGlowLichen.java
deleted file mode 100644
index b921b97f35..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGlowLichen.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftGlowLichen extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.GlowLichen, org.bukkit.block.data.MultipleFacing, org.bukkit.block.data.Waterlogged {
-
-    public CraftGlowLichen() {
-        super();
-    }
-
-    public CraftGlowLichen(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.GlowLichenBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.GlowLichenBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.GlowLichenBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.GlowLichenBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.GlowLichenBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.GlowLichenBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftGlowLichen.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftGlowLichen.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftGlowLichen.FACES.length; i++) {
-            if (CraftGlowLichen.FACES[i] != null && this.get(CraftGlowLichen.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftGlowLichen.FACES.length; i++) {
-            if (CraftGlowLichen.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.GlowLichenBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftGlowLichen.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftGlowLichen.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGrass.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGrass.java
deleted file mode 100644
index 550a80ec5c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGrass.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftGrass extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Snowable {
-
-    public CraftGrass() {
-        super();
-    }
-
-    public CraftGrass(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftSnowable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SNOWY = getBoolean(net.minecraft.world.level.block.GrassBlock.class, "snowy");
-
-    @Override
-    public boolean isSnowy() {
-        return this.get(CraftGrass.SNOWY);
-    }
-
-    @Override
-    public void setSnowy(boolean snowy) {
-        this.set(CraftGrass.SNOWY, snowy);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGrindstone.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGrindstone.java
deleted file mode 100644
index 6f1f0d1ba5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftGrindstone.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftGrindstone extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Grindstone, org.bukkit.block.data.Directional, org.bukkit.block.data.FaceAttachable {
-
-    public CraftGrindstone() {
-        super();
-    }
-
-    public CraftGrindstone(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.GrindstoneBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftGrindstone.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftGrindstone.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftGrindstone.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftFaceAttachable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ATTACH_FACE = getEnum(net.minecraft.world.level.block.GrindstoneBlock.class, "face");
-
-    @Override
-    public org.bukkit.block.data.FaceAttachable.AttachedFace getAttachedFace() {
-        return this.get(CraftGrindstone.ATTACH_FACE, org.bukkit.block.data.FaceAttachable.AttachedFace.class);
-    }
-
-    @Override
-    public void setAttachedFace(org.bukkit.block.data.FaceAttachable.AttachedFace face) {
-        this.set(CraftGrindstone.ATTACH_FACE, face);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHangingMoss.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHangingMoss.java
deleted file mode 100644
index b216aad4ee..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHangingMoss.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftHangingMoss extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.HangingMoss {
-
-    public CraftHangingMoss() {
-        super();
-    }
-
-    public CraftHangingMoss(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftHangingMoss
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty TIP = getBoolean(net.minecraft.world.level.block.HangingMossBlock.class, "tip");
-
-    @Override
-    public boolean isTip() {
-        return this.get(CraftHangingMoss.TIP);
-    }
-
-    @Override
-    public void setTip(boolean tip) {
-        this.set(CraftHangingMoss.TIP, tip);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHangingRoots.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHangingRoots.java
deleted file mode 100644
index c3e66c6d55..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHangingRoots.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftHangingRoots extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftHangingRoots() {
-        super();
-    }
-
-    public CraftHangingRoots(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.HangingRootsBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftHangingRoots.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftHangingRoots.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHay.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHay.java
deleted file mode 100644
index 3801685a7d..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHay.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftHay extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Orientable {
-
-    public CraftHay() {
-        super();
-    }
-
-    public CraftHay(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOrientable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> AXIS = getEnum(net.minecraft.world.level.block.HayBlock.class, "axis");
-
-    @Override
-    public org.bukkit.Axis getAxis() {
-        return this.get(CraftHay.AXIS, org.bukkit.Axis.class);
-    }
-
-    @Override
-    public void setAxis(org.bukkit.Axis axis) {
-        this.set(CraftHay.AXIS, axis);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.Axis> getAxes() {
-        return this.getValues(CraftHay.AXIS, org.bukkit.Axis.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHeavyCore.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHeavyCore.java
deleted file mode 100644
index d070fc8c36..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHeavyCore.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftHeavyCore extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftHeavyCore() {
-        super();
-    }
-
-    public CraftHeavyCore(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.HeavyCoreBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftHeavyCore.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftHeavyCore.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHopper.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHopper.java
deleted file mode 100644
index 26091ba15d..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHopper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftHopper extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Hopper, org.bukkit.block.data.Directional {
-
-    public CraftHopper() {
-        super();
-    }
-
-    public CraftHopper(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftHopper
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty ENABLED = getBoolean(net.minecraft.world.level.block.HopperBlock.class, "enabled");
-
-    @Override
-    public boolean isEnabled() {
-        return this.get(CraftHopper.ENABLED);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        this.set(CraftHopper.ENABLED, enabled);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.HopperBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftHopper.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftHopper.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftHopper.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHugeMushroom.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHugeMushroom.java
deleted file mode 100644
index ebd0633f98..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftHugeMushroom.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftHugeMushroom extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.MultipleFacing {
-
-    public CraftHugeMushroom() {
-        super();
-    }
-
-    public CraftHugeMushroom(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.HugeMushroomBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.HugeMushroomBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.HugeMushroomBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.HugeMushroomBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.HugeMushroomBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.HugeMushroomBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftHugeMushroom.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftHugeMushroom.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftHugeMushroom.FACES.length; i++) {
-            if (CraftHugeMushroom.FACES[i] != null && this.get(CraftHugeMushroom.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftHugeMushroom.FACES.length; i++) {
-            if (CraftHugeMushroom.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftIceFrost.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftIceFrost.java
deleted file mode 100644
index 85367beecc..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftIceFrost.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftIceFrost extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftIceFrost() {
-        super();
-    }
-
-    public CraftIceFrost(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.FrostedIceBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftIceFrost.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftIceFrost.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftIceFrost.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftInfestedRotatedPillar.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftInfestedRotatedPillar.java
deleted file mode 100644
index e3272b34dc..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftInfestedRotatedPillar.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftInfestedRotatedPillar extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Orientable {
-
-    public CraftInfestedRotatedPillar() {
-        super();
-    }
-
-    public CraftInfestedRotatedPillar(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOrientable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> AXIS = getEnum(net.minecraft.world.level.block.InfestedRotatedPillarBlock.class, "axis");
-
-    @Override
-    public org.bukkit.Axis getAxis() {
-        return this.get(CraftInfestedRotatedPillar.AXIS, org.bukkit.Axis.class);
-    }
-
-    @Override
-    public void setAxis(org.bukkit.Axis axis) {
-        this.set(CraftInfestedRotatedPillar.AXIS, axis);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.Axis> getAxes() {
-        return this.getValues(CraftInfestedRotatedPillar.AXIS, org.bukkit.Axis.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftIronBars.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftIronBars.java
deleted file mode 100644
index 485d212ce5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftIronBars.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftIronBars extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Fence, org.bukkit.block.data.MultipleFacing, org.bukkit.block.data.Waterlogged {
-
-    public CraftIronBars() {
-        super();
-    }
-
-    public CraftIronBars(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.IronBarsBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.IronBarsBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.IronBarsBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.IronBarsBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.IronBarsBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.IronBarsBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftIronBars.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftIronBars.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftIronBars.FACES.length; i++) {
-            if (CraftIronBars.FACES[i] != null && this.get(CraftIronBars.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftIronBars.FACES.length; i++) {
-            if (CraftIronBars.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.IronBarsBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftIronBars.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftIronBars.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftJigsaw.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftJigsaw.java
deleted file mode 100644
index 12237538df..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftJigsaw.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftJigsaw extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Jigsaw {
-
-    public CraftJigsaw() {
-        super();
-    }
-
-    public CraftJigsaw(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftJigsaw
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ORIENTATION = getEnum(net.minecraft.world.level.block.JigsawBlock.class, "orientation");
-
-    @Override
-    public org.bukkit.block.data.type.Jigsaw.Orientation getOrientation() {
-        return this.get(CraftJigsaw.ORIENTATION, org.bukkit.block.data.type.Jigsaw.Orientation.class);
-    }
-
-    @Override
-    public void setOrientation(org.bukkit.block.data.type.Jigsaw.Orientation orientation) {
-        this.set(CraftJigsaw.ORIENTATION, orientation);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftJukeBox.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftJukeBox.java
deleted file mode 100644
index 3e37557bf6..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftJukeBox.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftJukeBox extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Jukebox {
-
-    public CraftJukeBox() {
-        super();
-    }
-
-    public CraftJukeBox(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftJukebox
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty HAS_RECORD = getBoolean(net.minecraft.world.level.block.JukeboxBlock.class, "has_record");
-
-    @Override
-    public boolean hasRecord() {
-        return this.get(CraftJukeBox.HAS_RECORD);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftKelp.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftKelp.java
deleted file mode 100644
index 299b91121a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftKelp.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftKelp extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftKelp() {
-        super();
-    }
-
-    public CraftKelp(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.KelpBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftKelp.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftKelp.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftKelp.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLadder.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLadder.java
deleted file mode 100644
index 26e5905647..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLadder.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLadder extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Ladder, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftLadder() {
-        super();
-    }
-
-    public CraftLadder(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.LadderBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftLadder.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftLadder.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftLadder.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.LadderBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftLadder.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftLadder.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLantern.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLantern.java
deleted file mode 100644
index 37ab63bb8d..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLantern.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLantern extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Lantern, org.bukkit.block.data.Hangable, org.bukkit.block.data.Waterlogged {
-
-    public CraftLantern() {
-        super();
-    }
-
-    public CraftLantern(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftHangable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty HANGING = getBoolean(net.minecraft.world.level.block.LanternBlock.class, "hanging");
-
-    @Override
-    public boolean isHanging() {
-        return this.get(CraftLantern.HANGING);
-    }
-
-    @Override
-    public void setHanging(boolean hanging) {
-        this.set(CraftLantern.HANGING, hanging);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.LanternBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftLantern.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftLantern.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
deleted file mode 100644
index c0e0cbceb0..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLayeredCauldron extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Levelled {
-
-    public CraftLayeredCauldron() {
-        super();
-    }
-
-    public CraftLayeredCauldron(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLevelled
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty LEVEL = getInteger(net.minecraft.world.level.block.LayeredCauldronBlock.class, "level");
-
-    @Override
-    public int getLevel() {
-        return this.get(CraftLayeredCauldron.LEVEL);
-    }
-
-    @Override
-    public void setLevel(int level) {
-        this.set(CraftLayeredCauldron.LEVEL, level);
-    }
-
-    @Override
-    public int getMaximumLevel() {
-        return getMax(CraftLayeredCauldron.LEVEL);
-    }
-
-    // Paper start
-    @Override
-    public int getMinimumLevel() {
-        return getMin(CraftLayeredCauldron.LEVEL);
-    }
-    // Paper end
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
deleted file mode 100644
index ab336b400c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLeaves extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Leaves, org.bukkit.block.data.Waterlogged {
-
-    public CraftLeaves() {
-        super();
-    }
-
-    public CraftLeaves(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftLeaves
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DISTANCE = getInteger(net.minecraft.world.level.block.LeavesBlock.class, "distance");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty PERSISTENT = getBoolean(net.minecraft.world.level.block.LeavesBlock.class, "persistent");
-
-    @Override
-    public boolean isPersistent() {
-        return this.get(CraftLeaves.PERSISTENT);
-    }
-
-    @Override
-    public void setPersistent(boolean persistent) {
-        this.set(CraftLeaves.PERSISTENT, persistent);
-    }
-
-    @Override
-    public int getDistance() {
-        return this.get(CraftLeaves.DISTANCE);
-    }
-
-    @Override
-    public void setDistance(int distance) {
-        this.set(CraftLeaves.DISTANCE, distance);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.LeavesBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftLeaves.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftLeaves.WATERLOGGED, waterlogged);
-    }
-
-    // Paper start
-    @Override
-    public int getMaximumDistance() {
-        return getMax(CraftLeaves.DISTANCE);
-    }
-
-    @Override
-    public int getMinimumDistance() {
-        return getMin(CraftLeaves.DISTANCE);
-    }
-    // Paper end
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLectern.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLectern.java
deleted file mode 100644
index ee53b15208..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLectern.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLectern extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Lectern, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftLectern() {
-        super();
-    }
-
-    public CraftLectern(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftLectern
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty HAS_BOOK = getBoolean(net.minecraft.world.level.block.LecternBlock.class, "has_book");
-
-    @Override
-    public boolean hasBook() {
-        return this.get(CraftLectern.HAS_BOOK);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.LecternBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftLectern.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftLectern.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftLectern.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.LecternBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftLectern.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftLectern.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLever.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLever.java
deleted file mode 100644
index 761ab0fb13..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLever.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLever extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Switch, org.bukkit.block.data.Directional, org.bukkit.block.data.FaceAttachable, org.bukkit.block.data.Powerable {
-
-    public CraftLever() {
-        super();
-    }
-
-    public CraftLever(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSwitch
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACE = getEnum(net.minecraft.world.level.block.LeverBlock.class, "face");
-
-    @Override
-    public org.bukkit.block.data.type.Switch.Face getFace() {
-        return this.get(CraftLever.FACE, org.bukkit.block.data.type.Switch.Face.class);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.data.type.Switch.Face face) {
-        this.set(CraftLever.FACE, face);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.LeverBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftLever.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftLever.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftLever.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftFaceAttachable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> ATTACH_FACE = getEnum(net.minecraft.world.level.block.LeverBlock.class, "face");
-
-    @Override
-    public org.bukkit.block.data.FaceAttachable.AttachedFace getAttachedFace() {
-        return this.get(CraftLever.ATTACH_FACE, org.bukkit.block.data.FaceAttachable.AttachedFace.class);
-    }
-
-    @Override
-    public void setAttachedFace(org.bukkit.block.data.FaceAttachable.AttachedFace face) {
-        this.set(CraftLever.ATTACH_FACE, face);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.LeverBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftLever.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftLever.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLight.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
deleted file mode 100644
index 8c936a95ef..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLight extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Light, org.bukkit.block.data.Levelled, org.bukkit.block.data.Waterlogged {
-
-    public CraftLight() {
-        super();
-    }
-
-    public CraftLight(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLevelled
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty LEVEL = getInteger(net.minecraft.world.level.block.LightBlock.class, "level");
-
-    @Override
-    public int getLevel() {
-        return this.get(CraftLight.LEVEL);
-    }
-
-    @Override
-    public void setLevel(int level) {
-        this.set(CraftLight.LEVEL, level);
-    }
-
-    @Override
-    public int getMaximumLevel() {
-        return getMax(CraftLight.LEVEL);
-    }
-
-    // Paper start
-    @Override
-    public int getMinimumLevel() {
-        return getMin(CraftLight.LEVEL);
-    }
-    // Paper end
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.LightBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftLight.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftLight.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLightningRod.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLightningRod.java
deleted file mode 100644
index b3bc8b411c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLightningRod.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLightningRod extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.LightningRod, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable, org.bukkit.block.data.Waterlogged {
-
-    public CraftLightningRod() {
-        super();
-    }
-
-    public CraftLightningRod(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.LightningRodBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftLightningRod.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftLightningRod.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftLightningRod.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.LightningRodBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftLightningRod.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftLightningRod.POWERED, powered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.LightningRodBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftLightningRod.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftLightningRod.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLoom.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLoom.java
deleted file mode 100644
index e39737c6a7..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLoom.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftLoom extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftLoom() {
-        super();
-    }
-
-    public CraftLoom(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.LoomBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftLoom.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftLoom.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftLoom.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
deleted file mode 100644
index 8b621aaead..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftMangroveLeaves extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Leaves, org.bukkit.block.data.Waterlogged {
-
-    public CraftMangroveLeaves() {
-        super();
-    }
-
-    public CraftMangroveLeaves(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftLeaves
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DISTANCE = getInteger(net.minecraft.world.level.block.MangroveLeavesBlock.class, "distance");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty PERSISTENT = getBoolean(net.minecraft.world.level.block.MangroveLeavesBlock.class, "persistent");
-
-    @Override
-    public boolean isPersistent() {
-        return this.get(CraftMangroveLeaves.PERSISTENT);
-    }
-
-    @Override
-    public void setPersistent(boolean persistent) {
-        this.set(CraftMangroveLeaves.PERSISTENT, persistent);
-    }
-
-    @Override
-    public int getDistance() {
-        return this.get(CraftMangroveLeaves.DISTANCE);
-    }
-
-    @Override
-    public void setDistance(int distance) {
-        this.set(CraftMangroveLeaves.DISTANCE, distance);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.MangroveLeavesBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftMangroveLeaves.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftMangroveLeaves.WATERLOGGED, waterlogged);
-    }
-
-    // Paper start
-    @Override
-    public int getMinimumDistance() {
-        return getMin(CraftMangroveLeaves.DISTANCE);
-    }
-
-    @Override
-    public int getMaximumDistance() {
-        return getMax(CraftMangroveLeaves.DISTANCE);
-    }
-    // Paper end
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangrovePropagule.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangrovePropagule.java
deleted file mode 100644
index 5a48fdd96b..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangrovePropagule.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftMangrovePropagule extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.MangrovePropagule, org.bukkit.block.data.Ageable, org.bukkit.block.data.Hangable, org.bukkit.block.data.type.Sapling, org.bukkit.block.data.Waterlogged {
-
-    public CraftMangrovePropagule() {
-        super();
-    }
-
-    public CraftMangrovePropagule(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.MangrovePropaguleBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftMangrovePropagule.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftMangrovePropagule.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftMangrovePropagule.AGE);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftHangable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty HANGING = getBoolean(net.minecraft.world.level.block.MangrovePropaguleBlock.class, "hanging");
-
-    @Override
-    public boolean isHanging() {
-        return this.get(CraftMangrovePropagule.HANGING);
-    }
-
-    @Override
-    public void setHanging(boolean hanging) {
-        this.set(CraftMangrovePropagule.HANGING, hanging);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSapling
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty STAGE = getInteger(net.minecraft.world.level.block.MangrovePropaguleBlock.class, "stage");
-
-    @Override
-    public int getStage() {
-        return this.get(CraftMangrovePropagule.STAGE);
-    }
-
-    @Override
-    public void setStage(int stage) {
-        this.set(CraftMangrovePropagule.STAGE, stage);
-    }
-
-    @Override
-    public int getMaximumStage() {
-        return getMax(CraftMangrovePropagule.STAGE);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.MangrovePropaguleBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftMangrovePropagule.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftMangrovePropagule.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveRoots.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveRoots.java
deleted file mode 100644
index 1442ed8cf8..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveRoots.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftMangroveRoots extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftMangroveRoots() {
-        super();
-    }
-
-    public CraftMangroveRoots(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.MangroveRootsBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftMangroveRoots.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftMangroveRoots.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMinecartDetector.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMinecartDetector.java
deleted file mode 100644
index a462ef71be..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMinecartDetector.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftMinecartDetector extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.RedstoneRail, org.bukkit.block.data.Powerable, org.bukkit.block.data.Rail, org.bukkit.block.data.Waterlogged {
-
-    public CraftMinecartDetector() {
-        super();
-    }
-
-    public CraftMinecartDetector(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.DetectorRailBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftMinecartDetector.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftMinecartDetector.POWERED, powered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRail
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SHAPE = getEnum(net.minecraft.world.level.block.DetectorRailBlock.class, "shape");
-
-    @Override
-    public org.bukkit.block.data.Rail.Shape getShape() {
-        return this.get(CraftMinecartDetector.SHAPE, org.bukkit.block.data.Rail.Shape.class);
-    }
-
-    @Override
-    public void setShape(org.bukkit.block.data.Rail.Shape shape) {
-        this.set(CraftMinecartDetector.SHAPE, shape);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.data.Rail.Shape> getShapes() {
-        return this.getValues(CraftMinecartDetector.SHAPE, org.bukkit.block.data.Rail.Shape.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.DetectorRailBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftMinecartDetector.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftMinecartDetector.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMinecartTrack.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMinecartTrack.java
deleted file mode 100644
index f58d2af86a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMinecartTrack.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftMinecartTrack extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Rail, org.bukkit.block.data.Waterlogged {
-
-    public CraftMinecartTrack() {
-        super();
-    }
-
-    public CraftMinecartTrack(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRail
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SHAPE = getEnum(net.minecraft.world.level.block.RailBlock.class, "shape");
-
-    @Override
-    public org.bukkit.block.data.Rail.Shape getShape() {
-        return this.get(CraftMinecartTrack.SHAPE, org.bukkit.block.data.Rail.Shape.class);
-    }
-
-    @Override
-    public void setShape(org.bukkit.block.data.Rail.Shape shape) {
-        this.set(CraftMinecartTrack.SHAPE, shape);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.data.Rail.Shape> getShapes() {
-        return this.getValues(CraftMinecartTrack.SHAPE, org.bukkit.block.data.Rail.Shape.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.RailBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftMinecartTrack.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftMinecartTrack.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMossyCarpet.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMossyCarpet.java
deleted file mode 100644
index 745eaca8b7..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMossyCarpet.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftMossyCarpet extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.MossyCarpet {
-
-    public CraftMossyCarpet() {
-        super();
-    }
-
-    public CraftMossyCarpet(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftMossyCarpet
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BOTTOM = getBoolean(net.minecraft.world.level.block.MossyCarpetBlock.class, "bottom");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?>[] HEIGHTS = new net.minecraft.world.level.block.state.properties.EnumProperty[]{
-        getEnum(net.minecraft.world.level.block.MossyCarpetBlock.class, "north"), getEnum(net.minecraft.world.level.block.MossyCarpetBlock.class, "east"), getEnum(net.minecraft.world.level.block.MossyCarpetBlock.class, "south"), getEnum(net.minecraft.world.level.block.MossyCarpetBlock.class, "west")
-    };
-
-    @Override
-    public boolean isBottom() {
-        return this.get(CraftMossyCarpet.BOTTOM);
-    }
-
-    @Override
-    public void setBottom(boolean up) {
-        this.set(CraftMossyCarpet.BOTTOM, up);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.MossyCarpet.Height getHeight(org.bukkit.block.BlockFace face) {
-        return this.get(CraftMossyCarpet.HEIGHTS[face.ordinal()], org.bukkit.block.data.type.MossyCarpet.Height.class);
-    }
-
-    @Override
-    public void setHeight(org.bukkit.block.BlockFace face, org.bukkit.block.data.type.MossyCarpet.Height height) {
-        this.set(CraftMossyCarpet.HEIGHTS[face.ordinal()], height);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMultiface.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMultiface.java
deleted file mode 100644
index c4796d88de..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMultiface.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftMultiface extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.ResinClump, org.bukkit.block.data.MultipleFacing, org.bukkit.block.data.Waterlogged {
-
-    public CraftMultiface() {
-        super();
-    }
-
-    public CraftMultiface(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.MultifaceBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.MultifaceBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.MultifaceBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.MultifaceBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.MultifaceBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.MultifaceBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftMultiface.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftMultiface.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftMultiface.FACES.length; i++) {
-            if (CraftMultiface.FACES[i] != null && this.get(CraftMultiface.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftMultiface.FACES.length; i++) {
-            if (CraftMultiface.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.MultifaceBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftMultiface.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftMultiface.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMycel.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMycel.java
deleted file mode 100644
index ec10c721e8..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMycel.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftMycel extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Snowable {
-
-    public CraftMycel() {
-        super();
-    }
-
-    public CraftMycel(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftSnowable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SNOWY = getBoolean(net.minecraft.world.level.block.MyceliumBlock.class, "snowy");
-
-    @Override
-    public boolean isSnowy() {
-        return this.get(CraftMycel.SNOWY);
-    }
-
-    @Override
-    public void setSnowy(boolean snowy) {
-        this.set(CraftMycel.SNOWY, snowy);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftNetherWart.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftNetherWart.java
deleted file mode 100644
index b98d7f857b..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftNetherWart.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftNetherWart extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftNetherWart() {
-        super();
-    }
-
-    public CraftNetherWart(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.NetherWartBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftNetherWart.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftNetherWart.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftNetherWart.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftNote.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftNote.java
deleted file mode 100644
index 60675e5519..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftNote.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftNote extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.NoteBlock, org.bukkit.block.data.Powerable {
-
-    public CraftNote() {
-        super();
-    }
-
-    public CraftNote(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftNoteBlock
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> INSTRUMENT = getEnum(net.minecraft.world.level.block.NoteBlock.class, "instrument");
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty NOTE = getInteger(net.minecraft.world.level.block.NoteBlock.class, "note");
-
-    @Override
-    public org.bukkit.Instrument getInstrument() {
-        return this.get(CraftNote.INSTRUMENT, org.bukkit.Instrument.class);
-    }
-
-    @Override
-    public void setInstrument(org.bukkit.Instrument instrument) {
-        this.set(CraftNote.INSTRUMENT, instrument);
-    }
-
-    @Override
-    public org.bukkit.Note getNote() {
-       return new org.bukkit.Note(this.get(CraftNote.NOTE));
-    }
-
-    @Override
-    public void setNote(org.bukkit.Note note) {
-        this.set(CraftNote.NOTE, (int) note.getId());
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.NoteBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftNote.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftNote.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftObserver.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftObserver.java
deleted file mode 100644
index e6364d5bfc..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftObserver.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftObserver extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Observer, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftObserver() {
-        super();
-    }
-
-    public CraftObserver(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.ObserverBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftObserver.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftObserver.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftObserver.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.ObserverBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftObserver.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftObserver.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftParticleLeaves.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftParticleLeaves.java
deleted file mode 100644
index e37e84c333..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftParticleLeaves.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftParticleLeaves extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Leaves, org.bukkit.block.data.Waterlogged {
-
-    public CraftParticleLeaves() {
-        super();
-    }
-
-    public CraftParticleLeaves(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftLeaves
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DISTANCE = getInteger(net.minecraft.world.level.block.ParticleLeavesBlock.class, "distance");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty PERSISTENT = getBoolean(net.minecraft.world.level.block.ParticleLeavesBlock.class, "persistent");
-
-    @Override
-    public boolean isPersistent() {
-        return this.get(CraftParticleLeaves.PERSISTENT);
-    }
-
-    @Override
-    public void setPersistent(boolean persistent) {
-        this.set(CraftParticleLeaves.PERSISTENT, persistent);
-    }
-
-    @Override
-    public int getDistance() {
-        return this.get(CraftParticleLeaves.DISTANCE);
-    }
-
-    @Override
-    public void setDistance(int distance) {
-        this.set(CraftParticleLeaves.DISTANCE, distance);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.ParticleLeavesBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftParticleLeaves.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftParticleLeaves.WATERLOGGED, waterlogged);
-    }
-
-    // Paper start
-    @Override
-    public int getMaximumDistance() {
-        return getMax(DISTANCE);
-    }
-
-    @Override
-    public int getMinimumDistance() {
-        return getMin(DISTANCE);
-    }
-    // Paper end
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPiglinWallSkull.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPiglinWallSkull.java
deleted file mode 100644
index 60b246ab4d..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPiglinWallSkull.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPiglinWallSkull extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.WallSkull, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftPiglinWallSkull() {
-        super();
-    }
-
-    public CraftPiglinWallSkull(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.PiglinWallSkullBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftPiglinWallSkull.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftPiglinWallSkull.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftPiglinWallSkull.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.PiglinWallSkullBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftPiglinWallSkull.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftPiglinWallSkull.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
deleted file mode 100644
index 0f7df1b4c5..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPinkPetals extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.PinkPetals, org.bukkit.block.data.Directional {
-
-    public CraftPinkPetals() {
-        super();
-    }
-
-    public CraftPinkPetals(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftPinkPetals
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty FLOWER_AMOUNT = getInteger(net.minecraft.world.level.block.PinkPetalsBlock.class, "flower_amount");
-
-    @Override
-    public int getFlowerAmount() {
-        return this.get(CraftPinkPetals.FLOWER_AMOUNT);
-    }
-
-    @Override
-    public void setFlowerAmount(int flower_amount) {
-        this.set(CraftPinkPetals.FLOWER_AMOUNT, flower_amount);
-    }
-
-    // Paper start
-    @Override
-    public int getMinimumFlowerAmount() {
-        return getMin(CraftPinkPetals.FLOWER_AMOUNT);
-    }
-    // Paper end
-
-    @Override
-    public int getMaximumFlowerAmount() {
-        return getMax(CraftPinkPetals.FLOWER_AMOUNT);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.PinkPetalsBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftPinkPetals.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftPinkPetals.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftPinkPetals.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPiston.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPiston.java
deleted file mode 100644
index f31db7daf2..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPiston.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPiston extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Piston, org.bukkit.block.data.Directional {
-
-    public CraftPiston() {
-        super();
-    }
-
-    public CraftPiston(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftPiston
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty EXTENDED = getBoolean(net.minecraft.world.level.block.piston.PistonBaseBlock.class, "extended");
-
-    @Override
-    public boolean isExtended() {
-        return this.get(CraftPiston.EXTENDED);
-    }
-
-    @Override
-    public void setExtended(boolean extended) {
-        this.set(CraftPiston.EXTENDED, extended);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.piston.PistonBaseBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftPiston.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftPiston.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftPiston.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPistonExtension.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPistonExtension.java
deleted file mode 100644
index 21b6d3c11c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPistonExtension.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPistonExtension extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.PistonHead, org.bukkit.block.data.type.TechnicalPiston, org.bukkit.block.data.Directional {
-
-    public CraftPistonExtension() {
-        super();
-    }
-
-    public CraftPistonExtension(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftPistonHead
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SHORT = getBoolean(net.minecraft.world.level.block.piston.PistonHeadBlock.class, "short");
-
-    @Override
-    public boolean isShort() {
-        return this.get(CraftPistonExtension.SHORT);
-    }
-
-    @Override
-    public void setShort(boolean _short) {
-        this.set(CraftPistonExtension.SHORT, _short);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftTechnicalPiston
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum(net.minecraft.world.level.block.piston.PistonHeadBlock.class, "type");
-
-    @Override
-    public org.bukkit.block.data.type.TechnicalPiston.Type getType() {
-        return this.get(CraftPistonExtension.TYPE, org.bukkit.block.data.type.TechnicalPiston.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.TechnicalPiston.Type type) {
-        this.set(CraftPistonExtension.TYPE, type);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.piston.PistonHeadBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftPistonExtension.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftPistonExtension.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftPistonExtension.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPistonMoving.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPistonMoving.java
deleted file mode 100644
index 497843a5e6..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPistonMoving.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPistonMoving extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TechnicalPiston, org.bukkit.block.data.Directional {
-
-    public CraftPistonMoving() {
-        super();
-    }
-
-    public CraftPistonMoving(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftTechnicalPiston
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum(net.minecraft.world.level.block.piston.MovingPistonBlock.class, "type");
-
-    @Override
-    public org.bukkit.block.data.type.TechnicalPiston.Type getType() {
-        return this.get(CraftPistonMoving.TYPE, org.bukkit.block.data.type.TechnicalPiston.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.TechnicalPiston.Type type) {
-        this.set(CraftPistonMoving.TYPE, type);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.piston.MovingPistonBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftPistonMoving.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftPistonMoving.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftPistonMoving.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPitcherCrop.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPitcherCrop.java
deleted file mode 100644
index e21d374ad9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPitcherCrop.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPitcherCrop extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.PitcherCrop, org.bukkit.block.data.Ageable, org.bukkit.block.data.Bisected {
-
-    public CraftPitcherCrop() {
-        super();
-    }
-
-    public CraftPitcherCrop(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.PitcherCropBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftPitcherCrop.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftPitcherCrop.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftPitcherCrop.AGE);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.PitcherCropBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftPitcherCrop.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftPitcherCrop.HALF, half);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPointedDripstone.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPointedDripstone.java
deleted file mode 100644
index bdf6d3fce9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPointedDripstone.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPointedDripstone extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.PointedDripstone, org.bukkit.block.data.Waterlogged {
-
-    public CraftPointedDripstone() {
-        super();
-    }
-
-    public CraftPointedDripstone(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftPointedDripstone
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> VERTICAL_DIRECTION = getEnum(net.minecraft.world.level.block.PointedDripstoneBlock.class, "vertical_direction");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> THICKNESS = getEnum(net.minecraft.world.level.block.PointedDripstoneBlock.class, "thickness");
-
-    @Override
-    public org.bukkit.block.BlockFace getVerticalDirection() {
-        return this.get(CraftPointedDripstone.VERTICAL_DIRECTION, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setVerticalDirection(org.bukkit.block.BlockFace direction) {
-        this.set(CraftPointedDripstone.VERTICAL_DIRECTION, direction);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getVerticalDirections() {
-        return this.getValues(CraftPointedDripstone.VERTICAL_DIRECTION, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.PointedDripstone.Thickness getThickness() {
-        return this.get(CraftPointedDripstone.THICKNESS, org.bukkit.block.data.type.PointedDripstone.Thickness.class);
-    }
-
-    @Override
-    public void setThickness(org.bukkit.block.data.type.PointedDripstone.Thickness thickness) {
-        this.set(CraftPointedDripstone.THICKNESS, thickness);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.PointedDripstoneBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftPointedDripstone.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftPointedDripstone.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPortal.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPortal.java
deleted file mode 100644
index 0f182381c1..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPortal.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPortal extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Orientable {
-
-    public CraftPortal() {
-        super();
-    }
-
-    public CraftPortal(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOrientable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> AXIS = getEnum(net.minecraft.world.level.block.NetherPortalBlock.class, "axis");
-
-    @Override
-    public org.bukkit.Axis getAxis() {
-        return this.get(CraftPortal.AXIS, org.bukkit.Axis.class);
-    }
-
-    @Override
-    public void setAxis(org.bukkit.Axis axis) {
-        this.set(CraftPortal.AXIS, axis);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.Axis> getAxes() {
-        return this.getValues(CraftPortal.AXIS, org.bukkit.Axis.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPotatoes.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPotatoes.java
deleted file mode 100644
index ee3faab6b3..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPotatoes.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPotatoes extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftPotatoes() {
-        super();
-    }
-
-    public CraftPotatoes(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.PotatoBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftPotatoes.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftPotatoes.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftPotatoes.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPoweredRail.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPoweredRail.java
deleted file mode 100644
index a52e3dcedf..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPoweredRail.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPoweredRail extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.RedstoneRail, org.bukkit.block.data.Powerable, org.bukkit.block.data.Rail, org.bukkit.block.data.Waterlogged {
-
-    public CraftPoweredRail() {
-        super();
-    }
-
-    public CraftPoweredRail(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.PoweredRailBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftPoweredRail.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftPoweredRail.POWERED, powered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRail
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SHAPE = getEnum(net.minecraft.world.level.block.PoweredRailBlock.class, "shape");
-
-    @Override
-    public org.bukkit.block.data.Rail.Shape getShape() {
-        return this.get(CraftPoweredRail.SHAPE, org.bukkit.block.data.Rail.Shape.class);
-    }
-
-    @Override
-    public void setShape(org.bukkit.block.data.Rail.Shape shape) {
-        this.set(CraftPoweredRail.SHAPE, shape);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.data.Rail.Shape> getShapes() {
-        return this.getValues(CraftPoweredRail.SHAPE, org.bukkit.block.data.Rail.Shape.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.PoweredRailBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftPoweredRail.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftPoweredRail.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlateBinary.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlateBinary.java
deleted file mode 100644
index 05c7662f44..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlateBinary.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPressurePlateBinary extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Powerable {
-
-    public CraftPressurePlateBinary() {
-        super();
-    }
-
-    public CraftPressurePlateBinary(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.PressurePlateBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftPressurePlateBinary.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftPressurePlateBinary.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlateWeighted.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlateWeighted.java
deleted file mode 100644
index 0eb4b7bdee..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPressurePlateWeighted.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPressurePlateWeighted extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.AnaloguePowerable {
-
-    public CraftPressurePlateWeighted() {
-        super();
-    }
-
-    public CraftPressurePlateWeighted(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAnaloguePowerable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty POWER = getInteger(net.minecraft.world.level.block.WeightedPressurePlateBlock.class, "power");
-
-    @Override
-    public int getPower() {
-        return this.get(CraftPressurePlateWeighted.POWER);
-    }
-
-    @Override
-    public void setPower(int power) {
-        this.set(CraftPressurePlateWeighted.POWER, power);
-    }
-
-    @Override
-    public int getMaximumPower() {
-        return getMax(CraftPressurePlateWeighted.POWER);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPumpkinCarved.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPumpkinCarved.java
deleted file mode 100644
index ddd573ae55..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPumpkinCarved.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftPumpkinCarved extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftPumpkinCarved() {
-        super();
-    }
-
-    public CraftPumpkinCarved(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.CarvedPumpkinBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftPumpkinCarved.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftPumpkinCarved.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftPumpkinCarved.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneComparator.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneComparator.java
deleted file mode 100644
index d3d68ae06e..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneComparator.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRedstoneComparator extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Comparator, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftRedstoneComparator() {
-        super();
-    }
-
-    public CraftRedstoneComparator(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftComparator
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> MODE = getEnum(net.minecraft.world.level.block.ComparatorBlock.class, "mode");
-
-    @Override
-    public org.bukkit.block.data.type.Comparator.Mode getMode() {
-        return this.get(CraftRedstoneComparator.MODE, org.bukkit.block.data.type.Comparator.Mode.class);
-    }
-
-    @Override
-    public void setMode(org.bukkit.block.data.type.Comparator.Mode mode) {
-        this.set(CraftRedstoneComparator.MODE, mode);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.ComparatorBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftRedstoneComparator.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftRedstoneComparator.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftRedstoneComparator.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.ComparatorBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftRedstoneComparator.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftRedstoneComparator.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneLamp.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneLamp.java
deleted file mode 100644
index 99ea9327b1..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneLamp.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRedstoneLamp extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Lightable {
-
-    public CraftRedstoneLamp() {
-        super();
-    }
-
-    public CraftRedstoneLamp(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.RedstoneLampBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftRedstoneLamp.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftRedstoneLamp.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneOre.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneOre.java
deleted file mode 100644
index 5069c1ba07..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneOre.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRedstoneOre extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Lightable {
-
-    public CraftRedstoneOre() {
-        super();
-    }
-
-    public CraftRedstoneOre(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.RedStoneOreBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftRedstoneOre.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftRedstoneOre.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorch.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorch.java
deleted file mode 100644
index 9ffd14f886..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorch.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRedstoneTorch extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Lightable {
-
-    public CraftRedstoneTorch() {
-        super();
-    }
-
-    public CraftRedstoneTorch(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.RedstoneTorchBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftRedstoneTorch.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftRedstoneTorch.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorchWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorchWall.java
deleted file mode 100644
index 4df2452825..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneTorchWall.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRedstoneTorchWall extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.RedstoneWallTorch, org.bukkit.block.data.Directional, org.bukkit.block.data.Lightable {
-
-    public CraftRedstoneTorchWall() {
-        super();
-    }
-
-    public CraftRedstoneTorchWall(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.RedstoneWallTorchBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftRedstoneTorchWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftRedstoneTorchWall.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftRedstoneTorchWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.RedstoneWallTorchBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftRedstoneTorchWall.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftRedstoneTorchWall.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneWire.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneWire.java
deleted file mode 100644
index 009be1c9a4..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRedstoneWire.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRedstoneWire extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.RedstoneWire, org.bukkit.block.data.AnaloguePowerable {
-
-    public CraftRedstoneWire() {
-        super();
-    }
-
-    public CraftRedstoneWire(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftRedstoneWire
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> NORTH = getEnum(net.minecraft.world.level.block.RedStoneWireBlock.class, "north");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> EAST = getEnum(net.minecraft.world.level.block.RedStoneWireBlock.class, "east");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SOUTH = getEnum(net.minecraft.world.level.block.RedStoneWireBlock.class, "south");
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> WEST = getEnum(net.minecraft.world.level.block.RedStoneWireBlock.class, "west");
-
-    @Override
-    public org.bukkit.block.data.type.RedstoneWire.Connection getFace(org.bukkit.block.BlockFace face) {
-        switch (face) {
-            case NORTH:
-                return this.get(CraftRedstoneWire.NORTH, org.bukkit.block.data.type.RedstoneWire.Connection.class);
-            case EAST:
-                return this.get(CraftRedstoneWire.EAST, org.bukkit.block.data.type.RedstoneWire.Connection.class);
-            case SOUTH:
-                return this.get(CraftRedstoneWire.SOUTH, org.bukkit.block.data.type.RedstoneWire.Connection.class);
-            case WEST:
-                return this.get(CraftRedstoneWire.WEST, org.bukkit.block.data.type.RedstoneWire.Connection.class);
-            default:
-                throw new IllegalArgumentException("Cannot have face " + face);
-        }
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, org.bukkit.block.data.type.RedstoneWire.Connection connection) {
-        switch (face) {
-            case NORTH:
-                this.set(CraftRedstoneWire.NORTH, connection);
-                break;
-            case EAST:
-                this.set(CraftRedstoneWire.EAST, connection);
-                break;
-            case SOUTH:
-                this.set(CraftRedstoneWire.SOUTH, connection);
-                break;
-            case WEST:
-                this.set(CraftRedstoneWire.WEST, connection);
-                break;
-            default:
-                throw new IllegalArgumentException("Cannot have face " + face);
-        }
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        return com.google.common.collect.ImmutableSet.of(org.bukkit.block.BlockFace.NORTH, org.bukkit.block.BlockFace.EAST, org.bukkit.block.BlockFace.SOUTH, org.bukkit.block.BlockFace.WEST);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAnaloguePowerable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty POWER = getInteger(net.minecraft.world.level.block.RedStoneWireBlock.class, "power");
-
-    @Override
-    public int getPower() {
-        return this.get(CraftRedstoneWire.POWER);
-    }
-
-    @Override
-    public void setPower(int power) {
-        this.set(CraftRedstoneWire.POWER, power);
-    }
-
-    @Override
-    public int getMaximumPower() {
-        return getMax(CraftRedstoneWire.POWER);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftReed.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftReed.java
deleted file mode 100644
index 4d613c6703..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftReed.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftReed extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftReed() {
-        super();
-    }
-
-    public CraftReed(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.SugarCaneBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftReed.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftReed.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftReed.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRepeater.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRepeater.java
deleted file mode 100644
index 5894cea1d0..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRepeater.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRepeater extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Repeater, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftRepeater() {
-        super();
-    }
-
-    public CraftRepeater(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftRepeater
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DELAY = getInteger(net.minecraft.world.level.block.RepeaterBlock.class, "delay");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LOCKED = getBoolean(net.minecraft.world.level.block.RepeaterBlock.class, "locked");
-
-    @Override
-    public int getDelay() {
-        return this.get(CraftRepeater.DELAY);
-    }
-
-    @Override
-    public void setDelay(int delay) {
-        this.set(CraftRepeater.DELAY, delay);
-    }
-
-    @Override
-    public int getMinimumDelay() {
-        return getMin(CraftRepeater.DELAY);
-    }
-
-    @Override
-    public int getMaximumDelay() {
-        return getMax(CraftRepeater.DELAY);
-    }
-
-    @Override
-    public boolean isLocked() {
-        return this.get(CraftRepeater.LOCKED);
-    }
-
-    @Override
-    public void setLocked(boolean locked) {
-        this.set(CraftRepeater.LOCKED, locked);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.RepeaterBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftRepeater.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftRepeater.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftRepeater.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.RepeaterBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftRepeater.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftRepeater.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRespawnAnchor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRespawnAnchor.java
deleted file mode 100644
index 4ee32a2513..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRespawnAnchor.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRespawnAnchor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.RespawnAnchor {
-
-    public CraftRespawnAnchor() {
-        super();
-    }
-
-    public CraftRespawnAnchor(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftRespawnAnchor
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty CHARGES = getInteger(net.minecraft.world.level.block.RespawnAnchorBlock.class, "charges");
-
-    @Override
-    public int getCharges() {
-        return this.get(CraftRespawnAnchor.CHARGES);
-    }
-
-    @Override
-    public void setCharges(int charges) {
-        this.set(CraftRespawnAnchor.CHARGES, charges);
-    }
-
-    @Override
-    public int getMaximumCharges() {
-        return getMax(CraftRespawnAnchor.CHARGES);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRotatable.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRotatable.java
deleted file mode 100644
index 4f28a405db..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftRotatable.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftRotatable extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Orientable {
-
-    public CraftRotatable() {
-        super();
-    }
-
-    public CraftRotatable(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOrientable
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> AXIS = getEnum(net.minecraft.world.level.block.RotatedPillarBlock.class, "axis");
-
-    @Override
-    public org.bukkit.Axis getAxis() {
-        return this.get(CraftRotatable.AXIS, org.bukkit.Axis.class);
-    }
-
-    @Override
-    public void setAxis(org.bukkit.Axis axis) {
-        this.set(CraftRotatable.AXIS, axis);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.Axis> getAxes() {
-        return this.getValues(CraftRotatable.AXIS, org.bukkit.Axis.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSapling.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSapling.java
deleted file mode 100644
index 9ba586d5ce..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSapling.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSapling extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Sapling {
-
-    public CraftSapling() {
-        super();
-    }
-
-    public CraftSapling(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSapling
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty STAGE = getInteger(net.minecraft.world.level.block.SaplingBlock.class, "stage");
-
-    @Override
-    public int getStage() {
-        return this.get(CraftSapling.STAGE);
-    }
-
-    @Override
-    public void setStage(int stage) {
-        this.set(CraftSapling.STAGE, stage);
-    }
-
-    @Override
-    public int getMaximumStage() {
-        return getMax(CraftSapling.STAGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftScaffolding.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftScaffolding.java
deleted file mode 100644
index 4b4f6853dc..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftScaffolding.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftScaffolding extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Scaffolding, org.bukkit.block.data.Waterlogged {
-
-    public CraftScaffolding() {
-        super();
-    }
-
-    public CraftScaffolding(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftScaffolding
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BOTTOM = getBoolean(net.minecraft.world.level.block.ScaffoldingBlock.class, "bottom");
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty DISTANCE = getInteger(net.minecraft.world.level.block.ScaffoldingBlock.class, "distance");
-
-    @Override
-    public boolean isBottom() {
-        return this.get(CraftScaffolding.BOTTOM);
-    }
-
-    @Override
-    public void setBottom(boolean bottom) {
-        this.set(CraftScaffolding.BOTTOM, bottom);
-    }
-
-    @Override
-    public int getDistance() {
-        return this.get(CraftScaffolding.DISTANCE);
-    }
-
-    @Override
-    public void setDistance(int distance) {
-        this.set(CraftScaffolding.DISTANCE, distance);
-    }
-
-    @Override
-    public int getMaximumDistance() {
-        return getMax(CraftScaffolding.DISTANCE);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.ScaffoldingBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftScaffolding.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftScaffolding.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkCatalyst.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkCatalyst.java
deleted file mode 100644
index 653cb1930d..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkCatalyst.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSculkCatalyst extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.SculkCatalyst {
-
-    public CraftSculkCatalyst() {
-        super();
-    }
-
-    public CraftSculkCatalyst(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSculkCatalyst
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty BLOOM = getBoolean(net.minecraft.world.level.block.SculkCatalystBlock.class, "bloom");
-
-    @Override
-    public boolean isBloom() {
-        return this.get(CraftSculkCatalyst.BLOOM);
-    }
-
-    @Override
-    public void setBloom(boolean bloom) {
-        this.set(CraftSculkCatalyst.BLOOM, bloom);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkSensor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkSensor.java
deleted file mode 100644
index 10eb0ac019..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkSensor.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSculkSensor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.SculkSensor, org.bukkit.block.data.AnaloguePowerable, org.bukkit.block.data.Waterlogged {
-
-    public CraftSculkSensor() {
-        super();
-    }
-
-    public CraftSculkSensor(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSculkSensor
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> PHASE = getEnum(net.minecraft.world.level.block.SculkSensorBlock.class, "sculk_sensor_phase");
-
-    @Override
-    public org.bukkit.block.data.type.SculkSensor.Phase getPhase() {
-        return this.get(CraftSculkSensor.PHASE, org.bukkit.block.data.type.SculkSensor.Phase.class);
-    }
-
-    @Override
-    public void setPhase(org.bukkit.block.data.type.SculkSensor.Phase phase) {
-        this.set(CraftSculkSensor.PHASE, phase);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAnaloguePowerable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty POWER = getInteger(net.minecraft.world.level.block.SculkSensorBlock.class, "power");
-
-    @Override
-    public int getPower() {
-        return this.get(CraftSculkSensor.POWER);
-    }
-
-    @Override
-    public void setPower(int power) {
-        this.set(CraftSculkSensor.POWER, power);
-    }
-
-    @Override
-    public int getMaximumPower() {
-        return getMax(CraftSculkSensor.POWER);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.SculkSensorBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftSculkSensor.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftSculkSensor.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkShrieker.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkShrieker.java
deleted file mode 100644
index 099169583a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkShrieker.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSculkShrieker extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.SculkShrieker, org.bukkit.block.data.Waterlogged {
-
-    public CraftSculkShrieker() {
-        super();
-    }
-
-    public CraftSculkShrieker(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSculkShrieker
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty CAN_SUMMON = getBoolean(net.minecraft.world.level.block.SculkShriekerBlock.class, "can_summon");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty SHRIEKING = getBoolean(net.minecraft.world.level.block.SculkShriekerBlock.class, "shrieking");
-
-    @Override
-    public boolean isCanSummon() {
-        return this.get(CraftSculkShrieker.CAN_SUMMON);
-    }
-
-    @Override
-    public void setCanSummon(boolean can_summon) {
-        this.set(CraftSculkShrieker.CAN_SUMMON, can_summon);
-    }
-
-    @Override
-    public boolean isShrieking() {
-        return this.get(CraftSculkShrieker.SHRIEKING);
-    }
-
-    @Override
-    public void setShrieking(boolean shrieking) {
-        this.set(CraftSculkShrieker.SHRIEKING, shrieking);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.SculkShriekerBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftSculkShrieker.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftSculkShrieker.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java
deleted file mode 100644
index c753e94075..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSculkVein.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSculkVein extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.SculkVein, org.bukkit.block.data.MultipleFacing, org.bukkit.block.data.Waterlogged {
-
-    public CraftSculkVein() {
-        super();
-    }
-
-    public CraftSculkVein(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftSculkVein.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftSculkVein.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftSculkVein.FACES.length; i++) {
-            if (CraftSculkVein.FACES[i] != null && this.get(CraftSculkVein.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftSculkVein.FACES.length; i++) {
-            if (CraftSculkVein.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.SculkVeinBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftSculkVein.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftSculkVein.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSeaPickle.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSeaPickle.java
deleted file mode 100644
index 37d1b9c8fc..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSeaPickle.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSeaPickle extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.SeaPickle, org.bukkit.block.data.Waterlogged {
-
-    public CraftSeaPickle() {
-        super();
-    }
-
-    public CraftSeaPickle(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSeaPickle
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty PICKLES = getInteger(net.minecraft.world.level.block.SeaPickleBlock.class, "pickles");
-
-    @Override
-    public int getPickles() {
-        return this.get(CraftSeaPickle.PICKLES);
-    }
-
-    @Override
-    public void setPickles(int pickles) {
-        this.set(CraftSeaPickle.PICKLES, pickles);
-    }
-
-    @Override
-    public int getMinimumPickles() {
-        return getMin(CraftSeaPickle.PICKLES);
-    }
-
-    @Override
-    public int getMaximumPickles() {
-        return getMax(CraftSeaPickle.PICKLES);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.SeaPickleBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftSeaPickle.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftSeaPickle.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftShulkerBox.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftShulkerBox.java
deleted file mode 100644
index 37b0253538..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftShulkerBox.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftShulkerBox extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftShulkerBox() {
-        super();
-    }
-
-    public CraftShulkerBox(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.ShulkerBoxBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftShulkerBox.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftShulkerBox.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftShulkerBox.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkull.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkull.java
deleted file mode 100644
index 49f0ee79f4..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkull.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSkull extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Skull, org.bukkit.block.data.Powerable, org.bukkit.block.data.Rotatable {
-
-    public CraftSkull() {
-        super();
-    }
-
-    public CraftSkull(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.SkullBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftSkull.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftSkull.POWERED, powered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRotatable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty ROTATION = getInteger(net.minecraft.world.level.block.SkullBlock.class, "rotation");
-
-    @Override
-    public org.bukkit.block.BlockFace getRotation() {
-        int data = this.get(CraftSkull.ROTATION);
-        switch (data) {
-            case 0x0:
-                return org.bukkit.block.BlockFace.SOUTH;
-            case 0x1:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_WEST;
-            case 0x2:
-                return org.bukkit.block.BlockFace.SOUTH_WEST;
-            case 0x3:
-                return org.bukkit.block.BlockFace.WEST_SOUTH_WEST;
-            case 0x4:
-                return org.bukkit.block.BlockFace.WEST;
-            case 0x5:
-                return org.bukkit.block.BlockFace.WEST_NORTH_WEST;
-            case 0x6:
-                return org.bukkit.block.BlockFace.NORTH_WEST;
-            case 0x7:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_WEST;
-            case 0x8:
-                return org.bukkit.block.BlockFace.NORTH;
-            case 0x9:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_EAST;
-            case 0xA:
-                return org.bukkit.block.BlockFace.NORTH_EAST;
-            case 0xB:
-                return org.bukkit.block.BlockFace.EAST_NORTH_EAST;
-            case 0xC:
-                return org.bukkit.block.BlockFace.EAST;
-            case 0xD:
-                return org.bukkit.block.BlockFace.EAST_SOUTH_EAST;
-            case 0xE:
-                return org.bukkit.block.BlockFace.SOUTH_EAST;
-            case 0xF:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_EAST;
-            default:
-                throw new IllegalArgumentException("Unknown rotation " + data);
-        }
-    }
-
-    @Override
-    public void setRotation(org.bukkit.block.BlockFace rotation) {
-        int val;
-        switch (rotation) {
-            case SOUTH:
-                val = 0x0;
-                break;
-            case SOUTH_SOUTH_WEST:
-                val = 0x1;
-                break;
-            case SOUTH_WEST:
-                val = 0x2;
-                break;
-            case WEST_SOUTH_WEST:
-                val = 0x3;
-                break;
-            case WEST:
-                val = 0x4;
-                break;
-            case WEST_NORTH_WEST:
-                val = 0x5;
-                break;
-            case NORTH_WEST:
-                val = 0x6;
-                break;
-            case NORTH_NORTH_WEST:
-                val = 0x7;
-                break;
-            case NORTH:
-                val = 0x8;
-                break;
-            case NORTH_NORTH_EAST:
-                val = 0x9;
-                break;
-            case NORTH_EAST:
-                val = 0xA;
-                break;
-            case EAST_NORTH_EAST:
-                val = 0xB;
-                break;
-            case EAST:
-                val = 0xC;
-                break;
-            case EAST_SOUTH_EAST:
-                val = 0xD;
-                break;
-            case SOUTH_EAST:
-                val = 0xE;
-                break;
-            case SOUTH_SOUTH_EAST:
-                val = 0xF;
-                break;
-            default:
-                throw new IllegalArgumentException("Illegal rotation " + rotation);
-        }
-        this.set(CraftSkull.ROTATION, val);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullPlayer.java
deleted file mode 100644
index 9f956fd19c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullPlayer.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSkullPlayer extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Skull, org.bukkit.block.data.Powerable, org.bukkit.block.data.Rotatable {
-
-    public CraftSkullPlayer() {
-        super();
-    }
-
-    public CraftSkullPlayer(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.PlayerHeadBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftSkullPlayer.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftSkullPlayer.POWERED, powered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRotatable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty ROTATION = getInteger(net.minecraft.world.level.block.PlayerHeadBlock.class, "rotation");
-
-    @Override
-    public org.bukkit.block.BlockFace getRotation() {
-        int data = this.get(CraftSkullPlayer.ROTATION);
-        switch (data) {
-            case 0x0:
-                return org.bukkit.block.BlockFace.SOUTH;
-            case 0x1:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_WEST;
-            case 0x2:
-                return org.bukkit.block.BlockFace.SOUTH_WEST;
-            case 0x3:
-                return org.bukkit.block.BlockFace.WEST_SOUTH_WEST;
-            case 0x4:
-                return org.bukkit.block.BlockFace.WEST;
-            case 0x5:
-                return org.bukkit.block.BlockFace.WEST_NORTH_WEST;
-            case 0x6:
-                return org.bukkit.block.BlockFace.NORTH_WEST;
-            case 0x7:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_WEST;
-            case 0x8:
-                return org.bukkit.block.BlockFace.NORTH;
-            case 0x9:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_EAST;
-            case 0xA:
-                return org.bukkit.block.BlockFace.NORTH_EAST;
-            case 0xB:
-                return org.bukkit.block.BlockFace.EAST_NORTH_EAST;
-            case 0xC:
-                return org.bukkit.block.BlockFace.EAST;
-            case 0xD:
-                return org.bukkit.block.BlockFace.EAST_SOUTH_EAST;
-            case 0xE:
-                return org.bukkit.block.BlockFace.SOUTH_EAST;
-            case 0xF:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_EAST;
-            default:
-                throw new IllegalArgumentException("Unknown rotation " + data);
-        }
-    }
-
-    @Override
-    public void setRotation(org.bukkit.block.BlockFace rotation) {
-        int val;
-        switch (rotation) {
-            case SOUTH:
-                val = 0x0;
-                break;
-            case SOUTH_SOUTH_WEST:
-                val = 0x1;
-                break;
-            case SOUTH_WEST:
-                val = 0x2;
-                break;
-            case WEST_SOUTH_WEST:
-                val = 0x3;
-                break;
-            case WEST:
-                val = 0x4;
-                break;
-            case WEST_NORTH_WEST:
-                val = 0x5;
-                break;
-            case NORTH_WEST:
-                val = 0x6;
-                break;
-            case NORTH_NORTH_WEST:
-                val = 0x7;
-                break;
-            case NORTH:
-                val = 0x8;
-                break;
-            case NORTH_NORTH_EAST:
-                val = 0x9;
-                break;
-            case NORTH_EAST:
-                val = 0xA;
-                break;
-            case EAST_NORTH_EAST:
-                val = 0xB;
-                break;
-            case EAST:
-                val = 0xC;
-                break;
-            case EAST_SOUTH_EAST:
-                val = 0xD;
-                break;
-            case SOUTH_EAST:
-                val = 0xE;
-                break;
-            case SOUTH_SOUTH_EAST:
-                val = 0xF;
-                break;
-            default:
-                throw new IllegalArgumentException("Illegal rotation " + rotation);
-        }
-        this.set(CraftSkullPlayer.ROTATION, val);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullPlayerWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullPlayerWall.java
deleted file mode 100644
index c73be942b0..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullPlayerWall.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSkullPlayerWall extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.WallSkull, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftSkullPlayerWall() {
-        super();
-    }
-
-    public CraftSkullPlayerWall(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.PlayerWallHeadBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftSkullPlayerWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftSkullPlayerWall.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftSkullPlayerWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.PlayerWallHeadBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftSkullPlayerWall.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftSkullPlayerWall.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullWall.java
deleted file mode 100644
index 538fd08e8c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSkullWall.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSkullWall extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.WallSkull, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftSkullWall() {
-        super();
-    }
-
-    public CraftSkullWall(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WallSkullBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftSkullWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftSkullWall.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftSkullWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.WallSkullBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftSkullWall.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftSkullWall.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSmallDripleaf.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSmallDripleaf.java
deleted file mode 100644
index 34a41353d1..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSmallDripleaf.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSmallDripleaf extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.SmallDripleaf, org.bukkit.block.data.type.Dripleaf, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftSmallDripleaf() {
-        super();
-    }
-
-    public CraftSmallDripleaf(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.SmallDripleafBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftSmallDripleaf.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftSmallDripleaf.HALF, half);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.SmallDripleafBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftSmallDripleaf.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftSmallDripleaf.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftSmallDripleaf.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.SmallDripleafBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftSmallDripleaf.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftSmallDripleaf.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSmoker.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSmoker.java
deleted file mode 100644
index 5eb2508d64..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSmoker.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSmoker extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Furnace, org.bukkit.block.data.Directional, org.bukkit.block.data.Lightable {
-
-    public CraftSmoker() {
-        super();
-    }
-
-    public CraftSmoker(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.SmokerBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftSmoker.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftSmoker.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftSmoker.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.SmokerBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftSmoker.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftSmoker.LIT, lit);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSnifferEgg.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSnifferEgg.java
deleted file mode 100644
index 35978b240e..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSnifferEgg.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSnifferEgg extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Hatchable {
-
-    public CraftSnifferEgg() {
-        super();
-    }
-
-    public CraftSnifferEgg(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftHatchable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty HATCH = getInteger(net.minecraft.world.level.block.SnifferEggBlock.class, "hatch");
-
-    @Override
-    public int getHatch() {
-        return this.get(CraftSnifferEgg.HATCH);
-    }
-
-    @Override
-    public void setHatch(int hatch) {
-        this.set(CraftSnifferEgg.HATCH, hatch);
-    }
-
-    @Override
-    public int getMaximumHatch() {
-        return getMax(CraftSnifferEgg.HATCH);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSnow.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSnow.java
deleted file mode 100644
index ff340637f1..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSnow.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSnow extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Snow {
-
-    public CraftSnow() {
-        super();
-    }
-
-    public CraftSnow(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSnow
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty LAYERS = getInteger(net.minecraft.world.level.block.SnowLayerBlock.class, "layers");
-
-    @Override
-    public int getLayers() {
-        return this.get(CraftSnow.LAYERS);
-    }
-
-    @Override
-    public void setLayers(int layers) {
-        this.set(CraftSnow.LAYERS, layers);
-    }
-
-    @Override
-    public int getMinimumLayers() {
-        return getMin(CraftSnow.LAYERS);
-    }
-
-    @Override
-    public int getMaximumLayers() {
-        return getMax(CraftSnow.LAYERS);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSoil.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSoil.java
deleted file mode 100644
index 56f701e9f0..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSoil.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSoil extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Farmland {
-
-    public CraftSoil() {
-        super();
-    }
-
-    public CraftSoil(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftFarmland
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty MOISTURE = getInteger(net.minecraft.world.level.block.FarmBlock.class, "moisture");
-
-    @Override
-    public int getMoisture() {
-        return this.get(CraftSoil.MOISTURE);
-    }
-
-    @Override
-    public void setMoisture(int moisture) {
-        this.set(CraftSoil.MOISTURE, moisture);
-    }
-
-    @Override
-    public int getMaximumMoisture() {
-        return getMax(CraftSoil.MOISTURE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStainedGlassPane.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStainedGlassPane.java
deleted file mode 100644
index 91467410bb..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStainedGlassPane.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftStainedGlassPane extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.GlassPane, org.bukkit.block.data.MultipleFacing, org.bukkit.block.data.Waterlogged {
-
-    public CraftStainedGlassPane() {
-        super();
-    }
-
-    public CraftStainedGlassPane(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.StainedGlassPaneBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.StainedGlassPaneBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.StainedGlassPaneBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.StainedGlassPaneBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.StainedGlassPaneBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.StainedGlassPaneBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftStainedGlassPane.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftStainedGlassPane.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftStainedGlassPane.FACES.length; i++) {
-            if (CraftStainedGlassPane.FACES[i] != null && this.get(CraftStainedGlassPane.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftStainedGlassPane.FACES.length; i++) {
-            if (CraftStainedGlassPane.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.StainedGlassPaneBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftStainedGlassPane.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftStainedGlassPane.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStairs.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStairs.java
deleted file mode 100644
index 4cec825496..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStairs.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftStairs extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Stairs, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftStairs() {
-        super();
-    }
-
-    public CraftStairs(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftStairs
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SHAPE = getEnum(net.minecraft.world.level.block.StairBlock.class, "shape");
-
-    @Override
-    public org.bukkit.block.data.type.Stairs.Shape getShape() {
-        return this.get(CraftStairs.SHAPE, org.bukkit.block.data.type.Stairs.Shape.class);
-    }
-
-    @Override
-    public void setShape(org.bukkit.block.data.type.Stairs.Shape shape) {
-        this.set(CraftStairs.SHAPE, shape);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.StairBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftStairs.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftStairs.HALF, half);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.StairBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftStairs.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftStairs.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftStairs.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.StairBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftStairs.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftStairs.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStem.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStem.java
deleted file mode 100644
index e85eaca094..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStem.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftStem extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftStem() {
-        super();
-    }
-
-    public CraftStem(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.StemBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftStem.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftStem.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftStem.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStemAttached.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStemAttached.java
deleted file mode 100644
index 6da1ae7a8f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStemAttached.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftStemAttached extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftStemAttached() {
-        super();
-    }
-
-    public CraftStemAttached(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.AttachedStemBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftStemAttached.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftStemAttached.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftStemAttached.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStepAbstract.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStepAbstract.java
deleted file mode 100644
index a0d01902c4..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStepAbstract.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftStepAbstract extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Slab, org.bukkit.block.data.Waterlogged {
-
-    public CraftStepAbstract() {
-        super();
-    }
-
-    public CraftStepAbstract(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSlab
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum(net.minecraft.world.level.block.SlabBlock.class, "type");
-
-    @Override
-    public org.bukkit.block.data.type.Slab.Type getType() {
-        return this.get(CraftStepAbstract.TYPE, org.bukkit.block.data.type.Slab.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.Slab.Type type) {
-        this.set(CraftStepAbstract.TYPE, type);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.SlabBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftStepAbstract.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftStepAbstract.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStonecutter.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStonecutter.java
deleted file mode 100644
index 40bc47547f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStonecutter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftStonecutter extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftStonecutter() {
-        super();
-    }
-
-    public CraftStonecutter(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.StonecutterBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftStonecutter.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftStonecutter.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftStonecutter.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStructure.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStructure.java
deleted file mode 100644
index f505d440b9..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftStructure.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftStructure extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.StructureBlock {
-
-    public CraftStructure() {
-        super();
-    }
-
-    public CraftStructure(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftStructureBlock
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> MODE = getEnum(net.minecraft.world.level.block.StructureBlock.class, "mode");
-
-    @Override
-    public org.bukkit.block.data.type.StructureBlock.Mode getMode() {
-        return this.get(CraftStructure.MODE, org.bukkit.block.data.type.StructureBlock.Mode.class);
-    }
-
-    @Override
-    public void setMode(org.bukkit.block.data.type.StructureBlock.Mode mode) {
-        this.set(CraftStructure.MODE, mode);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSweetBerryBush.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSweetBerryBush.java
deleted file mode 100644
index 9f135401ee..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftSweetBerryBush.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftSweetBerryBush extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftSweetBerryBush() {
-        super();
-    }
-
-    public CraftSweetBerryBush(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.SweetBerryBushBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftSweetBerryBush.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftSweetBerryBush.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftSweetBerryBush.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTNT.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTNT.java
deleted file mode 100644
index 75fc4fe977..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTNT.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTNT extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TNT {
-
-    public CraftTNT() {
-        super();
-    }
-
-    public CraftTNT(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftTNT
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty UNSTABLE = getBoolean(net.minecraft.world.level.block.TntBlock.class, "unstable");
-
-    @Override
-    public boolean isUnstable() {
-        return this.get(CraftTNT.UNSTABLE);
-    }
-
-    @Override
-    public void setUnstable(boolean unstable) {
-        this.set(CraftTNT.UNSTABLE, unstable);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallPlant.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallPlant.java
deleted file mode 100644
index 0bbe254ba2..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallPlant.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTallPlant extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Bisected {
-
-    public CraftTallPlant() {
-        super();
-    }
-
-    public CraftTallPlant(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.DoublePlantBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftTallPlant.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftTallPlant.HALF, half);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallPlantFlower.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallPlantFlower.java
deleted file mode 100644
index f13cdcd3af..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallPlantFlower.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTallPlantFlower extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Bisected {
-
-    public CraftTallPlantFlower() {
-        super();
-    }
-
-    public CraftTallPlantFlower(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.TallFlowerBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftTallPlantFlower.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftTallPlantFlower.HALF, half);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallSeagrass.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallSeagrass.java
deleted file mode 100644
index a69b28f41c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTallSeagrass.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTallSeagrass extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Bisected {
-
-    public CraftTallSeagrass() {
-        super();
-    }
-
-    public CraftTallSeagrass(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.TallSeagrassBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftTallSeagrass.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftTallSeagrass.HALF, half);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTarget.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTarget.java
deleted file mode 100644
index baae9feace..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTarget.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTarget extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.AnaloguePowerable {
-
-    public CraftTarget() {
-        super();
-    }
-
-    public CraftTarget(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAnaloguePowerable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty POWER = getInteger(net.minecraft.world.level.block.TargetBlock.class, "power");
-
-    @Override
-    public int getPower() {
-        return this.get(CraftTarget.POWER);
-    }
-
-    @Override
-    public void setPower(int power) {
-        this.set(CraftTarget.POWER, power);
-    }
-
-    @Override
-    public int getMaximumPower() {
-        return getMax(CraftTarget.POWER);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTorchWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTorchWall.java
deleted file mode 100644
index 2d5eefabb2..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTorchWall.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTorchWall extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Directional {
-
-    public CraftTorchWall() {
-        super();
-    }
-
-    public CraftTorchWall(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WallTorchBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftTorchWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftTorchWall.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftTorchWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTorchflowerCrop.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTorchflowerCrop.java
deleted file mode 100644
index 2a4ade3518..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTorchflowerCrop.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTorchflowerCrop extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftTorchflowerCrop() {
-        super();
-    }
-
-    public CraftTorchflowerCrop(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.TorchflowerCropBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftTorchflowerCrop.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftTorchflowerCrop.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftTorchflowerCrop.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTrapdoor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTrapdoor.java
deleted file mode 100644
index 5e88ff74bb..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTrapdoor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTrapdoor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TrapDoor, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Openable, org.bukkit.block.data.Powerable, org.bukkit.block.data.Waterlogged {
-
-    public CraftTrapdoor() {
-        super();
-    }
-
-    public CraftTrapdoor(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.TrapDoorBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftTrapdoor.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftTrapdoor.HALF, half);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.TrapDoorBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftTrapdoor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftTrapdoor.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftTrapdoor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOpenable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OPEN = getBoolean(net.minecraft.world.level.block.TrapDoorBlock.class, "open");
-
-    @Override
-    public boolean isOpen() {
-        return this.get(CraftTrapdoor.OPEN);
-    }
-
-    @Override
-    public void setOpen(boolean open) {
-        this.set(CraftTrapdoor.OPEN, open);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.TrapDoorBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftTrapdoor.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftTrapdoor.POWERED, powered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.TrapDoorBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftTrapdoor.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftTrapdoor.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTrialSpawner.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTrialSpawner.java
deleted file mode 100644
index f510ff9c84..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTrialSpawner.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTrialSpawner extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TrialSpawner {
-
-    public CraftTrialSpawner() {
-        super();
-    }
-
-    public CraftTrialSpawner(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftTrialSpawner
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TRIAL_SPAWNER_STATE = getEnum(net.minecraft.world.level.block.TrialSpawnerBlock.class, "trial_spawner_state");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OMINOUS = getBoolean(net.minecraft.world.level.block.TrialSpawnerBlock.class, "ominous");
-
-    @Override
-    public org.bukkit.block.data.type.TrialSpawner.State getTrialSpawnerState() {
-        return this.get(CraftTrialSpawner.TRIAL_SPAWNER_STATE, org.bukkit.block.data.type.TrialSpawner.State.class);
-    }
-
-    @Override
-    public void setTrialSpawnerState(org.bukkit.block.data.type.TrialSpawner.State state) {
-        this.set(CraftTrialSpawner.TRIAL_SPAWNER_STATE, state);
-    }
-
-    @Override
-    public boolean isOminous() {
-        return this.get(CraftTrialSpawner.OMINOUS);
-    }
-
-    @Override
-    public void setOminous(boolean ominous) {
-        this.set(CraftTrialSpawner.OMINOUS, ominous);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTripwire.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTripwire.java
deleted file mode 100644
index 83375648cc..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTripwire.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTripwire extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Tripwire, org.bukkit.block.data.Attachable, org.bukkit.block.data.MultipleFacing, org.bukkit.block.data.Powerable {
-
-    public CraftTripwire() {
-        super();
-    }
-
-    public CraftTripwire(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftTripwire
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty DISARMED = getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "disarmed");
-
-    @Override
-    public boolean isDisarmed() {
-        return this.get(CraftTripwire.DISARMED);
-    }
-
-    @Override
-    public void setDisarmed(boolean disarmed) {
-        this.set(CraftTripwire.DISARMED, disarmed);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAttachable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty ATTACHED = getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "attached");
-
-    @Override
-    public boolean isAttached() {
-        return this.get(CraftTripwire.ATTACHED);
-    }
-
-    @Override
-    public void setAttached(boolean attached) {
-        this.set(CraftTripwire.ATTACHED, attached);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftTripwire.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftTripwire.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftTripwire.FACES.length; i++) {
-            if (CraftTripwire.FACES[i] != null && this.get(CraftTripwire.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftTripwire.FACES.length; i++) {
-            if (CraftTripwire.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.TripWireBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftTripwire.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftTripwire.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTripwireHook.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTripwireHook.java
deleted file mode 100644
index e072799d84..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTripwireHook.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTripwireHook extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TripwireHook, org.bukkit.block.data.Attachable, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftTripwireHook() {
-        super();
-    }
-
-    public CraftTripwireHook(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAttachable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty ATTACHED = getBoolean(net.minecraft.world.level.block.TripWireHookBlock.class, "attached");
-
-    @Override
-    public boolean isAttached() {
-        return this.get(CraftTripwireHook.ATTACHED);
-    }
-
-    @Override
-    public void setAttached(boolean attached) {
-        this.set(CraftTripwireHook.ATTACHED, attached);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.TripWireHookBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftTripwireHook.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftTripwireHook.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftTripwireHook.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.TripWireHookBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftTripwireHook.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftTripwireHook.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTurtleEgg.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTurtleEgg.java
deleted file mode 100644
index e4fac5e181..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTurtleEgg.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTurtleEgg extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TurtleEgg, org.bukkit.block.data.Hatchable {
-
-    public CraftTurtleEgg() {
-        super();
-    }
-
-    public CraftTurtleEgg(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftTurtleEgg
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty EGGS = getInteger(net.minecraft.world.level.block.TurtleEggBlock.class, "eggs");
-
-    @Override
-    public int getEggs() {
-        return this.get(CraftTurtleEgg.EGGS);
-    }
-
-    @Override
-    public void setEggs(int eggs) {
-        this.set(CraftTurtleEgg.EGGS, eggs);
-    }
-
-    @Override
-    public int getMinimumEggs() {
-        return getMin(CraftTurtleEgg.EGGS);
-    }
-
-    @Override
-    public int getMaximumEggs() {
-        return getMax(CraftTurtleEgg.EGGS);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftHatchable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty HATCH = getInteger(net.minecraft.world.level.block.TurtleEggBlock.class, "hatch");
-
-    @Override
-    public int getHatch() {
-        return this.get(CraftTurtleEgg.HATCH);
-    }
-
-    @Override
-    public void setHatch(int hatch) {
-        this.set(CraftTurtleEgg.HATCH, hatch);
-    }
-
-    @Override
-    public int getMaximumHatch() {
-        return getMax(CraftTurtleEgg.HATCH);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTwistingVines.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTwistingVines.java
deleted file mode 100644
index 116bb8706c..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftTwistingVines.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftTwistingVines extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftTwistingVines() {
-        super();
-    }
-
-    public CraftTwistingVines(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.TwistingVinesBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftTwistingVines.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftTwistingVines.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftTwistingVines.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftVault.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftVault.java
deleted file mode 100644
index 15e91d1bfa..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftVault.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftVault extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Vault, org.bukkit.block.data.Directional {
-
-    public CraftVault() {
-        super();
-    }
-
-    public CraftVault(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftVault
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> VAULT_STATE = getEnum(net.minecraft.world.level.block.VaultBlock.class, "vault_state");
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OMINOUS = getBoolean(net.minecraft.world.level.block.VaultBlock.class, "ominous");
-
-    @Override
-    public org.bukkit.block.data.type.Vault.State getVaultState() {
-        return this.get(CraftVault.VAULT_STATE, org.bukkit.block.data.type.Vault.State.class);
-    }
-
-    @Override
-    public org.bukkit.block.data.type.Vault.State getTrialSpawnerState() {
-        return this.getVaultState();
-    }
-
-    @Override
-    public void setVaultState(org.bukkit.block.data.type.Vault.State state) {
-        this.set(CraftVault.VAULT_STATE, state);
-    }
-
-    @Override
-    public void setTrialSpawnerState(org.bukkit.block.data.type.Vault.State state) {
-        this.setVaultState(state);
-    }
-
-    @Override
-    public boolean isOminous() {
-        return this.get(CraftVault.OMINOUS);
-    }
-
-    @Override
-    public void setOminous(boolean ominous) {
-        this.set(CraftVault.OMINOUS, ominous);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.VaultBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftVault.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftVault.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftVault.FACING, org.bukkit.block.BlockFace.class);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftVine.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftVine.java
deleted file mode 100644
index d595dac1bd..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftVine.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftVine extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.MultipleFacing {
-
-    public CraftVine() {
-        super();
-    }
-
-    public CraftVine(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftMultipleFacing
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty[] FACES = new net.minecraft.world.level.block.state.properties.BooleanProperty[]{
-        getBoolean(net.minecraft.world.level.block.VineBlock.class, "north", true), getBoolean(net.minecraft.world.level.block.VineBlock.class, "east", true), getBoolean(net.minecraft.world.level.block.VineBlock.class, "south", true), getBoolean(net.minecraft.world.level.block.VineBlock.class, "west", true), getBoolean(net.minecraft.world.level.block.VineBlock.class, "up", true), getBoolean(net.minecraft.world.level.block.VineBlock.class, "down", true)
-    };
-
-    @Override
-    public boolean hasFace(org.bukkit.block.BlockFace face) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftVine.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        return this.get(state);
-    }
-
-    @Override
-    public void setFace(org.bukkit.block.BlockFace face, boolean has) {
-        net.minecraft.world.level.block.state.properties.BooleanProperty state = CraftVine.FACES[face.ordinal()];
-        if (state == null) {
-            throw new IllegalArgumentException("Non-allowed face " + face + ". Check MultipleFacing.getAllowedFaces.");
-        }
-        this.set(state, has);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftVine.FACES.length; i++) {
-            if (CraftVine.FACES[i] != null && this.get(CraftVine.FACES[i])) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getAllowedFaces() {
-        com.google.common.collect.ImmutableSet.Builder<org.bukkit.block.BlockFace> faces = com.google.common.collect.ImmutableSet.builder();
-
-        for (int i = 0; i < CraftVine.FACES.length; i++) {
-            if (CraftVine.FACES[i] != null) {
-                faces.add(org.bukkit.block.BlockFace.values()[i]);
-            }
-        }
-
-        return faces.build();
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWallHangingSign.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWallHangingSign.java
deleted file mode 100644
index 1f30973fd6..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWallHangingSign.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWallHangingSign extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.WallHangingSign, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftWallHangingSign() {
-        super();
-    }
-
-    public CraftWallHangingSign(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WallHangingSignBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftWallHangingSign.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftWallHangingSign.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftWallHangingSign.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.WallHangingSignBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftWallHangingSign.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftWallHangingSign.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWallSign.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWallSign.java
deleted file mode 100644
index 573d189b6e..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWallSign.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWallSign extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.WallSign, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftWallSign() {
-        super();
-    }
-
-    public CraftWallSign(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WallSignBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftWallSign.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftWallSign.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftWallSign.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.WallSignBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftWallSign.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftWallSign.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWaterloggedTransparent.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWaterloggedTransparent.java
deleted file mode 100644
index 4bde4b7b16..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWaterloggedTransparent.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWaterloggedTransparent extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftWaterloggedTransparent() {
-        super();
-    }
-
-    public CraftWaterloggedTransparent(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.WaterloggedTransparentBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftWaterloggedTransparent.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftWaterloggedTransparent.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperBulb.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperBulb.java
deleted file mode 100644
index bb4aa08507..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperBulb.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWeatheringCopperBulb extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CopperBulb, org.bukkit.block.data.Lightable, org.bukkit.block.data.Powerable {
-
-    public CraftWeatheringCopperBulb() {
-        super();
-    }
-
-    public CraftWeatheringCopperBulb(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftLightable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty LIT = getBoolean(net.minecraft.world.level.block.WeatheringCopperBulbBlock.class, "lit");
-
-    @Override
-    public boolean isLit() {
-        return this.get(CraftWeatheringCopperBulb.LIT);
-    }
-
-    @Override
-    public void setLit(boolean lit) {
-        this.set(CraftWeatheringCopperBulb.LIT, lit);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.WeatheringCopperBulbBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftWeatheringCopperBulb.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftWeatheringCopperBulb.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperDoor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperDoor.java
deleted file mode 100644
index 32371d4992..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperDoor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWeatheringCopperDoor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Door, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Openable, org.bukkit.block.data.Powerable {
-
-    public CraftWeatheringCopperDoor() {
-        super();
-    }
-
-    public CraftWeatheringCopperDoor(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftDoor
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HINGE = getEnum(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "hinge");
-
-    @Override
-    public org.bukkit.block.data.type.Door.Hinge getHinge() {
-        return this.get(CraftWeatheringCopperDoor.HINGE, org.bukkit.block.data.type.Door.Hinge.class);
-    }
-
-    @Override
-    public void setHinge(org.bukkit.block.data.type.Door.Hinge hinge) {
-        this.set(CraftWeatheringCopperDoor.HINGE, hinge);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftWeatheringCopperDoor.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftWeatheringCopperDoor.HALF, half);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftWeatheringCopperDoor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftWeatheringCopperDoor.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftWeatheringCopperDoor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOpenable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OPEN = getBoolean(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "open");
-
-    @Override
-    public boolean isOpen() {
-        return this.get(CraftWeatheringCopperDoor.OPEN);
-    }
-
-    @Override
-    public void setOpen(boolean open) {
-        this.set(CraftWeatheringCopperDoor.OPEN, open);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftWeatheringCopperDoor.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftWeatheringCopperDoor.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperGrate.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperGrate.java
deleted file mode 100644
index 8c695d8f99..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperGrate.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWeatheringCopperGrate extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
-
-    public CraftWeatheringCopperGrate() {
-        super();
-    }
-
-    public CraftWeatheringCopperGrate(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.WeatheringCopperGrateBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftWeatheringCopperGrate.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftWeatheringCopperGrate.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperSlab.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperSlab.java
deleted file mode 100644
index 61ba7dedfc..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperSlab.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWeatheringCopperSlab extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Slab, org.bukkit.block.data.Waterlogged {
-
-    public CraftWeatheringCopperSlab() {
-        super();
-    }
-
-    public CraftWeatheringCopperSlab(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftSlab
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> TYPE = getEnum(net.minecraft.world.level.block.WeatheringCopperSlabBlock.class, "type");
-
-    @Override
-    public org.bukkit.block.data.type.Slab.Type getType() {
-        return this.get(CraftWeatheringCopperSlab.TYPE, org.bukkit.block.data.type.Slab.Type.class);
-    }
-
-    @Override
-    public void setType(org.bukkit.block.data.type.Slab.Type type) {
-        this.set(CraftWeatheringCopperSlab.TYPE, type);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.WeatheringCopperSlabBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftWeatheringCopperSlab.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftWeatheringCopperSlab.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperStair.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperStair.java
deleted file mode 100644
index 1229a2864a..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperStair.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWeatheringCopperStair extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Stairs, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Waterlogged {
-
-    public CraftWeatheringCopperStair() {
-        super();
-    }
-
-    public CraftWeatheringCopperStair(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.type.CraftStairs
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> SHAPE = getEnum(net.minecraft.world.level.block.WeatheringCopperStairBlock.class, "shape");
-
-    @Override
-    public org.bukkit.block.data.type.Stairs.Shape getShape() {
-        return this.get(CraftWeatheringCopperStair.SHAPE, org.bukkit.block.data.type.Stairs.Shape.class);
-    }
-
-    @Override
-    public void setShape(org.bukkit.block.data.type.Stairs.Shape shape) {
-        this.set(CraftWeatheringCopperStair.SHAPE, shape);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.WeatheringCopperStairBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftWeatheringCopperStair.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftWeatheringCopperStair.HALF, half);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WeatheringCopperStairBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftWeatheringCopperStair.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftWeatheringCopperStair.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftWeatheringCopperStair.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.WeatheringCopperStairBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftWeatheringCopperStair.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftWeatheringCopperStair.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperTrapDoor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperTrapDoor.java
deleted file mode 100644
index c50a8f6b2e..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeatheringCopperTrapDoor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWeatheringCopperTrapDoor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TrapDoor, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Openable, org.bukkit.block.data.Powerable, org.bukkit.block.data.Waterlogged {
-
-    public CraftWeatheringCopperTrapDoor() {
-        super();
-    }
-
-    public CraftWeatheringCopperTrapDoor(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftBisected
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> HALF = getEnum(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "half");
-
-    @Override
-    public org.bukkit.block.data.Bisected.Half getHalf() {
-        return this.get(CraftWeatheringCopperTrapDoor.HALF, org.bukkit.block.data.Bisected.Half.class);
-    }
-
-    @Override
-    public void setHalf(org.bukkit.block.data.Bisected.Half half) {
-        this.set(CraftWeatheringCopperTrapDoor.HALF, half);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftWeatheringCopperTrapDoor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftWeatheringCopperTrapDoor.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftWeatheringCopperTrapDoor.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftOpenable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty OPEN = getBoolean(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "open");
-
-    @Override
-    public boolean isOpen() {
-        return this.get(CraftWeatheringCopperTrapDoor.OPEN);
-    }
-
-    @Override
-    public void setOpen(boolean open) {
-        this.set(CraftWeatheringCopperTrapDoor.OPEN, open);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftWeatheringCopperTrapDoor.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftWeatheringCopperTrapDoor.POWERED, powered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftWaterlogged
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "waterlogged");
-
-    @Override
-    public boolean isWaterlogged() {
-        return this.get(CraftWeatheringCopperTrapDoor.WATERLOGGED);
-    }
-
-    @Override
-    public void setWaterlogged(boolean waterlogged) {
-        this.set(CraftWeatheringCopperTrapDoor.WATERLOGGED, waterlogged);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeepingVines.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeepingVines.java
deleted file mode 100644
index 6a7202cb84..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWeepingVines.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWeepingVines extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Ageable {
-
-    public CraftWeepingVines() {
-        super();
-    }
-
-    public CraftWeepingVines(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftAgeable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty AGE = getInteger(net.minecraft.world.level.block.WeepingVinesBlock.class, "age");
-
-    @Override
-    public int getAge() {
-        return this.get(CraftWeepingVines.AGE);
-    }
-
-    @Override
-    public void setAge(int age) {
-        this.set(CraftWeepingVines.AGE, age);
-    }
-
-    @Override
-    public int getMaximumAge() {
-        return getMax(CraftWeepingVines.AGE);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkull.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkull.java
deleted file mode 100644
index 21ea363a90..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkull.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWitherSkull extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Skull, org.bukkit.block.data.Powerable, org.bukkit.block.data.Rotatable {
-
-    public CraftWitherSkull() {
-        super();
-    }
-
-    public CraftWitherSkull(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.WitherSkullBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftWitherSkull.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftWitherSkull.POWERED, powered);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftRotatable
-
-    private static final net.minecraft.world.level.block.state.properties.IntegerProperty ROTATION = getInteger(net.minecraft.world.level.block.WitherSkullBlock.class, "rotation");
-
-    @Override
-    public org.bukkit.block.BlockFace getRotation() {
-        int data = this.get(CraftWitherSkull.ROTATION);
-        switch (data) {
-            case 0x0:
-                return org.bukkit.block.BlockFace.SOUTH;
-            case 0x1:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_WEST;
-            case 0x2:
-                return org.bukkit.block.BlockFace.SOUTH_WEST;
-            case 0x3:
-                return org.bukkit.block.BlockFace.WEST_SOUTH_WEST;
-            case 0x4:
-                return org.bukkit.block.BlockFace.WEST;
-            case 0x5:
-                return org.bukkit.block.BlockFace.WEST_NORTH_WEST;
-            case 0x6:
-                return org.bukkit.block.BlockFace.NORTH_WEST;
-            case 0x7:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_WEST;
-            case 0x8:
-                return org.bukkit.block.BlockFace.NORTH;
-            case 0x9:
-                return org.bukkit.block.BlockFace.NORTH_NORTH_EAST;
-            case 0xA:
-                return org.bukkit.block.BlockFace.NORTH_EAST;
-            case 0xB:
-                return org.bukkit.block.BlockFace.EAST_NORTH_EAST;
-            case 0xC:
-                return org.bukkit.block.BlockFace.EAST;
-            case 0xD:
-                return org.bukkit.block.BlockFace.EAST_SOUTH_EAST;
-            case 0xE:
-                return org.bukkit.block.BlockFace.SOUTH_EAST;
-            case 0xF:
-                return org.bukkit.block.BlockFace.SOUTH_SOUTH_EAST;
-            default:
-                throw new IllegalArgumentException("Unknown rotation " + data);
-        }
-    }
-
-    @Override
-    public void setRotation(org.bukkit.block.BlockFace rotation) {
-        int val;
-        switch (rotation) {
-            case SOUTH:
-                val = 0x0;
-                break;
-            case SOUTH_SOUTH_WEST:
-                val = 0x1;
-                break;
-            case SOUTH_WEST:
-                val = 0x2;
-                break;
-            case WEST_SOUTH_WEST:
-                val = 0x3;
-                break;
-            case WEST:
-                val = 0x4;
-                break;
-            case WEST_NORTH_WEST:
-                val = 0x5;
-                break;
-            case NORTH_WEST:
-                val = 0x6;
-                break;
-            case NORTH_NORTH_WEST:
-                val = 0x7;
-                break;
-            case NORTH:
-                val = 0x8;
-                break;
-            case NORTH_NORTH_EAST:
-                val = 0x9;
-                break;
-            case NORTH_EAST:
-                val = 0xA;
-                break;
-            case EAST_NORTH_EAST:
-                val = 0xB;
-                break;
-            case EAST:
-                val = 0xC;
-                break;
-            case EAST_SOUTH_EAST:
-                val = 0xD;
-                break;
-            case SOUTH_EAST:
-                val = 0xE;
-                break;
-            case SOUTH_SOUTH_EAST:
-                val = 0xF;
-                break;
-            default:
-                throw new IllegalArgumentException("Illegal rotation " + rotation);
-        }
-        this.set(CraftWitherSkull.ROTATION, val);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkullWall.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkullWall.java
deleted file mode 100644
index b43db5180f..0000000000
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/impl/CraftWitherSkullWall.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Automatically generated file, changes will be lost.
- */
-package org.bukkit.craftbukkit.block.impl;
-
-public final class CraftWitherSkullWall extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.WallSkull, org.bukkit.block.data.Directional, org.bukkit.block.data.Powerable {
-
-    public CraftWitherSkullWall() {
-        super();
-    }
-
-    public CraftWitherSkullWall(net.minecraft.world.level.block.state.BlockState state) {
-        super(state);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftDirectional
-
-    private static final net.minecraft.world.level.block.state.properties.EnumProperty<?> FACING = getEnum(net.minecraft.world.level.block.WitherWallSkullBlock.class, "facing");
-
-    @Override
-    public org.bukkit.block.BlockFace getFacing() {
-        return this.get(CraftWitherSkullWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    @Override
-    public void setFacing(org.bukkit.block.BlockFace facing) {
-        this.set(CraftWitherSkullWall.FACING, facing);
-    }
-
-    @Override
-    public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
-        return this.getValues(CraftWitherSkullWall.FACING, org.bukkit.block.BlockFace.class);
-    }
-
-    // org.bukkit.craftbukkit.block.data.CraftPowerable
-
-    private static final net.minecraft.world.level.block.state.properties.BooleanProperty POWERED = getBoolean(net.minecraft.world.level.block.WitherWallSkullBlock.class, "powered");
-
-    @Override
-    public boolean isPowered() {
-        return this.get(CraftWitherSkullWall.POWERED);
-    }
-
-    @Override
-    public void setPowered(boolean powered) {
-        this.set(CraftWitherSkullWall.POWERED, powered);
-    }
-}
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
index 9e53c30801..238ab5c01a 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
@@ -1,11 +1,8 @@
 package org.bukkit.craftbukkit.entity;
 
-import java.util.HashMap;
-import java.util.Map;
 import org.bukkit.DyeColor;
 import org.bukkit.craftbukkit.CraftServer;
 import org.bukkit.entity.TropicalFish;
-import org.bukkit.entity.TropicalFish.Pattern;
 
 public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFish implements TropicalFish { // Paper - Schooling Fish API
 
@@ -53,48 +50,9 @@ public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFi
         this.getHandle().setPackedVariant(CraftTropicalFish.getData(this.getPatternColor(), this.getBodyColor(), pattern));
     }
 
-    public static enum CraftPattern {
-        KOB(0, false),
-        SUNSTREAK(1, false),
-        SNOOPER(2, false),
-        DASHER(3, false),
-        BRINELY(4, false),
-        SPOTTY(5, false),
-        FLOPPER(0, true),
-        STRIPEY(1, true),
-        GLITTER(2, true),
-        BLOCKFISH(3, true),
-        BETTY(4, true),
-        CLAYFISH(5, true);
-
-        private final int variant;
-        private final boolean large;
-
-        //
-        private static final Map<Integer, Pattern> BY_DATA = new HashMap<>();
-
-        static {
-            for (CraftPattern type : values()) {
-                BY_DATA.put(type.getDataValue(), Pattern.values()[type.ordinal()]);
-            }
-        }
-
-        public static Pattern fromData(int data) {
-            return BY_DATA.get(data);
-        }
-
-        private CraftPattern(int variant, boolean large) {
-            this.variant = variant;
-            this.large = large;
-        }
-
-        public int getDataValue() {
-            return this.variant << 8 | ((this.large) ? 1 : 0);
-        }
-    }
-
     public static int getData(DyeColor patternColor, DyeColor bodyColor, Pattern type) {
-        return patternColor.getWoolData() << 24 | bodyColor.getWoolData() << 16 | CraftPattern.values()[type.ordinal()].getDataValue();
+        net.minecraft.world.entity.animal.TropicalFish.Pattern pattern = net.minecraft.world.entity.animal.TropicalFish.Pattern.valueOf(type.name());
+        return patternColor.getWoolData() << 24 | bodyColor.getWoolData() << 16 | pattern.getPackedId();
     }
 
     public static DyeColor getPatternColor(int data) {
@@ -106,6 +64,6 @@ public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFi
     }
 
     public static Pattern getPattern(int data) {
-        return CraftPattern.fromData(data & 0xFFFF);
+        return Pattern.valueOf(net.minecraft.world.entity.animal.TropicalFish.getPattern(data).name());
     }
 }
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryKey.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryKey.java
index 43cd5ef2dc..291a19c39b 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryKey.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryKey.java
@@ -17,7 +17,7 @@ public final class CraftMemoryKey {
         }
 
         net.minecraft.core.Registry<MemoryModuleType<?>> registry = CraftRegistry.getMinecraftRegistry(Registries.MEMORY_MODULE_TYPE);
-        MemoryKey<U> bukkit = Registry.MEMORY_MODULE_TYPE.get(CraftNamespacedKey.fromMinecraft(registry.getResourceKey(minecraft).orElseThrow().location()));
+        MemoryKey<U> bukkit = (MemoryKey<U>) Registry.MEMORY_MODULE_TYPE.get(CraftNamespacedKey.fromMinecraft(registry.getResourceKey(minecraft).orElseThrow().location()));
 
         return bukkit;
     }
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/map/CraftMapColorCache.java b/paper-server/src/main/java/org/bukkit/craftbukkit/map/CraftMapColorCache.java
index 8149b9c51b..db51e0f1ad 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/map/CraftMapColorCache.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/map/CraftMapColorCache.java
@@ -20,7 +20,7 @@ import org.bukkit.map.MapPalette;
 
 public class CraftMapColorCache implements MapPalette.MapColorCache {
 
-    private static final String MD5_CACHE_HASH = "E88EDD068D12D39934B40E8B6B124C83";
+    private static final String MD5_CACHE_HASH = "E88EDD068D12D39934B40E8B6B124C83"; // 248 colors
     private static final File CACHE_FILE = new File("map-color-cache.dat");
     private byte[] cache;
     private final Logger logger;
@@ -31,10 +31,16 @@ public class CraftMapColorCache implements MapPalette.MapColorCache {
         this.logger = logger;
     }
 
+    private static CraftMapColorCache dryRun() {
+        CraftMapColorCache mapColorCache = new CraftMapColorCache(Logger.getGlobal());
+        mapColorCache.cache = new byte[256 * 256 * 256];
+        mapColorCache.buildCache();
+        return mapColorCache;
+    }
+
     // Builds and prints the md5 hash of the cache, this should be run when new map colors are added to update the MD5_CACHE_HASH string
     public static void main(String[] args) {
-        CraftMapColorCache craftMapColorCache = new CraftMapColorCache(Logger.getGlobal());
-        craftMapColorCache.buildCache();
+        CraftMapColorCache craftMapColorCache = CraftMapColorCache.dryRun();
         try {
             byte[] hash = MessageDigest.getInstance("MD5").digest(craftMapColorCache.cache);
             System.out.println("MD5_CACHE_HASH: " + CraftMapColorCache.bytesToString(hash));
@@ -151,7 +157,7 @@ public class CraftMapColorCache implements MapPalette.MapColorCache {
 
     @Override
     public byte matchColor(Color color) {
-        Preconditions.checkState(this.isCached(), "Cache not build jet");
+        Preconditions.checkState(this.isCached(), "Cache not build yet");
 
         return this.cache[this.toInt(color)];
     }
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java b/paper-server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java
index cb11f0624e..349108473e 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java
@@ -14,30 +14,36 @@ import org.bukkit.potion.PotionType;
 public class CraftPotionUtil {
 
     private static final BiMap<PotionType, PotionType> upgradeable = ImmutableBiMap.<PotionType, PotionType>builder()
-            .put(PotionType.LEAPING, PotionType.STRONG_LEAPING)
-            .put(PotionType.SWIFTNESS, PotionType.STRONG_SWIFTNESS)
-            .put(PotionType.HEALING, PotionType.STRONG_HEALING)
+            // Start generate - CraftPotionUtil#upgradeable
+            // @GeneratedFrom 1.21.4
             .put(PotionType.HARMING, PotionType.STRONG_HARMING)
+            .put(PotionType.HEALING, PotionType.STRONG_HEALING)
+            .put(PotionType.LEAPING, PotionType.STRONG_LEAPING)
             .put(PotionType.POISON, PotionType.STRONG_POISON)
             .put(PotionType.REGENERATION, PotionType.STRONG_REGENERATION)
-            .put(PotionType.STRENGTH, PotionType.STRONG_STRENGTH)
             .put(PotionType.SLOWNESS, PotionType.STRONG_SLOWNESS)
+            .put(PotionType.STRENGTH, PotionType.STRONG_STRENGTH)
+            .put(PotionType.SWIFTNESS, PotionType.STRONG_SWIFTNESS)
             .put(PotionType.TURTLE_MASTER, PotionType.STRONG_TURTLE_MASTER)
+            // End generate - CraftPotionUtil#upgradeable
             .build();
     private static final BiMap<PotionType, PotionType> extendable = ImmutableBiMap.<PotionType, PotionType>builder()
-            .put(PotionType.NIGHT_VISION, PotionType.LONG_NIGHT_VISION)
+            // Start generate - CraftPotionUtil#extendable
+            // @GeneratedFrom 1.21.4
+            .put(PotionType.FIRE_RESISTANCE, PotionType.LONG_FIRE_RESISTANCE)
             .put(PotionType.INVISIBILITY, PotionType.LONG_INVISIBILITY)
             .put(PotionType.LEAPING, PotionType.LONG_LEAPING)
-            .put(PotionType.FIRE_RESISTANCE, PotionType.LONG_FIRE_RESISTANCE)
-            .put(PotionType.SWIFTNESS, PotionType.LONG_SWIFTNESS)
-            .put(PotionType.SLOWNESS, PotionType.LONG_SLOWNESS)
-            .put(PotionType.WATER_BREATHING, PotionType.LONG_WATER_BREATHING)
+            .put(PotionType.NIGHT_VISION, PotionType.LONG_NIGHT_VISION)
             .put(PotionType.POISON, PotionType.LONG_POISON)
             .put(PotionType.REGENERATION, PotionType.LONG_REGENERATION)
-            .put(PotionType.STRENGTH, PotionType.LONG_STRENGTH)
-            .put(PotionType.WEAKNESS, PotionType.LONG_WEAKNESS)
-            .put(PotionType.TURTLE_MASTER, PotionType.LONG_TURTLE_MASTER)
             .put(PotionType.SLOW_FALLING, PotionType.LONG_SLOW_FALLING)
+            .put(PotionType.SLOWNESS, PotionType.LONG_SLOWNESS)
+            .put(PotionType.STRENGTH, PotionType.LONG_STRENGTH)
+            .put(PotionType.SWIFTNESS, PotionType.LONG_SWIFTNESS)
+            .put(PotionType.TURTLE_MASTER, PotionType.LONG_TURTLE_MASTER)
+            .put(PotionType.WATER_BREATHING, PotionType.LONG_WATER_BREATHING)
+            .put(PotionType.WEAKNESS, PotionType.LONG_WEAKNESS)
+            // End generate - CraftPotionUtil#extendable
             .build();
 
     public static PotionType fromBukkit(PotionData data) {
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java b/paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
index 711d227f5e..c010106443 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java
@@ -1,29 +1,19 @@
 package org.bukkit.craftbukkit.scoreboard;
 
-import com.google.common.collect.ImmutableBiMap;
 import net.minecraft.world.scores.criteria.ObjectiveCriteria;
 import org.bukkit.scoreboard.DisplaySlot;
 import org.bukkit.scoreboard.RenderType;
 
 public final class CraftScoreboardTranslations {
-    static final int MAX_DISPLAY_SLOT = 19;
-    @Deprecated // Paper
-    static final ImmutableBiMap<DisplaySlot, String> SLOTS = ImmutableBiMap.<DisplaySlot, String>builder()
-            .put(DisplaySlot.BELOW_NAME, "below_name")
-            .put(DisplaySlot.PLAYER_LIST, "list")
-            .put(DisplaySlot.SIDEBAR, "sidebar")
-            .buildOrThrow();
 
     private CraftScoreboardTranslations() {}
 
     public static DisplaySlot toBukkitSlot(net.minecraft.world.scores.DisplaySlot minecraft) {
-        if (true) return DisplaySlot.NAMES.value(minecraft.getSerializedName()); // Paper
-        return CraftScoreboardTranslations.SLOTS.inverse().get(minecraft.getSerializedName());
+        return DisplaySlot.NAMES.value(minecraft.getSerializedName()); // Paper
     }
 
     public static net.minecraft.world.scores.DisplaySlot fromBukkitSlot(DisplaySlot slot) {
-        if (true) return net.minecraft.world.scores.DisplaySlot.CODEC.byName(slot.getId()); // Paper
-        return net.minecraft.world.scores.DisplaySlot.CODEC.byName(CraftScoreboardTranslations.SLOTS.get(slot));
+        return net.minecraft.world.scores.DisplaySlot.CODEC.byName(slot.getId()); // Paper
     }
 
     static RenderType toBukkitRender(ObjectiveCriteria.RenderType display) {
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/paper-server/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
index 2a2e37a7c6..1d9d597856 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
@@ -79,7 +79,10 @@ public class Commodore {
     private static final Map<String, String> RENAMES = Map.of(
             "org/bukkit/entity/TextDisplay$TextAligment", "org/bukkit/entity/TextDisplay$TextAlignment", // SPIGOT-7335
             "org/spigotmc/event/entity/EntityMountEvent", "org/bukkit/event/entity/EntityMountEvent",
-            "org/spigotmc/event/entity/EntityDismountEvent", "org/bukkit/event/entity/EntityDismountEvent"
+            "org/spigotmc/event/entity/EntityDismountEvent", "org/bukkit/event/entity/EntityDismountEvent",
+            "org/bukkit/block/data/type/Crafter$Orientation", "org/bukkit/block/Orientation",
+            "org/bukkit/block/data/type/Jigsaw$Orientation", "org/bukkit/block/Orientation",
+            "org/bukkit/block/data/type/MossyCarpet$Height", "org/bukkit/block/data/type/Wall$Height"
     );
 
     private static final Map<String, String> CLASS_TO_INTERFACE = Map.ofEntries(
diff --git a/paper-server/src/main/resources/data/minecraft/datapacks/paper/pack.mcmeta b/paper-server/src/main/resources/data/minecraft/datapacks/paper/pack.mcmeta
index dacc63ab6e..0e2d383b51 100644
--- a/paper-server/src/main/resources/data/minecraft/datapacks/paper/pack.mcmeta
+++ b/paper-server/src/main/resources/data/minecraft/datapacks/paper/pack.mcmeta
@@ -1,6 +1,6 @@
 {
     "pack": {
         "description": "Built-in Paper Datapack",
-        "pack_format": 61
+        "pack_format": ${version}
     }
 }
diff --git a/paper-server/src/test/java/io/papermc/paper/entity/EntitySetItemSlotSilentOverrideTest.java b/paper-server/src/test/java/io/papermc/paper/entity/EntitySetItemSlotSilentOverrideTest.java
index 18e0ae8155..120263fbae 100644
--- a/paper-server/src/test/java/io/papermc/paper/entity/EntitySetItemSlotSilentOverrideTest.java
+++ b/paper-server/src/test/java/io/papermc/paper/entity/EntitySetItemSlotSilentOverrideTest.java
@@ -9,6 +9,7 @@ import io.github.classgraph.ScanResult;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Stream;
+import net.minecraft.world.entity.LivingEntity;
 import org.bukkit.support.environment.Normal;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -26,7 +27,7 @@ public class EntitySetItemSlotSilentOverrideTest {
             .whitelistPackages("net.minecraft")
             .scan()
         ) {
-            for (final ClassInfo subclass : scanResult.getSubclasses("net.minecraft.world.entity.LivingEntity")) {
+            for (final ClassInfo subclass : scanResult.getSubclasses(LivingEntity.class.getName())) {
                 final MethodInfoList setItemSlot = subclass.getDeclaredMethodInfo("setItemSlot");
                 if (!setItemSlot.isEmpty()) {
                     classInfo.add(subclass);
diff --git a/paper-server/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java b/paper-server/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java
deleted file mode 100644
index 345c96bfb6..0000000000
--- a/paper-server/src/test/java/io/papermc/paper/scoreboard/DisplaySlotTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package io.papermc.paper.scoreboard;
-
-import org.bukkit.craftbukkit.scoreboard.CraftScoreboardTranslations;
-import org.bukkit.scoreboard.DisplaySlot;
-import org.bukkit.support.environment.Normal;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-@Normal
-public class DisplaySlotTest {
-
-    @Test
-    public void testBukkitToMinecraftDisplaySlots() {
-        for (DisplaySlot bukkitSlot : DisplaySlot.values()) {
-            assertNotNull(CraftScoreboardTranslations.fromBukkitSlot(bukkitSlot));
-        }
-    }
-
-    @Test
-    public void testMinecraftToBukkitDisplaySlots() {
-        for (net.minecraft.world.scores.DisplaySlot nmsSlot : net.minecraft.world.scores.DisplaySlot.values()) {
-            assertNotNull(CraftScoreboardTranslations.toBukkitSlot(nmsSlot));
-        }
-    }
-}
diff --git a/paper-server/src/test/java/io/papermc/paper/world/block/BlockPlayerDestroyOverrideTest.java b/paper-server/src/test/java/io/papermc/paper/world/block/BlockPlayerDestroyOverrideTest.java
index 22145bf698..750488cb2f 100644
--- a/paper-server/src/test/java/io/papermc/paper/world/block/BlockPlayerDestroyOverrideTest.java
+++ b/paper-server/src/test/java/io/papermc/paper/world/block/BlockPlayerDestroyOverrideTest.java
@@ -9,6 +9,7 @@ import io.github.classgraph.ScanResult;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Stream;
+import net.minecraft.world.level.block.Block;
 import org.bukkit.support.environment.Normal;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -26,7 +27,7 @@ public class BlockPlayerDestroyOverrideTest {
             .whitelistPackages("net.minecraft")
             .scan()
         ) {
-            for (final ClassInfo subclass : scanResult.getSubclasses("net.minecraft.world.level.block.Block")) {
+            for (final ClassInfo subclass : scanResult.getSubclasses(Block.class.getName())) {
                 final MethodInfoList playerDestroy = subclass.getDeclaredMethodInfo("playerDestroy");
                 if (!playerDestroy.isEmpty()) {
                     classInfo.add(subclass);
diff --git a/paper-server/src/test/java/org/bukkit/ArtTest.java b/paper-server/src/test/java/org/bukkit/ArtTest.java
deleted file mode 100644
index 5e922e6805..0000000000
--- a/paper-server/src/test/java/org/bukkit/ArtTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.bukkit;
-
-import static org.junit.jupiter.api.Assertions.*;
-import java.util.stream.Stream;
-import org.bukkit.support.environment.VanillaFeature;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-
-@VanillaFeature
-public class ArtTest {
-
-    public static Stream<Arguments> widthData() {
-        return Stream.of(Arguments.of(Art.KEBAB, 1),
-                         Arguments.of(Art.WANDERER, 1),
-                         Arguments.of(Art.POOL, 2),
-                         Arguments.of(Art.MATCH, 2),
-                         Arguments.of(Art.BOUQUET, 3),
-                         Arguments.of(Art.BACKYARD, 3),
-                         Arguments.of(Art.FIGHTERS, 4),
-                         Arguments.of(Art.SKELETON, 4),
-                         Arguments.of(Art.POINTER, 4));
-    }
-
-    public static Stream<Arguments> heightData() {
-        return Stream.of(Arguments.of(Art.KEBAB, 1),
-                         Arguments.of(Art.WANDERER, 2),
-                         Arguments.of(Art.POOL, 1),
-                         Arguments.of(Art.MATCH, 2),
-                         Arguments.of(Art.BOUQUET, 3),
-                         Arguments.of(Art.BACKYARD, 4),
-                         Arguments.of(Art.FIGHTERS, 2),
-                         Arguments.of(Art.SKELETON, 3),
-                         Arguments.of(Art.POINTER, 4));
-    }
-
-    @ParameterizedTest
-    @MethodSource("widthData")
-    public void testWidth(Art art, int expected) {
-        assertEquals(expected, art.getBlockWidth(), """
-                Art '%s' does not have the correct width.
-                This can be caused by either a change in the Implementation.
-                Or the width for this specific art was changed in which case the test needs to be updated.
-                """.formatted(art.getKey()));
-    }
-
-    @ParameterizedTest
-    @MethodSource("heightData")
-    public void testHeight(Art art, int expected) {
-        assertEquals(expected, art.getBlockHeight(), """
-                Art '%s' does not have the correct height.
-                This can be caused by either a change in the Implementation.
-                Or the height for this specific art was changed in which case the test needs to be updated.
-                """.formatted(art.getKey()));
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/BiomeTest.java b/paper-server/src/test/java/org/bukkit/BiomeTest.java
deleted file mode 100644
index f17d553f51..0000000000
--- a/paper-server/src/test/java/org/bukkit/BiomeTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.bukkit;
-
-import static org.junit.jupiter.api.Assertions.*;
-import net.minecraft.core.registries.Registries;
-import org.bukkit.block.Biome;
-import org.bukkit.craftbukkit.CraftRegistry;
-import org.bukkit.craftbukkit.block.CraftBiome;
-import org.bukkit.support.environment.AllFeatures;
-import org.junit.jupiter.api.Test;
-
-@AllFeatures
-public class BiomeTest {
-
-    @Test
-    public void testBukkitToMinecraft() {
-        for (Biome biome : Biome.values()) {
-            if (biome == Biome.CUSTOM) {
-                continue;
-            }
-
-            assertNotNull(CraftBiome.bukkitToMinecraftHolder(biome), "No NMS mapping for " + biome);
-        }
-    }
-
-    @Test
-    public void testMinecraftToBukkit() {
-        for (net.minecraft.world.level.biome.Biome biomeBase : CraftRegistry.getMinecraftRegistry(Registries.BIOME)) {
-            Biome biome = CraftBiome.minecraftToBukkit(biomeBase);
-            assertTrue(biome != null && biome != Biome.CUSTOM, "No Bukkit mapping for " + biomeBase);
-        }
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/EffectTest.java b/paper-server/src/test/java/org/bukkit/EffectTest.java
index 3129212415..5eaa832abb 100644
--- a/paper-server/src/test/java/org/bukkit/EffectTest.java
+++ b/paper-server/src/test/java/org/bukkit/EffectTest.java
@@ -12,9 +12,7 @@ import java.util.Set;
 import net.minecraft.world.level.block.LevelEvent;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 public class EffectTest {
diff --git a/paper-server/src/test/java/org/bukkit/EnchantmentTest.java b/paper-server/src/test/java/org/bukkit/EnchantmentTest.java
deleted file mode 100644
index 1b22f02b04..0000000000
--- a/paper-server/src/test/java/org/bukkit/EnchantmentTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.bukkit;
-
-import static org.junit.jupiter.api.Assertions.*;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.resources.ResourceLocation;
-import org.bukkit.craftbukkit.CraftRegistry;
-import org.bukkit.craftbukkit.util.CraftNamespacedKey;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.support.environment.AllFeatures;
-import org.junit.jupiter.api.Test;
-
-@AllFeatures
-public class EnchantmentTest {
-
-    @Test
-    public void verifyMapping() {
-        for (ResourceLocation key : CraftRegistry.getMinecraftRegistry(Registries.ENCHANTMENT).keySet()) {
-            net.minecraft.world.item.enchantment.Enchantment nms = CraftRegistry.getMinecraftRegistry(Registries.ENCHANTMENT).getValue(key);
-
-            Enchantment bukkitById = Enchantment.getByKey(CraftNamespacedKey.fromMinecraft(key));
-
-            assertFalse(bukkitById.getName().startsWith("UNKNOWN"), "Unknown enchant name for " + key);
-        }
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/GameEventTest.java b/paper-server/src/test/java/org/bukkit/GameEventTest.java
deleted file mode 100644
index 7d2f13ff72..0000000000
--- a/paper-server/src/test/java/org/bukkit/GameEventTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.bukkit;
-
-import static org.junit.jupiter.api.Assertions.*;
-import net.minecraft.core.registries.BuiltInRegistries;
-import org.bukkit.craftbukkit.util.CraftNamespacedKey;
-import org.bukkit.support.environment.AllFeatures;
-import org.junit.jupiter.api.Test;
-
-@AllFeatures
-public class GameEventTest {
-
-    @Test
-    public void toBukkit() {
-        for (net.minecraft.world.level.gameevent.GameEvent nms : BuiltInRegistries.GAME_EVENT) {
-            GameEvent bukkit = GameEvent.getByKey(CraftNamespacedKey.fromMinecraft(BuiltInRegistries.GAME_EVENT.getKey(nms)));
-
-            assertNotNull(bukkit, "Bukkit should not be null " + nms);
-        }
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/MaterialTest.java b/paper-server/src/test/java/org/bukkit/MaterialTest.java
index d4bfec42fa..e0efd8636c 100644
--- a/paper-server/src/test/java/org/bukkit/MaterialTest.java
+++ b/paper-server/src/test/java/org/bukkit/MaterialTest.java
@@ -4,14 +4,9 @@ import static org.bukkit.support.MatcherAssert.*;
 import static org.hamcrest.Matchers.*;
 import static org.junit.jupiter.api.Assertions.*;
 import com.google.common.collect.Maps;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
-import java.util.stream.StreamSupport;
 import net.minecraft.core.registries.BuiltInRegistries;
 import net.minecraft.resources.ResourceLocation;
 import net.minecraft.world.item.Item;
@@ -51,28 +46,4 @@ public class MaterialTest {
 
         assertThat(materials, is(Collections.EMPTY_MAP));
     }
-
-    @Test
-    public void verifyMaterialOrder() {
-        List<Material> expectedOrder = new ArrayList<>(Material.values().length);
-
-        // Start with items in the same order as BuiltInRegistries.ITEM
-        StreamSupport.stream(BuiltInRegistries.ITEM.spliterator(), false)
-                .map(CraftMagicNumbers::getMaterial)
-                .forEach(expectedOrder::add);
-
-        // Then non-item blocks in the same order as BuiltInRegistries.BLOCK
-        StreamSupport.stream(BuiltInRegistries.BLOCK.spliterator(), false)
-                .map(CraftMagicNumbers::getMaterial)
-                .filter(block -> !block.isItem())
-                .forEach(expectedOrder::add);
-
-        // Then legacy materials in order of ID
-        Arrays.stream(Material.values())
-                .filter(Material::isLegacy)
-                .sorted(Comparator.comparingInt(Material::getId))
-                .forEach(expectedOrder::add);
-
-        assertArrayEquals(expectedOrder.toArray(), Material.values());
-    }
 }
diff --git a/paper-server/src/test/java/org/bukkit/PerMaterialTest.java b/paper-server/src/test/java/org/bukkit/PerMaterialTest.java
index 6961730365..3bd7900e31 100644
--- a/paper-server/src/test/java/org/bukkit/PerMaterialTest.java
+++ b/paper-server/src/test/java/org/bukkit/PerMaterialTest.java
@@ -3,115 +3,23 @@ package org.bukkit;
 import static org.bukkit.support.MatcherAssert.*;
 import static org.hamcrest.Matchers.*;
 import static org.junit.jupiter.api.Assertions.*;
-import java.util.Map;
-import net.minecraft.core.BlockPos;
+
 import net.minecraft.core.component.DataComponents;
-import net.minecraft.world.InteractionHand;
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.item.Item;
-import net.minecraft.world.item.equipment.Equippable;
-import net.minecraft.world.level.EmptyBlockGetter;
-import net.minecraft.world.level.block.Block;
-import net.minecraft.world.level.block.Blocks;
-import net.minecraft.world.level.block.Fallable;
-import net.minecraft.world.level.block.FireBlock;
-import net.minecraft.world.level.block.state.BlockBehaviour;
-import net.minecraft.world.level.block.state.BlockState;
-import net.minecraft.world.phys.BlockHitResult;
 import org.bukkit.block.data.BlockData;
-import org.bukkit.craftbukkit.CraftEquipmentSlot;
-import org.bukkit.craftbukkit.inventory.CraftItemStack;
 import org.bukkit.craftbukkit.util.CraftMagicNumbers;
 import org.bukkit.enchantments.EnchantmentTarget;
-import org.bukkit.inventory.EquipmentSlot;
-import org.bukkit.inventory.ItemStack;
 import org.bukkit.material.MaterialData;
-import org.bukkit.support.LegacyHelper;
 import org.bukkit.support.environment.AllFeatures;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
 
 @AllFeatures
 public class PerMaterialTest {
-    private static Map<Block, Integer> fireValues;
-
-    @BeforeAll
-    public static void getFireValues() {
-        PerMaterialTest.fireValues = ((FireBlock) Blocks.FIRE).igniteOdds;
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void isBlock(Material material) {
-        if (material != Material.AIR && material != Material.CAVE_AIR && material != Material.VOID_AIR) {
-            assertThat(material.isBlock(), is(not(CraftMagicNumbers.getBlock(material) == null)));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void isSolid(Material material) {
-        if (material == Material.AIR) {
-            assertFalse(material.isSolid());
-        } else if (material.isBlock()) {
-            assertThat(material.isSolid(), is(CraftMagicNumbers.getBlock(material).defaultBlockState().blocksMotion()));
-        } else {
-            assertFalse(material.isSolid());
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void isEdible(Material material) {
-        if (material.isBlock()) {
-            assertFalse(material.isEdible());
-        } else {
-            assertThat(material.isEdible(), is(CraftMagicNumbers.getItem(material).components().has(DataComponents.FOOD)));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void isRecord(Material material) {
-        if (material.isBlock()) {
-            assertFalse(material.isRecord());
-        } else {
-            assertThat(material.isRecord(), is(CraftMagicNumbers.getItem(material).components().has(DataComponents.JUKEBOX_PLAYABLE)));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void maxDurability(Material material) {
-        if (LegacyHelper.getInvalidatedMaterials().contains(material)) return;
-
-        if (material == Material.AIR) {
-            assertThat((int) material.getMaxDurability(), is(0));
-        } else if (material.isBlock()) {
-            Item item = CraftMagicNumbers.getItem(material);
-            assertThat((int) material.getMaxDurability(), is(item.components().getOrDefault(DataComponents.MAX_DAMAGE, 0)));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void maxStackSize(Material material) {
-        if (LegacyHelper.getInvalidatedMaterials().contains(material)) return;
-
-        final ItemStack bukkit = new ItemStack(material);
-        final CraftItemStack craft = CraftItemStack.asCraftCopy(bukkit);
-
-        // Paper - remove air exception
-            int max = CraftMagicNumbers.getItem(material).components().getOrDefault(DataComponents.MAX_STACK_SIZE, 64);
-            assertThat(material.getMaxStackSize(), is(max));
-            assertThat(bukkit.getMaxStackSize(), is(max));
-            assertThat(craft.getMaxStackSize(), is(max));
-        // Paper - remove air exception
-    }
 
     @ParameterizedTest
     @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
+    @Disabled
     public void isTransparent(Material material) {
         if (material == Material.AIR) {
             assertTrue(material.isTransparent());
@@ -122,47 +30,6 @@ public class PerMaterialTest {
         }
     }
 
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void isFlammable(Material material) {
-        if (material != Material.AIR && material.isBlock()) {
-            assertThat(material.isFlammable(), is(CraftMagicNumbers.getBlock(material).defaultBlockState().ignitedByLava()));
-        } else {
-            assertFalse(material.isFlammable());
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void isBurnable(Material material) {
-        if (material.isBlock()) {
-            Block block = CraftMagicNumbers.getBlock(material);
-            assertThat(material.isBurnable(), is(PerMaterialTest.fireValues.containsKey(block) && PerMaterialTest.fireValues.get(block) > 0));
-        } else {
-            assertFalse(material.isBurnable());
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void isOccluding(Material material) {
-        if (material.isBlock()) {
-            assertThat(material.isOccluding(), is(CraftMagicNumbers.getBlock(material).defaultBlockState().isRedstoneConductor(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)));
-        } else {
-            assertFalse(material.isOccluding());
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void hasGravity(Material material) {
-        if (material.isBlock()) {
-            assertThat(material.hasGravity(), is(CraftMagicNumbers.getBlock(material) instanceof Fallable));
-        } else {
-            assertFalse(material.hasGravity());
-        }
-    }
-
     @ParameterizedTest
     @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
     public void usesDurability(Material material) {
@@ -173,104 +40,6 @@ public class PerMaterialTest {
         }
     }
 
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testDurability(Material material) {
-        if (!material.isBlock()) {
-            assertThat(material.getMaxDurability(), is((short) (int) CraftMagicNumbers.getItem(material).components().getOrDefault(DataComponents.MAX_DAMAGE, 0)));
-        } else {
-            assertThat(material.getMaxDurability(), is((short) 0));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testBlock(Material material) {
-        if (material == Material.AIR) {
-            assertTrue(material.isBlock());
-        } else {
-            assertThat(material.isBlock(), is(equalTo(CraftMagicNumbers.getBlock(material) != null)));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testAir(Material material) {
-        if (material.isBlock()) {
-            assertThat(material.isAir(), is(equalTo(CraftMagicNumbers.getBlock(material).defaultBlockState().isAir())));
-        } else {
-            assertThat(material.isAir(), is(equalTo(false)));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testItem(Material material) {
-        if (material == Material.AIR) {
-            assertTrue(material.isItem());
-        } else {
-            assertThat(material.isItem(), is(equalTo(CraftMagicNumbers.getItem(material) != null)));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testInteractable(Material material) throws ReflectiveOperationException {
-        if (material.isBlock()) {
-            Class<?> clazz = CraftMagicNumbers.getBlock(material).getClass();
-
-            boolean hasMethod = this.hasMethod(clazz, "useWithoutItem", BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, Player.class, BlockHitResult.class)
-                    || this.hasMethod(clazz, "useItemOn", net.minecraft.world.item.ItemStack.class, BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, Player.class, InteractionHand.class, BlockHitResult.class);
-
-            if (!hasMethod && clazz.getSuperclass() != BlockBehaviour.class) {
-                clazz = clazz.getSuperclass();
-
-                hasMethod = this.hasMethod(clazz, "useWithoutItem", BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, Player.class, BlockHitResult.class)
-                        || this.hasMethod(clazz, "useItemOn", net.minecraft.world.item.ItemStack.class, BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, Player.class, InteractionHand.class, BlockHitResult.class);
-            }
-
-            assertThat(material.isInteractable(),
-                    is(hasMethod));
-        } else {
-            assertFalse(material.isInteractable());
-        }
-    }
-
-    private boolean hasMethod(Class<?> clazz, String methodName, Class<?>... params) {
-        boolean hasMethod;
-        try {
-            hasMethod = clazz.getDeclaredMethod(methodName, params) != null;
-        } catch (NoSuchMethodException ex) {
-            hasMethod = false;
-        }
-
-        return hasMethod;
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testBlockHardness(Material material) {
-        if (material.isBlock()) {
-            assertThat(material.getHardness(), is(CraftMagicNumbers.getBlock(material).defaultBlockState().destroySpeed));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testBlastResistance(Material material) {
-        if (material.isBlock()) {
-            assertThat(material.getBlastResistance(), is(CraftMagicNumbers.getBlock(material).getExplosionResistance()));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testSlipperiness(Material material) {
-        if (material.isBlock()) {
-            assertThat(material.getSlipperiness(), is(CraftMagicNumbers.getBlock(material).getFriction()));
-        }
-    }
-
     @ParameterizedTest
     @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
     public void testBlockDataCreation(Material material) {
@@ -279,27 +48,6 @@ public class PerMaterialTest {
         }
     }
 
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testCraftingRemainingItem(Material material) {
-        if (material.isItem()) {
-            net.minecraft.world.item.ItemStack expectedItem = CraftMagicNumbers.getItem(material).getCraftingRemainder();
-            Material expected = expectedItem.isEmpty() ? null : CraftMagicNumbers.getMaterial(expectedItem.getItem());
-
-            assertThat(material.getCraftingRemainingItem(), is(expected));
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testEquipmentSlot(Material material) {
-        if (material.isItem()) {
-            Equippable equipable = CraftItemStack.asNMSCopy(new ItemStack(material)).get(DataComponents.EQUIPPABLE);
-            EquipmentSlot expected = CraftEquipmentSlot.getSlot(equipable != null ? equipable.slot() : net.minecraft.world.entity.EquipmentSlot.MAINHAND);
-            assertThat(material.getEquipmentSlot(), is(expected));
-        }
-    }
-
     @ParameterizedTest
     @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
     public void testBlockDataClass(Material material) {
@@ -311,12 +59,4 @@ public class PerMaterialTest {
             }
         }
     }
-
-    @ParameterizedTest
-    @EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
-    public void testCreativeCategory(Material material) {
-        if (material.isItem()) {
-            material.getCreativeCategory();
-        }
-    }
 }
diff --git a/paper-server/src/test/java/org/bukkit/SoundTest.java b/paper-server/src/test/java/org/bukkit/SoundTest.java
index 607e7da136..ef268c0436 100644
--- a/paper-server/src/test/java/org/bukkit/SoundTest.java
+++ b/paper-server/src/test/java/org/bukkit/SoundTest.java
@@ -1,32 +1,13 @@
 package org.bukkit;
 
-import static org.bukkit.support.MatcherAssert.*;
-import static org.hamcrest.Matchers.*;
 import static org.junit.jupiter.api.Assertions.*;
-import java.util.Locale;
-import net.minecraft.core.registries.BuiltInRegistries;
-import net.minecraft.resources.ResourceLocation;
-import org.bukkit.craftbukkit.CraftSound;
+
 import org.bukkit.support.environment.AllFeatures;
 import org.junit.jupiter.api.Test;
 
 @AllFeatures
 public class SoundTest {
 
-    @Test
-    public void testGetSound() {
-        for (Sound sound : Sound.values()) {
-            assertThat(CraftSound.bukkitToMinecraft(sound), is(not(nullValue())), sound.name());
-        }
-    }
-
-    @Test
-    public void testReverse() {
-        for (ResourceLocation effect : BuiltInRegistries.SOUND_EVENT.keySet()) {
-            assertNotNull(Sound.valueOf(effect.getPath().replace('.', '_').toUpperCase(Locale.ROOT)), effect + "");
-        }
-    }
-
     @Test
     public void testCategory() {
         for (SoundCategory category : SoundCategory.values()) {
diff --git a/paper-server/src/test/java/org/bukkit/StatisticsAndAchievementsTest.java b/paper-server/src/test/java/org/bukkit/StatisticsAndAchievementsTest.java
index 270befba49..34548dcc73 100644
--- a/paper-server/src/test/java/org/bukkit/StatisticsAndAchievementsTest.java
+++ b/paper-server/src/test/java/org/bukkit/StatisticsAndAchievementsTest.java
@@ -15,8 +15,7 @@ import org.junit.jupiter.api.Test;
 public class StatisticsAndAchievementsTest {
 
     @Test
-    @SuppressWarnings("unchecked")
-    public void verifyEntityMapping() throws Throwable {
+    public void verifyEntityMapping() {
         for (Statistic statistic : Statistic.values()) {
             if (statistic.getType() == Statistic.Type.ENTITY) {
                 for (EntityType entity : EntityType.values()) {
@@ -30,7 +29,7 @@ public class StatisticsAndAchievementsTest {
 
     @Test
     @SuppressWarnings("unchecked")
-    public void verifyStatisticMapping() throws Throwable {
+    public void verifyStatisticMapping() {
         HashMultiset<Statistic> statistics = HashMultiset.create();
         for (StatType wrapper : BuiltInRegistries.STAT_TYPE) {
             for (Object child : wrapper.getRegistry()) {
diff --git a/paper-server/src/test/java/org/bukkit/block/banner/PatternTypeTest.java b/paper-server/src/test/java/org/bukkit/block/banner/PatternTypeTest.java
deleted file mode 100644
index 66db0cf71b..0000000000
--- a/paper-server/src/test/java/org/bukkit/block/banner/PatternTypeTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.bukkit.block.banner;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-import net.minecraft.core.registries.Registries;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.world.level.block.entity.BannerPattern;
-import org.bukkit.NamespacedKey;
-import org.bukkit.Registry;
-import org.bukkit.craftbukkit.util.CraftNamespacedKey;
-import org.bukkit.support.environment.AllFeatures;
-import org.junit.jupiter.api.Test;
-
-@AllFeatures
-public class PatternTypeTest {
-
-    @Test
-    public void testToBukkit() {
-        for (BannerPattern nms : MinecraftServer.getDefaultRegistryAccess().lookupOrThrow(Registries.BANNER_PATTERN)) {
-            PatternType bukkit = Registry.BANNER_PATTERN.get(CraftNamespacedKey.fromMinecraft(nms.assetId()));
-
-            assertNotNull(bukkit, "No Bukkit banner pattern for " + nms + " " + nms);
-        }
-    }
-
-    @Test
-    public void testToNMS() {
-        net.minecraft.core.Registry<BannerPattern> registry = MinecraftServer.getDefaultRegistryAccess().lookupOrThrow(Registries.BANNER_PATTERN);
-        for (PatternType bukkit : PatternType.values()) {
-            BannerPattern found = null;
-            for (BannerPattern nms : registry) {
-                NamespacedKey nmsKey = CraftNamespacedKey.fromMinecraft(registry.getKey(nms));
-                if (bukkit.getKey().equals(nmsKey)) {
-                    found = nms;
-                    break;
-                }
-            }
-
-            assertNotNull(found, "No NMS banner pattern for " + bukkit + " " + bukkit.getKey());
-        }
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/craftbukkit/inventory/ItemTypeTest.java b/paper-server/src/test/java/org/bukkit/craftbukkit/inventory/ItemTypeTest.java
index ccf5fff9aa..f4932f1755 100644
--- a/paper-server/src/test/java/org/bukkit/craftbukkit/inventory/ItemTypeTest.java
+++ b/paper-server/src/test/java/org/bukkit/craftbukkit/inventory/ItemTypeTest.java
@@ -56,7 +56,7 @@ public class ItemTypeTest {
     @Test
     public void testStaticItemTypeUsageBuilder() {
         final ItemStack armor = ItemType.DIAMOND_LEGGINGS.createItemStack(a ->
-            a.setTrim(new ArmorTrim(TrimMaterial.EMERALD, TrimPattern.COAST))
+            ((ArmorMeta) a).setTrim(new ArmorTrim(TrimMaterial.EMERALD, TrimPattern.COAST))
         );
 
         final ItemMeta itemMeta = armor.getItemMeta();
diff --git a/paper-server/src/test/java/org/bukkit/entity/EntityTypesTest.java b/paper-server/src/test/java/org/bukkit/entity/EntityTypesTest.java
index d513d926dd..a4e2c42e9a 100644
--- a/paper-server/src/test/java/org/bukkit/entity/EntityTypesTest.java
+++ b/paper-server/src/test/java/org/bukkit/entity/EntityTypesTest.java
@@ -1,33 +1,13 @@
 package org.bukkit.entity;
 
 import static org.junit.jupiter.api.Assertions.*;
-import java.util.Arrays;
-import java.util.Set;
-import java.util.stream.Collectors;
-import net.minecraft.core.registries.BuiltInRegistries;
-import net.minecraft.resources.ResourceLocation;
+
 import org.bukkit.support.environment.AllFeatures;
 import org.junit.jupiter.api.Test;
 
 @AllFeatures
 public class EntityTypesTest {
 
-    @Test
-    public void testMaps() {
-        Set<EntityType> allBukkit = Arrays.stream(EntityType.values()).filter((b) -> b.getName() != null).collect(Collectors.toSet());
-
-        for (net.minecraft.world.entity.EntityType<?> nms : BuiltInRegistries.ENTITY_TYPE) { // Paper - remap fix
-            ResourceLocation key = net.minecraft.world.entity.EntityType.getKey(nms); // Paper - remap fix
-
-            org.bukkit.entity.EntityType bukkit = org.bukkit.entity.EntityType.fromName(key.getPath());
-            assertNotNull(bukkit, "Missing nms->bukkit " + key);
-
-            assertTrue(allBukkit.remove(bukkit), "Duplicate entity nms->" + bukkit);
-        }
-
-        assertTrue(allBukkit.isEmpty(), "Unmapped bukkit entities " + allBukkit);
-    }
-
     @Test
     public void testTranslationKey() {
         for (org.bukkit.entity.EntityType entityType : org.bukkit.entity.EntityType.values()) {
diff --git a/paper-server/src/test/java/org/bukkit/entity/PandaGeneTest.java b/paper-server/src/test/java/org/bukkit/entity/PandaGeneTest.java
deleted file mode 100644
index e8520f541f..0000000000
--- a/paper-server/src/test/java/org/bukkit/entity/PandaGeneTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.bukkit.entity;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-import org.bukkit.craftbukkit.entity.CraftPanda;
-import org.bukkit.support.environment.Normal;
-import org.junit.jupiter.api.Test;
-
-@Normal
-public class PandaGeneTest {
-
-    @Test
-    public void testBukkit() {
-        for (Panda.Gene gene : Panda.Gene.values()) { // Paper - remap fix
-            net.minecraft.world.entity.animal.Panda.Gene nms = CraftPanda.toNms(gene); // Paper - remap fix
-
-            assertNotNull(nms, "NMS gene null for " + gene);
-            assertEquals(gene.isRecessive(), nms.isRecessive(), "Recessive status did not match " + gene);
-            assertEquals(gene, CraftPanda.fromNms(nms), "Gene did not convert back " + gene);
-        }
-    }
-
-    @Test
-    public void testNMS() {
-        for (net.minecraft.world.entity.animal.Panda.Gene gene : net.minecraft.world.entity.animal.Panda.Gene.values()) { // Paper - remap fix
-            org.bukkit.entity.Panda.Gene bukkit = CraftPanda.fromNms(gene);
-
-            assertNotNull(bukkit, "Bukkit gene null for " + gene);
-            assertEquals(gene.isRecessive(), bukkit.isRecessive(), "Recessive status did not match " + gene);
-            assertEquals(gene, CraftPanda.toNms(bukkit), "Gene did not convert back " + gene);
-        }
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/entity/memory/CraftMemoryKeyTest.java b/paper-server/src/test/java/org/bukkit/entity/memory/CraftMemoryKeyTest.java
deleted file mode 100644
index b54282894a..0000000000
--- a/paper-server/src/test/java/org/bukkit/entity/memory/CraftMemoryKeyTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.bukkit.entity.memory;
-
-import static org.junit.jupiter.api.Assertions.*;
-import net.minecraft.core.GlobalPos;
-import net.minecraft.core.registries.BuiltInRegistries;
-import net.minecraft.world.entity.ai.memory.MemoryModuleType;
-import org.bukkit.Location;
-import org.bukkit.craftbukkit.entity.memory.CraftMemoryKey;
-import org.bukkit.support.environment.AllFeatures;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-
-@AllFeatures
-public class CraftMemoryKeyTest {
-
-    @Test
-    public void shouldConvertBukkitHomeKeyToNMSRepresentation() {
-        MemoryModuleType<GlobalPos> nmsHomeKey = CraftMemoryKey.bukkitToMinecraft(MemoryKey.HOME);
-        assertEquals(MemoryModuleType.HOME, nmsHomeKey, "MemoryModuleType should be HOME");
-    }
-
-    @Test
-    public void shouldConvertBukkitJobSiteKeyToNMSRepresentation() {
-        MemoryModuleType<GlobalPos> nmsHomeKey = CraftMemoryKey.bukkitToMinecraft(MemoryKey.JOB_SITE);
-        assertEquals(MemoryModuleType.JOB_SITE, nmsHomeKey, "MemoryModuleType should be JOB_SITE");
-    }
-
-    @Test
-    public void shouldConvertBukkitMeetingPointKeyToNMSRepresentation() {
-        MemoryModuleType<GlobalPos> nmsHomeKey = CraftMemoryKey.bukkitToMinecraft(MemoryKey.MEETING_POINT);
-        assertEquals(MemoryModuleType.MEETING_POINT, nmsHomeKey, "MemoryModuleType should be MEETING_POINT");
-    }
-
-    @Test
-    public void shouldConvertNMSHomeKeyToBukkitRepresentation() {
-        MemoryKey<Location> bukkitHomeKey = CraftMemoryKey.minecraftToBukkit(MemoryModuleType.HOME);
-        assertEquals(MemoryKey.HOME, bukkitHomeKey, "MemoryModuleType should be HOME");
-    }
-
-    @Test
-    public void shouldConvertNMSJobSiteKeyToBukkitRepresentation() {
-        MemoryKey<Location> bukkitJobSiteKey = CraftMemoryKey.minecraftToBukkit(MemoryModuleType.JOB_SITE);
-        assertEquals(MemoryKey.JOB_SITE, bukkitJobSiteKey, "MemoryKey should be JOB_SITE");
-    }
-
-    @Test
-    public void shouldConvertNMSMeetingPointKeyToBukkitRepresentation() {
-        MemoryKey<Location> bukkitHomeKey = CraftMemoryKey.minecraftToBukkit(MemoryModuleType.MEETING_POINT);
-        assertEquals(MemoryKey.MEETING_POINT, bukkitHomeKey, "MemoryKey should be MEETING_POINT");
-    }
-
-    @Test
-    public void shouldReturnNullWhenBukkitRepresentationOfKeyisNotAvailable() {
-        MemoryKey bukkitNoKey = CraftMemoryKey.minecraftToBukkit(MemoryModuleType.NEAREST_LIVING_ENTITIES);
-        assertNull(bukkitNoKey, "MemoryModuleType should be null");
-    }
-
-    @Test
-    public void shouldReturnNullWhenBukkitRepresentationOfKeyisNotAvailableAndSerializerIsNotPresent() {
-        for (MemoryModuleType<?> memoryModuleType : BuiltInRegistries.MEMORY_MODULE_TYPE) {
-            if (!memoryModuleType.getCodec().isPresent()) {
-                MemoryKey bukkitNoKey = CraftMemoryKey.minecraftToBukkit(memoryModuleType);
-                assertNull(bukkitNoKey, "MemoryModuleType should be null");
-            }
-        }
-    }
-
-    @Test
-    @Disabled("Unit type not yet implemented")
-    public void shouldReturnAnInstanceOfMemoryKeyWhenBukkitRepresentationOfKeyisAvailableAndSerializerIsPresent() {
-        for (MemoryModuleType<?> memoryModuleType : BuiltInRegistries.MEMORY_MODULE_TYPE) {
-            if (memoryModuleType.getCodec().isPresent()) {
-                MemoryKey bukkitNoKey = CraftMemoryKey.minecraftToBukkit(memoryModuleType);
-                assertNotNull(bukkitNoKey, "MemoryModuleType should not be null " + BuiltInRegistries.MEMORY_MODULE_TYPE.getKey(memoryModuleType));
-            }
-        }
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/generator/structure/StructureTest.java b/paper-server/src/test/java/org/bukkit/generator/structure/StructureTest.java
deleted file mode 100644
index cbfc533ed8..0000000000
--- a/paper-server/src/test/java/org/bukkit/generator/structure/StructureTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.bukkit.generator.structure;
-
-import static org.junit.jupiter.api.Assertions.*;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.Locale;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.resources.ResourceLocation;
-import org.bukkit.NamespacedKey;
-import org.bukkit.Registry;
-import org.bukkit.craftbukkit.CraftRegistry;
-import org.bukkit.craftbukkit.util.CraftNamespacedKey;
-import org.bukkit.support.environment.AllFeatures;
-import org.junit.jupiter.api.Test;
-
-@AllFeatures
-public class StructureTest {
-
-    @Test
-    public void testBukkitToMinecraftFieldName() {
-        for (Field field : Structure.class.getFields()) {
-            if (field.getType() != Structure.class) {
-                continue;
-            }
-            if (!Modifier.isStatic(field.getModifiers())) {
-                continue;
-            }
-
-            String name = field.getName();
-            assertNotNull(Registry.STRUCTURE.get(NamespacedKey.fromString(name.toLowerCase(Locale.ROOT))), "No structure for field name " + name);
-        }
-    }
-
-    @Test
-    public void testMinecraftToBukkitFieldName() {
-        net.minecraft.core.Registry<net.minecraft.world.level.levelgen.structure.Structure> structureBuiltInRegistries = CraftRegistry.getMinecraftRegistry(Registries.STRUCTURE);
-        for (net.minecraft.world.level.levelgen.structure.Structure structure : structureBuiltInRegistries) {
-            ResourceLocation minecraftKey = structureBuiltInRegistries.getKey(structure);
-
-            try {
-                Structure bukkit = (Structure) Structure.class.getField(minecraftKey.getPath().toUpperCase(Locale.ROOT)).get(null);
-
-                assertEquals(minecraftKey, CraftNamespacedKey.toMinecraft(bukkit.getKey()), "Keys are not the same for " + minecraftKey);
-            } catch (NoSuchFieldException e) {
-                fail("No Bukkit default structure for " + minecraftKey);
-            } catch (IllegalAccessException e) {
-                fail("Bukkit field is not access able for " + minecraftKey);
-            } catch (ClassCastException e) {
-                fail("Bukkit field is not of type structure for" + minecraftKey);
-            }
-        }
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/generator/structure/StructureTypeTest.java b/paper-server/src/test/java/org/bukkit/generator/structure/StructureTypeTest.java
deleted file mode 100644
index 78fa3f3166..0000000000
--- a/paper-server/src/test/java/org/bukkit/generator/structure/StructureTypeTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.bukkit.generator.structure;
-
-import static org.junit.jupiter.api.Assertions.*;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.Locale;
-import net.minecraft.core.registries.BuiltInRegistries;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.resources.ResourceLocation;
-import org.bukkit.NamespacedKey;
-import org.bukkit.Registry;
-import org.bukkit.craftbukkit.CraftRegistry;
-import org.bukkit.craftbukkit.util.CraftNamespacedKey;
-import org.bukkit.support.environment.AllFeatures;
-import org.junit.jupiter.api.Test;
-
-@AllFeatures
-public class StructureTypeTest {
-
-    @Test
-    public void testBukkitToMinecraftFieldName() {
-        for (Field field : StructureType.class.getFields()) {
-            if (field.getType() != StructureType.class) {
-                continue;
-            }
-            if (!Modifier.isStatic(field.getModifiers())) {
-                continue;
-            }
-
-            String name = field.getName();
-            assertNotNull(Registry.STRUCTURE_TYPE.get(NamespacedKey.fromString(name.toLowerCase(Locale.ROOT))), "No enchantment for field name " + name);
-        }
-    }
-
-    @Test
-    public void testMinecraftToBukkitFieldName() {
-        for (net.minecraft.world.level.levelgen.structure.StructureType<?> structureType : CraftRegistry.getMinecraftRegistry(Registries.STRUCTURE_TYPE)) {
-            ResourceLocation minecraftKey = BuiltInRegistries.STRUCTURE_TYPE.getKey(structureType);
-
-            try {
-                StructureType bukkit = (StructureType) StructureType.class.getField(minecraftKey.getPath().toUpperCase(Locale.ROOT)).get(null);
-
-                assertEquals(minecraftKey, CraftNamespacedKey.toMinecraft(bukkit.getKey()), "Keys are not the same for " + minecraftKey);
-            } catch (NoSuchFieldException e) {
-                fail("No Bukkit default enchantment for " + minecraftKey);
-            } catch (IllegalAccessException e) {
-                fail("Bukkit field is not access able for " + minecraftKey);
-            } catch (ClassCastException e) {
-                fail("Bukkit field is not of type enchantment for" + minecraftKey);
-            }
-        }
-    }
-}
diff --git a/paper-server/src/test/java/org/bukkit/map/MapTest.java b/paper-server/src/test/java/org/bukkit/map/MapTest.java
index 51ee862f3e..a16dfc104b 100644
--- a/paper-server/src/test/java/org/bukkit/map/MapTest.java
+++ b/paper-server/src/test/java/org/bukkit/map/MapTest.java
@@ -3,11 +3,8 @@ package org.bukkit.map;
 import static org.junit.jupiter.api.Assertions.*;
 import java.awt.Color;
 import java.util.concurrent.ExecutionException;
-import java.util.logging.Level;
 import java.util.logging.Logger;
-import net.minecraft.world.level.material.MapColor;
 import org.bukkit.craftbukkit.map.CraftMapColorCache;
-import org.bukkit.support.environment.Normal;
 import org.bukkit.support.environment.Slow;
 import org.junit.jupiter.api.Test;
 
@@ -15,55 +12,6 @@ public class MapTest {
 
     private static final Logger logger = Logger.getLogger("MapTest");
 
-    private static final int[] modifiers = {180, 220, 255, 135};
-
-    @Test
-    @Normal
-    public void testColors() {
-        MapColor[] nmsColors = MapColor.MATERIAL_COLORS;
-        Color[] bukkitColors = MapPalette.colors;
-
-        boolean fail = false;
-        for (int i = 0; i < nmsColors.length; i++) {
-            if (nmsColors[i] == null) {
-                break;
-            }
-            int rgb = nmsColors[i].col;
-
-            int r = (rgb >> 16) & 0xFF;
-            int g = (rgb >> 8) & 0xFF;
-            int b = rgb & 0xFF;
-
-            if (i + 1 > bukkitColors.length / 4) {
-                for (int modi : MapTest.modifiers) {
-                    int mr = (r * modi) / 255;
-                    int mg = (g * modi) / 255;
-                    int mb = (b * modi) / 255;
-                    MapTest.logger.log(Level.WARNING, "Missing color (check CraftMapView#render and update md5 hash in CraftMapColorCache): c({0}, {1}, {2})", new Object[]{mr, mg, mb});
-                }
-                fail = true;
-            } else {
-                for (int j = 0; j < MapTest.modifiers.length; j++) {
-                    int modi = MapTest.modifiers[j];
-                    Color bukkit = bukkitColors[i * 4 + j];
-                    int mr = (r * modi) / 255;
-                    int mg = (g * modi) / 255;
-                    int mb = (b * modi) / 255;
-
-                    if (bukkit.getRed() != mr || bukkit.getGreen() != mg || bukkit.getBlue() != mb) {
-                        MapTest.logger.log(Level.WARNING, "Incorrect color: {6} {7} c({0}, {1}, {2}) != c({3}, {4}, {5})", new Object[]{
-                            bukkit.getRed(), bukkit.getGreen(), bukkit.getBlue(),
-                            mr, mg, mb,
-                            i, j
-                        });
-                        fail = true;
-                    }
-                }
-            }
-        }
-        assertFalse(fail);
-    }
-
     @Test
     @Slow("Test takes around 25 seconds, should be run by changes to the map color conversion")
     public void testMapColorCacheBuilding() throws ExecutionException, InterruptedException {
diff --git a/paper-server/src/test/java/org/bukkit/potion/PotionTest.java b/paper-server/src/test/java/org/bukkit/potion/PotionTest.java
index b07e88813c..0cfe19d91d 100644
--- a/paper-server/src/test/java/org/bukkit/potion/PotionTest.java
+++ b/paper-server/src/test/java/org/bukkit/potion/PotionTest.java
@@ -16,23 +16,6 @@ import org.junit.jupiter.api.Test;
 
 @AllFeatures
 public class PotionTest {
-    @Test
-    public void testEffectCompleteness() throws Throwable {
-        Map<PotionType, String> effects = new EnumMap(PotionType.class);
-        for (Potion reg : BuiltInRegistries.POTION) {
-            List<MobEffectInstance> eff = reg.getEffects();
-            if (eff.size() != 1) continue;
-            PotionEffectType type = CraftPotionEffectType.minecraftHolderToBukkit(eff.get(0).getEffect());
-            assertNotNull(type, String.valueOf(reg));
-
-            PotionType enumType = PotionType.getByEffect(type);
-            assertNotNull(enumType, type.getName());
-
-            effects.put(enumType, enumType.name());
-        }
-
-        assertEquals(PotionType.values().length - /* PotionTypes with no/shared Effects */ (5 + 22 /* There are 22 new strong / long potion types */), effects.entrySet().size());
-    }
 
     @Test
     public void testEffectType() {
@@ -42,7 +25,6 @@ public class PotionTest {
             PotionEffectType bukkit = CraftPotionEffectType.minecraftToBukkit(nms);
 
             assertNotNull(bukkit, "No Bukkit type for " + key);
-            assertFalse(bukkit.getName().contains("UNKNOWN"), "No name for " + key);
 
             PotionEffectType byName = FieldRename.getByName_PotionEffectType(bukkit.getName());
             assertEquals(bukkit, byName, "Same type not returned by name " + key);
diff --git a/paper-server/src/test/java/org/bukkit/support/extension/AllFeaturesExtension.java b/paper-server/src/test/java/org/bukkit/support/extension/AllFeaturesExtension.java
index 8fef8421e3..a17f783d0c 100644
--- a/paper-server/src/test/java/org/bukkit/support/extension/AllFeaturesExtension.java
+++ b/paper-server/src/test/java/org/bukkit/support/extension/AllFeaturesExtension.java
@@ -1,7 +1,5 @@
 package org.bukkit.support.extension;
 
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
 import java.util.HashMap;
 import java.util.Map;
 import net.minecraft.world.flag.FeatureFlags;
@@ -17,7 +15,6 @@ import org.junit.jupiter.api.extension.ExtensionContext;
 public class AllFeaturesExtension extends BaseExtension {
 
     private static final Map<Class<? extends Keyed>, Registry<?>> realRegistries = new HashMap<>();
-    private static final Map<Class<? extends Keyed>, Registry<?>> spyRegistries = new HashMap<>();
 
     public AllFeaturesExtension() {
         super("AllFeatures");
diff --git a/paper-server/src/test/java/org/bukkit/support/extension/LegacyExtension.java b/paper-server/src/test/java/org/bukkit/support/extension/LegacyExtension.java
index c9c3227c3b..ae8a16160b 100644
--- a/paper-server/src/test/java/org/bukkit/support/extension/LegacyExtension.java
+++ b/paper-server/src/test/java/org/bukkit/support/extension/LegacyExtension.java
@@ -1,13 +1,7 @@
 package org.bukkit.support.extension;
 
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-import java.util.HashMap;
-import java.util.Map;
 import net.minecraft.world.flag.FeatureFlags;
 import org.bukkit.Bukkit;
-import org.bukkit.Keyed;
-import org.bukkit.Registry;
 import org.bukkit.Server;
 import org.bukkit.craftbukkit.CraftRegistry;
 import org.bukkit.support.DummyServerHelper;
@@ -16,8 +10,6 @@ import org.junit.jupiter.api.extension.ExtensionContext;
 
 public class LegacyExtension extends BaseExtension {
 
-    private static final Map<Class<? extends Keyed>, Registry<?>> registries = new HashMap<>();
-
     public LegacyExtension() {
         super("Legacy");
     }
diff --git a/paper-server/src/test/java/org/bukkit/support/extension/SlowExtension.java b/paper-server/src/test/java/org/bukkit/support/extension/SlowExtension.java
index 87364f223f..eb0960fa11 100644
--- a/paper-server/src/test/java/org/bukkit/support/extension/SlowExtension.java
+++ b/paper-server/src/test/java/org/bukkit/support/extension/SlowExtension.java
@@ -1,13 +1,7 @@
 package org.bukkit.support.extension;
 
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-import java.util.HashMap;
-import java.util.Map;
 import net.minecraft.world.flag.FeatureFlags;
 import org.bukkit.Bukkit;
-import org.bukkit.Keyed;
-import org.bukkit.Registry;
 import org.bukkit.Server;
 import org.bukkit.craftbukkit.CraftRegistry;
 import org.bukkit.support.DummyServerHelper;
@@ -16,8 +10,6 @@ import org.junit.jupiter.api.extension.ExtensionContext;
 
 public class SlowExtension extends BaseExtension {
 
-    private static final Map<Class<? extends Keyed>, Registry<?>> registries = new HashMap<>();
-
     public SlowExtension() {
         super("Slow");
     }
diff --git a/paper-server/src/test/java/org/bukkit/support/extension/VanillaFeatureExtension.java b/paper-server/src/test/java/org/bukkit/support/extension/VanillaFeatureExtension.java
index 626c3033e3..66db95cfca 100644
--- a/paper-server/src/test/java/org/bukkit/support/extension/VanillaFeatureExtension.java
+++ b/paper-server/src/test/java/org/bukkit/support/extension/VanillaFeatureExtension.java
@@ -1,13 +1,7 @@
 package org.bukkit.support.extension;
 
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-import java.util.HashMap;
-import java.util.Map;
 import net.minecraft.world.flag.FeatureFlags;
 import org.bukkit.Bukkit;
-import org.bukkit.Keyed;
-import org.bukkit.Registry;
 import org.bukkit.Server;
 import org.bukkit.craftbukkit.CraftRegistry;
 import org.bukkit.support.DummyServerHelper;
@@ -16,8 +10,6 @@ import org.junit.jupiter.api.extension.ExtensionContext;
 
 public class VanillaFeatureExtension extends BaseExtension {
 
-    private static final Map<Class<? extends Keyed>, Registry<?>> registries = new HashMap<>();
-
     public VanillaFeatureExtension() {
         super("VanillaFeature");
     }
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 2e832ab34f..e603a336cd 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -34,14 +34,17 @@ if (!file(".git").exists()) {
 rootProject.name = "paper"
 
 for (name in listOf("paper-api", "paper-server")) {
-    val projName = name.lowercase(Locale.ENGLISH)
-    include(projName)
+    include(name)
     file(name).mkdirs()
-    findProject(":$projName")!!.projectDir = file(name)
 }
 
 optionalInclude("test-plugin")
-optionalInclude("paper-api-generator")
+
+if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
+    include("paper-generator")
+} else {
+    optionalInclude("paper-generator")
+}
 
 fun optionalInclude(name: String, op: (ProjectDescriptor.() -> Unit)? = null) {
     val settingsFile = file("$name.settings.gradle.kts")