diff --git a/src/block/DaylightSensor.php b/src/block/DaylightSensor.php index 4c7a404837..594060bbb1 100644 --- a/src/block/DaylightSensor.php +++ b/src/block/DaylightSensor.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace pocketmine\block; +use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait; use pocketmine\block\utils\BlockDataSerializer; use pocketmine\item\Item; use pocketmine\math\AxisAlignedBB; @@ -35,12 +36,11 @@ use function round; use const M_PI; class DaylightSensor extends Transparent{ + use AnalogRedstoneSignalEmitterTrait; + /** @var BlockIdentifierFlattened */ protected $idInfo; - /** @var int */ - protected $signalStrength = 0; - /** @var bool */ protected $inverted = false; diff --git a/src/block/RedstoneComparator.php b/src/block/RedstoneComparator.php index f640a7c585..083046dc31 100644 --- a/src/block/RedstoneComparator.php +++ b/src/block/RedstoneComparator.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\block\tile\Comparator; +use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait; use pocketmine\block\utils\BlockDataSerializer; use pocketmine\block\utils\HorizontalFacingTrait; use pocketmine\item\Item; @@ -36,6 +37,7 @@ use function assert; class RedstoneComparator extends Flowable{ use HorizontalFacingTrait; + use AnalogRedstoneSignalEmitterTrait; /** @var BlockIdentifierFlattened */ protected $idInfo; @@ -44,8 +46,6 @@ class RedstoneComparator extends Flowable{ protected $isSubtractMode = false; /** @var bool */ protected $powered = false; - /** @var int */ - protected $signalStrength = 0; public function __construct(BlockIdentifierFlattened $idInfo, string $name, ?BlockBreakInfo $breakInfo = null){ parent::__construct($idInfo, $name, $breakInfo ?? BlockBreakInfo::instant()); @@ -106,16 +106,6 @@ class RedstoneComparator extends Flowable{ return $this; } - public function getSignalStrength() : int{ - return $this->signalStrength; - } - - /** @return $this */ - public function setSignalStrength(int $signalStrength) : self{ - $this->signalStrength = $signalStrength; - return $this; - } - /** * @return AxisAlignedBB[] */ diff --git a/src/block/RedstoneWire.php b/src/block/RedstoneWire.php index a59fe563b1..ebc0c221e3 100644 --- a/src/block/RedstoneWire.php +++ b/src/block/RedstoneWire.php @@ -23,23 +23,22 @@ declare(strict_types=1); namespace pocketmine\block; +use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait; use pocketmine\block\utils\BlockDataSerializer; class RedstoneWire extends Flowable{ - - /** @var int */ - protected $power = 0; + use AnalogRedstoneSignalEmitterTrait; public function __construct(BlockIdentifier $idInfo, string $name, ?BlockBreakInfo $breakInfo = null){ parent::__construct($idInfo, $name, $breakInfo ?? BlockBreakInfo::instant()); } public function readStateFromData(int $id, int $stateMeta) : void{ - $this->power = BlockDataSerializer::readBoundedInt("power", $stateMeta, 0, 15); + $this->signalStrength = BlockDataSerializer::readBoundedInt("signalStrength", $stateMeta, 0, 15); } protected function writeStateToMeta() : int{ - return $this->power; + return $this->signalStrength; } public function getStateBitmask() : int{ diff --git a/src/block/WeightedPressurePlate.php b/src/block/WeightedPressurePlate.php index a959bf9adc..fa613dac7f 100644 --- a/src/block/WeightedPressurePlate.php +++ b/src/block/WeightedPressurePlate.php @@ -23,19 +23,18 @@ declare(strict_types=1); namespace pocketmine\block; +use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait; use pocketmine\block\utils\BlockDataSerializer; abstract class WeightedPressurePlate extends PressurePlate{ - - /** @var int */ - protected $power = 0; + use AnalogRedstoneSignalEmitterTrait; protected function writeStateToMeta() : int{ - return $this->power; + return $this->signalStrength; } public function readStateFromData(int $id, int $stateMeta) : void{ - $this->power = BlockDataSerializer::readBoundedInt("power", $stateMeta, 0, 15); + $this->signalStrength = BlockDataSerializer::readBoundedInt("signalStrength", $stateMeta, 0, 15); } public function getStateBitmask() : int{ diff --git a/src/block/utils/AnalogRedstoneSignalEmitterTrait.php b/src/block/utils/AnalogRedstoneSignalEmitterTrait.php new file mode 100644 index 0000000000..2d5609a989 --- /dev/null +++ b/src/block/utils/AnalogRedstoneSignalEmitterTrait.php @@ -0,0 +1,39 @@ +signalStrength; } + + /** @return $this */ + public function setOutputSignalStrength(int $signalStrength) : self{ + if($signalStrength < 0 || $signalStrength > 15){ + throw new \InvalidArgumentException("Signal strength must be in range 0-15"); + } + $this->signalStrength = $signalStrength; + return $this; + } +}