FancyMenu v1.6.X

Documentation for FancyMenu v1.6.X.

1.6.X | Home

Getting started

First things first, thank you for trying out FancyMenu!

The Full Dose

Well, I see, you're a bit special.
If you want to have full control over what your menu layout does and don't want a mod to do all the work for you, you should check out the pages to manually write layouts!

1.6.X | FAQ

About

Here you can find frequently asked questions about FancyMenu.
Please read this before asking anything.

Frequently Asked Questions

What is FancyMenu?

FancyMenu is a forge-based minecraft mod to customize the look and feel of menus in the game, including adding new elements to menus.

How to get rid of the customization buttons at the top of menus?

You can toggle its visibility by pressing CTRL + C (by default; changeable in settings) or by changing "showcustomizationbuttons" in the config to "false".

How can I customize menus?

If you're new to FancyMenu, please take a look at the wiki. It will help you to understand how FancyMenu works and how to make your menus awesome!

What does term X mean?

If you don't know what's the meaning of one of FancyMenu's special terms, you can check out the FancyMenu Slang page.

Can I use FancyMenu in my modpack?

Yes! You can freely use FancyMenu without any special requirements!

Resizing the minecraft window or changing the scale destroys my layout, what can I do?

You're probably using different/wrong orientations for your elements. Always use the same orientation for elements that should stay in the same position to each other. Take a look at the wiki if you want to learn more about orientations.

So if you want to, let's say, have all buttons centered in the middle of the screen with always the same space between each other, the best orientation for all of these buttons would be the "mid-centered" orientation. (All buttons need to have this orientation!)

What's a good place to ask for help about FancyMenu?

I'm very active in discord and will give my best to help you with your problem!

Menus of another mod are acting weird with FancyMenu installed, what can I do?

This means, the other mod is not fully compatible with FancyMenu.
In this case, please disable customizations for this menu.

The mod is crashing my game! What's wrong?

I'm sorry to hear that! I always try to make FancyMenu as stable as possible, but if you encounter an error or crash, please open a bug report ticket with detailed informations about what happened and I will give my best to help you and fix the bug!

I have a nice idea, how can I suggest it to you?

That's great! If you have an idea for FancyMenu, please open a feature request!

Where can I share my cool menu with the community?

You can share your creations in r/fancymenu or via discord!

Will you backport the mod to MC version X?

It's possible that I backport FancyMenu to more older versions in the future, but asking me will not make the porting-process any faster.
You will know it when you see the download on the CurseForge page.

Why isn’t it possible to remove the mojang copyright text in the main menu?

I will not touch copyright notices for obvious reasons.

You can change its position via the mod config, but it's not possible to remove it.

The menu I want to edit doesn’t show my customizations, what’s wrong?

If customizations or config options does not affect a menu, it is possible that a mod is overriding the specific menu, which could make it incompatible with FancyMenu. In that case, check the menu identifier of the menu (you can find it by clicking on the "Menu Info" button) and open a bug report ticket with your problem. Please include the menu identifier in your report. Thank you!

Where can I check if my other mods are compatible with FancyMenu?

There is a list of incompatible mods in the wiki you can check out!
Of course, this list is not completed, but it's a good start to find why something is not working as expected!

Why can't I customize buttons of Optifine menus?

Optifine menus are not fully supported by FancyMenu. You can use all customization actions on these menus, but button modifications are disabled because this would break the menu's functionality.

This also includes the video settings menu when Optifine is installed, because Optifine overrides this menu.

1.6.X | Incompatibility List

List of Incompatible Mods

The following mods are known as incompatible with FancyMenu.

If you’ve found an incompatible mod which isn’t already in the list, please report it to me.

[FORGE] Incompatible Mods:

[FABRIC] Incompatible Mods:

1.6.X | FancyMenu Slang

About

This page explains some of the commonly used special terms of FancyMenu.

Terms and its Meanings

Layout

Layouts are (mostly bundled) customizations you apply to a menu screen. For example, when you move a button, hide another one and save these customizations to a customization file (manually or by using the layout editor), this customization file will be a layout.

Layout File | Customization File

Layout files (aka. "customization files") are files that contain all important informations for a layout. These files will be automatically generated when using the layout editor. You can manually edit these files or completely create one on your own, by opening it with a normal text editor.

Layout Editor | Layout Creator

The layout editor, previously known as "layout creator", is a fully functional GUI to create and edit your minecraft menus. No special knowledge is needed, you can think about it like a Paint for minecraft menus.

Customization Actions

Customization actions are basically all customizations you can use to modify a menu. For example, when you move a button, you're using the movebutton customization action. I know, this can be a little confusing for people who only use the layout editor to create layouts, but the layout editor is using them too, you just don't see it.

Button Actions

Button actions are used to specify what a custom button should do when clicking it.

Menu Identifier

In FancyMenu, every menu in Minecraft has a menu identifier. This identifier is used to identify the menu you want to customize or to use in a customization action. Menu identifiers of vanilla and mod menus are generated by FancyMenu and can be different from version to version. For example, most of the menu identifiers for MC 1.12 are different to the menu identifiers in MC 1.13+.

You can get the menu identifier for a menu by using the Menu Info option in the customization helper.

1.6.X | Customization Helper

About

The customization helper contains everything you can do ingame with FancyMenu.

All of these features are reachable by using the small menu in the upper-right corner of your menus.

1

The Reload Button

This button reloads the currently displayed menu to apply changes made to customization files (layouts).
It also reloads the mod config (allowing you to change config settings without restarting the game), updates button scripts and more.

It does not apply changes made to animations.
You have to restart your game after changing or creating animations.

