diff --git a/src/pocketmine/block/Button.php b/src/pocketmine/block/Button.php index 9dc329159..8baa3af12 100644 --- a/src/pocketmine/block/Button.php +++ b/src/pocketmine/block/Button.php @@ -26,6 +26,7 @@ namespace pocketmine\block; use pocketmine\item\Item; use pocketmine\math\Facing; use pocketmine\math\Vector3; +use pocketmine\network\mcpe\protocol\LevelSoundEventPacket; use pocketmine\Player; abstract class Button extends Flowable{ @@ -59,8 +60,24 @@ abstract class Button extends Flowable{ return parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player); } + abstract protected function getActivationTime() : int; + public function onActivate(Item $item, Player $player = null) : bool{ - //TODO + if(!$this->powered){ + $this->powered = true; + $this->level->setBlock($this, $this); + $this->level->scheduleDelayedBlockUpdate($this, $this->getActivationTime()); + $this->level->broadcastLevelSoundEvent($this->add(0.5, 0.5, 0.5), LevelSoundEventPacket::SOUND_POWER_ON); + } + return true; } + + public function onScheduledUpdate() : void{ + if($this->powered){ + $this->powered = false; + $this->level->setBlock($this, $this); + $this->level->broadcastLevelSoundEvent($this->add(0.5, 0.5, 0.5), LevelSoundEventPacket::SOUND_POWER_OFF); + } + } } diff --git a/src/pocketmine/block/Lever.php b/src/pocketmine/block/Lever.php index a44ef16f2..410ef6ff9 100644 --- a/src/pocketmine/block/Lever.php +++ b/src/pocketmine/block/Lever.php @@ -27,6 +27,7 @@ use pocketmine\item\Item; use pocketmine\math\Bearing; use pocketmine\math\Facing; use pocketmine\math\Vector3; +use pocketmine\network\mcpe\protocol\LevelSoundEventPacket; use pocketmine\Player; class Lever extends Flowable{ @@ -118,5 +119,15 @@ class Lever extends Flowable{ } } + public function onActivate(Item $item, Player $player = null) : bool{ + $this->powered = !$this->powered; + $this->level->setBlock($this, $this); + $this->level->broadcastLevelSoundEvent( + $this->add(0.5, 0.5, 0.5), + $this->powered ? LevelSoundEventPacket::SOUND_POWER_ON : LevelSoundEventPacket::SOUND_POWER_OFF + ); + return true; + } + //TODO } diff --git a/src/pocketmine/block/StoneButton.php b/src/pocketmine/block/StoneButton.php index a677e0f30..9471b1b78 100644 --- a/src/pocketmine/block/StoneButton.php +++ b/src/pocketmine/block/StoneButton.php @@ -38,4 +38,8 @@ class StoneButton extends Button{ public function getToolType() : int{ return BlockToolType::TYPE_PICKAXE; } + + protected function getActivationTime() : int{ + return 20; + } } diff --git a/src/pocketmine/block/WoodenButton.php b/src/pocketmine/block/WoodenButton.php index a62225cc2..85f7b978c 100644 --- a/src/pocketmine/block/WoodenButton.php +++ b/src/pocketmine/block/WoodenButton.php @@ -38,4 +38,12 @@ class WoodenButton extends Button{ public function getToolType() : int{ return BlockToolType::TYPE_AXE; } + + protected function getActivationTime() : int{ + return 30; + } + + public function hasEntityCollision() : bool{ + return false; //TODO: arrows activate wooden buttons + } }