diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 8666e0e0e..58de569b4 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2591,12 +2591,22 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $this->level->setBlock($block, new Air()); break; } + + if(!$this->isCreative()){ + //TODO: improve this to take stuff like swimming, ladders, enchanted tools into account, fix wrong tool break time calculations for bad tools (pmmp/PocketMine-MP#211) + $breakTime = ceil($target->getBreakTime($this->inventory->getItemInHand()) * 20); + if($breakTime > 0){ + $this->level->broadcastLevelEvent($pos, LevelEventPacket::EVENT_BLOCK_START_BREAK, 65535 / $breakTime); + } + } $this->lastBreak = microtime(true); break; + + /** @noinspection PhpMissingBreakStatementInspection */ case PlayerActionPacket::ACTION_ABORT_BREAK: $this->lastBreak = PHP_INT_MAX; - break; case PlayerActionPacket::ACTION_STOP_BREAK: + $this->level->broadcastLevelEvent($pos, LevelEventPacket::EVENT_BLOCK_STOP_BREAK); break; case PlayerActionPacket::ACTION_RELEASE_ITEM: if($this->startAction > -1 and $this->getDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION)){ diff --git a/src/pocketmine/network/mcpe/protocol/LevelEventPacket.php b/src/pocketmine/network/mcpe/protocol/LevelEventPacket.php index 4c91468d8..e57e42a1a 100644 --- a/src/pocketmine/network/mcpe/protocol/LevelEventPacket.php +++ b/src/pocketmine/network/mcpe/protocol/LevelEventPacket.php @@ -88,6 +88,9 @@ class LevelEventPacket extends DataPacket{ const EVENT_CAULDRON_TAKE_WATER = 3507; const EVENT_CAULDRON_ADD_DYE = 3508; + const EVENT_BLOCK_START_BREAK = 3600; + const EVENT_BLOCK_STOP_BREAK = 3601; + const EVENT_SET_DATA = 4000; const EVENT_PLAYERS_SLEEPING = 9800;