Using the Customization Helper

The "Customization" button is a dropdown-menu containing many features to manage and customize your menu screens, allows you to create custom GUIs and much more!

4
(The image can be different from how this menu looks like now!)

Customization On/Off

The first option in the customization dropdown toggles the customization system for the current menu.
By default, all menus are disabled and will not show any layouts and customizations you create for them.
To change this for a menu, simply switch this option to On by leftclicking it.
Now you will be able to click the previously disabled buttons in the dropdown and you can customize this menu.

Customization Toggle

Menu Info

This feature will show you the menu identifier for the current menu, in the upper-left corner of the menu.

You can leftclick the menu identifier to copy it to your clipboard.

4

Button Info

This one, when activated by clicking on it, will show you useful informations about a vanilla button, when you hover over it.

3

Create Layout

This button will open the layout editor allowing you to create your own layout for the currently displayed menu in a fully functional GUI editor.

7

Edit Layouts

Just like the "Create Layout" button, this one will open the layout editor and allows you to edit the active layouts for the currently displayed menu.

Manage Layouts

This menu will show you all layouts for the currently displayed menu.
It includes both active and inactive/deactivated layouts.

You can toggle them on and off and delete layouts you no longer need.

Create GUI

This option can be used to create a custom GUI base.

5

Custom GUIs

This button will open a popup menu containing all custom GUIs you've created.
Here you can manage your custom GUIs. You can delete unwanted GUIs or open one to customize it with the layout editor.
It's possible that you have too much GUIs to display in this list. In this case you can use the "Open By Name" and "Delete By Name" buttons at the top of the GUI popup menu.

Custom GUIs

Override With

This feature allows you to override the currently displayed menu with one of your custom GUIs.
This menu will be empty if you do not have any custom GUIs.

Override With

If you have to many custom GUIs to display all of them in the popup menu, you can use the "Pick By Name" option to manually choose a custom GUI by its name.

1.6.X | Layout Editor

About

The layout editor is a fully functional GUI editor, modded into Minecraft, allowing you to edit menu screens like you would edit an image in the image editor of your choice.

It imitates its big editor siblings in many things like shortcuts and menu design.

Reaching the Layout Editor

You can reach the layout editor by using the customization helper.

Using the Layout Editor

Using the layout editor is just as simple as using Paint!

When you open the layout editor, you will see a menu containing (mostly) all buttons from the menu you want to edit, but they are not real ones, you can't accidentally click them and open another menu or something.

The Side Menu

One of the first things you will see in a new editor screen is the little arrow on the left side of the screen.
This is the collapsed side menu. You can leftclick this arrow to show the menu.

2

The Add button opens a popup menu with all types of objects you can add to a menu screen.

3

The Hidden button contains all your hidden vanilla buttons.
Leftclicking one of them will make it visible again.

4

Audio contains all background audio files you've added to the menu.
Leftclicking one of them allows you to manage it. You can set it to loop-mode mode and delete it.

5

Save will let you save your created layout and Close closes the layout editor.
Both actions needs to be confirmed to prevent you from accidentally closing the editor.

6

Layout Options

You can reach the layout options by rightclicking the background of the layout editor.

This will open a popup menu with options to:

7

Object Options

The object options can be reached by rightclicking any visible object in your layout.
Every type of object has different object options, allowing you to customize and delete the object.

8

Understanding Object Orientations

Every object in your layout has an orientation.
By default, this is always the top-left orientation for all objects you've added to a layout and always the original orientation for vanilla (and mod) buttons that were already part of the menu.

You can change the orientation of an object by rightclicking the object and clicking on "Set Orientation".

9

Your object will then be moved to the origin point of your choosen orientation, which shows you from where its position will be calculated.
It depends on its orientation how an object will act when resizing the window. You can easily test this by resizing the layout editor window.

If your object should always be near the bottom-right area of the menu, you should choose the bottom-right orientation for this object.
If it should be centered in the middle of the screen, try the mid-centered orientation.

The best way to understand the real behavior of orientations is by trying out different orientations for objects and resize the window.

Handling Stacked Objects

Sometimes, multiple objects will be on the same position, making it impossible to reach the object in the background.

Every object in the layout editor has its own layer. You will not really recognize this, until you need it.

By rightclicking an object stack and clicking on the Choose Layer button, you will be able to choose between every object at the position of your mouse.

10

Shortcuts

The layout editor has some very useful and well known shortcuts to quickly navigate through it.

CTRL + ALT + Z

This shortcut will undo the last thing you've changed in the layout.

CTRL + ALT + Y

This shortcut will redo the last step if you've previously used the CTRL + ALT + Z shortcut.

DEL

When an object is focused, you can press DEL to quickly delete the object.

Arrow Keys

You can move focused objects by using the arrow keys.

SHIFT-Click

When pressing SHIFT while resizing an object, it will be resized by its aspect ratio.

1.6.X | Menu Customization

About

The menu customization system allows you to customize nearly every menu in the game, even menus from other mods!

NOTE: This documentation page is focused on manually creating layouts for menus. If you don't want to do this, you can use the layout editor to edit menus ingame with a GUI, like you know it from all the fancy editing softwares out there.

Getting started

Customizations are applied to menus by writing them into customization files.

To make it as simple as possible, the file type of said customization files is "TXT" (e.g. mainmenu.txt).
You can create one by right-clicking into a folder and click on New -> Textfile.

So before starting to customize a menu, its necessary to create a customization file for the menu you want to edit in /.minecraft/config/fancymenu/customization/.

Customize menus

After you created a new customization file, you can start to fill it with stuff!

