Menus
Every screen is a normal chest-style menu built from menus.yml. No resource pack needed, though you can use one.
The six menus
/jobs. Six job heads, your own profile head in the middle, plus buttons for claim all, boosts, and the shop. A job you have prestiged carries its prestige lines under the icon.
Click a job. Leaderboard, how to earn, your progress, prestige, and a rewards button.
Every level in the job as a coloured pane, and the reward attached to it. Paged when the job has more levels than the page has slots.
/farmpoints shop. Your balance in the corner, items in their configured slots.
/farmpoints ranking. This month’s top heads, last month’s row under it, and a claim button.
Opened from the boosts button. Every boost on you right now with its time left, running ones first, then any waiting their turn. The times tick down while you watch.
The tier page colours
| Colour | Meaning |
|---|---|
| Lime | Level reached |
| Yellow | The level the player is on now |
| Red | Still locked |
Reward panes on the same page use the same three colours for claimable, claimed, and locked. Both sets of materials and lore are yours in menus.yml.
The job hub
| Button | What it shows |
|---|---|
| Leaderboard | Top players in that job by prestige then level, read from a cached copy |
| How to earn | The block or mob list the job pays for, generated from jobs.yml |
| Progress | Level, xp, and pay for the viewing player |
| Prestige | Requirement lines ticked or crossed, or a greyed-out state when the job has prestige off |
| Rewards | Opens the tier page for that job |
A menu read never touches the database, so the cost is the same whether one player or two hundred are looking. leaderboards.refresh-seconds in config.yml is how long the boards go without a rebuild, 120 seconds by default, and a level up or a prestige brings the next one forward to within leaderboards.min-delay-seconds.
Icons
Every icon in every menu takes the same fields:
material: PLAYER_HEAD
amount: 1
name: "&aMiner"
lore:
- "&7Break stone and ores to earn."
custom-model-data: 0
itemsadder: ""
head-texture: ""
custom-model-datapoints at a model in your resource pack.itemsaddertakes a namespaced id likemyitems:miner_headand wins overmaterialwhen set.head-textureis a base64 texture value, only read when the material isPLAYER_HEAD.
Text that follows the player’s language
Any name, lore line, or title written as lang:some.route is looked up in the player’s language file instead of being shown as-is:
name: "lang:menu.shop-name"
Write literal text instead when you want one wording for every language at once. A lore line pointing at a list in the language file expands into all of that list’s lines.
With auto-reload: true, saving menus.yml rebuilds any open menu and reopens it on the same page. Move a slot, alt-tab, and it has already moved.
Next
Slot numbers, filler panes, and every button key are on menus.yml.