BedrockGUI v2 BETA
BedrockGUI Complete Guide
A comprehensive guide to creating SIMPLE, MODAL, and CUSTOM forms with actions, conditions, and advanced features.
Table of Contents
Form Types Overview
Available Actions
Available Conditions
Simple Forms
Modal Forms
Custom Forms
Advanced Examples
Best Practices
Form Types Overview
BedrockGUI supports three main form types:
SIMPLE: Button-based menus with multiple options
MODAL: Yes/No confirmation dialogs (exactly 2 buttons)
CUSTOM: Input forms with various components (text inputs, toggles, dropdowns, etc.)
Available Actions
BedrockGUI provides a comprehensive set of action handlers:
Core Actions
message
: Send messages to playerscommand
: Execute commands as the playerserver
: Execute commands as the server consoleopen
: Open other forms/menusclose
: Close the current formbroadcast
: Send messages to all players or specific groups
Utility Actions
delay
: Add delays between actions (max 30 seconds)sound
: Play sounds to playerseconomy
: Add/remove/set player money (requires economy plugin)random
: Execute random actions from a list
Advanced Actions
conditional
: Execute actions based on conditions (supports if-else pattern)teleport
: Teleport players to locations
Action Syntax
# Basic syntax
actionType:actionData
# Multiple actions (separated by colons)
action1:data1:action2:data2:action3:data3
# Examples
message:Hello World!
command:give {player} diamond 1
server:gamemode creative {player}
open:shop_menu
delay:1000
sound:ui.button.click
economy:add:100
random:message:Prize 1|message:Prize 2|message:Prize 3
# Conditional actions (if-else pattern)
conditional:permission:admin.use:message:You are an admin! # Only success action
conditional:placeholder:{world}:equals:world:message:You're in overworld:message:You're not in overworld # Success and failure actions
conditional:placeholder:{balance}:>=:1000:economy:remove:100:message:Insufficient funds! # Success and failure actions
Conditional Actions (If-Else Pattern)
Conditional actions now support an if-else pattern where you can specify both success and failure actions:
# Format: conditional:condition_type:condition_value[:operator:expected_value]:success_action_type:success_action_data[:failure_action_type:failure_action_data]
# Examples with both success and failure actions
conditional:permission:vip.access:message:§aWelcome VIP!:message:§cYou need VIP access!
conditional:placeholder:{balance}:>=:500:economy:remove:500:message:§cInsufficient funds!
conditional:placeholder:{world}:equals:survival:teleport:survival_spawn:teleport:creative_spawn
conditional:placeholder:{player_health}:>:10:message:§aYou're healthy!:message:§cYou need healing!
# Examples with only success actions (failure is ignored)
conditional:permission:admin.use:server:gamemode creative {player}
conditional:placeholder:{balance}:>=:1000:economy:add:100
Available Conditions
Conditions are used for conditional buttons and actions:
Condition Types
Permission Conditions
# Check if player has permission
permission:some.permission.node
# Check if player does NOT have permission
not:permission:some.permission.node
Placeholder Conditions
# Basic syntax
placeholder:{placeholder_name}:operator:expected_value
# With negation
not:placeholder:{placeholder_name}:operator:expected_value
Available Operators
String Operators
equals
or==
: Exact matchnot_equals
or!=
: Not equalcontains
: Contains substringstarts_with
: Starts with stringends_with
: Ends with stringregex
: Regular expression matchempty
: Is empty or nullnot_empty
: Is not empty
Numeric Operators
>
orgreater_than
: Greater than>=
orgreater_equal
: Greater than or equal<
orless_than
: Less than<=
orless_equal
: Less than or equal
Condition Examples
# Permission examples
show_condition: "permission:admin.use"
show_condition: "not:permission:banned.user"
# Placeholder examples (supports PlaceholderAPI)
show_condition: "placeholder:{balance}:>=:1000"
show_condition: "placeholder:{player_world}:equals:survival"
show_condition: "placeholder:{player_health}:>:10"
show_condition: "placeholder:{player_name}:contains:Admin"
show_condition: "not:placeholder:{player_gamemode}:equals:creative"
show_condition: "placeholder:%vault_eco_balance%:>=:500" # PlaceholderAPI example
Simple Forms
Simple forms are button-based menus that allow players to choose from multiple options.
Basic Simple Form
basic_menu:
type: "SIMPLE"
title: "§6§lMain Menu"
description: "§7Choose an option below:"
buttons:
option1:
text: "§a§lOption 1"
onClick: "message:You selected option 1!"
Medium Complexity Simple Form
server_menu:
type: "SIMPLE"
title: "§b§lServer Menu"
description: "§7Welcome to our server! Choose what you'd like to do:"
buttons:
teleport_spawn:
text: "§a§l🏠 Teleport to Spawn"
image: "textures/ui/icon_recipe_nature"
onClick: "teleport:spawn:sound:random.levelup:message:§aWelcome to spawn!"
player_shop:
text: "§2§l🛒 Player Shop"
image: "textures/ui/icon_recipe_item"
onClick: "open:shop_menu:sound:ui.button.click"
show_condition: "permission:shop.use"
daily_reward:
text: "§6§l🎁 Daily Reward"
image: "textures/ui/icon_recipe_equipment"
onClick: "economy:add:100:message:§a+100 coins daily reward!:sound:random.levelup"
admin_panel:
text: "§c§l⚙️ Admin Panel"
image: "textures/ui/icon_recipe_construction"
onClick: "open:admin_menu"
show_condition: "permission:admin.use"
Complex Simple Form with Advanced Features
advanced_hub:
type: "SIMPLE"
title: "§6§l✦ Advanced Server Hub ✦"
description: "§7Welcome §e{player}§7! Balance: §a${balance} §7| World: §b{player_world}"
buttons:
vip_area:
text: "§d§l👑 VIP Area"
image: "textures/ui/icon_recipe_equipment"
onClick: "conditional:permission:vip.access:teleport:vip_lounge:message:§c§lVIP access required!"
show_condition: "permission:vip.access"
minigames:
text: "§e§l🎮 Minigames"
image: "textures/ui/icon_recipe_nature"
onClick: "conditional:placeholder:{balance}:>=:50:economy:remove:50:message:§c§lInsufficient funds! Need $50 to play."
random_reward:
text: "§5§l🎲 Random Reward"
image: "textures/ui/icon_recipe_item"
onClick: "random:economy:add:10|economy:add:50|economy:add:100|economy:add:500:delay:1000:random:message:§aYou got $10!|message:§aYou got $50!|message:§aYou got $100!|message:§a§lJACKPOT! $500!:sound:random.levelup"
time_based_feature:
text: "§b§l⏰ Time-Based Feature"
onClick: "conditional:placeholder:{server_time}:>=:6000:message:§a§lDaytime feature activated!:message:§e§lNighttime feature activated!"
player_stats:
text: "§3§l📊 Player Statistics"
onClick: "message:§3§l=== Player Stats ===\n§7Name: §e{player}\n§7Health: §c{player_health}/20\n§7World: §b{player_world}\n§7Balance: §a${balance}\n§7Playtime: §e{player_playtime} hours"
broadcast_system:
text: "§6§l📢 Announcements"
onClick: "conditional:permission:broadcast.use:open:broadcast_menu:message:§c§lNo permission to use broadcasts."
show_condition: "permission:broadcast.use"
Modal Forms
Modal forms are confirmation dialogs with exactly two buttons (Yes/No, Accept/Decline, etc.).
Basic Modal Form
confirm_teleport:
type: "MODAL"
title: "§e§lConfirm Teleport"
description: "§7Are you sure you want to teleport to spawn?\n§cThis will cost $10."
buttons:
confirm:
text: "§a§lYes, Teleport"
onClick: "economy:remove:10:teleport:spawn:message:§a§lTeleported to spawn!"
cancel:
text: "§c§lNo, Cancel"
onClick: "message:§e§lTeleport cancelled.:close"
Medium Complexity Modal Form
purchase_confirmation:
type: "MODAL"
title: "§2§l💰 Purchase Confirmation"
description: "§7Item: §e{item_name}\n§7Price: §a${item_price}\n§7Your Balance: §a${balance}\n\n§eConfirm this purchase?"
buttons:
purchase:
text: "§a§l✓ Buy Now"
onClick: "conditional:placeholder:{balance}:>=:{item_price}:economy:remove:{item_price}:message:§c§lInsufficient funds!"
cancel:
text: "§c§l✗ Cancel"
onClick: "message:§e§lPurchase cancelled.:sound:ui.button.click:open:shop_menu"
Complex Modal Form with Advanced Logic
reset_player_data:
type: "MODAL"
title: "§c§l⚠️ DANGER ZONE ⚠️"
description: "§c§l§nWARNING: IRREVERSIBLE ACTION\n\n§7This will completely reset your player data:\n§c• All inventory items will be lost\n§c• All money will be reset to $0\n§c• All achievements will be cleared\n§c• Your location will reset to spawn\n\n§e§lThis action cannot be undone!\n§7Type your username to confirm: §e{player}"
permission: "reset.own.data"
buttons:
confirm_reset:
text: "§c§l💀 RESET EVERYTHING"
onClick: "conditional:permission:reset.confirmed:server:clear {player}:message:§e§lYou need confirmation permission to reset data."
abort:
text: "§a§l🛡️ Keep My Data"
onClick: "message:§a§lSmart choice! Your data is safe.:sound:random.levelup:delay:500:message:§7If you change your mind, you can always come back.:open:settings_menu"
Custom Forms
Custom forms allow for complex input collection with various component types.
Basic Custom Form
player_feedback:
type: "CUSTOM"
title: "§b§lPlayer Feedback"
components:
player_name:
type: "input"
text: "§7Your Name:"
placeholder: "Enter your username"
default: "{player}"
feedback_text:
type: "input"
text: "§7Your Feedback:"
placeholder: "Tell us what you think..."
rating:
type: "slider"
text: "§7Rate our server (1-10):"
min: 1
max: 10
step: 1
default: 5
recommend:
type: "toggle"
text: "§7Would you recommend our server?"
default: true
submit:
type: "button"
text: "§a§lSubmit Feedback"
onClick: "message:§a§lThank you for your feedback!:broadcast:permission:admin.feedback:§e§l[FEEDBACK] §7New feedback from §e{player_name}§7: Rating §a{rating}§7/10"
Medium Complexity Custom Form
shop_purchase:
type: "CUSTOM"
title: "§2§l🛒 Item Purchase"
components:
item_category:
type: "dropdown"
text: "§7Select Category:"
options:
- "Weapons"
- "Armor"
- "Tools"
- "Food"
- "Blocks"
default: 0
item_name:
type: "input"
text: "§7Item Name:"
placeholder: "diamond_sword"
quantity:
type: "slider"
text: "§7Quantity:"
min: 1
max: 64
step: 1
default: 1
express_delivery:
type: "toggle"
text: "§7Express Delivery (+$5):"
default: false
gift_wrap:
type: "toggle"
text: "§7Gift Wrap (+$2):"
default: false
recipient:
type: "input"
text: "§7Recipient (leave empty for yourself):"
placeholder: "player_name"
purchase:
type: "button"
text: "§a§lPurchase Items"
onClick: "conditional:placeholder:{item_name}:not_empty:server:give {recipient} {item_name} {quantity}:message:§c§lPlease enter an item name!"
Complex Custom Form with Advanced Features
character_creator:
type: "CUSTOM"
title: "§d§l✨ Character Creator ✨"
permission: "character.create"
components:
character_name:
type: "input"
text: "§7Character Name:"
placeholder: "Enter character name"
show_condition: "not:placeholder:{has_character}:equals:true"
character_class:
type: "dropdown"
text: "§7Choose Class:"
options:
- "§c⚔️ Warrior"
- "§9🏹 Archer"
- "§5🔮 Mage"
- "§a🗡️ Rogue"
- "§e🛡️ Paladin"
default: 0
show_condition: "not:placeholder:{has_character}:equals:true"
starting_stats:
type: "label"
text: "§7§l=== Starting Stats ===\n§cStrength: {class_strength}\n§9Agility: {class_agility}\n§5Intelligence: {class_intelligence}\n§aLuck: {class_luck}"
difficulty:
type: "dropdown"
text: "§7Difficulty Mode:"
options:
- "§a🟢 Easy (2x XP, 0.5x damage)"
- "§e🟡 Normal (1x XP, 1x damage)"
- "§c🔴 Hard (0.8x XP, 1.5x damage)"
- "§4💀 Nightmare (0.5x XP, 2x damage)"
default: 1
pvp_enabled:
type: "toggle"
text: "§7Enable PvP:"
default: false
starting_location:
type: "dropdown"
text: "§7Starting Location:"
options:
- "🏘️ Peaceful Village"
- "🌲 Dark Forest"
- "🏔️ Mountain Peak"
- "🏖️ Coastal Town"
- "🏜️ Desert Outpost"
default: 0
bonus_features:
type: "label"
text: "§7§l=== Bonus Features ===\n§eVIP Status: {vip_status}\n§aPremium Benefits: {premium_benefits}\n§bSpecial Abilities: {special_abilities}"
show_condition: "permission:character.premium"
accept_terms:
type: "toggle"
text: "§7I accept the character creation terms"
default: false
create_character:
type: "button"
text: "§a§l✨ Create Character"
onClick: "conditional:{accept_terms}:server:character create {player} {character_name} {character_class}:message:§c§lYou must accept the terms to create a character!"
show_condition: "not:placeholder:{has_character}:equals:true"
character_info:
type: "label"
text: "§7§l=== Current Character ===\n§eName: §b{character_name}\n§eClass: §d{character_class}\n§eLevel: §a{character_level}\n§eLocation: §6{character_location}"
show_condition: "placeholder:{has_character}:equals:true"
delete_character:
type: "button"
text: "§c§l💀 Delete Character"
onClick: "open:confirm_character_deletion"
show_condition: "placeholder:{has_character}:equals:true"
Advanced Examples
Complex Conditional Forms
BedrockGUI supports advanced conditional logic that allows forms to dynamically change based on player conditions. Here are three comprehensive examples:
1. Complex Conditional SIMPLE Form
Buttons appear or disappear based on multiple conditions:
main_hub:
type: "SIMPLE"
title: "§6§l⚡ Server Hub §7(Dynamic)"
description: "§7Welcome §e{player}§7!\n§7Balance: §a${balance}\n§7Rank: §b{rank}\n§7World: §e{world}\n\n§8Choose an option below:"
buttons:
# Always visible
spawn:
text: "§a§l🏠 Spawn"
image: "textures/blocks/grass"
onClick: "teleport:spawn"
# VIP-only button
vip_lounge:
text: "§6§l👑 VIP Lounge"
image: "textures/blocks/gold_block"
onClick: "teleport:vip_lounge"
show_condition: "permission:bedrockgui.vip"
# Rich players only (balance >= 10000)
premium_shop:
text: "§e§l💎 Premium Shop"
image: "textures/items/diamond"
onClick: "open:premium_shop"
show_condition: "placeholder:{balance}:>=:10000"
# World-specific buttons
survival_tools:
text: "§2§l🔨 Survival Tools"
image: "textures/items/iron_pickaxe"
onClick: "open:survival_menu"
show_condition: "placeholder:{world}:equals:survival"
# Time-based button (only during day)
daily_rewards:
text: "§6§l🎁 Daily Rewards"
image: "textures/items/chest"
onClick: "conditional:placeholder:{daily_claimed}:equals:false:economy:add:1000:message:§a§l+$1000 Daily Reward!:message:§e§lAlready claimed today!"
show_condition: "placeholder:{server_time}:>=:6:placeholder:{server_time}:<=:18"
# Multiple conditions (AND logic)
exclusive_area:
text: "§5§l🌟 Exclusive Area"
image: "textures/blocks/beacon"
onClick: "teleport:exclusive"
show_condition: "permission:bedrockgui.vip:placeholder:{level}:>=:25:placeholder:{playtime}:>=:100"
2. Complex Conditional MODAL Form
Buttons change text and behavior based on conditions:
confirmation_system:
type: "MODAL"
title: "§c§l⚠️ Dynamic Confirmation"
description: "§7Action: §e{action_type}\n§7Target: §b{target}\n§7Cost: §a${cost}\n§7Your Balance: §e${balance}\n\n§8Confirmation changes based on your status:"
buttons:
confirm:
# Button text and action change based on balance
text: "conditional:placeholder:{balance}:>=:{cost}:§a§l✅ Confirm Purchase:§c§l❌ Insufficient Funds"
onClick: "conditional:placeholder:{balance}:>=:{cost}:economy:remove:{cost}:server:give {player} {target} {amount}:message:§a§lPurchase successful!:message:§c§lInsufficient funds! Need ${cost}"
cancel:
# Cancel button with different messages for different user types
text: "conditional:permission:bedrockgui.vip:§6§l👑 VIP Cancel:§7§l❌ Cancel"
onClick: "conditional:permission:bedrockgui.vip:message:§6§lVIP cancellation - no penalty!:message:§7§lOperation cancelled."
3. Complex Conditional CUSTOM Form
Components hide, show, or change based on multiple conditions:
dynamic_profile:
type: "CUSTOM"
title: "§b§l👤 Dynamic Player Profile"
components:
# Basic info - always shown
player_info:
type: "label"
text: "§7Player: §e{player}\n§7Rank: §b{rank}\n§7Balance: §a${balance}\n§7Level: §6{level}"
# VIP-only settings section
vip_settings_label:
type: "label"
text: "\n§6§l👑 VIP Settings:"
show_condition: "permission:bedrockgui.vip"
# VIP nickname input
nickname:
type: "input"
text: "§6Nickname:"
placeholder: "Enter your custom nickname..."
default: "{nickname}"
show_condition: "permission:bedrockgui.vip"
# Rich player investment options
investment_label:
type: "label"
text: "\n§e§l💰 Investment Options:"
show_condition: "placeholder:{balance}:>=:50000"
investment_amount:
type: "input"
text: "§eInvestment Amount:"
placeholder: "Minimum $10,000..."
show_condition: "placeholder:{balance}:>=:50000"
# World-specific preferences
pvp_enabled:
type: "toggle"
text: "§2Enable PvP"
default: false
show_condition: "placeholder:{world}:equals:survival"
# Time-based daily goals
daily_goal:
type: "dropdown"
text: "§6Today's Goal:"
options:
- "§aMine 100 blocks"
- "§bKill 50 mobs"
- "§eEarn $5,000"
default: 0
show_condition: "placeholder:{server_time}:>=:6:placeholder:{server_time}:<=:22"
# Level-based advanced options
particle_effect:
type: "dropdown"
text: "§5Particle Effect:"
options:
- "§7None"
- "§eGold Sparkles"
- "§bWater Drops"
default: 0
show_condition: "placeholder:{level}:>=:30"
Advanced Show Conditions
Multiple Conditions (AND Logic)
Use multiple conditions separated by colons for AND logic:
show_condition: "permission:bedrockgui.vip:placeholder:{level}:>=:25:placeholder:{balance}:>=:10000"
Complex Conditional Actions in Text
Even button text can be conditional:
text: "conditional:placeholder:{balance}:>=:1000:§a§lRich Player Menu:§7§lBasic Menu"
Time-Based Conditions
show_condition: "placeholder:{server_time}:>=:6:placeholder:{server_time}:<=:18" # Day time only
show_condition: "placeholder:{server_time}:>=:20:placeholder:{server_time}:<=:6" # Night time only
Event-Based Conditions
show_condition: "placeholder:{event_active}:equals:halloween"
show_condition: "placeholder:{season}:equals:winter"
Benefits of Complex Conditional Forms
1. Dynamic User Experience
Forms adapt to each player's unique situation
Reduces clutter by hiding irrelevant options
Provides personalized interfaces based on rank, balance, world, etc.
2. Progressive Disclosure
Advanced features unlock as players progress
Prevents overwhelming new players with too many options
Creates a sense of progression and achievement
3. Context-Aware Interfaces
Different options available in different worlds
Time-sensitive features (daily rewards, flash sales)
Event-specific content that appears automatically
4. Efficient Resource Management
Only show expensive options to players who can afford them
Prevent unnecessary server commands for invalid actions
Reduce support tickets from confused players
Best Practices for Conditional Forms
1. Use Clear Condition Logic
# Good: Clear and specific
show_condition: "permission:shop.vip:placeholder:{balance}:>=:1000"
# Avoid: Too many complex conditions
show_condition: "permission:a:permission:b:placeholder:{x}:>=:1:placeholder:{y}:<=:10:placeholder:{z}:equals:value"
2. Provide Fallback Options
# Always provide alternatives for players who don't meet conditions
buttons:
vip_shop:
text: "§6§l👑 VIP Shop"
onClick: "open:vip_shop"
show_condition: "permission:shop.vip"
regular_shop:
text: "§7§l🛒 Regular Shop"
onClick: "open:regular_shop"
show_condition: "not:permission:shop.vip"
3. Use Conditional Text for Clarity
# Help players understand why options are available/unavailable
text: "conditional:placeholder:{balance}:>=:1000:§a§l💰 Rich Player Menu (${balance}):§c§l💸 Earn More Money (${balance})"
4. Test Edge Cases
What happens when a player has no permissions?
What if placeholder values are null or unexpected?
How does the form behave during server events?
5. Performance Considerations
Avoid too many complex conditions in a single form
Cache placeholder values when possible
Use efficient condition checking order (permissions before expensive placeholders)
Multi-Step Wizard Form
# Step 1: Basic Information
wizard_step1:
type: "CUSTOM"
title: "§e§l📋 Setup Wizard (1/3)"
components:
welcome:
type: "label"
text: "§7§lWelcome to the server setup wizard!\n§eThis will help configure your experience."
username:
type: "input"
text: "§7Preferred Display Name:"
placeholder: "Enter display name"
default: "{player}"
language:
type: "dropdown"
text: "§7Select Language:"
options:
- "🇺🇸 English"
- "🇪🇸 Español"
- "🇫🇷 Français"
- "🇩🇪 Deutsch"
- "🇯🇵 日本語"
default: 0
next:
type: "button"
text: "§a§l➡️ Next Step"
onClick: "open:wizard_step2"
# Step 2: Preferences
wizard_step2:
type: "CUSTOM"
title: "§e§l📋 Setup Wizard (2/3)"
components:
progress:
type: "label"
text: "§7§lStep 2: Preferences\n§aDisplay Name: §e{username}\n§aLanguage: §e{language}"
notifications:
type: "toggle"
text: "§7Enable Notifications:"
default: true
auto_save:
type: "toggle"
text: "§7Auto-save Progress:"
default: true
theme:
type: "dropdown"
text: "§7UI Theme:"
options:
- "🌞 Light Theme"
- "🌙 Dark Theme"
- "🌈 Colorful Theme"
default: 0
back:
type: "button"
text: "§c§l⬅️ Previous"
onClick: "open:wizard_step1"
next:
type: "button"
text: "§a§l➡️ Final Step"
onClick: "open:wizard_step3"
# Step 3: Completion
wizard_step3:
type: "CUSTOM"
title: "§e§l📋 Setup Wizard (3/3)"
components:
summary:
type: "label"
text: "§7§l=== Setup Summary ===\n§aDisplay Name: §e{username}\n§aLanguage: §e{language}\n§aNotifications: §e{notifications}\n§aAuto-save: §e{auto_save}\n§aTheme: §e{theme}"
terms:
type: "toggle"
text: "§7I agree to the server terms of service"
default: false
newsletter:
type: "toggle"
text: "§7Subscribe to server newsletter"
default: false
back:
type: "button"
text: "§c§l⬅️ Previous"
onClick: "open:wizard_step2"
complete:
type: "button"
text: "§a§l✅ Complete Setup"
onClick: "conditional:{terms}:server:player setup {player} {username} {language}:message:§c§lYou must agree to the terms of service!"
Dynamic Content Form
dynamic_shop:
type: "SIMPLE"
title: "§2§l🛒 Dynamic Shop - {shop_category}"
description: "§7Current deals: §e{active_deals} §7| Your balance: §a${balance}"
buttons:
featured_item:
text: "§6§l⭐ Featured: {featured_item_name}"
image: "textures/items/{featured_item_id}"
onClick: "conditional:placeholder:{balance}:>=:{featured_item_price}:open:purchase_confirm_{featured_item_id}:message:§c§lInsufficient funds! Need ${featured_item_price}"
show_condition: "placeholder:{featured_item_available}:equals:true"
daily_deal:
text: "§c§l🔥 Daily Deal: {daily_deal_name} (-{daily_deal_discount}%)"
onClick: "conditional:placeholder:{daily_deal_claimed}:equals:false:economy:remove:{daily_deal_price}:message:§e§lYou already claimed today's deal!"
show_condition: "placeholder:{daily_deal_active}:equals:true"
category_weapons:
text: "§c§l⚔️ Weapons ({weapon_count} items)"
onClick: "open:shop_weapons"
show_condition: "placeholder:{weapon_count}:>:0"
category_armor:
text: "§9§l🛡️ Armor ({armor_count} items)"
onClick: "open:shop_armor"
show_condition: "placeholder:{armor_count}:>:0"
vip_section:
text: "§d§l👑 VIP Exclusive ({vip_item_count} items)"
onClick: "open:shop_vip"
show_condition: "permission:shop.vip"
limited_time:
text: "§e§l⏰ Limited Time: {limited_item_name} ({limited_time_left})"
onClick: "conditional:placeholder:{limited_time_seconds}:>:0:open:purchase_limited_{limited_item_id}:message:§c§lThis offer has expired!"
show_condition: "placeholder:{limited_offer_active}:equals:true"
Best Practices
1. Form Design
Keep titles concise and descriptive
Use color codes consistently
Provide clear descriptions
Use appropriate icons/images
2. Action Chaining
Use delays between actions for better UX
Provide feedback for every action
Handle error cases gracefully
Use sounds to enhance experience
3. Conditional Logic
Always provide fallback actions
Test edge cases thoroughly
Use clear error messages
Validate user permissions
4. Performance
Avoid excessive action chains
Use appropriate delay times
Limit form complexity
Cache frequently used data
5. User Experience
Provide confirmation for destructive actions
Use consistent navigation patterns
Offer help/tutorial options
Support different player types (new/experienced)
6. Security
Validate all user inputs
Check permissions thoroughly
Sanitize placeholder values
Limit resource-intensive operations
Placeholder Support
BedrockGUI supports various placeholder types:
Built-in Placeholders
{player}
- Player name{player_world}
- Current world{player_health}
- Player health{player_x}
,{player_y}
,{player_z}
- Player coordinates{server_online}
- Online player count{server_max}
- Max player count{balance}
- Player balance (if economy enabled)
PlaceholderAPI Support
All PlaceholderAPI placeholders are supported when the plugin is installed:
%player_name%
- Player name%player_world%
- Current world%vault_eco_balance%
- Economy balanceAnd thousands more from various plugins
Note: PlaceholderAPI placeholders work in all contexts including:
Action data (messages, commands, etc.)
Conditional action conditions and values
Form titles, descriptions, and button text
Show conditions for buttons and forms
Form Result Placeholders
Results from custom forms can be used as placeholders:
{component_name}
- Value from form component{input_field}
- Text input value{toggle_state}
- Toggle true/false{dropdown_selection}
- Selected dropdown option
This guide covers all major features of BedrockGUI. For more advanced configurations and custom implementations, refer to the source code and example configurations provided with the plugin.
Last updated