Bedrock Wiki
  • Discord
  • Contribute
  • bedrock.dev
  • MS Learn
Beginner's Guide
  • Guide
    • 1. Introduction
      guide
    • 2. Add-Ons Explained
    • 3. Software & Preparation
    • 4. Project Setup
    • 5. Create a Custom Item
    • 6. Create a Custom Entity
    • 7. Blockbench: Modeling, Texturing & Animating
    • 8. Adding a Loot Table, Spawn Rule & Crafting Recipe
  • Extra
    • a. Understanding JSON
    • b. Download Example Packs
    • c. Troubleshooting
      help
    • d. Advanced Manifest
    • e. Format Versions
    • f. Project Setup Android
Animation Controllers
  • Intro to Animation Controllers
    guide
  • Entity Commands
  • AFK Detector
  • Death Commands
  • Molang into Scoreboard
  • Respawn Commands
Blocks
  • General
    • Intro to Blocks
      guide
    • Block Components
    • Block Tags
    • Block States
    • Block Traits
    • Block Permutations
    • Block Events
      Scripts
    • Block Event Migration
      help
    • Blocks as Items
    • Troubleshooting Blocks
      help
  • Visuals
    • Block Culling
    • Block Models
      guide
    • Block Texture Animation
    • Block Texture Variation
    • Block Tinting
  • Tutorials
    • Applying Constant Effects
      Scripts
    • Avoiding State Limit
    • Fake Blocks
      Scripts
    • Ore Loot Tables
      Scripts
    • Precise Interaction
      Scripts
    • Precise Rotation
      Scripts
    • Rotatable Blocks
  • Vanilla Re-Creations
    • Custom Crops
      Scripts
    • Custom Glass
    • Custom Glazed Terracotta
    • Custom Trapdoors
      Scripts
  • Documentation
    • Block Format History
    • Block Shapes
    • Block Sounds
    • Vanilla Block Models
Commands
  • General
    • Intro to Command Blocks
    • Functions
    • Block States
    • Coordinate System
    • NBT Commands
    • Scoreboard Operations
    • Understanding Selectors
  • Commands
    • Damage
    • Execute
    • Playanimation
    • Playsound
  • On Event Systems
    • On Player First Join
    • On Player Join
    • On Player Leave
    • On Player Death
    • On Player Respawn
    • On First World Load
  • Scoreboard Systems
    • Entity Counter
    • Scoreboard Timers
    • Comparing And Retrieving Scores
  • Techniques
    • Execute Logic Gates
    • MBE - Max's Block Entity
    • FMBE - A New Way to Create Display Entities
    • Look Detection
    • Movement Detections
    • Orbital Camera
  • Useful Creations
    • Custom Crafter
    • Multiplayer Position Rearrangement
      function
Concepts
  • contents.json
  • Emojis & Symbols
  • Molang
  • Namespaces
  • Overwriting Assets
  • Raw Text
  • Shaders
  • Sounds
  • Subpacks
  • Text and Localization
  • Texture Atlases
  • textures_list.json
Documentation
  • Shared Constructs
  • Advanced Molang
  • File Types
  • Fog IDs
  • Material Configuration Description
  • Menu Categories
  • Molang Queries
  • Pack Folder Structure
  • Sound Definitions
  • Vanilla Materials
Entities
  • General
    • Intro to Entities BP
      guide
    • Intro to Entities RP
      guide
    • Troubleshooting Entities
      help
    • Entity Events
    • Entity Properties
    • NPC Dialogues
    • Render Controllers
    • Spawn Rules
  • Tutorials
    • Convert Points Between Any Space (World, Entity, Bones)
    • Creating Boats
    • Detecting Other Entities
    • Disabling Team Damage
    • Dummy Entities
    • Entity Attacks
    • Entity Holds Item
    • Entity Movement
    • Entity Timers
    • Flying Entities
    • Introduction to AOE Clouds
    • Invulnerable Entities
    • Look at Entity
    • Sleeping Entities
    • Solid Entities
    • Spawning Tamed Entities
      Scripts
    • Village Mechanic
  • Documentation
    • Dummy Components
    • Non-Mob Runtime Identifiers
    • Projectiles
    • Runtime Identifiers
    • Vanilla Usage Components
    • Vanilla Usage Spawn Rules
