Jobs
Note: When the server runs the diamond bank (economy.), the jobs module is off completely.
Jobs turn Minecraft actions (mining, killing, fishing, crafting, brewing, enchanting, breeding ...) into income: money, job XP and a dedicated points currency. Players level up, unlock titles, rewards, daily quests and a job shop. All progress persists across restarts.
Files: modules/jobs. (main config) and modules/jobs/<jobId>. (one file per job). The 11 default jobs are created when modules/jobs/ is empty; your changes are never overwritten by updates. When an update brings a new default job (e.g. digger), the plugin creates it once; which defaults a folder has already received is kept in modules/jobs/.. Deleted files and removed actions, titles or level rewards do not come back. To have bundled additions merged automatically, set jobs. (rewrites the files without comments).
Commands #
All /jobs subcommands need jobs. (default true) plus the listed permission (all default true).
| Command | Syntax | Permission | Description |
|---|---|---|---|
| Menu | /jobs or /jobs menu | jobs. | Hub GUI: my jobs, browse, quests, shop |
| Browse | /jobs browse | jobs. | Paginated job list with progress, click = join |
| Info | /jobs info <job> | jobs. | All actions, targets, rewards, titles of a job |
| Join | /jobs join <job> | jobs. + jobs. | Checks max-jobs limit and cooldown |
| Leave | /jobs leave <job> / leaveall | jobs. | With XP loss, if enabled; level, title and stats are kept |
| Stats | /jobs stats | jobs. | Level/XP/earnings per job |
| Top lists | /jobs top <job> / gtop | jobs. | Top 10 per job or globally |
| Limit | /jobs limit | jobs. | Remaining period quota |
| Points | /jobs points | jobs. | Job points balance |
| Quests | /jobs quests | jobs. | Daily quest GUI with progress bars |
| Display | /jobs toggle [actionbar| | jobs. | Income display mode |
| Boosts | /jobs boosts | jobs. | Active boosts and total multiplier |
| Shop | /jobs shop | jobs. | Job shop (pays with points; if the delivery does not fit completely into the inventory, nothing is charged) |
Tip: jobs. is registered automatically per job with default true. Block individual jobs via LuckPerms with jobs.; the browse menu checks the same permission.
Leaving a job: leaving costs the configured share of your current job XP (xp-loss., default 30 %). Level, title and lifetime stats are kept and restored when you rejoin. Joining and leaving through the GUI use the same cooldown (command-cooldowns, default 3 s) and permissions as /jobs join and /jobs leave.
Admin commands (/jobsa) #
| Command | Syntax | Permission | Description |
|---|---|---|---|
| Reload | /jobsa reload | jobs. | Reloads jobs, quests, boosts, shop |
| Status | /jobsa status | jobs. | Status of the block history providers (diagnosis) |
| Join/Leave | /jobsa join| | jobs. | Without limit check, without XP loss |
| Fire | /jobsa fire <player> <job> | jobs. | With guaranteed XP loss |
| Level | /jobsa promote| | jobs. | Level up/down, XP reset to 0 |
| XP | /jobsa grantxp| | jobs. | Grant/remove XP |
| Boosts | /jobsa boost <job| | jobs. | Permanent without duration; boostremove, boostlist |
| Limits | /jobsa resetlimit <player> / resetlimitall | jobs. | Reset period counters |
| Points | /jobsa points <player> <set| | jobs. | Manage points balance |
| Quest | /jobsa skipquest <player> <job> <index> | jobs. | Complete a quest without reward |
| Purge | /jobsa purgejob <job> confirm | jobs. | Permanently removes all player assignments and data of a deleted or no longer loadable job |
Additional permissions #
| Permission | Default | Description |
|---|---|---|
jobs. / jobs. | false | More concurrent jobs (highest wins; unlimited = 50) |
jobs. | false | Higher max level when n exceeds the config value |
jobs. | false | Automatic join on server join |
jobs. | false | Permission boost, e.g. jobs. (highest wins) |
jobs. | false | No XP loss on leaving |
jobs. / cropcheck / spamkill / spawner / afk / limit / dynamicpay | false | Bypasses the respective exploit protection |
The 11 default jobs #
| Job | Color | Main actions |
|---|---|---|
miner | gold | BREAK (ores, natural stone, badlands terracotta, obsidian, amethyst, sculk, cinnabar, sulfur, ancient debris) |
digger | yellow | BREAK (dirt, grass, sand, gravel, clay, mud, soul sand, snow, ice, moss) |
woodcutter | dark_green | BREAK (logs, leaves, huge mushrooms, bee nests, creaking hearts, resin), STRIP_LOG |
farmer | yellow | BREAK (crops, flowers, coral, plants), BREED, SHEAR, MILK, SMELT (cooking), CRAFT (food) |
hunter | red | KILL (every hostile mob, bosses; small amounts for peaceful animals) |
fisherman | aqua | FISH (fish, treasure, junk) |
crafter | light_purple | CRAFT (every other recipe), STONECUT (stonecutter), SMELT (glass, stone, bricks, terracotta ...) |
enchanter | dark_purple | ENCHANT (books, tools, weapons, armor; base + per offer level) |
brewer | dark_aqua | BREW (per potion type), CRAFT (brewing stand, cauldron, bottles, ingredients) |
weaponsmith | gray | CRAFT (weapons, tools, armor, anvil), SMITH (netherite, armor trims), REPAIR, SMELT (metals) |
explorer | green | EXPLORE (new ground), TAME, KILL (shulker only) |
Every job has 6 title tiers (levels 1/10/25/50/75/100) and level-up rewards on the same milestones.
Values #
Every block, item, recipe and mob was rated one by one (about 1,600 entries). Target at job level 1: about 3,000 coins and 4,400 job XP per hour of active play, level 100 after about 150 hours, about 150 job points every 2 to 3 hours. That is why XP = 1.5 × money and points = 0.02 × money in every default job. Examples (level 1): diamond ore 30, iron ore 4, stone 0.35, dirt 0.30, oak log 2.0, ripe wheat 0.8, zombie 13, cod 9, enchanting a book at level 30 12.5.
Never paid: building and decoration blocks that only exist crafted or placed, weeds bone meal creates at will, structure blocks (prismarine, purpur, nether bricks ...), pets and mounts. Recipes in a lossless loop (block ↔ ingots, wheat ↔ hay bale, honey, placing and breaking clay/snow) and plain recolouring pay nothing, so no loop can create money.
Action types #
| Action | Trigger | Target | Protection/special |
|---|---|---|---|
BREAK | Break a block | Material | Placed-block check, crop age, AFK detection |
KILL | Kill a creature | Creature | Spam-kill protection, spawner reduction, no suicide |
FISH | Fishing | Caught material | Also pays for treasure |
CRAFT | Crafting | Result material | Shift-click counts the real amount |
SMELT | Take from furnace | Material | Counts the taken amount |
BREW | Brew a potion | Potion type (STRENGTH, LONG_SWIFTNESS, STRONG_HEALING ...) | Last brewing stand user = brewer; per bottle and brew step. The step to a splash or lingering potion pays SPLASH_POTION or LINGERING_POTION; a missing potion type falls back to the bottle entry (POTION) |
ENCHANT | Enchanting | Material (BOOK for books) | Base + per-level × offer level (1-30) |
REPAIR | Anvil | Result material | Both slots must be filled; base + per-level × level cost |
STONECUT | Stonecutter | Result material | Settled after the click from what was really used, shift-click counts every piece |
SMITH | Smithing table | Netherite result or trim template | Upgrades pay by result (NETHERITE_SWORD), trims by template (COAST_ARMOR_TRIM_SMITHING_TEMPLATE) |
BREED / SHEAR / TAME | Breed/shear/tame | Creature | - |
MILK | Milking | Creature | Cooldown per animal |
EXPLORE | Walking, flying | ALL | Pays every explore-distance blocks of new ground: only in chunks the player has not visited within explore-revisit-minutes (and there during the first minute); at most explore-max-speed blocks per second count; teleports do not count |
STRIP_LOG | Strip wood | Original material | Copper axes work too; bamboo blocks count |
ALL is allowed everywhere as a wildcard and only applies when no more specific entry matches. Nexo/Carpentary targets (nexo:<id>, carpentary:<id>) take priority over vanilla materials.
Leveling and scaling #
xpRequired(level) = base * level + multiplier * level^exponent
effectiveIncome = baseMoney * (1 + (level - 1) * level-multiplier)
effectiveXp = baseXp * (1 + (level - 1) * level-multiplier * 0.5)XP scaling deliberately runs at half rate so high levels do not accelerate their own leveling exponentially. Surplus XP is never lost on level-ups (multi-level-ups possible); at max level no more XP is credited.
Overridable per job: each job file may have its own leveling section; missing values (or -1) use the global formula. GUI, /jobs stats and the web interface automatically use the formula of the respective job.
# in modules/jobs/woodcutter.yml: this job levels slower, earns more
leveling:
xp-formula:
base: 15.0
multiplier: 6.0
exponent: 2.2
income-formula:
level-multiplier: 0.05
xp-level-multiplier: 0.02Max level order: job's own max-level (0 = global) → global-max-level → permission jobs. (only when higher).
Payout #
Every action is settled for EVERY active job that pays for it (stacking intended; the default jobs never pay one action twice): level scaling and boosts apply to money and XP, then active period limits cap them. Points are raw: no level scaling, no boosts, no dynamic pay, no limits; only the AFK detection reduces them too. The display is batched (batch-interval) as action bar or boss bar. Crafting, anvil, stonecutter and smithing table pay only once the craft or take really happened (nothing on a full inventory or a denied take; clicking anything else in the window at the same moment voids the payout for that click; the anvil only pays when the levels were really taken). Brewing pays for the result of the brew step (e.g. splash potion), not the input potion.
Quests: per job and day, quests-per-job quests are generated from the job's real action/target pairs; entries with quest: false (rare mobs, filler blocks) are left out. With amount-mode: value the amount follows the target's worth: as many actions as it takes to earn a random value between target-value. and . (stone: hundreds, warden: one), capped by max-amount. Enchanting quests only count offers of level 15 and up. Reward = base value × amount × reward-multiplier (without level scaling), paid out automatically on completion. Daily reset at the configured time. Quests belong to the day, not to the membership: leaving and rejoining a job brings back the same quests with the same progress until the daily reset.
Boosts: three sources (admin via /jobsa boost, scheduled by time/weekday, permission jobs. where the highest wins). stacking-mode: multiply multiplies all, add adds the bonus shares; capped at max-multiplier. Admin boosts survive reload and restart.
Exploit protection #
Self-placed blocks pay nothing (history check via CoreProtect). Real growth is the exception: ripe crops you planted pay, and so do logs, huge mushrooms or torchflowers that grew from a sapling, mushroom or seed you planted. Immature crops pay nothing, spam kills of the same mob stop paying, spawner mobs pay only the configured fraction (recognised from the stored spawn reason, also after chunk unloads and restarts), baby animals and bred babies converted into monsters (e.g. infected villager babies) pay nothing when killed, suicide does not count, shift-click crafting counts the real amount, milking has a per-animal cooldown and teleports give no EXPLORE distance. Paid block breaks are optionally logged as #jobs-<player> in CoreProtect. Creative and spectator mode earn no job money, XP, points or quest progress (admin switch exploit-protection.).
crop-age-check only applies to real crops (wheat, carrots, potatoes, beetroots, nether wart, cocoa, sweet berries, pitcher and torchflower crops, stems). Sugar cane, cactus, kelp, bamboo and chorus flowers pay regardless of age.
Warning: Without CoreProtect the jobs module disables itself by default (require-history-provider: true), visible only as a log warning. To play without a history source, deliberately set the switch to false; then placed-block-failure decides (deny = safe, allow = pays anyway).
CoreProtect: Turn
tree-growthandmushroom-growthoff in the CoreProtect config. Otherwise CoreProtect stores every grown log as "placed by the planter" and trees you planted pay nothing. Cobblestone, stone and obsidian generators stay blocked throughlava-flow/water-flow(loggers#lava,#water).
AFK farms: by default the AFK detection (afk-detection) only watches KILL and FISH: more than 40 kills within 3 minutes inside 6 blocks (mob farm) or more than 25 catches within 15 minutes at the same spot without turning the camera (AFK fishing farm) pay only 25 % money, XP and points and give no quest progress. Active hunting and fishing while looking around pay in full, other jobs are not affected.
Configuration (modules/jobs.yml) #
# Enables or disables the jobs module.
enabled: true
jobs:
# Concurrent jobs per player. Highest jobs.max.<n> permission wins,
# jobs.max.unlimited = 50.
max-jobs: 3
# Players with jobs.autojoin.<jobId> join automatically on server join.
autojoin-enabled: false
# Level cap for jobs without their own max-level.
global-max-level: 100
# true = missing actions, titles and rewards of the bundled default jobs
# are merged into modules/jobs/ (files are rewritten without comments).
# false = files are left untouched.
merge-default-definitions: false
command-cooldowns:
# Anti spam for /jobs join and leave, seconds.
join: 3
leave: 3
chat-title:
# Job title before the chat name (after the team prefix).
# highest = job with the highest level, first = alphabetically first.
enabled: false
mode: highest
format: "<job_color>[<job_title>] "
actions:
# Blocks of new ground per EXPLORE payout.
explore-distance: 100.0
# Minutes after which an explored chunk counts as new ground again.
explore-revisit-minutes: 360
# At most this many blocks per second count (elytra, mounts).
explore-max-speed: 10.0
# Seconds between paid milk actions per animal.
milk-cooldown: 5
xp-loss:
# XP loss on voluntary leave. /jobsa fire always applies it,
# jobs.bypass.xploss prevents it.
enabled: true
percentage: 0.3
leveling:
xp-formula:
# Required XP = base * level + multiplier * level^exponent.
base: 10.0
multiplier: 4.0
exponent: 2.0
income-formula:
# +3% income per level; XP scales at half rate.
level-multiplier: 0.03
level-up:
chat-enabled: true
title-enabled: true
sound-enabled: true
sound: "entity.player.levelup"
sound-volume: 1.0
sound-pitch: 1.0
title-fade-in: 10
title-stay: 40
title-fade-out: 20
broadcast:
# Announce level-ups server-wide from min-level on.
enabled: false
min-level: 10
limits:
# Rolling window with money/XP caps per player.
enabled: false
max-earnings: 10000.0
max-xp: 50000.0
period-duration: 3600
income-display:
# Ticks between batched displays / boss bar duration.
batch-interval: 40
bossbar-duration: 60
boosts:
# multiply = boosts multiply, add = bonus shares add up.
stacking-mode: multiply
max-multiplier: 10.0
scheduled:
weekday-dawn:
job: farmer
category: all
multiplier: 1.25
start: "05:00"
end: "08:00"
days: [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY]
quests:
enabled: true
quests-per-job: 3
# value = amount follows the target's worth (see target-value),
# random = uniform between min-amount and max-amount.
amount-mode: value
target-value:
min: 250.0
max: 700.0
min-amount: 12
max-amount: 640
reward-multiplier:
money: 4.4
xp: 4.2
points: 3.4
# Daily reset (clears all quest data and regenerates).
reset-hour: 0
reset-minute: 0
creative-style:
# Flavor names with the <target> placeholder, per job or default.
enabled: true
templates:
default:
- "Guild contract: <target>"
- "Rush order: <target>"
miner:
- "Crystal vein: <target>"
dynamic-pay:
# Supply/demand adjustment based on action frequency.
enabled: false
sensitivity: 0.5
min-multiplier: 0.5
max-multiplier: 1.5
integrations:
coreprotect:
# Logs paid breaks as #jobs-<player>.
jobs-tracking: true
# Block history window for the placed-block check.
lookup-time-seconds: 2592000
nexo:
jobs-enabled: true
carpentary:
jobs-enabled: true
betterhud:
job-info:
enabled: true
popup-name: ""
popup-duration: 60
shop:
# Items cost job points; required-job/-level gate the purchase.
enabled: true
title: "<gold>Job Shop"
items:
miner_lantern_kit:
material: TORCH
amount: 64
display-name: "<gold>Miner Lantern Kit"
lore:
- "<gray>Cheap light for long tunnels."
cost: 35.0
required-job: miner
required-level: 3
exploit-protection:
placed-block-check: true
# true = without a history source (CoreProtect) the module
# disables itself.
require-history-provider: true
# auto, coreprotect, debug or disabled.
placed-block-provider: auto
# Without a definite answer: deny = do not pay (safe), allow = pay.
placed-block-failure: deny
# Only real crops (wheat, carrots, nether wart ...) pay when fully
# grown; sugar cane, cactus, bamboo etc. always pay.
crop-age-check: true
# true = creative and spectator mode also earn money, XP, points
# and quest progress.
creative-mode-pay: false
spam-kill:
enabled: true
window: 30
max-kills: 5
# Applies to mobs from spawners and from spawn eggs (dispensers too), so a
# spawner mob caught as an egg cannot be sold as a fully paid kill.
spawner-mobs:
enabled: true
money-multiplier: 0.0
xp-multiplier: 0.0
afk-detection:
# More than action-threshold actions within radius blocks during
# window seconds: money, XP and points times multiplier.
# view-tolerance (degrees, 0 = off) also requires a still camera.
# action-types: watched actions with their own values; without the
# list the values above apply to every action.
enabled: true
radius: 5
action-threshold: 50
window: 120
multiplier: 0.25
action-types:
KILL:
radius: 6
action-threshold: 40
window: 180
FISH:
radius: 4
action-threshold: 25
window: 900
view-tolerance: 2.0Custom jobs (modules/jobs/<jobId>.yml) #
If a job file fails to load (typo, deleted), player assignments are kept and reported in the log; once the file loads again payouts continue. Remove them for good with /jobsa purgejob <job> confirm (permission jobs.).
# name is required, otherwise the file is discarded. Invalid targets or
# negative values are skipped and logged; names this server version does
# not know (newer Minecraft) are reported in one summary line. After
# changes: /jobsa reload. Limits: 2000 actions, 100 titles, 200 reward tiers.
name: "Miner"
color: "gold"
short-name: "MIN"
icon: "IRON_PICKAXE"
description: "Mine ores and stones for profit"
# 0 = use global-max-level.
max-level: 0
actions:
# BREAK/CRAFT/SMELT/STRIP_LOG/STONECUT/SMITH/FISH/ENCHANT/REPAIR expect
# materials, KILL/BREED/SHEAR/TAME/MILK creatures, BREW potion types or
# bottle materials, ALL works everywhere.
BREAK:
DIAMOND_ORE:
money: 30.0
xp: 45.0
points: 0.6
ANCIENT_DEBRIS:
money: 60.0
xp: 90.0
points: 1.2
# Never a daily quest
quest: false
ENCHANT:
BOOK:
money: 0.5
xp: 0.75
points: 0.01
# Extra per offer level (ENCHANT) or anvil level cost (REPAIR)
per-level:
money: 0.4
xp: 0.6
points: 0.008
titles:
"1": "Apprentice Miner"
"25": "Expert Miner"
"100": "Mythic Deep Delver"
level-up-rewards:
# Console commands with {player}, {job}, {jobname}. Commands with
# disallowed characters are discarded and logged.
"25":
- "give {player} diamond 3"
"100":
- "give {player} netherite_upgrade_smithing_template 1"