Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for LucasTHCR

A lightweight, fully data-driven jobs plugin for Bukkit, Spigot, Paper, Purpur, and Folia — mine, farm, hunt, fish, buil

Report VJobs?

bStats

VJobs

Your server. Your economy.

A lightweight, fully data-driven jobs plugin — mine, farm, hunt, fish, build, brew, enchant and craft your way to a bigger wallet. Every price, every XP value, every job is yours to configure.


✨ Features

Feature Description
10 built-in jobs Miner, Farmer, Lumberjack, Hunter, Fisherman, Builder, Digger, Brewer, Enchanter, Weaponsmith.
100% data-driven Every material, mob, price and XP value lives in config.yml — add, remove, or rebalance jobs freely.
Leveling & Prestige Configurable XP curve per job, plus a prestige system that resets a job for a permanent payout bonus.
Stacking Multipliers Per-world, per-permission (VIP/MVP), and timed server-wide boost events.
Level-Up Rewards Automatically pay bonus money and run console commands when a player hits a milestone level.
Anti-Exploit Cooldown Location-based payout cooldown stops ore-regen farms, mine-and-replace tricks, and AFK grinders.
Job Limits & Switch Cooldown Control how many jobs a player can hold and how often they can swap — all permission-driven.
Bedrock-friendly GUI Clean chest GUI to browse, join, and leave jobs; click-only, works flawlessly via Geyser/Floodgate.
Per-job Leaderboards See who's grinding hardest at a glance.
PlaceholderAPI Support Job level, XP, and prestige for scoreboards, tab lists, and holograms.
SQLite or MySQL Zero-setup local storage or a pooled MySQL backend for networks.

📦 Dependencies

  • Bukkit, Spigot, Paper, Purpur, or Folia — 1.21.x (Java 21) — required
  • VaultrequiredSpigotMC (with any Vault-compatible economy plugin)
  • PlaceholderAPIoptionalModrinth

🔧 How It Works

Players pick one or more jobs via /vjobs. Each job listens for specific in-game actions — breaking blocks, harvesting crops, killing mobs, fishing, brewing, enchanting, crafting, or placing blocks — and pays out money and XP the moment a matching action happens, provided the location hasn't paid out again too recently.

XP accumulates per job using a configurable curve (xp-base * level ^ xp-exponent). Payouts are scaled by up to four stacking factors: world multiplier, permission multiplier (e.g. VIP/MVP), a timed boost event, and a permanent prestige bonus. Once a job hits its configured prestige level, players can reset it to level 1 for a permanent payout bump — up to a configurable number of tiers.

An anti-exploit cooldown tracks the exact location of every payout (block, fishing spot, brewing stand, kill spot) so the same spot can't be farmed repeatedly within a short window — without limiting normal, spread-out gameplay at all.


⚙️ Configuration

Every job, material, price, and XP value below is the shipped default — edit config.yml freely, nothing is hardcoded.

Click to expand the full config.yml
# =====================================================================
#  VJobs - Configuration
#  Everything here is 100% customizable: prices, XP, multipliers, cooldowns.
# =====================================================================

storage:
  type: sqlite               # sqlite or mysql
  filename: local.db
  mysql:
    host: localhost
    port: 3306
    database: vjobs
    user: root
    password: ""
    ssl: false
    pool-size: 10

messages:
  prefix: "&8[&6VJobs&8] &r"
  actionbar-notification: true   # "+12$ (Miner)" as an action bar message on every payout

# How many jobs a player may have at the same time.
# Additional slots via the permissions jobs.limit.<number> (highest matching number wins).
jobs-limit:
  default: 1

# Cooldown before a player may take on a new job after last joining/leaving a job.
# default-seconds applies if the player has NONE of the cooldown permissions listed below
# (e.g. 86400 = only 1x per day). If a player has one or more of the permissions, the
# SHORTEST matching value applies.
job-switch-cooldown:
  default-seconds: 86400
  permissions:
    jobs.cooldown.hour: 3600
    jobs.cooldown.instant: 0

# Anti-exploit: the same block/spot (block coordinate, rounded fishing spot, brewing stand
# position, kill location) only pays out again once at least this many seconds have passed
# since the last payout at that exact spot. Prevents ore regeneration farming,
# mine+replace tricks, and automated mob/harvest farms at a fixed spot.
anti-exploit:
  block-cooldown-seconds: 10

# XP required for level "n": xp-base * n ^ xp-exponent
xp-curve:
  xp-base: 100
  xp-exponent: 1.5
  max-level: 100

prestige:
  enabled: true
  from-level: 100                # level at which prestige becomes available (=max-level)
  max-tier: 10
  bonus-per-tier-percent: 2.0    # permanent payout bonus per prestige tier

