Class in @basalt/menus
Extended by ChestMenu
A container window with no block behind it. One menu can be open for many players at once, and a slot set while they have it open changes in front of each.
import { Menu } from '@basalt/menus';Example
A shop
const shop = new Menu(MenuType.Chest, "Shop");shop.setItem(13, new ItemStack("minecraft:diamond", 1));shop.onClick((event) => {event.cancel = true;if (event.slot === 13) event.player.getComponent("minecraft:inventory")?.container.addItem(new ItemStack("minecraft:diamond", 1));});await shop.show(player);Example
Section titled “Example”import { ItemStack, world, type Player } from '@minecraft/server';import { Menu, MenuType, type MenuClickEvent } from '@basalt/menus';
function openKits(player: Player): void { const menu = new Menu(MenuType.Chest, 'Kits');
// The handler runs when this slot is clicked. Cancelling keeps the item in the menu. menu.setItem(13, new ItemStack('minecraft:iron_sword'), (event: MenuClickEvent) => { event.cancel = true; event.player.sendMessage('You picked the warrior kit.'); menu.close(event.player); });
menu.show(player);}
world.afterEvents.itemUse.subscribe((event) => { if (event.itemStack.typeId === 'minecraft:chest') openKits(event.source);});import { ItemStack, world } from '@minecraft/server';import { Menu, MenuType } from '@basalt/menus';
function openKits(player) { const menu = new Menu(MenuType.Chest, 'Kits');
// The handler runs when this slot is clicked. Cancelling keeps the item in the menu. menu.setItem(13, new ItemStack('minecraft:iron_sword'), (event) => { event.cancel = true; event.player.sendMessage('You picked the warrior kit.'); menu.close(event.player); });
menu.show(player);}
world.afterEvents.itemUse.subscribe((event) => { if (event.itemStack.typeId === 'minecraft:chest') openKits(event.source);});Constructor
Section titled “Constructor”constructor(type: MenuType, title?: Text);Parameters
typeMenuTypetitleoptionalText
Throws
- Error for a type that isn’t a
MenuType.
Types
Properties
Section titled “Properties”read-only
readonly type: MenuType;Types
read-only
readonly size: number;How many slots it has.
title: string;The window’s title, shown to players who open it after it’s set.
Methods
Section titled “Methods”getItem
Section titled “getItem”getItem(slot: number): ItemStack | undefined;Parameters
slotnumber
Returns
ItemStack | undefinedThrows
- RangeError for a slot the menu hasn’t.
Types
setItem
Section titled “setItem”setItem(slot: number, itemStack?: ItemStack, onClick?: (event: MenuClickEvent) => void): void;Fills a slot, or empties it with undefined.
Parameters
slotnumberitemStackoptionalItemStackonClickoptional(event: MenuClickEvent) => voidClicks on this slot go to it rather than to theMenu.onClickhandlers, as PowerNukkitX’ssetItemHandler.
Throws
- RangeError for a slot the menu hasn’t.
clear(): void;Empties every slot.
onClick
Section titled “onClick”onClick(callback: (event: MenuClickEvent) => void): (event: MenuClickEvent) => void;Runs for clicks on slots without a handler of their own. Every click is allowed without one.
Parameters
callback(event: MenuClickEvent) => void
Returns
(event: MenuClickEvent) => voidTypes
onClose
Section titled “onClose”onClose(callback: (event: MenuCloseEvent) => void): (event: MenuCloseEvent) => void;Runs when a player’s window closes: by them, by Menu.close, or as they die, teleport or leave.
Parameters
callback(event: MenuCloseEvent) => void
Returns
(event: MenuCloseEvent) => voidTypes
show(player: Player): Promise<MenuCloseEvent>;Opens it for a player, closing any window they have open.
Parameters
playerPlayer
Returns
Promise<MenuCloseEvent>A promise that resolves when their window closes.Types
close(player?: Player): void;Closes it for one player, or for everyone without one.
Parameters
playeroptionalPlayer
Types