Creating ranks
How to build your rank ladder in ranks.yml.
ranks.yml is where your whole progression lives. It is your content: the plugin generates it once with three commented example ranks and never rewrites it after that. Add as many ranks as you want; players progress through them in the order they appear in the file.
The shape of a rank
ranks:
rank-1:
display-name: "&aRank I"
icon: IRON_INGOT
quests:
cobblestone:
type: BREAK_BLOCK
material: COBBLESTONE
amount: 300
mobs:
type: KILL_MOB
entity: ANY
amount: 200
requirements:
money:
type: MONEY
amount: 25000
take: true
on-reach:
- "lp user {player} parent set rank1"
rewards:
money: 5000
commands:
- "crates give {player} vote 3"
broadcast: true
rank-2:
display-name: "&bRank II"
icon: GOLD_INGOT
# ...Rank keys
| Key | What it does |
|---|---|
display-name | The rank's name in menus and broadcasts. Colors work (&a and &#rrggbb hex), and with PlaceholderAPI any %...% placeholder or emoji works too, see Colors |
icon | The item shown for this rank while it is the player's current rank. Takes a material, MATERIAL:custommodeldata, or itemsadder:namespace:id (hyphen form too), see icon formats |
icon-locked | Optional. Icon shown while the rank is still locked. Defaults to gui.locked-item |
icon-completed | Optional. Icon shown once the rank is surpassed. Defaults to gui.completed-item |
menu-icon | Optional. Icon in the quest menu's top info slot for this rank. RANK_ICON uses the rank's own icon, NONE hides the slot (handy for invisible ItemsAdder icons), or any icon string. Defaults to gui.quest-info-item |
quests | Any number of quests. See Quests |
requirements | Extra conditions on top of the quests. See Requirements |
rewards | One-time prizes given when this rank is claimed. See Rewards |
on-reach | Console commands run every time a player lands on this rank. This is where the permission group goes, see below |
menu-page | Manual layout only: which page this rank shows on (1 = first). See Rank menu |
menu-slots | Manual layout only: the slots this rank fills; every slot opens it. Lets one ItemsAdder image span a block of slots |
The key under ranks: (rank-1, rank-2, ...) is just an internal id. Order in the file = order of progression.
on-reach commands
on-reach is a list of console commands that run every time a player becomes this rank, no matter how they got there:
- a brand new player joining for the first time (they land on your first rank),
- a player claiming a rank and moving up into the next one,
- an admin running
/rank admin setrank <player> <this rank>(setrank to the first rank is a clean reset), - a player being moved here by a rank permission.
{player} is replaced with the player's name.
This is the right home for your permission-plugin command, so the player's real server group always matches the rank they are on:
rank-2:
on-reach:
- "lp user {player} parent set rank2"Use LuckPerms parent set, not parent add. set puts the player on only that one group and drops every other group they held, so old rank groups are cleared for you automatically and you never get the "already a member" console message. Give each rank's on-reach its own group (rank-1 sets rank1, rank-2 sets rank2, and so on).
on-reach vs rewards.commands. on-reach runs on every arrival and is for state that must be kept in sync (the permission group). rewards.commands runs only on a genuine claim and is for one-time prizes (crate keys, cosmetics). An admin setrank fires on-reach but not rewards.commands, so moving a player around never re-hands them prizes.
Things to keep in mind
- Quest count vs menu slots. Quest icons are placed on the slots from
gui.quest-slotsinconfig.yml. If a rank has more quests than there are slots, the console warns you; add more slots to the list. See Configuration. - Applying changes. Run
/rank admin reloadafter editing. No restart needed. - Renaming quest ids mid-run. A player's saved progress is stored per quest id. If you rename or remove a quest id while players are mid-rank, their progress for that id no longer matches. Prefer finishing your design before opening to players, or accept the reset.
- Sync with your permission plugin. zQuestRank tracks its own ladder. To move the player's actual server rank, put your permission plugin's command in the rank's
on-reachlist (for example LuckPermslp user {player} parent set rank2). Usingparent setkeeps the player on exactly one group and clears the others.
A quick checklist for a new rank
Add the rank block
Copy an existing rank in ranks.yml, give it a new key, display-name, and icon.
Pick its quests
Mix types: some gathering, a kill quest, maybe a delivery or a fishing quest, and a placeholder quest if you run jobs or votes.
Set the gate and the prize
Add requirements (money with take: true if the rank should cost something) and rewards. Put the permission-plugin command that performs the real rank change in the rank's on-reach list.
Reload and test
/rank admin reload, then walk a test account through it with /rank admin setrank and /rank admin resetquests. See Commands.