Implement emote support (#4523)

This commit is contained in:
Hashim
2021-11-02 19:04:55 -04:00
committed by GitHub
parent a0e9eec652
commit f066199971
4 changed files with 76 additions and 0 deletions

View File

@ -53,6 +53,7 @@ use pocketmine\event\player\PlayerChatEvent;
use pocketmine\event\player\PlayerCommandPreprocessEvent;
use pocketmine\event\player\PlayerDeathEvent;
use pocketmine\event\player\PlayerDisplayNameChangeEvent;
use pocketmine\event\player\PlayerEmoteEvent;
use pocketmine\event\player\PlayerEntityInteractEvent;
use pocketmine\event\player\PlayerExhaustEvent;
use pocketmine\event\player\PlayerGameModeChangeEvent;
@ -234,6 +235,8 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
/** @var int[] ID => ticks map */
protected array $usedItemsCooldown = [];
private int $lastEmoteTick = 0;
protected int $formIdCounter = 0;
/** @var Form[] */
protected array $forms = [];
@ -1727,6 +1730,17 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
return true;
}
public function emote(string $emoteId) : void{
$event = new PlayerEmoteEvent($this, $emoteId);
$event->call();
if(!$event->isCancelled() && $this->getServer()->getTick() - $this->lastEmoteTick > 5){
$this->lastEmoteTick = $this->getServer()->getTick();
foreach($this->getViewers() as $player){
$player->getNetworkSession()->onEmote($this, $emoteId);
}
}
}
/**
* Drops an item on the ground in front of the player.
*/