ModernJobs
A premium Minecraft jobs plugin with full GUI, prestige, boosters, perks, leaderboards and PlaceholderAPI support.
Perks System Overview
Perks are special gameplay bonuses players unlock by reaching certain levels in a job. There are two kinds:
- Active Perks — triggered by specific actions (defined in
config.ymlunderperks.features). These are given via thepermissionsfield in a level reward. - Passive Effects — permanent potion effects applied as long as the player has the right permission (defined in
config.ymlunderperks.passive-effects).
Players can also view their perks visually in-game by opening a job's detail menu and clicking the ✨ Perks button.
Active Perks Reference
These perks are configured in config.yml under perks.features. Each perk is granted by giving the player the associated permission through a level reward.
Miner Perks
| Perk Key | Permission | What it does | Toggleable? |
|---|---|---|---|
miner-stonesense | ojobs.miner.stonesense | While mining, detects the nearest ore vein within a configurable radius and shows its name in the action bar. Has a cooldown to avoid spam. | Yes |
miner-fortune | ojobs.miner.fortune | 25% chance to get an extra smelted ore when breaking ore blocks | Yes |
miner-vein | ojobs.miner.vein | When you break an ore, all connected ore blocks of the same type (up to 24) also break automatically | Yes |
Woodcutter Perks
| Perk Key | Permission | What it does | Toggleable? |
|---|---|---|---|
woodcutter-treefeller | ojobs.woodcutter.treefeller | Breaking a log breaks the entire connected tree (up to 48 logs) | Yes |
woodcutter-leafdecay | ojobs.woodcutter.leafdecay | Nearby leaves (3-block radius) instantly break when you chop a tree | Yes |
Farmer Perks
| Perk Key | Permission | What it does | Toggleable? |
|---|---|---|---|
farmer-replant | ojobs.farmer.replant | Broken fully-grown crops are automatically replanted | Yes |
farmer-autoplant | ojobs.farmer.autoplant | Same as replant but also handles sugar cane, cactus and bamboo | Yes |
farmer-growthboost | ojobs.farmer.growthboost | 30% chance for nearby crops (2-block radius) to advance one growth stage when you harvest | Yes |
Crafter Perks
| Perk Key | Permission | What it does | Toggleable? |
|---|---|---|---|
crafter-massmake | ojobs.crafter.massmake | After crafting an item, a bonus copy of the result is added to your inventory | Yes |
Fisher Perks
| Perk Key | Permission | What it does | Toggleable? |
|---|---|---|---|
fisher-doublecast | ojobs.fisher.doublecast | Each catch drops a second copy of the caught item into the world | Yes |
fisher-luckofthesea | ojobs.fisher.luckofthesea | 30% chance to also receive a Nautilus Shell when catching fish | Yes |
fisher-treasuresense | ojobs.fisher.treasuresense | Shows an action bar message when you catch a non-fish treasure item | Yes |
Hunter Perks
| Perk Key | Permission | What it does | Requires |
|---|---|---|---|
hunter-lootboost | ojobs.hunter.lootboost | First drop from a kill is duplicated and added to the loot | — |
hunter-swiftkill | ojobs.hunter.swiftkill | Critical hits against hostile mobs deal bonus damage (default +2.5). A critical hit requires falling while not on the ground, flying, gliding or swimming. | — |
hunter-tracking | ojobs.hunter.tracking | Your compass automatically points to the nearest monster within 64 blocks. Right-click while holding a compass to manually pulse the target. | Compass in hand |
hunter-mobsense | ojobs.hunter.mobsense | Nearby monsters (20-block radius) get the Glowing effect every second — visible through walls | Compass + Sneak |
Blacksmith Perks
| Perk Key | Permission | What it does | Requires |
|---|---|---|---|
autosmelt | ojobs.blacksmith.autosmelt | Breaking ore blocks automatically gives you the smelted result (iron ore → iron ingot, etc.) instead of raw ore | — |
blacksmith-repair | ojobs.blacksmith.repair | Sneak + right-click to repair the item in your main hand by 50 durability, consuming 1 iron ingot | Sneak + Iron Ingot |
blacksmith-netherite | ojobs.blacksmith.netherite | Right-click a Smithing Table holding a diamond tool/armor to upgrade it to Netherite, consuming 1 Netherite Ingot | Netherite Ingot |
Builder Perks
| Perk Key | Permission | What it does | Requires |
|---|---|---|---|
builder-steadyhands | ojobs.builder.steadyhands | 20% chance (configurable) to refund the block you just placed — the block is returned to your inventory automatically | — |
builder-scaffold | ojobs.builder.scaffold | Sneak + right-click to place a block directly below you while standing in mid-air. Consumes one block from your inventory. | Sneak + Placeable block |
builder-lineplace | ojobs.builder.lineplace | Sneak + right-click on a block face to extend a line of blocks along that face direction (default 3 extra blocks). Consumes blocks from inventory. | Sneak + Placeable block |
builder-areafill | ojobs.builder.areafill | Sneak + right-click on a surface to fill a 3×3 area with your held block (configurable radius). Works on floors, walls and ceilings. Consumes blocks from inventory. | Sneak + Placeable block |
Smelter Perks
| Perk Key | Permission | What it does | Requires |
|---|---|---|---|
supersmelt | ojobs.smelter.supersmelt | When auto-smelt triggers, drop 2 smelted items instead of 1 | Works with autosmelt |
smelter-autofuel | ojobs.smelter.autofuel | Right-clicking an empty furnace/blast furnace/smoker automatically adds 1 coal from your inventory | Coal in inventory |
smelter-masssmelt | ojobs.smelter.masssmelt | When you extract a large batch from a furnace (default ≥16 items), there is a 35% chance to receive bonus smelted output proportional to the batch size | — |
Explorer Perks
| Perk Key | Permission | What it does | Requires |
|---|---|---|---|
explorer-dimensionwarp | ojobs.explorer.dimensionwarp | Sneak + right-click while holding a Compass to teleport to the next dimension (Overworld → Nether → End → Overworld) | Compass + Sneak |
Perk Feature Configuration
Every perk in config.yml under perks.features supports these universal options:
perks: features: miner-vein: enabled: true # false = perk is completely disabled for everyone toggleable: true # true = players can toggle it with /jobs perk <key> permission: "ojobs.miner.vein" display-name: "Vein Miner" description: - "<gray>Break connected ore veins." require-sneaking: false # true = only triggers when the player is sneaking require-item: "" # Material name — only triggers if this item is in main hand
Perk-specific configurable parameters
Some perks have additional numeric parameters you can tune:
| Perk | Parameter | Default | What it controls |
|---|---|---|---|
miner-stonesense | search-radius | 4 | Block radius to scan for nearby ores |
miner-stonesense | cooldown-ticks | 40 | Ticks between stone-sense pulses (20 ticks = 1 second) |
hunter-swiftkill | bonus-damage | 2.5 | Extra damage added on a critical hit |
builder-steadyhands | refund-chance | 0.20 | Probability (0.0–1.0) to refund a placed block |
builder-lineplace | length | 3 | Number of extra blocks placed in the line |
builder-areafill | radius | 1 | Radius of the fill area (1 = 3×3, 2 = 5×5) |
smelter-masssmelt | min-batch-size | 16 | Minimum items in a batch to trigger the bonus |
smelter-masssmelt | trigger-chance | 0.35 | Probability (0.0–1.0) that the bonus fires |
smelter-masssmelt | bonus-per-items | 16 | Bonus items = batch size ÷ this value |
miner-vein | blocks-per-tick | 4 | How many vein blocks to break per tick (performance) |
woodcutter-treefeller | blocks-per-tick | 6 | How many log blocks to break per tick (performance) |
Passive Effects (Permanent Potion Effects)
Passive effects apply a potion effect to a player as long as they have the required permission. The system refreshes every second to prevent any flickering.
perks: passive-effects: enabled: true effects: miner-nightvision: # Any unique key you want enabled: true permanent: true # true = refresh task (no flicker). false = only on movement. permission: "ojobs.miner.nightvision" type: "NIGHT_VISION" # Bukkit PotionEffectType name amplifier: 0 # 0 = level I, 1 = level II, etc. refresh-threshold: 100 # Reapply when remaining ticks drop below this apply-duration: 500 # Ticks to apply each refresh (must be > refresh-threshold) ambient: true # true = subtle particles (or none if particles: false) particles: false # Show potion particles? icon: true # Show effect icon in HUD?
How to add your own permanent effect
Add a new entry under effects: and give the player the permission through a level reward:
# In config.yml: hunter-speed: enabled: true permanent: true permission: "ojobs.hunter.speed" type: "SPEED" amplifier: 0 refresh-threshold: 100 apply-duration: 500 ambient: true particles: false icon: true # Then in hunter.yml level rewards, grant the permission: 10: permissions: - "ojobs.hunter.speed"
Defining Perks in Job Files (for GUI display)
Every job yml can have a perks: section. This is purely informational for the GUI — it lets players see what perks they will unlock and at what level. It does NOT grant perks by itself; permissions are granted through level-rewards.
perks: 5: # Level at which this perk unlocks name: "Vein Miner" icon: DIAMOND_PICKAXE # Material shown in GUI when unlocked description: - "Mine an entire ore vein at once" - "while sneaking." 10: name: "Ore Fortune" icon: EMERALD description: - "Chance to get an extra ore drop."
In the GUI, unlocked perks glow and show the icon. Locked perks show as a gray item with the required level.
Creating Custom Perks
ModernJobs supports four levels of custom perks, from zero code to a full Java mechanic:
Type 1 — Command trigger perk (full config, no code)
The most powerful config-only option. Define a perk in config.yml under perks.features with a trigger block. When the specified event fires and the player has the permission, ModernJobs runs your commands, shows an action bar message, and plays a sound — with chance and cooldown support.
# config.yml perks: features: lucky-miner: enabled: true toggleable: true permission: "ojobs.miner.lucky" trigger: event: "block-break" # block-break · block-place · mob-kill · fish # craft · smelt · interact · damage chance: 0.20 # 20% chance per trigger cooldown: 10 # seconds between triggers per player commands: - "give %player% diamond 1" player-commands: [] # commands run AS the player action-bar: "<gold>Lucky Miner<gray>: <white>bonus diamond!" sound: "ENTITY_EXPERIENCE_ORB_PICKUP" sound-volume: 1.0 sound-pitch: 1.2
Then wire it to the GUI in the job yml and grant it via a level reward as usual:
# jobs/miner.yml perks: 10: name: "<gold>🍀 Lucky Miner" icon: DIAMOND feature-key: "lucky-miner" description: - "<gray>20% chance to get a bonus diamond" - "<gray>when breaking any block." rewards: 0: 10: perks: - "lucky-miner"
Available placeholders
| Placeholder | Value | Available in |
|---|---|---|
%player% | Player name | All events |
%block% | Block material (e.g. DIAMOND_ORE) | block-break, block-place |
%mob% | Entity type (e.g. ZOMBIE) | mob-kill, damage |
%item% | Item material (e.g. IRON_INGOT) | craft, smelt |
%catch% | Caught item material | fish |
Type 2 — Passive potion effect (config, no code)
Any permanent or timed potion effect gated behind a permission. Configured in config.yml under perks.passive-effects.effects. See the Passive Effects section for full reference.
Type 4 — Wire a perk to a built-in mechanic
Add a feature-key matching one of the built-in identifiers below. The mechanic fires for any player who has the required permission.
perks: 15: name: "<aqua>⛏ Vein Miner" icon: DIAMOND_PICKAXE feature-key: "miner-vein" description: - "<gray>Sneak + break to mine the whole vein." rewards: 0: 15: perks: - "miner-vein"
Type 5 — Full custom mechanic via the Java API
For completely new gameplay mechanics, implement CustomPerkHandler in your own plugin and register it with ModernJobs on enable. Your handler is called automatically by ModernJobs for the events you override, but only when the player actually has the perk's permission — so all the standard enabled/toggleable/require-sneaking checks from config.yml still apply.
// In your plugin's onEnable(): OJobsProvider.get().ifPresent(api -> api.registerPerkHandler(new MyCustomPerk())); // Unregister on disable: OJobsProvider.get().ifPresent(api -> api.unregisterPerkHandler("myplugin-myperk"));
public class MyCustomPerk implements CustomPerkHandler {
@Override
public String getKey() {
return "myplugin-myperk"; // Must match feature-key in job yml
}
@Override
public void onBlockBreak(Player player, BlockBreakEvent event) {
// Your mechanic here — fires only if the player has the perk permission
player.sendMessage("Custom perk triggered!");
}
// Override only the events you need:
// onBlockPlace, onInteract, onMobKill, onFish, onCraft, onFurnaceExtract, onDamage
}
Then define the perk in the job yml so it shows in the GUI:
# In jobs/myjob.yml perks: 20: name: "<red>🔥 My Custom Perk" icon: BLAZE_ROD feature-key: "myplugin-myperk" description: - "<gray>Does something awesome." rewards: 0: 20: perks: - "myplugin-myperk"
Optionally, add a config section to get enabled/toggleable/require-sneaking support for free:
# In config.yml
perks:
features:
myplugin-myperk:
enabled: true
permission: "myjob.myperk"
toggleable: true
require-sneaking: false
CustomPerkHandler interface is in the fr.oreo.modernjobs.api package. Depend on ModernJobs as a soft dependency in your plugin.yml and add ModernJobs to your compile classpath.All built-in feature keys
| Feature key | Mechanic |
|---|---|
miner-vein | Vein mining (sneak + break) |
miner-fortune | Bonus ore drops |
miner-stonesense | Nearby ore detection |
autosmelt | Auto-smelt mined blocks |
supersmelt | Double output from smelting |
woodcutter-treefeller | Fell entire tree at once |
woodcutter-leafdecay | Instant leaf decay |
farmer-replant | Auto-replant harvested crops |
farmer-autoplant | Auto-plant seeds from inventory |
farmer-growthboost | Bone meal bonus on harvest |
crafter-massmake | Craft full stack at once |
fisher-doublecast | Double fishing rewards |
fisher-luckofthesea | Bonus treasure from fishing |
fisher-treasuresense | Nearby treasure detection |
hunter-lootboost | Bonus mob drops |
hunter-swiftkill | Bonus damage when sneaking |
hunter-tracking | See nearby mob locations |
hunter-mobsense | Detect nearby hostile mobs |
blacksmith-repair | Tools repair on craft |
blacksmith-netherite | Netherite upgrade bonus |
builder-steadyhands | No block durability loss while building |
builder-scaffold | Place scaffolding-like pillar while sneaking |
builder-lineplace | Place a line of blocks (sneak + right-click) |
builder-areafill | Fill a 3×3 area of blocks (sneak + right-click) |
explorer-dimensionwarp | Teleport between dimensions |
smelter-autofuel | Auto-insert fuel into furnaces |
smelter-masssmelt | Smelt multiple stacks simultaneously |
feature-key (or with an unrecognised key) is treated as a pure permission perk — it shows in the GUI and grants the permission, but triggers no special mechanic. This is intentional and useful for integrating with other plugins.
ModernJobs — Premium Minecraft Jobs Plugin
Documentation generated for server administrators and players.