857    use CloningRegistryTrait;
 
  859    private function __construct(){
 
  869    protected static function register(
string $name, \Closure $createBlock, ?
string $tileClass = 
null) : 
Block{
 
  874        $typeId = $reflect->getConstant(mb_strtoupper($name));
 
  875        if(!is_int($typeId)){
 
  878            \GlobalLogger::get()->error(self::class . 
": No constant type ID found for $name, generating a new one");
 
  881        $block = $createBlock(
new BID($typeId, $tileClass));
 
  882        self::_registryRegister($name, $block);
 
 
  894        $result = self::_registryGetAll();
 
 
  898    protected static function setup() : void{
 
  899        self::register(
"air", fn(BID $id) => new 
Air($id, 
"Air", new Info(BreakInfo::indestructible(-1.0))));
 
  901        $railBreakInfo = 
new Info(
new BreakInfo(0.7));
 
  902        self::register(
"activator_rail", fn(BID $id) => 
new ActivatorRail($id, 
"Activator Rail", $railBreakInfo));
 
  903        self::register(
"anvil", fn(BID $id) => 
new Anvil($id, 
"Anvil", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 6000.0))));
 
  904        self::register(
"bamboo", fn(BID $id) => 
new Bamboo($id, 
"Bamboo", 
new Info(
new class(1.0, ToolType::AXE) extends BreakInfo{
 
  905            public function getBreakTime(
Item $item) : float{
 
  906                if($item->getBlockToolType() === ToolType::SWORD){
 
  909                return parent::getBreakTime($item);
 
  911        }, [Tags::POTTABLE_PLANTS])));
 
  912        self::register(
"bamboo_sapling", fn(BID $id) => 
new BambooSapling($id, 
"Bamboo Sapling", 
new Info(
new BreakInfo(1.0))));
 
  914        $bannerBreakInfo = 
new Info(BreakInfo::axe(1.0));
 
  915        self::register(
"banner", fn(BID $id) => 
new FloorBanner($id, 
"Banner", $bannerBreakInfo), TileBanner::class);
 
  916        self::register(
"wall_banner", fn(BID $id) => 
new WallBanner($id, 
"Wall Banner", $bannerBreakInfo), TileBanner::class);
 
  917        self::register(
"ominous_banner", fn(BID $id) => 
new OminousFloorBanner($id, 
"Ominous Banner", $bannerBreakInfo), TileBanner::class);
 
  918        self::register(
"ominous_wall_banner", fn(BID $id) => 
new OminousWallBanner($id, 
"Ominous Wall Banner", $bannerBreakInfo), TileBanner::class);
 
  919        self::register(
"barrel", fn(BID $id) => 
new Barrel($id, 
"Barrel", 
new Info(BreakInfo::axe(2.5))), TileBarrel::class);
 
  920        self::register(
"barrier", fn(BID $id) => 
new Transparent($id, 
"Barrier", 
new Info(BreakInfo::indestructible())));
 
  921        self::register(
"beacon", fn(BID $id) => 
new Beacon($id, 
"Beacon", 
new Info(
new BreakInfo(3.0))), TileBeacon::class);
 
  922        self::register(
"bed", fn(BID $id) => 
new Bed($id, 
"Bed Block", 
new Info(
new BreakInfo(0.2))), TileBed::class);
 
  923        self::register(
"bedrock", fn(BID $id) => 
new Bedrock($id, 
"Bedrock", 
new Info(BreakInfo::indestructible(18000000.0))));
 
  925        self::register(
"beetroots", fn(BID $id) => 
new Beetroot($id, 
"Beetroot Block", 
new Info(BreakInfo::instant())));
 
  926        self::register(
"bell", fn(BID $id) => 
new Bell($id, 
"Bell", 
new Info(BreakInfo::pickaxe(5.0))), TileBell::class);
 
  927        self::register(
"blue_ice", fn(BID $id) => 
new BlueIce($id, 
"Blue Ice", 
new Info(BreakInfo::pickaxe(2.8))));
 
  928        self::register(
"bone_block", fn(BID $id) => 
new BoneBlock($id, 
"Bone Block", 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD))));
 
  929        self::register(
"bookshelf", fn(BID $id) => 
new Bookshelf($id, 
"Bookshelf", 
new Info(BreakInfo::axe(1.5))));
 
  930        self::register(
"chiseled_bookshelf", fn(BID $id) => 
new ChiseledBookshelf($id, 
"Chiseled Bookshelf", 
new Info(BreakInfo::axe(1.5))), TileChiseledBookshelf::class);
 
  931        self::register(
"brewing_stand", fn(BID $id) => 
new BrewingStand($id, 
"Brewing Stand", 
new Info(BreakInfo::pickaxe(0.5))), TileBrewingStand::class);
 
  933        $bricksBreakInfo = 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
 
  934        self::register(
"brick_stairs", fn(BID $id) => 
new Stair($id, 
"Brick Stairs", $bricksBreakInfo));
 
  935        self::register(
"bricks", fn(BID $id) => 
new Opaque($id, 
"Bricks", $bricksBreakInfo));
 
  937        self::register(
"brown_mushroom", fn(BID $id) => 
new BrownMushroom($id, 
"Brown Mushroom", 
new Info(BreakInfo::instant(), [Tags::POTTABLE_PLANTS])));
 
  938        self::register(
"cactus", fn(BID $id) => 
new Cactus($id, 
"Cactus", 
new Info(
new BreakInfo(0.4), [Tags::POTTABLE_PLANTS])));
 
  939        self::register(
"cake", fn(BID $id) => 
new Cake($id, 
"Cake", 
new Info(
new BreakInfo(0.5))));
 
  941        $campfireBreakInfo = 
new Info(BreakInfo::axe(2.0));
 
  942        self::register(
"campfire", fn(BID $id) => 
new Campfire($id, 
"Campfire", $campfireBreakInfo), TileCampfire::class);
 
  943        self::register(
"soul_campfire", fn(BID $id) => 
new SoulCampfire($id, 
"Soul Campfire", $campfireBreakInfo), TileCampfire::class);
 
  945        self::register(
"carrots", fn(BID $id) => 
new Carrot($id, 
"Carrot Block", 
new Info(BreakInfo::instant())));
 
  947        $chestBreakInfo = 
new Info(BreakInfo::axe(2.5));
 
  948        self::register(
"chest", fn(BID $id) => 
new Chest($id, 
"Chest", $chestBreakInfo), TileChest::class);
 
  949        self::register(
"clay", fn(BID $id) => 
new Clay($id, 
"Clay Block", 
new Info(BreakInfo::shovel(0.6))));
 
  950        self::register(
"coal", fn(BID $id) => 
new Coal($id, 
"Coal Block", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 30.0))));
 
  952        $cobblestoneBreakInfo = 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
 
  953        $cobblestone = self::register(
"cobblestone", fn(BID $id) => 
new Opaque($id, 
"Cobblestone", $cobblestoneBreakInfo));
 
  954        self::register(
"mossy_cobblestone", fn(BID $id) => 
new Opaque($id, 
"Mossy Cobblestone", $cobblestoneBreakInfo));
 
  955        self::register(
"cobblestone_stairs", fn(BID $id) => 
new Stair($id, 
"Cobblestone Stairs", $cobblestoneBreakInfo));
 
  956        self::register(
"mossy_cobblestone_stairs", fn(BID $id) => 
new Stair($id, 
"Mossy Cobblestone Stairs", $cobblestoneBreakInfo));
 
  958        self::register(
"cobweb", fn(BID $id) => 
new Cobweb($id, 
"Cobweb", 
new Info(
new BreakInfo(4.0, ToolType::SWORD | ToolType::SHEARS, 1))));
 
  959        self::register(
"cocoa_pod", fn(BID $id) => 
new CocoaBlock($id, 
"Cocoa Block", 
new Info(BreakInfo::axe(0.2, 
null, 15.0))));
 
  960        self::register(
"coral_block", fn(BID $id) => 
new CoralBlock($id, 
"Coral Block", 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0))));
 
  961        self::register(
"daylight_sensor", fn(BID $id) => 
new DaylightSensor($id, 
"Daylight Sensor", 
new Info(BreakInfo::axe(0.2))), TileDaylightSensor::class);
 
  962        self::register(
"dead_bush", fn(BID $id) => 
new DeadBush($id, 
"Dead Bush", 
new Info(BreakInfo::instant(ToolType::SHEARS, 1), [Tags::POTTABLE_PLANTS])));
 
  963        self::register(
"detector_rail", fn(BID $id) => 
new DetectorRail($id, 
"Detector Rail", $railBreakInfo));
 
  965        self::register(
"diamond", fn(BID $id) => 
new Opaque($id, 
"Diamond Block", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::IRON, 30.0))));
 
  966        self::register(
"dirt", fn(BID $id) => 
new Dirt($id, 
"Dirt", 
new Info(BreakInfo::shovel(0.5), [Tags::DIRT])));
 
  967        self::register(
"sunflower", fn(BID $id) => 
new DoublePlant($id, 
"Sunflower", 
new Info(BreakInfo::instant())));
 
  968        self::register(
"lilac", fn(BID $id) => 
new DoublePlant($id, 
"Lilac", 
new Info(BreakInfo::instant())));
 
  969        self::register(
"rose_bush", fn(BID $id) => 
new DoublePlant($id, 
"Rose Bush", 
new Info(BreakInfo::instant())));
 
  970        self::register(
"peony", fn(BID $id) => 
new DoublePlant($id, 
"Peony", 
new Info(BreakInfo::instant())));
 
  971        self::register(
"pink_petals", fn(BID $id) => 
new PinkPetals($id, 
"Pink Petals", 
new Info(BreakInfo::instant())));
 
  972        self::register(
"double_tallgrass", fn(BID $id) => 
new DoubleTallGrass($id, 
"Double Tallgrass", 
new Info(BreakInfo::instant(ToolType::SHEARS, 1))));
 
  973        self::register(
"large_fern", fn(BID $id) => 
new DoubleTallGrass($id, 
"Large Fern", 
new Info(BreakInfo::instant(ToolType::SHEARS, 1))));
 
  974        self::register(
"pitcher_plant", fn(BID $id) => 
new DoublePlant($id, 
"Pitcher Plant", 
new Info(BreakInfo::instant())));
 
  975        self::register(
"pitcher_crop", fn(BID $id) => 
new PitcherCrop($id, 
"Pitcher Crop", 
new Info(BreakInfo::instant())));
 
  976        self::register(
"double_pitcher_crop", fn(BID $id) => 
new DoublePitcherCrop($id, 
"Double Pitcher Crop", 
new Info(BreakInfo::instant())));
 
  977        self::register(
"dragon_egg", fn(BID $id) => 
new DragonEgg($id, 
"Dragon Egg", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, blastResistance: 45.0))));
 
  978        self::register(
"dried_kelp", fn(BID $id) => 
new DriedKelp($id, 
"Dried Kelp Block", 
new Info(
new BreakInfo(0.5, ToolType::NONE, 0, 12.5))));
 
  979        self::register(
"emerald", fn(BID $id) => 
new Opaque($id, 
"Emerald Block", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::IRON, 30.0))));
 
  980        self::register(
"enchanting_table", fn(BID $id) => 
new EnchantingTable($id, 
"Enchanting Table", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 6000.0))), TileEnchantingTable::class);
 
  981        self::register(
"end_portal_frame", fn(BID $id) => 
new EndPortalFrame($id, 
"End Portal Frame", 
new Info(BreakInfo::indestructible(18000000.0))));
 
  982        self::register(
"end_rod", fn(BID $id) => 
new EndRod($id, 
"End Rod", 
new Info(BreakInfo::instant())));
 
  983        self::register(
"end_stone", fn(BID $id) => 
new Opaque($id, 
"End Stone", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 45.0))));
 
  985        $endBrickBreakInfo = 
new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 45.0));
 
  986        self::register(
"end_stone_bricks", fn(BID $id) => 
new Opaque($id, 
"End Stone Bricks", $endBrickBreakInfo));
 
  987        self::register(
"end_stone_brick_stairs", fn(BID $id) => 
new Stair($id, 
"End Stone Brick Stairs", $endBrickBreakInfo));
 
  989        self::register(
"ender_chest", fn(BID $id) => 
new EnderChest($id, 
"Ender Chest", 
new Info(BreakInfo::pickaxe(22.5, blastResistance: 3000.0))), TileEnderChest::class);
 
  990        self::register(
"farmland", fn(BID $id) => 
new Farmland($id, 
"Farmland", 
new Info(BreakInfo::shovel(0.6), [Tags::DIRT])));
 
  991        self::register(
"fire", fn(BID $id) => 
new Fire($id, 
"Fire Block", 
new Info(BreakInfo::instant(), [Tags::FIRE])));
 
  993        $flowerTypeInfo = 