The basic layout of every menu customization file should be:

type = menu

customization-meta {
  identifier = the.identifier.of.your.menu
  renderorder = background
  requiredmods = optifine, chisel
}

customization {
  action = the_action_type
  variable = some_value
  other_variable = some_other_value
}

customization {
  action = another_action_type
  variable = some_value
}

On top of every customization file has to be its type. For now, there's only one type (menu).

The type variable is followed by the customization-meta. This section starts with customization-meta { and ends with }.

There are several variables you can put into this section:

Variable Assignable value(s) Mandatory Description Examples
identifier The menu identifier. Yes The identifier of the mod you want to customize. You can find it by clicking on the "Menu Info" in the top-left corner of a menu. identifier = the.menu.identifier
renderorder background/foreground No Specifies if all customizations of this file should be rendered behind or on top of all default objects in the menu. renderorder = background
minimummcversion The minimum minecraft version. No If you want to limit your file to specific Minecraft versions, use this. minimummcversion = 1.14.4
maximummcversion The maximum Minecraft version. No " maximummcversion = 1.15
minimumfmversion The minimum FancyMenu version. No If you want to limit your file to specific FancyMenu versions, use this. minimumfmversion = 1.0
maximumfmversion The maximum FancyMenu version. No " maximumfmversion = 1.0.2
requiredmods Required mods, separated by commas. No Specify mods which have to be loaded for the customization file to work. You have to use the mod's mod-id here. requiredmods = amodid, anothermodid
biggerthanwidth The minimum window width. No Can be used to activate/load the layout only if the window width is bigger than the specified value. biggerthanwidth = 1000
biggerthanheight The minimum window height. No Can be used to activate/load the layout only if the window height is bigger than the specified value. biggerthanheight = 800
smallerthanwidth The maximum window width. No Can be used to activate/load the layout only if the window width is smaller than the specified value. smallerthanwidth = 600
smallerthanheight The maximum window height. No Can be used to activate/load the layout only if the window height is smaller than the specified value. smallerthanheight = 500

The most important of all these is the identifier variable.
This variable specifies the menu type you want to customize by its "menu identifier".
For example, the identifier for the main menu in Minecraft 1.15.2 is net.minecraft.client.gui.screen.MainMenuScreen.
The menu identifier can be found by clicking on "Menu Info". This button can be found in the top-right "Customization" dropdown menu of supported menus, if not disabled in the config.

NOTE: The identifier for the same type of menu is NOT always the same for different versions of Minecraft and mods you want to customize!

After telling the system which menu you want to customize, the REAL customization part begins.
Every customization section starts with customization { and ends with }.

Customization sections always contains an action variable like movebutton to specify what you want to do in this section.

Other customization variables in sections can variate. They depend on the action type you choose for your section and can be everything (e.g. name or orientation).

A working customization section to add a texture to a menu can look like this:

customization {
  action = addtexture
  path = mytextures/custom_texture.jpg
  orientation = top-centered
  width = 200
  height = 200
  x = -100
  y = 20
}

Customization sections are shortable and it's not needed to add every possible variable for an action to every section, if not needed.
Many variables have default values, like width and height for textures or scale for textlines.

You can add as many customization sections to one file as you want and the best thing is, customization files are stackable, so you can split actions for the same menu type to multiple files.
If two files contain the same action for the same object, the action of the last scanned file overrides the previous ones.

Action types and its variables

animatebackground

Add animations as menu background.

Variable Assignable value(s) Mandatory Description Examples
name The animation name(s). Yes The name you gave your animation in its properties. If you want to add multiple animations, separate the names by commas. name = someanimation
----
name = someanimation, anotheranimation
random true/false No If the animations should randomly switch between each other every time the menu gets loaded. (Only if more than one animation is defined) random = true

setbackgroundpanorama

Set a custom 6-image panorama cube as menu background.

Variable Assignable value(s) Mandatory Description Examples
name The panorama name. Yes The name you gave your panorama in its properties file. name = your_panorama_name

texturizebackground

Add a static image as menu background.

Variable Assignable value(s) Mandatory Description Examples
path The image path. Yes Specifies the image path. The image should be inside "config/fancymenu". path = images/image.jpg
wideformat true/false No If the image is a wide format/panoramic image or not. Panoramic images will slowly move from one side to the other. wideformat = true

overridemenu

Override a menu with a custom GUI.

Variable Assignable value(s) Mandatory Description Examples
identifier The custom GUI identifier Yes The identifier of the custom GUI you want to override the menu with. identifier = mycoolmenu

addaudio

Add audio to menus which will start playing when the menu loads.

Variable Assignable value(s) Mandatory Description Examples
path The audio path. Yes Specifies the audio path. The audio should be inside "config/fancymenu". Only WAV files are supported! path = myaudios/audio.wav
loop true/false No If the audio should be looped or not. loop = true

addbutton

Add a custom button to a menu and use it to send messages, open links and much more!