# Global multipliers applied to every payout (money + XP).
multipliers:
  worlds:
    world_nether: 1.2
    world_the_end: 1.3
  permissions:
    jobs.multiplier.vip: 1.25
    jobs.multiplier.mvp: 1.5
  boost:
    active: false
    multiplier: 2.0
    until-unix-millis: 0   # 0 = no time limit, otherwise automatically disabled after this point

# Rewards for reaching certain levels in a job.
# Optional: money (bonus payout), commands (console commands, %player% is replaced).
level-rewards:
  miner:
    "10": { money: 50.0 }
    "25": { money: 150.0, commands: ["lp user %player% permission set jobs.perk.miner.fortune true"] }
    "50": { money: 500.0 }
  farmer:
    "10": { money: 50.0 }
    "25": { money: 150.0 }
  hunter:
    "10": { money: 50.0 }
    "25": { money: 150.0 }

jobs:
  miner:
    display-name: "Miner"
    description: "Mine ores and stone to earn money."
    icon: DIAMOND_PICKAXE
    actions:
      break:
        COAL_ORE: { money: 1.0, xp: 3 }
        DEEPSLATE_COAL_ORE: { money: 1.0, xp: 3 }
        COPPER_ORE: { money: 1.5, xp: 4 }
        DEEPSLATE_COPPER_ORE: { money: 1.5, xp: 4 }
        IRON_ORE: { money: 4.0, xp: 8 }
        DEEPSLATE_IRON_ORE: { money: 4.0, xp: 8 }
        GOLD_ORE: { money: 6.0, xp: 10 }
        DEEPSLATE_GOLD_ORE: { money: 6.0, xp: 10 }
        NETHER_GOLD_ORE: { money: 5.0, xp: 9 }
        REDSTONE_ORE: { money: 3.0, xp: 6 }
        DEEPSLATE_REDSTONE_ORE: { money: 3.0, xp: 6 }
        LAPIS_ORE: { money: 3.0, xp: 6 }
        DEEPSLATE_LAPIS_ORE: { money: 3.0, xp: 6 }
        DIAMOND_ORE: { money: 12.0, xp: 20 }
        DEEPSLATE_DIAMOND_ORE: { money: 12.0, xp: 20 }
        EMERALD_ORE: { money: 15.0, xp: 25 }
        DEEPSLATE_EMERALD_ORE: { money: 15.0, xp: 25 }
        NETHER_QUARTZ_ORE: { money: 2.0, xp: 5 }
        ANCIENT_DEBRIS: { money: 40.0, xp: 60 }
        STONE: { money: 0.1, xp: 1 }
        DEEPSLATE: { money: 0.1, xp: 1 }
        COBBLESTONE: { money: 0.05, xp: 1 }

  farmer:
    display-name: "Farmer"
    description: "Harvest crops to earn money."
    icon: WHEAT
    actions:
      harvest:
        WHEAT: { money: 1.0, xp: 3 }
        CARROTS: { money: 1.0, xp: 3 }
        POTATOES: { money: 1.0, xp: 3 }
        BEETROOTS: { money: 1.2, xp: 3 }
        NETHER_WART: { money: 1.5, xp: 4 }
        PUMPKIN: { money: 2.5, xp: 5 }
        MELON: { money: 2.0, xp: 4 }
        SUGAR_CANE: { money: 0.8, xp: 2 }
        COCOA: { money: 1.5, xp: 4 }
        CACTUS: { money: 0.8, xp: 2 }

  lumberjack:
    display-name: "Lumberjack"
    description: "Chop trees to earn money."
    icon: OAK_LOG
    actions:
      break:
        OAK_LOG: { money: 1.5, xp: 4 }
        SPRUCE_LOG: { money: 1.5, xp: 4 }
        BIRCH_LOG: { money: 1.5, xp: 4 }
        JUNGLE_LOG: { money: 1.8, xp: 4 }
        ACACIA_LOG: { money: 1.8, xp: 4 }
        DARK_OAK_LOG: { money: 2.0, xp: 5 }
        MANGROVE_LOG: { money: 2.0, xp: 5 }
        CHERRY_LOG: { money: 2.0, xp: 5 }
        CRIMSON_STEM: { money: 2.2, xp: 5 }
        WARPED_STEM: { money: 2.2, xp: 5 }

  hunter:
    display-name: "Hunter"
    description: "Kill monsters to earn money."
    icon: IRON_SWORD
    actions:
      kill:
        ZOMBIE: { money: 3.0, xp: 6 }
        SKELETON: { money: 3.0, xp: 6 }
        SPIDER: { money: 3.0, xp: 6 }
        CREEPER: { money: 4.0, xp: 8 }
        ENDERMAN: { money: 6.0, xp: 12 }
        WITCH: { money: 6.0, xp: 12 }
        DROWNED: { money: 3.5, xp: 7 }
        PILLAGER: { money: 4.0, xp: 8 }
        VINDICATOR: { money: 5.0, xp: 10 }
        BLAZE: { money: 7.0, xp: 14 }
        WITHER_SKELETON: { money: 8.0, xp: 16 }
        WARDEN: { money: 100.0, xp: 200 }
        ENDER_DRAGON: { money: 250.0, xp: 500 }
        WITHER: { money: 200.0, xp: 400 }

  fisherman:
    display-name: "Fisherman"
    description: "Fish for treasure to earn money."
    icon: FISHING_ROD
    actions:
      fish:
        COD: { money: 2.0, xp: 5 }
        SALMON: { money: 2.5, xp: 5 }
        PUFFERFISH: { money: 3.0, xp: 6 }
        TROPICAL_FISH: { money: 4.0, xp: 8 }
        BOW: { money: 5.0, xp: 10 }
        NAME_TAG: { money: 8.0, xp: 15 }
        SADDLE: { money: 10.0, xp: 18 }
        ENCHANTED_BOOK: { money: 15.0, xp: 25 }

  builder:
    display-name: "Builder"
    description: "Place blocks to earn money."
    icon: BRICKS
    actions:
      place:
        STONE: { money: 0.05, xp: 1 }
        BRICKS: { money: 0.3, xp: 1 }
        OAK_PLANKS: { money: 0.2, xp: 1 }
        GLASS: { money: 0.2, xp: 1 }
        WHITE_WOOL: { money: 0.2, xp: 1 }
        QUARTZ_BLOCK: { money: 0.4, xp: 2 }
        DEEPSLATE_TILES: { money: 0.4, xp: 2 }

  digger:
    display-name: "Digger"
    description: "Dig dirt and sand to earn money."
    icon: DIAMOND_SHOVEL
    actions:
      break:
        DIRT: { money: 0.1, xp: 1 }
        GRASS_BLOCK: { money: 0.1, xp: 1 }
        SAND: { money: 0.1, xp: 1 }
        GRAVEL: { money: 0.15, xp: 1 }
        CLAY: { money: 0.3, xp: 2 }
        SOUL_SAND: { money: 0.2, xp: 1 }
        SNOW_BLOCK: { money: 0.1, xp: 1 }

  brewer:
    display-name: "Brewer"
    description: "Brew potions to earn money."
    icon: BREWING_STAND
    actions:
      brew:
        POTION: { money: 3.0, xp: 6 }
        SPLASH_POTION: { money: 5.0, xp: 10 }
        LINGERING_POTION: { money: 7.0, xp: 14 }

  enchanter:
    display-name: "Enchanter"
    description: "Enchant items to earn money."
    icon: ENCHANTING_TABLE
    actions:
      enchant:
        # applies to every enchantment, scaled by the XP levels consumed
        default: { money-per-level: 2.0, xp-per-level: 5 }

  weaponsmith:
    display-name: "Weaponsmith"
    description: "Craft weapons to earn money."
    icon: DIAMOND_SWORD
    actions:
      craft:
        WOODEN_SWORD: { money: 1.0, xp: 2 }
        STONE_SWORD: { money: 2.0, xp: 4 }
        IRON_SWORD: { money: 6.0, xp: 10 }
        GOLDEN_SWORD: { money: 6.0, xp: 10 }
        DIAMOND_SWORD: { money: 20.0, xp: 30 }
        NETHERITE_SWORD: { money: 40.0, xp: 60 }
        BOW: { money: 8.0, xp: 12 }
        CROSSBOW: { money: 10.0, xp: 15 }

