Virtual inventory plugin for Endstone
Enum for menu container types:
MenuType.CHEST— single chest (27 slots)MenuType.DOUBLE_CHEST— double chest (54 slots)MenuType.DISPENSER— dispenser (9 slots)MenuType.HOPPER— hopper (5 slots)
Menu(type: MenuType, name: str = "")Properties:
inventory— theMenuInventoryinstance for this menu. Implements an API similar to Endstone'sInventory.name— display name shown at the top of the menutype— theMenuTypeused to create this menu
Methods:
set_name(name: str)— set the display nameset_listener(listener)— set the click callback (see MenuTransaction)set_open_listener(listener)— callback when a player opens the menu:(player: Player) -> Noneset_close_listener(listener)— callback when a player closes the menu:(player: Player) -> Nonesend_to(player: Player)— display the menu to a player. If the player already has a menu open, this menu is queued and shown after the current one closes.close(player: Player) -> bool— close this menu for a playerclose_all()— close this menu for all players currently viewing itget_viewers() -> list[Player]— list players who currently have this menu open
Properties:
player— the player who clickedslot— virtual inventory slot indexitem_clicked— item in the virtual slot before the actionitem_clicked_with— item in the other slot involved (player inventory or cursor)action_type— the underlyingItemStackRequestActionTypesource— source slot info from the requestdestination— destination slot info from the request
Methods:
proceed() -> MenuTransactionResult— allow the transaction to proceeddiscard() -> MenuTransactionResult— discard transaction
from endstone import Player
from endstone.inventory import ItemStack
from endstone_inventoryui import Menu, MenuType, MenuTransaction, MenuTransactionResult
menu = Menu(MenuType.CHEST)
menu.inventory.set_item(0, ItemStack("minecraft:diamond", 1))
menu.inventory.set_item(1, ItemStack("minecraft:emerald", 1))
def on_click(tr: MenuTransaction) -> MenuTransactionResult:
if tr.slot == 0:
tr.player.send_message("You clicked the diamond!")
return tr.discard()
elif tr.slot == 1:
tr.player.send_message("You clicked the emerald!")
return tr.discard()
return tr.proceed()
menu.set_listener(on_click)
menu.send_to(player)See the example plugin for a full project.