Menus & Actions
How to author BusyHub GUI menus and the action strings that drive nearly every trigger in the plugin — compass menu clicks, portal entry, launch pads, and more.
Menu files
Every file under menus/ (e.g. menus/main.yml) defines one GUI, referenced by filename
(without .yml) from compass.menu or a [MENU] action.
yaml
title: "&8Server Selector"
rows: 3 # 1-6, clamped
items:
survival:
slot: 11 # 0-based, must fit rows * 9
material: GRASS_BLOCK
name: "&a&lSurvival"
lore:
- "&7Click to join Survival"
actions:
- "[BUNGEE] survival"
close:
slot: 22
material: BARRIER
name: "&c&lClose"
lore: []
close-on-click: true
- The key under
items(survival,close, ...) is just an identifier for your own reference — the actual placement comes fromslot. close-on-click: truecloses the inventory after running the item's actions. There is no "fill remaining slots" convention — every slot you want filled needs an explicit entry.texture:on aPLAYER_HEADitem takes a base64-encoded Mojang skin payload ({"textures":{"SKIN":{"url":"..."}}}, then base64), not a raw texture URL. If you have a rawtextures.minecraft.netURL, wrap it in that JSON shape and base64-encode the whole thing before pasting it in.- Clicking any slot in a BusyHub menu is fully consumed — players can never drag items into or out of one.
Action syntax
Actions are strings shaped [IDENTIFIER] data, used in menu items' actions: lists, and via
/busyhub portal addaction / /busyhub pad addaction. Every list runs top to bottom.
| Identifier | Example | Behavior |
|---|---|---|
BUNGEE |
[BUNGEE] survival |
Sends a BungeeCord Connect plugin message for the given server. Velocity's Bungee-compatibility mode understands the same channel. Logs a warning and no-ops if the BungeeCord channel isn't registered (e.g. no proxy) or no server name is given. |
VELOCITY |
[VELOCITY] survival |
Identical to BUNGEE — just delegates to it. Provided so config authors can use whichever name matches their proxy. |
WARP |
[WARP] parkour |
Teleports the player to the named EssentialsX warp. Reads the location directly from Essentials, so the player needs no essentials.warp permission and no teleport delay or cooldown applies. Logs a warning and no-ops if EssentialsX isn't installed or the warp doesn't exist. |
MENU |
[MENU] socials |
Opens another BusyHub menu by name. |
MESSAGE |
[MESSAGE] &aWelcome, %player%! |
Sends a chat message. Parsed as MiniMessage if it contains <tag> syntax, otherwise legacy & codes. %player% is replaced with the triggering player's name. MiniMessage's <click:open_url:'...'> can be used here to build a clickable link, since there's no dedicated link action. |
SOUND |
[SOUND] entity.firework_rocket.launch 1.0 1.4 |
Plays a sound to the player at their own location. Volume/pitch are optional, default 1.0. Accepts either a raw namespaced key or the old enum-constant style (ENTITY_FIREWORK_ROCKET_LAUNCH). |
PLAYER |
[PLAYER] spawn |
Runs the given command as the player (leading / optional). %player% substitution applies. |
CONSOLE |
[CONSOLE] give %player% diamond 1 |
Runs the given command as console. Same %player% substitution. |
Malformed strings (missing brackets) or an unknown identifier just log a warning and are skipped — they don't stop the rest of the list from running.
Examples:
[BUNGEE] survival
[MESSAGE] Teleporting you to survival...
[SOUND] entity.firework_rocket.launch 1.0 1.4
[CONSOLE] give %player% diamond 1