diff --git a/src/API/BlockAPI.php b/src/API/BlockAPI.php index fcba00d19..cadeff35a 100644 --- a/src/API/BlockAPI.php +++ b/src/API/BlockAPI.php @@ -260,10 +260,10 @@ class BlockAPI{ return $this->cancelAction($target, $player, false); } - if((!$target->isBreakable($item, $player) and $this->server->api->dhandle("player.block.break.invalid", array("player" => $player, "target" => $target, "item" => $item)) !== true) or ($player->gamemode & 0x02) === 0x02 or (($player->lastBreak - 0.02) + $target->getBreakTime($item, $player)) >= microtime(true)){ + if((!$target->isBreakable($item, $player) and $this->server->api->dhandle("player.block.break.invalid", array("player" => $player, "target" => $target, "item" => $item)) !== true) or ($player->gamemode & 0x02) === 0x02 or (($player->lastBreak - 0.05) + $target->getBreakTime($item, $player)) >= microtime(true)){ return $this->cancelAction($target, $player, false); } - $player->lastBreak = microtime(true); + $player->lastBreak = microtime(true); if($this->server->api->dhandle("player.block.break", array("player" => $player, "target" => $target, "item" => $item)) !== false){ $drops = $target->getDrops($item, $player); @@ -350,7 +350,7 @@ class BlockAPI{ if(($player->gamemode & 0x01) === 0x00){ --$item->count; if($item->count <= 0){ - $player->setSlot($player->slot, BlockAPI::getItem(AIR, 0, 0)); + $player->setSlot($player->slot, BlockAPI::getItem(AIR, 0, 0), false); } } diff --git a/src/Player.php b/src/Player.php index 3afafda7b..56bbde737 100644 --- a/src/Player.php +++ b/src/Player.php @@ -340,9 +340,11 @@ class Player{ return true; } - public function setSlot($slot, Item $item){ + public function setSlot($slot, Item $item, $send = true){ $this->inventory[(int) $slot] = $item; - $this->sendInventorySlot((int) $slot); + if($send === true){ + $this->sendInventorySlot((int) $slot); + } return true; } @@ -1387,7 +1389,7 @@ class Player{ RAW_FISH => 2, ); - if(isset($items[$this->getSlot($this->slot)->getID()])){ + if($this->entity->getHealth() < 20 and isset($items[$this->getSlot($this->slot)->getID()])){ if($this->removeItem($this->getSlot($this->slot)->getID(), $this->getSlot($this->slot)->getMetadata(), 1, false) === true){ $this->dataPacket(MC_ENTITY_EVENT, array( "eid" => 0, diff --git a/src/material/block/solid/Cake.php b/src/material/block/solid/Cake.php index 7309b31bd..628187f7f 100644 --- a/src/material/block/solid/Cake.php +++ b/src/material/block/solid/Cake.php @@ -26,9 +26,25 @@ the Free Software Foundation, either version 3 of the License, or */ class CakeBlock extends TransparentBlock{ - public function __construct(){ + public function __construct($meta = 0){ parent::__construct(CAKE_BLOCK, 0, "Cake Block"); $this->isFullBlock = false; + $this->isActivable = true; + $this->meta = $meta & 0x07; + } + + public function onActivate(Item $item, Player $player){ + if($player->entity->getHealth() < 20){ + ++$this->meta; + $player->entity->heal(3, "cake"); + if($this->meta >= 0x06){ + $this->level->setBlock($this, new AirBlock()); + }else{ + $this->level->setBlock($this, $this); + } + return true; + } + return false; } } \ No newline at end of file