English Français
ModernJobs

ModernJobs

A premium Minecraft jobs plugin with full GUI, prestige, boosters, perks, leaderboards and PlaceholderAPI support.

API-Version 1.21+ Folia Supported PlaceholderAPI Vault Economy 11 Built-in Jobs

Perks System Overview

Perks are special gameplay bonuses players unlock by reaching certain levels in a job. There are two kinds:

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 KeyPermissionWhat it doesToggleable?
miner-stonesenseojobs.miner.stonesenseWhile 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-fortuneojobs.miner.fortune25% chance to get an extra smelted ore when breaking ore blocksYes
miner-veinojobs.miner.veinWhen you break an ore, all connected ore blocks of the same type (up to 24) also break automaticallyYes

Woodcutter Perks

Perk KeyPermissionWhat it doesToggleable?
woodcutter-treefellerojobs.woodcutter.treefellerBreaking a log breaks the entire connected tree (up to 48 logs)Yes
woodcutter-leafdecayojobs.woodcutter.leafdecayNearby leaves (3-block radius) instantly break when you chop a treeYes

Farmer Perks

Perk KeyPermissionWhat it doesToggleable?
farmer-replantojobs.farmer.replantBroken fully-grown crops are automatically replantedYes
farmer-autoplantojobs.farmer.autoplantSame as replant but also handles sugar cane, cactus and bambooYes
farmer-growthboostojobs.farmer.growthboost30% chance for nearby crops (2-block radius) to advance one growth stage when you harvestYes

Crafter Perks

Perk KeyPermissionWhat it doesToggleable?
crafter-massmakeojobs.crafter.massmakeAfter crafting an item, a bonus copy of the result is added to your inventoryYes

Fisher Perks

Perk KeyPermissionWhat it doesToggleable?
fisher-doublecastojobs.fisher.doublecastEach catch drops a second copy of the caught item into the worldYes
fisher-luckoftheseaojobs.fisher.luckofthesea30% chance to also receive a Nautilus Shell when catching fishYes
fisher-treasuresenseojobs.fisher.treasuresenseShows an action bar message when you catch a non-fish treasure itemYes

Hunter Perks

Perk KeyPermissionWhat it doesRequires
hunter-lootboostojobs.hunter.lootboostFirst drop from a kill is duplicated and added to the loot—
hunter-swiftkillojobs.hunter.swiftkillCritical 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-trackingojobs.hunter.trackingYour 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-mobsenseojobs.hunter.mobsenseNearby monsters (20-block radius) get the Glowing effect every second — visible through wallsCompass + Sneak

Blacksmith Perks

Perk KeyPermissionWhat it doesRequires
autosmeltojobs.blacksmith.autosmeltBreaking ore blocks automatically gives you the smelted result (iron ore → iron ingot, etc.) instead of raw ore—
blacksmith-repairojobs.blacksmith.repairSneak + right-click to repair the item in your main hand by 50 durability, consuming 1 iron ingotSneak + Iron Ingot
blacksmith-netheriteojobs.blacksmith.netheriteRight-click a Smithing Table holding a diamond tool/armor to upgrade it to Netherite, consuming 1 Netherite IngotNetherite Ingot

Builder Perks

Perk KeyPermissionWhat it doesRequires
builder-steadyhandsojobs.builder.steadyhands20% chance (configurable) to refund the block you just placed — the block is returned to your inventory automatically—
builder-scaffoldojobs.builder.scaffoldSneak + right-click to place a block directly below you while standing in mid-air. Consumes one block from your inventory.Sneak + Placeable block
builder-lineplaceojobs.builder.lineplaceSneak + 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-areafillojobs.builder.areafillSneak + 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 KeyPermissionWhat it doesRequires
supersmeltojobs.smelter.supersmeltWhen auto-smelt triggers, drop 2 smelted items instead of 1Works with autosmelt
smelter-autofuelojobs.smelter.autofuelRight-clicking an empty furnace/blast furnace/smoker automatically adds 1 coal from your inventoryCoal in inventory
smelter-masssmeltojobs.smelter.masssmeltWhen 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 KeyPermissionWhat it doesRequires
explorer-dimensionwarpojobs.explorer.dimensionwarpSneak + 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:

PerkParameterDefaultWhat it controls
miner-stonesensesearch-radius4Block radius to scan for nearby ores
miner-stonesensecooldown-ticks40Ticks between stone-sense pulses (20 ticks = 1 second)
hunter-swiftkillbonus-damage2.5Extra damage added on a critical hit
builder-steadyhandsrefund-chance0.20Probability (0.0–1.0) to refund a placed block
builder-lineplacelength3Number of extra blocks placed in the line
builder-areafillradius1Radius of the fill area (1 = 3×3, 2 = 5×5)
smelter-masssmeltmin-batch-size16Minimum items in a batch to trigger the bonus
smelter-masssmelttrigger-chance0.35Probability (0.0–1.0) that the bonus fires
smelter-masssmeltbonus-per-items16Bonus items = batch size ÷ this value
miner-veinblocks-per-tick4How many vein blocks to break per tick (performance)
woodcutter-treefellerblocks-per-tick6How 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.

ℹ The Miner's Night Vision perk at level 15 is implemented using this system — it never flickers because the effect is refreshed before it expires, with a 400-tick buffer.
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

PlaceholderValueAvailable in
%player%Player nameAll 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 materialfish

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
ℹ The 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 keyMechanic
miner-veinVein mining (sneak + break)
miner-fortuneBonus ore drops
miner-stonesenseNearby ore detection
autosmeltAuto-smelt mined blocks
supersmeltDouble output from smelting
woodcutter-treefellerFell entire tree at once
woodcutter-leafdecayInstant leaf decay
farmer-replantAuto-replant harvested crops
farmer-autoplantAuto-plant seeds from inventory
farmer-growthboostBone meal bonus on harvest
crafter-massmakeCraft full stack at once
fisher-doublecastDouble fishing rewards
fisher-luckoftheseaBonus treasure from fishing
fisher-treasuresenseNearby treasure detection
hunter-lootboostBonus mob drops
hunter-swiftkillBonus damage when sneaking
hunter-trackingSee nearby mob locations
hunter-mobsenseDetect nearby hostile mobs
blacksmith-repairTools repair on craft
blacksmith-netheriteNetherite upgrade bonus
builder-steadyhandsNo block durability loss while building
builder-scaffoldPlace scaffolding-like pillar while sneaking
builder-lineplacePlace a line of blocks (sneak + right-click)
builder-areafillFill a 3×3 area of blocks (sneak + right-click)
explorer-dimensionwarpTeleport between dimensions
smelter-autofuelAuto-insert fuel into furnaces
smelter-masssmeltSmelt multiple stacks simultaneously
ℹ A perk without a 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.