diff --git a/src/block/Anvil.php b/src/block/Anvil.php index 050ecc057..946c78c27 100644 --- a/src/block/Anvil.php +++ b/src/block/Anvil.php @@ -54,8 +54,8 @@ class Anvil extends Transparent implements Fallable{ return 0b1111; } - public function getNonPersistentStateBitmask() : int{ - return 0b11; + protected function writeStateToItemMeta() : int{ + return $this->damage << 2; } public function getDamage() : int{ return $this->damage; } diff --git a/src/block/BaseBanner.php b/src/block/BaseBanner.php index 9fa9a7550..36a637864 100644 --- a/src/block/BaseBanner.php +++ b/src/block/BaseBanner.php @@ -30,8 +30,6 @@ use pocketmine\block\utils\DyeColor; use pocketmine\data\bedrock\DyeColorIdMap; use pocketmine\item\Banner as ItemBanner; use pocketmine\item\Item; -use pocketmine\item\ItemFactory; -use pocketmine\item\ItemIds; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; use pocketmine\player\Player; @@ -126,8 +124,8 @@ abstract class BaseBanner extends Transparent{ } } - public function asItem() : Item{ - return ItemFactory::getInstance()->get(ItemIds::BANNER, DyeColorIdMap::getInstance()->toInvertedId($this->color)); + protected function writeStateToItemMeta() : int{ + return DyeColorIdMap::getInstance()->toInvertedId($this->color); } public function getDropsForCompatibleTool(Item $item) : array{ diff --git a/src/block/Bed.php b/src/block/Bed.php index 3979b8a09..c03ae71dd 100644 --- a/src/block/Bed.php +++ b/src/block/Bed.php @@ -30,7 +30,6 @@ use pocketmine\block\utils\DyeColor; use pocketmine\block\utils\HorizontalFacingTrait; use pocketmine\data\bedrock\DyeColorIdMap; use pocketmine\item\Item; -use pocketmine\item\ItemFactory; use pocketmine\lang\KnownTranslationKeys; use pocketmine\lang\TranslationContainer; use pocketmine\math\AxisAlignedBB; @@ -197,8 +196,8 @@ class Bed extends Transparent{ return []; } - public function asItem() : Item{ - return ItemFactory::getInstance()->get($this->idInfo->getItemId(), DyeColorIdMap::getInstance()->toId($this->color)); + protected function writeStateToItemMeta() : int{ + return DyeColorIdMap::getInstance()->toId($this->color); } public function getAffectedBlocks() : array{ diff --git a/src/block/Block.php b/src/block/Block.php index ad10e710d..762063dcc 100644 --- a/src/block/Block.php +++ b/src/block/Block.php @@ -98,7 +98,7 @@ class Block{ public function asItem() : Item{ return ItemFactory::getInstance()->get( $this->idInfo->getItemId(), - $this->idInfo->getVariant() | ($this->writeStateToMeta() & ~$this->getNonPersistentStateBitmask()) + $this->idInfo->getVariant() | $this->writeStateToItemMeta() ); } @@ -108,6 +108,10 @@ class Block{ return $this->idInfo->getVariant() | $stateMeta; } + protected function writeStateToItemMeta() : int{ + return 0; + } + /** * Returns a bitmask used to extract state bits from block metadata. */ @@ -115,10 +119,6 @@ class Block{ return 0; } - public function getNonPersistentStateBitmask() : int{ - return $this->getStateBitmask(); - } - protected function writeStateToMeta() : int{ return 0; } diff --git a/src/block/Coral.php b/src/block/Coral.php index 7c9185c1d..b6ccb0cad 100644 --- a/src/block/Coral.php +++ b/src/block/Coral.php @@ -44,12 +44,12 @@ final class Coral extends BaseCoral{ return CoralTypeIdMap::getInstance()->toId($this->coralType); } - public function getStateBitmask() : int{ - return 0b0111; + protected function writeStateToItemMeta() : int{ + return $this->writeStateToMeta(); } - public function getNonPersistentStateBitmask() : int{ - return 0b0000; + public function getStateBitmask() : int{ + return 0b0111; } public function readStateFromWorld() : void{ diff --git a/src/block/CoralBlock.php b/src/block/CoralBlock.php index 130b1ffd8..c0bcad32f 100644 --- a/src/block/CoralBlock.php +++ b/src/block/CoralBlock.php @@ -52,12 +52,12 @@ final class CoralBlock extends Opaque{ return ($this->dead ? BlockLegacyMetadata::CORAL_BLOCK_FLAG_DEAD : 0) | CoralTypeIdMap::getInstance()->toId($this->coralType); } - public function getStateBitmask() : int{ - return 0b1111; + protected function writeStateToItemMeta() : int{ + return $this->writeStateToMeta(); } - public function getNonPersistentStateBitmask() : int{ - return 0; + public function getStateBitmask() : int{ + return 0b1111; } public function getCoralType() : CoralType{ return $this->coralType; } diff --git a/src/block/Dirt.php b/src/block/Dirt.php index b357c95bf..6c624d886 100644 --- a/src/block/Dirt.php +++ b/src/block/Dirt.php @@ -41,12 +41,12 @@ class Dirt extends Opaque{ return $this->coarse ? BlockLegacyMetadata::DIRT_FLAG_COARSE : 0; } - public function getStateBitmask() : int{ - return 0b1; + protected function writeStateToItemMeta() : int{ + return $this->writeStateToMeta(); } - public function getNonPersistentStateBitmask() : int{ - return 0; + public function getStateBitmask() : int{ + return 0b1; } public function isCoarse() : bool{ return $this->coarse; } diff --git a/src/block/FloorCoralFan.php b/src/block/FloorCoralFan.php index 728b92aed..c4a5cc0a0 100644 --- a/src/block/FloorCoralFan.php +++ b/src/block/FloorCoralFan.php @@ -64,7 +64,7 @@ final class FloorCoralFan extends BaseCoral{ //TODO: HACK! workaround dead flag being lost when broken / blockpicked (original impl only uses first ID) return ItemFactory::getInstance()->get( $this->dead ? ItemIds::CORAL_FAN_DEAD : ItemIds::CORAL_FAN, - CoralTypeIdMap::getInstance()->toId($this->coralType) + $this->writeStateToItemMeta() ); } @@ -73,12 +73,12 @@ final class FloorCoralFan extends BaseCoral{ CoralTypeIdMap::getInstance()->toId($this->coralType); } - public function getStateBitmask() : int{ - return 0b1111; + protected function writeStateToItemMeta() : int{ + return CoralTypeIdMap::getInstance()->toId($this->coralType); } - public function getNonPersistentStateBitmask() : int{ - return 0b1000; + public function getStateBitmask() : int{ + return 0b1111; } public function getAxis() : int{ return $this->axis; } diff --git a/src/block/Skull.php b/src/block/Skull.php index ae6abe8d5..20fcd760b 100644 --- a/src/block/Skull.php +++ b/src/block/Skull.php @@ -27,8 +27,6 @@ use pocketmine\block\tile\Skull as TileSkull; use pocketmine\block\utils\BlockDataSerializer; use pocketmine\block\utils\SkullType; use pocketmine\item\Item; -use pocketmine\item\ItemFactory; -use pocketmine\item\ItemIds; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Facing; use pocketmine\math\Vector3; @@ -142,7 +140,7 @@ class Skull extends Flowable{ return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player); } - public function asItem() : Item{ - return ItemFactory::getInstance()->get(ItemIds::SKULL, $this->skullType->getMagicNumber()); + protected function writeStateToItemMeta() : int{ + return $this->skullType->getMagicNumber(); } } diff --git a/src/block/Sponge.php b/src/block/Sponge.php index 63ca4a133..5ccf766ab 100644 --- a/src/block/Sponge.php +++ b/src/block/Sponge.php @@ -35,12 +35,12 @@ class Sponge extends Opaque{ $this->wet = ($stateMeta & BlockLegacyMetadata::SPONGE_FLAG_WET) !== 0; } - public function getStateBitmask() : int{ - return 0b1; + protected function writeStateToItemMeta() : int{ + return $this->writeStateToMeta(); } - public function getNonPersistentStateBitmask() : int{ - return 0; + public function getStateBitmask() : int{ + return 0b1; } public function isWet() : bool{ return $this->wet; } diff --git a/src/block/TNT.php b/src/block/TNT.php index 6180ec6ea..6cae9ca55 100644 --- a/src/block/TNT.php +++ b/src/block/TNT.php @@ -53,12 +53,14 @@ class TNT extends Opaque{ return ($this->unstable ? BlockLegacyMetadata::TNT_FLAG_UNSTABLE : 0) | ($this->worksUnderwater ? BlockLegacyMetadata::TNT_FLAG_UNDERWATER : 0); } + protected function writeStateToItemMeta() : int{ + return $this->worksUnderwater ? BlockLegacyMetadata::TNT_FLAG_UNDERWATER : 0; + } + public function getStateBitmask() : int{ return 0b11; } - public function getNonPersistentStateBitmask() : int{ return 0b1; } - public function isUnstable() : bool{ return $this->unstable; } /** @return $this */ diff --git a/src/block/WallCoralFan.php b/src/block/WallCoralFan.php index a97993113..fb93f3eef 100644 --- a/src/block/WallCoralFan.php +++ b/src/block/WallCoralFan.php @@ -96,18 +96,18 @@ final class WallCoralFan extends BaseCoral{ return (BlockDataSerializer::writeCoralFacing($this->facing) << 2) | ($this->dead ? BlockLegacyMetadata::CORAL_FAN_HANG_FLAG_DEAD : 0) | $coralTypeFlag; } - public function getStateBitmask() : int{ - return 0b1111; + protected function writeStateToItemMeta() : int{ + return CoralTypeIdMap::getInstance()->toId($this->coralType); } - public function getNonPersistentStateBitmask() : int{ - return 0b1110; + public function getStateBitmask() : int{ + return 0b1111; } public function asItem() : Item{ return ItemFactory::getInstance()->get( $this->dead ? ItemIds::CORAL_FAN_DEAD : ItemIds::CORAL_FAN, - CoralTypeIdMap::getInstance()->toId($this->coralType) + $this->writeStateToItemMeta() ); } diff --git a/src/block/utils/ColorInMetadataTrait.php b/src/block/utils/ColorInMetadataTrait.php index 95b729286..1130ae27c 100644 --- a/src/block/utils/ColorInMetadataTrait.php +++ b/src/block/utils/ColorInMetadataTrait.php @@ -47,17 +47,17 @@ trait ColorInMetadataTrait{ return DyeColorIdMap::getInstance()->toId($this->color); } + /** + * @see Block::writeStateToItemMeta() + */ + protected function writeStateToItemMeta() : int{ + return DyeColorIdMap::getInstance()->toId($this->color); + } + /** * @see Block::getStateBitmask() */ public function getStateBitmask() : int{ return 0b1111; } - - /** - * @see Block::getNonPersistentStateBitmask() - */ - public function getNonPersistentStateBitmask() : int{ - return 0; - } }