diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 356aecd88..535025464 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -59,6 +59,8 @@ use pocketmine\event\player\PlayerMoveEvent; use pocketmine\event\player\PlayerPreLoginEvent; use pocketmine\event\player\PlayerQuitEvent; use pocketmine\event\player\PlayerRespawnEvent; +use pocketmine\event\player\PlayerToggleSneakEvent; +use pocketmine\event\player\PlayerToggleSprintEvent; use pocketmine\event\server\DataPacketReceiveEvent; use pocketmine\event\server\DataPacketSendEvent; use pocketmine\event\TextContainer; @@ -2214,6 +2216,9 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $this->teleport($ev->getRespawnPosition()); + $this->setSprinting(false); + $this->setSneaking(false); + $this->extinguish(); $this->setDataProperty(self::DATA_AIR, self::DATA_TYPE_SHORT, 300); $this->deadTicks = 0; @@ -2234,16 +2239,40 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $this->scheduleUpdate(); break; case PlayerActionPacket::ACTION_START_SPRINT: - $this->setSprinting(true); + $ev = new PlayerToggleSprintEvent($this, true); + $this->server->getPluginManager()->callEvent($ev); + if($ev->isCancelled()){ + $this->sendData($this); + }else{ + $this->setSprinting(true); + } break; case PlayerActionPacket::ACTION_STOP_SPRINT: - $this->setSprinting(false); + $ev = new PlayerToggleSprintEvent($this, false); + $this->server->getPluginManager()->callEvent($ev); + if($ev->isCancelled()){ + $this->sendData($this); + }else{ + $this->setSprinting(false); + } break; case PlayerActionPacket::ACTION_START_SNEAK: - $this->setSneaking(true); + $ev = new PlayerToggleSneakEvent($this, true); + $this->server->getPluginManager()->callEvent($ev); + if($ev->isCancelled()){ + $this->sendData($this); + }else{ + $this->setSneaking(true); + } break; case PlayerActionPacket::ACTION_STOP_SNEAK: - $this->setSneaking(false); + $ev = new PlayerToggleSneakEvent($this, false); + $this->server->getPluginManager()->callEvent($ev); + if($ev->isCancelled()){ + $this->sendData($this); + }else{ + $this->setSneaking(false); + } break; } diff --git a/src/pocketmine/event/player/PlayerToggleSneakEvent.php b/src/pocketmine/event/player/PlayerToggleSneakEvent.php new file mode 100644 index 000000000..d75decc2a --- /dev/null +++ b/src/pocketmine/event/player/PlayerToggleSneakEvent.php @@ -0,0 +1,42 @@ +player = $player; + $this->isSneaking = (bool) $isSneaking; + } + + public function isSneaking(){ + return $this->isSneaking; + } + +} \ No newline at end of file diff --git a/src/pocketmine/event/player/PlayerToggleSprintEvent.php b/src/pocketmine/event/player/PlayerToggleSprintEvent.php new file mode 100644 index 000000000..a7f17a8ad --- /dev/null +++ b/src/pocketmine/event/player/PlayerToggleSprintEvent.php @@ -0,0 +1,42 @@ +player = $player; + $this->isSprinting = (bool) $isSprinting; + } + + public function isSprinting(){ + return $this->isSprinting; + } + +} \ No newline at end of file