Strip all remaining legacy item ID/meta stuff from blocks

the doors are now finally open, we can:
- make all the wood types dynamic
- fix glazed terracotta
- add all the new blocks

LET'S GOOOOOOOOOOOO
This commit is contained in:
Dylan K. Taylor 2022-07-02 17:48:04 +01:00
parent 323c563684
commit b125d4d25f
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
13 changed files with 530 additions and 605 deletions

View File

@ -47,10 +47,6 @@ class Anvil extends Transparent implements Fallable{
private int $damage = self::UNDAMAGED;
protected function writeStateToItemMeta() : int{
return $this->damage << 2;
}
public function getRequiredTypeDataBits() : int{ return 2; }
protected function decodeType(BlockDataReader $r) : void{

View File

@ -93,18 +93,6 @@ class Block{
return new ItemBlock($this);
}
public function getLegacyItemId() : int{
return $this->idInfo->getLegacyItemId();
}
public function getLegacyItemMeta() : int{
return $this->idInfo->getLegacyVariant() | $this->writeStateToItemMeta();
}
protected function writeStateToItemMeta() : int{
return 0;
}
public function getRequiredTypeDataBits() : int{ return 0; }
public function getRequiredStateDataBits() : int{ return 0; }

View File

@ -53,9 +53,7 @@ use pocketmine\block\tile\Smoker as TileSmoker;
use pocketmine\block\utils\DyeColor;
use pocketmine\block\utils\InvalidBlockStateException;
use pocketmine\block\utils\TreeType;
use pocketmine\data\bedrock\block\BlockLegacyMetadata as Meta;
use pocketmine\item\Item;
use pocketmine\item\ItemIds;
use pocketmine\item\ToolTier;
use pocketmine\utils\AssumptionFailedError;
use pocketmine\utils\SingletonTrait;
@ -105,10 +103,10 @@ class BlockFactory{
public function __construct(){
$railBreakInfo = new BlockBreakInfo(0.7);
$this->register(new ActivatorRail(new BID(Ids::ACTIVATOR_RAIL, ItemIds::ACTIVATOR_RAIL, 0), "Activator Rail", $railBreakInfo));
$this->register(new Air(new BID(Ids::AIR, ItemIds::AIR, 0), "Air", BreakInfo::indestructible(-1.0)));
$this->register(new Anvil(new BID(Ids::ANVIL, ItemIds::ANVIL, 0), "Anvil", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 6000.0)));
$this->register(new Bamboo(new BID(Ids::BAMBOO, ItemIds::BAMBOO, 0), "Bamboo", new class(2.0 /* 1.0 in PC */, ToolType::AXE) extends BreakInfo{
$this->register(new ActivatorRail(new BID(Ids::ACTIVATOR_RAIL), "Activator Rail", $railBreakInfo));
$this->register(new Air(new BID(Ids::AIR), "Air", BreakInfo::indestructible(-1.0)));
$this->register(new Anvil(new BID(Ids::ANVIL), "Anvil", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 6000.0)));
$this->register(new Bamboo(new BID(Ids::BAMBOO), "Bamboo", new class(2.0 /* 1.0 in PC */, ToolType::AXE) extends BreakInfo{
public function getBreakTime(Item $item) : float{
if($item->getBlockToolType() === ToolType::SWORD){
return 0.0;
@ -116,225 +114,225 @@ class BlockFactory{
return parent::getBreakTime($item);
}
}));
$this->register(new BambooSapling(new BID(Ids::BAMBOO_SAPLING, ItemIds::BAMBOO_SAPLING, 0), "Bamboo Sapling", BreakInfo::instant()));
$this->register(new BambooSapling(new BID(Ids::BAMBOO_SAPLING), "Bamboo Sapling", BreakInfo::instant()));
$bannerBreakInfo = new BreakInfo(1.0, ToolType::AXE);
$this->register(new FloorBanner(new BID(Ids::BANNER, ItemIds::BANNER, 0, TileBanner::class), "Banner", $bannerBreakInfo));
$this->register(new WallBanner(new BID(Ids::WALL_BANNER, ItemIds::BANNER, 0, TileBanner::class), "Wall Banner", $bannerBreakInfo));
$this->register(new Barrel(new BID(Ids::BARREL, ItemIds::BARREL, 0, TileBarrel::class), "Barrel", new BreakInfo(2.5, ToolType::AXE)));
$this->register(new Transparent(new BID(Ids::BARRIER, ItemIds::BARRIER, 0), "Barrier", BreakInfo::indestructible()));
$this->register(new Beacon(new BID(Ids::BEACON, ItemIds::BEACON, 0, TileBeacon::class), "Beacon", new BreakInfo(3.0)));
$this->register(new Bed(new BID(Ids::BED, ItemIds::BED, 0, TileBed::class), "Bed Block", new BreakInfo(0.2)));
$this->register(new Bedrock(new BID(Ids::BEDROCK, ItemIds::BEDROCK, 0), "Bedrock", BreakInfo::indestructible()));
$this->register(new FloorBanner(new BID(Ids::BANNER, TileBanner::class), "Banner", $bannerBreakInfo));
$this->register(new WallBanner(new BID(Ids::WALL_BANNER, TileBanner::class), "Wall Banner", $bannerBreakInfo));
$this->register(new Barrel(new BID(Ids::BARREL, TileBarrel::class), "Barrel", new BreakInfo(2.5, ToolType::AXE)));
$this->register(new Transparent(new BID(Ids::BARRIER), "Barrier", BreakInfo::indestructible()));
$this->register(new Beacon(new BID(Ids::BEACON, TileBeacon::class), "Beacon", new BreakInfo(3.0)));
$this->register(new Bed(new BID(Ids::BED, TileBed::class), "Bed Block", new BreakInfo(0.2)));
$this->register(new Bedrock(new BID(Ids::BEDROCK), "Bedrock", BreakInfo::indestructible()));
$this->register(new Beetroot(new BID(Ids::BEETROOTS, ItemIds::BEETROOT_BLOCK, 0), "Beetroot Block", BreakInfo::instant()));
$this->register(new Bell(new BID(Ids::BELL, ItemIds::BELL, 0, TileBell::class), "Bell", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new BlueIce(new BID(Ids::BLUE_ICE, ItemIds::BLUE_ICE, 0), "Blue Ice", new BreakInfo(2.8, ToolType::PICKAXE)));
$this->register(new BoneBlock(new BID(Ids::BONE_BLOCK, ItemIds::BONE_BLOCK, 0), "Bone Block", new BreakInfo(2.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Bookshelf(new BID(Ids::BOOKSHELF, ItemIds::BOOKSHELF, 0), "Bookshelf", new BreakInfo(1.5, ToolType::AXE)));
$this->register(new BrewingStand(new BID(Ids::BREWING_STAND, ItemIds::BREWING_STAND, 0, TileBrewingStand::class), "Brewing Stand", new BreakInfo(0.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Beetroot(new BID(Ids::BEETROOTS), "Beetroot Block", BreakInfo::instant()));
$this->register(new Bell(new BID(Ids::BELL, TileBell::class), "Bell", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new BlueIce(new BID(Ids::BLUE_ICE), "Blue Ice", new BreakInfo(2.8, ToolType::PICKAXE)));
$this->register(new BoneBlock(new BID(Ids::BONE_BLOCK), "Bone Block", new BreakInfo(2.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Bookshelf(new BID(Ids::BOOKSHELF), "Bookshelf", new BreakInfo(1.5, ToolType::AXE)));
$this->register(new BrewingStand(new BID(Ids::BREWING_STAND, TileBrewingStand::class), "Brewing Stand", new BreakInfo(0.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$bricksBreakInfo = new BreakInfo(2.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0);
$this->register(new Stair(new BID(Ids::BRICK_STAIRS, ItemIds::BRICK_STAIRS, 0), "Brick Stairs", $bricksBreakInfo));
$this->register(new Opaque(new BID(Ids::BRICKS, ItemIds::BRICK_BLOCK, 0), "Bricks", $bricksBreakInfo));
$this->register(new Stair(new BID(Ids::BRICK_STAIRS), "Brick Stairs", $bricksBreakInfo));
$this->register(new Opaque(new BID(Ids::BRICKS), "Bricks", $bricksBreakInfo));
$this->register(new BrownMushroom(new BID(Ids::BROWN_MUSHROOM, ItemIds::BROWN_MUSHROOM, 0), "Brown Mushroom", BreakInfo::instant()));
$this->register(new Cactus(new BID(Ids::CACTUS, ItemIds::CACTUS, 0), "Cactus", new BreakInfo(0.4)));
$this->register(new Cake(new BID(Ids::CAKE, ItemIds::CAKE, 0), "Cake", new BreakInfo(0.5)));
$this->register(new Carrot(new BID(Ids::CARROTS, ItemIds::CARROTS, 0), "Carrot Block", BreakInfo::instant()));
$this->register(new BrownMushroom(new BID(Ids::BROWN_MUSHROOM), "Brown Mushroom", BreakInfo::instant()));
$this->register(new Cactus(new BID(Ids::CACTUS), "Cactus", new BreakInfo(0.4)));
$this->register(new Cake(new BID(Ids::CAKE), "Cake", new BreakInfo(0.5)));
$this->register(new Carrot(new BID(Ids::CARROTS), "Carrot Block", BreakInfo::instant()));
$chestBreakInfo = new BreakInfo(2.5, ToolType::AXE);
$this->register(new Chest(new BID(Ids::CHEST, ItemIds::CHEST, 0, TileChest::class), "Chest", $chestBreakInfo));
$this->register(new Clay(new BID(Ids::CLAY, ItemIds::CLAY_BLOCK, 0), "Clay Block", new BreakInfo(0.6, ToolType::SHOVEL)));
$this->register(new Coal(new BID(Ids::COAL, ItemIds::COAL_BLOCK, 0), "Coal Block", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0)));
$this->register(new CoalOre(new BID(Ids::COAL_ORE, ItemIds::COAL_ORE, 0), "Coal Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Chest(new BID(Ids::CHEST, TileChest::class), "Chest", $chestBreakInfo));
$this->register(new Clay(new BID(Ids::CLAY), "Clay Block", new BreakInfo(0.6, ToolType::SHOVEL)));
$this->register(new Coal(new BID(Ids::COAL), "Coal Block", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0)));
$this->register(new CoalOre(new BID(Ids::COAL_ORE), "Coal Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$cobblestoneBreakInfo = new BreakInfo(2.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0);
$this->register($cobblestone = new Opaque(new BID(Ids::COBBLESTONE, ItemIds::COBBLESTONE, 0), "Cobblestone", $cobblestoneBreakInfo));
$this->register(new Opaque(new BID(Ids::MOSSY_COBBLESTONE, ItemIds::MOSSY_COBBLESTONE, 0), "Mossy Cobblestone", $cobblestoneBreakInfo));
$this->register(new Stair(new BID(Ids::COBBLESTONE_STAIRS, ItemIds::COBBLESTONE_STAIRS, 0), "Cobblestone Stairs", $cobblestoneBreakInfo));
$this->register(new Stair(new BID(Ids::MOSSY_COBBLESTONE_STAIRS, ItemIds::MOSSY_COBBLESTONE_STAIRS, 0), "Mossy Cobblestone Stairs", $cobblestoneBreakInfo));
$this->register($cobblestone = new Opaque(new BID(Ids::COBBLESTONE), "Cobblestone", $cobblestoneBreakInfo));
$this->register(new Opaque(new BID(Ids::MOSSY_COBBLESTONE), "Mossy Cobblestone", $cobblestoneBreakInfo));
$this->register(new Stair(new BID(Ids::COBBLESTONE_STAIRS), "Cobblestone Stairs", $cobblestoneBreakInfo));
$this->register(new Stair(new BID(Ids::MOSSY_COBBLESTONE_STAIRS), "Mossy Cobblestone Stairs", $cobblestoneBreakInfo));
$this->register(new Cobweb(new BID(Ids::COBWEB, ItemIds::COBWEB, 0), "Cobweb", new BreakInfo(4.0, ToolType::SWORD | ToolType::SHEARS, 1)));
$this->register(new CocoaBlock(new BID(Ids::COCOA_POD, ItemIds::COCOA, 0), "Cocoa Block", new BreakInfo(0.2, ToolType::AXE, 0, 15.0)));
$this->register(new CoralBlock(new BID(Ids::CORAL_BLOCK, ItemIds::CORAL_BLOCK, 0), "Coral Block", new BreakInfo(7.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new CraftingTable(new BID(Ids::CRAFTING_TABLE, ItemIds::CRAFTING_TABLE, 0), "Crafting Table", new BreakInfo(2.5, ToolType::AXE)));
$this->register(new DaylightSensor(new BID(Ids::DAYLIGHT_SENSOR, ItemIds::DAYLIGHT_DETECTOR, 0, TileDaylightSensor::class), "Daylight Sensor", new BreakInfo(0.2, ToolType::AXE)));
$this->register(new DeadBush(new BID(Ids::DEAD_BUSH, ItemIds::DEADBUSH, 0), "Dead Bush", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new DetectorRail(new BID(Ids::DETECTOR_RAIL, ItemIds::DETECTOR_RAIL, 0), "Detector Rail", $railBreakInfo));
$this->register(new Cobweb(new BID(Ids::COBWEB), "Cobweb", new BreakInfo(4.0, ToolType::SWORD | ToolType::SHEARS, 1)));
$this->register(new CocoaBlock(new BID(Ids::COCOA_POD), "Cocoa Block", new BreakInfo(0.2, ToolType::AXE, 0, 15.0)));
$this->register(new CoralBlock(new BID(Ids::CORAL_BLOCK), "Coral Block", new BreakInfo(7.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new CraftingTable(new BID(Ids::CRAFTING_TABLE), "Crafting Table", new BreakInfo(2.5, ToolType::AXE)));
$this->register(new DaylightSensor(new BID(Ids::DAYLIGHT_SENSOR, TileDaylightSensor::class), "Daylight Sensor", new BreakInfo(0.2, ToolType::AXE)));
$this->register(new DeadBush(new BID(Ids::DEAD_BUSH), "Dead Bush", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new DetectorRail(new BID(Ids::DETECTOR_RAIL), "Detector Rail", $railBreakInfo));
$this->register(new Opaque(new BID(Ids::DIAMOND, ItemIds::DIAMOND_BLOCK, 0), "Diamond Block", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel(), 30.0)));
$this->register(new DiamondOre(new BID(Ids::DIAMOND_ORE, ItemIds::DIAMOND_ORE, 0), "Diamond Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel())));
$this->register(new Dirt(new BID(Ids::DIRT, ItemIds::DIRT, 0), "Dirt", new BreakInfo(0.5, ToolType::SHOVEL)));
$this->register(new DoublePlant(new BID(Ids::SUNFLOWER, ItemIds::DOUBLE_PLANT, Meta::DOUBLE_PLANT_SUNFLOWER), "Sunflower", BreakInfo::instant()));
$this->register(new DoublePlant(new BID(Ids::LILAC, ItemIds::DOUBLE_PLANT, Meta::DOUBLE_PLANT_LILAC), "Lilac", BreakInfo::instant()));
$this->register(new DoublePlant(new BID(Ids::ROSE_BUSH, ItemIds::DOUBLE_PLANT, Meta::DOUBLE_PLANT_ROSE_BUSH), "Rose Bush", BreakInfo::instant()));
$this->register(new DoublePlant(new BID(Ids::PEONY, ItemIds::DOUBLE_PLANT, Meta::DOUBLE_PLANT_PEONY), "Peony", BreakInfo::instant()));
$this->register(new DoubleTallGrass(new BID(Ids::DOUBLE_TALLGRASS, ItemIds::DOUBLE_PLANT, Meta::DOUBLE_PLANT_TALLGRASS), "Double Tallgrass", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new DoubleTallGrass(new BID(Ids::LARGE_FERN, ItemIds::DOUBLE_PLANT, Meta::DOUBLE_PLANT_LARGE_FERN), "Large Fern", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new DragonEgg(new BID(Ids::DRAGON_EGG, ItemIds::DRAGON_EGG, 0), "Dragon Egg", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new DriedKelp(new BID(Ids::DRIED_KELP, ItemIds::DRIED_KELP_BLOCK, 0), "Dried Kelp Block", new BreakInfo(0.5, ToolType::NONE, 0, 12.5)));
$this->register(new Opaque(new BID(Ids::EMERALD, ItemIds::EMERALD_BLOCK, 0), "Emerald Block", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel(), 30.0)));
$this->register(new EmeraldOre(new BID(Ids::EMERALD_ORE, ItemIds::EMERALD_ORE, 0), "Emerald Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel())));
$this->register(new EnchantingTable(new BID(Ids::ENCHANTING_TABLE, ItemIds::ENCHANTING_TABLE, 0, TileEnchantingTable::class), "Enchanting Table", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 6000.0)));
$this->register(new EndPortalFrame(new BID(Ids::END_PORTAL_FRAME, ItemIds::END_PORTAL_FRAME, 0), "End Portal Frame", BreakInfo::indestructible()));
$this->register(new EndRod(new BID(Ids::END_ROD, ItemIds::END_ROD, 0), "End Rod", BreakInfo::instant()));
$this->register(new Opaque(new BID(Ids::END_STONE, ItemIds::END_STONE, 0), "End Stone", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 45.0)));
$this->register(new Opaque(new BID(Ids::DIAMOND), "Diamond Block", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel(), 30.0)));
$this->register(new DiamondOre(new BID(Ids::DIAMOND_ORE), "Diamond Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel())));
$this->register(new Dirt(new BID(Ids::DIRT), "Dirt", new BreakInfo(0.5, ToolType::SHOVEL)));
$this->register(new DoublePlant(new BID(Ids::SUNFLOWER), "Sunflower", BreakInfo::instant()));
$this->register(new DoublePlant(new BID(Ids::LILAC), "Lilac", BreakInfo::instant()));
$this->register(new DoublePlant(new BID(Ids::ROSE_BUSH), "Rose Bush", BreakInfo::instant()));
$this->register(new DoublePlant(new BID(Ids::PEONY), "Peony", BreakInfo::instant()));
$this->register(new DoubleTallGrass(new BID(Ids::DOUBLE_TALLGRASS), "Double Tallgrass", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new DoubleTallGrass(new BID(Ids::LARGE_FERN), "Large Fern", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new DragonEgg(new BID(Ids::DRAGON_EGG), "Dragon Egg", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new DriedKelp(new BID(Ids::DRIED_KELP), "Dried Kelp Block", new BreakInfo(0.5, ToolType::NONE, 0, 12.5)));
$this->register(new Opaque(new BID(Ids::EMERALD), "Emerald Block", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel(), 30.0)));
$this->register(new EmeraldOre(new BID(Ids::EMERALD_ORE), "Emerald Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel())));
$this->register(new EnchantingTable(new BID(Ids::ENCHANTING_TABLE, TileEnchantingTable::class), "Enchanting Table", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 6000.0)));
$this->register(new EndPortalFrame(new BID(Ids::END_PORTAL_FRAME), "End Portal Frame", BreakInfo::indestructible()));
$this->register(new EndRod(new BID(Ids::END_ROD), "End Rod", BreakInfo::instant()));
$this->register(new Opaque(new BID(Ids::END_STONE), "End Stone", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 45.0)));
$endBrickBreakInfo = new BreakInfo(0.8, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 4.0);
$this->register(new Opaque(new BID(Ids::END_STONE_BRICKS, ItemIds::END_BRICKS, 0), "End Stone Bricks", $endBrickBreakInfo));
$this->register(new Stair(new BID(Ids::END_STONE_BRICK_STAIRS, ItemIds::END_BRICK_STAIRS, 0), "End Stone Brick Stairs", $endBrickBreakInfo));
$this->register(new Opaque(new BID(Ids::END_STONE_BRICKS), "End Stone Bricks", $endBrickBreakInfo));
$this->register(new Stair(new BID(Ids::END_STONE_BRICK_STAIRS), "End Stone Brick Stairs", $endBrickBreakInfo));
$this->register(new EnderChest(new BID(Ids::ENDER_CHEST, ItemIds::ENDER_CHEST, 0, TileEnderChest::class), "Ender Chest", new BreakInfo(22.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 3000.0)));
$this->register(new Farmland(new BID(Ids::FARMLAND, ItemIds::FARMLAND, 0), "Farmland", new BreakInfo(0.6, ToolType::SHOVEL)));
$this->register(new Fire(new BID(Ids::FIRE, ItemIds::FIRE, 0), "Fire Block", BreakInfo::instant()));
$this->register(new FletchingTable(new BID(Ids::FLETCHING_TABLE, ItemIds::FLETCHING_TABLE, 0), "Fletching Table", new BreakInfo(2.5, ToolType::AXE, 0, 2.5)));
$this->register(new Flower(new BID(Ids::DANDELION, ItemIds::DANDELION, 0), "Dandelion", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::POPPY, ItemIds::RED_FLOWER, Meta::FLOWER_POPPY), "Poppy", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::ALLIUM, ItemIds::RED_FLOWER, Meta::FLOWER_ALLIUM), "Allium", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::AZURE_BLUET, ItemIds::RED_FLOWER, Meta::FLOWER_AZURE_BLUET), "Azure Bluet", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::BLUE_ORCHID, ItemIds::RED_FLOWER, Meta::FLOWER_BLUE_ORCHID), "Blue Orchid", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::CORNFLOWER, ItemIds::RED_FLOWER, Meta::FLOWER_CORNFLOWER), "Cornflower", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::LILY_OF_THE_VALLEY, ItemIds::RED_FLOWER, Meta::FLOWER_LILY_OF_THE_VALLEY), "Lily of the Valley", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::ORANGE_TULIP, ItemIds::RED_FLOWER, Meta::FLOWER_ORANGE_TULIP), "Orange Tulip", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::OXEYE_DAISY, ItemIds::RED_FLOWER, Meta::FLOWER_OXEYE_DAISY), "Oxeye Daisy", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::PINK_TULIP, ItemIds::RED_FLOWER, Meta::FLOWER_PINK_TULIP), "Pink Tulip", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::RED_TULIP, ItemIds::RED_FLOWER, Meta::FLOWER_RED_TULIP), "Red Tulip", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::WHITE_TULIP, ItemIds::RED_FLOWER, Meta::FLOWER_WHITE_TULIP), "White Tulip", BreakInfo::instant()));
$this->register(new FlowerPot(new BID(Ids::FLOWER_POT, ItemIds::FLOWER_POT, 0, TileFlowerPot::class), "Flower Pot", BreakInfo::instant()));
$this->register(new FrostedIce(new BID(Ids::FROSTED_ICE, ItemIds::FROSTED_ICE, 0), "Frosted Ice", new BreakInfo(2.5, ToolType::PICKAXE)));
$this->register(new Furnace(new BID(Ids::FURNACE, ItemIds::FURNACE, 0, TileNormalFurnace::class), "Furnace", new BreakInfo(3.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Furnace(new BID(Ids::BLAST_FURNACE, ItemIds::BLAST_FURNACE, 0, TileBlastFurnace::class), "Blast Furnace", new BreakInfo(3.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Furnace(new BID(Ids::SMOKER, ItemIds::SMOKER, 0, TileSmoker::class), "Smoker", new BreakInfo(3.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new EnderChest(new BID(Ids::ENDER_CHEST, TileEnderChest::class), "Ender Chest", new BreakInfo(22.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 3000.0)));
$this->register(new Farmland(new BID(Ids::FARMLAND), "Farmland", new BreakInfo(0.6, ToolType::SHOVEL)));
$this->register(new Fire(new BID(Ids::FIRE), "Fire Block", BreakInfo::instant()));
$this->register(new FletchingTable(new BID(Ids::FLETCHING_TABLE), "Fletching Table", new BreakInfo(2.5, ToolType::AXE, 0, 2.5)));
$this->register(new Flower(new BID(Ids::DANDELION), "Dandelion", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::POPPY), "Poppy", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::ALLIUM), "Allium", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::AZURE_BLUET), "Azure Bluet", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::BLUE_ORCHID), "Blue Orchid", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::CORNFLOWER), "Cornflower", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::LILY_OF_THE_VALLEY), "Lily of the Valley", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::ORANGE_TULIP), "Orange Tulip", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::OXEYE_DAISY), "Oxeye Daisy", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::PINK_TULIP), "Pink Tulip", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::RED_TULIP), "Red Tulip", BreakInfo::instant()));
$this->register(new Flower(new BID(Ids::WHITE_TULIP), "White Tulip", BreakInfo::instant()));
$this->register(new FlowerPot(new BID(Ids::FLOWER_POT, TileFlowerPot::class), "Flower Pot", BreakInfo::instant()));
$this->register(new FrostedIce(new BID(Ids::FROSTED_ICE), "Frosted Ice", new BreakInfo(2.5, ToolType::PICKAXE)));
$this->register(new Furnace(new BID(Ids::FURNACE, TileNormalFurnace::class), "Furnace", new BreakInfo(3.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Furnace(new BID(Ids::BLAST_FURNACE, TileBlastFurnace::class), "Blast Furnace", new BreakInfo(3.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Furnace(new BID(Ids::SMOKER, TileSmoker::class), "Smoker", new BreakInfo(3.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$glassBreakInfo = new BreakInfo(0.3);
$this->register(new Glass(new BID(Ids::GLASS, ItemIds::GLASS, 0), "Glass", $glassBreakInfo));
$this->register(new GlassPane(new BID(Ids::GLASS_PANE, ItemIds::GLASS_PANE, 0), "Glass Pane", $glassBreakInfo));
$this->register(new GlowingObsidian(new BID(Ids::GLOWING_OBSIDIAN, ItemIds::GLOWINGOBSIDIAN, 0), "Glowing Obsidian", new BreakInfo(10.0, ToolType::PICKAXE, ToolTier::DIAMOND()->getHarvestLevel(), 50.0)));
$this->register(new Glowstone(new BID(Ids::GLOWSTONE, ItemIds::GLOWSTONE, 0), "Glowstone", new BreakInfo(0.3, ToolType::PICKAXE)));
$this->register(new Opaque(new BID(Ids::GOLD, ItemIds::GOLD_BLOCK, 0), "Gold Block", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel(), 30.0)));
$this->register(new Opaque(new BID(Ids::GOLD_ORE, ItemIds::GOLD_ORE, 0), "Gold Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel())));
$this->register(new Glass(new BID(Ids::GLASS), "Glass", $glassBreakInfo));
$this->register(new GlassPane(new BID(Ids::GLASS_PANE), "Glass Pane", $glassBreakInfo));
$this->register(new GlowingObsidian(new BID(Ids::GLOWING_OBSIDIAN), "Glowing Obsidian", new BreakInfo(10.0, ToolType::PICKAXE, ToolTier::DIAMOND()->getHarvestLevel(), 50.0)));
$this->register(new Glowstone(new BID(Ids::GLOWSTONE), "Glowstone", new BreakInfo(0.3, ToolType::PICKAXE)));
$this->register(new Opaque(new BID(Ids::GOLD), "Gold Block", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel(), 30.0)));
$this->register(new Opaque(new BID(Ids::GOLD_ORE), "Gold Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel())));
$grassBreakInfo = new BreakInfo(0.6, ToolType::SHOVEL);
$this->register(new Grass(new BID(Ids::GRASS, ItemIds::GRASS, 0), "Grass", $grassBreakInfo));
$this->register(new GrassPath(new BID(Ids::GRASS_PATH, ItemIds::GRASS_PATH, 0), "Grass Path", $grassBreakInfo));
$this->register(new Gravel(new BID(Ids::GRAVEL, ItemIds::GRAVEL, 0), "Gravel", new BreakInfo(0.6, ToolType::SHOVEL)));
$this->register(new Grass(new BID(Ids::GRASS), "Grass", $grassBreakInfo));
$this->register(new GrassPath(new BID(Ids::GRASS_PATH), "Grass Path", $grassBreakInfo));
$this->register(new Gravel(new BID(Ids::GRAVEL), "Gravel", new BreakInfo(0.6, ToolType::SHOVEL)));
$hardenedClayBreakInfo = new BreakInfo(1.25, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 21.0);
$this->register(new HardenedClay(new BID(Ids::HARDENED_CLAY, ItemIds::HARDENED_CLAY, 0), "Hardened Clay", $hardenedClayBreakInfo));
$this->register(new HardenedClay(new BID(Ids::HARDENED_CLAY), "Hardened Clay", $hardenedClayBreakInfo));
$hardenedGlassBreakInfo = new BreakInfo(10.0);
$this->register(new HardenedGlass(new BID(Ids::HARDENED_GLASS, ItemIds::HARD_GLASS, 0), "Hardened Glass", $hardenedGlassBreakInfo));
$this->register(new HardenedGlassPane(new BID(Ids::HARDENED_GLASS_PANE, ItemIds::HARD_GLASS_PANE, 0), "Hardened Glass Pane", $hardenedGlassBreakInfo));
$this->register(new HayBale(new BID(Ids::HAY_BALE, ItemIds::HAY_BALE, 0), "Hay Bale", new BreakInfo(0.5)));
$this->register(new Hopper(new BID(Ids::HOPPER, ItemIds::HOPPER, 0, TileHopper::class), "Hopper", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 15.0)));
$this->register(new Ice(new BID(Ids::ICE, ItemIds::ICE, 0), "Ice", new BreakInfo(0.5, ToolType::PICKAXE)));
$this->register(new HardenedGlass(new BID(Ids::HARDENED_GLASS), "Hardened Glass", $hardenedGlassBreakInfo));
$this->register(new HardenedGlassPane(new BID(Ids::HARDENED_GLASS_PANE), "Hardened Glass Pane", $hardenedGlassBreakInfo));
$this->register(new HayBale(new BID(Ids::HAY_BALE), "Hay Bale", new BreakInfo(0.5)));
$this->register(new Hopper(new BID(Ids::HOPPER, TileHopper::class), "Hopper", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 15.0)));
$this->register(new Ice(new BID(Ids::ICE), "Ice", new BreakInfo(0.5, ToolType::PICKAXE)));
$updateBlockBreakInfo = new BreakInfo(1.0);
$this->register(new Opaque(new BID(Ids::INFO_UPDATE, ItemIds::INFO_UPDATE, 0), "update!", $updateBlockBreakInfo));
$this->register(new Opaque(new BID(Ids::INFO_UPDATE2, ItemIds::INFO_UPDATE2, 0), "ate!upd", $updateBlockBreakInfo));
$this->register(new Transparent(new BID(Ids::INVISIBLE_BEDROCK, ItemIds::INVISIBLEBEDROCK, 0), "Invisible Bedrock", BreakInfo::indestructible()));
$this->register(new Opaque(new BID(Ids::INFO_UPDATE), "update!", $updateBlockBreakInfo));
$this->register(new Opaque(new BID(Ids::INFO_UPDATE2), "ate!upd", $updateBlockBreakInfo));
$this->register(new Transparent(new BID(Ids::INVISIBLE_BEDROCK), "Invisible Bedrock", BreakInfo::indestructible()));
$ironBreakInfo = new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::STONE()->getHarvestLevel(), 30.0);
$this->register(new Opaque(new BID(Ids::IRON, ItemIds::IRON_BLOCK, 0), "Iron Block", $ironBreakInfo));
$this->register(new Thin(new BID(Ids::IRON_BARS, ItemIds::IRON_BARS, 0), "Iron Bars", $ironBreakInfo));
$this->register(new Opaque(new BID(Ids::IRON), "Iron Block", $ironBreakInfo));
$this->register(new Thin(new BID(Ids::IRON_BARS), "Iron Bars", $ironBreakInfo));
$ironDoorBreakInfo = new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 25.0);
$this->register(new Door(new BID(Ids::IRON_DOOR, ItemIds::IRON_DOOR, 0), "Iron Door", $ironDoorBreakInfo));
$this->register(new Trapdoor(new BID(Ids::IRON_TRAPDOOR, ItemIds::IRON_TRAPDOOR, 0), "Iron Trapdoor", $ironDoorBreakInfo));
$this->register(new Opaque(new BID(Ids::IRON_ORE, ItemIds::IRON_ORE, 0), "Iron Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::STONE()->getHarvestLevel())));
$this->register(new ItemFrame(new BID(Ids::ITEM_FRAME, ItemIds::FRAME, 0, TileItemFrame::class), "Item Frame", new BreakInfo(0.25)));
$this->register(new Jukebox(new BID(Ids::JUKEBOX, ItemIds::JUKEBOX, 0, TileJukebox::class), "Jukebox", new BreakInfo(0.8, ToolType::AXE))); //TODO: in PC the hardness is 2.0, not 0.8, unsure if this is a MCPE bug or not
$this->register(new Ladder(new BID(Ids::LADDER, ItemIds::LADDER, 0), "Ladder", new BreakInfo(0.4, ToolType::AXE)));
$this->register(new Lantern(new BID(Ids::LANTERN, ItemIds::LANTERN, 0), "Lantern", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Opaque(new BID(Ids::LAPIS_LAZULI, ItemIds::LAPIS_BLOCK, 0), "Lapis Lazuli Block", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::STONE()->getHarvestLevel())));
$this->register(new LapisOre(new BID(Ids::LAPIS_LAZULI_ORE, ItemIds::LAPIS_ORE, 0), "Lapis Lazuli Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::STONE()->getHarvestLevel())));
$this->register(new Lava(new BID(Ids::LAVA, ItemIds::FLOWING_LAVA, 0), "Lava", BreakInfo::indestructible(500.0)));
$this->register(new Lectern(new BID(Ids::LECTERN, ItemIds::LECTERN, 0, TileLectern::class), "Lectern", new BreakInfo(2.0, ToolType::AXE)));
$this->register(new Lever(new BID(Ids::LEVER, ItemIds::LEVER, 0), "Lever", new BreakInfo(0.5)));
$this->register(new Loom(new BID(Ids::LOOM, ItemIds::LOOM, 0), "Loom", new BreakInfo(2.5, ToolType::AXE)));
$this->register(new Magma(new BID(Ids::MAGMA, ItemIds::MAGMA, 0), "Magma Block", new BreakInfo(0.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Melon(new BID(Ids::MELON, ItemIds::MELON_BLOCK, 0), "Melon Block", new BreakInfo(1.0, ToolType::AXE)));
$this->register(new MelonStem(new BID(Ids::MELON_STEM, ItemIds::MELON_SEEDS, 0), "Melon Stem", BreakInfo::instant()));
$this->register(new MonsterSpawner(new BID(Ids::MONSTER_SPAWNER, ItemIds::MOB_SPAWNER, 0, TileMonsterSpawner::class), "Monster Spawner", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Mycelium(new BID(Ids::MYCELIUM, ItemIds::MYCELIUM, 0), "Mycelium", new BreakInfo(0.6, ToolType::SHOVEL)));
$this->register(new Door(new BID(Ids::IRON_DOOR), "Iron Door", $ironDoorBreakInfo));
$this->register(new Trapdoor(new BID(Ids::IRON_TRAPDOOR), "Iron Trapdoor", $ironDoorBreakInfo));
$this->register(new Opaque(new BID(Ids::IRON_ORE), "Iron Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::STONE()->getHarvestLevel())));
$this->register(new ItemFrame(new BID(Ids::ITEM_FRAME, TileItemFrame::class), "Item Frame", new BreakInfo(0.25)));
$this->register(new Jukebox(new BID(Ids::JUKEBOX, TileJukebox::class), "Jukebox", new BreakInfo(0.8, ToolType::AXE))); //TODO: in PC the hardness is 2.0, not 0.8, unsure if this is a MCPE bug or not
$this->register(new Ladder(new BID(Ids::LADDER), "Ladder", new BreakInfo(0.4, ToolType::AXE)));
$this->register(new Lantern(new BID(Ids::LANTERN), "Lantern", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Opaque(new BID(Ids::LAPIS_LAZULI), "Lapis Lazuli Block", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::STONE()->getHarvestLevel())));
$this->register(new LapisOre(new BID(Ids::LAPIS_LAZULI_ORE), "Lapis Lazuli Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::STONE()->getHarvestLevel())));
$this->register(new Lava(new BID(Ids::LAVA), "Lava", BreakInfo::indestructible(500.0)));
$this->register(new Lectern(new BID(Ids::LECTERN, TileLectern::class), "Lectern", new BreakInfo(2.0, ToolType::AXE)));
$this->register(new Lever(new BID(Ids::LEVER), "Lever", new BreakInfo(0.5)));
$this->register(new Loom(new BID(Ids::LOOM), "Loom", new BreakInfo(2.5, ToolType::AXE)));
$this->register(new Magma(new BID(Ids::MAGMA), "Magma Block", new BreakInfo(0.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Melon(new BID(Ids::MELON), "Melon Block", new BreakInfo(1.0, ToolType::AXE)));
$this->register(new MelonStem(new BID(Ids::MELON_STEM), "Melon Stem", BreakInfo::instant()));
$this->register(new MonsterSpawner(new BID(Ids::MONSTER_SPAWNER, TileMonsterSpawner::class), "Monster Spawner", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Mycelium(new BID(Ids::MYCELIUM), "Mycelium", new BreakInfo(0.6, ToolType::SHOVEL)));
$netherBrickBreakInfo = new BreakInfo(2.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0);
$this->register(new Opaque(new BID(Ids::NETHER_BRICKS, ItemIds::NETHER_BRICK_BLOCK, 0), "Nether Bricks", $netherBrickBreakInfo));
$this->register(new Opaque(new BID(Ids::RED_NETHER_BRICKS, ItemIds::RED_NETHER_BRICK, 0), "Red Nether Bricks", $netherBrickBreakInfo));
$this->register(new Fence(new BID(Ids::NETHER_BRICK_FENCE, ItemIds::NETHER_BRICK_FENCE, 0), "Nether Brick Fence", $netherBrickBreakInfo));
$this->register(new Stair(new BID(Ids::NETHER_BRICK_STAIRS, ItemIds::NETHER_BRICK_STAIRS, 0), "Nether Brick Stairs", $netherBrickBreakInfo));
$this->register(new Stair(new BID(Ids::RED_NETHER_BRICK_STAIRS, ItemIds::RED_NETHER_BRICK_STAIRS, 0), "Red Nether Brick Stairs", $netherBrickBreakInfo));
$this->register(new NetherPortal(new BID(Ids::NETHER_PORTAL, ItemIds::PORTAL, 0), "Nether Portal", BreakInfo::indestructible(0.0)));
$this->register(new NetherQuartzOre(new BID(Ids::NETHER_QUARTZ_ORE, ItemIds::NETHER_QUARTZ_ORE, 0), "Nether Quartz Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new NetherReactor(new BID(Ids::NETHER_REACTOR_CORE, ItemIds::NETHERREACTOR, 0), "Nether Reactor Core", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Opaque(new BID(Ids::NETHER_WART_BLOCK, ItemIds::NETHER_WART_BLOCK, 0), "Nether Wart Block", new BreakInfo(1.0, ToolType::HOE)));
$this->register(new NetherWartPlant(new BID(Ids::NETHER_WART, ItemIds::NETHER_WART, 0), "Nether Wart", BreakInfo::instant()));
$this->register(new Netherrack(new BID(Ids::NETHERRACK, ItemIds::NETHERRACK, 0), "Netherrack", new BreakInfo(0.4, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Note(new BID(Ids::NOTE_BLOCK, ItemIds::NOTEBLOCK, 0, TileNote::class), "Note Block", new BreakInfo(0.8, ToolType::AXE)));
$this->register(new Opaque(new BID(Ids::OBSIDIAN, ItemIds::OBSIDIAN, 0), "Obsidian", new BreakInfo(35.0 /* 50 in PC */, ToolType::PICKAXE, ToolTier::DIAMOND()->getHarvestLevel(), 6000.0)));
$this->register(new PackedIce(new BID(Ids::PACKED_ICE, ItemIds::PACKED_ICE, 0), "Packed Ice", new BreakInfo(0.5, ToolType::PICKAXE)));
$this->register(new Podzol(new BID(Ids::PODZOL, ItemIds::PODZOL, 0), "Podzol", new BreakInfo(0.5, ToolType::SHOVEL)));
$this->register(new Potato(new BID(Ids::POTATOES, ItemIds::POTATOES, 0), "Potato Block", BreakInfo::instant()));
$this->register(new PoweredRail(new BID(Ids::POWERED_RAIL, ItemIds::GOLDEN_RAIL, 0), "Powered Rail", $railBreakInfo));
$this->register(new Opaque(new BID(Ids::NETHER_BRICKS), "Nether Bricks", $netherBrickBreakInfo));
$this->register(new Opaque(new BID(Ids::RED_NETHER_BRICKS), "Red Nether Bricks", $netherBrickBreakInfo));
$this->register(new Fence(new BID(Ids::NETHER_BRICK_FENCE), "Nether Brick Fence", $netherBrickBreakInfo));
$this->register(new Stair(new BID(Ids::NETHER_BRICK_STAIRS), "Nether Brick Stairs", $netherBrickBreakInfo));
$this->register(new Stair(new BID(Ids::RED_NETHER_BRICK_STAIRS), "Red Nether Brick Stairs", $netherBrickBreakInfo));
$this->register(new NetherPortal(new BID(Ids::NETHER_PORTAL), "Nether Portal", BreakInfo::indestructible(0.0)));
$this->register(new NetherQuartzOre(new BID(Ids::NETHER_QUARTZ_ORE), "Nether Quartz Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new NetherReactor(new BID(Ids::NETHER_REACTOR_CORE), "Nether Reactor Core", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Opaque(new BID(Ids::NETHER_WART_BLOCK), "Nether Wart Block", new BreakInfo(1.0, ToolType::HOE)));
$this->register(new NetherWartPlant(new BID(Ids::NETHER_WART), "Nether Wart", BreakInfo::instant()));
$this->register(new Netherrack(new BID(Ids::NETHERRACK), "Netherrack", new BreakInfo(0.4, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Note(new BID(Ids::NOTE_BLOCK, TileNote::class), "Note Block", new BreakInfo(0.8, ToolType::AXE)));
$this->register(new Opaque(new BID(Ids::OBSIDIAN), "Obsidian", new BreakInfo(35.0 /* 50 in PC */, ToolType::PICKAXE, ToolTier::DIAMOND()->getHarvestLevel(), 6000.0)));
$this->register(new PackedIce(new BID(Ids::PACKED_ICE), "Packed Ice", new BreakInfo(0.5, ToolType::PICKAXE)));
$this->register(new Podzol(new BID(Ids::PODZOL), "Podzol", new BreakInfo(0.5, ToolType::SHOVEL)));
$this->register(new Potato(new BID(Ids::POTATOES), "Potato Block", BreakInfo::instant()));
$this->register(new PoweredRail(new BID(Ids::POWERED_RAIL), "Powered Rail", $railBreakInfo));
$prismarineBreakInfo = new BreakInfo(1.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0);
$this->register(new Opaque(new BID(Ids::PRISMARINE, ItemIds::PRISMARINE, Meta::PRISMARINE_NORMAL), "Prismarine", $prismarineBreakInfo));
$this->register(new Opaque(new BID(Ids::DARK_PRISMARINE, ItemIds::PRISMARINE, Meta::PRISMARINE_DARK), "Dark Prismarine", $prismarineBreakInfo));
$this->register(new Opaque(new BID(Ids::PRISMARINE_BRICKS, ItemIds::PRISMARINE, Meta::PRISMARINE_BRICKS), "Prismarine Bricks", $prismarineBreakInfo));
$this->register(new Stair(new BID(Ids::PRISMARINE_BRICKS_STAIRS, ItemIds::PRISMARINE_BRICKS_STAIRS, 0), "Prismarine Bricks Stairs", $prismarineBreakInfo));
$this->register(new Stair(new BID(Ids::DARK_PRISMARINE_STAIRS, ItemIds::DARK_PRISMARINE_STAIRS, 0), "Dark Prismarine Stairs", $prismarineBreakInfo));
$this->register(new Stair(new BID(Ids::PRISMARINE_STAIRS, ItemIds::PRISMARINE_STAIRS, 0), "Prismarine Stairs", $prismarineBreakInfo));
$this->register(new Opaque(new BID(Ids::PRISMARINE), "Prismarine", $prismarineBreakInfo));
$this->register(new Opaque(new BID(Ids::DARK_PRISMARINE), "Dark Prismarine", $prismarineBreakInfo));
$this->register(new Opaque(new BID(Ids::PRISMARINE_BRICKS), "Prismarine Bricks", $prismarineBreakInfo));
$this->register(new Stair(new BID(Ids::PRISMARINE_BRICKS_STAIRS), "Prismarine Bricks Stairs", $prismarineBreakInfo));
$this->register(new Stair(new BID(Ids::DARK_PRISMARINE_STAIRS), "Dark Prismarine Stairs", $prismarineBreakInfo));
$this->register(new Stair(new BID(Ids::PRISMARINE_STAIRS), "Prismarine Stairs", $prismarineBreakInfo));
$pumpkinBreakInfo = new BreakInfo(1.0, ToolType::AXE);
$this->register(new Pumpkin(new BID(Ids::PUMPKIN, ItemIds::PUMPKIN, 0), "Pumpkin", $pumpkinBreakInfo));
$this->register(new CarvedPumpkin(new BID(Ids::CARVED_PUMPKIN, ItemIds::CARVED_PUMPKIN, 0), "Carved Pumpkin", $pumpkinBreakInfo));
$this->register(new LitPumpkin(new BID(Ids::LIT_PUMPKIN, ItemIds::JACK_O_LANTERN, 0), "Jack o'Lantern", $pumpkinBreakInfo));
$this->register(new Pumpkin(new BID(Ids::PUMPKIN), "Pumpkin", $pumpkinBreakInfo));
$this->register(new CarvedPumpkin(new BID(Ids::CARVED_PUMPKIN), "Carved Pumpkin", $pumpkinBreakInfo));
$this->register(new LitPumpkin(new BID(Ids::LIT_PUMPKIN), "Jack o'Lantern", $pumpkinBreakInfo));
$this->register(new PumpkinStem(new BID(Ids::PUMPKIN_STEM, ItemIds::PUMPKIN_SEEDS, 0), "Pumpkin Stem", BreakInfo::instant()));
$this->register(new PumpkinStem(new BID(Ids::PUMPKIN_STEM), "Pumpkin Stem", BreakInfo::instant()));
$purpurBreakInfo = new BreakInfo(1.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0);
$this->register(new Opaque(new BID(Ids::PURPUR, ItemIds::PURPUR_BLOCK, Meta::PURPUR_NORMAL), "Purpur Block", $purpurBreakInfo));
$this->register(new SimplePillar(new BID(Ids::PURPUR_PILLAR, ItemIds::PURPUR_BLOCK, Meta::PURPUR_PILLAR), "Purpur Pillar", $purpurBreakInfo));
$this->register(new Stair(new BID(Ids::PURPUR_STAIRS, ItemIds::PURPUR_STAIRS, 0), "Purpur Stairs", $purpurBreakInfo));
$this->register(new Opaque(new BID(Ids::PURPUR), "Purpur Block", $purpurBreakInfo));
$this->register(new SimplePillar(new BID(Ids::PURPUR_PILLAR), "Purpur Pillar", $purpurBreakInfo));
$this->register(new Stair(new BID(Ids::PURPUR_STAIRS), "Purpur Stairs", $purpurBreakInfo));
$quartzBreakInfo = new BreakInfo(0.8, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel());
$this->register(new Opaque(new BID(Ids::QUARTZ, ItemIds::QUARTZ_BLOCK, Meta::QUARTZ_NORMAL), "Quartz Block", $quartzBreakInfo));
$this->register(new SimplePillar(new BID(Ids::CHISELED_QUARTZ, ItemIds::QUARTZ_BLOCK, Meta::QUARTZ_CHISELED), "Chiseled Quartz Block", $quartzBreakInfo));
$this->register(new SimplePillar(new BID(Ids::QUARTZ_PILLAR, ItemIds::QUARTZ_BLOCK, Meta::QUARTZ_PILLAR), "Quartz Pillar", $quartzBreakInfo));
$this->register(new Opaque(new BID(Ids::SMOOTH_QUARTZ, ItemIds::QUARTZ_BLOCK, Meta::QUARTZ_SMOOTH), "Smooth Quartz Block", $quartzBreakInfo));
$this->register(new Opaque(new BID(Ids::QUARTZ), "Quartz Block", $quartzBreakInfo));
$this->register(new SimplePillar(new BID(Ids::CHISELED_QUARTZ), "Chiseled Quartz Block", $quartzBreakInfo));
$this->register(new SimplePillar(new BID(Ids::QUARTZ_PILLAR), "Quartz Pillar", $quartzBreakInfo));
$this->register(new Opaque(new BID(Ids::SMOOTH_QUARTZ), "Smooth Quartz Block", $quartzBreakInfo));
$this->register(new Stair(new BID(Ids::QUARTZ_STAIRS, ItemIds::QUARTZ_STAIRS, 0), "Quartz Stairs", $quartzBreakInfo));
$this->register(new Stair(new BID(Ids::SMOOTH_QUARTZ_STAIRS, ItemIds::SMOOTH_QUARTZ_STAIRS, 0), "Smooth Quartz Stairs", $quartzBreakInfo));
$this->register(new Stair(new BID(Ids::QUARTZ_STAIRS), "Quartz Stairs", $quartzBreakInfo));
$this->register(new Stair(new BID(Ids::SMOOTH_QUARTZ_STAIRS), "Smooth Quartz Stairs", $quartzBreakInfo));
$this->register(new Rail(new BID(Ids::RAIL, ItemIds::RAIL, 0), "Rail", $railBreakInfo));
$this->register(new RedMushroom(new BID(Ids::RED_MUSHROOM, ItemIds::RED_MUSHROOM, 0), "Red Mushroom", BreakInfo::instant()));
$this->register(new Redstone(new BID(Ids::REDSTONE, ItemIds::REDSTONE_BLOCK, 0), "Redstone Block", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0)));
$this->register(new RedstoneComparator(new BID(Ids::REDSTONE_COMPARATOR, ItemIds::COMPARATOR, 0, TileComparator::class), "Redstone Comparator", BreakInfo::instant()));
$this->register(new RedstoneLamp(new BID(Ids::REDSTONE_LAMP, ItemIds::REDSTONE_LAMP, 0), "Redstone Lamp", new BreakInfo(0.3)));
$this->register(new RedstoneOre(new BID(Ids::REDSTONE_ORE, ItemIds::REDSTONE_ORE, 0), "Redstone Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel())));
$this->register(new RedstoneRepeater(new BID(Ids::REDSTONE_REPEATER, ItemIds::REPEATER, 0), "Redstone Repeater", BreakInfo::instant()));
$this->register(new RedstoneTorch(new BID(Ids::REDSTONE_TORCH, ItemIds::REDSTONE_TORCH, 0), "Redstone Torch", BreakInfo::instant()));
$this->register(new RedstoneWire(new BID(Ids::REDSTONE_WIRE, ItemIds::REDSTONE, 0), "Redstone", BreakInfo::instant()));
$this->register(new Reserved6(new BID(Ids::RESERVED6, ItemIds::RESERVED6, 0), "reserved6", BreakInfo::instant()));
$this->register(new Rail(new BID(Ids::RAIL), "Rail", $railBreakInfo));
$this->register(new RedMushroom(new BID(Ids::RED_MUSHROOM), "Red Mushroom", BreakInfo::instant()));
$this->register(new Redstone(new BID(Ids::REDSTONE), "Redstone Block", new BreakInfo(5.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0)));
$this->register(new RedstoneComparator(new BID(Ids::REDSTONE_COMPARATOR, TileComparator::class), "Redstone Comparator", BreakInfo::instant()));
$this->register(new RedstoneLamp(new BID(Ids::REDSTONE_LAMP), "Redstone Lamp", new BreakInfo(0.3)));
$this->register(new RedstoneOre(new BID(Ids::REDSTONE_ORE), "Redstone Ore", new BreakInfo(3.0, ToolType::PICKAXE, ToolTier::IRON()->getHarvestLevel())));
$this->register(new RedstoneRepeater(new BID(Ids::REDSTONE_REPEATER), "Redstone Repeater", BreakInfo::instant()));
$this->register(new RedstoneTorch(new BID(Ids::REDSTONE_TORCH), "Redstone Torch", BreakInfo::instant()));
$this->register(new RedstoneWire(new BID(Ids::REDSTONE_WIRE), "Redstone", BreakInfo::instant()));
$this->register(new Reserved6(new BID(Ids::RESERVED6), "reserved6", BreakInfo::instant()));
$sandBreakInfo = new BreakInfo(0.5, ToolType::SHOVEL);
$this->register(new Sand(new BID(Ids::SAND, ItemIds::SAND, 0), "Sand", $sandBreakInfo));
$this->register(new Sand(new BID(Ids::RED_SAND, ItemIds::SAND, 1), "Red Sand", $sandBreakInfo));
$this->register(new Sand(new BID(Ids::SAND), "Sand", $sandBreakInfo));
$this->register(new Sand(new BID(Ids::RED_SAND), "Red Sand", $sandBreakInfo));
$this->register(new SeaLantern(new BID(Ids::SEA_LANTERN, ItemIds::SEALANTERN, 0), "Sea Lantern", new BreakInfo(0.3)));
$this->register(new SeaPickle(new BID(Ids::SEA_PICKLE, ItemIds::SEA_PICKLE, 0), "Sea Pickle", BreakInfo::instant()));
$this->register(new Skull(new BID(Ids::MOB_HEAD, ItemIds::SKULL, 0, TileSkull::class), "Mob Head", new BreakInfo(1.0)));
$this->register(new Slime(new BID(Ids::SLIME, ItemIds::SLIME, 0), "Slime Block", BreakInfo::instant()));
$this->register(new Snow(new BID(Ids::SNOW, ItemIds::SNOW, 0), "Snow Block", new BreakInfo(0.2, ToolType::SHOVEL, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new SnowLayer(new BID(Ids::SNOW_LAYER, ItemIds::SNOW_LAYER, 0), "Snow Layer", new BreakInfo(0.1, ToolType::SHOVEL, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new SoulSand(new BID(Ids::SOUL_SAND, ItemIds::SOUL_SAND, 0), "Soul Sand", new BreakInfo(0.5, ToolType::SHOVEL)));
$this->register(new Sponge(new BID(Ids::SPONGE, ItemIds::SPONGE, 0), "Sponge", new BreakInfo(0.6, ToolType::HOE)));
$this->register(new SeaLantern(new BID(Ids::SEA_LANTERN), "Sea Lantern", new BreakInfo(0.3)));
$this->register(new SeaPickle(new BID(Ids::SEA_PICKLE), "Sea Pickle", BreakInfo::instant()));
$this->register(new Skull(new BID(Ids::MOB_HEAD, TileSkull::class), "Mob Head", new BreakInfo(1.0)));
$this->register(new Slime(new BID(Ids::SLIME), "Slime Block", BreakInfo::instant()));
$this->register(new Snow(new BID(Ids::SNOW), "Snow Block", new BreakInfo(0.2, ToolType::SHOVEL, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new SnowLayer(new BID(Ids::SNOW_LAYER), "Snow Layer", new BreakInfo(0.1, ToolType::SHOVEL, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new SoulSand(new BID(Ids::SOUL_SAND), "Soul Sand", new BreakInfo(0.5, ToolType::SHOVEL)));
$this->register(new Sponge(new BID(Ids::SPONGE), "Sponge", new BreakInfo(0.6, ToolType::HOE)));
$shulkerBoxBreakInfo = new BreakInfo(2, ToolType::PICKAXE);
$this->register(new ShulkerBox(new BID(Ids::SHULKER_BOX, ItemIds::UNDYED_SHULKER_BOX, 0, TileShulkerBox::class), "Shulker Box", $shulkerBoxBreakInfo));
$this->register(new ShulkerBox(new BID(Ids::SHULKER_BOX, TileShulkerBox::class), "Shulker Box", $shulkerBoxBreakInfo));
$stoneBreakInfo = new BreakInfo(1.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0);
$this->register(
$stone = new class(new BID(Ids::STONE, ItemIds::STONE, Meta::STONE_NORMAL), "Stone", $stoneBreakInfo) extends Opaque{
$stone = new class(new BID(Ids::STONE), "Stone", $stoneBreakInfo) extends Opaque{
public function getDropsForCompatibleTool(Item $item) : array{
return [VanillaBlocks::COBBLESTONE()->asItem()];
}
@ -344,103 +342,101 @@ class BlockFactory{
}
}
);
$this->register(new Opaque(new BID(Ids::ANDESITE, ItemIds::STONE, Meta::STONE_ANDESITE), "Andesite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::DIORITE, ItemIds::STONE, Meta::STONE_DIORITE), "Diorite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::GRANITE, ItemIds::STONE, Meta::STONE_GRANITE), "Granite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::POLISHED_ANDESITE, ItemIds::STONE, Meta::STONE_POLISHED_ANDESITE), "Polished Andesite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::POLISHED_DIORITE, ItemIds::STONE, Meta::STONE_POLISHED_DIORITE), "Polished Diorite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::POLISHED_GRANITE, ItemIds::STONE, Meta::STONE_POLISHED_GRANITE), "Polished Granite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::ANDESITE), "Andesite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::DIORITE), "Diorite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::GRANITE), "Granite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::POLISHED_ANDESITE), "Polished Andesite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::POLISHED_DIORITE), "Polished Diorite", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::POLISHED_GRANITE), "Polished Granite", $stoneBreakInfo));
$this->register($stoneBrick = new Opaque(new BID(Ids::STONE_BRICKS, ItemIds::STONEBRICK, Meta::STONE_BRICK_NORMAL), "Stone Bricks", $stoneBreakInfo));
$this->register($mossyStoneBrick = new Opaque(new BID(Ids::MOSSY_STONE_BRICKS, ItemIds::STONEBRICK, Meta::STONE_BRICK_MOSSY), "Mossy Stone Bricks", $stoneBreakInfo));
$this->register($crackedStoneBrick = new Opaque(new BID(Ids::CRACKED_STONE_BRICKS, ItemIds::STONEBRICK, Meta::STONE_BRICK_CRACKED), "Cracked Stone Bricks", $stoneBreakInfo));
$this->register($chiseledStoneBrick = new Opaque(new BID(Ids::CHISELED_STONE_BRICKS, ItemIds::STONEBRICK, Meta::STONE_BRICK_CHISELED), "Chiseled Stone Bricks", $stoneBreakInfo));
$this->register($stoneBrick = new Opaque(new BID(Ids::STONE_BRICKS), "Stone Bricks", $stoneBreakInfo));
$this->register($mossyStoneBrick = new Opaque(new BID(Ids::MOSSY_STONE_BRICKS), "Mossy Stone Bricks", $stoneBreakInfo));
$this->register($crackedStoneBrick = new Opaque(new BID(Ids::CRACKED_STONE_BRICKS), "Cracked Stone Bricks", $stoneBreakInfo));
$this->register($chiseledStoneBrick = new Opaque(new BID(Ids::CHISELED_STONE_BRICKS), "Chiseled Stone Bricks", $stoneBreakInfo));
$infestedStoneBreakInfo = new BreakInfo(0.75, ToolType::PICKAXE);
$this->register(new InfestedStone(new BID(Ids::INFESTED_STONE, ItemIds::MONSTER_EGG, Meta::INFESTED_STONE), "Infested Stone", $infestedStoneBreakInfo, $stone));
$this->register(new InfestedStone(new BID(Ids::INFESTED_STONE_BRICK, ItemIds::MONSTER_EGG, Meta::INFESTED_STONE_BRICK), "Infested Stone Brick", $infestedStoneBreakInfo, $stoneBrick));
$this->register(new InfestedStone(new BID(Ids::INFESTED_COBBLESTONE, ItemIds::MONSTER_EGG, Meta::INFESTED_COBBLESTONE), "Infested Cobblestone", $infestedStoneBreakInfo, $cobblestone));
$this->register(new InfestedStone(new BID(Ids::INFESTED_MOSSY_STONE_BRICK, ItemIds::MONSTER_EGG, Meta::INFESTED_STONE_BRICK_MOSSY), "Infested Mossy Stone Brick", $infestedStoneBreakInfo, $mossyStoneBrick));
$this->register(new InfestedStone(new BID(Ids::INFESTED_CRACKED_STONE_BRICK, ItemIds::MONSTER_EGG, Meta::INFESTED_STONE_BRICK_CRACKED), "Infested Cracked Stone Brick", $infestedStoneBreakInfo, $crackedStoneBrick));
$this->register(new InfestedStone(new BID(Ids::INFESTED_CHISELED_STONE_BRICK, ItemIds::MONSTER_EGG, Meta::INFESTED_STONE_BRICK_CHISELED), "Infested Chiseled Stone Brick", $infestedStoneBreakInfo, $chiseledStoneBrick));
$this->register(new InfestedStone(new BID(Ids::INFESTED_STONE), "Infested Stone", $infestedStoneBreakInfo, $stone));
$this->register(new InfestedStone(new BID(Ids::INFESTED_STONE_BRICK), "Infested Stone Brick", $infestedStoneBreakInfo, $stoneBrick));
$this->register(new InfestedStone(new BID(Ids::INFESTED_COBBLESTONE), "Infested Cobblestone", $infestedStoneBreakInfo, $cobblestone));
$this->register(new InfestedStone(new BID(Ids::INFESTED_MOSSY_STONE_BRICK), "Infested Mossy Stone Brick", $infestedStoneBreakInfo, $mossyStoneBrick));
$this->register(new InfestedStone(new BID(Ids::INFESTED_CRACKED_STONE_BRICK), "Infested Cracked Stone Brick", $infestedStoneBreakInfo, $crackedStoneBrick));
$this->register(new InfestedStone(new BID(Ids::INFESTED_CHISELED_STONE_BRICK), "Infested Chiseled Stone Brick", $infestedStoneBreakInfo, $chiseledStoneBrick));
$this->register(new Stair(new BID(Ids::STONE_STAIRS, ItemIds::NORMAL_STONE_STAIRS, 0), "Stone Stairs", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::SMOOTH_STONE, ItemIds::SMOOTH_STONE, 0), "Smooth Stone", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::ANDESITE_STAIRS, ItemIds::ANDESITE_STAIRS, 0), "Andesite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::DIORITE_STAIRS, ItemIds::DIORITE_STAIRS, 0), "Diorite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::GRANITE_STAIRS, ItemIds::GRANITE_STAIRS, 0), "Granite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::POLISHED_ANDESITE_STAIRS, ItemIds::POLISHED_ANDESITE_STAIRS, 0), "Polished Andesite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::POLISHED_DIORITE_STAIRS, ItemIds::POLISHED_DIORITE_STAIRS, 0), "Polished Diorite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::POLISHED_GRANITE_STAIRS, ItemIds::POLISHED_GRANITE_STAIRS, 0), "Polished Granite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::STONE_BRICK_STAIRS, ItemIds::STONE_BRICK_STAIRS, 0), "Stone Brick Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::MOSSY_STONE_BRICK_STAIRS, ItemIds::MOSSY_STONE_BRICK_STAIRS, 0), "Mossy Stone Brick Stairs", $stoneBreakInfo));
$this->register(new StoneButton(new BID(Ids::STONE_BUTTON, ItemIds::STONE_BUTTON, 0), "Stone Button", new BreakInfo(0.5, ToolType::PICKAXE)));
$this->register(new Stonecutter(new BID(Ids::STONECUTTER, ItemIds::STONECUTTER_BLOCK, 0), "Stonecutter", new BreakInfo(3.5, ToolType::PICKAXE)));
$this->register(new StonePressurePlate(new BID(Ids::STONE_PRESSURE_PLATE, ItemIds::STONE_PRESSURE_PLATE, 0), "Stone Pressure Plate", new BreakInfo(0.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Stair(new BID(Ids::STONE_STAIRS), "Stone Stairs", $stoneBreakInfo));
$this->register(new Opaque(new BID(Ids::SMOOTH_STONE), "Smooth Stone", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::ANDESITE_STAIRS), "Andesite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::DIORITE_STAIRS), "Diorite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::GRANITE_STAIRS), "Granite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::POLISHED_ANDESITE_STAIRS), "Polished Andesite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::POLISHED_DIORITE_STAIRS), "Polished Diorite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::POLISHED_GRANITE_STAIRS), "Polished Granite Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::STONE_BRICK_STAIRS), "Stone Brick Stairs", $stoneBreakInfo));
$this->register(new Stair(new BID(Ids::MOSSY_STONE_BRICK_STAIRS), "Mossy Stone Brick Stairs", $stoneBreakInfo));
$this->register(new StoneButton(new BID(Ids::STONE_BUTTON), "Stone Button", new BreakInfo(0.5, ToolType::PICKAXE)));
$this->register(new Stonecutter(new BID(Ids::STONECUTTER), "Stonecutter", new BreakInfo(3.5, ToolType::PICKAXE)));
$this->register(new StonePressurePlate(new BID(Ids::STONE_PRESSURE_PLATE), "Stone Pressure Plate", new BreakInfo(0.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
//TODO: in the future this won't be the same for all the types
$stoneSlabBreakInfo = new BreakInfo(2.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0);
$getStoneSlabId = static fn(int $blockTypeId, int $stoneSlabId, int $meta) => BlockLegacyIdHelper::getStoneSlabIdentifier($blockTypeId, $stoneSlabId, $meta);
foreach([
new Slab($getStoneSlabId(Ids::BRICK_SLAB, 1, Meta::STONE_SLAB_BRICK), "Brick", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::COBBLESTONE_SLAB, 1, Meta::STONE_SLAB_COBBLESTONE), "Cobblestone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::FAKE_WOODEN_SLAB, 1, Meta::STONE_SLAB_FAKE_WOODEN), "Fake Wooden", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::NETHER_BRICK_SLAB, 1, Meta::STONE_SLAB_NETHER_BRICK), "Nether Brick", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::QUARTZ_SLAB, 1, Meta::STONE_SLAB_QUARTZ), "Quartz", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::SANDSTONE_SLAB, 1, Meta::STONE_SLAB_SANDSTONE), "Sandstone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::SMOOTH_STONE_SLAB, 1, Meta::STONE_SLAB_SMOOTH_STONE), "Smooth Stone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::STONE_BRICK_SLAB, 1, Meta::STONE_SLAB_STONE_BRICK), "Stone Brick", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::DARK_PRISMARINE_SLAB, 2, Meta::STONE_SLAB2_DARK_PRISMARINE), "Dark Prismarine", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::MOSSY_COBBLESTONE_SLAB, 2, Meta::STONE_SLAB2_MOSSY_COBBLESTONE), "Mossy Cobblestone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::PRISMARINE_SLAB, 2, Meta::STONE_SLAB2_PRISMARINE), "Prismarine", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::PRISMARINE_BRICKS_SLAB, 2, Meta::STONE_SLAB2_PRISMARINE_BRICKS), "Prismarine Bricks", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::PURPUR_SLAB, 2, Meta::STONE_SLAB2_PURPUR), "Purpur", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::RED_NETHER_BRICK_SLAB, 2, Meta::STONE_SLAB2_RED_NETHER_BRICK), "Red Nether Brick", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::RED_SANDSTONE_SLAB, 2, Meta::STONE_SLAB2_RED_SANDSTONE), "Red Sandstone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::SMOOTH_SANDSTONE_SLAB, 2, Meta::STONE_SLAB2_SMOOTH_SANDSTONE), "Smooth Sandstone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::ANDESITE_SLAB, 3, Meta::STONE_SLAB3_ANDESITE), "Andesite", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::DIORITE_SLAB, 3, Meta::STONE_SLAB3_DIORITE), "Diorite", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::END_STONE_BRICK_SLAB, 3, Meta::STONE_SLAB3_END_STONE_BRICK), "End Stone Brick", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::GRANITE_SLAB, 3, Meta::STONE_SLAB3_GRANITE), "Granite", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::POLISHED_ANDESITE_SLAB, 3, Meta::STONE_SLAB3_POLISHED_ANDESITE), "Polished Andesite", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::POLISHED_DIORITE_SLAB, 3, Meta::STONE_SLAB3_POLISHED_DIORITE), "Polished Diorite", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::POLISHED_GRANITE_SLAB, 3, Meta::STONE_SLAB3_POLISHED_GRANITE), "Polished Granite", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::SMOOTH_RED_SANDSTONE_SLAB, 3, Meta::STONE_SLAB3_SMOOTH_RED_SANDSTONE), "Smooth Red Sandstone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::CUT_RED_SANDSTONE_SLAB, 4, Meta::STONE_SLAB4_CUT_RED_SANDSTONE), "Cut Red Sandstone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::CUT_SANDSTONE_SLAB, 4, Meta::STONE_SLAB4_CUT_SANDSTONE), "Cut Sandstone", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::MOSSY_STONE_BRICK_SLAB, 4, Meta::STONE_SLAB4_MOSSY_STONE_BRICK), "Mossy Stone Brick", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::SMOOTH_QUARTZ_SLAB, 4, Meta::STONE_SLAB4_SMOOTH_QUARTZ), "Smooth Quartz", $stoneSlabBreakInfo),
new Slab($getStoneSlabId(Ids::STONE_SLAB, 4, Meta::STONE_SLAB4_STONE), "Stone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::BRICK_SLAB), "Brick", $stoneSlabBreakInfo),
new Slab(new BID(Ids::COBBLESTONE_SLAB), "Cobblestone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::FAKE_WOODEN_SLAB), "Fake Wooden", $stoneSlabBreakInfo),
new Slab(new BID(Ids::NETHER_BRICK_SLAB), "Nether Brick", $stoneSlabBreakInfo),
new Slab(new BID(Ids::QUARTZ_SLAB), "Quartz", $stoneSlabBreakInfo),
new Slab(new BID(Ids::SANDSTONE_SLAB), "Sandstone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::SMOOTH_STONE_SLAB), "Smooth Stone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::STONE_BRICK_SLAB), "Stone Brick", $stoneSlabBreakInfo),
new Slab(new BID(Ids::DARK_PRISMARINE_SLAB), "Dark Prismarine", $stoneSlabBreakInfo),
new Slab(new BID(Ids::MOSSY_COBBLESTONE_SLAB), "Mossy Cobblestone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::PRISMARINE_SLAB), "Prismarine", $stoneSlabBreakInfo),
new Slab(new BID(Ids::PRISMARINE_BRICKS_SLAB), "Prismarine Bricks", $stoneSlabBreakInfo),
new Slab(new BID(Ids::PURPUR_SLAB), "Purpur", $stoneSlabBreakInfo),
new Slab(new BID(Ids::RED_NETHER_BRICK_SLAB), "Red Nether Brick", $stoneSlabBreakInfo),
new Slab(new BID(Ids::RED_SANDSTONE_SLAB), "Red Sandstone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::SMOOTH_SANDSTONE_SLAB), "Smooth Sandstone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::ANDESITE_SLAB), "Andesite", $stoneSlabBreakInfo),
new Slab(new BID(Ids::DIORITE_SLAB), "Diorite", $stoneSlabBreakInfo),
new Slab(new BID(Ids::END_STONE_BRICK_SLAB), "End Stone Brick", $stoneSlabBreakInfo),
new Slab(new BID(Ids::GRANITE_SLAB), "Granite", $stoneSlabBreakInfo),
new Slab(new BID(Ids::POLISHED_ANDESITE_SLAB), "Polished Andesite", $stoneSlabBreakInfo),
new Slab(new BID(Ids::POLISHED_DIORITE_SLAB), "Polished Diorite", $stoneSlabBreakInfo),
new Slab(new BID(Ids::POLISHED_GRANITE_SLAB), "Polished Granite", $stoneSlabBreakInfo),
new Slab(new BID(Ids::SMOOTH_RED_SANDSTONE_SLAB), "Smooth Red Sandstone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::CUT_RED_SANDSTONE_SLAB), "Cut Red Sandstone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::CUT_SANDSTONE_SLAB), "Cut Sandstone", $stoneSlabBreakInfo),
new Slab(new BID(Ids::MOSSY_STONE_BRICK_SLAB), "Mossy Stone Brick", $stoneSlabBreakInfo),
new Slab(new BID(Ids::SMOOTH_QUARTZ_SLAB), "Smooth Quartz", $stoneSlabBreakInfo),
new Slab(new BID(Ids::STONE_SLAB), "Stone", $stoneSlabBreakInfo),
] as $slabType){
$this->register($slabType);
}
$this->register(new Opaque(new BID(Ids::LEGACY_STONECUTTER, ItemIds::STONECUTTER, 0), "Legacy Stonecutter", new BreakInfo(3.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Sugarcane(new BID(Ids::SUGARCANE, ItemIds::REEDS, 0), "Sugarcane", BreakInfo::instant()));
$this->register(new SweetBerryBush(new BID(Ids::SWEET_BERRY_BUSH, ItemIds::SWEET_BERRIES, 0), "Sweet Berry Bush", BreakInfo::instant()));
$this->register(new TNT(new BID(Ids::TNT, ItemIds::TNT, 0), "TNT", BreakInfo::instant()));
$this->register(new TallGrass(new BID(Ids::FERN, ItemIds::TALLGRASS, Meta::TALLGRASS_FERN), "Fern", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new TallGrass(new BID(Ids::TALL_GRASS, ItemIds::TALLGRASS, Meta::TALLGRASS_NORMAL), "Tall Grass", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new Opaque(new BID(Ids::LEGACY_STONECUTTER), "Legacy Stonecutter", new BreakInfo(3.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new Sugarcane(new BID(Ids::SUGARCANE), "Sugarcane", BreakInfo::instant()));
$this->register(new SweetBerryBush(new BID(Ids::SWEET_BERRY_BUSH), "Sweet Berry Bush", BreakInfo::instant()));
$this->register(new TNT(new BID(Ids::TNT), "TNT", BreakInfo::instant()));
$this->register(new TallGrass(new BID(Ids::FERN), "Fern", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new TallGrass(new BID(Ids::TALL_GRASS), "Tall Grass", BreakInfo::instant(ToolType::SHEARS, 1)));
$this->register(new Torch(new BID(Ids::BLUE_TORCH, ItemIds::COLORED_TORCH_BP, 0), "Blue Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::PURPLE_TORCH, ItemIds::COLORED_TORCH_BP, 8), "Purple Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::RED_TORCH, ItemIds::COLORED_TORCH_RG, 0), "Red Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::GREEN_TORCH, ItemIds::COLORED_TORCH_RG, 8), "Green Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::TORCH, ItemIds::TORCH, 0), "Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::BLUE_TORCH), "Blue Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::PURPLE_TORCH), "Purple Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::RED_TORCH), "Red Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::GREEN_TORCH), "Green Torch", BreakInfo::instant()));
$this->register(new Torch(new BID(Ids::TORCH), "Torch", BreakInfo::instant()));
$this->register(new TrappedChest(new BID(Ids::TRAPPED_CHEST, ItemIds::TRAPPED_CHEST, 0, TileChest::class), "Trapped Chest", $chestBreakInfo));
$this->register(new Tripwire(new BID(Ids::TRIPWIRE, ItemIds::STRING, 0), "Tripwire", BreakInfo::instant()));
$this->register(new TripwireHook(new BID(Ids::TRIPWIRE_HOOK, ItemIds::TRIPWIRE_HOOK, 0), "Tripwire Hook", BreakInfo::instant()));
$this->register(new UnderwaterTorch(new BID(Ids::UNDERWATER_TORCH, ItemIds::UNDERWATER_TORCH, 0), "Underwater Torch", BreakInfo::instant()));
$this->register(new Vine(new BID(Ids::VINES, ItemIds::VINE, 0), "Vines", new BreakInfo(0.2, ToolType::AXE)));
$this->register(new Water(new BID(Ids::WATER, ItemIds::FLOWING_WATER, 0), "Water", BreakInfo::indestructible(500.0)));
$this->register(new WaterLily(new BID(Ids::LILY_PAD, ItemIds::LILY_PAD, 0), "Lily Pad", BreakInfo::instant()));
$this->register(new TrappedChest(new BID(Ids::TRAPPED_CHEST, TileChest::class), "Trapped Chest", $chestBreakInfo));
$this->register(new Tripwire(new BID(Ids::TRIPWIRE), "Tripwire", BreakInfo::instant()));
$this->register(new TripwireHook(new BID(Ids::TRIPWIRE_HOOK), "Tripwire Hook", BreakInfo::instant()));
$this->register(new UnderwaterTorch(new BID(Ids::UNDERWATER_TORCH), "Underwater Torch", BreakInfo::instant()));
$this->register(new Vine(new BID(Ids::VINES), "Vines", new BreakInfo(0.2, ToolType::AXE)));
$this->register(new Water(new BID(Ids::WATER), "Water", BreakInfo::indestructible(500.0)));
$this->register(new WaterLily(new BID(Ids::LILY_PAD), "Lily Pad", BreakInfo::instant()));
$weightedPressurePlateBreakInfo = new BreakInfo(0.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel());
$this->register(new WeightedPressurePlateHeavy(new BID(Ids::WEIGHTED_PRESSURE_PLATE_HEAVY, ItemIds::HEAVY_WEIGHTED_PRESSURE_PLATE, 0), "Weighted Pressure Plate Heavy", $weightedPressurePlateBreakInfo));
$this->register(new WeightedPressurePlateLight(new BID(Ids::WEIGHTED_PRESSURE_PLATE_LIGHT, ItemIds::LIGHT_WEIGHTED_PRESSURE_PLATE, 0), "Weighted Pressure Plate Light", $weightedPressurePlateBreakInfo));
$this->register(new Wheat(new BID(Ids::WHEAT, ItemIds::WHEAT_BLOCK, 0), "Wheat Block", BreakInfo::instant()));
$this->register(new WeightedPressurePlateHeavy(new BID(Ids::WEIGHTED_PRESSURE_PLATE_HEAVY), "Weighted Pressure Plate Heavy", $weightedPressurePlateBreakInfo));
$this->register(new WeightedPressurePlateLight(new BID(Ids::WEIGHTED_PRESSURE_PLATE_LIGHT), "Weighted Pressure Plate Light", $weightedPressurePlateBreakInfo));
$this->register(new Wheat(new BID(Ids::WHEAT), "Wheat Block", BreakInfo::instant()));
$planksBreakInfo = new BreakInfo(2.0, ToolType::AXE, 0, 15.0);
$leavesBreakInfo = new class(0.2, ToolType::HOE) extends BreakInfo{
@ -486,19 +482,19 @@ class BlockFactory{
}
$sandstoneBreakInfo = new BreakInfo(0.8, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel());
$this->register(new Stair(new BID(Ids::RED_SANDSTONE_STAIRS, ItemIds::RED_SANDSTONE_STAIRS, 0), "Red Sandstone Stairs", $sandstoneBreakInfo));
$this->register(new Stair(new BID(Ids::SMOOTH_RED_SANDSTONE_STAIRS, ItemIds::SMOOTH_RED_SANDSTONE_STAIRS, 0), "Smooth Red Sandstone Stairs", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::RED_SANDSTONE, ItemIds::RED_SANDSTONE, Meta::SANDSTONE_NORMAL), "Red Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::CHISELED_RED_SANDSTONE, ItemIds::RED_SANDSTONE, Meta::SANDSTONE_CHISELED), "Chiseled Red Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::CUT_RED_SANDSTONE, ItemIds::RED_SANDSTONE, Meta::SANDSTONE_CUT), "Cut Red Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::SMOOTH_RED_SANDSTONE, ItemIds::RED_SANDSTONE, Meta::SANDSTONE_SMOOTH), "Smooth Red Sandstone", $sandstoneBreakInfo));
$this->register(new Stair(new BID(Ids::RED_SANDSTONE_STAIRS), "Red Sandstone Stairs", $sandstoneBreakInfo));
$this->register(new Stair(new BID(Ids::SMOOTH_RED_SANDSTONE_STAIRS), "Smooth Red Sandstone Stairs", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::RED_SANDSTONE), "Red Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::CHISELED_RED_SANDSTONE), "Chiseled Red Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::CUT_RED_SANDSTONE), "Cut Red Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::SMOOTH_RED_SANDSTONE), "Smooth Red Sandstone", $sandstoneBreakInfo));
$this->register(new Stair(new BID(Ids::SANDSTONE_STAIRS, ItemIds::SANDSTONE_STAIRS, 0), "Sandstone Stairs", $sandstoneBreakInfo));
$this->register(new Stair(new BID(Ids::SMOOTH_SANDSTONE_STAIRS, ItemIds::SMOOTH_SANDSTONE_STAIRS, 0), "Smooth Sandstone Stairs", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::SANDSTONE, ItemIds::SANDSTONE, Meta::SANDSTONE_NORMAL), "Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::CHISELED_SANDSTONE, ItemIds::SANDSTONE, Meta::SANDSTONE_CHISELED), "Chiseled Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::CUT_SANDSTONE, ItemIds::SANDSTONE, Meta::SANDSTONE_CUT), "Cut Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::SMOOTH_SANDSTONE, ItemIds::SANDSTONE, Meta::SANDSTONE_SMOOTH), "Smooth Sandstone", $sandstoneBreakInfo));
$this->register(new Stair(new BID(Ids::SANDSTONE_STAIRS), "Sandstone Stairs", $sandstoneBreakInfo));
$this->register(new Stair(new BID(Ids::SMOOTH_SANDSTONE_STAIRS), "Smooth Sandstone Stairs", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::SANDSTONE), "Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::CHISELED_SANDSTONE), "Chiseled Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::CUT_SANDSTONE), "Cut Sandstone", $sandstoneBreakInfo));
$this->register(new Opaque(new BID(Ids::SMOOTH_SANDSTONE), "Smooth Sandstone", $sandstoneBreakInfo));
$glazedTerracottaBreakInfo = new BreakInfo(1.4, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel());
foreach(DyeColor::getAll() as $color){
@ -507,16 +503,16 @@ class BlockFactory{
};
$this->register(new GlazedTerracotta(BlockLegacyIdHelper::getGlazedTerracottaIdentifier($color), $coloredName("Glazed Terracotta"), $glazedTerracottaBreakInfo));
}
$this->register(new DyedShulkerBox(new BID(Ids::DYED_SHULKER_BOX, ItemIds::SHULKER_BOX, 0, TileShulkerBox::class), "Dyed Shulker Box", $shulkerBoxBreakInfo));
$this->register(new StainedGlass(new BID(Ids::STAINED_GLASS, ItemIds::STAINED_GLASS, 0), "Stained Glass", $glassBreakInfo));
$this->register(new StainedGlassPane(new BID(Ids::STAINED_GLASS_PANE, ItemIds::STAINED_GLASS_PANE, 0), "Stained Glass Pane", $glassBreakInfo));
$this->register(new StainedHardenedClay(new BID(Ids::STAINED_CLAY, ItemIds::STAINED_CLAY, 0), "Stained Clay", $hardenedClayBreakInfo));
$this->register(new StainedHardenedGlass(new BID(Ids::STAINED_HARDENED_GLASS, ItemIds::HARD_STAINED_GLASS, 0), "Stained Hardened Glass", $hardenedGlassBreakInfo));
$this->register(new StainedHardenedGlassPane(new BID(Ids::STAINED_HARDENED_GLASS_PANE, ItemIds::HARD_STAINED_GLASS_PANE, 0), "Stained Hardened Glass Pane", $hardenedGlassBreakInfo));
$this->register(new Carpet(new BID(Ids::CARPET, ItemIds::CARPET, 0), "Carpet", new BreakInfo(0.1)));
$this->register(new Concrete(new BID(Ids::CONCRETE, ItemIds::CONCRETE, 0), "Concrete", new BreakInfo(1.8, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new ConcretePowder(new BID(Ids::CONCRETE_POWDER, ItemIds::CONCRETE_POWDER, 0), "Concrete Powder", new BreakInfo(0.5, ToolType::SHOVEL)));
$this->register(new Wool(new BID(Ids::WOOL, ItemIds::WOOL, 0), "Wool", new class(0.8, ToolType::SHEARS) extends BreakInfo{
$this->register(new DyedShulkerBox(new BID(Ids::DYED_SHULKER_BOX, TileShulkerBox::class), "Dyed Shulker Box", $shulkerBoxBreakInfo));
$this->register(new StainedGlass(new BID(Ids::STAINED_GLASS), "Stained Glass", $glassBreakInfo));
$this->register(new StainedGlassPane(new BID(Ids::STAINED_GLASS_PANE), "Stained Glass Pane", $glassBreakInfo));
$this->register(new StainedHardenedClay(new BID(Ids::STAINED_CLAY), "Stained Clay", $hardenedClayBreakInfo));
$this->register(new StainedHardenedGlass(new BID(Ids::STAINED_HARDENED_GLASS), "Stained Hardened Glass", $hardenedGlassBreakInfo));
$this->register(new StainedHardenedGlassPane(new BID(Ids::STAINED_HARDENED_GLASS_PANE), "Stained Hardened Glass Pane", $hardenedGlassBreakInfo));
$this->register(new Carpet(new BID(Ids::CARPET), "Carpet", new BreakInfo(0.1)));
$this->register(new Concrete(new BID(Ids::CONCRETE), "Concrete", new BreakInfo(1.8, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel())));
$this->register(new ConcretePowder(new BID(Ids::CONCRETE_POWDER), "Concrete Powder", new BreakInfo(0.5, ToolType::SHOVEL)));
$this->register(new Wool(new BID(Ids::WOOL), "Wool", new class(0.8, ToolType::SHEARS) extends BreakInfo{
public function getBreakTime(Item $item) : float{
$time = parent::getBreakTime($item);
if($item->getBlockToolType() === ToolType::SHEARS){
@ -529,45 +525,45 @@ class BlockFactory{
//TODO: in the future these won't all have the same hardness; they only do now because of the old metadata crap
$wallBreakInfo = new BreakInfo(2.0, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel(), 30.0);
$this->register(new Wall(new BID(Ids::COBBLESTONE_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_COBBLESTONE), "Cobblestone Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::ANDESITE_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_ANDESITE), "Andesite Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::BRICK_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_BRICK), "Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::DIORITE_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_DIORITE), "Diorite Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::END_STONE_BRICK_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_END_STONE_BRICK), "End Stone Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::GRANITE_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_GRANITE), "Granite Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::MOSSY_STONE_BRICK_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_MOSSY_STONE_BRICK), "Mossy Stone Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::MOSSY_COBBLESTONE_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_MOSSY_COBBLESTONE), "Mossy Cobblestone Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::NETHER_BRICK_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_NETHER_BRICK), "Nether Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::PRISMARINE_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_PRISMARINE), "Prismarine Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::RED_NETHER_BRICK_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_RED_NETHER_BRICK), "Red Nether Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::RED_SANDSTONE_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_RED_SANDSTONE), "Red Sandstone Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::SANDSTONE_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_SANDSTONE), "Sandstone Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::STONE_BRICK_WALL, ItemIds::COBBLESTONE_WALL, Meta::WALL_STONE_BRICK), "Stone Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::COBBLESTONE_WALL), "Cobblestone Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::ANDESITE_WALL), "Andesite Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::BRICK_WALL), "Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::DIORITE_WALL), "Diorite Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::END_STONE_BRICK_WALL), "End Stone Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::GRANITE_WALL), "Granite Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::MOSSY_STONE_BRICK_WALL), "Mossy Stone Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::MOSSY_COBBLESTONE_WALL), "Mossy Cobblestone Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::NETHER_BRICK_WALL), "Nether Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::PRISMARINE_WALL), "Prismarine Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::RED_NETHER_BRICK_WALL), "Red Nether Brick Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::RED_SANDSTONE_WALL), "Red Sandstone Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::SANDSTONE_WALL), "Sandstone Wall", $wallBreakInfo));
$this->register(new Wall(new BID(Ids::STONE_BRICK_WALL), "Stone Brick Wall", $wallBreakInfo));
$this->registerElements();
$chemistryTableBreakInfo = new BreakInfo(2.5, ToolType::PICKAXE, ToolTier::WOOD()->getHarvestLevel());
$this->register(new ChemistryTable(new BID(Ids::COMPOUND_CREATOR, ItemIds::CHEMISTRY_TABLE, Meta::CHEMISTRY_COMPOUND_CREATOR), "Compound Creator", $chemistryTableBreakInfo));
$this->register(new ChemistryTable(new BID(Ids::ELEMENT_CONSTRUCTOR, ItemIds::CHEMISTRY_TABLE, Meta::CHEMISTRY_ELEMENT_CONSTRUCTOR), "Element Constructor", $chemistryTableBreakInfo));
$this->register(new ChemistryTable(new BID(Ids::LAB_TABLE, ItemIds::CHEMISTRY_TABLE, Meta::CHEMISTRY_LAB_TABLE), "Lab Table", $chemistryTableBreakInfo));
$this->register(new ChemistryTable(new BID(Ids::MATERIAL_REDUCER, ItemIds::CHEMISTRY_TABLE, Meta::CHEMISTRY_MATERIAL_REDUCER), "Material Reducer", $chemistryTableBreakInfo));
$this->register(new ChemistryTable(new BID(Ids::COMPOUND_CREATOR), "Compound Creator", $chemistryTableBreakInfo));
$this->register(new ChemistryTable(new BID(Ids::ELEMENT_CONSTRUCTOR), "Element Constructor", $chemistryTableBreakInfo));
$this->register(new ChemistryTable(new BID(Ids::LAB_TABLE), "Lab Table", $chemistryTableBreakInfo));
$this->register(new ChemistryTable(new BID(Ids::MATERIAL_REDUCER), "Material Reducer", $chemistryTableBreakInfo));
$this->register(new ChemicalHeat(new BID(Ids::CHEMICAL_HEAT, ItemIds::CHEMICAL_HEAT, 0), "Heat Block", $chemistryTableBreakInfo));
$this->register(new ChemicalHeat(new BID(Ids::CHEMICAL_HEAT), "Heat Block", $chemistryTableBreakInfo));
$this->registerMushroomBlocks();
$this->register(new Coral(
new BID(Ids::CORAL, ItemIds::CORAL, 0),
new BID(Ids::CORAL),
"Coral",
BreakInfo::instant(),
));
$this->register(new FloorCoralFan(
new BID(Ids::CORAL_FAN, ItemIds::CORAL_FAN, 0),
new BID(Ids::CORAL_FAN),
"Coral Fan",
BreakInfo::instant(),
));
$this->register(new WallCoralFan(
new BID(Ids::WALL_CORAL_FAN, ItemIds::CORAL_FAN, 0),
new BID(Ids::WALL_CORAL_FAN),
"Wall Coral Fan",
BreakInfo::instant(),
));
@ -710,136 +706,136 @@ class BlockFactory{
private function registerMushroomBlocks() : void{
$mushroomBlockBreakInfo = new BreakInfo(0.2, ToolType::AXE);
$this->register(new BrownMushroomBlock(new BID(Ids::BROWN_MUSHROOM_BLOCK, ItemIds::BROWN_MUSHROOM_BLOCK, 0), "Brown Mushroom Block", $mushroomBlockBreakInfo));
$this->register(new RedMushroomBlock(new BID(Ids::RED_MUSHROOM_BLOCK, ItemIds::RED_MUSHROOM_BLOCK, 0), "Red Mushroom Block", $mushroomBlockBreakInfo));
$this->register(new BrownMushroomBlock(new BID(Ids::BROWN_MUSHROOM_BLOCK), "Brown Mushroom Block", $mushroomBlockBreakInfo));
$this->register(new RedMushroomBlock(new BID(Ids::RED_MUSHROOM_BLOCK), "Red Mushroom Block", $mushroomBlockBreakInfo));
//finally, the stems
$this->register(new MushroomStem(new BID(Ids::MUSHROOM_STEM, ItemIds::BROWN_MUSHROOM_BLOCK, Meta::MUSHROOM_BLOCK_STEM), "Mushroom Stem", $mushroomBlockBreakInfo));
$this->register(new MushroomStem(new BID(Ids::ALL_SIDED_MUSHROOM_STEM, ItemIds::BROWN_MUSHROOM_BLOCK, Meta::MUSHROOM_BLOCK_ALL_STEM), "All Sided Mushroom Stem", $mushroomBlockBreakInfo));
$this->register(new MushroomStem(new BID(Ids::MUSHROOM_STEM), "Mushroom Stem", $mushroomBlockBreakInfo));
$this->register(new MushroomStem(new BID(Ids::ALL_SIDED_MUSHROOM_STEM), "All Sided Mushroom Stem", $mushroomBlockBreakInfo));
}
private function registerElements() : void{
$instaBreak = BreakInfo::instant();
$this->register(new Opaque(new BID(Ids::ELEMENT_ZERO, ItemIds::ELEMENT_0, 0), "???", $instaBreak));
$this->register(new Opaque(new BID(Ids::ELEMENT_ZERO), "???", $instaBreak));
$this->register(new Element(new BID(Ids::ELEMENT_HYDROGEN, ItemIds::ELEMENT_1, 0), "Hydrogen", $instaBreak, "h", 1, 5));
$this->register(new Element(new BID(Ids::ELEMENT_HELIUM, ItemIds::ELEMENT_2, 0), "Helium", $instaBreak, "he", 2, 7));
$this->register(new Element(new BID(Ids::ELEMENT_LITHIUM, ItemIds::ELEMENT_3, 0), "Lithium", $instaBreak, "li", 3, 0));
$this->register(new Element(new BID(Ids::ELEMENT_BERYLLIUM, ItemIds::ELEMENT_4, 0), "Beryllium", $instaBreak, "be", 4, 1));
$this->register(new Element(new BID(Ids::ELEMENT_BORON, ItemIds::ELEMENT_5, 0), "Boron", $instaBreak, "b", 5, 4));
$this->register(new Element(new BID(Ids::ELEMENT_CARBON, ItemIds::ELEMENT_6, 0), "Carbon", $instaBreak, "c", 6, 5));
$this->register(new Element(new BID(Ids::ELEMENT_NITROGEN, ItemIds::ELEMENT_7, 0), "Nitrogen", $instaBreak, "n", 7, 5));
$this->register(new Element(new BID(Ids::ELEMENT_OXYGEN, ItemIds::ELEMENT_8, 0), "Oxygen", $instaBreak, "o", 8, 5));
$this->register(new Element(new BID(Ids::ELEMENT_FLUORINE, ItemIds::ELEMENT_9, 0), "Fluorine", $instaBreak, "f", 9, 6));
$this->register(new Element(new BID(Ids::ELEMENT_NEON, ItemIds::ELEMENT_10, 0), "Neon", $instaBreak, "ne", 10, 7));
$this->register(new Element(new BID(Ids::ELEMENT_SODIUM, ItemIds::ELEMENT_11, 0), "Sodium", $instaBreak, "na", 11, 0));
$this->register(new Element(new BID(Ids::ELEMENT_MAGNESIUM, ItemIds::ELEMENT_12, 0), "Magnesium", $instaBreak, "mg", 12, 1));
$this->register(new Element(new BID(Ids::ELEMENT_ALUMINUM, ItemIds::ELEMENT_13, 0), "Aluminum", $instaBreak, "al", 13, 3));
$this->register(new Element(new BID(Ids::ELEMENT_SILICON, ItemIds::ELEMENT_14, 0), "Silicon", $instaBreak, "si", 14, 4));
$this->register(new Element(new BID(Ids::ELEMENT_PHOSPHORUS, ItemIds::ELEMENT_15, 0), "Phosphorus", $instaBreak, "p", 15, 5));
$this->register(new Element(new BID(Ids::ELEMENT_SULFUR, ItemIds::ELEMENT_16, 0), "Sulfur", $instaBreak, "s", 16, 5));
$this->register(new Element(new BID(Ids::ELEMENT_CHLORINE, ItemIds::ELEMENT_17, 0), "Chlorine", $instaBreak, "cl", 17, 6));
$this->register(new Element(new BID(Ids::ELEMENT_ARGON, ItemIds::ELEMENT_18, 0), "Argon", $instaBreak, "ar", 18, 7));
$this->register(new Element(new BID(Ids::ELEMENT_POTASSIUM, ItemIds::ELEMENT_19, 0), "Potassium", $instaBreak, "k", 19, 0));
$this->register(new Element(new BID(Ids::ELEMENT_CALCIUM, ItemIds::ELEMENT_20, 0), "Calcium", $instaBreak, "ca", 20, 1));
$this->register(new Element(new BID(Ids::ELEMENT_SCANDIUM, ItemIds::ELEMENT_21, 0), "Scandium", $instaBreak, "sc", 21, 2));
$this->register(new Element(new BID(Ids::ELEMENT_TITANIUM, ItemIds::ELEMENT_22, 0), "Titanium", $instaBreak, "ti", 22, 2));
$this->register(new Element(new BID(Ids::ELEMENT_VANADIUM, ItemIds::ELEMENT_23, 0), "Vanadium", $instaBreak, "v", 23, 2));
$this->register(new Element(new BID(Ids::ELEMENT_CHROMIUM, ItemIds::ELEMENT_24, 0), "Chromium", $instaBreak, "cr", 24, 2));
$this->register(new Element(new BID(Ids::ELEMENT_MANGANESE, ItemIds::ELEMENT_25, 0), "Manganese", $instaBreak, "mn", 25, 2));
$this->register(new Element(new BID(Ids::ELEMENT_IRON, ItemIds::ELEMENT_26, 0), "Iron", $instaBreak, "fe", 26, 2));
$this->register(new Element(new BID(Ids::ELEMENT_COBALT, ItemIds::ELEMENT_27, 0), "Cobalt", $instaBreak, "co", 27, 2));
$this->register(new Element(new BID(Ids::ELEMENT_NICKEL, ItemIds::ELEMENT_28, 0), "Nickel", $instaBreak, "ni", 28, 2));
$this->register(new Element(new BID(Ids::ELEMENT_COPPER, ItemIds::ELEMENT_29, 0), "Copper", $instaBreak, "cu", 29, 2));
$this->register(new Element(new BID(Ids::ELEMENT_ZINC, ItemIds::ELEMENT_30, 0), "Zinc", $instaBreak, "zn", 30, 2));
$this->register(new Element(new BID(Ids::ELEMENT_GALLIUM, ItemIds::ELEMENT_31, 0), "Gallium", $instaBreak, "ga", 31, 3));
$this->register(new Element(new BID(Ids::ELEMENT_GERMANIUM, ItemIds::ELEMENT_32, 0), "Germanium", $instaBreak, "ge", 32, 4));
$this->register(new Element(new BID(Ids::ELEMENT_ARSENIC, ItemIds::ELEMENT_33, 0), "Arsenic", $instaBreak, "as", 33, 4));
$this->register(new Element(new BID(Ids::ELEMENT_SELENIUM, ItemIds::ELEMENT_34, 0), "Selenium", $instaBreak, "se", 34, 5));
$this->register(new Element(new BID(Ids::ELEMENT_BROMINE, ItemIds::ELEMENT_35, 0), "Bromine", $instaBreak, "br", 35, 6));
$this->register(new Element(new BID(Ids::ELEMENT_KRYPTON, ItemIds::ELEMENT_36, 0), "Krypton", $instaBreak, "kr", 36, 7));
$this->register(new Element(new BID(Ids::ELEMENT_RUBIDIUM, ItemIds::ELEMENT_37, 0), "Rubidium", $instaBreak, "rb", 37, 0));
$this->register(new Element(new BID(Ids::ELEMENT_STRONTIUM, ItemIds::ELEMENT_38, 0), "Strontium", $instaBreak, "sr", 38, 1));
$this->register(new Element(new BID(Ids::ELEMENT_YTTRIUM, ItemIds::ELEMENT_39, 0), "Yttrium", $instaBreak, "y", 39, 2));
$this->register(new Element(new BID(Ids::ELEMENT_ZIRCONIUM, ItemIds::ELEMENT_40, 0), "Zirconium", $instaBreak, "zr", 40, 2));
$this->register(new Element(new BID(Ids::ELEMENT_NIOBIUM, ItemIds::ELEMENT_41, 0), "Niobium", $instaBreak, "nb", 41, 2));
$this->register(new Element(new BID(Ids::ELEMENT_MOLYBDENUM, ItemIds::ELEMENT_42, 0), "Molybdenum", $instaBreak, "mo", 42, 2));
$this->register(new Element(new BID(Ids::ELEMENT_TECHNETIUM, ItemIds::ELEMENT_43, 0), "Technetium", $instaBreak, "tc", 43, 2));
$this->register(new Element(new BID(Ids::ELEMENT_RUTHENIUM, ItemIds::ELEMENT_44, 0), "Ruthenium", $instaBreak, "ru", 44, 2));
$this->register(new Element(new BID(Ids::ELEMENT_RHODIUM, ItemIds::ELEMENT_45, 0), "Rhodium", $instaBreak, "rh", 45, 2));
$this->register(new Element(new BID(Ids::ELEMENT_PALLADIUM, ItemIds::ELEMENT_46, 0), "Palladium", $instaBreak, "pd", 46, 2));
$this->register(new Element(new BID(Ids::ELEMENT_SILVER, ItemIds::ELEMENT_47, 0), "Silver", $instaBreak, "ag", 47, 2));
$this->register(new Element(new BID(Ids::ELEMENT_CADMIUM, ItemIds::ELEMENT_48, 0), "Cadmium", $instaBreak, "cd", 48, 2));
$this->register(new Element(new BID(Ids::ELEMENT_INDIUM, ItemIds::ELEMENT_49, 0), "Indium", $instaBreak, "in", 49, 3));
$this->register(new Element(new BID(Ids::ELEMENT_TIN, ItemIds::ELEMENT_50, 0), "Tin", $instaBreak, "sn", 50, 3));
$this->register(new Element(new BID(Ids::ELEMENT_ANTIMONY, ItemIds::ELEMENT_51, 0), "Antimony", $instaBreak, "sb", 51, 4));
$this->register(new Element(new BID(Ids::ELEMENT_TELLURIUM, ItemIds::ELEMENT_52, 0), "Tellurium", $instaBreak, "te", 52, 4));
$this->register(new Element(new BID(Ids::ELEMENT_IODINE, ItemIds::ELEMENT_53, 0), "Iodine", $instaBreak, "i", 53, 6));
$this->register(new Element(new BID(Ids::ELEMENT_XENON, ItemIds::ELEMENT_54, 0), "Xenon", $instaBreak, "xe", 54, 7));
$this->register(new Element(new BID(Ids::ELEMENT_CESIUM, ItemIds::ELEMENT_55, 0), "Cesium", $instaBreak, "cs", 55, 0));
$this->register(new Element(new BID(Ids::ELEMENT_BARIUM, ItemIds::ELEMENT_56, 0), "Barium", $instaBreak, "ba", 56, 1));
$this->register(new Element(new BID(Ids::ELEMENT_LANTHANUM, ItemIds::ELEMENT_57, 0), "Lanthanum", $instaBreak, "la", 57, 8));
$this->register(new Element(new BID(Ids::ELEMENT_CERIUM, ItemIds::ELEMENT_58, 0), "Cerium", $instaBreak, "ce", 58, 8));
$this->register(new Element(new BID(Ids::ELEMENT_PRASEODYMIUM, ItemIds::ELEMENT_59, 0), "Praseodymium", $instaBreak, "pr", 59, 8));
$this->register(new Element(new BID(Ids::ELEMENT_NEODYMIUM, ItemIds::ELEMENT_60, 0), "Neodymium", $instaBreak, "nd", 60, 8));
$this->register(new Element(new BID(Ids::ELEMENT_PROMETHIUM, ItemIds::ELEMENT_61, 0), "Promethium", $instaBreak, "pm", 61, 8));
$this->register(new Element(new BID(Ids::ELEMENT_SAMARIUM, ItemIds::ELEMENT_62, 0), "Samarium", $instaBreak, "sm", 62, 8));
$this->register(new Element(new BID(Ids::ELEMENT_EUROPIUM, ItemIds::ELEMENT_63, 0), "Europium", $instaBreak, "eu", 63, 8));
$this->register(new Element(new BID(Ids::ELEMENT_GADOLINIUM, ItemIds::ELEMENT_64, 0), "Gadolinium", $instaBreak, "gd", 64, 8));
$this->register(new Element(new BID(Ids::ELEMENT_TERBIUM, ItemIds::ELEMENT_65, 0), "Terbium", $instaBreak, "tb", 65, 8));
$this->register(new Element(new BID(Ids::ELEMENT_DYSPROSIUM, ItemIds::ELEMENT_66, 0), "Dysprosium", $instaBreak, "dy", 66, 8));
$this->register(new Element(new BID(Ids::ELEMENT_HOLMIUM, ItemIds::ELEMENT_67, 0), "Holmium", $instaBreak, "ho", 67, 8));
$this->register(new Element(new BID(Ids::ELEMENT_ERBIUM, ItemIds::ELEMENT_68, 0), "Erbium", $instaBreak, "er", 68, 8));
$this->register(new Element(new BID(Ids::ELEMENT_THULIUM, ItemIds::ELEMENT_69, 0), "Thulium", $instaBreak, "tm", 69, 8));
$this->register(new Element(new BID(Ids::ELEMENT_YTTERBIUM, ItemIds::ELEMENT_70, 0), "Ytterbium", $instaBreak, "yb", 70, 8));
$this->register(new Element(new BID(Ids::ELEMENT_LUTETIUM, ItemIds::ELEMENT_71, 0), "Lutetium", $instaBreak, "lu", 71, 8));
$this->register(new Element(new BID(Ids::ELEMENT_HAFNIUM, ItemIds::ELEMENT_72, 0), "Hafnium", $instaBreak, "hf", 72, 2));
$this->register(new Element(new BID(Ids::ELEMENT_TANTALUM, ItemIds::ELEMENT_73, 0), "Tantalum", $instaBreak, "ta", 73, 2));
$this->register(new Element(new BID(Ids::ELEMENT_TUNGSTEN, ItemIds::ELEMENT_74, 0), "Tungsten", $instaBreak, "w", 74, 2));
$this->register(new Element(new BID(Ids::ELEMENT_RHENIUM, ItemIds::ELEMENT_75, 0), "Rhenium", $instaBreak, "re", 75, 2));
$this->register(new Element(new BID(Ids::ELEMENT_OSMIUM, ItemIds::ELEMENT_76, 0), "Osmium", $instaBreak, "os", 76, 2));
$this->register(new Element(new BID(Ids::ELEMENT_IRIDIUM, ItemIds::ELEMENT_77, 0), "Iridium", $instaBreak, "ir", 77, 2));
$this->register(new Element(new BID(Ids::ELEMENT_PLATINUM, ItemIds::ELEMENT_78, 0), "Platinum", $instaBreak, "pt", 78, 2));
$this->register(new Element(new BID(Ids::ELEMENT_GOLD, ItemIds::ELEMENT_79, 0), "Gold", $instaBreak, "au", 79, 2));
$this->register(new Element(new BID(Ids::ELEMENT_MERCURY, ItemIds::ELEMENT_80, 0), "Mercury", $instaBreak, "hg", 80, 2));
$this->register(new Element(new BID(Ids::ELEMENT_THALLIUM, ItemIds::ELEMENT_81, 0), "Thallium", $instaBreak, "tl", 81, 3));
$this->register(new Element(new BID(Ids::ELEMENT_LEAD, ItemIds::ELEMENT_82, 0), "Lead", $instaBreak, "pb", 82, 3));
$this->register(new Element(new BID(Ids::ELEMENT_BISMUTH, ItemIds::ELEMENT_83, 0), "Bismuth", $instaBreak, "bi", 83, 3));
$this->register(new Element(new BID(Ids::ELEMENT_POLONIUM, ItemIds::ELEMENT_84, 0), "Polonium", $instaBreak, "po", 84, 4));
$this->register(new Element(new BID(Ids::ELEMENT_ASTATINE, ItemIds::ELEMENT_85, 0), "Astatine", $instaBreak, "at", 85, 6));
$this->register(new Element(new BID(Ids::ELEMENT_RADON, ItemIds::ELEMENT_86, 0), "Radon", $instaBreak, "rn", 86, 7));
$this->register(new Element(new BID(Ids::ELEMENT_FRANCIUM, ItemIds::ELEMENT_87, 0), "Francium", $instaBreak, "fr", 87, 0));
$this->register(new Element(new BID(Ids::ELEMENT_RADIUM, ItemIds::ELEMENT_88, 0), "Radium", $instaBreak, "ra", 88, 1));
$this->register(new Element(new BID(Ids::ELEMENT_ACTINIUM, ItemIds::ELEMENT_89, 0), "Actinium", $instaBreak, "ac", 89, 9));
$this->register(new Element(new BID(Ids::ELEMENT_THORIUM, ItemIds::ELEMENT_90, 0), "Thorium", $instaBreak, "th", 90, 9));
$this->register(new Element(new BID(Ids::ELEMENT_PROTACTINIUM, ItemIds::ELEMENT_91, 0), "Protactinium", $instaBreak, "pa", 91, 9));
$this->register(new Element(new BID(Ids::ELEMENT_URANIUM, ItemIds::ELEMENT_92, 0), "Uranium", $instaBreak, "u", 92, 9));
$this->register(new Element(new BID(Ids::ELEMENT_NEPTUNIUM, ItemIds::ELEMENT_93, 0), "Neptunium", $instaBreak, "np", 93, 9));
$this->register(new Element(new BID(Ids::ELEMENT_PLUTONIUM, ItemIds::ELEMENT_94, 0), "Plutonium", $instaBreak, "pu", 94, 9));
$this->register(new Element(new BID(Ids::ELEMENT_AMERICIUM, ItemIds::ELEMENT_95, 0), "Americium", $instaBreak, "am", 95, 9));
$this->register(new Element(new BID(Ids::ELEMENT_CURIUM, ItemIds::ELEMENT_96, 0), "Curium", $instaBreak, "cm", 96, 9));
$this->register(new Element(new BID(Ids::ELEMENT_BERKELIUM, ItemIds::ELEMENT_97, 0), "Berkelium", $instaBreak, "bk", 97, 9));
$this->register(new Element(new BID(Ids::ELEMENT_CALIFORNIUM, ItemIds::ELEMENT_98, 0), "Californium", $instaBreak, "cf", 98, 9));
$this->register(new Element(new BID(Ids::ELEMENT_EINSTEINIUM, ItemIds::ELEMENT_99, 0), "Einsteinium", $instaBreak, "es", 99, 9));
$this->register(new Element(new BID(Ids::ELEMENT_FERMIUM, ItemIds::ELEMENT_100, 0), "Fermium", $instaBreak, "fm", 100, 9));
$this->register(new Element(new BID(Ids::ELEMENT_MENDELEVIUM, ItemIds::ELEMENT_101, 0), "Mendelevium", $instaBreak, "md", 101, 9));
$this->register(new Element(new BID(Ids::ELEMENT_NOBELIUM, ItemIds::ELEMENT_102, 0), "Nobelium", $instaBreak, "no", 102, 9));
$this->register(new Element(new BID(Ids::ELEMENT_LAWRENCIUM, ItemIds::ELEMENT_103, 0), "Lawrencium", $instaBreak, "lr", 103, 9));
$this->register(new Element(new BID(Ids::ELEMENT_RUTHERFORDIUM, ItemIds::ELEMENT_104, 0), "Rutherfordium", $instaBreak, "rf", 104, 2));
$this->register(new Element(new BID(Ids::ELEMENT_DUBNIUM, ItemIds::ELEMENT_105, 0), "Dubnium", $instaBreak, "db", 105, 2));
$this->register(new Element(new BID(Ids::ELEMENT_SEABORGIUM, ItemIds::ELEMENT_106, 0), "Seaborgium", $instaBreak, "sg", 106, 2));
$this->register(new Element(new BID(Ids::ELEMENT_BOHRIUM, ItemIds::ELEMENT_107, 0), "Bohrium", $instaBreak, "bh", 107, 2));
$this->register(new Element(new BID(Ids::ELEMENT_HASSIUM, ItemIds::ELEMENT_108, 0), "Hassium", $instaBreak, "hs", 108, 2));
$this->register(new Element(new BID(Ids::ELEMENT_MEITNERIUM, ItemIds::ELEMENT_109, 0), "Meitnerium", $instaBreak, "mt", 109, 2));
$this->register(new Element(new BID(Ids::ELEMENT_DARMSTADTIUM, ItemIds::ELEMENT_110, 0), "Darmstadtium", $instaBreak, "ds", 110, 2));
$this->register(new Element(new BID(Ids::ELEMENT_ROENTGENIUM, ItemIds::ELEMENT_111, 0), "Roentgenium", $instaBreak, "rg", 111, 2));
$this->register(new Element(new BID(Ids::ELEMENT_COPERNICIUM, ItemIds::ELEMENT_112, 0), "Copernicium", $instaBreak, "cn", 112, 2));
$this->register(new Element(new BID(Ids::ELEMENT_NIHONIUM, ItemIds::ELEMENT_113, 0), "Nihonium", $instaBreak, "nh", 113, 3));
$this->register(new Element(new BID(Ids::ELEMENT_FLEROVIUM, ItemIds::ELEMENT_114, 0), "Flerovium", $instaBreak, "fl", 114, 3));
$this->register(new Element(new BID(Ids::ELEMENT_MOSCOVIUM, ItemIds::ELEMENT_115, 0), "Moscovium", $instaBreak, "mc", 115, 3));
$this->register(new Element(new BID(Ids::ELEMENT_LIVERMORIUM, ItemIds::ELEMENT_116, 0), "Livermorium", $instaBreak, "lv", 116, 3));
$this->register(new Element(new BID(Ids::ELEMENT_TENNESSINE, ItemIds::ELEMENT_117, 0), "Tennessine", $instaBreak, "ts", 117, 6));
$this->register(new Element(new BID(Ids::ELEMENT_OGANESSON, ItemIds::ELEMENT_118, 0), "Oganesson", $instaBreak, "og", 118, 7));
$this->register(new Element(new BID(Ids::ELEMENT_HYDROGEN), "Hydrogen", $instaBreak, "h", 1, 5));
$this->register(new Element(new BID(Ids::ELEMENT_HELIUM), "Helium", $instaBreak, "he", 2, 7));
$this->register(new Element(new BID(Ids::ELEMENT_LITHIUM), "Lithium", $instaBreak, "li", 3, 0));
$this->register(new Element(new BID(Ids::ELEMENT_BERYLLIUM), "Beryllium", $instaBreak, "be", 4, 1));
$this->register(new Element(new BID(Ids::ELEMENT_BORON), "Boron", $instaBreak, "b", 5, 4));
$this->register(new Element(new BID(Ids::ELEMENT_CARBON), "Carbon", $instaBreak, "c", 6, 5));
$this->register(new Element(new BID(Ids::ELEMENT_NITROGEN), "Nitrogen", $instaBreak, "n", 7, 5));
$this->register(new Element(new BID(Ids::ELEMENT_OXYGEN), "Oxygen", $instaBreak, "o", 8, 5));
$this->register(new Element(new BID(Ids::ELEMENT_FLUORINE), "Fluorine", $instaBreak, "f", 9, 6));
$this->register(new Element(new BID(Ids::ELEMENT_NEON), "Neon", $instaBreak, "ne", 10, 7));
$this->register(new Element(new BID(Ids::ELEMENT_SODIUM), "Sodium", $instaBreak, "na", 11, 0));
$this->register(new Element(new BID(Ids::ELEMENT_MAGNESIUM), "Magnesium", $instaBreak, "mg", 12, 1));
$this->register(new Element(new BID(Ids::ELEMENT_ALUMINUM), "Aluminum", $instaBreak, "al", 13, 3));
$this->register(new Element(new BID(Ids::ELEMENT_SILICON), "Silicon", $instaBreak, "si", 14, 4));
$this->register(new Element(new BID(Ids::ELEMENT_PHOSPHORUS), "Phosphorus", $instaBreak, "p", 15, 5));
$this->register(new Element(new BID(Ids::ELEMENT_SULFUR), "Sulfur", $instaBreak, "s", 16, 5));
$this->register(new Element(new BID(Ids::ELEMENT_CHLORINE), "Chlorine", $instaBreak, "cl", 17, 6));
$this->register(new Element(new BID(Ids::ELEMENT_ARGON), "Argon", $instaBreak, "ar", 18, 7));
$this->register(new Element(new BID(Ids::ELEMENT_POTASSIUM), "Potassium", $instaBreak, "k", 19, 0));
$this->register(new Element(new BID(Ids::ELEMENT_CALCIUM), "Calcium", $instaBreak, "ca", 20, 1));
$this->register(new Element(new BID(Ids::ELEMENT_SCANDIUM), "Scandium", $instaBreak, "sc", 21, 2));
$this->register(new Element(new BID(Ids::ELEMENT_TITANIUM), "Titanium", $instaBreak, "ti", 22, 2));
$this->register(new Element(new BID(Ids::ELEMENT_VANADIUM), "Vanadium", $instaBreak, "v", 23, 2));
$this->register(new Element(new BID(Ids::ELEMENT_CHROMIUM), "Chromium", $instaBreak, "cr", 24, 2));
$this->register(new Element(new BID(Ids::ELEMENT_MANGANESE), "Manganese", $instaBreak, "mn", 25, 2));
$this->register(new Element(new BID(Ids::ELEMENT_IRON), "Iron", $instaBreak, "fe", 26, 2));
$this->register(new Element(new BID(Ids::ELEMENT_COBALT), "Cobalt", $instaBreak, "co", 27, 2));
$this->register(new Element(new BID(Ids::ELEMENT_NICKEL), "Nickel", $instaBreak, "ni", 28, 2));
$this->register(new Element(new BID(Ids::ELEMENT_COPPER), "Copper", $instaBreak, "cu", 29, 2));
$this->register(new Element(new BID(Ids::ELEMENT_ZINC), "Zinc", $instaBreak, "zn", 30, 2));
$this->register(new Element(new BID(Ids::ELEMENT_GALLIUM), "Gallium", $instaBreak, "ga", 31, 3));
$this->register(new Element(new BID(Ids::ELEMENT_GERMANIUM), "Germanium", $instaBreak, "ge", 32, 4));
$this->register(new Element(new BID(Ids::ELEMENT_ARSENIC), "Arsenic", $instaBreak, "as", 33, 4));
$this->register(new Element(new BID(Ids::ELEMENT_SELENIUM), "Selenium", $instaBreak, "se", 34, 5));
$this->register(new Element(new BID(Ids::ELEMENT_BROMINE), "Bromine", $instaBreak, "br", 35, 6));
$this->register(new Element(new BID(Ids::ELEMENT_KRYPTON), "Krypton", $instaBreak, "kr", 36, 7));
$this->register(new Element(new BID(Ids::ELEMENT_RUBIDIUM), "Rubidium", $instaBreak, "rb", 37, 0));
$this->register(new Element(new BID(Ids::ELEMENT_STRONTIUM), "Strontium", $instaBreak, "sr", 38, 1));
$this->register(new Element(new BID(Ids::ELEMENT_YTTRIUM), "Yttrium", $instaBreak, "y", 39, 2));
$this->register(new Element(new BID(Ids::ELEMENT_ZIRCONIUM), "Zirconium", $instaBreak, "zr", 40, 2));
$this->register(new Element(new BID(Ids::ELEMENT_NIOBIUM), "Niobium", $instaBreak, "nb", 41, 2));
$this->register(new Element(new BID(Ids::ELEMENT_MOLYBDENUM), "Molybdenum", $instaBreak, "mo", 42, 2));
$this->register(new Element(new BID(Ids::ELEMENT_TECHNETIUM), "Technetium", $instaBreak, "tc", 43, 2));
$this->register(new Element(new BID(Ids::ELEMENT_RUTHENIUM), "Ruthenium", $instaBreak, "ru", 44, 2));
$this->register(new Element(new BID(Ids::ELEMENT_RHODIUM), "Rhodium", $instaBreak, "rh", 45, 2));
$this->register(new Element(new BID(Ids::ELEMENT_PALLADIUM), "Palladium", $instaBreak, "pd", 46, 2));
$this->register(new Element(new BID(Ids::ELEMENT_SILVER), "Silver", $instaBreak, "ag", 47, 2));
$this->register(new Element(new BID(Ids::ELEMENT_CADMIUM), "Cadmium", $instaBreak, "cd", 48, 2));
$this->register(new Element(new BID(Ids::ELEMENT_INDIUM), "Indium", $instaBreak, "in", 49, 3));
$this->register(new Element(new BID(Ids::ELEMENT_TIN), "Tin", $instaBreak, "sn", 50, 3));
$this->register(new Element(new BID(Ids::ELEMENT_ANTIMONY), "Antimony", $instaBreak, "sb", 51, 4));
$this->register(new Element(new BID(Ids::ELEMENT_TELLURIUM), "Tellurium", $instaBreak, "te", 52, 4));
$this->register(new Element(new BID(Ids::ELEMENT_IODINE), "Iodine", $instaBreak, "i", 53, 6));
$this->register(new Element(new BID(Ids::ELEMENT_XENON), "Xenon", $instaBreak, "xe", 54, 7));
$this->register(new Element(new BID(Ids::ELEMENT_CESIUM), "Cesium", $instaBreak, "cs", 55, 0));
$this->register(new Element(new BID(Ids::ELEMENT_BARIUM), "Barium", $instaBreak, "ba", 56, 1));
$this->register(new Element(new BID(Ids::ELEMENT_LANTHANUM), "Lanthanum", $instaBreak, "la", 57, 8));
$this->register(new Element(new BID(Ids::ELEMENT_CERIUM), "Cerium", $instaBreak, "ce", 58, 8));
$this->register(new Element(new BID(Ids::ELEMENT_PRASEODYMIUM), "Praseodymium", $instaBreak, "pr", 59, 8));
$this->register(new Element(new BID(Ids::ELEMENT_NEODYMIUM), "Neodymium", $instaBreak, "nd", 60, 8));
$this->register(new Element(new BID(Ids::ELEMENT_PROMETHIUM), "Promethium", $instaBreak, "pm", 61, 8));
$this->register(new Element(new BID(Ids::ELEMENT_SAMARIUM), "Samarium", $instaBreak, "sm", 62, 8));
$this->register(new Element(new BID(Ids::ELEMENT_EUROPIUM), "Europium", $instaBreak, "eu", 63, 8));
$this->register(new Element(new BID(Ids::ELEMENT_GADOLINIUM), "Gadolinium", $instaBreak, "gd", 64, 8));
$this->register(new Element(new BID(Ids::ELEMENT_TERBIUM), "Terbium", $instaBreak, "tb", 65, 8));
$this->register(new Element(new BID(Ids::ELEMENT_DYSPROSIUM), "Dysprosium", $instaBreak, "dy", 66, 8));
$this->register(new Element(new BID(Ids::ELEMENT_HOLMIUM), "Holmium", $instaBreak, "ho", 67, 8));
$this->register(new Element(new BID(Ids::ELEMENT_ERBIUM), "Erbium", $instaBreak, "er", 68, 8));
$this->register(new Element(new BID(Ids::ELEMENT_THULIUM), "Thulium", $instaBreak, "tm", 69, 8));
$this->register(new Element(new BID(Ids::ELEMENT_YTTERBIUM), "Ytterbium", $instaBreak, "yb", 70, 8));
$this->register(new Element(new BID(Ids::ELEMENT_LUTETIUM), "Lutetium", $instaBreak, "lu", 71, 8));
$this->register(new Element(new BID(Ids::ELEMENT_HAFNIUM), "Hafnium", $instaBreak, "hf", 72, 2));
$this->register(new Element(new BID(Ids::ELEMENT_TANTALUM), "Tantalum", $instaBreak, "ta", 73, 2));
$this->register(new Element(new BID(Ids::ELEMENT_TUNGSTEN), "Tungsten", $instaBreak, "w", 74, 2));
$this->register(new Element(new BID(Ids::ELEMENT_RHENIUM), "Rhenium", $instaBreak, "re", 75, 2));
$this->register(new Element(new BID(Ids::ELEMENT_OSMIUM), "Osmium", $instaBreak, "os", 76, 2));
$this->register(new Element(new BID(Ids::ELEMENT_IRIDIUM), "Iridium", $instaBreak, "ir", 77, 2));
$this->register(new Element(new BID(Ids::ELEMENT_PLATINUM), "Platinum", $instaBreak, "pt", 78, 2));
$this->register(new Element(new BID(Ids::ELEMENT_GOLD), "Gold", $instaBreak, "au", 79, 2));
$this->register(new Element(new BID(Ids::ELEMENT_MERCURY), "Mercury", $instaBreak, "hg", 80, 2));
$this->register(new Element(new BID(Ids::ELEMENT_THALLIUM), "Thallium", $instaBreak, "tl", 81, 3));
$this->register(new Element(new BID(Ids::ELEMENT_LEAD), "Lead", $instaBreak, "pb", 82, 3));
$this->register(new Element(new BID(Ids::ELEMENT_BISMUTH), "Bismuth", $instaBreak, "bi", 83, 3));
$this->register(new Element(new BID(Ids::ELEMENT_POLONIUM), "Polonium", $instaBreak, "po", 84, 4));
$this->register(new Element(new BID(Ids::ELEMENT_ASTATINE), "Astatine", $instaBreak, "at", 85, 6));
$this->register(new Element(new BID(Ids::ELEMENT_RADON), "Radon", $instaBreak, "rn", 86, 7));
$this->register(new Element(new BID(Ids::ELEMENT_FRANCIUM), "Francium", $instaBreak, "fr", 87, 0));
$this->register(new Element(new BID(Ids::ELEMENT_RADIUM), "Radium", $instaBreak, "ra", 88, 1));
$this->register(new Element(new BID(Ids::ELEMENT_ACTINIUM), "Actinium", $instaBreak, "ac", 89, 9));
$this->register(new Element(new BID(Ids::ELEMENT_THORIUM), "Thorium", $instaBreak, "th", 90, 9));
$this->register(new Element(new BID(Ids::ELEMENT_PROTACTINIUM), "Protactinium", $instaBreak, "pa", 91, 9));
$this->register(new Element(new BID(Ids::ELEMENT_URANIUM), "Uranium", $instaBreak, "u", 92, 9));
$this->register(new Element(new BID(Ids::ELEMENT_NEPTUNIUM), "Neptunium", $instaBreak, "np", 93, 9));
$this->register(new Element(new BID(Ids::ELEMENT_PLUTONIUM), "Plutonium", $instaBreak, "pu", 94, 9));
$this->register(new Element(new BID(Ids::ELEMENT_AMERICIUM), "Americium", $instaBreak, "am", 95, 9));
$this->register(new Element(new BID(Ids::ELEMENT_CURIUM), "Curium", $instaBreak, "cm", 96, 9));
$this->register(new Element(new BID(Ids::ELEMENT_BERKELIUM), "Berkelium", $instaBreak, "bk", 97, 9));
$this->register(new Element(new BID(Ids::ELEMENT_CALIFORNIUM), "Californium", $instaBreak, "cf", 98, 9));
$this->register(new Element(new BID(Ids::ELEMENT_EINSTEINIUM), "Einsteinium", $instaBreak, "es", 99, 9));
$this->register(new Element(new BID(Ids::ELEMENT_FERMIUM), "Fermium", $instaBreak, "fm", 100, 9));
$this->register(new Element(new BID(Ids::ELEMENT_MENDELEVIUM), "Mendelevium", $instaBreak, "md", 101, 9));
$this->register(new Element(new BID(Ids::ELEMENT_NOBELIUM), "Nobelium", $instaBreak, "no", 102, 9));
$this->register(new Element(new BID(Ids::ELEMENT_LAWRENCIUM), "Lawrencium", $instaBreak, "lr", 103, 9));
$this->register(new Element(new BID(Ids::ELEMENT_RUTHERFORDIUM), "Rutherfordium", $instaBreak, "rf", 104, 2));
$this->register(new Element(new BID(Ids::ELEMENT_DUBNIUM), "Dubnium", $instaBreak, "db", 105, 2));
$this->register(new Element(new BID(Ids::ELEMENT_SEABORGIUM), "Seaborgium", $instaBreak, "sg", 106, 2));
$this->register(new Element(new BID(Ids::ELEMENT_BOHRIUM), "Bohrium", $instaBreak, "bh", 107, 2));
$this->register(new Element(new BID(Ids::ELEMENT_HASSIUM), "Hassium", $instaBreak, "hs", 108, 2));
$this->register(new Element(new BID(Ids::ELEMENT_MEITNERIUM), "Meitnerium", $instaBreak, "mt", 109, 2));
$this->register(new Element(new BID(Ids::ELEMENT_DARMSTADTIUM), "Darmstadtium", $instaBreak, "ds", 110, 2));
$this->register(new Element(new BID(Ids::ELEMENT_ROENTGENIUM), "Roentgenium", $instaBreak, "rg", 111, 2));
$this->register(new Element(new BID(Ids::ELEMENT_COPERNICIUM), "Copernicium", $instaBreak, "cn", 112, 2));
$this->register(new Element(new BID(Ids::ELEMENT_NIHONIUM), "Nihonium", $instaBreak, "nh", 113, 3));
$this->register(new Element(new BID(Ids::ELEMENT_FLEROVIUM), "Flerovium", $instaBreak, "fl", 114, 3));
$this->register(new Element(new BID(Ids::ELEMENT_MOSCOVIUM), "Moscovium", $instaBreak, "mc", 115, 3));
$this->register(new Element(new BID(Ids::ELEMENT_LIVERMORIUM), "Livermorium", $instaBreak, "lv", 116, 3));
$this->register(new Element(new BID(Ids::ELEMENT_TENNESSINE), "Tennessine", $instaBreak, "ts", 117, 6));
$this->register(new Element(new BID(Ids::ELEMENT_OGANESSON), "Oganesson", $instaBreak, "og", 118, 7));
}
/**
@ -918,7 +914,7 @@ class BlockFactory{
if(isset($this->fullList[$index])) { //hot
$block = clone $this->fullList[$index];
}else{
$block = new UnknownBlock(new BID($typeId, $stateData, $stateData), BreakInfo::instant());
$block = new UnknownBlock(new BID($typeId), BreakInfo::instant(), $stateData);
}
return $block;

View File

@ -32,17 +32,11 @@ class BlockIdentifier{
*/
public function __construct(
private int $blockTypeId,
private int $legacyItemId,
private int $legacyItemVariant,
private ?string $tileClass = null
){
if($blockTypeId < 0){
throw new \InvalidArgumentException("Block type ID may not be negative");
}
if($legacyItemVariant < 0){
throw new \InvalidArgumentException("Legacy item variant may not be negative");
}
if($tileClass !== null){
Utils::testValidInstance($tileClass, Tile::class);
}
@ -50,20 +44,6 @@ class BlockIdentifier{
public function getBlockTypeId() : int{ return $this->blockTypeId; }
/**
* @deprecated
*/
public function getLegacyVariant() : int{
return $this->legacyItemVariant;
}
/**
* @deprecated
*/
public function getLegacyItemId() : int{
return $this->legacyItemId;
}
/**
* @phpstan-return class-string<Tile>|null
*/

View File

@ -28,8 +28,6 @@ use pocketmine\block\BlockTypeIds as Ids;
use pocketmine\block\tile\Sign as TileSign;
use pocketmine\block\utils\DyeColor;
use pocketmine\block\utils\TreeType;
use pocketmine\data\bedrock\block\BlockLegacyMetadata;
use pocketmine\item\ItemIds;
use pocketmine\item\VanillaItems;
use pocketmine\utils\AssumptionFailedError;
@ -44,7 +42,7 @@ final class BlockLegacyIdHelper{
TreeType::ACACIA()->id() => Ids::ACACIA_PLANKS,
TreeType::DARK_OAK()->id() => Ids::DARK_OAK_PLANKS,
default => throw new AssumptionFailedError("All tree types should be covered")
}, ItemIds::PLANKS, $treeType->getMagicNumber());
});
}
public static function getWoodenFenceIdentifier(TreeType $treeType) : BID{
@ -56,7 +54,7 @@ final class BlockLegacyIdHelper{
TreeType::ACACIA()->id() => Ids::ACACIA_FENCE,
TreeType::DARK_OAK()->id() => Ids::DARK_OAK_FENCE,
default => throw new AssumptionFailedError("All tree types should be covered")
}, ItemIds::FENCE, $treeType->getMagicNumber());
});
}
public static function getWoodenSlabIdentifier(TreeType $treeType) : BID{
@ -68,17 +66,17 @@ final class BlockLegacyIdHelper{
TreeType::ACACIA()->id() => Ids::ACACIA_SLAB,
TreeType::DARK_OAK()->id() => Ids::DARK_OAK_SLAB,
default => throw new AssumptionFailedError("All tree types should be covered")
}, ItemIds::WOODEN_SLAB, $treeType->getMagicNumber());
});
}
public static function getLogIdentifier(TreeType $treeType) : BID{
return match($treeType->id()){
TreeType::OAK()->id() => new BID(Ids::OAK_LOG, ItemIds::LOG, 0),
TreeType::SPRUCE()->id() => new BID(Ids::SPRUCE_LOG, ItemIds::LOG, 1),
TreeType::BIRCH()->id() => new BID(Ids::BIRCH_LOG, ItemIds::LOG, 2),
TreeType::JUNGLE()->id() => new BID(Ids::JUNGLE_LOG, ItemIds::LOG, 3),
TreeType::ACACIA()->id() => new BID(Ids::ACACIA_LOG, ItemIds::LOG2, 0),
TreeType::DARK_OAK()->id() => new BID(Ids::DARK_OAK_LOG, ItemIds::LOG2, 1),
TreeType::OAK()->id() => new BID(Ids::OAK_LOG),
TreeType::SPRUCE()->id() => new BID(Ids::SPRUCE_LOG),
TreeType::BIRCH()->id() => new BID(Ids::BIRCH_LOG),
TreeType::JUNGLE()->id() => new BID(Ids::JUNGLE_LOG),
TreeType::ACACIA()->id() => new BID(Ids::ACACIA_LOG),
TreeType::DARK_OAK()->id() => new BID(Ids::DARK_OAK_LOG),
default => throw new AssumptionFailedError("All tree types should be covered")
};
}
@ -92,7 +90,7 @@ final class BlockLegacyIdHelper{
TreeType::ACACIA()->id() => Ids::ACACIA_WOOD,
TreeType::DARK_OAK()->id() => Ids::DARK_OAK_WOOD,
default => throw new AssumptionFailedError("All tree types should be covered")
}, ItemIds::WOOD, $treeType->getMagicNumber());
});
}
public static function getAllSidedStrippedLogIdentifier(TreeType $treeType) : BID{
@ -104,17 +102,17 @@ final class BlockLegacyIdHelper{
TreeType::ACACIA()->id() => Ids::STRIPPED_ACACIA_WOOD,
TreeType::DARK_OAK()->id() => Ids::STRIPPED_DARK_OAK_WOOD,
default => throw new AssumptionFailedError("All tree types should be covered")
}, ItemIds::WOOD, $treeType->getMagicNumber() | BlockLegacyMetadata::WOOD_FLAG_STRIPPED);
});
}
public static function getLeavesIdentifier(TreeType $treeType) : BID{
return match($treeType->id()){
TreeType::OAK()->id() => new BID(Ids::OAK_LEAVES, ItemIds::LEAVES, 0),
TreeType::SPRUCE()->id() => new BID(Ids::SPRUCE_LEAVES, ItemIds::LEAVES, 1),
TreeType::BIRCH()->id() => new BID(Ids::BIRCH_LEAVES, ItemIds::LEAVES, 2),
TreeType::JUNGLE()->id() => new BID(Ids::JUNGLE_LEAVES, ItemIds::LEAVES, 3),
TreeType::ACACIA()->id() => new BID(Ids::ACACIA_LEAVES, ItemIds::LEAVES2, 0),
TreeType::DARK_OAK()->id() => new BID(Ids::DARK_OAK_LEAVES, ItemIds::LEAVES2, 1),
TreeType::OAK()->id() => new BID(Ids::OAK_LEAVES),
TreeType::SPRUCE()->id() => new BID(Ids::SPRUCE_LEAVES),
TreeType::BIRCH()->id() => new BID(Ids::BIRCH_LEAVES),
TreeType::JUNGLE()->id() => new BID(Ids::JUNGLE_LEAVES),
TreeType::ACACIA()->id() => new BID(Ids::ACACIA_LEAVES),
TreeType::DARK_OAK()->id() => new BID(Ids::DARK_OAK_LEAVES),
default => throw new AssumptionFailedError("All tree types should be covered")
};
}
@ -128,7 +126,7 @@ final class BlockLegacyIdHelper{
TreeType::ACACIA()->id() => Ids::ACACIA_SAPLING,
TreeType::DARK_OAK()->id() => Ids::DARK_OAK_SAPLING,
default => throw new AssumptionFailedError("All tree types should be covered")
}, ItemIds::SAPLING, $treeType->getMagicNumber());
});
}
/**
@ -139,38 +137,38 @@ final class BlockLegacyIdHelper{
switch($treeType->id()){
case TreeType::OAK()->id():
return [
new BID(Ids::OAK_SIGN, ItemIds::SIGN, 0, TileSign::class),
new BID(Ids::OAK_WALL_SIGN, ItemIds::SIGN, 0, TileSign::class),
new BID(Ids::OAK_SIGN, TileSign::class),
new BID(Ids::OAK_WALL_SIGN, TileSign::class),
fn() => VanillaItems::OAK_SIGN()
];
case TreeType::SPRUCE()->id():
return [
new BID(Ids::SPRUCE_SIGN, ItemIds::SPRUCE_SIGN, 0, TileSign::class),
new BID(Ids::SPRUCE_WALL_SIGN, ItemIds::SPRUCE_SIGN, 0, TileSign::class),
new BID(Ids::SPRUCE_SIGN, TileSign::class),
new BID(Ids::SPRUCE_WALL_SIGN, TileSign::class),
fn() => VanillaItems::SPRUCE_SIGN()
];
case TreeType::BIRCH()->id():
return [
new BID(Ids::BIRCH_SIGN, ItemIds::BIRCH_SIGN, 0, TileSign::class),
new BID(Ids::BIRCH_WALL_SIGN, ItemIds::BIRCH_SIGN, 0, TileSign::class),
new BID(Ids::BIRCH_SIGN, TileSign::class),
new BID(Ids::BIRCH_WALL_SIGN, TileSign::class),
fn() => VanillaItems::BIRCH_SIGN()
];
case TreeType::JUNGLE()->id():
return [
new BID(Ids::JUNGLE_SIGN, ItemIds::JUNGLE_SIGN, 0, TileSign::class),
new BID(Ids::JUNGLE_WALL_SIGN, ItemIds::JUNGLE_SIGN, 0, TileSign::class),
new BID(Ids::JUNGLE_SIGN, TileSign::class),
new BID(Ids::JUNGLE_WALL_SIGN, TileSign::class),
fn() => VanillaItems::JUNGLE_SIGN()
];
case TreeType::ACACIA()->id():
return [
new BID(Ids::ACACIA_SIGN, ItemIds::ACACIA_SIGN, 0, TileSign::class),
new BID(Ids::ACACIA_WALL_SIGN, ItemIds::ACACIA_SIGN, 0, TileSign::class),
new BID(Ids::ACACIA_SIGN, TileSign::class),
new BID(Ids::ACACIA_WALL_SIGN, TileSign::class),
fn() => VanillaItems::ACACIA_SIGN()
];
case TreeType::DARK_OAK()->id():
return [
new BID(Ids::DARK_OAK_SIGN, ItemIds::DARKOAK_SIGN, 0, TileSign::class),
new BID(Ids::DARK_OAK_WALL_SIGN, ItemIds::DARKOAK_SIGN, 0, TileSign::class),
new BID(Ids::DARK_OAK_SIGN, TileSign::class),
new BID(Ids::DARK_OAK_WALL_SIGN, TileSign::class),
fn() => VanillaItems::DARK_OAK_SIGN()
];
}
@ -180,17 +178,17 @@ final class BlockLegacyIdHelper{
public static function getWoodenTrapdoorIdentifier(TreeType $treeType) : BlockIdentifier{
switch($treeType->id()){
case TreeType::OAK()->id():
return new BID(Ids::OAK_TRAPDOOR, ItemIds::WOODEN_TRAPDOOR, 0);
return new BID(Ids::OAK_TRAPDOOR);
case TreeType::SPRUCE()->id():
return new BID(Ids::SPRUCE_TRAPDOOR, ItemIds::SPRUCE_TRAPDOOR, 0);
return new BID(Ids::SPRUCE_TRAPDOOR);
case TreeType::BIRCH()->id():
return new BID(Ids::BIRCH_TRAPDOOR, ItemIds::BIRCH_TRAPDOOR, 0);
return new BID(Ids::BIRCH_TRAPDOOR);
case TreeType::JUNGLE()->id():
return new BID(Ids::JUNGLE_TRAPDOOR, ItemIds::JUNGLE_TRAPDOOR, 0);
return new BID(Ids::JUNGLE_TRAPDOOR);
case TreeType::ACACIA()->id():
return new BID(Ids::ACACIA_TRAPDOOR, ItemIds::ACACIA_TRAPDOOR, 0);
return new BID(Ids::ACACIA_TRAPDOOR);
case TreeType::DARK_OAK()->id():
return new BID(Ids::DARK_OAK_TRAPDOOR, ItemIds::DARK_OAK_TRAPDOOR, 0);
return new BID(Ids::DARK_OAK_TRAPDOOR);
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
@ -198,17 +196,17 @@ final class BlockLegacyIdHelper{
public static function getWoodenButtonIdentifier(TreeType $treeType) : BlockIdentifier{
switch($treeType->id()){
case TreeType::OAK()->id():
return new BID(Ids::OAK_BUTTON, ItemIds::WOODEN_BUTTON, 0);
return new BID(Ids::OAK_BUTTON);
case TreeType::SPRUCE()->id():
return new BID(Ids::SPRUCE_BUTTON, ItemIds::SPRUCE_BUTTON, 0);
return new BID(Ids::SPRUCE_BUTTON);
case TreeType::BIRCH()->id():
return new BID(Ids::BIRCH_BUTTON, ItemIds::BIRCH_BUTTON, 0);
return new BID(Ids::BIRCH_BUTTON);
case TreeType::JUNGLE()->id():
return new BID(Ids::JUNGLE_BUTTON, ItemIds::JUNGLE_BUTTON, 0);
return new BID(Ids::JUNGLE_BUTTON);
case TreeType::ACACIA()->id():
return new BID(Ids::ACACIA_BUTTON, ItemIds::ACACIA_BUTTON, 0);
return new BID(Ids::ACACIA_BUTTON);
case TreeType::DARK_OAK()->id():
return new BID(Ids::DARK_OAK_BUTTON, ItemIds::DARK_OAK_BUTTON, 0);
return new BID(Ids::DARK_OAK_BUTTON);
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
@ -216,17 +214,17 @@ final class BlockLegacyIdHelper{
public static function getWoodenPressurePlateIdentifier(TreeType $treeType) : BlockIdentifier{
switch($treeType->id()){
case TreeType::OAK()->id():
return new BID(Ids::OAK_PRESSURE_PLATE, ItemIds::WOODEN_PRESSURE_PLATE, 0);
return new BID(Ids::OAK_PRESSURE_PLATE);
case TreeType::SPRUCE()->id():
return new BID(Ids::SPRUCE_PRESSURE_PLATE, ItemIds::SPRUCE_PRESSURE_PLATE, 0);
return new BID(Ids::SPRUCE_PRESSURE_PLATE);
case TreeType::BIRCH()->id():
return new BID(Ids::BIRCH_PRESSURE_PLATE, ItemIds::BIRCH_PRESSURE_PLATE, 0);
return new BID(Ids::BIRCH_PRESSURE_PLATE);
case TreeType::JUNGLE()->id():
return new BID(Ids::JUNGLE_PRESSURE_PLATE, ItemIds::JUNGLE_PRESSURE_PLATE, 0);
return new BID(Ids::JUNGLE_PRESSURE_PLATE);
case TreeType::ACACIA()->id():
return new BID(Ids::ACACIA_PRESSURE_PLATE, ItemIds::ACACIA_PRESSURE_PLATE, 0);
return new BID(Ids::ACACIA_PRESSURE_PLATE);
case TreeType::DARK_OAK()->id():
return new BID(Ids::DARK_OAK_PRESSURE_PLATE, ItemIds::DARK_OAK_PRESSURE_PLATE, 0);
return new BID(Ids::DARK_OAK_PRESSURE_PLATE);
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
@ -234,17 +232,17 @@ final class BlockLegacyIdHelper{
public static function getWoodenDoorIdentifier(TreeType $treeType) : BlockIdentifier{
switch($treeType->id()){
case TreeType::OAK()->id():
return new BID(Ids::OAK_DOOR, ItemIds::OAK_DOOR, 0);
return new BID(Ids::OAK_DOOR);
case TreeType::SPRUCE()->id():
return new BID(Ids::SPRUCE_DOOR, ItemIds::SPRUCE_DOOR, 0);
return new BID(Ids::SPRUCE_DOOR);
case TreeType::BIRCH()->id():
return new BID(Ids::BIRCH_DOOR, ItemIds::BIRCH_DOOR, 0);
return new BID(Ids::BIRCH_DOOR);
case TreeType::JUNGLE()->id():
return new BID(Ids::JUNGLE_DOOR, ItemIds::JUNGLE_DOOR, 0);
return new BID(Ids::JUNGLE_DOOR);
case TreeType::ACACIA()->id():
return new BID(Ids::ACACIA_DOOR, ItemIds::ACACIA_DOOR, 0);
return new BID(Ids::ACACIA_DOOR);
case TreeType::DARK_OAK()->id():
return new BID(Ids::DARK_OAK_DOOR, ItemIds::DARK_OAK_DOOR, 0);
return new BID(Ids::DARK_OAK_DOOR);
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
@ -252,17 +250,17 @@ final class BlockLegacyIdHelper{
public static function getWoodenFenceGateIdentifier(TreeType $treeType) : BlockIdentifier{
switch($treeType->id()){
case TreeType::OAK()->id():
return new BID(Ids::OAK_FENCE_GATE, ItemIds::OAK_FENCE_GATE, 0);
return new BID(Ids::OAK_FENCE_GATE);
case TreeType::SPRUCE()->id():
return new BID(Ids::SPRUCE_FENCE_GATE, ItemIds::SPRUCE_FENCE_GATE, 0);
return new BID(Ids::SPRUCE_FENCE_GATE);
case TreeType::BIRCH()->id():
return new BID(Ids::BIRCH_FENCE_GATE, ItemIds::BIRCH_FENCE_GATE, 0);
return new BID(Ids::BIRCH_FENCE_GATE);
case TreeType::JUNGLE()->id():
return new BID(Ids::JUNGLE_FENCE_GATE, ItemIds::JUNGLE_FENCE_GATE, 0);
return new BID(Ids::JUNGLE_FENCE_GATE);
case TreeType::ACACIA()->id():
return new BID(Ids::ACACIA_FENCE_GATE, ItemIds::ACACIA_FENCE_GATE, 0);
return new BID(Ids::ACACIA_FENCE_GATE);
case TreeType::DARK_OAK()->id():
return new BID(Ids::DARK_OAK_FENCE_GATE, ItemIds::DARK_OAK_FENCE_GATE, 0);
return new BID(Ids::DARK_OAK_FENCE_GATE);
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
@ -270,17 +268,17 @@ final class BlockLegacyIdHelper{
public static function getWoodenStairsIdentifier(TreeType $treeType) : BlockIdentifier{
switch($treeType->id()){
case TreeType::OAK()->id():
return new BID(Ids::OAK_STAIRS, ItemIds::OAK_STAIRS, 0);
return new BID(Ids::OAK_STAIRS);
case TreeType::SPRUCE()->id():
return new BID(Ids::SPRUCE_STAIRS, ItemIds::SPRUCE_STAIRS, 0);
return new BID(Ids::SPRUCE_STAIRS);
case TreeType::BIRCH()->id():
return new BID(Ids::BIRCH_STAIRS, ItemIds::BIRCH_STAIRS, 0);
return new BID(Ids::BIRCH_STAIRS);
case TreeType::JUNGLE()->id():
return new BID(Ids::JUNGLE_STAIRS, ItemIds::JUNGLE_STAIRS, 0);
return new BID(Ids::JUNGLE_STAIRS);
case TreeType::ACACIA()->id():
return new BID(Ids::ACACIA_STAIRS, ItemIds::ACACIA_STAIRS, 0);
return new BID(Ids::ACACIA_STAIRS);
case TreeType::DARK_OAK()->id():
return new BID(Ids::DARK_OAK_STAIRS, ItemIds::DARK_OAK_STAIRS, 0);
return new BID(Ids::DARK_OAK_STAIRS);
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
@ -288,17 +286,17 @@ final class BlockLegacyIdHelper{
public static function getStrippedLogIdentifier(TreeType $treeType) : BlockIdentifier{
switch($treeType->id()){
case TreeType::OAK()->id():
return new BID(Ids::STRIPPED_OAK_LOG, ItemIds::STRIPPED_OAK_LOG, 0);
return new BID(Ids::STRIPPED_OAK_LOG);
case TreeType::SPRUCE()->id():
return new BID(Ids::STRIPPED_SPRUCE_LOG, ItemIds::STRIPPED_SPRUCE_LOG, 0);
return new BID(Ids::STRIPPED_SPRUCE_LOG);
case TreeType::BIRCH()->id():
return new BID(Ids::STRIPPED_BIRCH_LOG, ItemIds::STRIPPED_BIRCH_LOG, 0);
return new BID(Ids::STRIPPED_BIRCH_LOG);
case TreeType::JUNGLE()->id():
return new BID(Ids::STRIPPED_JUNGLE_LOG, ItemIds::STRIPPED_JUNGLE_LOG, 0);
return new BID(Ids::STRIPPED_JUNGLE_LOG);
case TreeType::ACACIA()->id():
return new BID(Ids::STRIPPED_ACACIA_LOG, ItemIds::STRIPPED_ACACIA_LOG, 0);
return new BID(Ids::STRIPPED_ACACIA_LOG);
case TreeType::DARK_OAK()->id():
return new BID(Ids::STRIPPED_DARK_OAK_LOG, ItemIds::STRIPPED_DARK_OAK_LOG, 0);
return new BID(Ids::STRIPPED_DARK_OAK_LOG);
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
@ -306,51 +304,38 @@ final class BlockLegacyIdHelper{
public static function getGlazedTerracottaIdentifier(DyeColor $color) : BlockIdentifier{
switch($color->id()){
case DyeColor::WHITE()->id():
return new BID(Ids::WHITE_GLAZED_TERRACOTTA, ItemIds::WHITE_GLAZED_TERRACOTTA, 0);
return new BID(Ids::WHITE_GLAZED_TERRACOTTA);
case DyeColor::ORANGE()->id():
return new BID(Ids::ORANGE_GLAZED_TERRACOTTA, ItemIds::ORANGE_GLAZED_TERRACOTTA, 0);
return new BID(Ids::ORANGE_GLAZED_TERRACOTTA);
case DyeColor::MAGENTA()->id():
return new BID(Ids::MAGENTA_GLAZED_TERRACOTTA, ItemIds::MAGENTA_GLAZED_TERRACOTTA, 0);
return new BID(Ids::MAGENTA_GLAZED_TERRACOTTA);
case DyeColor::LIGHT_BLUE()->id():
return new BID(Ids::LIGHT_BLUE_GLAZED_TERRACOTTA, ItemIds::LIGHT_BLUE_GLAZED_TERRACOTTA, 0);
return new BID(Ids::LIGHT_BLUE_GLAZED_TERRACOTTA);
case DyeColor::YELLOW()->id():
return new BID(Ids::YELLOW_GLAZED_TERRACOTTA, ItemIds::YELLOW_GLAZED_TERRACOTTA, 0);
return new BID(Ids::YELLOW_GLAZED_TERRACOTTA);
case DyeColor::LIME()->id():
return new BID(Ids::LIME_GLAZED_TERRACOTTA, ItemIds::LIME_GLAZED_TERRACOTTA, 0);
return new BID(Ids::LIME_GLAZED_TERRACOTTA);
case DyeColor::PINK()->id():
return new BID(Ids::PINK_GLAZED_TERRACOTTA, ItemIds::PINK_GLAZED_TERRACOTTA, 0);
return new BID(Ids::PINK_GLAZED_TERRACOTTA);
case DyeColor::GRAY()->id():
return new BID(Ids::GRAY_GLAZED_TERRACOTTA, ItemIds::GRAY_GLAZED_TERRACOTTA, 0);
return new BID(Ids::GRAY_GLAZED_TERRACOTTA);
case DyeColor::LIGHT_GRAY()->id():
return new BID(Ids::LIGHT_GRAY_GLAZED_TERRACOTTA, ItemIds::SILVER_GLAZED_TERRACOTTA, 0);
return new BID(Ids::LIGHT_GRAY_GLAZED_TERRACOTTA);
case DyeColor::CYAN()->id():
return new BID(Ids::CYAN_GLAZED_TERRACOTTA, ItemIds::CYAN_GLAZED_TERRACOTTA, 0);
return new BID(Ids::CYAN_GLAZED_TERRACOTTA);
case DyeColor::PURPLE()->id():
return new BID(Ids::PURPLE_GLAZED_TERRACOTTA, ItemIds::PURPLE_GLAZED_TERRACOTTA, 0);
return new BID(Ids::PURPLE_GLAZED_TERRACOTTA);
case DyeColor::BLUE()->id():
return new BID(Ids::BLUE_GLAZED_TERRACOTTA, ItemIds::BLUE_GLAZED_TERRACOTTA, 0);
return new BID(Ids::BLUE_GLAZED_TERRACOTTA);
case DyeColor::BROWN()->id():
return new BID(Ids::BROWN_GLAZED_TERRACOTTA, ItemIds::BROWN_GLAZED_TERRACOTTA, 0);
return new BID(Ids::BROWN_GLAZED_TERRACOTTA);
case DyeColor::GREEN()->id():
return new BID(Ids::GREEN_GLAZED_TERRACOTTA, ItemIds::GREEN_GLAZED_TERRACOTTA, 0);
return new BID(Ids::GREEN_GLAZED_TERRACOTTA);
case DyeColor::RED()->id():
return new BID(Ids::RED_GLAZED_TERRACOTTA, ItemIds::RED_GLAZED_TERRACOTTA, 0);
return new BID(Ids::RED_GLAZED_TERRACOTTA);
case DyeColor::BLACK()->id():
return new BID(Ids::BLACK_GLAZED_TERRACOTTA, ItemIds::BLACK_GLAZED_TERRACOTTA, 0);
return new BID(Ids::BLACK_GLAZED_TERRACOTTA);
}
throw new AssumptionFailedError("Switch should cover all colours");
}
public static function getStoneSlabIdentifier(int $blockTypeId, int $stoneSlabId, int $meta) : BID{
$itemId = [
1 => ItemIds::STONE_SLAB,
2 => ItemIds::STONE_SLAB2,
3 => ItemIds::STONE_SLAB3,
4 => ItemIds::STONE_SLAB4
][$stoneSlabId] ?? null;
if($itemId === null){
throw new \InvalidArgumentException("Stone slab type should be 1, 2, 3 or 4");
}
return new BID($blockTypeId, $itemId, $meta);
}
}

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\data\bedrock\CoralTypeIdMap;
use pocketmine\item\Item;
use pocketmine\math\Facing;
use pocketmine\math\Vector3;
@ -32,10 +31,6 @@ use pocketmine\world\BlockTransaction;
final class Coral extends BaseCoral{
protected function writeStateToItemMeta() : int{
return CoralTypeIdMap::getInstance()->toId($this->coralType);
}
public function readStateFromWorld() : void{
//TODO: this hack ensures correct state of coral plants, because they don't retain their dead flag in metadata
$world = $this->position->getWorld();

View File

@ -25,8 +25,6 @@ namespace pocketmine\block;
use pocketmine\block\utils\CoralType;
use pocketmine\block\utils\CoralTypeTrait;
use pocketmine\data\bedrock\block\BlockLegacyMetadata;
use pocketmine\data\bedrock\CoralTypeIdMap;
use pocketmine\item\Item;
use function mt_rand;
@ -38,10 +36,6 @@ final class CoralBlock extends Opaque{
parent::__construct($idInfo, $name, $breakInfo);
}
protected function writeStateToItemMeta() : int{
return ($this->dead ? BlockLegacyMetadata::CORAL_BLOCK_FLAG_DEAD : 0) | CoralTypeIdMap::getInstance()->toId($this->coralType);
}
public function onNearbyBlockChange() : void{
if(!$this->dead){
$this->position->getWorld()->scheduleDelayedBlockUpdate($this->position, mt_rand(40, 200));

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\data\bedrock\block\BlockLegacyMetadata;
use pocketmine\data\runtime\block\BlockDataReader;
use pocketmine\data\runtime\block\BlockDataWriter;
use pocketmine\item\Hoe;
@ -36,10 +35,6 @@ use pocketmine\world\sound\ItemUseOnBlockSound;
class Dirt extends Opaque{
protected bool $coarse = false;
protected function writeStateToItemMeta() : int{
return $this->coarse ? BlockLegacyMetadata::DIRT_FLAG_COARSE : 0;
}
public function getRequiredTypeDataBits() : int{ return 1; }
protected function decodeType(BlockDataReader $r) : void{

View File

@ -23,17 +23,12 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\data\bedrock\block\BlockLegacyMetadata;
use pocketmine\data\runtime\block\BlockDataReader;
use pocketmine\data\runtime\block\BlockDataWriter;
class Sponge extends Opaque{
protected bool $wet = false;
protected function writeStateToItemMeta() : int{
return $this->wet ? BlockLegacyMetadata::SPONGE_FLAG_WET : 0;
}
public function getRequiredTypeDataBits() : int{ return 1; }
protected function decodeType(BlockDataReader $r) : void{

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\data\bedrock\block\BlockLegacyMetadata;
use pocketmine\data\runtime\block\BlockDataReader;
use pocketmine\data\runtime\block\BlockDataWriter;
use pocketmine\entity\Entity;
@ -46,10 +45,6 @@ class TNT extends Opaque{
protected bool $unstable = false; //TODO: Usage unclear, seems to be a weird hack in vanilla
protected bool $worksUnderwater = false;
protected function writeStateToItemMeta() : int{
return $this->worksUnderwater ? BlockLegacyMetadata::TNT_FLAG_UNDERWATER : 0;
}
public function getRequiredTypeDataBits() : int{ return 1; }
protected function decodeType(BlockDataReader $r) : void{

View File

@ -23,12 +23,27 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\data\runtime\block\BlockDataReader;
use pocketmine\data\runtime\block\BlockDataWriter;
use pocketmine\item\Item;
class UnknownBlock extends Transparent{
public function __construct(BlockIdentifier $idInfo, BlockBreakInfo $breakInfo){
private int $stateData;
public function __construct(BlockIdentifier $idInfo, BlockBreakInfo $breakInfo, int $stateData){
parent::__construct($idInfo, "Unknown", $breakInfo);
$this->stateData = $stateData;
}
protected function decodeType(BlockDataReader $r) : void{
//use type instead of state, so we don't lose any information like colour
//this might be an improperly registered plugin block
$this->stateData = $r->readInt(Block::INTERNAL_STATE_DATA_BITS);
}
protected function encodeType(BlockDataWriter $w) : void{
$w->writeInt(Block::INTERNAL_STATE_DATA_BITS, $this->stateData);
}
public function canBePlaced() : bool{

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block\utils;
use pocketmine\block\Block;
use pocketmine\data\bedrock\DyeColorIdMap;
use pocketmine\data\runtime\block\BlockDataReader;
use pocketmine\data\runtime\block\BlockDataReaderHelper;
use pocketmine\data\runtime\block\BlockDataWriter;
@ -34,13 +33,6 @@ trait ColoredTrait{
/** @var DyeColor */
private $color;
/**
* @see Block::writeStateToItemMeta()
*/
protected function writeStateToItemMeta() : int{
return DyeColorIdMap::getInstance()->toId($this->color);
}
public function getRequiredTypeDataBits() : int{ return 4; }
/** @see Block::decodeType() */

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use PHPUnit\Framework\TestCase;
use pocketmine\item\ItemIds;
use function asort;
use function file_get_contents;
use function is_array;
@ -44,7 +43,7 @@ class BlockTest extends TestCase{
* Test registering a block which would overwrite another block, without forcing it
*/
public function testAccidentalOverrideBlock() : void{
$block = new MyCustomBlock(new BlockIdentifier(BlockTypeIds::COBBLESTONE, ItemIds::COBBLESTONE, 0), "Cobblestone", BlockBreakInfo::instant());
$block = new MyCustomBlock(new BlockIdentifier(BlockTypeIds::COBBLESTONE), "Cobblestone", BlockBreakInfo::instant());
$this->expectException(\InvalidArgumentException::class);
$this->blockFactory->register($block);
}
@ -53,7 +52,7 @@ class BlockTest extends TestCase{
* Test registering a block deliberately overwriting another block works as expected
*/
public function testDeliberateOverrideBlock() : void{
$block = new MyCustomBlock(new BlockIdentifier(BlockTypeIds::COBBLESTONE, ItemIds::COBBLESTONE, 0), "Cobblestone", BlockBreakInfo::instant());
$block = new MyCustomBlock(new BlockIdentifier(BlockTypeIds::COBBLESTONE), "Cobblestone", BlockBreakInfo::instant());
$this->blockFactory->register($block, true);
self::assertInstanceOf(MyCustomBlock::class, $this->blockFactory->fromFullBlock($block->getStateId()));
}
@ -64,7 +63,7 @@ class BlockTest extends TestCase{
public function testRegisterNewBlock() : void{
for($i = BlockTypeIds::FIRST_UNUSED_BLOCK_ID; $i < BlockTypeIds::FIRST_UNUSED_BLOCK_ID + 256; ++$i){
if(!$this->blockFactory->isRegistered($i)){
$b = new StrangeNewBlock(new BlockIdentifier($i, $i + 10000, 0), "Strange New Block", BlockBreakInfo::instant());
$b = new StrangeNewBlock(new BlockIdentifier($i), "Strange New Block", BlockBreakInfo::instant());
$this->blockFactory->register($b);
self::assertInstanceOf(StrangeNewBlock::class, $this->blockFactory->fromFullBlock($b->getStateId()));
return;
@ -79,7 +78,7 @@ class BlockTest extends TestCase{
*/
public function testRegisterIdTooSmall() : void{
self::expectException(\InvalidArgumentException::class);
$this->blockFactory->register(new OutOfBoundsBlock(new BlockIdentifier(-1, -1, 0), "Out Of Bounds Block", BlockBreakInfo::instant()));
$this->blockFactory->register(new OutOfBoundsBlock(new BlockIdentifier(-1), "Out Of Bounds Block", BlockBreakInfo::instant()));
}
/**