🔑 Commands & Permissions

Command Permission Default
/vjobs [gui] jobs.use true
/vjobs join <job> jobs.use true
/vjobs leave <job> jobs.use true
/vjobs info <job> jobs.use true
/vjobs top <job> jobs.use true
/vjobs prestige <job> jobs.use true
/vjobs togglenotify jobs.use true
/vjobs admin reload jobs.admin op
/vjobs admin set <player> <job> <level> jobs.admin op
jobs.limit.2jobs.limit.5 false
jobs.cooldown.hour / jobs.cooldown.instant false
jobs.multiplier.<name> (custom, defined in config)

Aliases: /jobs, /job


📋 Placeholders

Requires PlaceholderAPI to be installed.

Placeholder Description
%jobs_level_<job>% Player's current level in <job>
%jobs_xp_<job>% Player's current XP in <job>
%jobs_prestige_<job>% Player's current prestige tier in <job>

🚀 Getting Started

  1. Drop VJobs-<version>.jar into your plugins/ folder.
  2. Start your server once to generate config.yml and messages.yml.
  3. Tweak jobs, prices, and storage settings to fit your server.
  4. Reload with /vjobs admin reload — no restart needed.

👥 Credits

LucasTHCR Creator & maintainer

Discord: dc.gg/paperstream

Open source under the MIT License. VJobs depends only on the standard Vault and PlaceholderAPI ecosystem — free of third-party plugin lock-in.

Information

Category
Economy
Published
August 7, 2026
License
MIT
Downloads
1
Stars
0
Watchers
0

Pinned Versions

Members