Download the PHP package muqsit/invmenu without Composer
On this page you can find all versions of the php package muqsit/invmenu. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download muqsit/invmenu
More information about muqsit/invmenu
Files in muqsit/invmenu
Package invmenu
Short Description A PocketMine-MP virion to create and manage virtual inventories!
License GPL-3.0
Informations about the package invmenu
InvMenu
Create and manage virtual inventories in PocketMine-MP.
Installation and setup
Download the compiled .phar file from Poggit CI and place it in your virions/
folder.
Read installation and using in a plugin
for a more elaborate guide on how to setup InvMenu library.
[!NOTE] You must register
InvMenuHandler
before you can use InvMenu. php $menu = InvMenu::create(InvMenu::TYPE_CHEST); $inventory = $menu->getInventory();
As $inventory
implements PocketMine's Inventory interface, you get to access all the fancy PocketMine inventory methods.
To send a menu to a player, use:
[!TIP] One
InvMenu
can be sent to multiple players—even 2 players in different worlds, so everyone views and edits the same inventory as if it were one chest.
Set a custom name
There are two ways to name an InvMenu. You can either specify a global name (see method A), or you can set a name at the time you send the menu (see method B).
Verify whether a menu is sent successfully
InvMenu::send()
is not guaranteed to succeed. A failure may arise from plugins cancelling InventoryOpenEvent, a disconnected player, or the player refusing the request (e.g., because they are in pause menu).
Use the $callback
parameter to verify whether a menu has been opened.
Monitor movement of items
InvMenu comes with a listener whereby developers can write logic to monitor movement of items in and out of inventory, and thereby take action. A listener is a callback with the following signature:
InvMenuTransaction::getPlayer()
returns thePlayer
that triggered the transaction.InvMenuTransaction::getItemClicked()
returns theItem
the player clicked in the menu. You may also useInvMenuTransaction::getOut()
.InvMenuTransaction::getItemClickedWith()
returns theItem
the player had in their hand when clicking an item. You may also useInvMenuTransaction::getIn()
.InvMenuTransaction::getAction()
returnsSlotChangeAction
- you can get the slot that the player clicked in the menu.InvMenuTransaction::getTransaction()
returns the completeInventoryTransaction
holding all the above information.
The listener below does not allow players to take out apples from the menu:
There are two methods you can use to prevent players from editing the menu. Either create a listener that discard()
s
the transaction, or use InvMenu::readonly()
.
Alternatively, you may choose to write your own InventoryTransactionEvent
listener that works on transactions on
$menu->getInventory()
. However, an InvMenu listener is enough to fulfil most tasks.
Execute a task post-transaction
Few actions are not possible to invoke at the time a player is viewing an inventory, such as sending a form—a player
cannot view a form while viewing an inventory. Close the menu and utilize InvMenuTransactionResult::then()
callback to
achieve this.
Monitor menu close events
Register an inventory close callback to run whenever a player closes the menu. An inventory close callback takes the following signature:
Inventory close listener is fired during both—server-initiated requests (i.e., $player->removeCurrentWindow()
) and
when the player closes the inventory on their end.
Advanced usage: Register a custom InvMenuType
[!IMPORTANT] PocketMine does not register a dispenser block. As of PocketMine v5, the task of registering missing vanilla blocks is excessively laborious and hence beyond the scope of this guide. pmmp/RegisterBlocksDemoPM5 has a nice guide on how to achieve this. Still overwhelmed? I wrote a drag-n-drop example plugin that does all of it and registers a
/dispenser
command. With DevTools plugin installed, simply copy the code and paste it in a new "DispenserInvMenuPlugin.php" file in your server's plugin folder.
InvMenu does not provide a 9-slot dispenser inventory. But you can still achieve this by registering a dispenser InvMenuType. You'll need to specify inventory size, block actor identifier (tile identifier), and the window type (network property) for the creation of the graphic (block) and inventory parts.
Sweet! Now you can create a dispenser menu using:
InvMenu Wiki
Applications, examples, tutorials and featured projects using InvMenu can be found on the InvMenu Wiki.