new Info(BreakInfo::instant(), [Tags::POTTABLE_PLANTS]);
 
  994        self::register(
"dandelion", fn(BID $id) => 
new Flower($id, 
"Dandelion", $flowerTypeInfo));
 
  995        self::register(
"poppy", fn(BID $id) => 
new Flower($id, 
"Poppy", $flowerTypeInfo));
 
  996        self::register(
"allium", fn(BID $id) => 
new Flower($id, 
"Allium", $flowerTypeInfo));
 
  997        self::register(
"azure_bluet", fn(BID $id) => 
new Flower($id, 
"Azure Bluet", $flowerTypeInfo));
 
  998        self::register(
"blue_orchid", fn(BID $id) => 
new Flower($id, 
"Blue Orchid", $flowerTypeInfo));
 
  999        self::register(
"cornflower", fn(BID $id) => 
new Flower($id, 
"Cornflower", $flowerTypeInfo));
 
 1000        self::register(
"lily_of_the_valley", fn(BID $id) => 
new Flower($id, 
"Lily of the Valley", $flowerTypeInfo));
 
 1001        self::register(
"orange_tulip", fn(BID $id) => 
new Flower($id, 
"Orange Tulip", $flowerTypeInfo));
 
 1002        self::register(
"oxeye_daisy", fn(BID $id) => 
new Flower($id, 
"Oxeye Daisy", $flowerTypeInfo));
 
 1003        self::register(
"pink_tulip", fn(BID $id) => 
new Flower($id, 
"Pink Tulip", $flowerTypeInfo));
 
 1004        self::register(
"red_tulip", fn(BID $id) => 
new Flower($id, 
"Red Tulip", $flowerTypeInfo));
 
 1005        self::register(
"white_tulip", fn(BID $id) => 
new Flower($id, 
"White Tulip", $flowerTypeInfo));
 
 1006        self::register(
"torchflower", fn(BID $id) => 
new Flower($id, 
"Torchflower", $flowerTypeInfo));
 
 1007        self::register(
"torchflower_crop", fn(BID $id) => 
new TorchflowerCrop($id, 
"Torchflower Crop", 
new Info(BreakInfo::instant())));
 
 1008        self::register(
"flower_pot", fn(BID $id) => 
new FlowerPot($id, 
"Flower Pot", 
new Info(BreakInfo::instant())), TileFlowerPot::class);
 
 1009        self::register(
"frosted_ice", fn(BID $id) => 
new FrostedIce($id, 
"Frosted Ice", 
new Info(BreakInfo::pickaxe(0.5))));
 
 1010        self::register(
"furnace", fn(BID $id) => 
new Furnace($id, 
"Furnace", 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::FURNACE), TileNormalFurnace::class);
 
 1011        self::register(
"blast_furnace", fn(BID $id) => 
new Furnace($id, 
"Blast Furnace", 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::BLAST_FURNACE), TileBlastFurnace::class);
 
 1012        self::register(
"smoker", fn(BID $id) => 
new Furnace($id, 
"Smoker", 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::SMOKER), TileSmoker::class);
 
 1014        $glassBreakInfo = 
new Info(
new BreakInfo(0.3));
 
 1015        self::register(
"glass", fn(BID $id) => 
new Glass($id, 
"Glass", $glassBreakInfo));
 
 1016        self::register(
"glass_pane", fn(BID $id) => 
new GlassPane($id, 
"Glass Pane", $glassBreakInfo));
 
 1017        self::register(
"glowing_obsidian", fn(BID $id) => 
new GlowingObsidian($id, 
"Glowing Obsidian", 
new Info(BreakInfo::pickaxe(35.0, ToolTier::DIAMOND, 6000.0))));
 
 1018        self::register(
"glowstone", fn(BID $id) => 
new Glowstone($id, 
"Glowstone", 
new Info(BreakInfo::pickaxe(0.3))));
 
 1019        self::register(
"glow_lichen", fn(BID $id) => 
new GlowLichen($id, 
"Glow Lichen", 
new Info(BreakInfo::axe(0.2))));
 
 1020        self::register(
"gold", fn(BID $id) => 
new Opaque($id, 
"Gold Block", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::IRON, 30.0))));
 
 1022        self::register(
"grass", fn(BID $id) => 
new Grass($id, 
"Grass", 
new Info(BreakInfo::shovel(0.6), [Tags::DIRT])));
 
 1023        self::register(
"grass_path", fn(BID $id) => 
new GrassPath($id, 
"Grass Path", 
new Info(BreakInfo::shovel(0.65))));
 
 1024        self::register(
"gravel", fn(BID $id) => 
new Gravel($id, 
"Gravel", 
new Info(BreakInfo::shovel(0.6))));
 
 1026        self::register(
"hardened_clay", fn(BID $id) => 
new HardenedClay($id, 
"Hardened Clay", 
new Info(BreakInfo::pickaxe(1.25, ToolTier::WOOD, 21.0))));
 
 1028        $hardenedGlassBreakInfo = 
new Info(
new BreakInfo(10.0));
 
 1029        self::register(
"hardened_glass", fn(BID $id) => 
new HardenedGlass($id, 
"Hardened Glass", $hardenedGlassBreakInfo));
 
 1030        self::register(
"hardened_glass_pane", fn(BID $id) => 
new HardenedGlassPane($id, 
"Hardened Glass Pane", $hardenedGlassBreakInfo));
 
 1031        self::register(
"hay_bale", fn(BID $id) => 
new HayBale($id, 
"Hay Bale", 
new Info(
new BreakInfo(0.5))));
 
 1032        self::register(
"hopper", fn(BID $id) => 
new Hopper($id, 
"Hopper", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 24.0))), TileHopper::class);
 
 1033        self::register(
"ice", fn(BID $id) => 
new Ice($id, 
"Ice", 
new Info(BreakInfo::pickaxe(0.5))));
 
 1035        $updateBlockBreakInfo = 
new Info(
new BreakInfo(1.0));
 
 1036        self::register(
"info_update", fn(BID $id) => 
new Opaque($id, 
"update!", $updateBlockBreakInfo));
 
 1037        self::register(
"info_update2", fn(BID $id) => 
new Opaque($id, 
"ate!upd", $updateBlockBreakInfo));
 
 1038        self::register(
"invisible_bedrock", fn(BID $id) => 
new Transparent($id, 
"Invisible Bedrock", 
new Info(BreakInfo::indestructible(18000000.0))));
 
 1040        $ironBreakInfo = 
new Info(BreakInfo::pickaxe(5.0, ToolTier::STONE, 30.0));
 
 1041        self::register(
"iron", fn(BID $id) => 
new Opaque($id, 
"Iron Block", $ironBreakInfo));
 
 1042        self::register(
"iron_bars", fn(BID $id) => 
new Thin($id, 
"Iron Bars", $ironBreakInfo));
 
 1043        self::register(
"copper_bars", fn(BID $id) => 
new CopperBars($id, 
"Copper Bars", $ironBreakInfo));
 
 1045        self::register(
"iron_door", fn(BID $id) => 
new Door($id, 
"Iron Door", 
new Info(BreakInfo::pickaxe(5.0))));
 
 1046        self::register(
"iron_trapdoor", fn(BID $id) => 
new Trapdoor($id, 
"Iron Trapdoor", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD))));
 
 1048        $itemFrameInfo = 
new Info(
new BreakInfo(0.25));
 
 1049        self::register(
"item_frame", fn(BID $id) => 
new ItemFrame($id, 
"Item Frame", $itemFrameInfo), TileItemFrame::class);
 
 1050        self::register(
"glowing_item_frame", fn(BID $id) => 
new ItemFrame($id, 
"Glow Item Frame", $itemFrameInfo), TileGlowingItemFrame::class);
 
 1052        self::register(
"jukebox", fn(BID $id) => 
new Jukebox($id, 
"Jukebox", 
new Info(BreakInfo::axe(2.0, blastResistance: 30.0))), TileJukebox::class);
 
 1053        self::register(
"ladder", fn(BID $id) => 
new Ladder($id, 
"Ladder", 
new Info(BreakInfo::axe(0.4))));
 
 1055        $lanternBreakInfo = 
new Info(BreakInfo::pickaxe(3.5));
 
 1056        self::register(
"lantern", fn(BID $id) => 
new Lantern($id, 
"Lantern", $lanternBreakInfo, 15));
 
 1057        self::register(
"soul_lantern", fn(BID $id) => 
new Lantern($id, 
"Soul Lantern", $lanternBreakInfo, 10));
 
 1058        self::register(
"copper_lantern", fn(BID $id) => 
new CopperLantern($id, 
"Copper Lantern", $lanternBreakInfo, 15));
 
 1060        self::register(
"lapis_lazuli", fn(BID $id) => 
new Opaque($id, 
"Lapis Lazuli Block", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::STONE))));
 
 1061        self::register(
"lava", fn(BID $id) => 
new Lava($id, 
"Lava", 
new Info(BreakInfo::indestructible(500.0))));
 
 1062        self::register(
"lectern", fn(BID $id) => 
new Lectern($id, 
"Lectern", 
new Info(BreakInfo::axe(2.5))), TileLectern::class);
 
 1063        self::register(
"lever", fn(BID $id) => 
new Lever($id, 
"Lever", 
new Info(
new BreakInfo(0.5))));
 
 1064        self::register(
"magma", fn(BID $id) => 
new Magma($id, 
"Magma Block", 
new Info(BreakInfo::pickaxe(0.5, ToolTier::WOOD))));
 
 1065        self::register(
"melon", fn(BID $id) => 
new Melon($id, 
"Melon Block", 
new Info(BreakInfo::axe(1.0))));
 
 1066        self::register(
"melon_stem", fn(BID $id) => 
new MelonStem($id, 
"Melon Stem", 
new Info(BreakInfo::instant())));
 
 1067        self::register(
"monster_spawner", fn(BID $id) => 
new MonsterSpawner($id, 
"Monster Spawner", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD))), TileMonsterSpawner::class);
 
 1068        self::register(
"mycelium", fn(BID $id) => 
new Mycelium($id, 
"Mycelium", 
new Info(BreakInfo::shovel(0.6), [Tags::DIRT])));
 
 1070        $netherBrickBreakInfo = 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
 
 1071        self::register(
"nether_bricks", fn(BID $id) => 
new Opaque($id, 
"Nether Bricks", $netherBrickBreakInfo));
 
 1072        self::register(
"red_nether_bricks", fn(BID $id) => 
new Opaque($id, 
"Red Nether Bricks", $netherBrickBreakInfo));
 
 1073        self::register(
"nether_brick_fence", fn(BID $id) => 
new Fence($id, 
"Nether Brick Fence", $netherBrickBreakInfo));
 
 1074        self::register(
"nether_brick_stairs", fn(BID $id) => 
new Stair($id, 
"Nether Brick Stairs", $netherBrickBreakInfo));
 
 1075        self::register(
"red_nether_brick_stairs", fn(BID $id) => 
new Stair($id, 
"Red Nether Brick Stairs", $netherBrickBreakInfo));
 
 1076        self::register(
"chiseled_nether_bricks", fn(BID $id) => 
new Opaque($id, 
"Chiseled Nether Bricks", $netherBrickBreakInfo));
 
 1077        self::register(
"cracked_nether_bricks", fn(BID $id) => 
new Opaque($id, 
"Cracked Nether Bricks", $netherBrickBreakInfo));
 
 1079        self::register(
"nether_portal", fn(BID $id) => 
new NetherPortal($id, 
"Nether Portal", 
new Info(BreakInfo::indestructible(0.0))));
 
 1080        self::register(
"nether_reactor_core", fn(BID $id) => 
new NetherReactor($id, 
"Nether Reactor Core", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD))));
 
 1081        self::register(
"nether_wart_block", fn(BID $id) => 
new Opaque($id, 
"Nether Wart Block", 
new Info(
new BreakInfo(1.0, ToolType::HOE))));
 
 1082        self::register(
"nether_wart", fn(BID $id) => 
new NetherWartPlant($id, 
"Nether Wart", 
new Info(BreakInfo::instant())));
 
 1083        self::register(
"netherrack", fn(BID $id) => 
new Netherrack($id, 
"Netherrack", 
new Info(BreakInfo::pickaxe(0.4, ToolTier::WOOD))));
 
 1084        self::register(
"note_block", fn(BID $id) => 
new Note($id, 
"Note Block", 
new Info(BreakInfo::axe(0.8))), TileNote::class);
 
 1085        self::register(
"obsidian", fn(BID $id) => 
new Opaque($id, 
"Obsidian", 
new Info(BreakInfo::pickaxe(35.0 ,  ToolTier::DIAMOND, 6000.0))));
 
 1086        self::register(
"packed_ice", fn(BID $id) => 
new PackedIce($id, 
"Packed Ice", 
new Info(BreakInfo::pickaxe(0.5))));
 
 1087        self::register(
"podzol", fn(BID $id) => 
new Podzol($id, 
"Podzol", 
new Info(BreakInfo::shovel(0.5), [Tags::DIRT])));
 
 1088        self::register(
"potatoes", fn(BID $id) => 
new Potato($id, 
"Potato Block", 
new Info(BreakInfo::instant())));
 
 1089        self::register(
"powered_rail", fn(BID $id) => 
new PoweredRail($id, 
"Powered Rail", $railBreakInfo));
 
 1091        $prismarineBreakInfo = 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
 
 1092        self::register(
"prismarine", fn(BID $id) => 
new Opaque($id, 
"Prismarine", $prismarineBreakInfo));
 
 1093        self::register(
"dark_prismarine", fn(BID $id) => 
new Opaque($id, 
"Dark Prismarine", $prismarineBreakInfo));
 
 1094        self::register(
"prismarine_bricks", fn(BID $id) => 
new Opaque($id, 
"Prismarine Bricks", $prismarineBreakInfo));
 
 1095        self::register(
"prismarine_bricks_stairs", fn(BID $id) => 
new Stair($id, 
"Prismarine Bricks Stairs", $prismarineBreakInfo));
 
 1096        self::register(
"dark_prismarine_stairs", fn(BID $id) => 
new Stair($id, 
"Dark Prismarine Stairs", $prismarineBreakInfo));
 
 1097        self::register(
"prismarine_stairs", fn(BID $id) => 
new Stair($id, 
"Prismarine Stairs", $prismarineBreakInfo));
 
 1099        $pumpkinBreakInfo = 
