From 2be8b576ef18e71735f8bd255ac375d89cd07be4 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 9 Oct 2017 11:58:58 +0100 Subject: [PATCH] Changed constructor of ItemBlock to allow handling blocks with different item IDs, added more doors --- src/pocketmine/block/BlockFactory.php | 12 ++++++------ src/pocketmine/item/ItemBlock.php | 12 +++++++----- src/pocketmine/item/ItemFactory.php | 13 +++++++------ 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/pocketmine/block/BlockFactory.php b/src/pocketmine/block/BlockFactory.php index 074b1cc94..6223c7e3a 100644 --- a/src/pocketmine/block/BlockFactory.php +++ b/src/pocketmine/block/BlockFactory.php @@ -133,7 +133,7 @@ class BlockFactory{ self::registerBlock(new Furnace()); self::registerBlock(new BurningFurnace()); self::registerBlock(new SignPost()); - self::registerBlock(new WoodenDoor(Block::OAK_DOOR_BLOCK, 0, "Oak Door Block", Item::OAK_DOOR)); + self::registerBlock(new WoodenDoor(Block::OAK_DOOR_BLOCK, 0, "Oak Door", Item::OAK_DOOR)); self::registerBlock(new Ladder()); self::registerBlock(new Rail()); self::registerBlock(new CobblestoneStairs()); @@ -260,11 +260,11 @@ class BlockFactory{ //TODO: REPEATING_COMMAND_BLOCK //TODO: CHAIN_COMMAND_BLOCK - self::registerBlock(new WoodenDoor(Block::SPRUCE_DOOR_BLOCK, 0, "Spruce Door Block", Item::SPRUCE_DOOR)); - self::registerBlock(new WoodenDoor(Block::BIRCH_DOOR_BLOCK, 0, "Birch Door Block", Item::BIRCH_DOOR)); - self::registerBlock(new WoodenDoor(Block::JUNGLE_DOOR_BLOCK, 0, "Jungle Door Block", Item::JUNGLE_DOOR)); - self::registerBlock(new WoodenDoor(Block::ACACIA_DOOR_BLOCK, 0, "Acacia Door Block", Item::ACACIA_DOOR)); - self::registerBlock(new WoodenDoor(Block::DARK_OAK_DOOR_BLOCK, 0, "Dark Oak Door Block", Item::DARK_OAK_DOOR)); + self::registerBlock(new WoodenDoor(Block::SPRUCE_DOOR_BLOCK, 0, "Spruce Door", Item::SPRUCE_DOOR)); + self::registerBlock(new WoodenDoor(Block::BIRCH_DOOR_BLOCK, 0, "Birch Door", Item::BIRCH_DOOR)); + self::registerBlock(new WoodenDoor(Block::JUNGLE_DOOR_BLOCK, 0, "Jungle Door", Item::JUNGLE_DOOR)); + self::registerBlock(new WoodenDoor(Block::ACACIA_DOOR_BLOCK, 0, "Acacia Door", Item::ACACIA_DOOR)); + self::registerBlock(new WoodenDoor(Block::DARK_OAK_DOOR_BLOCK, 0, "Dark Oak Door", Item::DARK_OAK_DOOR)); self::registerBlock(new GrassPath()); self::registerBlock(new ItemFrame()); //TODO: CHORUS_FLOWER diff --git a/src/pocketmine/item/ItemBlock.php b/src/pocketmine/item/ItemBlock.php index cbf08f76a..435dbbf44 100644 --- a/src/pocketmine/item/ItemBlock.php +++ b/src/pocketmine/item/ItemBlock.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\item; use pocketmine\block\Block; +use pocketmine\block\BlockFactory; /** * Class used for Items that can be Blocks @@ -31,12 +32,13 @@ use pocketmine\block\Block; class ItemBlock extends Item{ /** - * @param Block $block - * @param int $meta Used in crafting recipes for any-damage ingredients (blocks must have meta values 0-15) + * @param int $blockId + * @param int $meta usually 0-15 (placed blocks may only have meta values 0-15) + * @param int|null $itemId */ - public function __construct(Block $block, int $meta = 0){ - $this->block = $block; - parent::__construct($block->getId(), $meta, $block->getName()); + public function __construct(int $blockId, int $meta = 0, int $itemId = null){ + $this->block = BlockFactory::get($blockId, $meta & 0xf); + parent::__construct($itemId ?? $this->block->getId(), $meta, $this->block->getName()); } public function setDamage(int $meta){ diff --git a/src/pocketmine/item/ItemFactory.php b/src/pocketmine/item/ItemFactory.php index c53e6210c..fc67cf2b2 100644 --- a/src/pocketmine/item/ItemFactory.php +++ b/src/pocketmine/item/ItemFactory.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace pocketmine\item; +use pocketmine\block\Block; use pocketmine\block\BlockFactory; use pocketmine\nbt\tag\CompoundTag; @@ -208,11 +209,11 @@ class ItemFactory{ //TODO: COOKED_MUTTON //TODO: ARMOR_STAND //TODO: END_CRYSTAL - //TODO: SPRUCE_DOOR - //TODO: BIRCH_DOOR - //TODO: JUNGLE_DOOR - //TODO: ACACIA_DOOR - //TODO: DARK_OAK_DOOR + self::registerItem(new ItemBlock(Block::SPRUCE_DOOR_BLOCK, 0, Item::SPRUCE_DOOR)); + self::registerItem(new ItemBlock(Block::BIRCH_DOOR_BLOCK, 0, Item::BIRCH_DOOR)); + self::registerItem(new ItemBlock(Block::JUNGLE_DOOR_BLOCK, 0, Item::JUNGLE_DOOR)); + self::registerItem(new ItemBlock(Block::ACACIA_DOOR_BLOCK, 0, Item::ACACIA_DOOR)); + self::registerItem(new ItemBlock(Block::DARK_OAK_DOOR_BLOCK, 0, Item::DARK_OAK_DOOR)); //TODO: CHORUS_FRUIT self::registerItem(new Item(Item::CHORUS_FRUIT_POPPED, 0, "Popped Chorus Fruit")); @@ -300,7 +301,7 @@ class ItemFactory{ if($id < 256){ /* Blocks must have a damage value 0-15, but items can have damage value -1 to indicate that they are * crafting ingredients with any-damage. */ - $item = new ItemBlock(BlockFactory::get($id, $meta !== -1 ? $meta & 0xf : 0), $meta); + $item = new ItemBlock($id, $meta); }else{ /** @var Item|null $listed */ $listed = self::$list[$id];