FancyMenu lets you add interactivity to your menus by assigning actions to elements. These actions run when a button is clicked, ticker is ticking, slider gets used, or when a screen opens or closes. You can also build advanced action scripts using simple control statements, such as if, else-if, else, and while, to control which actions run and when.
An action is a task or job that FancyMenu runs when triggered. For example, an action might open a new screen, send a chat message, or adjust the volume of an audio element. In FancyMenu's editor, actions are configured with a value (if needed) that provides extra details—such as a URL or server address.
To create more complex behavior, FancyMenu supports basic control statements in action scripts. These include:
By combining these statements with actions, you can build dynamic and conditional behavior, for example, checking if a player's health is low before sending a warning message or repeating an update until a condition changes.
Action scripts are versatile and can be used throughout your layout. You can assign them, for example, to:
Action values support dynamic content through placeholders. Most of the time these placeholders use a JSON-like syntax and are replaced with live data when the action runs.
These are the normal placeholders that can be used in many places throughout layouts.
They follow this syntax:
{"placeholder": "placeholder_id", "values": {"key1": "value1", "key2": "value2"}}
They can fetch game data like the player's name, screen dimensions, or calculated values using the Calculator placeholder. You can also nest placeholders for more advanced uses.
$$ Placeholders (Variables)The $$ placeholders are special. Some features of FancyMenu will provide these special placeholders for their nested actions, requirements and normal placeholders, so they can be used inside to get more information about the environment (element, listener, etc.) they are in.
For example, if actions are used within a slider, using $$value in the action will be replaced with the slider's current value.
When using actions in listeners, every listener will provide its own unique set of variables/placeholders for getting more information about the listener, like pressed mouse button, entered structure, etc.
To add, edit, or remove actions (and statement blocks) for an element, simply right-click the element (whether it's a button, slider, ticker, or other interactive item) and then select Manage Action Script. This opens the Manage Actions screen, where you can:
For listeners there is a special menu to manage and create listeners, including accessing their action scripts to have the same experience as when editing a button's or slider's action script for example.
When in the Action Script Editor screen, just right-click the big dark-grey area to open a context menu for adding actions, statements and more.
The action script editor has some great QoL features making script editing super easy.
DEL : Quick-delete the selected entryENTER : Starts the in-line editing of the selected entry (or opens the edit screen if there is not in-line edit for the selected entry)CTRL + C : Copy the selected action (only works with actions for now)CTRL + V : Paste the previously copied actionCTRL + Z : One step back (undo)CTRL + Y : One step forward (redo)ARROW UP : Navigate one entry up from the currently selected oneARROW DOWN : Navigate one entry down from the currently selected oneSHIFT + ARROW UP : Move the selected entry one upSHIFT + ARROW DOWN : Move the selected entry one downA : Quick-open the Action Chooser screen to add a new actionThis list contains most, if not all, actions available in FancyMenu. It's possible that the list is a bit outdated sometimes due to updates of the mod.
audio_next_track)audio_element_identifier (the ID of the audio element to control)audio_previous_track)audio_element_identifier (the ID of the audio element to control)set_audio_element_volume)element_identifier:volumeaudio_toggle_play)audio_element_identifierset_video_element_volume)video_element_identifier:volumetoggle_video_element_pause_state)video_element_identifierset_video_menu_background_volume)background_identifier:volumeTo get the identifier of a background, right-click the editor background and click on 'Copy Background Identifier'.
toggle_video_menu_background_pause_state)background_identifierTo get the identifier of a background, right-click the editor background and click on 'Copy Background Identifier'.
toggle_layout)layout_nameenable_layout)layout_namedisable_layout)layout_nameopengui)screen_identifierThis action will not work for every screen, especially mod screens. If the action fails to open a screen, it will show an error. There is not much you can do in that case, because then it's probably a screen that is too complex to get opened automatically by FancyMenu.
Compatibility for mod screens will also not get added manually on FancyMenu's side anymore, because adding compatibility for all the mods out there would take ages, sorry. In most cases it is also not recommended to contact the dev of the other mod in that case, because if FancyMenu can't open the screen, there is not easy way to add support for it. The recommended workaround here is to try to use the "Mimic Vanilla/Mod Button" action to mimic a button that opens the specific screen. If there is no button, then you're out of luck, sorry.
closegui)update_screen)back_to_last_screen)joinserver)server_ip:portloadworld)world_folder_namejoin_last_world)disconnect_server_or_world)screen_identifierquitgame)sendmessage)message_text or /command_textpaste_to_chat)true:Text or false:Textdisplay_in_chat_client_side)text_or_jsonopenlink)https://example.comcopytoclipboard)text_to_copyprint_to_log)text_to_logset_variable)variable_name:variable_valueclear_variables)send_http_request)This action allows you to send data to REST APIs, webhooks, or any HTTP endpoint.
Supports various authentication methods, custom headers, and different request types.This action also allows you to store the response of the request in a FancyMenu variable for later use!
manage_resource_pack)pack_name|||MODE|||reload_boolreload_resource_packs)reloadmenu)This action has a big impact on performance and can cause lags if used in Tickers. It is not recommended to use this action in anything else than a button.
toggle_element_animator)animator_identifierenable_element_animator)animator_identifierdisable_element_animator)animator_identifierreset_element_animator)animator_identifiermimicbutton)screen_identifier:widget_locatormimic_keybind)keybind_id|||keep_pressed_bool|||duration_mscreate_file_in_game_dir).minecraft/ prefix to target the default launcher profile directory (may differ from the current instance dir).file_pathdelete_file_in_game_dir).minecraft/ prefix to hit the default launcher profile (can differ from the running instance). Append * to delete all files directly inside a folder (ignores sub-directories; keeps the folder).target_pathcopy_file_in_game_dir).minecraft/ prefix targets the default launcher profile (not always the current instance). Append * to the source path to copy every file directly inside that folder (ignores sub-directories); destination must be a directory and cannot use *.source||destinationmove_file_in_game_dir).minecraft/ prefix targets the default launcher profile (may differ from the current instance). Append * to the source path to move every file directly inside that folder (ignores sub-directories); destination must be a directory and cannot use *.source||destinationrename_file_in_game_dir).minecraft/ prefix targets the default launcher profile (may differ from current instance). Keeps contents intact, only the name changes.path||new_namedownload_file_to_game_dir).minecraft/ prefix targets the default launcher profile (not necessarily the running instance). Provide the target folder; filename is derived from headers/URL automatically.url||target_folderwrite_file_in_game_dir).minecraft/ prefix targets the default launcher profile (may differ from this instance). Creates the file if missing. Supports \n in the value to insert line breaks; append mode controlled by the final boolean.path|||content|||append_boolselect_file_to_game_dir).minecraft/ when prefixed (that default may differ from this instance). Supports extension filters, custom filter label, and optional overwrite toggle.show_toast)edit_minecraft_option)option_name:set_to_value