ControlPanel#
ControlPanel gives your players a clickable GUI menu to run their most-used island commands — no typing required. Server admins build fully customizable panels using a simple YAML file, with support for multiple click actions, custom icons, and live placeholders.
Created and maintained by BONNe.
Useful links
Installation#
- Place the ControlPanel addon jar in the
addonsfolder of the BentoBox plugin. - Restart the server. ControlPanel will create a default
controlPanelTemplate.ymlinsideplugins/BentoBox/addons/ControlPanel/. - Edit
controlPanelTemplate.ymlto build your panels (see Configuration below). - Import the panels with the admin command:
/{admin} cp import
Tip
Replace {admin} with your gamemode's admin command label, e.g. bsb for BSkyBlock, oa for AOneBlock, acid for AcidIsland.
Commands#
Player command#
| Command | Description | Permission |
|---|---|---|
/[label] controlpanel | Opens the player's assigned control panel | [gamemode].controlpanel |
/[label] cp | Shorthand alias for the command above | [gamemode].controlpanel |
Replace [label] with the gamemode's player command, e.g. island for BSkyBlock or ob for AOneBlock.
The panel shown depends on the player's permissions. Players without a specific panel permission see the panel marked defaultPanel: true. If a player has permission for a particular panel via [gamemode].controlpanel.panel.<suffix>, that panel is shown instead.
Admin command#
| Command | Description | Permission |
|---|---|---|
/{admin} cp import | Import panels from controlPanelTemplate.yml | [gamemode].controlpanel.admin |
/{admin} cp import <filename> | Import panels from a custom YAML file | [gamemode].controlpanel.admin |
The filename does not need the .yml extension — it is added automatically. The file must be located in plugins/BentoBox/addons/ControlPanel/.
Warning
If panels already exist for the gamemode, importing will ask for confirmation before replacing them.
Permissions#
| Permission | Default | Description |
|---|---|---|
[gamemode].controlpanel | true | Allows the player to open the control panel |
[gamemode].controlpanel.admin | op | Allows use of the admin import command |
[gamemode].controlpanel.panel.default | true | Grants access to the default panel |
[gamemode].controlpanel.panel.<suffix> | — | Grants access to a custom panel with the given suffix |
Replace [gamemode] with the lowercase gamemode name, e.g. bskyblock, acidisland, aoneblock, caveblock, skygrid.
Note
If a player has multiple panel permissions, the first panel marked defaultPanel: true among those they have access to is shown. If the player has wildcard * permissions, the first defined default panel is used.
Configuration#
ControlPanel uses two files:
config.yml— general addon settingscontrolPanelTemplate.yml— defines panels and buttons
Both are located in plugins/BentoBox/addons/ControlPanel/.
config.yml#
The main configuration file has one setting:
disabled-gamemodes
A list of GameMode addon names where ControlPanel should not operate. ControlPanel will not hook into these gamemodes.
Default: []
Example:
disabled-gamemodes:
- BSkyBlock
- AcidIsland
controlPanelTemplate.yml#
This file defines all control panels and their buttons. After editing it, run /{admin} cp import to load your changes.
Panel structure#
panel-list:
<panel-key>:
defaultPanel: true|false
panelName: '<title>'
permission: '<suffix>'
buttons:
<slot>:
name: '<display name>'
material: MATERIAL_NAME
icon: 'namespace:item_id'
itemsadder: 'namespace:item_id'
description: |-
line one
line two
command: '<left-click command>'
right_click_command: '<right-click command>'
shift_click_command: '<shift+left-click command>'
Panel fields#
| Field | Type | Description |
|---|---|---|
defaultPanel | boolean | Set to true to show this panel to players with no specific panel permission. |
panelName | string | Title of the inventory GUI. Supports & color codes. |
permission | string | The suffix appended to [gamemode].controlpanel.panel.<suffix>. Players with that permission see this panel. |
Button fields#
| Field | Required | Description |
|---|---|---|
slot | Yes | Inventory slot number (0–53). Use a quoted range like "0-8" to fill multiple slots with the same button. |
name | Yes | Display name of the button. Supports & color codes. |
material | No | Vanilla Minecraft material, e.g. GRASS_BLOCK. Used as a fallback icon. |
icon | No | BentoBox ItemParser format, e.g. minecraft:diamond_block. Takes priority over material. |
itemsadder | No | ItemsAdder custom item ID, e.g. iasurvival:ruby. Requires ItemsAdder to be installed. Falls back to paper if it is not. |
description | No | Lore lines shown below the button name. Supports & color codes, multiline with |-, PlaceholderAPI %placeholders%, and [gamemode] substitution. |
command | No | Command executed on left-click (and as fallback for all other click types). |
right_click_command | No | Command executed on right-click or shift+right-click. Falls back to command if omitted. |
shift_click_command | No | Command executed on shift+left-click. Falls back to command if omitted. |
Icon priority
If multiple icon fields are specified, the priority is: itemsadder > icon > material. If none are set, the button defaults to PAPER.
Click types#
Each button can respond differently depending on how the player clicks it:
| Click action | Command used |
|---|---|
| Left click | command |
| Right click | right_click_command (falls back to command) |
| Shift + Left click | shift_click_command (falls back to command) |
| Shift + Right click | right_click_command (falls back to command) |
| Any other click | command |
Command placeholders#
These placeholders can be used inside the command, right_click_command, and shift_click_command fields:
| Placeholder | Replaced with |
|---|---|
[label] | The gamemode's player command label, e.g. island, ob |
[player] | The clicking player's username |
[server] | Makes the command run as the server console instead of the player |
Description placeholders#
These placeholders can be used inside the description field:
| Placeholder | Replaced with |
|---|---|
[gamemode] | Lowercase gamemode name, e.g. bskyblock, aoneblock |
%placeholder% | Any registered PlaceholderAPI placeholder |
Slot layout#
The GUI is a chest inventory. Each row has 9 slots (0–8), and the maximum is a 6-row chest with 54 slots (0–53):
Row 1: 0 1 2 3 4 5 6 7 8
Row 2: 9 10 11 12 13 14 15 16 17
Row 3: 18 19 20 21 22 23 24 25 26
Row 4: 27 28 29 30 31 32 33 34 35
Row 5: 36 37 38 39 40 41 42 43 44
Row 6: 45 46 47 48 49 50 51 52 53
Use a quoted range like "0-8" to place the same button across an entire row. This is useful for decorative borders.
Example: Default and VIP Panels#
Below is a practical example showing two panels — a default panel for all players and a VIP panel for donors. It demonstrates slot ranges, multiple click actions, console commands, PlaceholderAPI placeholders, and ItemsAdder icons.
panel-list:
# Default panel — shown to all players
default:
defaultPanel: true
panelName: '&0&l Control Panel'
permission: 'default'
buttons:
# Decorative top border using a slot range
"0-8":
name: ' '
material: BLACK_STAINED_GLASS_PANE
description: ''
command: ''
# Go to island with multiple click actions
9:
name: '&a&l Go to Island'
icon: minecraft:grass_block
description: |-
&7 Left-click: teleport to your island
&7 Right-click: go to nether
&7 Shift-click: set home
&7 Island level: &e%Level_[gamemode]_island_level%
command: '[label] go'
right_click_command: '[label] go nether'
shift_click_command: '[label] sethome'
10:
name: '&e&l Set Home'
icon: minecraft:white_bed
description: |-
&7 Set your island home
&7 to your current location.
command: '[label] sethome'
11:
name: '&b&l Team'
icon: minecraft:player_head
description: |-
&7 View and manage
&7 your island team.
command: '[label] team'
13:
name: '&6&l Settings'
icon: minecraft:anvil
description: |-
&7 Configure your island
&7 protection settings.
command: '[label] settings'
# Console command — runs as server, not player
17:
name: '&c&l Report Bug'
icon: minecraft:writable_book
description: |-
&7 Opens a support ticket.
command: '[server] ticket create [player] bug-report'
# VIP panel — players need bskyblock.controlpanel.panel.vip
vip:
defaultPanel: false
panelName: '&d&l VIP Control Panel'
permission: 'vip'
buttons:
"0-8":
name: ' '
material: PURPLE_STAINED_GLASS_PANE
description: ''
command: ''
9:
name: '&a&l Go to Island'
icon: minecraft:grass_block
description: |-
&7 Teleport to your island.
command: '[label] go'
# VIP exclusive — grants a kit via console
13:
name: '&d&l VIP Kit'
icon: minecraft:chest
description: |-
&d VIP exclusive!
&7 Claim your weekly VIP kit.
command: '[server] kit vipweekly [player]'
# ItemsAdder custom icon example
14:
name: '&6&l VIP Perks'
itemsadder: 'iasurvival:vip_star'
description: |-
&7 Browse all your VIP perks.
command: 'vipperks'
Tips#
Creating decorative borders
Use slot ranges with glass panes to create clean borders around your panel. Set command: '' and name: ' ' to make the button non-interactive:
"0-8":
name: ' '
material: BLACK_STAINED_GLASS_PANE
description: ''
command: ''
Running commands as the console
Prefix a command with [server] to execute it as the server console. This lets you grant kits, run economy commands, or perform admin actions that the player would not have permission to run directly:
command: '[server] give [player] diamond 64'
Using multiple panels for ranks
Create separate panels for different player groups such as default, VIP, or staff. Assign them using permissions like bskyblock.controlpanel.panel.vip or bskyblock.controlpanel.panel.staff. Each group sees a tailored panel with the appropriate buttons.
Using PlaceholderAPI in descriptions
Button descriptions are processed by PlaceholderAPI at the time the panel is opened, so they always show live data. Use [gamemode] inside placeholder names so the same template works across gamemodes:
description: |-
&7 Level: &e%Level_[gamemode]_island_level%
&7 Rank: &6%Level_[gamemode]_island_rank%
&7 Balance: &a%vault_balance%
Reloading after changes
After editing controlPanelTemplate.yml, run /{admin} cp import to reload. If you've made changes to config.yml, use the BentoBox reload command instead: /{admin} bentobox reload.
FAQ#
How can I change the ControlPanel?
ControlPanel stores panels in the database, but you edit them through the template file. After making changes to controlPanelTemplate.yml, import them by running /{admin} controlpanel import. You can also create additional template files and import them by name: /{admin} controlpanel import myPanels.
Can I have different panels for different users?
Yes. Define multiple panels in the template file, each with a different permission suffix. Then assign players the corresponding permission, e.g. bskyblock.controlpanel.panel.vip. Players without a specific panel permission see the panel marked defaultPanel: true.
What icon types are supported?
ControlPanel supports three icon types, checked in this priority order: ItemsAdder custom items (itemsadder field), BentoBox ItemParser format (icon field), and vanilla Minecraft materials (material field). If none are specified, the button defaults to paper.
Can I run a command as the server console?
Yes. Prefix the command with [server] and it will be executed by the console instead of the player. You can also use [player] in the command string to insert the clicking player's name. For example: [server] give [player] diamond 64.
Can a single button do different things depending on how I click it?
Yes. Each button supports up to three different commands: command for left-click, right_click_command for right-click, and shift_click_command for shift+left-click. If a specific click command is not set, it falls back to the regular command.
Can you add feature X?
Please add it to the list here.
Translations#
Help us keep translations accurate
Most BentoBox and addon translations are now generated with the help of AI, so the bulk of the work is already done — but AI is not perfect. What we really need from the community is error reports and corrections.
- Spotted a mistake or awkward phrasing? Open an issue or a PR on the relevant repository at bentobox.world (a short link to our GitHub org), or tell us on Discord.
- Want to add a brand-new language? Open a PR adding a new locale file to
src/main/resources/locales/in the relevant repo, or ask on Discord and we'll get you started.
| Language | Language code | Progress |
|---|---|---|
| English (United States) | en-US | 100% (Default) |
| Chinese, China | zh-CN | 100% |
| Chinese, Hong Kong | zh-HK | 100% |
| Chinese, Taiwan | zh-TW | 100% |
| Czech | cs | 75% |
| French | fr | 100% |
| German | de | 100% |
| Indonesian | id | 100% |
| Korean | ko | 100% |
| Latvian | lv | 75% |
| Polish | pl | 100% |
| Russian | ru | 100% |
| Spanish | es | 75% |