layoutPool | List<LayoutData> | empty | Collection of layouts available to this menu. Referenced by mainLayoutId and frame layoutId fields.Variants:bookcompositeflexframeleaderboardmerchantpaginatedscrollablesimplestoragebook (1)
| Field | Type | Default | Description |
|---|
pages | List<Var<String>> | empty | Text pages of the book. Each string becomes a separate page. Supports MiniMessage and PlaceholderAPI. |
composite (1)
| Field | Type | Default | Description |
|---|
children | List<String> | empty | — |
flex (5)
| Field | Type | Default | Description |
|---|
items | List<GuiItemData> | empty | —GuiItemData (25)
| Field | Type | Default | Description |
|---|
item | Var<Item> | — | The item to display. Leave empty to use the item held in the player's hand. | displayName | Var<String>? | — | Custom display name for this item. Supports MiniMessage and PlaceholderAPI. | lore | List<Var<String>> | empty | Custom lore lines for this item. Supports MiniMessage and PlaceholderAPI. | criteria | List<Criteria> | empty | Criteria to determine if this slot should be visible to the player. | allowPickup | Boolean | false | If true, the player can pick up this item from the inventory. | modifiers | List<Modifier> | empty | Modifiers applied when this slot is rendered. | triggers | List<Ref<TriggerableEntry>> | empty | Triggers executed when this slot is clicked (regardless of interaction type). | interactionList | List<InteractionData> | empty | Per-click-type interactions (commands and triggers for LEFT, RIGHT, SHIFT, etc.). Use this instead of the legacy 'commands' field. | input | InputData? | — | Input dialog configuration. When set, clicking this slot opens an input prompt. | storageId | String? | — | ID of a reusable storage configuration from the menu storagePool. Leave empty for a normal slot. | isGhost | Boolean | false | If true, the item appears as a ghost (not collectable, same as allowPickup=false but semantically different). | animation | SlotAnimationData? | — | Animation applied to this slot when the menu opens. | cooldownTicks | Long | 0 | Cooldown in ticks before this slot can be clicked again. | buttonType | String? | — | Button type tag for button resolvers (e.g. 'next_page', 'close', 'SHOP_ITEM'). The configured item visuals are preserved. Pair with buttonPrefix for extension-specific buttons. | buttonPrefix | String? | — | Prefix prepended to button type tag. Default: 'dungeon_button:'. Set to e.g. 'shop_button:' or 'codex_button:' for other extensions. | viewPermission | String? | — | Permission required to SEE this slot (null = everyone). | clickPermission | String? | — | Permission required to INTERACT with this slot; without it the slot renders but is inert. | x | Int | 0 | Starting X position (column) of this slot. 0 = leftmost. | y | Int | 0 | Starting Y position (row) of this slot. 0 = top row. | count | Int | 1 | How many times this slot repeats along 'direction' — a number of SLOTS, not a stack size. To show a stack of 64, set the item's amount instead. Ignored when direction is unset. | direction | Direction? | — | Direction in which to repeat this slot (right, left, down, up). Leave null for a single slot at (x, y). | gap | Int | 1 | Step between two repeated slots, NOT a spacing: 1 = adjacent, 2 = one empty slot between each. Applies to both axes. | repeatY | Int | 1 | How many times the whole repetition repeats on the axis PERPENDICULAR to 'direction' — vertically for right/left, horizontally for down/up. A number of ROWS of slots, not a stack size. | rollPerSlot | Boolean | false | Only matters when this item repeats over several slots and its 'item' is random (a variable backed by a ranged or case variable). Off = the item is rolled once and every repeated slot shows that same result. On = each repeated slot rolls the item on its own when the menu opens; the result is then kept for as long as the menu stays open. Off, even with a lore that refreshes, still means ONE draw for the whole session: the text refreshes, the item is never rolled again. All of this holds unless 'liveItem' is on. | liveItem | Boolean | false | Off (default) = the item is drawn when the menu opens and kept for the whole session; on refresh only its name and lore follow. On = the item (a variable) is evaluated again at every refresh, so a random item is drawn again each time. Combine with 'rollPerSlot' to choose between one draw per repeated slot (on) and one draw shared by all repeated slots at each refresh (off). A blank name is still ignored. |
| justifyContent | FlexJustify | btcrenaud.gui.api.FlexJustify.START | —Values:STARTCENTERENDSPACE_BETWEEN | alignItems | FlexAlign | btcrenaud.gui.api.FlexAlign.START | —Values:STARTCENTEREND | wrap | Boolean | true | — | virtualHeight | Int | 6 | — |
frame (1)
| Field | Type | Default | Description |
|---|
frames | List<FrameData> | empty | List of frames defining independent regions within the inventory.FrameData (5)
| Field | Type | Default | Description |
|---|
x | Int | 0 | Starting X position (column) of this frame. | y | Int | 0 | Starting Y position (row) of this frame. | width | Int | 9 | Width of this frame in slots. | height | Int | 1 | Height of this frame in slots. | layoutId | String? | — | Optional reference to another layout in the pool that provides this frame's content. |
|
leaderboard (7)
| Field | Type | Default | Description |
|---|
leaderboard | Ref<GuiLeaderboardEntry> | — | Reusable gui_leaderboard entry to render. | x | Int | 0 | First column of the dynamic rows. | y | Int | 0 | First row of the dynamic rows. | width | Int | 9 | Number of columns reserved for dynamic rows. | height | Int | 5 | Number of rows reserved for dynamic rows. | previousButton | GuiItemData? | — | Optional previous-page button. Its position comes from the GuiItemData.GuiItemData (25)
| Field | Type | Default | Description |
|---|
item | Var<Item> | — | The item to display. Leave empty to use the item held in the player's hand. | displayName | Var<String>? | — | Custom display name for this item. Supports MiniMessage and PlaceholderAPI. | lore | List<Var<String>> | empty | Custom lore lines for this item. Supports MiniMessage and PlaceholderAPI. | criteria | List<Criteria> | empty | Criteria to determine if this slot should be visible to the player. | allowPickup | Boolean | false | If true, the player can pick up this item from the inventory. | modifiers | List<Modifier> | empty | Modifiers applied when this slot is rendered. | triggers | List<Ref<TriggerableEntry>> | empty | Triggers executed when this slot is clicked (regardless of interaction type). | interactionList | List<InteractionData> | empty | Per-click-type interactions (commands and triggers for LEFT, RIGHT, SHIFT, etc.). Use this instead of the legacy 'commands' field. | input | InputData? | — | Input dialog configuration. When set, clicking this slot opens an input prompt. | storageId | String? | — | ID of a reusable storage configuration from the menu storagePool. Leave empty for a normal slot. | isGhost | Boolean | false | If true, the item appears as a ghost (not collectable, same as allowPickup=false but semantically different). | animation | SlotAnimationData? | — | Animation applied to this slot when the menu opens. | cooldownTicks | Long | 0 | Cooldown in ticks before this slot can be clicked again. | buttonType | String? | — | Button type tag for button resolvers (e.g. 'next_page', 'close', 'SHOP_ITEM'). The configured item visuals are preserved. Pair with buttonPrefix for extension-specific buttons. | buttonPrefix | String? | — | Prefix prepended to button type tag. Default: 'dungeon_button:'. Set to e.g. 'shop_button:' or 'codex_button:' for other extensions. | viewPermission | String? | — | Permission required to SEE this slot (null = everyone). | clickPermission | String? | — | Permission required to INTERACT with this slot; without it the slot renders but is inert. | x | Int | 0 | Starting X position (column) of this slot. 0 = leftmost. | y | Int | 0 | Starting Y position (row) of this slot. 0 = top row. | count | Int | 1 | How many times this slot repeats along 'direction' — a number of SLOTS, not a stack size. To show a stack of 64, set the item's amount instead. Ignored when direction is unset. | direction | Direction? | — | Direction in which to repeat this slot (right, left, down, up). Leave null for a single slot at (x, y). | gap | Int | 1 | Step between two repeated slots, NOT a spacing: 1 = adjacent, 2 = one empty slot between each. Applies to both axes. | repeatY | Int | 1 | How many times the whole repetition repeats on the axis PERPENDICULAR to 'direction' — vertically for right/left, horizontally for down/up. A number of ROWS of slots, not a stack size. | rollPerSlot | Boolean | false | Only matters when this item repeats over several slots and its 'item' is random (a variable backed by a ranged or case variable). Off = the item is rolled once and every repeated slot shows that same result. On = each repeated slot rolls the item on its own when the menu opens; the result is then kept for as long as the menu stays open. Off, even with a lore that refreshes, still means ONE draw for the whole session: the text refreshes, the item is never rolled again. All of this holds unless 'liveItem' is on. | liveItem | Boolean | false | Off (default) = the item is drawn when the menu opens and kept for the whole session; on refresh only its name and lore follow. On = the item (a variable) is evaluated again at every refresh, so a random item is drawn again each time. Combine with 'rollPerSlot' to choose between one draw per repeated slot (on) and one draw shared by all repeated slots at each refresh (off). A blank name is still ignored. |
| nextButton | GuiItemData? | — | Optional next-page button. Its position comes from the GuiItemData.GuiItemData (25)
| Field | Type | Default | Description |
|---|
item | Var<Item> | — | The item to display. Leave empty to use the item held in the player's hand. | displayName | Var<String>? | — | Custom display name for this item. Supports MiniMessage and PlaceholderAPI. | lore | List<Var<String>> | empty | Custom lore lines for this item. Supports MiniMessage and PlaceholderAPI. | criteria | List<Criteria> | empty | Criteria to determine if this slot should be visible to the player. | allowPickup | Boolean | false | If true, the player can pick up this item from the inventory. | modifiers | List<Modifier> | empty | Modifiers applied when this slot is rendered. | triggers | List<Ref<TriggerableEntry>> | empty | Triggers executed when this slot is clicked (regardless of interaction type). | interactionList | List<InteractionData> | empty | Per-click-type interactions (commands and triggers for LEFT, RIGHT, SHIFT, etc.). Use this instead of the legacy 'commands' field. | input | InputData? | — | Input dialog configuration. When set, clicking this slot opens an input prompt. | storageId | String? | — | ID of a reusable storage configuration from the menu storagePool. Leave empty for a normal slot. | isGhost | Boolean | false | If true, the item appears as a ghost (not collectable, same as allowPickup=false but semantically different). | animation | SlotAnimationData? | — | Animation applied to this slot when the menu opens. | cooldownTicks | Long | 0 | Cooldown in ticks before this slot can be clicked again. | buttonType | String? | — | Button type tag for button resolvers (e.g. 'next_page', 'close', 'SHOP_ITEM'). The configured item visuals are preserved. Pair with buttonPrefix for extension-specific buttons. | buttonPrefix | String? | — | Prefix prepended to button type tag. Default: 'dungeon_button:'. Set to e.g. 'shop_button:' or 'codex_button:' for other extensions. | viewPermission | String? | — | Permission required to SEE this slot (null = everyone). | clickPermission | String? | — | Permission required to INTERACT with this slot; without it the slot renders but is inert. | x | Int | 0 | Starting X position (column) of this slot. 0 = leftmost. | y | Int | 0 | Starting Y position (row) of this slot. 0 = top row. | count | Int | 1 | How many times this slot repeats along 'direction' — a number of SLOTS, not a stack size. To show a stack of 64, set the item's amount instead. Ignored when direction is unset. | direction | Direction? | — | Direction in which to repeat this slot (right, left, down, up). Leave null for a single slot at (x, y). | gap | Int | 1 | Step between two repeated slots, NOT a spacing: 1 = adjacent, 2 = one empty slot between each. Applies to both axes. | repeatY | Int | 1 | How many times the whole repetition repeats on the axis PERPENDICULAR to 'direction' — vertically for right/left, horizontally for down/up. A number of ROWS of slots, not a stack size. | rollPerSlot | Boolean | false | Only matters when this item repeats over several slots and its 'item' is random (a variable backed by a ranged or case variable). Off = the item is rolled once and every repeated slot shows that same result. On = each repeated slot rolls the item on its own when the menu opens; the result is then kept for as long as the menu stays open. Off, even with a lore that refreshes, still means ONE draw for the whole session: the text refreshes, the item is never rolled again. All of this holds unless 'liveItem' is on. | liveItem | Boolean | false | Off (default) = the item is drawn when the menu opens and kept for the whole session; on refresh only its name and lore follow. On = the item (a variable) is evaluated again at every refresh, so a random item is drawn again each time. Combine with 'rollPerSlot' to choose between one draw per repeated slot (on) and one draw shared by all repeated slots at each refresh (off). A blank name is still ignored. |
|
merchant (1)
| Field | Type | Default | Description |
|---|
trades | List<TradeData> | empty | List of trade offers displayed in the merchant GUI.TradeData (8)
| Field | Type | Default | Description |
|---|
result | Var<Item> | — | The item the player receives from this trade. | costOne | Var<Item> | — | First cost item the player must provide. | costTwo | Var<Item>? | — | Optional second cost item. | maxUses | Int | 1 | Maximum number of uses before the trade locks. Set to 999999 for unlimited. | experienceReward | Boolean | true | If true, the player receives experience when completing this trade. | villagerExperience | Int | 0 | Amount of villager experience gained from this trade. | priceMultiplier | Float | 0.0 | Price multiplier applied to this trade after each use (0.0 = no change). | criteria | List<Criteria> | empty | Criteria to determine if this trade should be visible to the player. |
|
paginated (4)
| Field | Type | Default | Description |
|---|
itemsPerPage | Int | 45 | Number of items per page. Default: 45 (5 rows of 9). | slots | List<Int> | empty | Custom slot indices for paginated items. When empty, items fill top-to-bottom left-to-right. | items | List<GuiItemData> | empty | Items to paginate across multiple pages.GuiItemData (25)
| Field | Type | Default | Description |
|---|
item | Var<Item> | — | The item to display. Leave empty to use the item held in the player's hand. | displayName | Var<String>? | — | Custom display name for this item. Supports MiniMessage and PlaceholderAPI. | lore | List<Var<String>> | empty | Custom lore lines for this item. Supports MiniMessage and PlaceholderAPI. | criteria | List<Criteria> | empty | Criteria to determine if this slot should be visible to the player. | allowPickup | Boolean | false | If true, the player can pick up this item from the inventory. | modifiers | List<Modifier> | empty | Modifiers applied when this slot is rendered. | triggers | List<Ref<TriggerableEntry>> | empty | Triggers executed when this slot is clicked (regardless of interaction type). | interactionList | List<InteractionData> | empty | Per-click-type interactions (commands and triggers for LEFT, RIGHT, SHIFT, etc.). Use this instead of the legacy 'commands' field. | input | InputData? | — | Input dialog configuration. When set, clicking this slot opens an input prompt. | storageId | String? | — | ID of a reusable storage configuration from the menu storagePool. Leave empty for a normal slot. | isGhost | Boolean | false | If true, the item appears as a ghost (not collectable, same as allowPickup=false but semantically different). | animation | SlotAnimationData? | — | Animation applied to this slot when the menu opens. | cooldownTicks | Long | 0 | Cooldown in ticks before this slot can be clicked again. | buttonType | String? | — | Button type tag for button resolvers (e.g. 'next_page', 'close', 'SHOP_ITEM'). The configured item visuals are preserved. Pair with buttonPrefix for extension-specific buttons. | buttonPrefix | String? | — | Prefix prepended to button type tag. Default: 'dungeon_button:'. Set to e.g. 'shop_button:' or 'codex_button:' for other extensions. | viewPermission | String? | — | Permission required to SEE this slot (null = everyone). | clickPermission | String? | — | Permission required to INTERACT with this slot; without it the slot renders but is inert. | x | Int | 0 | Starting X position (column) of this slot. 0 = leftmost. | y | Int | 0 | Starting Y position (row) of this slot. 0 = top row. | count | Int | 1 | How many times this slot repeats along 'direction' — a number of SLOTS, not a stack size. To show a stack of 64, set the item's amount instead. Ignored when direction is unset. | direction | Direction? | — | Direction in which to repeat this slot (right, left, down, up). Leave null for a single slot at (x, y). | gap | Int | 1 | Step between two repeated slots, NOT a spacing: 1 = adjacent, 2 = one empty slot between each. Applies to both axes. | repeatY | Int | 1 | How many times the whole repetition repeats on the axis PERPENDICULAR to 'direction' — vertically for right/left, horizontally for down/up. A number of ROWS of slots, not a stack size. | rollPerSlot | Boolean | false | Only matters when this item repeats over several slots and its 'item' is random (a variable backed by a ranged or case variable). Off = the item is rolled once and every repeated slot shows that same result. On = each repeated slot rolls the item on its own when the menu opens; the result is then kept for as long as the menu stays open. Off, even with a lore that refreshes, still means ONE draw for the whole session: the text refreshes, the item is never rolled again. All of this holds unless 'liveItem' is on. | liveItem | Boolean | false | Off (default) = the item is drawn when the menu opens and kept for the whole session; on refresh only its name and lore follow. On = the item (a variable) is evaluated again at every refresh, so a random item is drawn again each time. Combine with 'rollPerSlot' to choose between one draw per repeated slot (on) and one draw shared by all repeated slots at each refresh (off). A blank name is still ignored. |
| navigationButtons | List<PaginationButtonData> | empty | Navigation buttons. Add NEXT, PREVIOUS, BACK and/or INDICATOR roles as needed.PaginationButtonData (2)
| Field | Type | Default | Description |
|---|
role | PaginationButtonRole | NEXT | Role performed by this navigation button.Values:NEXTPREVIOUSBACKINDICATOR | item | GuiItemData | — | The item displayed for this navigation button. |
|
scrollable (6)
| Field | Type | Default | Description |
|---|
innerId | String? | — | Identifier of the inner layout to scroll. Usually references another layout in the pool. | virtualWidth | Int? | — | Virtual width of the scrollable area. Default: inventory width. | virtualHeight | Int? | — | Virtual height of the scrollable area. Default: inventory height. | buttons | List<ScrollButtonData> | empty | Scroll navigation buttons (up, down, left, right arrows). These are fixed outside the scrollable viewport.ScrollButtonData (3)
| Field | Type | Default | Description |
|---|
item | GuiItemData | — | The item that acts as a scroll button (arrow, head, etc.). | direction | ScrollDirection | UP | Direction to scroll when clicked.Values:UPDOWNLEFTRIGHT | step | Int | 1 | Number of slots/lines to scroll per click. |
| showDefaultButtons | Boolean | true | If true, an arrow is added for every scroll direction that has no button of its own above, only while the content can scroll that way and only on a cell with nothing else on it (item, name and place can be changed in the gui_settings entry). Set to false for no arrows at all. | defaultStep | Int | 1 | Number of slots/lines the default arrows scroll per click. Custom buttons use their own step. Minimum 1. |
simple (3)
| Field | Type | Default | Description |
|---|
items | List<GuiItemData> | empty | List of items to display in this layout.GuiItemData (25)
| Field | Type | Default | Description |
|---|
item | Var<Item> | — | The item to display. Leave empty to use the item held in the player's hand. | displayName | Var<String>? | — | Custom display name for this item. Supports MiniMessage and PlaceholderAPI. | lore | List<Var<String>> | empty | Custom lore lines for this item. Supports MiniMessage and PlaceholderAPI. | criteria | List<Criteria> | empty | Criteria to determine if this slot should be visible to the player. | allowPickup | Boolean | false | If true, the player can pick up this item from the inventory. | modifiers | List<Modifier> | empty | Modifiers applied when this slot is rendered. | triggers | List<Ref<TriggerableEntry>> | empty | Triggers executed when this slot is clicked (regardless of interaction type). | interactionList | List<InteractionData> | empty | Per-click-type interactions (commands and triggers for LEFT, RIGHT, SHIFT, etc.). Use this instead of the legacy 'commands' field. | input | InputData? | — | Input dialog configuration. When set, clicking this slot opens an input prompt. | storageId | String? | — | ID of a reusable storage configuration from the menu storagePool. Leave empty for a normal slot. | isGhost | Boolean | false | If true, the item appears as a ghost (not collectable, same as allowPickup=false but semantically different). | animation | SlotAnimationData? | — | Animation applied to this slot when the menu opens. | cooldownTicks | Long | 0 | Cooldown in ticks before this slot can be clicked again. | buttonType | String? | — | Button type tag for button resolvers (e.g. 'next_page', 'close', 'SHOP_ITEM'). The configured item visuals are preserved. Pair with buttonPrefix for extension-specific buttons. | buttonPrefix | String? | — | Prefix prepended to button type tag. Default: 'dungeon_button:'. Set to e.g. 'shop_button:' or 'codex_button:' for other extensions. | viewPermission | String? | — | Permission required to SEE this slot (null = everyone). | clickPermission | String? | — | Permission required to INTERACT with this slot; without it the slot renders but is inert. | x | Int | 0 | Starting X position (column) of this slot. 0 = leftmost. | y | Int | 0 | Starting Y position (row) of this slot. 0 = top row. | count | Int | 1 | How many times this slot repeats along 'direction' — a number of SLOTS, not a stack size. To show a stack of 64, set the item's amount instead. Ignored when direction is unset. | direction | Direction? | — | Direction in which to repeat this slot (right, left, down, up). Leave null for a single slot at (x, y). | gap | Int | 1 | Step between two repeated slots, NOT a spacing: 1 = adjacent, 2 = one empty slot between each. Applies to both axes. | repeatY | Int | 1 | How many times the whole repetition repeats on the axis PERPENDICULAR to 'direction' — vertically for right/left, horizontally for down/up. A number of ROWS of slots, not a stack size. | rollPerSlot | Boolean | false | Only matters when this item repeats over several slots and its 'item' is random (a variable backed by a ranged or case variable). Off = the item is rolled once and every repeated slot shows that same result. On = each repeated slot rolls the item on its own when the menu opens; the result is then kept for as long as the menu stays open. Off, even with a lore that refreshes, still means ONE draw for the whole session: the text refreshes, the item is never rolled again. All of this holds unless 'liveItem' is on. | liveItem | Boolean | false | Off (default) = the item is drawn when the menu opens and kept for the whole session; on refresh only its name and lore follow. On = the item (a variable) is evaluated again at every refresh, so a random item is drawn again each time. Combine with 'rollPerSlot' to choose between one draw per repeated slot (on) and one draw shared by all repeated slots at each refresh (off). A blank name is still ignored. |
| dropOnClose | Boolean | false | When the menu closes, hand back whatever still sits in this layout's slots that the player can take from (allowPickup): loot they did not pick up, or an item they put there. Slots with allowPickup off are decoration and are never handed back. Off = the contents vanish with the menu. | closeDelivery | CloseDelivery | — | How the contents are handed back when dropOnClose is on. GIVE_OR_DROP: into the player's inventory, the surplus falls at their feet when it is full. DROP: everything falls at their feet. |
storage (3)
| Field | Type | Default | Description |
|---|
entry | Ref<GuiStorageEntry> | — | Reference to a gui_storage artifact entry that persists the stored items. | groupKey | Var<String> | %player_uuid% | Group key for storage scope. Use %player_uuid% for per-player, or a group reference for shared storage. | slots | List<StorageSlotLayoutItemData> | empty | List of storage slot definitions (position, maxStack, triggers, etc.).StorageSlotLayoutItemData (12)
| Field | Type | Default | Description |
|---|
x | Int | 0 | X position (column) of this storage slot. 0 = leftmost. | y | Int | 0 | Y position (row) of this storage slot. 0 = top row. | maxStack | Int | 64 | Maximum item amount allowed in this slot (1-64). | temporary | Boolean | false | If true, the slot content is lost when the menu closes. | dropOnClose | Boolean | false | If true, remaining contents are dropped on the ground when the menu really closes. | placeholder | Var<Item>? | — | Placeholder item shown when the slot is empty. | onFill | List<Ref<TriggerableEntry>> | empty | Triggers executed when the slot becomes non-empty. | onEmpty | List<Ref<TriggerableEntry>> | empty | Triggers executed when the slot becomes empty. | requiredItem | Var<Item>? | — | If set, only items matching this type can be stored in this slot. | requiredAmount | Int | 0 | Number of items that must be deposited to trigger onReachRequired. | onReachRequired | List<Ref<TriggerableEntry>> | empty | Triggers executed when the required amount is reached. | consumeItems | Boolean | true | If true, deposited items are consumed when requiredAmount is reached. |
|
|