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