Variable Assignable value(s) Mandatory Description Examples
label The button label. No The label of the button. label = My Button
buttonaction The buttonaction Yes Specifies what the button should do when clicked. buttonaction = openlink
value The button action content. Not for every button action, but for some of them. The content which will be used by the button action. May be not needed for specific actions. value = https://google.de
backgroundnormal Path to texture No (Yes, if "backgroundhovered" is used) Sets a custom button background texture for the normal (not hovered) button state. backgroundnormal = path/to/texture.png
backgroundhovered Path to texture No (Yes, if "backgroundnormal" is used) Sets a custom button background texture for the hovered (mouse over) button state. backgroundhovered = path/to/texture.png
hideforseconds Delay in seconds No Delay the appearance of a button. Decimal values are supported! hideforseconds = 2
----
hideforseconds = 0.3
delayonlyfirsttime true/false No If the button's appearance should only be delayed the first time it gets loaded or everytime. delayonlyfirsttime = true
onlydisplayin outgame/singleplayer/multiplayer No If the button should only be visible in singleplayer, multiplayer or outgame (when no world is loaded). onlydisplayin = singleplayer
clicksound Path to click sound No Set a custom click sound to the button. ONLY WAV FILES ARE SUPPORTED! clicksound = path/to/sound.wav
description Button description No Set a description to the button that will be displayed when hovering it. Format code &n will switch to a new line. description = Hey, what's up?&nI'm a button!

setbuttontexture

Customize the background texture of DEFAULT (not custom) buttons.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
backgroundnormal Path to texture Yes The normal button background (not hovered). backgroundnormal = path/to/texture.png
backgroundhovered Path to texture Yes The hovered button background (mouse over button). backgroundhovered = path/to/texture.png

clickbutton

Automatically click default menu buttons X times when the menu gets loaded.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
clicks Number of clicks Yes The number of clicks to do when the menu gets loaded. clicks = 2

hidebutton

Hide one of the menu's default buttons.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key

hidebuttonfor

Delay the appearance of one of the menu's default buttons.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
seconds Delay in seconds Yes The delay in seconds until the button gets visible. Decimal values are supported! seconds = 1
----
seconds = 0.4
onlyfirsttime true/false No If the button's appearance should be delayed only the first time it gets loaded or everytime. onlyfirsttime = true

sethoverlabel

Change labels of default buttons when they are hovered.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
label The hover label Yes The label which should be displayed when the button is hovered. label = A New Button Label

addhoversound

Add a short sound to default buttons which will be played when the button is getting hovered.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
path The sound path Yes The path to the hover sound. Only WAV files are supported! path = sounds/mysound.wav

setbuttonclicksound

Set a custom click sound to a vanilla button.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
path Path to click sound Yes The path to the click sound file. ONLY WAV FILES ARE SUPPORTED! path = path/to/sound.wav

setbuttonlabel

Change the label of one of the menu's default buttons.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
value The new button label Yes The new button label which overrides the old one. value = Cool Button

resizebutton

Resize one of the menu's default buttons.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
width The new button width No Changes the width of a button. width = 100
height The new button height No Changes the height of a button. height = 20

movebutton

Change the position of one of the menu's default buttons.

Variable Assignable value(s) Mandatory Description Examples
identifier Button key or id Yes The button identifier. This can be the button ID (written as %id=<button id>%) or its key. Both can be found by using the "Button Info" feature in menus. Just hover over a button with your mouse to get useful informations. identifier = %id=1%
----
identifier = the.button.key
x The horizontal button position No Moves the button to the new position on its horizontal axis. x = -100
y The vertical button position No Moves the button to the new position on its vertical axis. y = 20
orientation original, top-left, mid-left, bottom-left, top-centered, mid-centered, bottom-centered, top-right, mid-right, bottom-right No Aligns the button by the given orientation value. orientation = top-centered

addtext

Add text to a menu.

Variable Assignable value(s) Mandatory Description Examples
value The text to display Yes The text which should be displayed. Can contain formatting codes (e.g. §5)! value = §eThis is a yellow text.
x The horizontal text position No Moves the text to the given position on its horizontal axis. x = 0
y The vertical text position No Moves the text to the given position on its vertical axis. y = 150
orientation top-left, mid-left, bottom-left, top-centered, mid-centered, bottom-centered, top-right, mid-right, bottom-right No Aligns the text by the given value. orientation = mid-centered
scale The text scale No The text scale. Minecraft has a default text scale of 1.0, so a value of 2.0 would double its scale and 0.5 would half it. scale = 1.5
centered true, false No If your text should be centered or not. centered = true
shadow true, false No If your text should have a visible shadow or not. shadow = false

addwebtext

Add web text from an URL to your menu.