new Info(BreakInfo::axe(1.0));
 
 1100        self::register(
"pumpkin", fn(BID $id) => 
new Pumpkin($id, 
"Pumpkin", $pumpkinBreakInfo));
 
 1101        self::register(
"carved_pumpkin", fn(BID $id) => 
new CarvedPumpkin($id, 
"Carved Pumpkin", 
new Info(BreakInfo::axe(1.0), enchantmentTags: [EnchantmentTags::MASK])));
 
 1102        self::register(
"lit_pumpkin", fn(BID $id) => 
new LitPumpkin($id, 
"Jack o'Lantern", $pumpkinBreakInfo));
 
 1104        self::register(
"pumpkin_stem", fn(BID $id) => 
new PumpkinStem($id, 
"Pumpkin Stem", 
new Info(BreakInfo::instant())));
 
 1106        $purpurBreakInfo = 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
 
 1107        self::register(
"purpur", fn(BID $id) => 
new Opaque($id, 
"Purpur Block", $purpurBreakInfo));
 
 1108        self::register(
"purpur_pillar", fn(BID $id) => 
new SimplePillar($id, 
"Purpur Pillar", $purpurBreakInfo));
 
 1109        self::register(
"purpur_stairs", fn(BID $id) => 
new Stair($id, 
"Purpur Stairs", $purpurBreakInfo));
 
 1111        $quartzBreakInfo = 
new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD));
 
 1112        $smoothQuartzBreakInfo = 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
 
 1113        self::register(
"quartz", fn(BID $id) => 
new Opaque($id, 
"Quartz Block", $quartzBreakInfo));
 
 1114        self::register(
"chiseled_quartz", fn(BID $id) => 
new SimplePillar($id, 
"Chiseled Quartz Block", $quartzBreakInfo));
 
 1115        self::register(
"quartz_pillar", fn(BID $id) => 
new SimplePillar($id, 
"Quartz Pillar", $quartzBreakInfo));
 
 1116        self::register(
"smooth_quartz", fn(BID $id) => 
new Opaque($id, 
"Smooth Quartz Block", $smoothQuartzBreakInfo));
 
 1117        self::register(
"quartz_bricks", fn(BID $id) => 
new Opaque($id, 
"Quartz Bricks", $quartzBreakInfo));
 
 1119        self::register(
"quartz_stairs", fn(BID $id) => 
new Stair($id, 
"Quartz Stairs", $quartzBreakInfo));
 
 1120        self::register(
"smooth_quartz_stairs", fn(BID $id) => 
new Stair($id, 
"Smooth Quartz Stairs", $smoothQuartzBreakInfo));
 
 1122        self::register(
"rail", fn(BID $id) => 
new Rail($id, 
"Rail", $railBreakInfo));
 
 1123        self::register(
"red_mushroom", fn(BID $id) => 
new RedMushroom($id, 
"Red Mushroom", 
new Info(BreakInfo::instant(), [Tags::POTTABLE_PLANTS])));
 
 1124        self::register(
"redstone", fn(BID $id) => 
new Redstone($id, 
"Redstone Block", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 30.0))));
 
 1125        self::register(
"redstone_comparator", fn(BID $id) => 
new RedstoneComparator($id, 
"Redstone Comparator", 
new Info(BreakInfo::instant())), TileComparator::class);
 
 1126        self::register(
"redstone_lamp", fn(BID $id) => 
new RedstoneLamp($id, 
"Redstone Lamp", 
new Info(
new BreakInfo(0.3))));
 
 1127        self::register(
"redstone_repeater", fn(BID $id) => 
new RedstoneRepeater($id, 
"Redstone Repeater", 
new Info(BreakInfo::instant())));
 
 1128        self::register(
"redstone_torch", fn(BID $id) => 
new RedstoneTorch($id, 
"Redstone Torch", 
new Info(BreakInfo::instant())));
 
 1129        self::register(
"redstone_wire", fn(BID $id) => 
new RedstoneWire($id, 
"Redstone", 
new Info(BreakInfo::instant())));
 
 1130        self::register(
"reserved6", fn(BID $id) => 
new Reserved6($id, 
"reserved6", 
new Info(BreakInfo::instant())));
 
 1132        $sandTypeInfo = 
new Info(BreakInfo::shovel(0.5), [Tags::SAND]);
 
 1133        self::register(
"sand", fn(BID $id) => 
new Sand($id, 
"Sand", $sandTypeInfo));
 
 1134        self::register(
"red_sand", fn(BID $id) => 
new Sand($id, 
"Red Sand", $sandTypeInfo));
 
 1136        self::register(
"sea_lantern", fn(BID $id) => 
new SeaLantern($id, 
"Sea Lantern", 
new Info(
new BreakInfo(0.3))));
 
 1137        self::register(
"sea_pickle", fn(BID $id) => 
new SeaPickle($id, 
"Sea Pickle", 
new Info(BreakInfo::instant())));
 
 1138        self::register(
"mob_head", fn(BID $id) => 
new MobHead($id, 
"Mob Head", 
new Info(
new BreakInfo(1.0), enchantmentTags: [EnchantmentTags::MASK])), TileMobHead::class);
 
 1139        self::register(
"slime", fn(BID $id) => 
new Slime($id, 
"Slime Block", 
new Info(BreakInfo::instant())));
 
 1140        self::register(
"snow", fn(BID $id) => 
new Snow($id, 
"Snow Block", 
new Info(BreakInfo::shovel(0.2, ToolTier::WOOD))));
 
 1141        self::register(
"snow_layer", fn(BID $id) => 
new SnowLayer($id, 
"Snow Layer", 
new Info(BreakInfo::shovel(0.1, ToolTier::WOOD))));
 
 1142        self::register(
"soul_sand", fn(BID $id) => 
new SoulSand($id, 
"Soul Sand", 
new Info(BreakInfo::shovel(0.5))));
 
 1143        self::register(
"sponge", fn(BID $id) => 
new Sponge($id, 
"Sponge", 
new Info(
new BreakInfo(0.6, ToolType::HOE))));
 
 1144        $shulkerBoxBreakInfo = 
