From e6bba476d9d2915cab5eddd6b8e95670b31586e5 Mon Sep 17 00:00:00 2001 From: fernanACM Date: Sun, 29 Sep 2024 23:19:58 -0500 Subject: [PATCH] Support for PM5 5.19.0 --- plugin.yml | 4 +- src/muqsit/formimagesfix/Main.php | 61 ++++++++++++++++--------------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/plugin.yml b/plugin.yml index 48bc669..3a71ac0 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,4 +1,4 @@ name: FormImagesFix main: muqsit\formimagesfix\Main -api: 5.0.0 -version: 0.0.3 \ No newline at end of file +api: 5.19.0 +version: 0.0.4 \ No newline at end of file diff --git a/src/muqsit/formimagesfix/Main.php b/src/muqsit/formimagesfix/Main.php index b08c592..b1d7521 100644 --- a/src/muqsit/formimagesfix/Main.php +++ b/src/muqsit/formimagesfix/Main.php @@ -8,41 +8,42 @@ use pocketmine\event\Listener; use pocketmine\event\server\DataPacketSendEvent; use pocketmine\network\mcpe\protocol\ModalFormRequestPacket; +use pocketmine\network\mcpe\protocol\types\entity\UpdateAttribute; +use pocketmine\network\mcpe\protocol\UpdateAttributesPacket; use pocketmine\plugin\PluginBase; use pocketmine\scheduler\CancelTaskException; use pocketmine\scheduler\ClosureTask; final class Main extends PluginBase implements Listener{ - protected function onEnable() : void{ - $this->getServer()->getPluginManager()->registerEvents($this, $this); - } - /** - * @param DataPacketSendEvent $event - * @priority MONITOR + * @return void */ - public function onDataPacketSend(DataPacketSendEvent $event) : void{ - foreach($event->getPackets() as $packet){ - if(!($packet instanceof ModalFormRequestPacket)){ - continue; - } - foreach($event->getTargets() as $target){ - $player = $target->getPlayer(); - if($player === null || !$player->isConnected()){ - continue; - } - $this->getScheduler()->scheduleDelayedTask(new ClosureTask(function() use($player, $target) : void{ - $times = 5; // send for up to 5 x 10 ticks (or 2500ms) - $this->getScheduler()->scheduleRepeatingTask(new ClosureTask(static function() use($player, $target, &$times) : void{ - --$times >= 0 || throw new CancelTaskException("Maximum retries exceeded"); - $target->isConnected() || throw new CancelTaskException("Maximum retries exceeded"); - $target->getEntityEventBroadcaster()->syncAttributes([$target], $player, [ - $player->getAttributeMap()->get(Attribute::EXPERIENCE_LEVEL) - ]); - }), 10); - }), 1); - } - } - } -} + protected function onEnable(): void{ + $this->getServer()->getPluginManager()->registerEvents($this, $this); + } + + /** + * @param DataPacketSendEvent $event + * @priority MONITOR + */ + public function onDataPacketSend(DataPacketSendEvent $event): void{ + foreach($event->getPackets() as $packet){ + if($packet instanceof ModalFormRequestPacket){ + foreach($event->getTargets() as $target){ + $player = $target->getPlayer(); + $times = 5; + $this->getScheduler()->scheduleRepeatingTask(new ClosureTask(static function() use($player, &$times): void{ + if($times-- === 0 || !$player->isOnline()){ + throw new CancelTaskException(); + } + $attr = $player->getAttributeMap()->get(Attribute::EXPERIENCE_LEVEL); + /** @noinspection NullPointerExceptionInspection */ + $entries = [new UpdateAttribute($attr->getId(), $attr->getMinValue(), $attr->getMaxValue(), $attr->getValue(), $attr->getMinValue(), $attr->getMaxValue(), $attr->getDefaultValue(), [])]; + $player->getNetworkSession()->sendDataPacket(UpdateAttributesPacket::create($player->getId(), $entries, 0)); + }), 10); + } + } + } + } +} \ No newline at end of file