I don't know why this happens, but my InvMenu sometimes opens twice
It might even be an injection error
This can be annoying for users as it distracts them
m14.mp4
<?php
declare (strict_types=1 );
namespace core \job ;
use muqsit \invmenu \InvMenu ;
use muqsit \invmenu \transaction \InvMenuTransaction ;
use muqsit \invmenu \transaction \InvMenuTransactionResult ;
use pocketmine \block \VanillaBlocks ;
use pocketmine \player \Player ;
class JobSelectorWizard{
/**
* @param \Closure(Job): void $onComplete
*/
public static function mainWizard (Player $ player , \Closure $ onComplete ) : void {
$ jobs = JobRegistry::getAll ();
$ menu = InvMenu::create (InvMenu::TYPE_DOUBLE_CHEST );
$ inventory = $ menu ->getInventory ();
for ($ i = 0 ; $ i < $ inventory ->getSize (); $ i ++){
$ inventory ->setItem ($ i , VanillaBlocks::IRON_BARS ()->asItem ()->setCount (1 ));
}
foreach ($ jobs as $ key => $ job ){
$ inventory ->setItem ($ key , $ job ->getDisplayItem ($ player ));
}
//EnchantmentIdMap::
$ menu ->setListener (function (InvMenuTransaction $ transaction ) use ($ onComplete ) : InvMenuTransactionResult {
$ player = $ transaction ->getPlayer ();
$ itemClicked = $ transaction ->getItemClicked ();
$ itemClickedWith = $ transaction ->getItemClickedWith ();
$ action = $ transaction ->getAction ();
$ invTransaction = $ transaction ->getTransaction ();
$ source = $ transaction ->getAction ()->getSourceItem (); //hopper
$ target = $ transaction ->getAction ()->getTargetItem (); //player inventory
$ slot = $ action ->getSlot ();
$ jobs = JobRegistry::getAll ();
$ job = $ jobs [$ slot ] ?? null ;
if ($ job !== null ){
$ player ->removeCurrentWindow ();
($ onComplete )($ job );
unset($ onComplete );
}
return $ transaction ->discard ();
});
$ menu ->send ($ player );
}
}
Thank you for reading
I don't know why this happens, but my InvMenu sometimes opens twice
It might even be an injection error
This can be annoying for users as it distracts them
m14.mp4
Thank you for reading