Skip to main content

Bedrock Forms

Bedrock Forms allow you to display native Bedrock Edition UI forms to players connecting through Geyser/Floodgate. Instead of seeing a chest-based inventory, Bedrock players get a native form experience adapted to their platform.

Requirements

Bedrock Forms require Geyser or Floodgate to be installed on your server. zMenu uses the Floodgate API to detect Bedrock players and send forms.

File Location

Bedrock forms are stored in the plugins/zMenu/bedrock/ folder. Each YAML file represents one form.

plugins/zMenu/bedrock/
├── simple-form.yml
├── modal-form.yml
└── custom-form.yml

Form Types

zMenu supports three Bedrock form types:

TypeDescription
simpleA form with a title, optional content text, and a list of buttons
modalA confirmation form with a title, content text, and exactly 2 buttons
customA form with input fields (text, toggle, dropdown, slider, label)

Simple Form

A simple form displays a list of buttons the player can click. Each button can have an optional image.

Simple Form

Configuration

type: simple
name: "Simple Form"

buttons:
button1:
type: "bedrock_button"
text: "Button 1"
click-requirement:
1:
success:
- type: message
messages:
- "&aAction for button 1"
button2:
type: "bedrock_button"
text: "Button 2"
image-type: "URL"
image-value: "https://github.com/GeyserMC.png?size=200"
click-requirement:
1:
success:
- type: message
messages:
- "&aAction for button 2"
button3:
type: "bedrock_button"
text: "Button 3"
image-type: "PATH"
image-value: "textures/i/glyph_world_template.png"
click-requirement:
1:
success:
- type: message
messages:
- "&aAction for button 3"

bedrock_button

OptionTypeRequiredDescription
textStringYesThe button label displayed to the player
image-typeStringNoType of image: URL (web image) or PATH (resource pack texture path)
image-valueStringNoThe image URL or texture path
click-requirementSectionNoRequirements and actions executed when the button is clicked

The placeholder %content% is available in click actions and contains the form's content text.


A modal form is a simple confirmation dialog with a title, content, and exactly 2 buttons.

Modal Form

Configuration

type: modal
name: "Modal Form"
content: "Welcome to content"

buttons:
button1:
type: "bedrock_modal_button"
text: "Button 1"
click-requirement:
1:
success:
- type: message
messages:
- "Thank you for your feedback! text : %content%"
button2:
type: "bedrock_modal_button"
text: "Button 2"
click-requirement:
1:
success:
- type: message
messages:
- "We're sorry to hear that! Please let us know how we can improve. %content%"

bedrock_modal_button

OptionTypeRequiredDescription
textStringYesThe button label
click-requirementSectionNoRequirements and actions executed when clicked
info

A modal form must have exactly 2 buttons. If fewer than 2 are defined, the form will fail to load. If more than 2 are defined, only the first two will be used.

The placeholder %content% is available in click actions and contains the form's content text.


Custom Form

A custom form allows you to create a form with various input fields. The player fills in the form and submits it. The values of each input are available as placeholders using the button key name (%key%).

Custom Form

Configuration

type: custom
name: "Custom Form"

buttons:
# Label text (read-only)
label:
type: bedrock_label
text: "I love bedrock inventory."
# Text input
text:
type: bedrock_text
text: "Share your thoughts about our server:"
initial-value: "This server is amazing because..."
# Toggle (on/off)
toggle:
type: bedrock_toggle
text: "Would you like to receive server updates?"
initial-value: true
# Dropdown selection
dropdown:
type: bedrock_dropdown
text: "Choose your mode"
options:
option1:
id: "survival"
display: "Survival Mode"
initial: true
option2:
id: "creative"
display: "Creative Mode"
initial: false
option3:
id: "adventure"
display: "Adventure Mode"
initial: false
option4:
id: "pvp"
display: "PvP Arena"
initial: false
# Slider
slider:
type: bedrock_slider
text: "How many hours do you play per day?"
start: 1
end: 12
step: 1
initial-value: 3

actions:
1:
success:
- type: message
messages:
- "Thank you! text: %text%, toggle: %toggle%, dropdown: %dropdown%, slider: %slider%"

Input Button Types

bedrock_label

A read-only text label. Does not produce any value.

OptionTypeRequiredDescription
textStringYesThe label text to display

bedrock_text

A text input field where the player can type freely.

OptionTypeRequiredDescription
textStringYesThe label/placeholder text
initial-valueStringNoPre-filled default text