new Info(BreakInfo::pickaxe(2));
 
 1145        self::register(
"shulker_box", fn(BID $id) => 
new ShulkerBox($id, 
"Shulker Box", $shulkerBoxBreakInfo), TileShulkerBox::class);
 
 1147        $stoneBreakInfo = 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
 
 1148        $stone = self::register(
 
 1150            fn(BID $id) => 
new class($id, 
"Stone", $stoneBreakInfo) extends Opaque{
 
 1151                public function getDropsForCompatibleTool(Item $item) : array{
 
 1152                    return [VanillaBlocks::COBBLESTONE()->asItem()];
 
 1155                public function isAffectedBySilkTouch() : bool{
 
 1160        self::register(
"andesite", fn(BID $id) => 
new Opaque($id, 
"Andesite", $stoneBreakInfo));
 
 1161        self::register(
"diorite", fn(BID $id) => 
new Opaque($id, 
"Diorite", $stoneBreakInfo));
 
 1162        self::register(
"granite", fn(BID $id) => 
new Opaque($id, 
"Granite", $stoneBreakInfo));
 
 1163        self::register(
"polished_andesite", fn(BID $id) => 
new Opaque($id, 
"Polished Andesite", $stoneBreakInfo));
 
 1164        self::register(
"polished_diorite", fn(BID $id) => 
new Opaque($id, 
"Polished Diorite", $stoneBreakInfo));
 
 1165        self::register(
"polished_granite", fn(BID $id) => 
new Opaque($id, 
"Polished Granite", $stoneBreakInfo));
 
 1167        $stoneBrick = self::register(
"stone_bricks", fn(BID $id) => 
new Opaque($id, 
"Stone Bricks", $stoneBreakInfo));
 
 1168        $mossyStoneBrick = self::register(
"mossy_stone_bricks", fn(BID $id) => 
new Opaque($id, 
"Mossy Stone Bricks", $stoneBreakInfo));
 
 1169        $crackedStoneBrick = self::register(
"cracked_stone_bricks", fn(BID $id) => 
new Opaque($id, 
"Cracked Stone Bricks", $stoneBreakInfo));
 
 1170        $chiseledStoneBrick = self::register(
"chiseled_stone_bricks", fn(BID $id) => 
new Opaque($id, 
"Chiseled Stone Bricks", $stoneBreakInfo));
 
 1172        $infestedStoneBreakInfo = 
new Info(BreakInfo::pickaxe(0.75));
 
 1173        self::register(
"infested_stone", fn(BID $id) => 
new InfestedStone($id, 
"Infested Stone", $infestedStoneBreakInfo, $stone));
 
 1174        self::register(
"infested_stone_brick", fn(BID $id) => 
new InfestedStone($id, 
"Infested Stone Brick", $infestedStoneBreakInfo, $stoneBrick));
 
 1175        self::register(
"infested_cobblestone", fn(BID $id) => 
new InfestedStone($id, 
"Infested Cobblestone", 
new Info(BreakInfo::pickaxe(1.0, blastResistance: 3.75)), $cobblestone));
 
 1176        self::register(
"infested_mossy_stone_brick", fn(BID $id) => 
new InfestedStone($id, 
"Infested Mossy Stone Brick", $infestedStoneBreakInfo, $mossyStoneBrick));
 
 1177        self::register(
"infested_cracked_stone_brick", fn(BID $id) => 
new InfestedStone($id, 
"Infested Cracked Stone Brick", $infestedStoneBreakInfo, $crackedStoneBrick));
 
 1178        self::register(
"infested_chiseled_stone_brick", fn(BID $id) => 
new InfestedStone($id, 
"Infested Chiseled Stone Brick", $infestedStoneBreakInfo, $chiseledStoneBrick));
 
 1180        self::register(
"stone_stairs", fn(BID $id) => 
new Stair($id, 
"Stone Stairs", $stoneBreakInfo));
 
 1181        self::register(
"smooth_stone", fn(BID $id) => 
new Opaque($id, 
"Smooth Stone", 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0))));
 
 1182        self::register(
"andesite_stairs", fn(BID $id) => 
new Stair($id, 
"Andesite Stairs", $stoneBreakInfo));
 
 1183        self::register(
"diorite_stairs", fn(BID $id) => 
new Stair($id, 
"Diorite Stairs", $stoneBreakInfo));
 
 1184        self::register(
"granite_stairs", fn(BID $id) => 
new Stair($id, 
"Granite Stairs", $stoneBreakInfo));
 
 1185        self::register(
"polished_andesite_stairs", fn(BID $id) => 
new Stair($id, 
"Polished Andesite Stairs", $stoneBreakInfo));
 
 1186        self::register(
"polished_diorite_stairs", fn(BID $id) => 
new Stair($id, 
"Polished Diorite Stairs", $stoneBreakInfo));
 
 1187        self::register(
"polished_granite_stairs", fn(BID $id) => 
new Stair($id, 
"Polished Granite Stairs", $stoneBreakInfo));
 
 1188        self::register(
"stone_brick_stairs", fn(BID $id) => 
new Stair($id, 
"Stone Brick Stairs", $stoneBreakInfo));
 
 1189        self::register(
"mossy_stone_brick_stairs", fn(BID $id) => 
new Stair($id, 
"Mossy Stone Brick Stairs", $stoneBreakInfo));
 
 1190        self::register(
"stone_button", fn(BID $id) => 
new StoneButton($id, 
"Stone Button", 
new Info(BreakInfo::pickaxe(0.5))));
 
 1191        self::register(
"stonecutter", fn(BID $id) => 
new Stonecutter($id, 
"Stonecutter", 
new Info(BreakInfo::pickaxe(3.5))));
 
 1192        self::register(
"stone_pressure_plate", fn(BID $id) => 
new StonePressurePlate($id, 
"Stone Pressure Plate", 
new Info(BreakInfo::pickaxe(0.5))));
 
 1194        $stoneSlabBreakInfo = 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
 
 1196        self::register(
"brick_slab", fn(BID $id) => 
new Slab($id, 
"Brick", $stoneSlabBreakInfo));
 
 1197        self::register(
"cobblestone_slab", fn(BID $id) => 
new Slab($id, 
"Cobblestone", $stoneSlabBreakInfo));
 
 1198        self::register(
"fake_wooden_slab", fn(BID $id) => 
new Slab($id, 
"Fake Wooden", $stoneSlabBreakInfo));
 
 1199        self::register(
"nether_brick_slab", fn(BID $id) => 
new Slab($id, 
"Nether Brick", $stoneSlabBreakInfo));
 
 1200        self::register(
"quartz_slab", fn(BID $id) => 
new Slab($id, 
"Quartz", $stoneSlabBreakInfo));
 
 1201        self::register(
"sandstone_slab", fn(BID $id) => 
new Slab($id, 
"Sandstone", $stoneSlabBreakInfo));
 
 1202        self::register(
"smooth_stone_slab", fn(BID $id) => 
new Slab($id, 
"Smooth Stone", $stoneSlabBreakInfo));
 
 1203        self::register(
"stone_brick_slab", fn(BID $id) => 
new Slab($id, 
"Stone Brick", $stoneSlabBreakInfo));
 
 1204        self::register(
"red_nether_brick_slab", fn(BID $id) => 
new Slab($id, 
"Red Nether Brick", $stoneSlabBreakInfo));
 
 1205        self::register(
"red_sandstone_slab", fn(BID $id) => 
new Slab($id, 
"Red Sandstone", $stoneSlabBreakInfo));
 
 1206        self::register(
"smooth_sandstone_slab", fn(BID $id) => 
new Slab($id, 
"Smooth Sandstone", $stoneSlabBreakInfo));
 
 1207        self::register(
"cut_red_sandstone_slab", fn(BID $id) => 
new Slab($id, 
"Cut Red Sandstone", $stoneSlabBreakInfo));
 
 1208        self::register(
"cut_sandstone_slab", fn(BID $id) => 
new Slab($id, 
"Cut Sandstone", $stoneSlabBreakInfo));
 
 1209        self::register(
"mossy_cobblestone_slab", fn(BID $id) => 
new Slab($id, 
"Mossy Cobblestone", $stoneSlabBreakInfo));
 
 1210        self::register(
"purpur_slab", fn(BID $id) => 
new Slab($id, 
"Purpur", $stoneSlabBreakInfo));
 
 1211        self::register(
"smooth_red_sandstone_slab", fn(BID $id) => 
new Slab($id, 
"Smooth Red Sandstone", $stoneSlabBreakInfo));
 
 1212        self::register(
"smooth_quartz_slab", fn(BID $id) => 
new Slab($id, 
"Smooth Quartz", $stoneSlabBreakInfo));
 
 1213        self::register(
"stone_slab", fn(BID $id) => 
new Slab($id, 
"Stone", $stoneSlabBreakInfo));
 
 1215        self::register(
"end_stone_brick_slab", fn(BID $id) => 
new Slab($id, 
"End Stone Brick", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 30.0))));
 
 1217        $lightStoneSlabBreakInfo = 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
 
 1218        self::register(
"dark_prismarine_slab", fn(BID $id) => 
new Slab($id, 
"Dark Prismarine", $lightStoneSlabBreakInfo));
 
 1219        self::register(
"prismarine_slab", fn(BID $id) => 
new Slab($id, 
"Prismarine", $lightStoneSlabBreakInfo));
 
 1220        self::register(
"prismarine_bricks_slab", fn(BID $id) => 
new Slab($id, 
"Prismarine Bricks", $lightStoneSlabBreakInfo));
 
 1221        self::register(
"andesite_slab", fn(BID $id) => 
new Slab($id, 
"Andesite", $lightStoneSlabBreakInfo));
 
 1222        self::register(
"diorite_slab", fn(BID $id) => 
new Slab($id, 
"Diorite", $lightStoneSlabBreakInfo));
 
 1223        self::register(
"granite_slab", fn(BID $id) => 
new Slab($id, 
"Granite", $lightStoneSlabBreakInfo));
 
 1224        self::register(
"polished_andesite_slab", fn(BID $id) => 
new Slab($id, 
"Polished Andesite", $lightStoneSlabBreakInfo));
 
 1225        self::register(
"polished_diorite_slab", fn(BID $id) => 
new Slab($id, 
"Polished Diorite", $lightStoneSlabBreakInfo));
 
 1226        self::register(
"polished_granite_slab", fn(BID $id) => 
new Slab($id, 
"Polished Granite", $lightStoneSlabBreakInfo));
 
 1227        self::register(
"mossy_stone_brick_slab", fn(BID $id) => 
new Slab($id, 
"Mossy Stone Brick", $lightStoneSlabBreakInfo));
 
 1229        self::register(
"legacy_stonecutter", fn(BID $id) => 
new Opaque($id, 
"Legacy Stonecutter", 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD))));
 
 1230        self::register(
"sugarcane", fn(BID $id) => 
new Sugarcane($id, 
"Sugarcane", 
new Info(BreakInfo::instant())));
 
 1231        self::register(
"sweet_berry_bush", fn(BID $id) => 
new SweetBerryBush($id, 
"Sweet Berry Bush", 
new Info(BreakInfo::instant())));
 
 1232        self::register(
"tnt", fn(BID $id) => 
new TNT($id, 
"TNT", 
new Info(BreakInfo::instant())));
 
 1233        self::register(
"fern", fn(BID $id) => 
new TallGrass($id, 
"Fern", 
new Info(BreakInfo::instant(ToolType::SHEARS, 1), [Tags::POTTABLE_PLANTS]), fn() => VanillaBlocks::LARGE_FERN()));
 
 1234        self::register(
"tall_grass", fn(BID $id) => 
new TallGrass($id, 
"Tall Grass", 
new Info(BreakInfo::instant(ToolType::SHEARS, 1)), fn() => VanillaBlocks::DOUBLE_TALLGRASS()));
 
 1236        self::register(
"blue_torch", fn(BID $id) => 
new Torch($id, 
"Blue Torch", 
new Info(BreakInfo::instant())));
 
 1237        self::register(
"copper_torch", fn(BID $id) => 
new Torch($id, 
"Copper Torch", 
new Info(BreakInfo::instant())));
 
 1238        self::register(
"purple_torch", fn(BID $id) => 
new Torch($id, 
"Purple Torch", 
new Info(BreakInfo::instant())));
 
 1239        self::register(
"red_torch", fn(BID $id) => 
new Torch($id, 
"Red Torch", 
new Info(BreakInfo::instant())));
 
 1240        self::register(
"green_torch", fn(BID $id) => 
new Torch($id, 
"Green Torch", 
new Info(BreakInfo::instant())));
 
 1241        self::register(
"torch", fn(BID $id) => 
new Torch($id, 
"Torch", 
new Info(BreakInfo::instant())));
 
 1243        self::register(
"trapped_chest", fn(BID $id) => 
new TrappedChest($id, 
"Trapped Chest", $chestBreakInfo), TileChest::class);
 
 1244        self::register(
"tripwire", fn(BID $id) => 
new Tripwire($id, 
"Tripwire", 
new Info(BreakInfo::instant())));
 
 1245        self::register(
"tripwire_hook", fn(BID $id) => 
new TripwireHook($id, 
"Tripwire Hook", 
new Info(BreakInfo::instant())));
 
 1246        self::register(
"underwater_torch", fn(BID $id) => 
new UnderwaterTorch($id, 
"Underwater Torch", 
new Info(BreakInfo::instant())));
 
 1247        self::register(
"vines", fn(BID $id) => 
new Vine($id, 
"Vines", 
new Info(BreakInfo::axe(0.2))));
 
 1248        self::register(
"water", fn(BID $id) => 
new Water($id, 
"Water", 
new Info(BreakInfo::indestructible(500.0))));
 
 1249        self::register(
"lily_pad", fn(BID $id) => 
new WaterLily($id, 
"Lily Pad", 
new Info(BreakInfo::instant())));
 
 1251        $weightedPressurePlateBreakInfo = 
