NetherMenus

by NetherByte233

Custom GUI plugin using InventoryUI virion

version 2.0.0

9 downloads · 0 stars

Published 2 Mar 2026 from NetherByte233/NB-Menus-PMMP at e411979d8102251ee8636d60d2d0fa31e23982ae, after moderator review.

Plugin description

NetherMenus

A modern PocketMine-MP v5 GUI framework powered by the InventoryUI virion and PlaceholderAPI. Create fully dynamic menus from YAML with placeholders, requirements, actions, live updates, sounds, and more.

  • Main class: NetherByte\NetherMenus\NetherMenus
  • API: PocketMine-MP 5.x
  • Softdepends: PlaceholderAPI, PocketVault

Features

  • Dynamic GUIs defined in simple YAML files under the plugin data folder
  • Full PlaceholderAPI support (names, lore, requirements, actions)
  • View and click requirements with success/deny actions
  • Custom open commands per GUI (e.g. /shop, /kits), plus /gui and /guiadmin
  • Live updates without closing the GUI (update_interval, [refresh] action)
  • Rich action system (console/player commands, sounds, money/xp, perms, open GUI)
  • Material sources: standard item IDs, NBT base64 blobs, placeholder-provided items, equipment
  • Armor trims, leather dye, dynamic amounts
  • Per-player menu tracking + placeholders (current/last menu)

