Block: Clean up internal constructor inconsistencies

I don't dare look how big this commit is or how many bugs it introduced...
This commit is contained in:
Dylan K. Taylor 2019-02-20 19:21:51 +00:00
parent e93464f318
commit 89fce7712a
141 changed files with 427 additions and 1609 deletions

View File

@ -25,11 +25,5 @@ namespace pocketmine\block;
class ActivatorRail extends RedstoneRail{
protected $id = self::ACTIVATOR_RAIL;
public function getName() : string{
return "Activator Rail";
}
//TODO
}

View File

@ -32,16 +32,6 @@ use pocketmine\math\AxisAlignedBB;
*/
class Air extends Transparent{
protected $id = self::AIR;
public function __construct(){
}
public function getName() : string{
return "Air";
}
public function isBreakable(Item $item) : bool{
return false;
}

View File

@ -80,10 +80,6 @@ abstract class BaseRail extends Flowable{
/** @var int[] */
protected $connections = [];
public function __construct(){
}
protected function writeStateToMeta() : int{
if(empty($this->connections)){
return self::STRAIGHT_NORTH_SOUTH;

View File

@ -41,10 +41,6 @@ class Bed extends Transparent{
private const BITFLAG_OCCUPIED = 0x04;
private const BITFLAG_HEAD = 0x08;
protected $id = self::BED_BLOCK;
protected $itemId = Item::BED;
/** @var int */
protected $facing = Facing::NORTH;
/** @var bool */
@ -54,7 +50,8 @@ class Bed extends Transparent{
/** @var DyeColor */
protected $color;
public function __construct(){
public function __construct(BlockIdentifier $idInfo, string $name){
parent::__construct($idInfo, $name);
$this->color = DyeColor::RED();
}
@ -83,10 +80,6 @@ class Bed extends Transparent{
}
}
protected function getTileClass() : ?string{
return TileBed::class;
}
public function writeStateToWorld() : void{
parent::writeStateToWorld();
//extra block properties storage hack
@ -100,10 +93,6 @@ class Bed extends Transparent{
return 0.2;
}
public function getName() : string{
return "Bed Block";
}
protected function recalculateBoundingBox() : ?AxisAlignedBB{
return AxisAlignedBB::one()->trim(Facing::UP, 7 / 16);
}
@ -214,7 +203,7 @@ class Bed extends Transparent{
}
public function getItem() : Item{
return ItemFactory::get($this->getItemId(), $this->color->getMagicNumber());
return ItemFactory::get($this->idInfo->getItemId(), $this->color->getMagicNumber());
}
public function isAffectedBySilkTouch() : bool{

View File

@ -27,16 +27,6 @@ use pocketmine\item\Item;
class Bedrock extends Solid{
protected $id = self::BEDROCK;
public function __construct(){
}
public function getName() : string{
return "Bedrock";
}
public function getHardness() : float{
return -1;
}

View File

@ -29,12 +29,6 @@ use function mt_rand;
class Beetroot extends Crops{
protected $id = self::BEETROOT_BLOCK;
public function getName() : string{
return "Beetroot Block";
}
public function getDropsForCompatibleTool(Item $item) : array{
if($this->age >= 7){
return [

View File

@ -65,71 +65,50 @@ class Block extends Position implements BlockIds, Metadatable{
return BlockFactory::get($id, $meta, $pos);
}
/** @var int */
protected $id;
/** @var int */
protected $variant = 0;
/** @var BlockIdentifier */
protected $idInfo;
/** @var string|null */
protected $fallbackName;
/** @var int|null */
protected $itemId;
/** @var AxisAlignedBB */
protected $boundingBox = null;
/** @var AxisAlignedBB[]|null */
protected $collisionBoxes = null;
/**
* @param int $id The block type's ID, 0-255
* @param int $variant Meta value of the block type
* @param string|null $name English name of the block type (TODO: implement translations)
* @param int $itemId The item ID of the block type, used for block picking and dropping items.
* @param BlockIdentifier $idInfo
* @param string|null $name English name of the block type (TODO: implement translations)
*/
public function __construct(int $id, int $variant = 0, string $name = null, int $itemId = null){
$this->id = $id;
if(($variant & $this->getStateBitmask()) !== 0){
throw new \InvalidArgumentException("Variant 0x" . dechex($variant) . " collides with state bitmask 0x" . dechex($this->getStateBitmask()));
public function __construct(BlockIdentifier $idInfo, string $name){
if(($idInfo->getVariant() & $this->getStateBitmask()) !== 0){
throw new \InvalidArgumentException("Variant 0x" . dechex($idInfo->getVariant()) . " collides with state bitmask 0x" . dechex($this->getStateBitmask()));
}
$this->variant = $variant;
$this->idInfo = $idInfo;
$this->fallbackName = $name;
$this->itemId = $itemId;
}
public function getIdInfo() : BlockIdentifier{
return $this->idInfo;
}
/**
* @return string
*/
public function getName() : string{
return $this->fallbackName ?? "Unknown";
return $this->fallbackName;
}
/**
* @return int
*/
public function getId() : int{
return $this->id;
}
/**
* Returns the ID of the item form of the block.
* Used for drops for blocks (some blocks such as doors have a different item ID).
*
* @return int
*/
public function getItemId() : int{
if($this->itemId !== null){
return $this->itemId;
}
if($this->id > 255){
return 255 - $this->id;
}
return $this->id;
return $this->idInfo->getBlockId();
}
public function getItem() : Item{
return ItemFactory::get($this->getItemId(), $this->getVariant());
return ItemFactory::get($this->idInfo->getItemId(), $this->idInfo->getVariant());
}
/**
@ -146,7 +125,7 @@ class Block extends Position implements BlockIds, Metadatable{
public function getDamage() : int{
$stateMeta = $this->writeStateToMeta();
assert(($stateMeta & ~$this->getStateBitmask()) === 0);
return $this->variant | $stateMeta;
return $this->idInfo->getVariant() | $stateMeta;
}
protected function writeStateToMeta() : int{
@ -173,19 +152,10 @@ class Block extends Position implements BlockIds, Metadatable{
$this->collisionBoxes = null;
}
/**
* Returns the class of Tile associated with this block.
*
* @return string|null class extending Tile, or null
*/
protected function getTileClass() : ?string{
return null;
}
public function writeStateToWorld() : void{
$this->level->getChunkAtPosition($this)->setBlock($this->x & 0xf, $this->y, $this->z & 0xf, $this->getId(), $this->getDamage());
$tileType = $this->getTileClass();
$tileType = $this->idInfo->getTileClass();
$oldTile = $this->level->getTile($this);
if($oldTile !== null and ($tileType === null or !($oldTile instanceof $tileType))){
$oldTile->close();
@ -205,14 +175,6 @@ class Block extends Position implements BlockIds, Metadatable{
return 0;
}
/**
* Returns the block meta, stripped of non-variant flags.
* @return int
*/
public function getVariant() : int{
return $this->variant;
}
/**
* Returns whether the given block has an equivalent type to this one.
*
@ -221,7 +183,7 @@ class Block extends Position implements BlockIds, Metadatable{
* @return bool
*/
public function isSameType(Block $other) : bool{
return $this->getId() === $other->getId() and $this->getVariant() === $other->getVariant();
return $this->idInfo->getBlockId() === $other->idInfo->getBlockId() and $this->idInfo->getVariant() === $other->idInfo->getVariant();
}
/**

View File

@ -23,12 +23,13 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\BlockIdentifier as BID;
use pocketmine\block\utils\DyeColor;
use pocketmine\block\utils\InvalidBlockStateException;
use pocketmine\block\utils\PillarRotationTrait;
use pocketmine\block\utils\SlabType;
use pocketmine\block\utils\TreeType;
use pocketmine\item\Item;
use pocketmine\item\ItemIds;
use pocketmine\level\Position;
use function array_fill;
use function file_get_contents;
@ -76,256 +77,256 @@ class BlockFactory{
self::$stateMasks = new \SplFixedArray(8192);
self::register(new ActivatorRail());
self::register(new Air());
self::register(new Anvil(Block::ANVIL, Anvil::TYPE_NORMAL, "Anvil"));
self::register(new Anvil(Block::ANVIL, Anvil::TYPE_SLIGHTLY_DAMAGED, "Slightly Damaged Anvil"));
self::register(new Anvil(Block::ANVIL, Anvil::TYPE_VERY_DAMAGED, "Very Damaged Anvil"));
self::register(new Bed());
self::register(new Bedrock());
self::register(new Beetroot());
self::register(new BoneBlock());
self::register(new Bookshelf());
self::register(new BrewingStand());
self::register(new BrickStairs());
self::register(new Bricks());
self::register(new BrownMushroom());
self::register(new BrownMushroomBlock());
self::register(new Cactus());
self::register(new Cake());
self::register(new Carrot());
self::register(new Chest());
self::register(new Clay());
self::register(new Coal());
self::register(new CoalOre());
self::register(new CoarseDirt(Block::DIRT, Dirt::COARSE, "Coarse Dirt"));
self::register(new Cobblestone());
self::register(new CobblestoneStairs());
self::register(new Cobweb());
self::register(new CocoaBlock());
self::register(new CraftingTable());
self::register(new Dandelion());
self::register(new DaylightSensor());
self::register((new DaylightSensor())->setInverted()); //flattening hack
self::register(new DeadBush());
self::register(new DetectorRail());
self::register(new Diamond());
self::register(new DiamondOre());
self::register(new Dirt(Block::DIRT, Dirt::NORMAL, "Dirt"));
self::register(new DoublePlant(Block::DOUBLE_PLANT, 0, "Sunflower"));
self::register(new DoublePlant(Block::DOUBLE_PLANT, 1, "Lilac"));
self::register(new DoublePlant(Block::DOUBLE_PLANT, 4, "Rose Bush"));
self::register(new DoublePlant(Block::DOUBLE_PLANT, 5, "Peony"));
self::register(new DoubleTallGrass(Block::DOUBLE_PLANT, 2, "Double Tallgrass"));
self::register(new DoubleTallGrass(Block::DOUBLE_PLANT, 3, "Large Fern"));
self::register(new Emerald());
self::register(new EmeraldOre());
self::register(new EnchantingTable());
self::register(new EndPortalFrame());
self::register(new EndRod());
self::register(new EndStone());
self::register(new EndStoneBricks());
self::register(new EnderChest());
self::register(new Farmland());
self::register(new FenceGate(Block::ACACIA_FENCE_GATE, 0, "Acacia Fence Gate"));
self::register(new FenceGate(Block::BIRCH_FENCE_GATE, 0, "Birch Fence Gate"));
self::register(new FenceGate(Block::DARK_OAK_FENCE_GATE, 0, "Dark Oak Fence Gate"));
self::register(new FenceGate(Block::JUNGLE_FENCE_GATE, 0, "Jungle Fence Gate"));
self::register(new FenceGate(Block::OAK_FENCE_GATE, 0, "Oak Fence Gate"));
self::register(new FenceGate(Block::SPRUCE_FENCE_GATE, 0, "Spruce Fence Gate"));
self::register(new Fire());
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_ALLIUM, "Allium"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_AZURE_BLUET, "Azure Bluet"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_BLUE_ORCHID, "Blue Orchid"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_ORANGE_TULIP, "Orange Tulip"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_OXEYE_DAISY, "Oxeye Daisy"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_PINK_TULIP, "Pink Tulip"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_POPPY, "Poppy"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_RED_TULIP, "Red Tulip"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_WHITE_TULIP, "White Tulip"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_CORNFLOWER, "Cornflower"));
self::register(new Flower(Block::RED_FLOWER, Flower::TYPE_LILY_OF_THE_VALLEY, "Lily of the Valley"));
self::register(new FlowerPot());
self::register(new Furnace());
self::register((new Furnace())->setLit()); //flattening hack
self::register(new Glass(Block::GLASS, 0, "Glass"));
self::register(new GlassPane(Block::GLASS_PANE, 0, "Glass Pane"));
self::register(new GlazedTerracotta(Block::BLACK_GLAZED_TERRACOTTA, 0, "Black Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::BLUE_GLAZED_TERRACOTTA, 0, "Blue Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::BROWN_GLAZED_TERRACOTTA, 0, "Brown Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::CYAN_GLAZED_TERRACOTTA, 0, "Cyan Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::GRAY_GLAZED_TERRACOTTA, 0, "Grey Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::GREEN_GLAZED_TERRACOTTA, 0, "Green Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::LIGHT_BLUE_GLAZED_TERRACOTTA, 0, "Light Blue Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::LIME_GLAZED_TERRACOTTA, 0, "Lime Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::MAGENTA_GLAZED_TERRACOTTA, 0, "Magenta Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::ORANGE_GLAZED_TERRACOTTA, 0, "Orange Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::PINK_GLAZED_TERRACOTTA, 0, "Pink Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::PURPLE_GLAZED_TERRACOTTA, 0, "Purple Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::RED_GLAZED_TERRACOTTA, 0, "Red Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::SILVER_GLAZED_TERRACOTTA, 0, "Light Grey Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::WHITE_GLAZED_TERRACOTTA, 0, "White Glazed Terracotta"));
self::register(new GlazedTerracotta(Block::YELLOW_GLAZED_TERRACOTTA, 0, "Yellow Glazed Terracotta"));
self::register(new GlowingObsidian());
self::register(new Glowstone());
self::register(new Gold());
self::register(new GoldOre());
self::register(new Grass());
self::register(new GrassPath());
self::register(new Gravel());
self::register(new HardenedClay(Block::HARDENED_CLAY, 0, "Hardened Clay"));
self::register(new HardenedGlass(Block::HARD_GLASS, 0, "Hardened Glass"));
self::register(new HardenedGlassPane(Block::HARD_GLASS_PANE, 0, "Hardened Glass Pane"));
self::register(new HayBale());
self::register(new Ice());
self::register(new InfoUpdate(Block::INFO_UPDATE, 0, "update!"));
self::register(new InfoUpdate(Block::INFO_UPDATE2, 0, "ate!upd"));
self::register(new InvisibleBedrock());
self::register(new Iron());
self::register(new IronBars());
self::register(new IronDoor());
self::register(new IronOre());
self::register(new IronTrapdoor());
self::register(new ItemFrame());
self::register(new Ladder());
self::register(new Lapis());
self::register(new LapisOre());
self::register(new Lava());
self::register((new Lava())->setStill()); //flattening hack
self::register(new Lever());
self::register(new LitPumpkin());
self::register(new Magma());
self::register(new Melon());
self::register(new MelonStem());
self::register(new MonsterSpawner());
self::register(new MossyCobblestone());
self::register(new Mycelium());
self::register(new NetherBrick(Block::NETHER_BRICK_BLOCK, 0, "Nether Bricks"));
self::register(new NetherBrick(Block::RED_NETHER_BRICK, 0, "Red Nether Bricks"));
self::register(new NetherBrickFence());
self::register(new NetherBrickStairs());
self::register(new NetherQuartzOre());
self::register(new NetherReactor());
self::register(new NetherWartBlock());
self::register(new NetherWartPlant());
self::register(new Netherrack());
self::register(new NoteBlock());
self::register(new Obsidian());
self::register(new PackedIce());
self::register(new Podzol());
self::register(new Potato());
self::register(new PoweredRail());
self::register(new Prismarine(Block::PRISMARINE, Prismarine::BRICKS, "Prismarine Bricks"));
self::register(new Prismarine(Block::PRISMARINE, Prismarine::DARK, "Dark Prismarine"));
self::register(new Prismarine(Block::PRISMARINE, Prismarine::NORMAL, "Prismarine"));
self::register(new Pumpkin());
self::register(new PumpkinStem());
self::register(new Purpur(Block::PURPUR_BLOCK, 0, "Purpur Block"));
self::register(new class(Block::PURPUR_BLOCK, 2, "Purpur Pillar") extends Purpur{
self::register(new ActivatorRail(new BID(Block::ACTIVATOR_RAIL, BaseRail::STRAIGHT_NORTH_SOUTH), "Activator Rail"));
self::register(new Air(new BID(Block::AIR), "Air"));
self::register(new Anvil(new BID(Block::ANVIL, Anvil::TYPE_NORMAL), "Anvil"));
self::register(new Anvil(new BID(Block::ANVIL, Anvil::TYPE_SLIGHTLY_DAMAGED), "Slightly Damaged Anvil"));
self::register(new Anvil(new BID(Block::ANVIL, Anvil::TYPE_VERY_DAMAGED), "Very Damaged Anvil"));
self::register(new Bed(new BID(Block::BED_BLOCK, 0, ItemIds::BED, \pocketmine\tile\Bed::class), "Bed Block"));
self::register(new Bedrock(new BID(Block::BEDROCK), "Bedrock"));
self::register(new Beetroot(new BID(Block::BEETROOT_BLOCK), "Beetroot Block"));
self::register(new BoneBlock(new BID(Block::BONE_BLOCK), "Bone Block"));
self::register(new Bookshelf(new BID(Block::BOOKSHELF), "Bookshelf"));
self::register(new BrewingStand(new BID(Block::BREWING_STAND_BLOCK, 0, ItemIds::BREWING_STAND), "Brewing Stand"));
self::register(new BrickStairs(new BID(Block::BRICK_STAIRS), "Brick Stairs"));
self::register(new Bricks(new BID(Block::BRICK_BLOCK), "Bricks"));
self::register(new BrownMushroom(new BID(Block::BROWN_MUSHROOM), "Brown Mushroom"));
self::register(new BrownMushroomBlock(new BID(Block::BROWN_MUSHROOM_BLOCK), "Brown Mushroom Block"));
self::register(new Cactus(new BID(Block::CACTUS), "Cactus"));
self::register(new Cake(new BID(Block::CAKE_BLOCK, 0, ItemIds::CAKE), "Cake"));
self::register(new Carrot(new BID(Block::CARROTS), "Carrot Block"));
self::register(new Chest(new BID(Block::CHEST, 0, null, \pocketmine\tile\Chest::class), "Chest"));
self::register(new Clay(new BID(Block::CLAY_BLOCK), "Clay Block"));
self::register(new Coal(new BID(Block::COAL_BLOCK), "Coal Block"));
self::register(new CoalOre(new BID(Block::COAL_ORE), "Coal Ore"));
self::register(new CoarseDirt(new BID(Block::DIRT, Dirt::COARSE), "Coarse Dirt"));
self::register(new Cobblestone(new BID(Block::COBBLESTONE), "Cobblestone"));
self::register(new Cobblestone(new BID(Block::MOSSY_COBBLESTONE), "Moss Stone"));
self::register(new CobblestoneStairs(new BID(Block::COBBLESTONE_STAIRS), "Cobblestone Stairs"));
self::register(new Cobweb(new BID(Block::COBWEB), "Cobweb"));
self::register(new CocoaBlock(new BID(Block::COCOA), "Cocoa Block"));
self::register(new CraftingTable(new BID(Block::CRAFTING_TABLE), "Crafting Table"));
self::register(new Dandelion(new BID(Block::DANDELION), "Dandelion"));
self::register($daylightSensor = new DaylightSensor(new BlockIdentifierFlattened(Block::DAYLIGHT_DETECTOR, Block::DAYLIGHT_DETECTOR_INVERTED), "Daylight Sensor"));
self::register((clone $daylightSensor)->setInverted()); //flattening hack
self::register(new DeadBush(new BID(Block::DEADBUSH), "Dead Bush"));
self::register(new DetectorRail(new BID(Block::DETECTOR_RAIL), "Detector Rail"));
self::register(new Diamond(new BID(Block::DIAMOND_BLOCK), "Diamond Block"));
self::register(new DiamondOre(new BID(Block::DIAMOND_ORE), "Diamond Ore"));
self::register(new Dirt(new BID(Block::DIRT, Dirt::NORMAL), "Dirt"));
self::register(new DoublePlant(new BID(Block::DOUBLE_PLANT, 0), "Sunflower"));
self::register(new DoublePlant(new BID(Block::DOUBLE_PLANT, 1), "Lilac"));
self::register(new DoublePlant(new BID(Block::DOUBLE_PLANT, 4), "Rose Bush"));
self::register(new DoublePlant(new BID(Block::DOUBLE_PLANT, 5), "Peony"));
self::register(new DoubleTallGrass(new BID(Block::DOUBLE_PLANT, 2), "Double Tallgrass"));
self::register(new DoubleTallGrass(new BID(Block::DOUBLE_PLANT, 3), "Large Fern"));
self::register(new Emerald(new BID(Block::EMERALD_BLOCK), "Emerald Block"));
self::register(new EmeraldOre(new BID(Block::EMERALD_ORE), "Emerald Ore"));
self::register(new EnchantingTable(new BID(Block::ENCHANTING_TABLE, 0, null, \pocketmine\tile\EnchantTable::class), "Enchanting Table"));
self::register(new EndPortalFrame(new BID(Block::END_PORTAL_FRAME), "End Portal Frame"));
self::register(new EndRod(new BID(Block::END_ROD), "End Rod"));
self::register(new EndStone(new BID(Block::END_STONE), "End Stone"));
self::register(new EndStoneBricks(new BID(Block::END_BRICKS), "End Stone Bricks"));
self::register(new EnderChest(new BID(Block::ENDER_CHEST, 0, null, \pocketmine\tile\EnderChest::class), "Ender Chest"));
self::register(new Farmland(new BID(Block::FARMLAND), "Farmland"));
self::register(new FenceGate(new BID(Block::ACACIA_FENCE_GATE), "Acacia Fence Gate"));
self::register(new FenceGate(new BID(Block::BIRCH_FENCE_GATE), "Birch Fence Gate"));
self::register(new FenceGate(new BID(Block::DARK_OAK_FENCE_GATE), "Dark Oak Fence Gate"));
self::register(new FenceGate(new BID(Block::OAK_FENCE_GATE), "Oak Fence Gate"));
self::register(new FenceGate(new BID(Block::JUNGLE_FENCE_GATE), "Jungle Fence Gate"));
self::register(new FenceGate(new BID(Block::SPRUCE_FENCE_GATE), "Spruce Fence Gate"));
self::register(new Fire(new BID(Block::FIRE), "Fire Block"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_ALLIUM), "Allium"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_AZURE_BLUET), "Azure Bluet"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_BLUE_ORCHID), "Blue Orchid"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_CORNFLOWER), "Cornflower"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_LILY_OF_THE_VALLEY), "Lily of the Valley"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_ORANGE_TULIP), "Orange Tulip"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_OXEYE_DAISY), "Oxeye Daisy"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_PINK_TULIP), "Pink Tulip"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_POPPY), "Poppy"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_RED_TULIP), "Red Tulip"));
self::register(new Flower(new BID(Block::RED_FLOWER, Flower::TYPE_WHITE_TULIP), "White Tulip"));
self::register(new FlowerPot(new BID(Block::FLOWER_POT_BLOCK, 0, ItemIds::FLOWER_POT, \pocketmine\tile\FlowerPot::class), "Flower Pot"));
self::register($furnace = new Furnace(new BlockIdentifierFlattened(Block::FURNACE, Block::LIT_FURNACE, 0, null, \pocketmine\tile\Furnace::class), "Furnace"));
self::register((clone $furnace)->setLit()); //flattening hack
self::register(new Glass(new BID(Block::GLASS), "Glass"));
self::register(new GlassPane(new BID(Block::GLASS_PANE), "Glass Pane"));
self::register(new GlazedTerracotta(new BID(Block::BLACK_GLAZED_TERRACOTTA), "Black Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::BLUE_GLAZED_TERRACOTTA), "Blue Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::BROWN_GLAZED_TERRACOTTA), "Brown Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::CYAN_GLAZED_TERRACOTTA), "Cyan Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::GRAY_GLAZED_TERRACOTTA), "Grey Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::GREEN_GLAZED_TERRACOTTA), "Green Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::LIGHT_BLUE_GLAZED_TERRACOTTA), "Light Blue Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::LIME_GLAZED_TERRACOTTA), "Lime Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::MAGENTA_GLAZED_TERRACOTTA), "Magenta Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::ORANGE_GLAZED_TERRACOTTA), "Orange Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::PINK_GLAZED_TERRACOTTA), "Pink Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::PURPLE_GLAZED_TERRACOTTA), "Purple Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::RED_GLAZED_TERRACOTTA), "Red Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::SILVER_GLAZED_TERRACOTTA), "Light Grey Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::WHITE_GLAZED_TERRACOTTA), "White Glazed Terracotta"));
self::register(new GlazedTerracotta(new BID(Block::YELLOW_GLAZED_TERRACOTTA), "Yellow Glazed Terracotta"));
self::register(new GlowingObsidian(new BID(Block::GLOWINGOBSIDIAN), "Glowing Obsidian"));
self::register(new Glowstone(new BID(Block::GLOWSTONE), "Glowstone"));
self::register(new Gold(new BID(Block::GOLD_BLOCK), "Gold Block"));
self::register(new GoldOre(new BID(Block::GOLD_ORE), "Gold Ore"));
self::register(new Grass(new BID(Block::GRASS), "Grass"));
self::register(new GrassPath(new BID(Block::GRASS_PATH), "Grass Path"));
self::register(new Gravel(new BID(Block::GRAVEL), "Gravel"));
self::register(new HardenedClay(new BID(Block::HARDENED_CLAY), "Hardened Clay"));
self::register(new HardenedGlass(new BID(Block::HARD_GLASS), "Hardened Glass"));
self::register(new HardenedGlassPane(new BID(Block::HARD_GLASS_PANE), "Hardened Glass Pane"));
self::register(new HayBale(new BID(Block::HAY_BALE), "Hay Bale"));
self::register(new Ice(new BID(Block::ICE), "Ice"));
self::register(new InfoUpdate(new BID(Block::INFO_UPDATE), "update!"));
self::register(new InfoUpdate(new BID(Block::INFO_UPDATE2), "ate!upd"));
self::register(new InvisibleBedrock(new BID(Block::INVISIBLEBEDROCK), "Invisible Bedrock"));
self::register(new Iron(new BID(Block::IRON_BLOCK), "Iron Block"));
self::register(new IronBars(new BID(Block::IRON_BARS), "Iron Bars"));
self::register(new IronDoor(new BID(Block::IRON_DOOR_BLOCK, 0, ItemIds::IRON_DOOR), "Iron Door"));
self::register(new IronOre(new BID(Block::IRON_ORE), "Iron Ore"));
self::register(new IronTrapdoor(new BID(Block::IRON_TRAPDOOR), "Iron Trapdoor"));
self::register(new ItemFrame(new BID(Block::FRAME_BLOCK, 0, ItemIds::FRAME, \pocketmine\tile\ItemFrame::class), "Item Frame"));
self::register(new Ladder(new BID(Block::LADDER), "Ladder"));
self::register(new Lapis(new BID(Block::LAPIS_BLOCK), "Lapis Lazuli Block"));
self::register(new LapisOre(new BID(Block::LAPIS_ORE), "Lapis Lazuli Ore"));
self::register($lava = new Lava(new BlockIdentifierFlattened(Block::FLOWING_LAVA, Block::STILL_LAVA), "Lava"));
self::register((clone $lava)->setStill()); //flattening hack
self::register(new Lever(new BID(Block::LEVER), "Lever"));
self::register(new LitPumpkin(new BID(Block::JACK_O_LANTERN), "Jack o'Lantern"));
self::register(new Magma(new BID(Block::MAGMA), "Magma Block"));
self::register(new Melon(new BID(Block::MELON_BLOCK), "Melon Block"));
self::register(new MelonStem(new BID(Block::MELON_STEM, 0, ItemIds::MELON_SEEDS), "Melon Stem"));
self::register(new MonsterSpawner(new BID(Block::MOB_SPAWNER), "Monster Spawner"));
self::register(new Mycelium(new BID(Block::MYCELIUM), "Mycelium"));
self::register(new NetherBrick(new BID(Block::NETHER_BRICK_BLOCK), "Nether Bricks"));
self::register(new NetherBrick(new BID(Block::RED_NETHER_BRICK), "Red Nether Bricks"));
self::register(new NetherBrickFence(new BID(Block::NETHER_BRICK_FENCE), "Nether Brick Fence"));
self::register(new NetherBrickStairs(new BID(Block::NETHER_BRICK_STAIRS), "Nether Brick Stairs"));
self::register(new NetherQuartzOre(new BID(Block::NETHER_QUARTZ_ORE), "Nether Quartz Ore"));
self::register(new NetherReactor(new BID(Block::NETHERREACTOR), "Nether Reactor Core"));
self::register(new NetherWartBlock(new BID(Block::NETHER_WART_BLOCK), "Nether Wart Block"));
self::register(new NetherWartPlant(new BID(Block::NETHER_WART_PLANT, 0, ItemIds::NETHER_WART), "Nether Wart"));
self::register(new Netherrack(new BID(Block::NETHERRACK), "Netherrack"));
self::register(new NoteBlock(new BID(Block::NOTEBLOCK), "Note Block"));
self::register(new Obsidian(new BID(Block::OBSIDIAN), "Obsidian"));
self::register(new PackedIce(new BID(Block::PACKED_ICE), "Packed Ice"));
self::register(new Podzol(new BID(Block::PODZOL), "Podzol"));
self::register(new Potato(new BID(Block::POTATOES), "Potato Block"));
self::register(new PoweredRail(new BID(Block::GOLDEN_RAIL, BaseRail::STRAIGHT_NORTH_SOUTH), "Powered Rail"));
self::register(new Prismarine(new BID(Block::PRISMARINE, Prismarine::BRICKS), "Prismarine Bricks"));
self::register(new Prismarine(new BID(Block::PRISMARINE, Prismarine::DARK), "Dark Prismarine"));
self::register(new Prismarine(new BID(Block::PRISMARINE, Prismarine::NORMAL), "Prismarine"));
self::register(new Pumpkin(new BID(Block::PUMPKIN), "Pumpkin"));
self::register(new PumpkinStem(new BID(Block::PUMPKIN_STEM, 0, ItemIds::PUMPKIN_SEEDS), "Pumpkin Stem"));
self::register(new Purpur(new BID(Block::PURPUR_BLOCK), "Purpur Block"));
self::register(new class(new BID(Block::PURPUR_BLOCK, 2), "Purpur Pillar") extends Purpur{
use PillarRotationTrait;
});
self::register(new PurpurStairs());
self::register(new Quartz(Block::QUARTZ_BLOCK, Quartz::NORMAL, "Quartz Block"));
self::register(new class(Block::QUARTZ_BLOCK, Quartz::CHISELED, "Chiseled Quartz Block") extends Quartz{
self::register(new PurpurStairs(new BID(Block::PURPUR_STAIRS), "Purpur Stairs"));
self::register(new Quartz(new BID(Block::QUARTZ_BLOCK, Quartz::NORMAL), "Quartz Block"));
self::register(new class(new BID(Block::QUARTZ_BLOCK, Quartz::CHISELED), "Chiseled Quartz Block") extends Quartz{
use PillarRotationTrait;
});
self::register(new class(Block::QUARTZ_BLOCK, Quartz::PILLAR, "Quartz Pillar") extends Quartz{
self::register(new class(new BID(Block::QUARTZ_BLOCK, Quartz::PILLAR), "Quartz Pillar") extends Quartz{
use PillarRotationTrait;
});
self::register(new Quartz(Block::QUARTZ_BLOCK, Quartz::SMOOTH, "Smooth Quartz Block")); //TODO: this has axis rotation in 1.9, unsure if a bug (https://bugs.mojang.com/browse/MCPE-39074)
self::register(new QuartzStairs());
self::register(new Rail());
self::register(new RedMushroom());
self::register(new RedMushroomBlock());
self::register(new RedSandstoneStairs());
self::register(new Redstone());
self::register(new RedstoneLamp());
self::register((new RedstoneLamp())->setLit()); //flattening hack
self::register(new RedstoneOre());
self::register((new RedstoneOre())->setLit()); //flattening hack
self::register(new RedstoneRepeater());
self::register((new RedstoneRepeater())->setPowered());
self::register(new RedstoneTorch());
self::register((new RedstoneTorch())->setLit(false)); //flattening hack
self::register(new RedstoneWire());
self::register(new Reserved6(Block::RESERVED6, 0, "reserved6"));
self::register(new Sand(Block::SAND, 0, "Sand"));
self::register(new Sand(Block::SAND, 1, "Red Sand"));
self::register(new SandstoneStairs());
self::register(new SeaLantern());
self::register(new SignPost());
self::register(new Skull());
self::register(new SmoothStone(Block::STONE, Stone::NORMAL, "Stone"));
self::register(new Snow());
self::register(new SnowLayer());
self::register(new SoulSand());
self::register(new Sponge());
self::register(new StandingBanner());
self::register(new Stone(Block::STONE, Stone::ANDESITE, "Andesite"));
self::register(new Stone(Block::STONE, Stone::DIORITE, "Diorite"));
self::register(new Stone(Block::STONE, Stone::GRANITE, "Granite"));
self::register(new Stone(Block::STONE, Stone::POLISHED_ANDESITE, "Polished Andesite"));
self::register(new Stone(Block::STONE, Stone::POLISHED_DIORITE, "Polished Diorite"));
self::register(new Stone(Block::STONE, Stone::POLISHED_GRANITE, "Polished Granite"));
self::register(new StoneBrickStairs());
self::register(new StoneBricks(Block::STONE_BRICKS, StoneBricks::CHISELED, "Chiseled Stone Bricks"));
self::register(new StoneBricks(Block::STONE_BRICKS, StoneBricks::CRACKED, "Cracked Stone Bricks"));
self::register(new StoneBricks(Block::STONE_BRICKS, StoneBricks::MOSSY, "Mossy Stone Bricks"));
self::register(new StoneBricks(Block::STONE_BRICKS, StoneBricks::NORMAL, "Stone Bricks"));
self::register(new StoneButton());
self::register(new StonePressurePlate());
self::register(new Stonecutter());
self::register(new Sugarcane());
self::register(new TNT());
self::register(new TallGrass(Block::TALL_GRASS, 0, "Fern"));
self::register(new TallGrass(Block::TALL_GRASS, 1, "Tall Grass"));
self::register(new TallGrass(Block::TALL_GRASS, 2, "Fern"));
self::register(new TallGrass(Block::TALL_GRASS, 3, "Fern"));
self::register(new Torch(Block::COLORED_TORCH_BP, 0, "Blue Torch"));
self::register(new Torch(Block::COLORED_TORCH_BP, 8, "Purple Torch"));
self::register(new Torch(Block::COLORED_TORCH_RG, 0, "Red Torch"));
self::register(new Torch(Block::COLORED_TORCH_RG, 8, "Green Torch"));
self::register(new Torch(Block::TORCH, 0, "Torch"));
self::register(new Trapdoor());
self::register(new TrappedChest());
self::register(new Tripwire());
self::register(new TripwireHook());
self::register(new UnderwaterTorch(Block::UNDERWATER_TORCH, 0, "Underwater Torch"));
self::register(new Vine());
self::register(new WallBanner());
self::register(new WallSign());
self::register(new Water());
self::register((new Water())->setStill()); //flattening hack
self::register(new WaterLily());
self::register(new WeightedPressurePlateHeavy());
self::register(new WeightedPressurePlateLight());
self::register(new Wheat());
self::register(new WoodenButton());
self::register(new WoodenDoor(Block::ACACIA_DOOR_BLOCK, 0, "Acacia Door", Item::ACACIA_DOOR));
self::register(new WoodenDoor(Block::BIRCH_DOOR_BLOCK, 0, "Birch Door", Item::BIRCH_DOOR));
self::register(new WoodenDoor(Block::DARK_OAK_DOOR_BLOCK, 0, "Dark Oak Door", Item::DARK_OAK_DOOR));
self::register(new WoodenDoor(Block::JUNGLE_DOOR_BLOCK, 0, "Jungle Door", Item::JUNGLE_DOOR));
self::register(new WoodenDoor(Block::OAK_DOOR_BLOCK, 0, "Oak Door", Item::OAK_DOOR));
self::register(new WoodenDoor(Block::SPRUCE_DOOR_BLOCK, 0, "Spruce Door", Item::SPRUCE_DOOR));
self::register(new WoodenPressurePlate());
self::register(new WoodenStairs(Block::ACACIA_STAIRS, 0, "Acacia Stairs"));
self::register(new WoodenStairs(Block::BIRCH_STAIRS, 0, "Birch Stairs"));
self::register(new WoodenStairs(Block::DARK_OAK_STAIRS, 0, "Dark Oak Stairs"));
self::register(new WoodenStairs(Block::JUNGLE_STAIRS, 0, "Jungle Stairs"));
self::register(new WoodenStairs(Block::OAK_STAIRS, 0, "Oak Stairs"));
self::register(new WoodenStairs(Block::SPRUCE_STAIRS, 0, "Spruce Stairs"));
self::register(new Quartz(new BID(Block::QUARTZ_BLOCK, Quartz::SMOOTH), "Smooth Quartz Block")); //TODO: this has axis rotation in 1.9, unsure if a bug (https://bugs.mojang.com/browse/MCPE-39074)
self::register(new QuartzStairs(new BID(Block::QUARTZ_STAIRS), "Quartz Stairs"));
self::register(new Rail(new BID(Block::RAIL), "Rail"));
self::register(new RedMushroom(new BID(Block::RED_MUSHROOM), "Red Mushroom"));
self::register(new RedMushroomBlock(new BID(Block::RED_MUSHROOM_BLOCK), "Red Mushroom Block"));
self::register(new Redstone(new BID(Block::REDSTONE_BLOCK), "Redstone Block"));
self::register($redstoneLamp = new RedstoneLamp(new BlockIdentifierFlattened(Block::REDSTONE_LAMP, Block::LIT_REDSTONE_LAMP), "Redstone Lamp"));
self::register((clone $redstoneLamp)->setLit()); //flattening hack
self::register($redstoneOre = new RedstoneOre(new BlockIdentifierFlattened(Block::REDSTONE_ORE, Block::LIT_REDSTONE_ORE), "Redstone Ore"));
self::register((clone $redstoneOre)->setLit()); //flattening hack
self::register($repeater = new RedstoneRepeater(new BlockIdentifierFlattened(Block::UNPOWERED_REPEATER, Block::POWERED_REPEATER, 0, ItemIds::REPEATER), "Redstne Repeater"));
self::register((clone $repeater)->setPowered());
self::register($redstoneTorch = new RedstoneTorch(new BlockIdentifierFlattened(Block::REDSTONE_TORCH, Block::UNLIT_REDSTONE_TORCH), "Redstone Torch"));
self::register((clone $redstoneTorch)->setLit(false)); //flattening hack
self::register(new RedstoneWire(new BID(Block::REDSTONE_WIRE, 0, ItemIds::REDSTONE), "Redstone"));
self::register(new Reserved6(new BID(Block::RESERVED6), "reserved6"));
self::register(new Sand(new BID(Block::SAND), "Sand"));
self::register(new Sand(new BID(Block::SAND, 1), "Red Sand"));
self::register(new SandstoneStairs(new BID(Block::RED_SANDSTONE_STAIRS), "Red Sandstone Stairs"));
self::register(new SandstoneStairs(new BID(Block::SANDSTONE_STAIRS), "Sandstone Stairs"));
self::register(new SeaLantern(new BID(Block::SEALANTERN), "Sea Lantern"));
self::register(new SignPost(new BID(Block::SIGN_POST, 0, ItemIds::SIGN, \pocketmine\tile\Sign::class), "Sign Post"));
self::register(new Skull(new BID(Block::MOB_HEAD_BLOCK, 0, null, \pocketmine\tile\Skull::class), "Mob Head"));
self::register(new SmoothStone(new BID(Block::STONE, Stone::NORMAL), "Stone"));
self::register(new Snow(new BID(Block::SNOW), "Snow Block"));
self::register(new SnowLayer(new BID(Block::SNOW_LAYER), "Snow Layer"));
self::register(new SoulSand(new BID(Block::SOUL_SAND), "Soul Sand"));
self::register(new Sponge(new BID(Block::SPONGE), "Sponge"));
self::register(new StandingBanner(new BID(Block::STANDING_BANNER, 0, ItemIds::BANNER, \pocketmine\tile\Banner::class), "Standing Banner"));
self::register(new Stone(new BID(Block::STONE, Stone::ANDESITE), "Andesite"));
self::register(new Stone(new BID(Block::STONE, Stone::DIORITE), "Diorite"));
self::register(new Stone(new BID(Block::STONE, Stone::GRANITE), "Granite"));
self::register(new Stone(new BID(Block::STONE, Stone::POLISHED_ANDESITE), "Polished Andesite"));
self::register(new Stone(new BID(Block::STONE, Stone::POLISHED_DIORITE), "Polished Diorite"));
self::register(new Stone(new BID(Block::STONE, Stone::POLISHED_GRANITE), "Polished Granite"));
self::register(new StoneBrickStairs(new BID(Block::STONE_BRICK_STAIRS), "Stone Brick Stairs"));
self::register(new StoneBricks(new BID(Block::STONEBRICK, StoneBricks::CHISELED), "Chiseled Stone Bricks"));
self::register(new StoneBricks(new BID(Block::STONEBRICK, StoneBricks::CRACKED), "Cracked Stone Bricks"));
self::register(new StoneBricks(new BID(Block::STONEBRICK, StoneBricks::MOSSY), "Mossy Stone Bricks"));
self::register(new StoneBricks(new BID(Block::STONEBRICK, StoneBricks::NORMAL), "Stone Bricks"));
self::register(new StoneButton(new BID(Block::STONE_BUTTON), "Stone Button"));
self::register(new StonePressurePlate(new BID(Block::STONE_PRESSURE_PLATE), "Stone Pressure Plate"));
self::register(new Stonecutter(new BID(Block::STONECUTTER), "Stonecutter"));
self::register(new Sugarcane(new BID(Block::REEDS_BLOCK, 0, ItemIds::REEDS), "Sugarcane"));
self::register(new TNT(new BID(Block::TNT), "TNT"));
self::register(new TallGrass(new BID(Block::TALLGRASS), "Fern"));
self::register(new TallGrass(new BID(Block::TALLGRASS, 1), "Tall Grass"));
self::register(new TallGrass(new BID(Block::TALLGRASS, 2), "Fern"));
self::register(new TallGrass(new BID(Block::TALLGRASS, 3), "Fern"));
self::register(new Torch(new BID(Block::COLORED_TORCH_BP), "Blue Torch"));
self::register(new Torch(new BID(Block::COLORED_TORCH_BP, 8), "Purple Torch"));
self::register(new Torch(new BID(Block::COLORED_TORCH_RG), "Red Torch"));
self::register(new Torch(new BID(Block::COLORED_TORCH_RG, 8), "Green Torch"));
self::register(new Torch(new BID(Block::TORCH), "Torch"));
self::register(new Trapdoor(new BID(Block::TRAPDOOR), "Wooden Trapdoor"));
self::register(new TrappedChest(new BID(Block::TRAPPED_CHEST, 0, null, \pocketmine\tile\Chest::class), "Trapped Chest"));
self::register(new Tripwire(new BID(Block::TRIPWIRE), "Tripwire"));
self::register(new TripwireHook(new BID(Block::TRIPWIRE_HOOK), "Tripwire Hook"));
self::register(new UnderwaterTorch(new BID(Block::UNDERWATER_TORCH), "Underwater Torch"));
self::register(new Vine(new BID(Block::VINE), "Vines"));
self::register(new WallBanner(new BID(Block::WALL_BANNER, 0, ItemIds::BANNER, \pocketmine\tile\Banner::class), "Wall Banner"));
self::register(new WallSign(new BID(Block::WALL_SIGN, 0, ItemIds::SIGN, \pocketmine\tile\Sign::class), "Wall Sign"));
self::register($water = new Water(new BlockIdentifierFlattened(Block::FLOWING_WATER, Block::STILL_WATER), "Water"));
self::register((clone $water)->setStill()); //flattening hack
self::register(new WaterLily(new BID(Block::LILY_PAD), "Lily Pad"));
self::register(new WeightedPressurePlateHeavy(new BID(Block::HEAVY_WEIGHTED_PRESSURE_PLATE), "Weighted Pressure Plate Heavy"));
self::register(new WeightedPressurePlateLight(new BID(Block::LIGHT_WEIGHTED_PRESSURE_PLATE), "Weighted Pressure Plate Light"));
self::register(new Wheat(new BID(Block::WHEAT_BLOCK), "Wheat Block"));
self::register(new WoodenButton(new BID(Block::WOODEN_BUTTON), "Wooden Button"));
self::register(new WoodenDoor(new BID(Block::ACACIA_DOOR_BLOCK, 0, ItemIds::ACACIA_DOOR), "Acacia Door"));
self::register(new WoodenDoor(new BID(Block::BIRCH_DOOR_BLOCK, 0, ItemIds::BIRCH_DOOR), "Birch Door"));
self::register(new WoodenDoor(new BID(Block::DARK_OAK_DOOR_BLOCK, 0, ItemIds::DARK_OAK_DOOR), "Dark Oak Door"));
self::register(new WoodenDoor(new BID(Block::JUNGLE_DOOR_BLOCK, 0, ItemIds::JUNGLE_DOOR), "Jungle Door"));
self::register(new WoodenDoor(new BID(Block::OAK_DOOR_BLOCK, 0, ItemIds::OAK_DOOR), "Oak Door"));
self::register(new WoodenDoor(new BID(Block::SPRUCE_DOOR_BLOCK, 0, ItemIds::SPRUCE_DOOR), "Spruce Door"));
self::register(new WoodenPressurePlate(new BID(Block::WOODEN_PRESSURE_PLATE), "Wooden Pressure Plate"));
self::register(new WoodenStairs(new BID(Block::ACACIA_STAIRS), "Acacia Stairs"));
self::register(new WoodenStairs(new BID(Block::BIRCH_STAIRS), "Birch Stairs"));
self::register(new WoodenStairs(new BID(Block::DARK_OAK_STAIRS), "Dark Oak Stairs"));
self::register(new WoodenStairs(new BID(Block::JUNGLE_STAIRS), "Jungle Stairs"));
self::register(new WoodenStairs(new BID(Block::OAK_STAIRS), "Oak Stairs"));
self::register(new WoodenStairs(new BID(Block::SPRUCE_STAIRS), "Spruce Stairs"));
foreach(TreeType::getAll() as $treeType){
$magicNumber = $treeType->getMagicNumber();
$name = $treeType->getDisplayName();
self::register(new Planks(Block::PLANKS, $magicNumber, $name . " Planks"));
self::register(new Sapling(Block::SAPLING, $magicNumber, $treeType, $name . " Sapling"));
self::register(new WoodenFence(Block::FENCE, $magicNumber, $name . " Fence"));
self::register(new Planks(new BID(Block::PLANKS, $magicNumber), $name . " Planks"));
self::register(new Sapling(new BID(Block::SAPLING, $magicNumber), $name . " Sapling", $treeType));
self::register(new WoodenFence(new BID(Block::FENCE, $magicNumber), $name . " Fence"));
//TODO: find a better way to deal with this split
self::register(new Leaves($magicNumber >= 4 ? Block::LEAVES2 : Block::LEAVES, $magicNumber & 0x03, $treeType, $name . " Leaves"));
self::register(new Log($magicNumber >= 4 ? Block::WOOD2 : Block::WOOD, $magicNumber & 0x03, $treeType, $name . " Log"));
self::register(new Wood($magicNumber >= 4 ? Block::WOOD2 : Block::WOOD, ($magicNumber & 0x03) | 0b1100, $treeType, $name . " Wood"));
self::register(new Leaves(new BID($magicNumber >= 4 ? Block::LEAVES2 : Block::LEAVES, $magicNumber & 0x03), $name . " Leaves", $treeType));
self::register(new Log(new BID($magicNumber >= 4 ? Block::WOOD2 : Block::WOOD, $magicNumber & 0x03), $name . " Log", $treeType));
self::register(new Wood(new BID($magicNumber >= 4 ? Block::WOOD2 : Block::WOOD, ($magicNumber & 0x03) | 0b1100), $name . " Wood", $treeType));
}
static $sandstoneTypes = [
@ -335,43 +336,43 @@ class BlockFactory{
Sandstone::SMOOTH => "Smooth "
];
foreach($sandstoneTypes as $variant => $prefix){
self::register(new Sandstone(Block::SANDSTONE, $variant, $prefix . "Sandstone"));
self::register(new Sandstone(Block::RED_SANDSTONE, $variant, $prefix . "Red Sandstone"));
self::register(new Sandstone(new BID(Block::SANDSTONE, $variant), $prefix . "Sandstone"));
self::register(new Sandstone(new BID(Block::RED_SANDSTONE, $variant), $prefix . "Red Sandstone"));
}
foreach(DyeColor::getAll() as $color){
self::register(new Carpet(Block::CARPET, $color->getMagicNumber(), $color->getDisplayName() . " Carpet"));
self::register(new Concrete(Block::CONCRETE, $color->getMagicNumber(), $color->getDisplayName() . " Concrete"));
self::register(new ConcretePowder(Block::CONCRETE_POWDER, $color->getMagicNumber(), $color->getDisplayName() . " Concrete Powder"));
self::register(new Glass(Block::STAINED_GLASS, $color->getMagicNumber(), $color->getDisplayName() . " Stained Glass"));
self::register(new GlassPane(Block::STAINED_GLASS_PANE, $color->getMagicNumber(), $color->getDisplayName() . " Stained Glass Pane"));
self::register(new HardenedClay(Block::STAINED_CLAY, $color->getMagicNumber(), $color->getDisplayName() . " Stained Clay"));
self::register(new HardenedGlass(Block::HARD_STAINED_GLASS, $color->getMagicNumber(), "Hardened " . $color->getDisplayName() . " Stained Glass"));
self::register(new HardenedGlassPane(Block::HARD_STAINED_GLASS_PANE, $color->getMagicNumber(), "Hardened " . $color->getDisplayName() . " Stained Glass Pane"));
self::register(new Wool(Block::WOOL, $color->getMagicNumber(), $color->getDisplayName() . " Wool"));
self::register(new Carpet(new BID(Block::CARPET, $color->getMagicNumber()), $color->getDisplayName() . " Carpet"));
self::register(new Concrete(new BID(Block::CONCRETE, $color->getMagicNumber()), $color->getDisplayName() . " Concrete"));
self::register(new ConcretePowder(new BID(Block::CONCRETE_POWDER, $color->getMagicNumber()), $color->getDisplayName() . " Concrete Powder"));
self::register(new Glass(new BID(Block::STAINED_GLASS, $color->getMagicNumber()), $color->getDisplayName() . " Stained Glass"));
self::register(new GlassPane(new BID(Block::STAINED_GLASS_PANE, $color->getMagicNumber()), $color->getDisplayName() . " Stained Glass Pane"));
self::register(new HardenedClay(new BID(Block::STAINED_CLAY, $color->getMagicNumber()), $color->getDisplayName() . " Stained Clay"));
self::register(new HardenedGlass(new BID(Block::HARD_STAINED_GLASS, $color->getMagicNumber()), "Hardened " . $color->getDisplayName() . " Stained Glass"));
self::register(new HardenedGlassPane(new BID(Block::HARD_STAINED_GLASS_PANE, $color->getMagicNumber()), "Hardened " . $color->getDisplayName() . " Stained Glass Pane"));
self::register(new Wool(new BID(Block::WOOL, $color->getMagicNumber()), $color->getDisplayName() . " Wool"));
}
/** @var Slab[] $slabTypes */
$slabTypes = [
new StoneSlab(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 0, "Stone"),
new StoneSlab(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 1, "Sandstone"),
new StoneSlab(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 2, "Fake Wooden"),
new StoneSlab(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 3, "Cobblestone"),
new StoneSlab(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 4, "Brick"),
new StoneSlab(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 5, "Stone Brick"),
new StoneSlab(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 6, "Quartz"),
new StoneSlab(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 7, "Nether Brick"),
new StoneSlab(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 0, "Red Sandstone"),
new StoneSlab(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 1, "Purpur"),
new StoneSlab(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 2, "Prismarine"),
new StoneSlab(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 3, "Dark Prismarine"),
new StoneSlab(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 4, "Prismarine Bricks"),
new StoneSlab(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 5, "Mossy Cobblestone"),
new StoneSlab(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 6, "Smooth Sandstone"),
new StoneSlab(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 7, "Red Nether Brick")
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 0), "Stone"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 1), "Sandstone"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 2), "Fake Wooden"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 3), "Cobblestone"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 4), "Brick"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 5), "Stone Brick"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 6), "Quartz"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB, Block::DOUBLE_STONE_SLAB, 7), "Nether Brick"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 0), "Red Sandstone"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 1), "Purpur"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 2), "Prismarine"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 3), "Dark Prismarine"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 4), "Prismarine Bricks"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 5), "Mossy Cobblestone"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 6), "Smooth Sandstone"),
new StoneSlab(new BlockIdentifierFlattened(Block::STONE_SLAB2, Block::DOUBLE_STONE_SLAB2, 7), "Red Nether Brick")
];
foreach(TreeType::getAll() as $woodType){
$slabTypes[] = new WoodenSlab(Block::WOODEN_SLAB, Block::DOUBLE_WOODEN_SLAB, $woodType->getMagicNumber(), $woodType->getDisplayName());
$slabTypes[] = new WoodenSlab(new BlockIdentifierFlattened(Block::WOODEN_SLAB, Block::DOUBLE_WOODEN_SLAB, $woodType->getMagicNumber()), $woodType->getDisplayName());
}
foreach($slabTypes as $type){
self::register($type);
@ -395,7 +396,7 @@ class BlockFactory{
CobblestoneWall::STONE_BRICK_WALL => "Stone Brick"
];
foreach($wallTypes as $magicNumber => $prefix){
self::register(new CobblestoneWall(Block::COBBLESTONE_WALL, $magicNumber, $prefix . " Wall"));
self::register(new CobblestoneWall(new BID(Block::COBBLESTONE_WALL, $magicNumber), $prefix . " Wall"));
}
//TODO: minecraft:acacia_button
@ -533,8 +534,7 @@ class BlockFactory{
*/
public static function register(Block $block, bool $override = false) : void{
$id = $block->getId();
$variant = $block->getVariant();
$variant = $block->getIdInfo()->getVariant();
$stateMask = $block->getStateBitmask();
if(($variant & $stateMask) !== 0){
@ -542,7 +542,7 @@ class BlockFactory{
}
if(!$override and self::isRegistered($id, $variant)){
throw new \InvalidArgumentException("Block registration conflicts with an existing block");
throw new \InvalidArgumentException("Block registration $id:$variant conflicts with an existing block");
}
for($m = $variant; $m <= ($variant | $stateMask); ++$m){
@ -608,7 +608,7 @@ class BlockFactory{
}
if($block === null){
$block = new UnknownBlock($id, $meta);
$block = new UnknownBlock(new BID($id, $meta));
}
if($pos !== null){

View File

@ -0,0 +1,71 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\block;
class BlockIdentifier{
/** @var int */
private $blockId;
/** @var int */
private $variant;
/** @var int|null */
private $itemId;
/** @var string|null */
private $tileClass;
public function __construct(int $blockId, int $variant = 0, ?int $itemId = null, ?string $tileClass = null){
$this->blockId = $blockId;
$this->variant = $variant;
$this->itemId = $itemId;
$this->tileClass = $tileClass;
}
/**
* @return int
*/
public function getBlockId() : int{
return $this->blockId;
}
/**
* @return int
*/
public function getVariant() : int{
return $this->variant;
}
/**
* @return int
*/
public function getItemId() : int{
return $this->itemId ?? ($this->blockId > 255 ? 255 - $this->blockId : $this->blockId);
}
/**
* @return string|null
*/
public function getTileClass() : ?string{
return $this->tileClass;
}
}

View File

@ -23,12 +23,20 @@ declare(strict_types=1);
namespace pocketmine\block;
class BlockIdentifierFlattened extends BlockIdentifier{
class MossyCobblestone extends Cobblestone{
/** @var int */
private $secondId;
protected $id = self::MOSSY_COBBLESTONE;
public function __construct(int $blockId, int $secondId, int $variant = 0, ?int $itemId = null, ?string $tileClass = null){
parent::__construct($blockId, $variant, $itemId, $tileClass);
$this->secondId = $secondId;
}
public function getName() : string{
return "Moss Stone";
/**
* @return int
*/
public function getSecondId() : int{
return $this->secondId;
}
}

View File

@ -29,16 +29,6 @@ use pocketmine\item\TieredTool;
class BoneBlock extends Solid{
use PillarRotationTrait;
protected $id = Block::BONE_BLOCK;
public function __construct(){
}
public function getName() : string{
return "Bone Block";
}
public function getHardness() : float{
return 2;
}

View File

@ -28,16 +28,6 @@ use pocketmine\item\ItemFactory;
class Bookshelf extends Solid{
protected $id = self::BOOKSHELF;
public function __construct(){
}
public function getName() : string{
return "Bookshelf";
}
public function getHardness() : float{
return 1.5;
}

View File

@ -23,15 +23,10 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\item\Item;
use pocketmine\item\TieredTool;
class BrewingStand extends Transparent{
protected $id = self::BREWING_STAND_BLOCK;
protected $itemId = Item::BREWING_STAND;
/** @var bool */
protected $eastSlot = false;
/** @var bool */
@ -39,10 +34,6 @@ class BrewingStand extends Transparent{
/** @var bool */
protected $southwestSlot = false;
public function __construct(){
}
protected function writeStateToMeta() : int{
return ($this->eastSlot ? 0x01 : 0) | ($this->southwestSlot ? 0x02 : 0) | ($this->northwestSlot ? 0x04 : 0);
}
@ -57,10 +48,6 @@ class BrewingStand extends Transparent{
return 0b111;
}
public function getName() : string{
return "Brewing Stand";
}
public function getHardness() : float{
return 0.5;
}

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class BrickStairs extends Stair{
protected $id = self::BRICK_STAIRS;
public function __construct(){
}
public function getHardness() : float{
return 2;
}
@ -48,8 +42,4 @@ class BrickStairs extends Stair{
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Brick Stairs";
}
}

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class Bricks extends Solid{
protected $id = self::BRICK_BLOCK;
public function __construct(){
}
public function getHardness() : float{
return 2;
}
@ -48,8 +42,4 @@ class Bricks extends Solid{
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Bricks";
}
}

View File

@ -25,12 +25,6 @@ namespace pocketmine\block;
class BrownMushroom extends RedMushroom{
protected $id = self::BROWN_MUSHROOM;
public function getName() : string{
return "Brown Mushroom";
}
public function getLightLevel() : int{
return 1;
}

View File

@ -28,12 +28,6 @@ use function mt_rand;
class BrownMushroomBlock extends RedMushroomBlock{
protected $id = Block::BROWN_MUSHROOM_BLOCK;
public function getName() : string{
return "Brown Mushroom Block";
}
public function getDropsForCompatibleTool(Item $item) : array{
return [
Item::get(Item::BROWN_MUSHROOM, 0, mt_rand(0, 2))

View File

@ -37,10 +37,6 @@ abstract class Button extends Flowable{
/** @var bool */
protected $powered = false;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->facing | ($this->powered ? 0x08 : 0);
}

View File

@ -36,15 +36,9 @@ use pocketmine\Player;
class Cactus extends Transparent{
protected $id = self::CACTUS;
/** @var int */
protected $age = 0;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->age;
}
@ -65,10 +59,6 @@ class Cactus extends Transparent{
return true;
}
public function getName() : string{
return "Cactus";
}
protected function recalculateBoundingBox() : ?AxisAlignedBB{
static $shrinkSize = 1 / 16;
return AxisAlignedBB::one()->contract($shrinkSize, 0, $shrinkSize)->trim(Facing::UP, $shrinkSize);

View File

@ -35,17 +35,9 @@ use pocketmine\Player;
class Cake extends Transparent implements FoodSource{
protected $id = self::CAKE_BLOCK;
protected $itemId = Item::CAKE;
/** @var int */
protected $bites = 0;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->bites;
}
@ -62,10 +54,6 @@ class Cake extends Transparent implements FoodSource{
return 0.5;
}
public function getName() : string{
return "Cake";
}
protected function recalculateBoundingBox() : ?AxisAlignedBB{
return AxisAlignedBB::one()
->contract(1 / 16, 0, 1 / 16)

View File

@ -29,12 +29,6 @@ use function mt_rand;
class Carrot extends Crops{
protected $id = self::CARROT_BLOCK;
public function getName() : string{
return "Carrot Block";
}
public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get(Item::CARROT, 0, $this->age >= 7 ? mt_rand(1, 4) : 1)

View File

@ -33,15 +33,9 @@ use pocketmine\tile\Chest as TileChest;
class Chest extends Transparent{
protected $id = self::CHEST;
/** @var int */
protected $facing = Facing::NORTH;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->facing;
}
@ -54,18 +48,10 @@ class Chest extends Transparent{
return 0b111;
}
protected function getTileClass() : ?string{
return TileChest::class;
}
public function getHardness() : float{
return 2.5;
}
public function getName() : string{
return "Chest";
}
public function getToolType() : int{
return BlockToolType::TYPE_AXE;
}

View File

@ -28,12 +28,6 @@ use pocketmine\item\ItemFactory;
class Clay extends Solid{
protected $id = self::CLAY_BLOCK;
public function __construct(){
}
public function getHardness() : float{
return 0.6;
}
@ -42,10 +36,6 @@ class Clay extends Solid{
return BlockToolType::TYPE_SHOVEL;
}
public function getName() : string{
return "Clay Block";
}
public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get(Item::CLAY_BALL, 0, 4)

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class Coal extends Solid{
protected $id = self::COAL_BLOCK;
public function __construct(){
}
public function getHardness() : float{
return 5;
}
@ -45,10 +39,6 @@ class Coal extends Solid{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Coal Block";
}
public function getFuelTime() : int{
return 16000;
}

View File

@ -30,12 +30,6 @@ use function mt_rand;
class CoalOre extends Solid{
protected $id = self::COAL_ORE;
public function __construct(){
}
public function getHardness() : float{
return 3;
}
@ -48,10 +42,6 @@ class CoalOre extends Solid{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Coal Ore";
}
public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get(Item::COAL)

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class Cobblestone extends Solid{
protected $id = self::COBBLESTONE;
public function __construct(){
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}
@ -41,10 +35,6 @@ class Cobblestone extends Solid{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Cobblestone";
}
public function getHardness() : float{
return 2;
}

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class CobblestoneStairs extends Stair{
protected $id = self::COBBLESTONE_STAIRS;
public function __construct(){
}
public function getHardness() : float{
return 2;
}
@ -44,8 +38,4 @@ class CobblestoneStairs extends Stair{
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Cobblestone Stairs";
}
}

View File

@ -29,20 +29,10 @@ use pocketmine\item\ItemFactory;
class Cobweb extends Flowable{
protected $id = self::COBWEB;
public function __construct(){
}
public function hasEntityCollision() : bool{
return true;
}
public function getName() : string{
return "Cobweb";
}
public function getHardness() : float{
return 4;
}

View File

@ -36,17 +36,11 @@ use function mt_rand;
class CocoaBlock extends Transparent{
protected $id = self::COCOA_BLOCK;
/** @var int */
protected $facing = Facing::NORTH;
/** @var int */
protected $age = 0;
public function __construct(){
}
protected function writeStateToMeta() : int{
return Bearing::fromFacing(Facing::opposite($this->facing)) | ($this->age << 2);
}
@ -60,10 +54,6 @@ class CocoaBlock extends Transparent{
return 0b1111;
}
public function getName() : string{
return "Cocoa Block";
}
public function getHardness() : float{
return 0.2;
}

View File

@ -64,7 +64,7 @@ class ConcretePowder extends Solid implements Fallable{
continue;
}
if($this->getSide($i) instanceof Water){
return BlockFactory::get(Block::CONCRETE, $this->variant);
return BlockFactory::get(Block::CONCRETE, $this->idInfo->getVariant());
}
}

View File

@ -30,20 +30,10 @@ use pocketmine\Player;
class CraftingTable extends Solid{
protected $id = self::CRAFTING_TABLE;
public function __construct(){
}
public function getHardness() : float{
return 2.5;
}
public function getName() : string{
return "Crafting Table";
}
public function getToolType() : int{
return BlockToolType::TYPE_AXE;
}

View File

@ -35,10 +35,6 @@ abstract class Crops extends Flowable{
/** @var int */
protected $age = 0;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->age;
}

View File

@ -30,16 +30,6 @@ use pocketmine\Player;
class Dandelion extends Flowable{
protected $id = self::DANDELION;
public function __construct(){
}
public function getName() : string{
return "Dandelion";
}
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
$down = $this->getSide(Facing::DOWN);

View File

@ -31,8 +31,8 @@ use pocketmine\math\Vector3;
use pocketmine\Player;
class DaylightSensor extends Transparent{
protected $itemId = self::DAYLIGHT_SENSOR;
/** @var BlockIdentifierFlattened */
protected $idInfo;
/** @var int */
protected $power = 0;
@ -40,12 +40,12 @@ class DaylightSensor extends Transparent{
/** @var bool */
protected $inverted = false;
public function __construct(){
public function __construct(BlockIdentifierFlattened $idInfo, string $name){
parent::__construct($idInfo, $name);
}
public function getId() : int{
return $this->inverted ? self::DAYLIGHT_SENSOR_INVERTED : self::DAYLIGHT_SENSOR;
return $this->inverted ? $this->idInfo->getSecondId() : parent::getId();
}
protected function writeStateToMeta() : int{
@ -74,10 +74,6 @@ class DaylightSensor extends Transparent{
return $this;
}
public function getName() : string{
return "Daylight Sensor";
}
public function getHardness() : float{
return 0.2;
}

View File

@ -32,16 +32,6 @@ use function mt_rand;
class DeadBush extends Flowable{
protected $id = self::DEAD_BUSH;
public function __construct(){
}
public function getName() : string{
return "Dead Bush";
}
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
if(!$this->getSide(Facing::DOWN)->isTransparent()){
return parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player);

View File

@ -25,11 +25,5 @@ namespace pocketmine\block;
class DetectorRail extends RedstoneRail{
protected $id = self::DETECTOR_RAIL;
public function getName() : string{
return "Detector Rail";
}
//TODO
}

View File

@ -27,20 +27,10 @@ use pocketmine\item\TieredTool;
class Diamond extends Solid{
protected $id = self::DIAMOND_BLOCK;
public function __construct(){
}
public function getHardness() : float{
return 5;
}
public function getName() : string{
return "Diamond Block";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -30,20 +30,10 @@ use function mt_rand;
class DiamondOre extends Solid{
protected $id = self::DIAMOND_ORE;
public function __construct(){
}
public function getHardness() : float{
return 3;
}
public function getName() : string{
return "Diamond Ore";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class Emerald extends Solid{
protected $id = self::EMERALD_BLOCK;
public function __construct(){
}
public function getHardness() : float{
return 5;
}
@ -44,8 +38,4 @@ class Emerald extends Solid{
public function getToolHarvestLevel() : int{
return TieredTool::TIER_IRON;
}
public function getName() : string{
return "Emerald Block";
}
}

View File

@ -30,16 +30,6 @@ use function mt_rand;
class EmeraldOre extends Solid{
protected $id = self::EMERALD_ORE;
public function __construct(){
}
public function getName() : string{
return "Emerald Ore";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -30,20 +30,9 @@ use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Facing;
use pocketmine\math\Vector3;
use pocketmine\Player;
use pocketmine\tile\EnchantTable as TileEnchantingTable;
class EnchantingTable extends Transparent{
protected $id = self::ENCHANTING_TABLE;
public function __construct(){
}
protected function getTileClass() : ?string{
return TileEnchantingTable::class;
}
public function getHardness() : float{
return 5;
}
@ -52,10 +41,6 @@ class EnchantingTable extends Transparent{
return 6000;
}
public function getName() : string{
return "Enchanting Table";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -33,17 +33,11 @@ use pocketmine\Player;
class EndPortalFrame extends Solid{
protected $id = self::END_PORTAL_FRAME;
/** @var int */
protected $facing = Facing::NORTH;
/** @var bool */
protected $eye = false;
public function __construct(){
}
protected function writeStateToMeta() : int{
return Bearing::fromFacing($this->facing) | ($this->eye ? 0x04 : 0);
}
@ -61,10 +55,6 @@ class EndPortalFrame extends Solid{
return 1;
}
public function getName() : string{
return "End Portal Frame";
}
public function getHardness() : float{
return -1;
}

View File

@ -32,15 +32,9 @@ use pocketmine\Player;
class EndRod extends Flowable{
protected $id = Block::END_ROD;
/** @var int */
protected $facing = Facing::DOWN;
public function __construct(){
}
protected function writeStateToMeta() : int{
if(Facing::axis($this->facing) === Facing::AXIS_Y){
return $this->facing;
@ -60,10 +54,6 @@ class EndRod extends Flowable{
return 0b111;
}
public function getName() : string{
return "End Rod";
}
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
$this->facing = $face;
if($blockClicked instanceof EndRod and $blockClicked->facing === $this->facing){

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class EndStone extends Solid{
protected $id = self::END_STONE;
public function __construct(){
}
public function getName() : string{
return "End Stone";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class EndStoneBricks extends Solid{
protected $id = self::END_BRICKS;
public function __construct(){
}
public function getName() : string{
return "End Stone Bricks";
}
public function getHardness() : float{
return 0.8;
}

View File

@ -33,12 +33,6 @@ use pocketmine\tile\EnderChest as TileEnderChest;
class EnderChest extends Chest{
protected $id = self::ENDER_CHEST;
protected function getTileClass() : ?string{
return TileEnderChest::class;
}
public function getHardness() : float{
return 22.5;
}
@ -51,10 +45,6 @@ class EnderChest extends Chest{
return 7;
}
public function getName() : string{
return "Ender Chest";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -31,15 +31,9 @@ use pocketmine\math\Facing;
class Farmland extends Transparent{
protected $id = self::FARMLAND;
/** @var int */
protected $wetness = 0; //"moisture" blockstate property in PC
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->wetness;
}
@ -52,10 +46,6 @@ class Farmland extends Transparent{
return 0b111;
}
public function getName() : string{
return "Farmland";
}
public function getHardness() : float{
return 0.6;
}

View File

@ -37,15 +37,9 @@ use function mt_rand;
class Fire extends Flowable{
protected $id = self::FIRE;
/** @var int */
protected $age = 0;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->age;
}
@ -62,10 +56,6 @@ class Fire extends Flowable{
return true;
}
public function getName() : string{
return "Fire Block";
}
public function getLightLevel() : int{
return 15;
}

View File

@ -32,16 +32,9 @@ use pocketmine\tile\FlowerPot as TileFlowerPot;
class FlowerPot extends Flowable{
protected $id = self::FLOWER_POT_BLOCK;
protected $itemId = Item::FLOWER_POT;
/** @var bool */
protected $occupied = false;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->occupied ? 1 : 0;
}
@ -54,14 +47,6 @@ class FlowerPot extends Flowable{
return 0b1111; //vanilla uses various values, we only care about 1 and 0 for PE
}
protected function getTileClass() : ?string{
return TileFlowerPot::class;
}
public function getName() : string{
return "Flower Pot";
}
protected function recalculateBoundingBox() : ?AxisAlignedBB{
return AxisAlignedBB::one()->contract(3 / 16, 0, 3 / 16)->trim(Facing::UP, 5 / 8);
}

View File

@ -32,20 +32,16 @@ use pocketmine\Player;
use pocketmine\tile\Furnace as TileFurnace;
class Furnace extends Solid{
protected $itemId = self::FURNACE;
/** @var BlockIdentifierFlattened */
protected $idInfo;
/** @var int */
protected $facing = Facing::NORTH;
/** @var bool */
protected $lit = false; //this is set based on the blockID
public function __construct(){
}
public function getId() : int{
return $this->lit ? Block::BURNING_FURNACE : Block::FURNACE;
return $this->lit ? $this->idInfo->getSecondId() : parent::getId();
}
protected function writeStateToMeta() : int{
@ -60,14 +56,6 @@ class Furnace extends Solid{
return 0b111;
}
protected function getTileClass() : ?string{
return TileFurnace::class;
}
public function getName() : string{
return "Furnace";
}
public function getHardness() : float{
return 3.5;
}

View File

@ -28,16 +28,6 @@ use pocketmine\item\TieredTool;
class GlowingObsidian extends Solid{
protected $id = self::GLOWING_OBSIDIAN;
public function __construct(){
}
public function getName() : string{
return "Glowing Obsidian";
}
public function getLightLevel() : int{
return 12;
}

View File

@ -29,16 +29,6 @@ use function mt_rand;
class Glowstone extends Transparent{
protected $id = self::GLOWSTONE;
public function __construct(){
}
public function getName() : string{
return "Glowstone";
}
public function getHardness() : float{
return 0.3;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class Gold extends Solid{
protected $id = self::GOLD_BLOCK;
public function __construct(){
}
public function getName() : string{
return "Gold Block";
}
public function getHardness() : float{
return 3;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class GoldOre extends Solid{
protected $id = self::GOLD_ORE;
public function __construct(){
}
public function getName() : string{
return "Gold Ore";
}
public function getHardness() : float{
return 3;
}

View File

@ -37,16 +37,6 @@ use function mt_rand;
class Grass extends Solid{
protected $id = self::GRASS;
public function __construct(){
}
public function getName() : string{
return "Grass";
}
public function getHardness() : float{
return 0.6;
}

View File

@ -30,16 +30,6 @@ use pocketmine\math\Facing;
class GrassPath extends Transparent{
protected $id = self::GRASS_PATH;
public function __construct(){
}
public function getName() : string{
return "Grass Path";
}
public function getToolType() : int{
return BlockToolType::TYPE_SHOVEL;
}

View File

@ -32,16 +32,6 @@ use function mt_rand;
class Gravel extends Solid implements Fallable{
use FallableTrait;
protected $id = self::GRAVEL;
public function __construct(){
}
public function getName() : string{
return "Gravel";
}
public function getHardness() : float{
return 0.6;
}

View File

@ -28,16 +28,6 @@ use pocketmine\block\utils\PillarRotationTrait;
class HayBale extends Solid{
use PillarRotationTrait;
protected $id = self::HAY_BALE;
public function __construct(){
}
public function getName() : string{
return "Hay Bale";
}
public function getHardness() : float{
return 0.5;
}

View File

@ -29,16 +29,6 @@ use pocketmine\Player;
class Ice extends Transparent{
protected $id = self::ICE;
public function __construct(){
}
public function getName() : string{
return "Ice";
}
public function getHardness() : float{
return 0.5;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\Item;
class InvisibleBedrock extends Transparent{
protected $id = self::INVISIBLE_BEDROCK;
public function __construct(){
}
public function getName() : string{
return "Invisible Bedrock";
}
public function getHardness() : float{
return -1;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class Iron extends Solid{
protected $id = self::IRON_BLOCK;
public function __construct(){
}
public function getName() : string{
return "Iron Block";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class IronBars extends Thin{
protected $id = self::IRON_BARS;
public function __construct(){
}
public function getName() : string{
return "Iron Bars";
}
public function getHardness() : float{
return 5;
}

View File

@ -23,23 +23,10 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\item\Item;
use pocketmine\item\TieredTool;
class IronDoor extends Door{
protected $id = self::IRON_DOOR_BLOCK;
protected $itemId = Item::IRON_DOOR;
public function __construct(){
}
public function getName() : string{
return "Iron Door";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class IronOre extends Solid{
protected $id = self::IRON_ORE;
public function __construct(){
}
public function getName() : string{
return "Iron Ore";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class IronTrapdoor extends Trapdoor{
protected $id = self::IRON_TRAPDOOR;
public function getName() : string{
return "Iron Trapdoor";
}
public function getHardness() : float{
return 5;
}

View File

@ -32,19 +32,12 @@ use pocketmine\tile\ItemFrame as TileItemFrame;
use function lcg_value;
class ItemFrame extends Flowable{
protected $id = Block::ITEM_FRAME_BLOCK;
protected $itemId = Item::ITEM_FRAME;
/** @var int */
protected $facing = Facing::NORTH;
/** @var bool */
protected $hasMap = false; //makes frame appear large if set
public function __construct(){
}
protected function writeStateToMeta() : int{
return (5 - $this->facing) | ($this->hasMap ? 0x04 : 0);
}
@ -58,14 +51,6 @@ class ItemFrame extends Flowable{
return 0b111;
}
protected function getTileClass() : ?string{
return TileItemFrame::class;
}
public function getName() : string{
return "Item Frame";
}
public function onActivate(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
$tile = $this->level->getTile($this);
if($tile instanceof TileItemFrame){

View File

@ -33,15 +33,9 @@ use pocketmine\Player;
class Ladder extends Transparent{
protected $id = self::LADDER;
/** @var int */
protected $facing = Facing::NORTH;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->facing;
}
@ -54,10 +48,6 @@ class Ladder extends Transparent{
return 0b111;
}
public function getName() : string{
return "Ladder";
}
public function hasEntityCollision() : bool{
return true;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class Lapis extends Solid{
protected $id = self::LAPIS_BLOCK;
public function __construct(){
}
public function getName() : string{
return "Lapis Lazuli Block";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -30,12 +30,6 @@ use function mt_rand;
class LapisOre extends Solid{
protected $id = self::LAPIS_ORE;
public function __construct(){
}
public function getHardness() : float{
return 3;
}
@ -48,10 +42,6 @@ class LapisOre extends Solid{
return TieredTool::TIER_STONE;
}
public function getName() : string{
return "Lapis Lazuli Ore";
}
public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get(Item::DYE, 4, mt_rand(4, 8))

View File

@ -32,10 +32,6 @@ use pocketmine\network\mcpe\protocol\LevelSoundEventPacket;
class Lava extends Liquid{
public function __construct(){
parent::__construct(self::FLOWING_LAVA, self::STILL_LAVA, "Lava");
}
public function getLightLevel() : int{
return 15;
}

View File

@ -42,8 +42,8 @@ class Leaves extends Transparent{
/** @var bool */
protected $checkDecay = false;
public function __construct(int $id, int $variant, TreeType $treeType, ?string $name = null){
parent::__construct($id, $variant, $name);
public function __construct(BlockIdentifier $idInfo, string $name, TreeType $treeType){
parent::__construct($idInfo, $name);
$this->treeType = $treeType;
}

View File

@ -35,8 +35,6 @@ class Lever extends Flowable{
protected const SIDE = 1;
protected const TOP = 2;
protected $id = self::LEVER;
/** @var int */
protected $position = self::BOTTOM;
/** @var int */
@ -44,10 +42,6 @@ class Lever extends Flowable{
/** @var bool */
protected $powered = false;
public function __construct(){
}
protected function writeStateToMeta() : int{
if($this->position === self::BOTTOM){
$rotationMeta = Facing::axis($this->facing) === Facing::AXIS_Z ? 7 : 0;
@ -79,10 +73,6 @@ class Lever extends Flowable{
return 0b1111;
}
public function getName() : string{
return "Lever";
}
public function getHardness() : float{
return 0.5;
}

View File

@ -37,8 +37,8 @@ use function lcg_value;
use function min;
abstract class Liquid extends Transparent{
/** @var int */
private $stillId;
/** @var BlockIdentifierFlattened */
protected $idInfo;
public $adjacentSources = 0;
@ -59,13 +59,12 @@ abstract class Liquid extends Transparent{
/** @var bool */
protected $still = false;
public function __construct(int $id, int $stillId, string $name){
parent::__construct($id, 0, $name);
$this->stillId = $stillId;
public function __construct(BlockIdentifierFlattened $idInfo, string $name){
parent::__construct($idInfo, $name);
}
public function getId() : int{
return $this->still ? $this->stillId : parent::getId();
return $this->still ? $this->idInfo->getSecondId() : parent::getId();
}
protected function writeStateToMeta() : int{

View File

@ -25,13 +25,7 @@ namespace pocketmine\block;
class LitPumpkin extends Pumpkin{
protected $id = self::LIT_PUMPKIN;
public function getLightLevel() : int{
return 15;
}
public function getName() : string{
return "Jack o'Lantern";
}
}

View File

@ -30,16 +30,6 @@ use pocketmine\item\TieredTool;
class Magma extends Solid{
protected $id = Block::MAGMA;
public function __construct(){
}
public function getName() : string{
return "Magma Block";
}
public function getHardness() : float{
return 0.5;
}

View File

@ -29,16 +29,6 @@ use function mt_rand;
class Melon extends Transparent{
protected $id = self::MELON_BLOCK;
public function __construct(){
}
public function getName() : string{
return "Melon Block";
}
public function getHardness() : float{
return 1;
}

View File

@ -23,18 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\item\Item;
class MelonStem extends Stem{
protected $id = self::MELON_STEM;
protected $itemId = Item::MELON_SEEDS;
public function getName() : string{
return "Melon Stem";
}
protected function getPlant() : Block{
return BlockFactory::get(Block::MELON_BLOCK);
}

View File

@ -29,12 +29,6 @@ use function mt_rand;
class MonsterSpawner extends Transparent{
protected $id = self::MONSTER_SPAWNER;
public function __construct(){
}
public function getHardness() : float{
return 5;
}
@ -47,10 +41,6 @@ class MonsterSpawner extends Transparent{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Monster Spawner";
}
public function getDropsForCompatibleTool(Item $item) : array{
return [];
}

View File

@ -31,16 +31,6 @@ use function mt_rand;
class Mycelium extends Solid{
protected $id = self::MYCELIUM;
public function __construct(){
}
public function getName() : string{
return "Mycelium";
}
public function getToolType() : int{
return BlockToolType::TYPE_SHOVEL;
}

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class NetherBrickFence extends Fence{
protected $id = self::NETHER_BRICK_FENCE;
public function __construct(){
}
public function getHardness() : float{
return 2;
}
@ -44,8 +38,4 @@ class NetherBrickFence extends Fence{
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Nether Brick Fence";
}
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class NetherBrickStairs extends Stair{
protected $id = self::NETHER_BRICK_STAIRS;
public function __construct(){
}
public function getName() : string{
return "Nether Brick Stairs";
}
public function getHardness() : float{
return 2;
}

View File

@ -30,16 +30,6 @@ use function mt_rand;
class NetherQuartzOre extends Solid{
protected $id = Block::NETHER_QUARTZ_ORE;
public function __construct(){
}
public function getName() : string{
return "Nether Quartz Ore";
}
public function getHardness() : float{
return 3;
}

View File

@ -33,15 +33,9 @@ class NetherReactor extends Solid{
protected const STATE_ACTIVE = 1;
protected const STATE_USED = 2;
protected $id = Block::NETHER_REACTOR;
/** @var int */
protected $state = self::STATE_INACTIVE;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->state;
}
@ -54,10 +48,6 @@ class NetherReactor extends Solid{
return 0b11;
}
public function getName() : string{
return "Nether Reactor Core";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -25,16 +25,6 @@ namespace pocketmine\block;
class NetherWartBlock extends Solid{
protected $id = Block::NETHER_WART_BLOCK;
public function __construct(){
}
public function getName() : string{
return "Nether Wart Block";
}
public function getHardness() : float{
return 1;
}

View File

@ -27,24 +27,16 @@ namespace pocketmine\block;
use pocketmine\block\utils\BlockDataValidator;
use pocketmine\event\block\BlockGrowEvent;
use pocketmine\item\Item;
use pocketmine\item\ItemFactory;
use pocketmine\math\Facing;
use pocketmine\math\Vector3;
use pocketmine\Player;
use function mt_rand;
class NetherWartPlant extends Flowable{
protected $id = Block::NETHER_WART_PLANT;
protected $itemId = Item::NETHER_WART;
/** @var int */
protected $age = 0;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->age;
}
@ -57,10 +49,6 @@ class NetherWartPlant extends Flowable{
return 0b11;
}
public function getName() : string{
return "Nether Wart";
}
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
$down = $this->getSide(Facing::DOWN);
if($down->getId() === Block::SOUL_SAND){
@ -94,7 +82,7 @@ class NetherWartPlant extends Flowable{
public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get($this->getItemId(), 0, ($this->age === 3 ? mt_rand(2, 4) : 1))
$this->getItem()->setCount($this->age === 3 ? mt_rand(2, 4) : 1)
];
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class Netherrack extends Solid{
protected $id = self::NETHERRACK;
public function __construct(){
}
public function getName() : string{
return "Netherrack";
}
public function getHardness() : float{
return 0.4;
}

View File

@ -25,16 +25,6 @@ namespace pocketmine\block;
class NoteBlock extends Solid{
protected $id = self::NOTE_BLOCK;
public function __construct(){
}
public function getName() : string{
return "Note Block";
}
public function getFuelTime() : int{
return 300;
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class Obsidian extends Solid{
protected $id = self::OBSIDIAN;
public function __construct(){
}
public function getName() : string{
return "Obsidian";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -25,16 +25,6 @@ namespace pocketmine\block;
class PackedIce extends Solid{
protected $id = self::PACKED_ICE;
public function __construct(){
}
public function getName() : string{
return "Packed Ice";
}
public function getHardness() : float{
return 0.5;
}

View File

@ -25,20 +25,10 @@ namespace pocketmine\block;
class Podzol extends Solid{
protected $id = self::PODZOL;
public function __construct(){
}
public function getToolType() : int{
return BlockToolType::TYPE_SHOVEL;
}
public function getName() : string{
return "Podzol";
}
public function getHardness() : float{
return 2.5;
}

View File

@ -29,12 +29,6 @@ use function mt_rand;
class Potato extends Crops{
protected $id = self::POTATO_BLOCK;
public function getName() : string{
return "Potato Block";
}
public function getDropsForCompatibleTool(Item $item) : array{
return [
ItemFactory::get(Item::POTATO, 0, $this->age >= 7 ? mt_rand(1, 4) : 1)

View File

@ -24,9 +24,4 @@ declare(strict_types=1);
namespace pocketmine\block;
class PoweredRail extends RedstoneRail{
protected $id = self::POWERED_RAIL;
public function getName() : string{
return "Powered Rail";
}
}

View File

@ -32,15 +32,9 @@ use pocketmine\Player;
class Pumpkin extends Solid{
protected $id = self::PUMPKIN;
/** @var int */
protected $facing = Facing::NORTH;
public function __construct(){
}
public function readStateFromMeta(int $meta) : void{
$this->facing = BlockDataValidator::readLegacyHorizontalFacing($meta & 0x03);
}
@ -61,10 +55,6 @@ class Pumpkin extends Solid{
return BlockToolType::TYPE_AXE;
}
public function getName() : string{
return "Pumpkin";
}
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
if($player !== null){
$this->facing = Facing::opposite($player->getHorizontalFacing());

View File

@ -23,18 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\item\Item;
class PumpkinStem extends Stem{
protected $id = self::PUMPKIN_STEM;
protected $itemId = Item::PUMPKIN_SEEDS;
public function getName() : string{
return "Pumpkin Stem";
}
protected function getPlant() : Block{
return BlockFactory::get(Block::PUMPKIN);
}

View File

@ -27,16 +27,6 @@ use pocketmine\item\TieredTool;
class PurpurStairs extends Stair{
protected $id = self::PURPUR_STAIRS;
public function __construct(){
}
public function getName() : string{
return "Purpur Stairs";
}
public function getToolType() : int{
return BlockToolType::TYPE_PICKAXE;
}

View File

@ -27,12 +27,6 @@ use pocketmine\item\TieredTool;
class QuartzStairs extends Stair{
protected $id = self::QUARTZ_STAIRS;
public function __construct(){
}
public function getHardness() : float{
return 0.8;
}
@ -44,8 +38,4 @@ class QuartzStairs extends Stair{
public function getToolHarvestLevel() : int{
return TieredTool::TIER_WOODEN;
}
public function getName() : string{
return "Quartz Stairs";
}
}

View File

@ -52,12 +52,6 @@ class Rail extends BaseRail{
]
];
protected $id = self::RAIL;
public function getName() : string{
return "Rail";
}
protected function getMetaForState(array $connections) : int{
try{
return self::searchState($connections, self::CURVE_CONNECTIONS);

View File

@ -30,16 +30,6 @@ use pocketmine\Player;
class RedMushroom extends Flowable{
protected $id = self::RED_MUSHROOM;
public function __construct(){
}
public function getName() : string{
return "Red Mushroom";
}
public function ticksRandomly() : bool{
return true;
}

View File

@ -28,8 +28,6 @@ use function mt_rand;
class RedMushroomBlock extends Solid{
protected $id = Block::RED_MUSHROOM_BLOCK;
/**
* @var int
* In PC they have blockstate properties for each of the sides (pores/not pores). Unfortunately, we can't support
@ -39,10 +37,6 @@ class RedMushroomBlock extends Solid{
*/
protected $rotationData = 0;
public function __construct(){
}
protected function writeStateToMeta() : int{
return $this->rotationData;
}
@ -55,10 +49,6 @@ class RedMushroomBlock extends Solid{
return 0b1111;
}
public function getName() : string{
return "Red Mushroom Block";
}
public function getHardness() : float{
return 0.2;
}

View File

@ -1,33 +0,0 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\block;
class RedSandstoneStairs extends SandstoneStairs{
protected $id = self::RED_SANDSTONE_STAIRS;
public function getName() : string{
return "Red " . parent::getName();
}
}

Some files were not shown because too many files have changed in this diff Show More