bedrock_toggle

An on/off toggle switch.

OptionTypeRequiredDescription
textStringYesThe toggle label
initial-valueBooleanNoDefault state (true or false, defaults to true)

bedrock_dropdown

A dropdown selection list.

OptionTypeRequiredDescription
textStringYesThe dropdown label
optionsSectionYesList of options

Each option has:

OptionTypeRequiredDescription
idStringNoThe value returned when selected (defaults to option key name)
displayStringYesThe text displayed in the dropdown
initialBooleanNoWhether this option is selected by default (only one can be true)

bedrock_slider

A numeric slider.

OptionTypeRequiredDescription
textStringYesThe slider label
startNumberNoMinimum value (default: 0)
endNumberNoMaximum value (default: 100)
stepNumberNoStep increment (default: 1)
initial-valueNumberNoDefault value (defaults to midpoint between start and end)

Custom Form Placeholders

In a custom form, each input value is available as a placeholder using the button's YAML key name. For example, if you have a button with key text, you can use %text% in the actions section.

Custom Form Actions

Unlike simple and modal forms where each button has its own click-requirement, custom forms use a shared actions section at the root level. These actions are executed when the player submits the form, with all input values available as placeholders.


Common Options

These options are available for all Bedrock form types.

name

The title displayed at the top of the form. Supports color codes and PlaceholderAPI placeholders.

name: "&6&lMy Form Title"

content

The text content displayed in the form body (used by simple and modal types).

content: "Welcome! Please make your choice."

open-requirement

Requirements that must be met before the form can be opened. If requirements are not met, the form will not open.

open-requirement:
requirements:
- type: permission
permission: "server.vip"
deny:
- type: message
messages:
- "&cYou need VIP to access this form!"

open-actions

Actions executed when the form is opened.

open-actions:
- type: message
messages:
- "&aOpening form..."

close-actions

Actions executed when the form is closed (either by submitting or closing without submitting).

close-actions:
- type: message
messages:
- "&7Form closed."

target-player-name-placeholder

Define a custom placeholder for the target player name, useful when opening the form for another player.

target-player-name-placeholder: "%player_name%"

view-requirement

Buttons in simple and modal forms support view-requirement to conditionally show or hide buttons based on conditions, similar to regular inventory buttons.


Inventory Replacement

You can automatically redirect Bedrock players to a Bedrock form when they try to open a regular inventory. This is configured on the regular inventory side using the inventory-replacement option.

# In your regular inventory file (e.g., inventories/shop.yml)
name: "&6Shop"
size: 54

inventory-replacement:
name: "shop-form" # Name of the Bedrock form file (without .yml)
plugin: "zMenu" # Plugin that owns the Bedrock form (default: zMenu)
pages: # Optional: only redirect on specific pages
- 1

items:
# ... regular inventory buttons for Java players

When a Bedrock player opens this inventory, they will automatically be redirected to the specified Bedrock form instead. Java players will see the regular inventory as usual.

OptionTypeRequiredDescription
nameStringYesThe Bedrock form file name (without .yml)
pluginStringNoThe plugin owning the form (default: zMenu)
pagesList of integersNoOnly redirect on these pages (empty = all pages)

Commands

CommandPermissionDescription
/zm bedrock open <name> [player] [display message]zmenu.open.bedrockOpen a Bedrock form
/zm bedrock reloadzmenu.reload.bedrockReload all Bedrock form files

The <name> argument accepts the format pluginName:formName or just formName.

Examples:

/zm bedrock open simple-form
/zm bedrock open zMenu:custom-form
/zm bedrock open modal-form Notch
/zm bedrock open simple-form Notch false
info

Bedrock forms can only be opened for Bedrock players (connected via Geyser/Floodgate). Attempting to open a form for a Java player will display an error message.


Bedrock Action

You can open a Bedrock form from a button action using the bedrock action type:

actions:
- type: bedrock
bedrock: "simple-form"

With external plugin:

actions:
- type: bedrock
bedrock: "custom-form"
plugin: "MyPlugin"

With arguments:

actions:
- type: bedrock
bedrock: "feedback"
arguments:
- "arg1"
- "arg2"
OptionTypeDescription
bedrockStringName of the Bedrock form file (without .yml)
pluginStringPlugin name if using an external form
argumentsListArguments to pass

Next Steps

Copyright © 2026 GroupeZ|Build #loading...|-