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/guiand/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
- Place NetherMenus in your server
plugins/folder. - Ensure these dependencies are installed as needed:
- PlaceholderAPI (for placeholders in text and requirements)
- PocketVault (for money/permissions actions and money requirements)
- Start the server to generate
plugin_data/NetherMenus/and default folders. - 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=trueinserver.properties
If the pack is missing or not forced:
- The plugin stays enabled in a safe degraded mode.
/gui, custom open commands and/guiadminwill 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)
- Opens a GUI if its YAML contains
/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: shopregisters/shop. - Permission:
nethermenus.command
- Defined per GUI via
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 commandsopen_actions: string | string[]– Actions to run when GUI opensclose_actions: string | string[]– Actions to run when GUI closesopen_requirement: { … }– Requirement block evaluated before openingupdate_interval: number– Seconds between updates for items withupdate: truefiller_item:– Background filler configurationmaterial: stringslots: 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/arraypriority: number– Lower is chosen first when entries target the same slotmaterial: string– See Materialsamount: number(1..64)dynamic_amount: string– Placeholder string resolving to 1..64display_name: stringlore: string | string[]tooltip: { display_name?, lore? }– Alternate container for name/loredye: string– leather color (purpleor#RRGGBB)trim_material: string– e.g.emerald, copper, netherite, ...trim_pattern: string– e.g.host, coast, vex, ...update: bool– Iftrue, only name/lore are refreshed eachupdate_intervalview_requirement: { … }– Requirement block controlling visibilityclick_requirement: { … }– Requirement block evaluated on clicksuccess_actions: string | string[]– Actions to run on click successaction | actions– Legacy aliases forsuccess_actions
Materials
- Standard identifiers via
StringToItemParser:STONE,OAK_PLANKS, or full names likeminecraft: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|offhandarmor_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 (runsclose_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>(Lsuffix = 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 specsminimum_requirements: number– Minimum number of individual requirements that must passstop_at_success: bool– Stop evaluating after reachingminimum_requirementssuccess_actions:– Run if the block passesdeny_actions:– Run if the block fails
Individual requirement types (examples):
type: has permission+permission: nodetype: has permissions+permissions: [node1, node2]+minimum: 1type: has money+amount: 500type: has exp+amount: 10+level: true|falsetype: is near+location: 'WORLD,X,Y,Z'+distance: '5'type: has itemwith advanced options (name/lore contains, ignorecase, armor/offhand, strict)- String comparisons:
type: string equals/string equals ignorecase/string containstype: 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):
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.
Releases
| Version | API | Built |
|---|---|---|
| 2.0.0 | 5.0.0 | 2 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.
Sign in with GitHub to star this plugin or leave a comment.
No comments yet.