Items
  • General
    • Intro to Items
      guide
    • Item Components
    • Item Tags
    • Item Events
      Scripts
    • Item Event Migration
      help
    • Troubleshooting Items
      help
  • Tutorials
    • Custom Armor
    • Custom Food
      Scripts
    • Custom Pottery Sherds
    • Custom Weapons
    • Equipment-Based Commands
    • High Resolution Items
    • Spawning Items
    • Throwable Items
  • Documentation
    • Enchantments
    • Attachables
    • Item Format History
    • Numerical Item IDs
    • Vanilla Item Identifiers
    • Vanilla Usage Components
JSON UI
  • General
    • Intro to JSON UI
      guide
    • Best Practices
      guide
  • Tutorials
    • Adding HUD Elements
    • Aseprite Animations
    • Buttons and Toggles
    • Modifying Server Forms
    • Preserve Title Texts
    • String to Number
  • Documentation
    • JSON UI Documentation
Loot, Recipes & Trading
  • General
    • Trading Behavior
  • Documentation
    • Loot Tables
    • Trade Tables
    • Recipes
    • Item Functions
  • Tutorials
    • Randomized Structure Loot
Meta
  • Add-On Performance
  • Style Guide
  • Useful Links
  • Using Schemas
  • Version Control
  • Q&A
    • Blocks and Items Q&A 2024/08/30
    • Deferred Technical Preview Q&A 2024/02/23
    • GameTest Q&A 2021/08/06
    • Scripting and Editor Q&A 2023/09/22
    • World Generation Q&A 2024/11/15
NBT
  • General
    • .mcstructure
  • Tutorials
    • Experiments in Education Edition
    • Extending Structure Limits
  • NBT in Depth
    • About NBT (Named Binary Tag)
    • NBT Libraries
    • Reading NBT Example
Particles
  • General
    • Intro to Particles
      guide
  • Tutorials
    • Disabling Particles
  • Documentation
    • Vanilla Particles
Scripting
  • General
    • Intro to Scripting
    • What is Script API?
    • API Modules
  • Tutorials
    • Block Placement Prevention
    • GameTests
    • Script Core Features
    • Script Forms
    • Script Requests API
    • Simple Chat Commands
  • Documentation
    • Engine Environment
    • Script Resources
    • Script Watchdog
    • Troubleshooting JavaScript
    • TypeScript
Servers
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet Protocol
    • RakNet Protocol
Visuals
  • General
    • Introduction to Entity Visuals
      guide
    • Bedrock Modeling
    • Custom Death Animations
    • Effects in Animations
    • Material Creations
    • Materials
    • Math-Based Animations
    • Skin Packs
  • Tutorials
    • Entity Texture Animation
    • Glowing Entity Texture
    • Hurt Animations
    • Leash Position
    • Player Geometry
    • Remove Entity Shadows
    • Retexturing Spawn Eggs
  • Ideas
    • Structure Presentation
World Generation
  • General
    • Intro to World Generation
      guide
    • Biomes
      guide
    • Feature Types
    • Jigsaw Structures
  • Tutorials
    • Block Conditions for Features
    • Generating Custom Ores
    • Generating Custom Structures
    • Generating Patches
    • Heightmap Noise
  • Documentation
    • Biome Tags

Buttons and Toggles

beginner
Buttons and Toggles
  • Introduction
    • Toggles
    • Buttons
  • Advanced Buttons and Toggles
    • Hover Text
    • Play Animation

Introduction ​

WARNING

This page is intended for people with a basic understanding of JSON-UI, you may check the JSON UI Documentation if you haven't already.

Creating custom buttons or toggles is a common question regarding JSON-UI. This guide explains how they work and provides step-by-step instructions for creating them.

For this tutorial, we will use the existing vanilla buttons and toggles for simplicity.

Toggles ​

In this example, we will reference ui/ui_template_toggles.json

RP/ui/your_file.json
json
{
  "our_toggle@common_toggles.light_text_toggle": {
    "size": [
      64,
      32
    ],
    "$button_text": "Click me!",
    "$toggle_name": "wiki_toggle", // Required, but it has no effect unless a hardcoded toggle name is used.
    "$toggle_view_binding_name": "wiki_toggle_state" // The toggle name that allows us to retrieve data.
  }
}
1
2
3
4
5
6
7
8
9
10
11

