Implement swimming/gliding including AABB recalculation (#4446)

- The following events have been added:
  - PlayerToggleGlideEvent
  - PlayerToggleSwimEvent
- The following API methods have been added:
  - Entity->getSize()
  - Living->isSwimming()
  - Living->setSwimming()
  - Living->isGliding()
  - Living->setSwimming()
  - Player->toggleSwim()
  - Player->toggleGlide()
This commit is contained in:
XenialDan
2021-12-19 18:10:41 +01:00
committed by GitHub
parent 65dabefa3b
commit d41f933e7b
6 changed files with 166 additions and 9 deletions

View File

@@ -68,8 +68,10 @@ use pocketmine\event\player\PlayerMoveEvent;
use pocketmine\event\player\PlayerQuitEvent;
use pocketmine\event\player\PlayerRespawnEvent;
use pocketmine\event\player\PlayerToggleFlightEvent;
use pocketmine\event\player\PlayerToggleGlideEvent;
use pocketmine\event\player\PlayerToggleSneakEvent;
use pocketmine\event\player\PlayerToggleSprintEvent;
use pocketmine\event\player\PlayerToggleSwimEvent;
use pocketmine\event\player\PlayerTransferEvent;
use pocketmine\form\Form;
use pocketmine\form\FormValidationException;
@@ -1768,6 +1770,26 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
return true;
}
public function toggleGlide(bool $glide) : bool{
$ev = new PlayerToggleGlideEvent($this, $glide);
$ev->call();
if($ev->isCancelled()){
return false;
}
$this->setGliding($glide);
return true;
}
public function toggleSwim(bool $swimming) : bool{
$ev = new PlayerToggleSwimEvent($this, $swimming);
$ev->call();
if($ev->isCancelled()){
return false;
}
$this->setSwimming($swimming);
return true;
}
public function emote(string $emoteId) : void{
$currentTick = $this->server->getTick();
if($currentTick - $this->lastEmoteTick > 5){