Bedrock GUI Customization
Overview
Bedrock players don't use Java chest inventories — they see native SimpleForm / CustomForm UIs (think "form with buttons" rather than "inventory with items"). Since 2.3, every Bedrock form in SCS2 is defined in YAML under /plugins/SimpleClaimSystem/bedrock-guis/, parallel to the Java guis/ system.
On first start the plugin copies the 20 default yml files into that folder. You edit them in place; /scs reload picks up the changes without a restart.
Files shipped: menu_home, menu_list, menu_favorites_toggle, menu_claims, menu_claims_owner, menu_chunks, menu_members, menu_member_claim, menu_member_manage, menu_banned, menu_online_players, menu_permissions_choice_role, menu_permissions, menu_flags, menu_settings, menu_roles, menu_role_selector, menu_player, menu_player_warps, menu_players_with_warps.
YAML Structure
Each file describes one form:
# Example: menu_home.yml
form-type: SimpleForm # SimpleForm | CustomForm | ModalForm
title: "bedrock-gui-home-title" # lang key OR raw MiniMessage
content: "" # optional body text (SimpleForm / ModalForm)
buttons:
teleport:
text: "bedrock-teleport-menu-button"
icon: ""
members:
text: "bedrock-members-menu-button"
icon: ""
# ...
# Only for menus that show a dynamic list (claim list, member list, etc.).
# The template applies to every row the Java model generates; %placeholders%
# are substituted per-row.
dynamic-button:
text: "bedrock-claim-list-title"
icon: "https://mc-heads.net/avatar/%uuid%"
# Only for CustomForm (flags, permissions, settings).
components:
- key: particles
type: TOGGLE # TOGGLE | INPUT | DROPDOWN | SLIDER | STEP_SLIDER | LABEL
text: "bedrock-settings-particles"
default: false
| Field | Description |
|---|---|
form-type | SimpleForm (title + buttons), CustomForm (title + components), or ModalForm (title + 2 buttons). |
title / content | Either a lang key (resolved from langs/<lang>.yml) or raw MiniMessage. Same fallback rules as Java gui-title — mismatched keys are parsed as MiniMessage, so Nexo <glyph:> / <shift:> tags work in titles when force-java-menus is off too. |
buttons.<key>.text | Button label. The Java model decides which keys to render for a given form — you customize their appearance, not which ones show up. |
buttons.<key>.icon | Icon source. http:// or https:// prefix → URL icon. Otherwise treated as a Bedrock resource-pack namespace:path. Empty = no icon. |
dynamic-button.text | Template for each row in a dynamic list. Supports placeholders like %claim%, %uuid%, %player%, %description%, %status%, etc. Placeholder set depends on the menu — see the defaults shipped in each yml. |
components[].type | One of TOGGLE, INPUT, DROPDOWN, SLIDER, STEP_SLIDER, LABEL. Additional fields per type: default (boolean/string), min/max/step (sliders). |
Per-flag / per-permission overrides
The menu_flags.yml and menu_permissions.yml forms each append one toggle per flag (or permission) the player can change. The default label comes from the <flag-lowercase>-title (or <permission-lowercase>-title) lang key. To override the label of a specific flag/permission without editing the lang file, add its entry to the components list:
# menu_flags.yml
components:
- key: CREEPER_EXPLOSIONS
type: TOGGLE
text: "<red>Creeper blasts allowed"
- key: FIRE_SPREAD
type: TOGGLE
text: "my-server.flags.fire-spread"
Keys are case-insensitive and match the flag/permission name exactly. Unlisted entries keep the default lang key. Listed entries that don't correspond to a registered flag/permission are silently ignored.
What You Can and Can't Change
The yml controls the surface: titles, static button text, icons, component labels. The Java code still decides:
- Which buttons appear (e.g. "invite" button only shows when the player has
scs.claim.addmember) - What each button does when clicked
- The contents of dynamic lists (which players, which claims, which chunks)
- The order of static buttons (handler dispatch is index-based)
If a button key is missing from your yml, the corresponding button renders with blank text — the Java handler still dispatches correctly. If you delete an entire yml file, the form falls back to empty strings; put the file back from the jar (or delete the folder and restart) to restore defaults.
Using Resource Pack Icons
Bedrock clients can render either URL icons (hosted externally, e.g. mc-heads.net avatars) or icons from an attached Bedrock resource pack. To use a pack icon, give the icon field a namespace:path value — no http:// prefix — and ensure the texture exists in your pack at that path:
buttons:
teleport:
text: "bedrock-teleport-menu-button"
icon: "scs:textures/ui/teleport_icon"
URL icons are simpler (no pack to maintain) but cause a brief fetch delay the first time each icon appears. Pack icons render instantly once the pack is loaded.