And that's it! You now have a working toggle. You can test it by adding it to any screen.

Additionally, you can utilize toggles to control the visibility of UI elements.

RP/ui/your_file.json
json
{
  "our_toggle@common_toggles.light_text_toggle": {
    "size": [
      64,
      32
    ],
    "$button_text": "Click me!",
    "$toggle_name": "wiki_toggle", // Required, but it has no effect unless a hardcoded toggle name is used.
    "$toggle_view_binding_name": "wiki_toggle_state" // The toggle name that allows us to retrieve data.
  },
  "our_image": {
    "type": "image",
    "texture": "textures/items/apple",
    "size": [
      16,
      16
    ],
    "offset": [
      0,
      20
    ],
    "bindings": [
      {
        "binding_type": "view",
        "source_control_name": "wiki_toggle_state", // // The toggle name specified in the $toggle_view_binding_name
        "source_property_name": "#toggle_state", // The binding data that returns the toggle state as a boolean value
        "target_property_name": "#visible"
      }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Buttons ​

Generally, buttons have limited functionality, as they are primarily used in hardcoded instances, such as navigating to a screen or opening a dialog.

In this example, we will reference ui/ui_template_buttons.json

RP/ui/your_file.json
json
{
  "our_button@common_buttons.light_text_button": {
    "size": [
      64,
      32
    ],
    "$button_text": "Click me!",
    "$pressed_button_name": "button.menu_exit" // Required, you can put in any global button names or hardcoded button names.
  }
}
1
2
3
4
5
6
7
8
9
10

And that's it! You now have a working button, clicking on it exits you to the current screen you're in. You can test it by adding it to any screen.

Advanced Buttons and Toggles ​

Hover Text ​

In order to make buttons that shows a text when you hover into it, we will need to use Content Buttons.

In this example, we will reference ui/ui_template_buttons.json and ui/ui_common.json

RP/ui/your_file.json
json
{
  "our_button@common_buttons.light_content_button": {
    "size": [
      18,
      18
    ],
    "$button_content": "namespace.our_button_content_panel", // Reference our content element.
    "$pressed_button_name": "button.menu_exit" // Required, you can put in any global button names or hardcoded button names.
  },
  "our_button_content_panel": {
    "type": "panel",
    "controls": [
      {
        "our_image": {
          "type": "image",
          "texture": "textures/items/apple",
          "size": [
            16,
            16
          ]
        }
      },
      {
        // You can use any element but we'll just use the hover text when you hover an item in-game.
        "our_hover_text@common.hover_text": {
          "ignored": "$default_state", // Required, this will make the element not visible if the button is in a default state or isn't hovered.
          "property_bag": {
            "#hover_text": "" // You can put your text here. It doesn't support localizing so if that's what you are looking to do, create a custom hover text.
          }
        }
      }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

Play Animation ​

If you want to play an animation when you click a button, you have to use $pressed_button_name in your animation's play_event property.

For example:

RP/ui/your_file.json
json
{
    "example_animation": {
        "anim_type": "offset",
        "easing": "linear",
        "duration": 2,
        "from": [
            0,
            0
        ],
        "to": [
            -50,
            0
        ],
        "play_event": "button.example_button_id"
    },
    "example_button@common_buttons.light_text_button": {
        "$pressed_button_name": "button.example_button_id", // use this button id in play_event property of your animation
        "$button_text": "Play Animation",
        "size": [
            80,
            20
        ]
    },
    "example_label": {
        "type": "label",
        "text": "Example Text",
        "anims": [
            "@namespace.example_animation" // add your animation here
        ],
        "anchor_from": "top_right",
        "anchor_to": "top_right"
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

Contributors

Edit Buttons and Toggles on GitHub

Bedrock Wiki by Bedrock OSS

"Minecraft" is a trademark of Mojang AB.

Bedrock OSS, Bedrock Wiki and bedrock.dev are not affiliated in any way with Microsoft or Mojang AB.

  • Privacy Policy
  • Join our Discord
  • Learn how to Contribute
  • Visit our Repository