Installation

  1. Place NetherMenus in your server plugins/ folder.
  2. Ensure these dependencies are installed as needed:
    • PlaceholderAPI (for placeholders in text and requirements)
    • PocketVault (for money/permissions actions and money requirements)
  3. Start the server to generate plugin_data/NetherMenus/ and default folders.
  4. Place your GUI YAML files in: plugin_data/NetherMenus/guis/*.yml.

Inventory UI Resource Pack Requirement

NetherMenus uses a bundled InventoryUI virion that requires the server to have the Inventory UI Resource Pack installed and resource packs forced for clients.

  • Required RP UUID: 21f0427f-572a-416d-a90e-c5d9becb0fa3
  • Required RP version: 1.1.0
  • Server setting: force_resources=true in server.properties

If the pack is missing or not forced:

  • The plugin stays enabled in a safe degraded mode.
  • /gui, custom open commands and /guiadmin will show a message and NOT open any forms.
  • Console will show messages like:
    • [NetherMenus] InventoryUI not ready: Resource pack 'Inventory UI Resource Pack' not found
    • [NetherMenus] Plugin will not work and features will be degraded
    • [NetherMenus] Download the resource pack from (link)
    • [NetherMenus] NetherMenus: Resource pack not detected. Please download/enable the Inventory UI Resource Pack for full functionality.

Install the resource pack put the resource pack in the resource pack folder and set force_resources=true in resource_packs.yml and name file name of resource pack in resource_stack: like this

resource_stack:
-Inventory UI Resource Pack

Then restart the server to restore full functionality.

Commands & Permissions

  • /gui <id>
    • Opens a GUI if its YAML contains open_command: "gui <id>"
    • Permission: nethermenus.command (default: true)
  • /guiadmin
    • Opens the admin form UI
    • Permission: nethermenus.admin (default: op)
  • Custom open commands
    • Defined per GUI via open_command: (string or list). Example: open_command: shop registers /shop.
    • Permission: nethermenus.command

YAML Overview

Top-level keys (GUI file):

  • id: string – Logical ID (defaults to the file name without extension)
  • name: string – GUI title (supports placeholders)
  • rows: 1..6 – Number of rows (size = rows * 9)
  • open_command: string | string[] – Commands that open this GUI (besides /gui <id>)
  • command_description: string – Description used when registering custom commands
  • open_actions: string | string[] – Actions to run when GUI opens
  • close_actions: string | string[] – Actions to run when GUI closes
  • open_requirement: { … } – Requirement block evaluated before opening
  • update_interval: number – Seconds between updates for items with update: true
  • filler_item: – Background filler configuration
    • material: string
    • slots: string | string[] – Comma list or ranges (e.g. "0-8, 36-44")
  • items: – Map of item entries. Each entry supports:
    • slot: number | string | string[] – Single slot or comma/range/array
    • priority: number – Lower is chosen first when entries target the same slot
    • material: string – See Materials
    • amount: number (1..64)
    • dynamic_amount: string – Placeholder string resolving to 1..64
    • display_name: string
    • lore: string | string[]
    • tooltip: { display_name?, lore? } – Alternate container for name/lore
    • dye: string – leather color (purple or #RRGGBB)
    • trim_material: string – e.g. emerald, copper, netherite, ...
    • trim_pattern: string – e.g. host, coast, vex, ...
    • update: bool – If true, only name/lore are refreshed each update_interval
    • view_requirement: { … } – Requirement block controlling visibility
    • click_requirement: { … } – Requirement block evaluated on click
    • success_actions: string | string[] – Actions to run on click success
    • action | actions – Legacy aliases for success_actions

Materials

  • Standard identifiers via StringToItemParser:
    • STONE, OAK_PLANKS, or full names like minecraft:netherite_chestplate
  • Base64 NBT item:
    • material: nbt-"<base64-serialized-nbt>"
  • Placeholder-provided identifiers:
    • material: placeholder-%player_item_in_hand%
  • Equipment shortcuts:
    • main_hand | mainhand, off_hand | offhand
    • armor_helmet, armor_chestplate, armor_leggings, armor_boots

Actions

Write as lines in [tag] arg format. All args are parsed by PlaceholderAPI before use.

  • Core
    • [close] – Closes the GUI (runs close_actions)
    • [opengui] <guiId> – Opens another GUI (respects its open requirement)
    • [refresh] – Rebuilds current GUI items without closing
    • [message] <text> / [broadcast] <text> / [chat] <text>
    • [console] <cmd> / [player] <cmd>
  • Economy (PocketVault)
    • [givemoney] <amount> / [takemoney] <amount>
  • Permissions (PocketVault)
    • [givepermission] <node> / [takepermission] <node>
  • Experience
    • [giveexp] <amt|amtL> / [takeexp] <amt|amtL> (L suffix = levels)
  • Sounds (Bedrock ids)
    • [sound] <id> [volume] [pitch]
    • [broadcastsound] <id> [volume] [pitch]
    • [broadcastsoundworld] <id> [volume] [pitch]

Requirements

A requirement block is evaluated as a whole and supports success/deny actions.

Block keys:

  • requirements: – map of individual requirement specs
  • minimum_requirements: number – Minimum number of individual requirements that must pass
  • stop_at_success: bool – Stop evaluating after reaching minimum_requirements
  • success_actions: – Run if the block passes
  • deny_actions: – Run if the block fails

Individual requirement types (examples):

  • type: has permission + permission: node
  • type: has permissions + permissions: [node1, node2] + minimum: 1
  • type: has money + amount: 500
  • type: has exp + amount: 10 + level: true|false
  • type: is near + location: 'WORLD,X,Y,Z' + distance: '5'
  • type: has item with advanced options (name/lore contains, ignorecase, armor/offhand, strict)
  • String comparisons:
    • type: string equals / string equals ignorecase / string contains
    • type: string length + min: + max:
  • Comparators:
    • type: (==, !=, >=, <=, >, <) + input: + output:
  • type: javascript + expression:

Negation is supported for any type using type: "!has permission", etc.

Placeholders (NetherMenus)

Provided via hook/PlaceholdersHook.php (requires PlaceholderAPI):

Full description on Poggit

Installing it

Drop the phar into plugins/ and restart the server. If the API version below does not match your server, the plugin will refuse to load, which is the check working as intended.

Installing plugins

Releases

VersionAPIBuilt
2.0.05.0.02 Mar 2026 · 68 KB

SHA-256 of 2.0.022cb5c9977704bbf9bce0a6be3c44b6080600bc4cbef2bbe9dd78eda2cadd4ba

Reviewed by a moderator before publishing. Built from NetherByte233/NB-Menus-PMMP at e411979d8102251ee8636d60d2d0fa31e23982ae. Nobody reviews plugin code here: read the source before running it on a server you care about.

Comments

Sign in with GitHub to star this plugin or leave a comment.

No comments yet.