Jobs
A job watches for one kind of action and pays money and xp when it fires. Players do not join or leave a job, everyone works all six at once.
The six bundled jobs
| Job | Trigger | Pays for |
|---|---|---|
| Miner | BLOCK_BREAK |
Stone, deepslate, the ore family, ancient debris |
| Lumberjack | BLOCK_BREAK |
Logs and nether stems |
| Hunter | ENTITY_KILL |
Any mob, priced per heart |
| Farmer | BLOCK_BREAK |
Crops, multi-stage plants, right-click harvests |
| Fisherman | FISH |
Anything reeled in |
| Enchanter | ENCHANT |
Each enchant at a table |
The job list is just config. Add a seventh block to jobs.yml with its own name, trigger, and icon and it shows up in the menu. See jobs.yml.
How a payout is worked out
Money on each matching action:
payout = units / per * (base + per-level * currentLevel)
unitsis 1 for a block, a fish, or an enchant. For a per-heart job it is the mob’s hearts.perspreads the base across several actions. The miner ships atbase: 0.10withper: 10, so ten blocks pay 0.10 in total at level 1.per-levelis what each job level adds to the base.
XP is simpler:
xp += per-action (times the mob's hearts when scale-by-hearts is on)
/corejobs job setlevel <player> <job> <level> jumps a job to a level so you can see what the payout reads like there without grinding to it.
Per-block pricing
A BLOCK_BREAK job can price single materials instead of paying one flat rate:
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. Everything else falls back to money.base and xp.per-action. That is how one job can pay differently for stone and diamond ore, or split a chorus flower from a chorus stem.
Multi-stage plants
Breaking the bottom of a sugar cane stack drops every block above it, but the server only reports the one block the player hit. Without help, that is all the plugin would pay for.
The multi-block section of config.yml fixes that by counting the whole plant on the one break:
Sugar cane, cactus, bamboo, kelp. Breaking one counts everything stacked directly on top.
Chorus plant and chorus flower. Breaking a stem counts it and every attached block at or above it, so a trunk pays for the branches and flowers it carries. Breaking a flower off the top pays for the flower alone.
Vines. Breaking one counts it and every attached block at or below it, which is how a vine curtain drops.
Price each block under per-block so a tall stack pays a sensible total.
require-mature: true on the farmer stops an unripe wheat crop from paying. Multi-stage plants never report as mature, so they are handled by multi-block instead and skip that check.
Harvest blocks
harvest-blocks covers materials you pick by right-clicking when ripe, the way sweet berries and glow berries work in vanilla. The pick grants xp, and money only if you give the material a money.per-block entry.
A harvest material listed under blocks would also pay when the bush itself is broken, which is not what you want.
Anti place-and-break
anti-placement-dupe: true in config.yml stops the loop where a player places a block and breaks it again for free xp. A block the player placed by hand pays no xp, no money, and no drops.
Still paid in full:
- A plant that grew on its own off a placed base, like a sugar cane stalk growing up.
- A crop that reached maturity after being planted.
- A placed block that has since turned into something else, like a chorus flower that grew into a chorus plant.
A restart forgets every placement. That is fine in practice since nobody grinds through a restart, but it does mean the protection starts fresh each boot.
Next
Levels, the xp curve, and the prestige loop are on Levels & Prestige. Every key behind the numbers above is on jobs.yml.