new Info(BreakInfo::pickaxe(0.5));
 
 1252        self::register(
"weighted_pressure_plate_heavy", fn(BID $id) => 
new WeightedPressurePlateHeavy(
 
 1254            "Weighted Pressure Plate Heavy",
 
 1255            $weightedPressurePlateBreakInfo,
 
 1256            deactivationDelayTicks: 10,
 
 1257            signalStrengthFactor: 0.1
 
 1259        self::register(
"weighted_pressure_plate_light", fn(BID $id) => 
new WeightedPressurePlateLight(
 
 1261            "Weighted Pressure Plate Light",
 
 1262            $weightedPressurePlateBreakInfo,
 
 1263            deactivationDelayTicks: 10,
 
 1264            signalStrengthFactor: 1.0
 
 1266        self::register(
"wheat", fn(BID $id) => 
new Wheat($id, 
"Wheat Block", 
new Info(BreakInfo::instant())));
 
 1268        $leavesBreakInfo = 
new Info(
new class(0.2, ToolType::HOE) extends BreakInfo{
 
 1269            public function getBreakTime(Item $item) : float{
 
 1270                if($item->getBlockToolType() === ToolType::SHEARS){
 
 1273                return parent::getBreakTime($item);
 
 1276        $saplingTypeInfo = 
new Info(BreakInfo::instant(), [Tags::POTTABLE_PLANTS]);
 
 1278        foreach(SaplingType::cases() as $saplingType){
 
 1279            $name = $saplingType->getDisplayName();
 
 1280            self::register(strtolower($saplingType->name) . 
"_sapling", fn(BID $id) => 
new Sapling($id, $name . 
" Sapling", $saplingTypeInfo, $saplingType));
 
 1282        foreach(LeavesType::cases() as $leavesType){
 
 1283            $name = $leavesType->getDisplayName();
 
 1284            self::register(strtolower($leavesType->name) . 
"_leaves", fn(BID $id) => 
new Leaves($id, $name . 
" Leaves", $leavesBreakInfo, $leavesType));
 
 1287        $sandstoneBreakInfo = 
new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD));
 
 1288        $smoothSandstoneBreakInfo = 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
 
 1289        self::register(
"red_sandstone_stairs", fn(BID $id) => 
new Stair($id, 
"Red Sandstone Stairs", $sandstoneBreakInfo));
 
 1290        self::register(
"smooth_red_sandstone_stairs", fn(BID $id) => 
new Stair($id, 
"Smooth Red Sandstone Stairs", $smoothSandstoneBreakInfo));
 
 1291        self::register(
"red_sandstone", fn(BID $id) => 
new Opaque($id, 
"Red Sandstone", $sandstoneBreakInfo));
 
 1292        self::register(
"chiseled_red_sandstone", fn(BID $id) => 
new Opaque($id, 
"Chiseled Red Sandstone", $sandstoneBreakInfo));
 
 1293        self::register(
"cut_red_sandstone", fn(BID $id) => 
new Opaque($id, 
"Cut Red Sandstone", $sandstoneBreakInfo));
 
 1294        self::register(
"smooth_red_sandstone", fn(BID $id) => 
new Opaque($id, 
"Smooth Red Sandstone", $smoothSandstoneBreakInfo));
 
 1296        self::register(
"sandstone_stairs", fn(BID $id) => 
new Stair($id, 
"Sandstone Stairs", $sandstoneBreakInfo));
 
 1297        self::register(
"smooth_sandstone_stairs", fn(BID $id) => 
new Stair($id, 
"Smooth Sandstone Stairs", $smoothSandstoneBreakInfo));
 
 1298        self::register(
"sandstone", fn(BID $id) => 
new Opaque($id, 
"Sandstone", $sandstoneBreakInfo));
 
 1299        self::register(
"chiseled_sandstone", fn(BID $id) => 
new Opaque($id, 
"Chiseled Sandstone", $sandstoneBreakInfo));
 
 1300        self::register(
"cut_sandstone", fn(BID $id) => 
new Opaque($id, 
"Cut Sandstone", $sandstoneBreakInfo));
 
 1301        self::register(
"smooth_sandstone", fn(BID $id) => 
new Opaque($id, 
"Smooth Sandstone", $smoothSandstoneBreakInfo));
 
 1303        self::register(
"glazed_terracotta", fn(BID $id) => 
new GlazedTerracotta($id, 
"Glazed Terracotta", 
new Info(BreakInfo::pickaxe(1.4, ToolTier::WOOD))));
 
 1304        self::register(
"dyed_shulker_box", fn(BID $id) => 
new DyedShulkerBox($id, 
"Dyed Shulker Box", $shulkerBoxBreakInfo), TileShulkerBox::class);
 
 1305        self::register(
"stained_glass", fn(BID $id) => 
new StainedGlass($id, 
"Stained Glass", $glassBreakInfo));
 
 1306        self::register(
"stained_glass_pane", fn(BID $id) => 
new StainedGlassPane($id, 
"Stained Glass Pane", $glassBreakInfo));
 
 1307        self::register(
"stained_clay", fn(BID $id) => 
new StainedHardenedClay($id, 
"Stained Clay", 
new Info(BreakInfo::pickaxe(1.25, ToolTier::WOOD, 6.25))));
 
 1308        self::register(
"stained_hardened_glass", fn(BID $id) => 
new StainedHardenedGlass($id, 
"Stained Hardened Glass", $hardenedGlassBreakInfo));
 
 1309        self::register(
"stained_hardened_glass_pane", fn(BID $id) => 
new StainedHardenedGlassPane($id, 
"Stained Hardened Glass Pane", $hardenedGlassBreakInfo));
 
 1310        self::register(
"carpet", fn(BID $id) => 
new Carpet($id, 
"Carpet", 
new Info(
new BreakInfo(0.1))));
 
 1311        self::register(
"concrete", fn(BID $id) => 
new Concrete($id, 
"Concrete", 
new Info(BreakInfo::pickaxe(1.8, ToolTier::WOOD))));
 
 1312        self::register(
"concrete_powder", fn(BID $id) => 
new ConcretePowder($id, 
"Concrete Powder", 
new Info(BreakInfo::shovel(0.5))));
 
 1313        self::register(
"wool", fn(BID $id) => 
new Wool($id, 
"Wool", 
new Info(
new class(0.8, ToolType::SHEARS) extends BreakInfo{
 
 1314            public function getBreakTime(Item $item) : float{
 
 1315                $time = parent::getBreakTime($item);
 
 1316                if($item->getBlockToolType() === ToolType::SHEARS){
 
 1324        self::register(
"end_stone_brick_wall", fn(BID $id) => 
new Wall($id, 
"End Stone Brick Wall", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 45.0))));
 
 1326        $brickWallBreakInfo = 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
 
 1327        self::register(
"cobblestone_wall", fn(BID $id) => 
new Wall($id, 
"Cobblestone Wall", $brickWallBreakInfo));
 
 1328        self::register(
"brick_wall", fn(BID $id) => 
new Wall($id, 
"Brick Wall", $brickWallBreakInfo));
 
 1329        self::register(
"mossy_cobblestone_wall", fn(BID $id) => 
new Wall($id, 
"Mossy Cobblestone Wall", $brickWallBreakInfo));
 
 1330        self::register(
"nether_brick_wall", fn(BID $id) => 
new Wall($id, 
"Nether Brick Wall", $brickWallBreakInfo));
 
 1331        self::register(
"red_nether_brick_wall", fn(BID $id) => 
new Wall($id, 
"Red Nether Brick Wall", $brickWallBreakInfo));
 
 1333        $stoneWallBreakInfo = 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
 
 1334        self::register(
"stone_brick_wall", fn(BID $id) => 
new Wall($id, 
"Stone Brick Wall", $stoneWallBreakInfo));
 
 1335        self::register(
"mossy_stone_brick_wall", fn(BID $id) => 
new Wall($id, 
"Mossy Stone Brick Wall", $stoneWallBreakInfo));
 
 1336        self::register(
"granite_wall", fn(BID $id) => 
new Wall($id, 
"Granite Wall", $stoneWallBreakInfo));
 
 1337        self::register(
"diorite_wall", fn(BID $id) => 
new Wall($id, 
"Diorite Wall", $stoneWallBreakInfo));
 
 1338        self::register(
"andesite_wall", fn(BID $id) => 
new Wall($id, 
"Andesite Wall", $stoneWallBreakInfo));
 
 1339        self::register(
"prismarine_wall", fn(BID $id) => 
new Wall($id, 
"Prismarine Wall", $stoneWallBreakInfo));
 
 1341        $sandstoneWallBreakInfo = 
new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD, 4.0));
 
 1342        self::register(
"red_sandstone_wall", fn(BID $id) => 
new Wall($id, 
"Red Sandstone Wall", $sandstoneWallBreakInfo));
 
 1343        self::register(
"sandstone_wall", fn(BID $id) => 
new Wall($id, 
"Sandstone Wall", $sandstoneWallBreakInfo));
 
 1345        self::registerElements();
 
 1347        $chemistryTableBreakInfo = 
new Info(BreakInfo::pickaxe(2.5, ToolTier::WOOD));
 
 1348        self::register(
"compound_creator", fn(BID $id) => 
new ChemistryTable($id, 
"Compound Creator", $chemistryTableBreakInfo));
 
 1349        self::register(
"element_constructor", fn(BID $id) => 
new ChemistryTable($id, 
"Element Constructor", $chemistryTableBreakInfo));
 
 1350        self::register(
"lab_table", fn(BID $id) => 
new ChemistryTable($id, 
"Lab Table", $chemistryTableBreakInfo));
 
 1351        self::register(
"material_reducer", fn(BID $id) => 
new ChemistryTable($id, 
"Material Reducer", $chemistryTableBreakInfo));
 
 1353        self::register(
"chemical_heat", fn(BID $id) => 
new ChemicalHeat($id, 
"Heat Block", $chemistryTableBreakInfo));
 
 1355        self::registerMushroomBlocks();
 
 1357        self::register(
"coral", fn(BID $id) => 
new Coral(
 
 1360            new Info(BreakInfo::instant()),
 
 1362        self::register(
"coral_fan", fn(BID $id) => 
new FloorCoralFan(
 
 1365            new Info(BreakInfo::instant()),
 
 1367        self::register(
"wall_coral_fan", fn(BID $id) => 
new WallCoralFan(
 
 1370            new Info(BreakInfo::instant()),
 
 1373        self::register(
"mangrove_roots", fn(BID $id) => 
new MangroveRoots($id, 
"Mangrove Roots", 
new Info(BreakInfo::axe(0.7))));
 
 1374        self::register(
"muddy_mangrove_roots", fn(BID $id) => 
new SimplePillar($id, 
"Muddy Mangrove Roots", 
new Info(BreakInfo::shovel(0.7), [Tags::MUD])));
 
 1375        self::register(
"froglight", fn(BID $id) => 
new Froglight($id, 
"Froglight", 
new Info(
new BreakInfo(0.3))));
 
 1376        self::register(
"sculk", fn(BID $id) => 
new Sculk($id, 
"Sculk", 
new Info(
new BreakInfo(0.2, ToolType::HOE))));
 
 1377        self::register(
"reinforced_deepslate", fn(BID $id) => 
new class($id, 
"Reinforced Deepslate", 
new Info(
new BreakInfo(55.0, ToolType::NONE, 0, 6000.0))) extends Opaque{
 
 1378            public function getDropsForCompatibleTool(Item $item) : array{
 
 1382        self::register(
"cactus_flower", fn(BID $id) => 
new CactusFlower($id, 
"Cactus Flower", 
new Info(BreakInfo::instant())));
 
 1384        self::registerBlocksR13();
 
 1385        self::registerBlocksR14();
 
 1386        self::registerBlocksR16();
 
 1387        self::registerBlocksR17();
 
 1388        self::registerBlocksR18();
 
 1389        self::registerMudBlocks();
 
 1390        self::registerResinBlocks();
 
 1391        self::registerTuffBlocks();
 
 1393        self::registerCraftingTables();
 
 1394        self::registerChorusBlocks();
 
 1395        self::registerOres();
 
 1396        self::registerWoodenBlocks();
 
 1397        self::registerCauldronBlocks();
 
 1400    private static function registerWoodenBlocks() : void{
 
 1401        $planksBreakInfo = new Info(BreakInfo::axe(2.0, null, 15.0));
 
 1402        $signBreakInfo = 
new Info(BreakInfo::axe(1.0));
 
 1403        $hangingSignBreakInfo = 
new Info(BreakInfo::axe(1.0), [Tags::HANGING_SIGN]);
 
 1404        $logBreakInfo = 
new Info(BreakInfo::axe(2.0));
 
 1405        $woodenDoorBreakInfo = 
new Info(BreakInfo::axe(3.0, 
null, 15.0));
 
 1406        $woodenButtonBreakInfo = 
new Info(BreakInfo::axe(0.5));
 
 1407        $woodenPressurePlateBreakInfo = 
new Info(BreakInfo::axe(0.5));
 
 1409        foreach(WoodType::cases() as $woodType){
 
 1410            $name = $woodType->getDisplayName();
 
 1411            $idName = fn(
string $suffix) => strtolower($woodType->name) . 
"_" . $suffix;
 
 1413            self::register($idName(mb_strtolower($woodType->getStandardLogSuffix() ?? 
"log", 
'US-ASCII')), fn(BID $id) => 
new Wood($id, $name . 
" " . ($woodType->getStandardLogSuffix() ?? 
"Log"), $logBreakInfo, $woodType));
 
 1414            self::register($idName(mb_strtolower($woodType->getAllSidedLogSuffix() ?? 
"wood", 
'US-ASCII')), fn(BID $id) => 
new Wood($id, $name . 
" " . ($woodType->getAllSidedLogSuffix() ?? 
"Wood"), $logBreakInfo, $woodType));
 
 1416            self::register($idName(
"planks"), fn(BID $id) => 
new Planks($id, $name . 
" Planks", $planksBreakInfo, $woodType));
 
 1417            self::register($idName(
"fence"), fn(BID $id) => 
new WoodenFence($id, $name . 
" Fence", $planksBreakInfo, $woodType));
 
 1418            self::register($idName(
"slab"), fn(BID $id) => 
new WoodenSlab($id, $name, $planksBreakInfo, $woodType));
 
 1420            self::register($idName(
"fence_gate"), fn(BID $id) => 
new FenceGate($id, $name . 
" Fence Gate", $planksBreakInfo, $woodType));
 
 1421            self::register($idName(
"stairs"), fn(BID $id) => 
new WoodenStairs($id, $name . 
" Stairs", $planksBreakInfo, $woodType));
 
 1422            self::register($idName(
"door"), fn(BID $id) => 
new WoodenDoor($id, $name . 
" Door", $woodenDoorBreakInfo, $woodType));
 
 1424            self::register($idName(
"button"), fn(BID $id) => 
new WoodenButton($id, $name . 
" Button", $woodenButtonBreakInfo, $woodType));
 
 1425            self::register($idName(
"pressure_plate"), fn(BID $id) => 
new WoodenPressurePlate($id, $name . 
" Pressure Plate", $woodenPressurePlateBreakInfo, $woodType, 20));
 
 1426            self::register($idName(
"trapdoor"), fn(BID $id) => 
new WoodenTrapdoor($id, $name . 
" Trapdoor", $woodenDoorBreakInfo, $woodType));
 
 1428            $signAsItem = match($woodType){
 
 1429                WoodType::OAK => VanillaItems::OAK_SIGN(...),
 
 1430                WoodType::SPRUCE => VanillaItems::SPRUCE_SIGN(...),
 
 1431                WoodType::BIRCH => VanillaItems::BIRCH_SIGN(...),
 
 1432                WoodType::JUNGLE => VanillaItems::JUNGLE_SIGN(...),
 
 1433                WoodType::ACACIA => VanillaItems::ACACIA_SIGN(...),
 
 1434                WoodType::DARK_OAK => VanillaItems::DARK_OAK_SIGN(...),
 
 1435                WoodType::MANGROVE => VanillaItems::MANGROVE_SIGN(...),
 
 1436                WoodType::CRIMSON => VanillaItems::CRIMSON_SIGN(...),
 
 1437                WoodType::WARPED => VanillaItems::WARPED_SIGN(...),
 
 1438                WoodType::CHERRY => VanillaItems::CHERRY_SIGN(...),
 
 1439                WoodType::PALE_OAK => VanillaItems::PALE_OAK_SIGN(...),
 
 1441            self::register($idName(
"sign"), fn(BID $id) => 
new FloorSign($id, $name . 
" Sign", $signBreakInfo, $woodType, $signAsItem), TileSign::class);
 
 1442            self::register($idName(
"wall_sign"), fn(BID $id) => 
new WallSign($id, $name . 
" Wall Sign", $signBreakInfo, $woodType, $signAsItem), TileSign::class);
 
 1444            $hangingSignAsItem = match($woodType){
 
 1445                WoodType::OAK => VanillaItems::OAK_HANGING_SIGN(...),
 
 1446                WoodType::SPRUCE => VanillaItems::SPRUCE_HANGING_SIGN(...),
 
 1447                WoodType::BIRCH => VanillaItems::BIRCH_HANGING_SIGN(...),
 
 1448                WoodType::JUNGLE => VanillaItems::JUNGLE_HANGING_SIGN(...),
 
 1449                WoodType::ACACIA => VanillaItems::ACACIA_HANGING_SIGN(...),
 
 1450                WoodType::DARK_OAK => VanillaItems::DARK_OAK_HANGING_SIGN(...),
 
 1451                WoodType::MANGROVE => VanillaItems::MANGROVE_HANGING_SIGN(...),
 
 1452                WoodType::CRIMSON => VanillaItems::CRIMSON_HANGING_SIGN(...),
 
 1453                WoodType::WARPED => VanillaItems::WARPED_HANGING_SIGN(...),
 
 1454                WoodType::CHERRY => VanillaItems::CHERRY_HANGING_SIGN(...),
 
 1455                WoodType::PALE_OAK => VanillaItems::PALE_OAK_HANGING_SIGN(...),
 
 1457            self::register($idName(
"ceiling_center_hanging_sign"), fn(BID $id) => 
new CeilingCenterHangingSign($id, $name . 
" Center Hanging Sign", $hangingSignBreakInfo, $woodType, $hangingSignAsItem), TileHangingSign::class);
 
 1458            self::register($idName(
"ceiling_edges_hanging_sign"), fn(BID $id) => 
new CeilingEdgesHangingSign($id, $name . 
" Edges Hanging Sign", $hangingSignBreakInfo, $woodType, $hangingSignAsItem), TileHangingSign::class);
 
 1459            self::register($idName(
"wall_hanging_sign"), fn(BID $id) => 
new WallHangingSign($id, $name . 
" Wall Hanging Sign", $hangingSignBreakInfo, $woodType, $hangingSignAsItem), TileHangingSign::class);
 
 1463    private static function registerMushroomBlocks() : void{
 
 1464        $mushroomBlockBreakInfo = new Info(BreakInfo::axe(0.2));
 
 1466        self::register(
"brown_mushroom_block", fn(BID $id) => 
new BrownMushroomBlock($id, 
"Brown Mushroom Block", $mushroomBlockBreakInfo));
 
 1467        self::register(
"red_mushroom_block", fn(BID $id) => 
new RedMushroomBlock($id, 
"Red Mushroom Block", $mushroomBlockBreakInfo));
 
 1470        self::register(
"mushroom_stem", fn(BID $id) => 
new MushroomStem($id, 
"Mushroom Stem", $mushroomBlockBreakInfo));
 
 1471        self::register(
"all_sided_mushroom_stem", fn(BID $id) => 
new MushroomStem($id, 
"All Sided Mushroom Stem", $mushroomBlockBreakInfo));
 
 1474    private static function registerElements() : void{
 
 1475        $instaBreak = new Info(BreakInfo::instant());
 
 1476        self::register(
"element_zero", fn(BID $id) => 
new Opaque($id, 
"???", $instaBreak));
 
 1478        $register = fn(
string $name, 
string $displayName, 
string $symbol, 
int $atomicWeight, 
int $group) =>
 
 1479            self::register(
"element_$name", fn(BID $id) => 
new Element($id, $displayName, $instaBreak, $symbol, $atomicWeight, $group));
 
 1481        $register(
"hydrogen", 
"Hydrogen", 
"h", 1, 5);
 
 1482        $register(
"helium", 
"Helium", 
"he", 2, 7);
 
 1483        $register(
"lithium", 
"Lithium", 
"li", 3, 0);
 
 1484        $register(
"beryllium", 
"Beryllium", 
"be", 4, 1);
 
 1485        $register(
"boron", 
"Boron", 
"b", 5, 4);
 
 1486        $register(
"carbon", 
"Carbon", 
"c", 6, 5);
 
 1487        $register(
"nitrogen", 
"Nitrogen", 
"n", 7, 5);
 
 1488        $register(
"oxygen", 
"Oxygen", 
"o", 8, 5);
 
 1489        $register(
"fluorine", 
"Fluorine", 
"f", 9, 6);
 
 1490        $register(
"neon", 
"Neon", 
"ne", 10, 7);
 
 1491        $register(
"sodium", 
"Sodium", 
"na", 11, 0);
 
 1492        $register(
"magnesium", 
"Magnesium", 
"mg", 12, 1);
 
 1493        $register(
"aluminum", 
"Aluminum", 
"al", 13, 3);
 
 1494        $register(
"silicon", 
"Silicon", 
"si", 14, 4);
 
 1495        $register(
"phosphorus", 
"Phosphorus", 
"p", 15, 5);
 
 1496        $register(
"sulfur", 
"Sulfur", 
"s", 16, 5);
 
 1497        $register(
"chlorine", 
"Chlorine", 
"cl", 17, 6);
 
 1498        $register(
"argon", 
"Argon", 
"ar", 18, 7);
 
 1499        $register(
"potassium", 
"Potassium", 
"k", 19, 0);
 
 1500        $register(
"calcium", 
"Calcium", 
"ca", 20, 1);
 
 1501        $register(
"scandium", 
"Scandium", 
"sc", 21, 2);
 
 1502        $register(
"titanium", 
"Titanium", 
"ti", 22, 2);
 
 1503        $register(
"vanadium", 
"Vanadium", 
"v", 23, 2);
 
 1504        $register(
"chromium", 
"Chromium", 
"cr", 24, 2);
 
 1505        $register(
"manganese", 
"Manganese", 
"mn", 25, 2);
 
 1506        $register(
"iron", 
"Iron", 
"fe", 26, 2);
 
 1507        $register(
"cobalt", 
"Cobalt", 
"co", 27, 2);
 
 1508        $register(
"nickel", 
"Nickel", 
"ni", 28, 2);
 
 1509        $register(
"copper", 
"Copper", 
"cu", 29, 2);
 
 1510        $register(
"zinc", 
"Zinc", 
"zn", 30, 2);
 
 1511        $register(
"gallium", 
"Gallium", 
"ga", 31, 3);
 
 1512        $register(
"germanium", 
"Germanium", 
"ge", 32, 4);
 
 1513        $register(
"arsenic", 
"Arsenic", 
"as", 33, 4);
 
 1514        $register(
"selenium", 
"Selenium", 
"se", 34, 5);
 
 1515        $register(
"bromine", 
"Bromine", 
"br", 35, 6);
 
 1516        $register(
"krypton", 
"Krypton", 
"kr", 36, 7);
 
 1517        $register(
"rubidium", 
"Rubidium", 
"rb", 37, 0);
 
 1518        $register(
"strontium", 
"Strontium", 
"sr", 38, 1);
 
 1519        $register(
"yttrium", 
"Yttrium", 
"y", 39, 2);
 
 1520        $register(
"zirconium", 
"Zirconium", 
"zr", 40, 2);
 
 1521        $register(
"niobium", 
"Niobium", 
"nb", 41, 2);
 
 1522        $register(
"molybdenum", 
"Molybdenum", 
"mo", 42, 2);
 
 1523        $register(
"technetium", 
"Technetium", 
"tc", 43, 2);
 
 1524        $register(
"ruthenium", 
"Ruthenium", 
"ru", 44, 2);
 
 1525        $register(
"rhodium", 
"Rhodium", 
"rh", 45, 2);
 
 1526        $register(
"palladium", 
"Palladium", 
"pd", 46, 2);
 
 1527        $register(
"silver", 
"Silver", 
"ag", 47, 2);
 
 1528        $register(
"cadmium", 
"Cadmium", 
"cd", 48, 2);
 
 1529        $register(
"indium", 
"Indium", 
"in", 49, 3);
 
 1530        $register(
"tin", 
"Tin", 
"sn", 50, 3);
 
 1531        $register(
"antimony", 
"Antimony", 
"sb", 51, 4);
 
 1532        $register(
"tellurium", 
"Tellurium", 
"te", 52, 4);
 
 1533        $register(
"iodine", 
"Iodine", 
"i", 53, 6);
 
 1534        $register(
"xenon", 
"Xenon", 
"xe", 54, 7);
 
 1535        $register(
"cesium", 
"Cesium", 
"cs", 55, 0);
 
 1536        $register(
"barium", 
"Barium", 
"ba", 56, 1);
 
 1537        $register(
"lanthanum", 
"Lanthanum", 
"la", 57, 8);
 
 1538        $register(
"cerium", 
"Cerium", 
"ce", 58, 8);
 
 1539        $register(
"praseodymium", 
"Praseodymium", 
"pr", 59, 8);
 
 1540        $register(
"neodymium", 
"Neodymium", 
"nd", 60, 8);
 
 1541        $register(
"promethium", 
"Promethium", 
"pm", 61, 8);
 
 1542        $register(
"samarium", 
"Samarium", 
"sm", 62, 8);
 
 1543        $register(
"europium", 
"Europium", 
"eu", 63, 8);
 
 1544        $register(
"gadolinium", 
"Gadolinium", 
"gd", 64, 8);
 
 1545        $register(
"terbium", 
"Terbium", 
"tb", 65, 8);
 
 1546        $register(
"dysprosium", 
"Dysprosium", 
"dy", 66, 8);
 
 1547        $register(
"holmium", 
"Holmium", 
"ho", 67, 8);
 
 1548        $register(
"erbium", 
"Erbium", 
"er", 68, 8);
 
 1549        $register(
"thulium", 
"Thulium", 
"tm", 69, 8);
 
 1550        $register(
"ytterbium", 
"Ytterbium", 
"yb", 70, 8);
 
 1551        $register(
"lutetium", 
"Lutetium", 
"lu", 71, 8);
 
 1552        $register(
"hafnium", 
"Hafnium", 
"hf", 72, 2);
 
 1553        $register(
"tantalum", 
"Tantalum", 
"ta", 73, 2);
 
 1554        $register(
"tungsten", 
"Tungsten", 
"w", 74, 2);
 
 1555        $register(
"rhenium", 
"Rhenium", 
"re", 75, 2);
 
 1556        $register(
"osmium", 
"Osmium", 
"os", 76, 2);
 
 1557        $register(
"iridium", 
"Iridium", 
"ir", 77, 2);
 
 1558        $register(
"platinum", 
"Platinum", 
"pt", 78, 2);
 
 1559        $register(
"gold", 
"Gold", 
"au", 79, 2);
 
 1560        $register(
"mercury", 
"Mercury", 
"hg", 80, 2);
 
 1561        $register(
"thallium", 
"Thallium", 
"tl", 81, 3);
 
 1562        $register(
"lead", 
"Lead", 
"pb", 82, 3);
 
 1563        $register(
"bismuth", 
"Bismuth", 
"bi", 83, 3);
 
 1564        $register(
"polonium", 
"Polonium", 
"po", 84, 4);
 
 1565        $register(
"astatine", 
"Astatine", 
"at", 85, 6);
 
 1566        $register(
"radon", 
"Radon", 
"rn", 86, 7);
 
 1567        $register(
"francium", 
"Francium", 
"fr", 87, 0);
 
 1568        $register(
"radium", 
"Radium", 
"ra", 88, 1);
 
 1569        $register(
"actinium", 
"Actinium", 
"ac", 89, 9);
 
 1570        $register(
"thorium", 
"Thorium", 
"th", 90, 9);
 
 1571        $register(
"protactinium", 
"Protactinium", 
"pa", 91, 9);
 
 1572        $register(
"uranium", 
"Uranium", 
"u", 92, 9);
 
 1573        $register(
"neptunium", 
"Neptunium", 
"np", 93, 9);
 
 1574        $register(
"plutonium", 
"Plutonium", 
"pu", 94, 9);
 
 1575        $register(
"americium", 
"Americium", 
"am", 95, 9);
 
 1576        $register(
"curium", 
"Curium", 
"cm", 96, 9);
 
 1577        $register(
"berkelium", 
"Berkelium", 
"bk", 97, 9);
 
 1578        $register(
"californium", 
"Californium", 
"cf", 98, 9);
 
 1579        $register(
"einsteinium", 
"Einsteinium", 
"es", 99, 9);
 
 1580        $register(
"fermium", 
"Fermium", 
"fm", 100, 9);
 
 1581        $register(
"mendelevium", 
"Mendelevium", 
"md", 101, 9);
 
 1582        $register(
"nobelium", 
"Nobelium", 
"no", 102, 9);
 
 1583        $register(
"lawrencium", 
"Lawrencium", 
"lr", 103, 9);
 
 1584        $register(
"rutherfordium", 
"Rutherfordium", 
"rf", 104, 2);
 
 1585        $register(
"dubnium", 
"Dubnium", 
"db", 105, 2);
 
 1586        $register(
"seaborgium", 
"Seaborgium", 
"sg", 106, 2);
 
 1587        $register(
"bohrium", 
"Bohrium", 
"bh", 107, 2);
 
 1588        $register(
"hassium", 
"Hassium", 
"hs", 108, 2);
 
 1589        $register(
"meitnerium", 
"Meitnerium", 
"mt", 109, 2);
 
 1590        $register(
"darmstadtium", 
"Darmstadtium", 
"ds", 110, 2);
 
 1591        $register(
"roentgenium", 
"Roentgenium", 
"rg", 111, 2);
 
 1592        $register(
"copernicium", 
"Copernicium", 
"cn", 112, 2);
 
 1593        $register(
"nihonium", 
"Nihonium", 
"nh", 113, 3);
 
 1594        $register(
"flerovium", 
"Flerovium", 
"fl", 114, 3);
 
 1595        $register(
"moscovium", 
"Moscovium", 
"mc", 115, 3);
 
 1596        $register(
"livermorium", 
"Livermorium", 
"lv", 116, 3);
 
 1597        $register(
"tennessine", 
"Tennessine", 
"ts", 117, 6);
 
 1598        $register(
"oganesson", 
"Oganesson", 
"og", 118, 7);
 
 1601    private static function registerOres() : void{
 
 1602        $stoneOreBreakInfo = fn(
ToolTier $toolTier) => new Info(BreakInfo::pickaxe(3.0, $toolTier));
 
 1603        self::register(
"coal_ore", fn(BID $id) => 
new CoalOre($id, 
"Coal Ore", $stoneOreBreakInfo(ToolTier::WOOD)));
 
 1604        self::register(
"copper_ore", fn(BID $id) => 
new CopperOre($id, 
"Copper Ore", $stoneOreBreakInfo(ToolTier::STONE)));
 
 1605        self::register(
"diamond_ore", fn(BID $id) => 
new DiamondOre($id, 
"Diamond Ore", $stoneOreBreakInfo(ToolTier::IRON)));
 
 1606        self::register(
"emerald_ore", fn(BID $id) => 
new EmeraldOre($id, 
"Emerald Ore", $stoneOreBreakInfo(ToolTier::IRON)));
 
 1607        self::register(
"gold_ore", fn(BID $id) => 
new GoldOre($id, 
"Gold Ore", $stoneOreBreakInfo(ToolTier::IRON)));
 
 1608        self::register(
"iron_ore", fn(BID $id) => 
new IronOre($id, 
"Iron Ore", $stoneOreBreakInfo(ToolTier::STONE)));
 
 1609        self::register(
"lapis_lazuli_ore", fn(BID $id) => 
new LapisOre($id, 
"Lapis Lazuli Ore", $stoneOreBreakInfo(ToolTier::STONE)));
 
 1610        self::register(
"redstone_ore", fn(BID $id) => 
new RedstoneOre($id, 
"Redstone Ore", $stoneOreBreakInfo(ToolTier::IRON)));
 
 1612        $deepslateOreBreakInfo = fn(ToolTier $toolTier) => 
new Info(BreakInfo::pickaxe(4.5, $toolTier, 15.0));
 
 1613        self::register(
"deepslate_coal_ore", fn(BID $id) => 
new CoalOre($id, 
"Deepslate Coal Ore", $deepslateOreBreakInfo(ToolTier::WOOD)));
 
 1614        self::register(
"deepslate_copper_ore", fn(BID $id) => 
new CopperOre($id, 
"Deepslate Copper Ore", $deepslateOreBreakInfo(ToolTier::STONE)));
 
 1615        self::register(
"deepslate_diamond_ore", fn(BID $id) => 
new DiamondOre($id, 
"Deepslate Diamond Ore", $deepslateOreBreakInfo(ToolTier::IRON)));
 
 1616        self::register(
"deepslate_emerald_ore", fn(BID $id) => 
new EmeraldOre($id, 
"Deepslate Emerald Ore", $deepslateOreBreakInfo(ToolTier::IRON)));
 
 1617        self::register(
"deepslate_gold_ore", fn(BID $id) => 
new GoldOre($id, 
"Deepslate Gold Ore", $deepslateOreBreakInfo(ToolTier::IRON)));
 
 1618        self::register(
"deepslate_iron_ore", fn(BID $id) => 
new IronOre($id, 
"Deepslate Iron Ore", $deepslateOreBreakInfo(ToolTier::STONE)));
 
 1619        self::register(
"deepslate_lapis_lazuli_ore", fn(BID $id) => 
new LapisOre($id, 
"Deepslate Lapis Lazuli Ore", $deepslateOreBreakInfo(ToolTier::STONE)));
 
 1620        self::register(
"deepslate_redstone_ore", fn(BID $id) => 
new RedstoneOre($id, 
"Deepslate Redstone Ore", $deepslateOreBreakInfo(ToolTier::IRON)));
 
 1622        $netherrackOreBreakInfo = 
new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD));
 
 1623        self::register(
"nether_quartz_ore", fn(BID $id) => 
new NetherQuartzOre($id, 
"Nether Quartz Ore", $netherrackOreBreakInfo));
 
 1624        self::register(
"nether_gold_ore", fn(BID $id) => 
new NetherGoldOre($id, 
"Nether Gold Ore", $netherrackOreBreakInfo));
 
 1627    private static function registerCraftingTables() : void{
 
 1629        $craftingBlockBreakInfo = new Info(BreakInfo::axe(2.5));
 
 1630        self::register(
"cartography_table", fn(BID $id) => 
new CartographyTable($id, 
"Cartography Table", $craftingBlockBreakInfo));
 
 1631        self::register(
"crafting_table", fn(BID $id) => 
new CraftingTable($id, 
"Crafting Table", $craftingBlockBreakInfo));
 
 1632        self::register(
"fletching_table", fn(BID $id) => 
new FletchingTable($id, 
"Fletching Table", $craftingBlockBreakInfo));
 
 1633        self::register(
"loom", fn(BID $id) => 
new Loom($id, 
"Loom", $craftingBlockBreakInfo));
 
 1634        self::register(
"smithing_table", fn(BID $id) => 
new SmithingTable($id, 
"Smithing Table", $craftingBlockBreakInfo));
 
 1637    private static function registerChorusBlocks() : void{
 
 1638        $chorusBlockBreakInfo = new Info(BreakInfo::axe(0.4));
 
 1639        self::register(
"chorus_plant", fn(BID $id) => 
new ChorusPlant($id, 
"Chorus Plant", $chorusBlockBreakInfo));
 
 1640        self::register(
"chorus_flower", fn(BID $id) => 
new ChorusFlower($id, 
"Chorus Flower", $chorusBlockBreakInfo));
 
 1643    private static function registerBlocksR13() : void{
 
 1644        self::register(
"light", fn(BID $id) => new Light($id, 
"Light Block", new Info(BreakInfo::indestructible())));
 
 1645        self::register(
"wither_rose", fn(BID $id) => 
new WitherRose($id, 
"Wither Rose", 
new Info(BreakInfo::instant(), [Tags::POTTABLE_PLANTS])));
 
 1648    private static function registerBlocksR14() : void{
 
 1649        self::register(
"honeycomb", fn(BID $id) => new Opaque($id, 
"Honeycomb Block", new Info(new BreakInfo(0.6))));
 
 1652    private static function registerBlocksR16() : void{
 
 1654        $slabBreakInfo = new Info(BreakInfo::pickaxe(2.0, 
ToolTier::WOOD, 30.0));
 
 1656        self::register(
"ancient_debris", fn(BID $id) => 
new class($id, 
"Ancient Debris", 
new Info(BreakInfo::pickaxe(30, ToolTier::DIAMOND, 6000.0))) extends Opaque{
 
 1657            public function isFireProofAsItem() : bool{ return true; }
 
 1659        $netheriteBreakInfo = 
new Info(BreakInfo::pickaxe(50, ToolTier::DIAMOND, 6000.0));
 
 1660        self::register(
"netherite", fn(BID $id) => 
new class($id, 
"Netherite Block", $netheriteBreakInfo) extends Opaque{
 
 1661            public function isFireProofAsItem() : bool{ return true; }
 
 1664        $basaltBreakInfo = 
new Info(BreakInfo::pickaxe(1.25, ToolTier::WOOD, 21.0));
 
 1665        self::register(
"basalt", fn(BID $id) => 
new SimplePillar($id, 
"Basalt", $basaltBreakInfo));
 
 1666        self::register(
"polished_basalt", fn(BID $id) => 
new SimplePillar($id, 
"Polished Basalt", $basaltBreakInfo));
 
 1667        self::register(
"smooth_basalt", fn(BID $id) => 
new Opaque($id, 
"Smooth Basalt", $basaltBreakInfo));
 
 1669        $blackstoneBreakInfo = 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
 
 1670        self::register(
"blackstone", fn(BID $id) => 
new Opaque($id, 
"Blackstone", $blackstoneBreakInfo));
 
 1671        self::register(
"blackstone_slab", fn(BID $id) => 
new Slab($id, 
"Blackstone", $slabBreakInfo));
 
 1672        self::register(
"blackstone_stairs", fn(BID $id) => 
new Stair($id, 
"Blackstone Stairs", $blackstoneBreakInfo));
 
 1673        self::register(
"blackstone_wall", fn(BID $id) => 
new Wall($id, 
"Blackstone Wall", $blackstoneBreakInfo));
 
 1675        self::register(
"gilded_blackstone", fn(BID $id) => 
new GildedBlackstone($id, 
"Gilded Blackstone", $blackstoneBreakInfo));
 
 1677        $polishedBlackstoneBreakInfo = 
new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
 
 1678        $prefix = fn(
string $thing) => 
"Polished Blackstone" . ($thing !== 
"" ? 
" $thing" : 
"");
 
 1679        self::register(
"polished_blackstone", fn(BID $id) => 
new Opaque($id, $prefix(
""), $polishedBlackstoneBreakInfo));
 
 1680        self::register(
"polished_blackstone_button", fn(BID $id) => 
new StoneButton($id, $prefix(
"Button"), 
new Info(BreakInfo::pickaxe(0.5))));
 
 1681        self::register(
"polished_blackstone_pressure_plate", fn(BID $id) => 
new StonePressurePlate($id, $prefix(
"Pressure Plate"), 
new Info(BreakInfo::pickaxe(0.5)), 20));
 
 1682        self::register(
"polished_blackstone_slab", fn(BID $id) => 
new Slab($id, $prefix(
""), $slabBreakInfo));
 
 1683        self::register(
"polished_blackstone_stairs", fn(BID $id) => 
new Stair($id, $prefix(
"Stairs"), $polishedBlackstoneBreakInfo));
 
 1684        self::register(
"polished_blackstone_wall", fn(BID $id) => 
new Wall($id, $prefix(
"Wall"), $polishedBlackstoneBreakInfo));
 
 1685        self::register(
"chiseled_polished_blackstone", fn(BID $id) => 
new Opaque($id, 
"Chiseled Polished Blackstone", $blackstoneBreakInfo));
 
 1687        $prefix = fn(
string $thing) => 
"Polished Blackstone Brick" . ($thing !== 
"" ? 
" $thing" : 
"");
 
 1688        self::register(
"polished_blackstone_bricks", fn(BID $id) => 
new Opaque($id, 
"Polished Blackstone Bricks", $blackstoneBreakInfo));
 
 1689        self::register(
"polished_blackstone_brick_slab", fn(BID $id) => 
new Slab($id, 
"Polished Blackstone Brick", $slabBreakInfo));
 
 1690        self::register(
"polished_blackstone_brick_stairs", fn(BID $id) => 
new Stair($id, $prefix(
"Stairs"), $blackstoneBreakInfo));
 
 1691        self::register(
"polished_blackstone_brick_wall", fn(BID $id) => 
new Wall($id, $prefix(
"Wall"), $blackstoneBreakInfo));
 
 1692        self::register(
"cracked_polished_blackstone_bricks", fn(BID $id) => 
new Opaque($id, 
"Cracked Polished Blackstone Bricks", $blackstoneBreakInfo));
 
 1694        self::register(
"soul_torch", fn(BID $id) => 
new Torch($id, 
"Soul Torch", 
new Info(BreakInfo::instant())));
 
 1695        self::register(
"soul_fire", fn(BID $id) => 
new SoulFire($id, 
"Soul Fire", 
new Info(BreakInfo::instant(), [Tags::FIRE])));
 
 1697        self::register(
"soul_soil", fn(BID $id) => 
new Opaque($id, 
"Soul Soil", 
new Info(BreakInfo::shovel(0.5))));
 
 1699        self::register(
"shroomlight", fn(BID $id) => 
new class($id, 
"Shroomlight", 
new Info(
new BreakInfo(1.0, ToolType::HOE))) extends Opaque{
 
 1700            public function getLightLevel() : int{ return 15; }
 
 1703        self::register(
"warped_wart_block", fn(BID $id) => 
new Opaque($id, 
"Warped Wart Block", 
new Info(
new BreakInfo(1.0, ToolType::HOE))));
 
 1704        self::register(
"crying_obsidian", fn(BID $id) => 
new class($id, 
"Crying Obsidian", 
new Info(BreakInfo::pickaxe(35.0 , ToolTier::DIAMOND, 6000.0))) extends Opaque{
 
 1705            public function getLightLevel() : int{ return 10;}
 
 1708        self::register(
"twisting_vines", fn(BID $id) => 
new NetherVines($id, 
"Twisting Vines", 
new Info(BreakInfo::instant()), Facing::UP));
 
 1709        self::register(
"weeping_vines", fn(BID $id) => 
new NetherVines($id, 
"Weeping Vines", 
new Info(BreakInfo::instant()), Facing::DOWN));
 
 1711        $netherRootsInfo = 
new Info(BreakInfo::instant(), [Tags::POTTABLE_PLANTS]);
 
 1712        self::register(
"crimson_roots", fn(BID $id) => 
new NetherRoots($id, 
"Crimson Roots", $netherRootsInfo));
 
 1713        self::register(
"warped_roots", fn(BID $id) => 
new NetherRoots($id, 
"Warped Roots", $netherRootsInfo));
 
 1715        self::register(
"chain", fn(BID $id) => 
new Chain($id, 
"Chain", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 30.0))));
 
 1716        self::register(
"copper_chain", fn(BID $id) => 
new CopperChain($id, 
"Copper Chain", 
new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 30.0))));
 
 1718        self::register(
"respawn_anchor", fn(BID $id) => 
new RespawnAnchor($id, 
"Respawn Anchor", 
new Info(BreakInfo::pickaxe(50.0, ToolTier::DIAMOND, 6000.0))));
 
 1721    private static function registerBlocksR17() : void{
 
 1723        $amethystInfo = new Info(BreakInfo::pickaxe(1.5, 
ToolTier::WOOD));
 
 1724        self::register(
"amethyst", fn(BID $id) => 
new class($id, 
"Amethyst", $amethystInfo) extends Opaque{
 
 1727        self::register(
"budding_amethyst", fn(BID $id) => 
new BuddingAmethyst($id, 
"Budding Amethyst", $amethystInfo));
 
 1728        self::register(
"amethyst_cluster", fn(BID $id) => 
new AmethystCluster($id, 
"Amethyst Cluster", $amethystInfo));
 
 1730        self::register(
"calcite", fn(BID $id) => 
new Opaque($id, 
"Calcite", 
new Info(BreakInfo::pickaxe(0.75, ToolTier::WOOD))));
 
 1732        self::register(
"raw_copper", fn(BID $id) => 
new Opaque($id, 
"Raw Copper Block", 
new Info(BreakInfo::pickaxe(5, ToolTier::STONE, 30.0))));
 
 1733        self::register(
"raw_gold", fn(BID $id) => 
new Opaque($id, 
"Raw Gold Block", 
new Info(BreakInfo::pickaxe(5, ToolTier::IRON, 30.0))));
 
 1734        self::register(
"raw_iron", fn(BID $id) => 
new Opaque($id, 
"Raw Iron Block", 
new Info(BreakInfo::pickaxe(5, ToolTier::STONE, 30.0))));
 
 1736        $deepslateBreakInfo = 
new Info(BreakInfo::pickaxe(3, ToolTier::WOOD, 30.0));
 
 1737        self::register(
"deepslate", fn(BID $id) => 
new class($id, 
"Deepslate", $deepslateBreakInfo) extends SimplePillar{
 
 1738            public function getDropsForCompatibleTool(Item $item) : array{
 
 1739                return [VanillaBlocks::COBBLED_DEEPSLATE()->asItem()];
 
 1742            public function isAffectedBySilkTouch() : bool{
 
 1748        self::register(
"chiseled_deepslate", fn(BID $id) => 
new Opaque($id, 
"Chiseled Deepslate", 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0))));
 
 1750        $deepslateBrickBreakInfo = 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0));
 
 1751        self::register(
"deepslate_bricks", fn(BID $id) => 
new Opaque($id, 
"Deepslate Bricks", $deepslateBrickBreakInfo));
 
 1752        self::register(
"deepslate_brick_slab", fn(BID $id) => 
new Slab($id, 
"Deepslate Brick", $deepslateBrickBreakInfo));
 
 1753        self::register(
"deepslate_brick_stairs", fn(BID $id) => 
new Stair($id, 
"Deepslate Brick Stairs", $deepslateBrickBreakInfo));
 
 1754        self::register(
"deepslate_brick_wall", fn(BID $id) => 
new Wall($id, 
"Deepslate Brick Wall", $deepslateBrickBreakInfo));
 
 1755        self::register(
"cracked_deepslate_bricks", fn(BID $id) => 
new Opaque($id, 
"Cracked Deepslate Bricks", $deepslateBrickBreakInfo));
 
 1757        $deepslateTilesBreakInfo = 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0));
 
 1758        self::register(
"deepslate_tiles", fn(BID $id) => 
new Opaque($id, 
"Deepslate Tiles", $deepslateTilesBreakInfo));
 
 1759        self::register(
"deepslate_tile_slab", fn(BID $id) => 
new Slab($id, 
"Deepslate Tile", $deepslateTilesBreakInfo));
 
 1760        self::register(
"deepslate_tile_stairs", fn(BID $id) => 
new Stair($id, 
"Deepslate Tile Stairs", $deepslateTilesBreakInfo));
 
 1761        self::register(
"deepslate_tile_wall", fn(BID $id) => 
new Wall($id, 
"Deepslate Tile Wall", $deepslateTilesBreakInfo));
 
 1762        self::register(
"cracked_deepslate_tiles", fn(BID $id) => 
new Opaque($id, 
"Cracked Deepslate Tiles", $deepslateTilesBreakInfo));
 
 1764        $cobbledDeepslateBreakInfo = 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0));
 
 1765        self::register(
"cobbled_deepslate", fn(BID $id) => 
new Opaque($id, 
"Cobbled Deepslate", $cobbledDeepslateBreakInfo));
 
 1766        self::register(
"cobbled_deepslate_slab", fn(BID $id) => 
new Slab($id, 
"Cobbled Deepslate", $cobbledDeepslateBreakInfo));
 
 1767        self::register(
"cobbled_deepslate_stairs", fn(BID $id) => 
new Stair($id, 
"Cobbled Deepslate Stairs", $cobbledDeepslateBreakInfo));
 
 1768        self::register(
"cobbled_deepslate_wall", fn(BID $id) => 
new Wall($id, 
"Cobbled Deepslate Wall", $cobbledDeepslateBreakInfo));
 
 1770        $polishedDeepslateBreakInfo = 
new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0));
 
 1771        self::register(
"polished_deepslate", fn(BID $id) => 
new Opaque($id, 
"Polished Deepslate", $polishedDeepslateBreakInfo));
 
 1772        self::register(
"polished_deepslate_slab", fn(BID $id) => 
new Slab($id, 
"Polished Deepslate", $polishedDeepslateBreakInfo));
 
 1773        self::register(
"polished_deepslate_stairs", fn(BID $id) => 
new Stair($id, 
"Polished Deepslate Stairs", $polishedDeepslateBreakInfo));
 
 1774        self::register(
"polished_deepslate_wall", fn(BID $id) => 
new Wall($id, 
"Polished Deepslate Wall", $polishedDeepslateBreakInfo));
 
 1776        self::register(
"tinted_glass", fn(BID $id) => 
new TintedGlass($id, 
"Tinted Glass", 
new Info(
new BreakInfo(0.3))));
 
 1778        $copperBreakInfo = 
new Info(BreakInfo::pickaxe(3.0, ToolTier::STONE, 30.0));
 
 1779        self::register(
"lightning_rod", fn(BID $id) => 
new LightningRod($id, 
"Lightning Rod", $copperBreakInfo));
 
 1781        self::register(
"copper", fn(BID $id) => 
new Copper($id, 
"Copper Block", $copperBreakInfo));
 
 1782        self::register(
"chiseled_copper", fn(BID $id) => 
new Copper($id, 
"Chiseled Copper", $copperBreakInfo));
 
 1783        self::register(
"copper_grate", fn(BID $id) => 
new CopperGrate($id, 
"Copper Grate", $copperBreakInfo));
 
 1784        self::register(
"cut_copper", fn(BID $id) => 
new Copper($id, 
"Cut Copper Block", $copperBreakInfo));
 
 1785        self::register(
"cut_copper_slab", fn(BID $id) => 
new CopperSlab($id, 
"Cut Copper Slab", $copperBreakInfo));
 
 1786        self::register(
"cut_copper_stairs", fn(BID $id) => 
new CopperStairs($id, 
"Cut Copper Stairs", $copperBreakInfo));
 
 1787        self::register(
"copper_bulb", fn(BID $id) => 
new CopperBulb($id, 
"Copper Bulb", $copperBreakInfo));
 
 1789        self::register(
"copper_door", fn(BID $id) => 
new CopperDoor($id, 
"Copper Door", 
new Info(BreakInfo::pickaxe(3.0, blastResistance: 30.0))));
 
 1790        self::register(
"copper_trapdoor", fn(BID $id) => 
new CopperTrapdoor($id, 
"Copper Trapdoor", 
new Info(BreakInfo::pickaxe(3.0, ToolTier::STONE, 30.0))));
 
 1792        $candleBreakInfo = 
new Info(
new BreakInfo(0.1));
 
 1793        self::register(
"candle", fn(BID $id) => 
new Candle($id, 
"Candle", $candleBreakInfo));
 
 1794        self::register(
"dyed_candle", fn(BID $id) => 
new DyedCandle($id, 
"Dyed Candle", $candleBreakInfo));
 
 1797        $cakeBreakInfo = 
new Info(
new BreakInfo(0.5));
 
 1798        self::register(
"cake_with_candle", fn(BID $id) => 
new CakeWithCandle($id, 
"Cake With Candle", $cakeBreakInfo));
 
 1799        self::register(
"cake_with_dyed_candle", fn(BID $id) => 
new CakeWithDyedCandle($id, 
"Cake With Dyed Candle", $cakeBreakInfo));
 
 1801        self::register(
"hanging_roots", fn(BID $id) => 
new HangingRoots($id, 
"Hanging Roots", 
new Info(BreakInfo::instant(ToolType::SHEARS, 1))));
 
 1803        self::register(
"cave_vines", fn(BID $id) => 
new CaveVines($id, 
"Cave Vines", 
new Info(BreakInfo::instant())));
 
 1805        self::register(
"small_dripleaf", fn(BID $id) => 
new SmallDripleaf($id, 
"Small Dripleaf", 
new Info(BreakInfo::instant(ToolType::SHEARS, toolHarvestLevel: 1))));
 
 1806        self::register(
"big_dripleaf_head", fn(BID $id) => 
new BigDripleafHead($id, 
"Big Dripleaf", 
new Info(
new BreakInfo(0.1))));
 
 1807        self::register(
"big_dripleaf_stem", fn(BID $id) => 
new BigDripleafStem($id, 
"Big Dripleaf Stem", 
new Info(
new BreakInfo(0.1))));
 
 1810    private static function registerBlocksR18() : void{
 
 1811        self::register(
"spore_blossom", fn(BID $id) => new SporeBlossom($id, 
"Spore Blossom", new Info(BreakInfo::instant())));
 
 1814    private static function registerMudBlocks() : void{
 
 1815        self::register(
"mud", fn(BID $id) => new Opaque($id, 
"Mud", new Info(BreakInfo::shovel(0.5), [Tags::MUD])));
 
 1816        self::register(
"packed_mud", fn(BID $id) => 
new Opaque($id, 
"Packed Mud", 
new Info(BreakInfo::pickaxe(1.0, 
null, 15.0))));
 
 1818        $mudBricksBreakInfo = 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 15.0));
 
 1820        self::register(
"mud_bricks", fn(BID $id) => 
new Opaque($id, 
"Mud Bricks", $mudBricksBreakInfo));
 
 1821        self::register(
"mud_brick_slab", fn(BID $id) => 
new Slab($id, 
"Mud Brick", $mudBricksBreakInfo));
 
 1822        self::register(
"mud_brick_stairs", fn(BID $id) => 
new Stair($id, 
"Mud Brick Stairs", $mudBricksBreakInfo));
 
 1823        self::register(
"mud_brick_wall", fn(BID $id) => 
new Wall($id, 
"Mud Brick Wall", $mudBricksBreakInfo));
 
 1826    private static function registerResinBlocks() : void{
 
 1827        self::register(
"resin", fn(BID $id) => new Opaque($id, 
"Block of Resin", new Info(BreakInfo::instant())));
 
 1828        self::register(
"resin_clump", fn(BID $id) => 
new ResinClump($id, 
"Resin Clump", 
new Info(BreakInfo::instant())));
 
 1830        $resinBricksInfo = 
new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
 
 1831        self::register(
"resin_brick_slab", fn(BID $id) => 
new Slab($id, 
"Resin Brick", $resinBricksInfo));
 
 1832        self::register(
"resin_brick_stairs", fn(BID $id) => 
new Stair($id, 
"Resin Brick Stairs", $resinBricksInfo));
 
 1833        self::register(
"resin_brick_wall", fn(BID $id) => 
new Wall($id, 
"Resin Brick Wall", $resinBricksInfo));
 
 1834        self::register(
"resin_bricks", fn(BID $id) => 
new Opaque($id, 
"Resin Bricks", $resinBricksInfo));
 
 1835        self::register(
"chiseled_resin_bricks", fn(BID $id) => 
new Opaque($id, 
"Chiseled Resin Bricks", $resinBricksInfo));
 
 1838    private static function registerTuffBlocks() : void{
 
 1839        $tuffBreakInfo = new Info(BreakInfo::pickaxe(1.5, 
ToolTier::WOOD, 30.0));
 
 1841        self::register(
"tuff", fn(BID $id) => 
new Opaque($id, 
"Tuff", $tuffBreakInfo));
 
 1842        self::register(
"tuff_slab", fn(BID $id) => 
new Slab($id, 
"Tuff", $tuffBreakInfo));
 
 1843        self::register(
"tuff_stairs", fn(BID $id) => 
new Stair($id, 
"Tuff Stairs", $tuffBreakInfo));
 
 1844        self::register(
"tuff_wall", fn(BID $id) => 
new Wall($id, 
"Tuff Wall", $tuffBreakInfo));
 
 1845        self::register(
"chiseled_tuff", fn(BID $id) => 
new Opaque($id, 
"Chiseled Tuff", $tuffBreakInfo));
 
 1847        self::register(
"tuff_bricks", fn(BID $id) => 
new Opaque($id, 
"Tuff Bricks", $tuffBreakInfo));
 
 1848        self::register(
"tuff_brick_slab", fn(BID $id) => 
new Slab($id, 
"Tuff Brick", $tuffBreakInfo));
 
 1849        self::register(
"tuff_brick_stairs", fn(BID $id) => 
new Stair($id, 
"Tuff Brick Stairs", $tuffBreakInfo));
 
 1850        self::register(
"tuff_brick_wall", fn(BID $id) => 
new Wall($id, 
"Tuff Brick Wall", $tuffBreakInfo));
 
 1851        self::register(
"chiseled_tuff_bricks", fn(BID $id) => 
new Opaque($id, 
"Chiseled Tuff Bricks", $tuffBreakInfo));
 
 1853        self::register(
"polished_tuff", fn(BID $id) => 
new Opaque($id, 
"Polished Tuff", $tuffBreakInfo));
 
 1854        self::register(
"polished_tuff_slab", fn(BID $id) => 
new Slab($id, 
"Polished Tuff", $tuffBreakInfo));
 
 1855        self::register(
"polished_tuff_stairs", fn(BID $id) => 
new Stair($id, 
"Polished Tuff Stairs", $tuffBreakInfo));
 
 1856        self::register(
"polished_tuff_wall", fn(BID $id) => 
new Wall($id, 
"Polished Tuff Wall", $tuffBreakInfo));
 
 1859    private static function registerCauldronBlocks() : void{
 
 1860        $cauldronBreakInfo = new Info(BreakInfo::pickaxe(2, 
ToolTier::WOOD));
 
 1862        self::register(
"cauldron", fn(BID $id) => 
new Cauldron($id, 
"Cauldron", $cauldronBreakInfo), TileCauldron::class);
 
 1863        self::register(
"water_cauldron", fn(BID $id) => 
new WaterCauldron($id, 
"Water Cauldron", $cauldronBreakInfo), TileCauldron::class);
 
 1864        self::register(
"lava_cauldron", fn(BID $id) => 
new LavaCauldron($id, 
"Lava Cauldron", $cauldronBreakInfo), TileCauldron::class);
 
 1865        self::register(
"potion_cauldron", fn(BID $id) => 
new PotionCauldron($id, 
"Potion Cauldron", $cauldronBreakInfo), TileCauldron::class);