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.

Multi-stage plants need this

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.

Multi-stage plants skip require-mature

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

  1. Copy an existing block
    Pick the one with the trigger you want and paste it under a new id.

  2. Give it a free menu slot
    menu-slot must not collide with another job in the /jobs grid.

  3. Add its name to every language file
    jobs.<id>.name and jobs.<id>.description in en.yml, fr.yml, and es.yml.

  4. Save
    With auto-reload on it appears straight away, otherwise run /corejobs reload.

Do not remove a job players have levels in

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.