Variable Assignable values(s) Mandatory Description Examples
url The text url Yes The url, starting with HTTP/HTTPS, to the (plain-)text. Automatically converts GitHub and Pastebin links to plaintext. Markdown-like headline formatting included (# [your textline], ## ["], ### ["], #### ["]). url = https://mywebsite.com/changelog
x The horizontal text position No Moves the text to the given position on its horizontal axis. x = 20
y The vertial text position No Moves the text to the given position on its vertical axis. y = -100
orientation top-left, mid-left, bottom-left, top-centered, mid-centered, bottom-centered, top-right, mid-right, bottom-right No Aligns the text by the given orientation. orientation = bottom-left
scale The text scale No The text scale. Minecraft has a default text scale of 1.0, so a value of 2.0 would double its scale and 0.5 would half it. scale = 0.4
shadow true/false No If your text should have a visible shadow or not. shadow = true
multiline true/false No If the system should only display the first line of text or all lines. multiline = true

addtexture

Add an image to a menu.
As of version 1.5, this action supports GIF files, but using large GIFs with too many frames will cause the game and the GIF to lag when playing for the first time.

Variable Assignable value(s) Mandatory Description Examples
path The texture path Yes The path of your image. This can either be the full path like "C:\full\path\to\texture.png" or a short path like "config\fancymenu\texture.png", which always starts in the ".minecraft" folder. The image should be inside "config/fancymenu". Valid image types are PNG, JPEG/JPG and GIF. path = textures/mytexture.jpg
x The horizontal texture position No Moves the texture to the given position on its horizontal axis. x = 100
y The vertical texture position No Moves the texture to the given position on its vertical axis. y = -230
orientation top-left, mid-left, bottom-left, top-centered, mid-centered, bottom-centered, top-right, mid-right, bottom-right No Aligns the texture by the given value. orientation = mid-centered
width The texture width No The width of your texture. This can be any value, but stretching a small texture too much makes it blurred. width = 100
height The texture height No The height of your texture. This can be any value, but stretching a small texture too much makes it blurred. height = 100

addwebtexture

Add an web image to a menu by its URL.

Variable Assignable values(s) Mandatory Description Examples
url The image url Yes The url, starting with HTTP/HTTPS, to the image. Supported images types are JPG/JPEG and PNG. url = https://mywebsite.com/image.jpg
x The horizontal image position No Moves the texture to the given position on its horizontal axis. x = 20
y The vertial image position No Moves the texture to the given position on its vertical axis. y = -100
orientation top-left, mid-left, bottom-left, top-centered, mid-centered, bottom-centered, top-right, mid-right, bottom-right No Aligns the texture by the given orientation. orientation = top-left
width The image width No The width of your texture. This can be any value, but stretching a small texture too much makes it blurred. width = 150
height The image height No The height of your texture. This can be any value, but stretching a small texture too much makes it blurred. height = 30

addanimation

Add an animation to a menu.

Variable Assignable value(s) Mandatory Description Examples
name The animation name Yes The name of your animation you choose in its properties. name = rikka_finger_spin
x The horizontal animation position No Moves the animation to the given position on its horizontal axis. This will not override its animation properties. x = -60
y The vertical animation position No Moves the animation to the given position on its vertical axis. This will not override its animation properties. y = -60
orientation top-left, mid-left, bottom-left, top-centered, mid-centered, bottom-centered, top-right, mid-right, bottom-right No Aligns the animation by the given value. This will not override its animation properties. orientation = top-right
width The animation width No The width of your animation. This can be any value, but stretching a small animation too much makes it blurred. This will not override its animation properties. width = 50
height The animation height No The height of your animation. This can be any value, but stretching a small animation too much makes it blurred. This will not override its animation properties. height = 50

setscale

Force the menu to load with a specific GUI scale.
This action is currently not supported by all menus in MC 1.12.X.

Variable Assignable value(s) Mandatory Description Examples
scale GUI scale Yes The scale to load the menu with. The default scale values for minecraft are 1 for small, 2 for normal and 3 for large. scale = 1

Using math expressions to calculate positions and sizes

NOTE: This feature is NOT included in the layout editor.

You can use mathematical expressions to calculate width, height, x and y values of customization actions.

To make position and size calculation useful, there are two variables to get the current width and height of the menu/minecraft window. These are %guiwidth% and %guiheight%.

A working customization section to manually centralize an image could look like this:

customization {
  action = addtexture
  path = images/myimage.png
  orientation = top-left
  width = 100
  height = 100
  x = (%guiwidth% / 2) - 50
  y = (%guiheight% / 2) - 50
}

Apply customizations without restarting the game

All changes made to customization files can be applied without restarting the game!

You only need to click on the Reload button and all changes you made to your customization files will be loaded.

1.6.X | Custom Buttons

About

You can create custom buttons for menus and specify what they do.
There are some very useful button actions you can attach to it to let it open links, join servers, sending commands and much more!

NOTE: This documentation page is focused on manually creating custom buttons. If you don't want to do this, you can use the layout editor to edit menus ingame with a GUI, like you know it from all the fancy editing softwares out there.

Creating Custom Buttons

To create a custom button, you have to create a customization file first!

In your customization file, create a new customization section for the addbutton customization action.

A functional customization section to add a custom button to a menu can look like this:

customization {
  action = createbutton
  label = My Button
  buttonaction = openlink
  value = https://google.com
  backgroundnormal = textures/mytexture.png
  backgroundhovered = textures/mytexture2.png
  hideforseconds = 2.6
}

The most important part in the example above is the buttonaction variable.
This variable specifies which action the button should do when it's getting clicked.

The value variable specifies the content of the buttonaction. This may be nothing for specific button actions like quitgame and is mandatory for button actions like sendmessage to define the message to send.

Button Actions

Value needed? Value content Examples
Yes The link value = https://google.de

sendmessage

Send a message or a command to the chat.

Value needed? Value content Examples
Yes The message/command value = Hi everyone! :)
----
value = /time set 0

quitgame

Quit minecraft.

Value needed? Value content Examples
No / /

joinserver

Join a minecraft server.

Value needed? Value content Examples
Yes The server IP value = 127.0.0.1:25565
----
value = play.hivemc.com

loadworld

