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