Overview#
PackMenu provides a powerful framework for modifying the Minecraft main menu without requiring complex Java coding. By utilizing JSON files and standard resource packs, users can relocate or remove vanilla buttons, add custom buttons with unique actions, change the background to static images or animated slideshows, and replace the default Minecraft logo. This mod is a staple for modpack creators looking to provide a branded and professional first impression for their users.
File Structure and Setup#
PackMenu operates using two primary locations within the Minecraft instance directory. Configuration files determine the logic and layout, while resource packs provide the visual assets.
Directory Layout
- config/packmenu/: This is the primary directory for customization logic.
buttons/: A folder containing individual.jsonfiles for every custom button.background.json: Defines the menu background (image, panorama, or slideshow).logo.json: Defines the main title logo properties.packmenu.cfg: General mod settings, such as enabling/disabling specific vanilla elements.
- resources/packmenu/: While assets can be placed in any resource pack, this folder is often used for modpack-specific textures like button icons and backgrounds.
Custom Buttons#
The JSON Button is the primary interface for adding menu content. Each button specifies a position, texture, and action. Buttons can also be created without actions to serve as decorative still images.
Button Schema
| Key | Type | Requirement | Description |
|---|---|---|---|
x |
int | Mandatory | The x position of the button in pixels, adjusted against the anchor point. |
y |
int | Mandatory | The y position of the button in pixels, adjusted against the anchor point. |
width |
int | Mandatory | The width of the button in pixels. |
height |
int | Mandatory | The height of the button in pixels. |
anchor |
AnchorPoint | Optional | The anchor point for the button. Defaults to default. |
sprites |
WidgetSprites | Optional | The sprites for the button. Defaults to vanilla sprites. |
icon |
ButtonIcon | Optional | An optional button icon to draw. |
hover_icon |
ButtonIcon | Optional | The icon drawn when hovered. Defaults to icon. |
action |
ButtonAction | Mandatory | The action performed on click. |
text |
ButtonText | Optional | The text to draw on the button. |
hover_text |
ButtonText | Optional | The text to draw when hovered. Defaults to text. |
active |
boolean | Optional | If the button can be clicked. Defaults to true. |
scale_x |
float | Optional | Scale factor for x values. |
scale_y |
float | Optional | Scale factor for y values. |
Anchor Points
Anchor points determine the origin (0,0) for the button's X and Y coordinates:
top_left,top_center,top_rightmiddle_left,center,middle_rightbottom_left,bottom_center,bottom_right
Button Actions
| Action Type | Description |
|---|---|
packmenu:open_url |
Opens a specified URL in the user's default browser. |
packmenu:connect_to_server |
Automatically connects the player to a specific server IP. |
packmenu:quit |
Closes the Minecraft client. |
packmenu:open_gui |
Opens a specific Minecraft screen (e.g., Options, Multiplayer, Language). |
packmenu:open_folder |
Opens a local folder within the Minecraft directory. |
Example: Sponsor Button
This example demonstrates a button anchored to the top right that opens a URL.
{
"x": -150,
"y": 0,
"width": 150,
"height": 20,
"anchor": "top_right",
"icon": {
"texture": "packmenu:icon/akliz",
"width": 150,
"height": 20
},
"action": {
"type": "packmenu:open_url",
"url": "https://www.akliz.net/partners"
},
"text": {
"key": "packmenu.akliz",
"x_offset": 5
}
}Backgrounds#
The background.json file controls what is displayed behind the menu buttons. PackMenu supports three distinct background types.
Background Types
- Image: A single static texture that covers the screen.
- Panorama: A classic rotating 3D view using six cubic textures (similar to vanilla Minecraft backgrounds).
- Slideshow: A sequence of images that fade into one another over a specified duration.
Slideshow Configuration
When using the slideshow type, you can define the speed and the list of textures to cycle through.
| Key | Type | Description |
|---|---|---|
type |
string | Must be "slideshow". |
textures |
array | A list of resource locations for the images. |
duration |
int | The time in ticks each image stays on screen. |
fade_time |
int | The time in ticks for the transition between images. |
Logo Customization#
The logo.json file allows you to replace the default Minecraft title logo with a custom image. This is highly useful for modpack branding.
Logo Properties
- texture: The resource location of the logo image.
- x / y: The offset from the anchor point.
- width / height: The dimensions of the logo in pixels.
- scale: A multiplier for the logo's size.
- anchor: Typically set to
top_centerfor standard title placement.
General Configuration#
The packmenu.cfg file contains global toggles for various menu elements. This is where you can disable vanilla components to make room for your custom layout.
Configurable Options
- Draw Splash Text: Toggle the yellow splash text next to the logo.
- Draw Java Edition: Toggle the "Java Edition" subtitle.
- Draw Forge Info: Toggle the version information in the bottom left corner.
- Folder Overrides: Enable or disable the loading of custom JSONs from the config folder.