PackMenu Button Schema
Brennan Ward edited this page on 26 Feb · 8 revisions
PackMenu lets users define additional menu buttons using a JSON format.
Buttons are loaded as objects from a resource pack. Each button must be defined in it's own file.

Format Specification
Each button may have the following keys. Some keys are optional, but some are required.
In the section below, every possible key will be defined, as well as what type that key represents, and if that key is required or not.

The format of this specification is "key name": [Required / Optional] (Data Type) Description

"x": [Required] (Integer) X offset from the center of the screen.
"y": [Required] (Integer) Y offset from the center of the screen.
"width": [Required] (Integer) Width of this button.
"height": [Required] (Integer) Height of this button.
"texture": [Semi-Optional] (String) The texture that this button will draw from.  Defaults to vanilla's widgets.png
"u": [Optional] (Integer) The texture X coordinate of where the button will begin drawing from.
"v": [Optional] (Integer) The texture Y coordinate of where the button will begin drawing from.
"hoverU": [Semi-Optional] (Integer) The texture X coordinate of where the button will draw from when hovered.
"hoverV": [Semi-Optional] (Integer) The texture Y coordinate of where the button will draw from when hovered.
"texWidth": [Semi-Optional] (Integer) The width of the texture file that this button is sourced to.
"texHeight": [Semi-Optional] (Integer) The height of the texture file that this button is sourced to.
"widgets": [Optional] (Boolean) If you are using a widgets.png texture file or not.  Defaults to true if "texture" contains the word widgets.
"langKey": [Optional] (String) Language key of the text to draw on this button.
"action": [Required] (String) What happens when this button is clicked.  See "Button Actions" below.
"data": [Optional] (Variable Type) Additional data depending on the value of "action".  See "Button Actions" below.
"fontColor": [Optional] (Integer) The color of the text on this button.  Must be a converted hex color integer.
"hoverFontColor": [Optional] (Integer) The color of the text when hovered.  Must be a converted hex integer.
"anchor": [Semi-Optional] (String) The anchor point of this button. See "Anchor Points" below.
"textXOffset": [Optional] (Integer) X Offset for text drawn on this button.  Defaults to 0.
"textYOffset": [Optional] (Integer) Y Offset for text drawn on this button.  Defaults to -4.
"dropShadow": [Optional] (Boolean) If the text on the button will be drawn with a drop shadow or not.

Additional Notes
Certain values are marked as "Semi-Optional", which means that they are not necessarily required, but will generally be included.
The hoverU and hoverV values are required if you want the button to change texture when hovered. 
The texture, texWidth, and texHeight all default to values for vanilla's widgets.png file, but if you use any other texture, you should change these.

The langKey value will be translated, so using this will require a translation to be provided in an en_us.json file.

Anchor Points
PackMenu elements can be anchored at different points on the screen, indicating where their coordinates will be before offsets.

Currently, the following anchor points exists:
TOP_LEFT
TOP_CENTER
TOP_RIGHT
MIDDLE_LEFT
MIDDLE_CENTER
MIDDLE_RIGHT
BOTTOM_LEFT
BOTTOM_CENTER
BOTTOM_RIGHT
DEFAULT
DEFAULT_LOGO

The DEFAULT and DEFAULT_LOGO values correspond to magic numbers that dictate where the anchor points were before the definition of this system. 
They remain the default locations as to not break existing setups.

Button Actions

Button Actions are a predefined set of things that PackMenu buttons can do. 
Each Action may have an additional value for the "data" key associated with it. 

The types of actions are as follows:
CONNECT_TO_SERVER
Data: Server IP Address as a String.
LOAD_WORLD (Not Implemented)
RELOAD
OPEN_GUI
Data: GUI Type as a String. GUI Types are defined below.
OPEN_URL
Data: URL to open as a String.
QUIT
GUI Types
Used for the OPEN_GUI Button Action, these are identifiers for the various types of menus that PackMenu can open. 

The GUI Types are as follows:
SINGLEPLAYER
MULTIPLAYER
MODS
LANGUAGE
OPTIONS
ACCESSIBILITY

Examples

Examples are provided in the generated resource pack for all vanilla buttons. 
The following example is the Akliz Hosting button from the ATM 5 Menu.

{
	"x": 75,
	"y": -40,
	"width": 120,
	"height": 30,
	"langKey": "packmenu.atm.akliz",
	"action": "OPEN_URL",
	"data": "https://akliz.net/allthemods",
	"u": 0,
	"v": 0,
	"hoverU": 0,
	"hoverV": 30,
	"texWidth": 120,
	"texHeight": 60,
	"texture": "atm:textures/akliz.png",
	"fontColor": 0,
	"hoverFontColor": 1140326,
	"dropShadow": false,
	"textXOffset": 5,
	"textYOffset": -6
}