Load a minecraft world (from the client's playable minecraft worlds).

Value needed? Value content Examples
Yes The world folder name value = My World
----
value = cool_world

openfile

Open a file or folder.

Value needed? Value content Examples
Yes The path to the file/folder value = mydata/info.txt
----
value = images/minecraft

movefile

Move a file to a new path.

Value needed? Value content Examples
Yes The old file path and the new file path, separated by semicolon (';'). value = path/to/file.txt;new/path/of/file.txt

copyfile

Copy a file.

Value needed? Value content Examples
Yes The path to the file and the path to copy it to, separated by semicolon (';'). value = path/to/file.txt;copy/to/path/filecopy.txt

deletefile

Completely delete a file.

Value needed? Value content Examples
Yes The path to the file. value = path/to/file.txt

renamefile

Rename a file.

Value needed? Value content Examples
Yes The path to the file and its new name, separated by semicolon (';'). value = path/to/file.txt;newfilename.txt

downloadfile

Download a file from the web.
This action runs in the main thread, which means it will cause the game to freeze until it is done.

Value needed? Value content Examples
Yes The URL to the file and the path to save it to, separated by semicolon (';'). value = https://myhoster.com/archive.zip;path/to/save/archive.zip

unpackzip

Unpack a ZIP file.
This action runs in the main thread, which means it will cause the game to freeze until it is done.

Value needed? Value content Examples
Yes The path to the ZIP file and the directory to unpack it to, separated by semicolon (';'). value = path/to/archive.zip;unpack/to/path/

prevbackground

Switch to the previous menu background animation.

Value needed? Value content Examples
No / /

nextbackground

Switch to the next menu background animation.

Value needed? Value content Examples
No / /

opencustomgui

Open one of your custom GUIs.

Value needed? Value content Examples
Yes The custom GUI identifier value = mycoolmenu

opengui

Open an existing GUI by its menu identifier.

Value needed? Value content Examples
Yes The menu identifier (Get it by clicking on the "Menu Info" button in menus) value = the.menu.identifier

reloadmenu

Reload the current menu along with reloading customization files, the mod config, button scripts and more.
This action is similar to clicking the "Reload" button in the top-right corner of supported menus.

Value needed? Value content Examples
No / /

runscript

Run a button script.

Value needed? Value content Examples
Yes The file name of your script, without the file extension. value = myscript

mutebackgroundsounds

Mute or unmute background audio added by FancyMenu.

Value needed? Value content Examples
Yes true/false (to mute or unmute the audio) value = true

1.6.X | Animations

About

You can make your own animations and display them as menu backgrounds or gif-like animations in menus.

Just think about all the memes you can put in menus with this!

Getting started

Every animation has to be in its own folder inside the animations directory located at .minecraft/config/fancymenu/animations/.

1

To make an animation getting recognized as this by the system, it needs to have a properties file located in its home directory. So if you've named your animation folder "myanimation" (this is your animation home directory), the properties file should be located at .minecraft/config/fancymenu/animations/myanimation/properties.txt.
This file always need to be named properties.txt!
For now, only create the blank properties file and move on to the next step.

2

The actual animation part comes now. There are two ways to get FancyMenu to play your animation.

First Way: Using Individual Frame Images

You can feed FancyMenu with frame images, which means you split your animation to its individual frames, so you have every frame of the animation as individual image.

All frames of your animation have to be in a folder named animation inside the home directory of your animation (same directory as where the properties.txt file is located at).

3

These frame images always need to be named like 1.png, 2.png, 3.png and so on, using only numbers as names without any letters, to get displayed in the correct order.

4

Valid file types for frame images are PNG and JPEG/JPG.

Second Way: Using GIFs

The faster way to setup animations is by using GIF files. Of course this will be the faster way, but it will probably result in a much higher quality loss too, because GIFs are known for its limited color support and pixel artifacts.

To use a GIF as your animation, just do the same as when creating animations with individual frames, but instead of creating an animation folder, you just name your GIF file animation.gif and put it to the home directory of your animation (same directory as where the properties.txt file is located at).

5

Animation Intros

NOTE: This is an optional step and not needed for the animation to work.

If you want to add some "intro" frames to your animation, which will be played before the actual main animation starts, you can do it like you did it with the main animation above.
Intros only play one single time at the beginning of an animation. They will not be repeated, even if the animation is in loop mode.
You can replay the intro everytime the animation gets reloaded (when the animation gets displayed), by adding replayintro = true to your animation properties file. Otherwise, it will only play the very first time.

Using Individual Frames

Just create a folder in the home directory of your animation, name it intro and put all your intro frames in it (exactly like how you've put your frame images in the animation folder).

Using a GIF

Same as with individual frames, but instead of creating an intro folder, name your intro GIF file intro.gif and put it to the home directory of your animation.

Adding Audio

NOTE: This is an optional step and not needed for the animation to work.

You don't just want a boring animation? Fine! How about adding some audio to it? If you want to have audio files played along with your animation, just create an audio folder in the home directory of your animation and put your WAV sound files in it! The audio file for the main animation have to be named mainaudio.wav and the audio for the intro introaudio.wav. Always keep in mind that only WAV files are supported.

6

Animation audio files will repeat at the same point your animation get repeated (if the animation is in loop mode). This means, your audio will stop and start again from the beginning when your animation ends. You should only use animation audios for simple sounds like rain, fire and so on. Simple ambient sounds. It is not recommended to use animation audios as background music for menus. You should better add the audio directly to your menu then.

Setting up the animation

After you've prepared your animation folder with a properties.txt file and all your animation frames or your animation GIFs, you're almost done, but you still have to fill your blank properties.txt file with some important stuff.

The basic layout of every animation properties file should be:

name = friendly_mushroom
loop = true
fps = 24
width = 1920
height = 1080
x = 0
y = 0
replayintro = true

All available animation variables are used in the example above.

name

The most important variable of this file is the name variable.
This is the name of your animation. You need this to identify your animation in the customization system and other things.
The animation name needs to be unique. It is not possible to name two animations the same.

loop

The loop variable is used to specify if the animation is looped like a usual GIF or just plays one time and stops at the last frame.
If loop is set to false, the last frame of the animation is displayed permanently after it finished playing.

fps

The fps variable defines the "frames per second" of your animation. This means, how much of your animation frames will be played in one second. A smaller number will slow down your animation, a bigger one will speed it up. You should always try to set the correct FPS value for your animation, otherwise it will either play too fast or too slowly.

NOTE: Setting the FPS variable for a GIF animation will do nothing. FancyManu will always use the GIF's original FPS.

replayintro

replayintro is used to determine if the animation should replay its intro everytime it gets loaded (along with a menu) or if it should only play one time and then never again.

Other

Other variables like width or height are pretty much self-explaining, so I save you some time and will not write about every single one in detail.

Using the animation

If you're done with preparing and setting-up your animation, you can use it in the customization system for actions like animatebackground or addanimation. To identify your animations, use the name you've specified in the properties.txt file of your animation.

NOTE: Don't forget to restart your game after you've edited an animation or added a new one, because animations are only loaded when the game starts!

1.6.X | Panoramas

About

As of v1.6.0, FancyMenu supports loading custom 6-image panorama cubes as background for menus!

NOTE: "6-image panoramas" are a special cubic panorama format used by Minecraft as background in the main menu.

Making a Panorama

If you don't know how Minecraft handles their background panoramas and how to create these, you should check out this video.
It will give you a very good understanding of how MC panoramas work and how to make one!

After watching the video, you will notice that creating MC panoramas can be a bit time-consuming.
To save you some time, maybe think about using a mod that creates these panoramas for you.
You can find some of them by searching for minecraft panorama mod, but one of them is Panoramica (made by me).

Preparing The Panorama

After you got your 6 panorama images, you'll need to put them at the right place!

FancyMenu's panorama directory is located at .minecraft/config/fancymenu/panoramas.
This is the directory for all panoramas that you want to use in the mod.

1. The Panorama Folder

Every panorama has its own folder.
You will need to create a new folder in .minecraft/config/fancymenu/panoramas if you want to add a new panorama.
In my example, I will name the folder mypanorama.

1

2. Folder Content

After creating the folder, you will need to fill it.

Properties File:

Every panorama needs a properties file to work.
This file always needs to be named properties.txt and needs some important things written to it:

The content of a panorama properties file should always look like this:

type = panorama

panorama-meta {
  name = name_of_your_panorama
}

Only the name variable can be changed, all other stuff needs to stay the same!

The name variable has to be the unique name of your panorama.
You will use this name later to identify your panorama.

Panorama Image Folder:

The second mandatory thing your panorama folder needs is the actual image folder containing your panorama images.

This folder needs to be named just panorama.

Put all your panorama frames in it, but don't forget to name them correctly like shown in the video above!

3

NOTE: Only PNGs are supported as panorama images!

Panorama Overlay:

The last step is optional and can be skipped if you don't want an overlay over your panorama.

If you want to add a vignette or other types of overlays to your panorama, you can add one named 'overlay.png'.
Keep in mind that only PNG is supported for the overlay and that the file name always needs to be 'overlay.png'!

The Final Product:

You should now have a folder located at .minecraft/config/fancymenu/panoramas, containing a properties.txt file, another folder named panorama and maybe an overlay named overlay.png.

2

Using The Panorama

After reloading the game via the Reload button or restarting it, you should be able to use your panorama in the layout editor (Background Options) and in the setpanoramabackground customization action.

1.6.X | Button Scripts

About

As of version 1.5, FancyMenu supports multiple button actions per button.
This is possible by creating a button script containing all button actions you want to run by clicking the button.

Creating a Script

Buttons scripts are located in .minecraft/config/fancymenu/buttonscripts.
To keep it as simple as possible, button scripts are simple text files (.TXT files), allowing you to edit them with every text editor.

Creating a button script is very easy. It's basically just writing multiple button actions as list (one action per line).

The button action and its value (if there is one for the specific button action) are going to the same line, separated by colon (':').

A working button script to rename customization files and reload the menu (to switch between layouts by button click) can look like this:

renamefile:config/fancymenu/customization/layout.txt;layout.temp
renamefile:config/fancymenu/customization/layout.disabled;layout.txt
renamefile:config/fancymenu/customization/layout.temp;layout.disabled
reloadmenu

The code above is all the script needs to work, nothing special. The part before the colon is the button action, everything after the colon is its value.
The reloadmenu button action has no value, that's why there's no colon on this line.

When you're done writing your script, just save it to the buttonscripts directory (mentioned above), with whatever name you like. Just be sure that it has the TXT file type.

After you've saved your button script, simply press the Reload button, to load the new button script into FancyMenu and you're done.

Using Button Scripts

Button scripts can be executed by using the runscript button action.
The value for this button action is the script file name without the file extension. So if you've named your button script myscript.txt, the button action value would be myscript.

NOTE: It's recommended to create layouts with the layout editor. You will then be guided through the whole process of creating objects, like a custom button that executes a button script.

1.6.X | Custom GUIs

About

As of version 1.4, FancyMenu supports creating custom GUIs, displaying them by clicking a button or overriding game menus with them.

NOTE: This documentation page is focused on manually creating custom GUIs. If you don't want to do this, you can create a custom GUI ingame by clicking on the "Customization" button in the top-right corner of menus and click on "Create GUI".

Creating a Custom GUI

To manually create a custom GUI, navigate to FancyMenu's GUI directory at ".minecraft/config/fancymenu/customguis".

Create a new TXT file in this directory, name it as you want and open it.
This file is your GUI base.
Here you can define important basic variables for your GUI.

NOTE: Some GUI base variables are mandatory. Without defining all mandatory variables, the GUI will not load!

Variable Assignable values Mandatory Description Examples
identifier The menu identifier. Yes This is your UNIQUE custom GUI identifier. This identifier works the same like identifiers of normal minecraft menus. identifier = mycoolmenu
title The GUI title. No Specifies the GUI title displayed at top of the GUI. Leaving this blank/not defining it can be used if no title should be displayed. title = My Cool Menu
allowesc true/false No If your GUI should be closeable by pressing ESC. allowesc = false

A working GUI base file can look like this:

identifier = mycoolmenu
title = My Cool Menu
allowesc = false

After preparing your custom GUI base, just click on the "Reload" button in the top-right corner of menus and the new GUI will be loaded without restarting the game!

Adding Content to Custom GUIs

Custom GUIs can be filled with content just like you customize normal minecraft menus!

Just create a customization file for your GUI and use its identifier as menu identifier.

NOTE: You can edit custom GUIs ingame with the layout creator!

Displaying Custom GUIs

There are two ways to display custom GUIs.

The first one is using the opencustomgui button action of custom buttons.

The second one is overriding an existing menu with your custom GUI by using the overridemenu customization action.

NOTE: You can force-close custom GUIs by clicking on the "Customize" button in the top-right corner of menus to open the dropdown menu and clicking on "Close GUI" to leave this GUI, even if you've set allowesc to false.

1.6.X | Custom Window Icon

About

As of v1.4, FancyMenu supports setting a custom Minecraft window icon.

Setting a Custom Icon

NOTE: Only PNG images are supported.

NOTE: Due to a weird bug, icon images may look glitched in the final view. If that's the case, try to make one pixel in all four corners of the image 100% transparent. This is a really weird bug I currently try to fix.

1.6.X | Custom Window Title

About

As of v1.4, FancyMenu supports setting a custom minecraft window title.

Setting a Custom Title

To set a custom window title, just edit the customwindowtitle config value in your mod config and restart your game!

NOTE: You think this wiki page is too short?
To make it more challenging, you could try to close your eyes and blind-type the correct window title!

1.6.X | Game Intro

About

You can set animations as "game intro" to play them before the main menu is displayed.

Set Animations As Game Intro

To set one of your animations as game intro, just set its name (the name you gave your animation in its animation properties) as gameintroanimation value in the FancyMenu config.

Now the animation will play after the game and animation loading process is done and before the main menu is displayed for the first time.

1.6.X | Mod Configuration

About

FancyMenu's config is filled with various options to customize the behaviour of the mod itself, but it also has special options for specific menus like the main menu, which aren't possible with customization files.

Where to Find the Config

The config.txt file is located at ".minecraft/config/fancymenu/config.txt".

If you don't know how to find the .minecraft folder, please take a look at this minecraft wiki page.

Categories and its Variables

Customization

Variable Default Assignable values Description
showcustomizationbuttons true true/false Shows FancyMenu's customization buttons (Button Info, Menu Info, Reload) on top of every supported menu.
softmode false true/false Maximizes mod compatibility by disabling background customization support for scrollable menus like the singleplayer and multiplayer menus.
legacybuttonids false true/false Enables the old button ID system. NOT RECOMMENDED!

Mainmenu

Variable Default Assignable values Description
hidebranding true true/false Hides the branding text in the bottom-left corner of the main menu.
hidelogo false true/false Hides the default minecraft logo in the main menu.
hiderealmsnotifications false true/false Hides the notification indicators shown at the left side of the "Realms" button.
showmainmenufooter true true/false Shows the text footer (Discover more..) added by FancyMenu in the main menu.
hideforgenotifications false true/false Hides all forge notifications like the beta warning or the forge update notification.
copyrightposition bottom-right top-left, top-centered, top-right, bottom-left, bottom-centered, bottom-right Sets the position of the copyright notice.

Mainmenu Splash

Variable Default Assignable values Description
hidesplashtext false true/false If the splash text should be hidden or not.
splashrotation -20 The rotation value. Sets the rotation for the splash text.
splashoffsetx 0 The X offset. Sets the horizontal offset based on the original splash text position.
splashoffsety 0 The Y offset. Sets the vertical offset based on the original splash text position.

Loading

Variable Default Assignable values Description
gameintroanimation [empty] The animation name. Specify an animation (by the name you gave the animation in its properties) which should play as intro before the main menu is displayed. (Like all the cool games out there)
loadingscreendarkmode false true/false Enables the loadingscreen darkmode. ONLY FOR MC 1.14 AND UP!
showanimationloadingstatus true true/false When enabled, the animation loading screen will show detailed information about the loading process.
allowgameintroskip true true/false If the user can skip the game intro by pressing SPACE or not.
customgameintroskiptext [empty] Custom skip text. Set a custom skip text.
loadinganimationcolor Default hex color code Hex color code (#FFFFFFFF) A custom color for the animation loading screen indicator.

Minecraft Window

Variable Default Assignable values Description
customwindowtitle [empty] Custom window title. Specify a custom minecraft window title.
customwindowicon false true/false Enables custom minecraft window icons.

General

Variable Default Assignable values Description
enablehotkeys true true/false If FancyMenu's hotkeys should be enabled or not. A restart is needed after changing this value. Disabling this option will completely remove the FancyMenu section from minecraft's controls menu.
playmenumusic true true/false Enable or disable the default minecraft menu music.
playbackgroundsounds true true/false Enable or disable the menu background sounds added by FancyMenu.
defaultguiscale -1 GUI scale A default GUI scale that will be set on first launch. Useful for modpacks. Cache data is saved in /mods/fancymenu/.
showdebugwarnings true true/false If FancyMenu should print warnings to the game log. Errors are not affected by this.

Layout Editor

Variable Default Assignable values Description
showvanillamovewarning true true/false Enable or disable the warning notification when trying to move an orientation-less vanilla button in the layout editor.