jobs.yml
The six jobs, what they pay, how fast they level, and their prestige settings.
Shape of the file
defaults:
max-level: 100
xp-curve:
base: 100
factor: 1.12
prestige:
...
jobs:
miner:
...
lumberjack:
...
defaults applies to every job. A job block only has to list what it changes.
The defaults block
| Key | Default | What it does |
|---|---|---|
max-level |
100 | Highest level a job can reach |
xp-curve.base |
100 | XP cost of level 1 to 2 |
xp-curve.factor |
1.12 | How much steeper each level gets |
Cost to go from a level to the next is round(base * factor ^ (level - 1)).
Prestige defaults
| Key | Default | What it does |
|---|---|---|
enabled |
true |
Prestige available at all |
max |
10 | How many times a job can prestige, 0 turns it off |
announce |
broadcast |
broadcast, player, or none |
reset-reward-claims |
true |
Level rewards become claimable again after a prestige |
requirements.max-level |
true |
Must be at the cap first |
requirements.money |
50000 | Vault money, 0 skips the check |
requirements.xp-levels |
25 | Vanilla xp levels, 0 skips the check |
requirements.farmpoints |
0 | Farmpoints, 0 skips the check |
requirement-growth |
1.5 | Every requirement multiplied once per prestige already earned |
consume.money |
true |
Meeting the requirement also spends it |
consume.xp-levels |
true |
Same for xp levels |
consume.farmpoints |
true |
Same for farmpoints |
scaling.xp-cost |
1.35 | XP needed per level, per prestige |
scaling.money |
1.25 | Money paid per action, per prestige |
scaling.farmpoints |
1.0 | Farmpoints dropped while working this job |
scaling.drop-chance |
1.0 | Chance of a drop firing at all |
commands |
[] |
Console commands on prestige, with {player} {job} {prestige} {level} |
Full explanation on Levels & Prestige.
A job block
miner:
display-name: "&bMiner"
description:
- "&7Break stone and ores to earn."
- "&7Level: &f{level}&7/&f{maxlevel}"
- "&7Next level: &f{xp}&7/&f{xpnext} xp"
- "&7Pay: &a{money}&7 each"
how-to-earn: []
menu-slot: 19
icon:
material: IRON_PICKAXE
head-texture: ""
custom-model-data: 0
itemsadder: ""
trigger: BLOCK_BREAK
blocks:
- STONE
- COAL_ORE
money:
base: 0.10
per: 10
per-level: 0.05
xp:
per-action: 1.0
| Key | What it does |
|---|---|
display-name |
English fallback. The jobs.<id>.name entry in each language file wins |
description |
Lore under the job icon |
how-to-earn |
The “How to earn xp” lines for this job. Empty lists its blocks or mobs instead |
menu-slot |
Where the icon sits in the /jobs grid, 0-indexed |
icon |
Material, head texture, model data, or an ItemsAdder id |
trigger |
What the job listens for |
money.base |
Payout before level bonuses |
money.per |
Charge the base once per this many actions |
money.per-level |
Added to the base for each job level |
xp.per-action |
XP granted each time the action fires |
Lore placeholders
{level} {maxlevel} {xp} {xpnext} {progress} {money} {prestige} {maxprestige} work in every job’s description.
Writing the how-to-earn lines
The how-to-earn button in the job hub lists the job’s blocks or mobs on its own. Fill in how-to-earn on the job to write those middle lines yourself:
farmer:
how-to-earn:
- "&7Harvest any crop when it is ripe."
- "&7Pay: &a{money}&7 per crop"
{job}, {money} and {xp} work in a line, and so does a lang: route. {money} is what the job pays the viewer for one action right now, {xp} its xp per action.
A job’s own list wins over how-to-earn.lines in menus.yml, which is the same thing written once for every job. Leave both empty for the generated list.
Triggers
| Trigger | Fires on | Extra keys |
|---|---|---|
BLOCK_BREAK |
Breaking a listed block | blocks, require-mature, harvest-blocks, per-block maps |
ENTITY_KILL |
Killing a listed mob | entities, money.per-heart, xp.scale-by-hearts |
FISH |
Reeling something in | None |
ENCHANT |
Enchanting at a table | None |
blocks: [ALL] counts every block. entities: [ANY] counts every mob.
Per-block pricing
money:
base: 0.05
per: 1
per-level: 0.0
per-block:
CHORUS_FLOWER: 0.10
CHORUS_PLANT: 0.05
xp:
per-action: 1.0
per-block:
CHORUS_FLOWER: 1.0
CHORUS_PLANT: 0.5
A material listed under per-block uses that value instead of the base. Anything not listed falls back.
One break can count a sixteen block chorus tree. Without per-block, every one of those blocks pays the flat base.
Mature crops and harvests
| Key | What it does |
|---|---|
require-mature: true |
Only pay when the crop is fully grown, so replanting or trampling does not |
harvest-blocks |
Materials picked by right-clicking when ripe, like sweet berries |
Harvest blocks pay xp, and money only if the material has a money.per-block entry.
Sugar cane, cactus, bamboo, kelp, and chorus never report as mature. They are handled by multi-block in config.yml instead.
Per-heart jobs
hunter:
trigger: ENTITY_KILL
entities:
- ANY
money:
base: 0.10
per: 1
per-level: 0.10
per-heart: true
xp:
per-action: 1.0
scale-by-hearts: true
per-heart multiplies the payout by the mob’s hearts, which is max health divided by two. scale-by-hearts does the same for xp.
Adding your own job
Copy an existing block
Pick the one with the trigger you want and paste it under a new id.Give it a free menu slot
menu-slotmust not collide with another job in the/jobsgrid.Add its name to every language file
jobs.<id>.nameandjobs.<id>.descriptioninen.yml,fr.yml, andes.yml.Save
Withauto-reloadon it appears straight away, otherwise run/corejobs reload.
Deleting a job block leaves that progress orphaned in the database. Set prestige.max: 0 and empty its block list if you want to retire a job instead.