RPG contracts for Minecraft · 1.21+

ContractRPG

Daily, weekly, special and server-wide contracts. Players hunt, mine, fish, craft and deliver to earn money, XP, points and loot — with a shop, ranks, rarities and a live boss-bar goal.

2.2.3Version
1.21+Minecraft
NoneRequired deps
ES·EN·FR·ZHLanguages
⚔️
HuntingKill 15 zombies
⛏️
MiningBreak 32 coal ore
🎣
FishingFish 10 cod
🐉
Hunt MythicMobSlay a boss
🌍
Global goalWhole server · boss bar

Everything a mission system needs

📅
Daily / Weekly / SpecialOffers lock per period, completed ones are marked, and specials complete only once.
🎯
20+ mission typesHunt, mine, fish, craft and deliver, plus enchant, smelt, breed, tame, trade, PvP, XP, explore, playtime, structures and more.
🎁
Rich rewardsMoney (Vault), XP, contract points and item loot tables with drop chances.
💎
Rarity systemCommon / Rare / Legendary — rarer contracts get more likely as players level up.
🛒
Point shopSpend points on items. Stock, cooldown, one-time buys, level unlocks and discounts.
🏆
Leaderboards/contract top by level, points or contracts — with PlaceholderAPI for holograms.
🌍
Global contractsCommunity goals the whole server fills together on a live boss bar. They appear on a cooldown, so they stay rare and special instead of flooding the economy.
🎲
Reroll & levelingReroll offered contracts for points; a level system with milestone rewards.
🛠️
In-game editorCreate, edit and delete contracts from a GUI — no config editing needed.
🤝
Party & marketplaceGroup contracts with shared progress or rewards, plus a player marketplace: pay others to gather items for you.
📊
Profiles & boosters/contract profile with stats and daily streaks; timed reward boosters, redeem codes and player suggestions.
🎯
Even more objectivesDamage, riding, playtime and visiting structures — plus anti-farm cooldowns and world-locked contracts.
No required dependencies. ContractRPG runs on its own. Vault, Citizens, MythicMobs, MMOItems, MMOCore and PlaceholderAPI are all optional and activate automatically.

Installation

Get ContractRPG running in a minute — it needs no other plugin to start.

Steps

  • Download ContractRPG.jar and drop it into your server's plugins/ folder.
  • Restart the server (Java 21 required for 1.21+).
  • (Optional) Install any integrations you want: Vault + economy, Citizens, MythicMobs, MythicLib, MMOItems, MMOCore, PlaceholderAPI.
  • Edit the config files and run /contract reload.

Integrations (all optional)

PluginWhat it unlocks
Vault + economyMoney rewards (EssentialsX, CMI, any economy)
CitizensItem-delivery contracts (NPC)
MythicMobsHunt-MythicMob contracts
MythicLib + MMOItemsDeliver-MMOItem contracts
MMOCoreUse MMOCore levels/XP instead of the built-in one
PlaceholderAPIPlaceholders for scoreboards & holograms
ℹ️
New language keys are added to your lang files automatically on startup — no reset needed.

Mission types

Every contract is one of these objectives. All progress is event-based — you must do it yourself.

TypeObjectiveWhat goes in mission-objective
⚔️ HUNTINGKill mobs (cows, zombies, creepers…)The mob · ZOMBIE
⛏️ MININGBreak blocks / mine oresThe block · IRON_ORE
🎣 FISHINGReel in fish with a rod (giving fish doesn't count)The fish · SALMON
🔨 CRAFTINGCraft itemsThe item · TORCH
📦 DELIVERDeliver items to a Citizens NPCThe item · WHEAT
💎 DELIVER_MMOITEMDeliver MMOItems to an NPCTYPE:ID · MATERIAL:SILVER_INGOT
🐉 HUNT_MYTHICMOBKill MythicMobsThe MythicMobs id · SkeletalKnight
ENCHANTINGEnchant itemsThe item enchanted · DIAMOND_SWORD
🔥 SMELTINGSmelt items in a furnaceWhat comes out of the furnace · IRON_INGOT
🐄 BREEDINGBreed animalsThe animal · COW
🐺 TAMINGTame animalsThe animal · WOLF
💰 TRADINGTrade with villagersWho you trade with · VILLAGER
🧱 BLOCK_PLACEPlace blocksThe block · OAK_PLANKS
XP_GAINGain experience (XP)Nothing — ignored
🗡️ KILL_PLAYERKill players (PvP)PLAYER
🧭 EXPLORETravel a distance (blocks)Nothing — ignored
🌱 VISIT_BIOMEVisit a biomeThe biome · PLAINS
DAMAGE_DEALTDeal damageWho you hit · ZOMBIE or ANY
🛡️ DAMAGE_TAKENTake damageWho hits you · SKELETON or ANY
🐎 RIDERide / mount a distanceThe mount · HORSE or ANY
⏱️ PLAYTIMEPlay for X minutesNothing — ignored
🏰 STRUCTUREVisit a structure (village, fortress…)The structure · VILLAGE

How to fill the mission-objective field

Names come straight from Minecraft's own enums (materials & entities): always UPPERCASE with underscores. One value per contract.

Typemission-objectiveExample
⚔️ HUNTINGEntity nameZOMBIE · COW · CREEPER
⛏️ MININGBlock / ore materialDIAMOND_ORE · COAL_ORE · OAK_LOG
🎣 FISHINGMaterial you reel inCOD · SALMON · PUFFERFISH
🔨 CRAFTINGCrafted materialTORCH · CHEST · BREAD
📦 DELIVERMaterial handed to the NPCCOBBLESTONE · SAND
💎 DELIVER_MMOITEMMMOItem as TYPE:IDMATERIAL:SILVER_INGOT
🐉 HUNT_MYTHICMOBMythicMob internal nameGoblin · Yeti
ℹ️
Not sure of a name? Use the in-game editor (/contract create): it gives you a clickable picker for mobs, fish and MythicMobs, or just reads the item in your hand for mining / crafting / deliver.

One full example per type (copy-paste into daily.yml / weekly.yml)

# HUNTING — kill entities # Every entry goes under "contracts:" in daily.yml / weekly.yml / special.yml. # Only mission-type + mission-objective change per type — the rest is the same. contracts: # HUNTING — kill entities hunt_zombies: display-name: "<#2E8B57>Kill Zombies" contract-type: DAILY mission-type: HUNTING mission-objective: "ZOMBIE" mission-requirement: 25 rewards: [ "eco give %player% 100" ] display-rewards: [ "100 money" ] experience-reward: 20 contract-points-reward: 7 level-requirement: 1 rarity: common # MINING — break blocks / ores mine_iron: display-name: "<#A52A2A>Mine Iron" contract-type: DAILY mission-type: MINING mission-objective: "IRON_ORE" mission-requirement: 32 rewards: [ "eco give %player% 150" ] display-rewards: [ "150 money" ] experience-reward: 35 contract-points-reward: 11 level-requirement: 6 rarity: common # FISHING — reel in fish with a rod fish_salmon: display-name: "<#FA8072>Fish Salmon" contract-type: DAILY mission-type: FISHING mission-objective: "SALMON" mission-requirement: 10 rewards: [ "eco give %player% 180" ] display-rewards: [ "180 money" ] experience-reward: 40 contract-points-reward: 13 level-requirement: 8 rarity: rare # CRAFTING — craft items craft_torch: display-name: "<#FFD700>Craft Torches" contract-type: DAILY mission-type: CRAFTING mission-objective: "TORCH" mission-requirement: 64 rewards: [ "eco give %player% 70" ] display-rewards: [ "70 money" ] experience-reward: 15 contract-points-reward: 4 level-requirement: 1 rarity: common # DELIVER — hand items to a Citizens NPC (set delivery-npc-id in config.yml) deliver_stone: display-name: "<#808080>Deliver Cobblestone" contract-type: DAILY mission-type: DELIVER mission-objective: "COBBLESTONE" mission-requirement: 128 rewards: [ "eco give %player% 110" ] display-rewards: [ "110 money" ] experience-reward: 25 contract-points-reward: 7 level-requirement: 4 rarity: common # DELIVER_MMOITEM — hand an MMOItem to the NPC (format TYPE:ID) deliver_silver: display-name: "<#C0C0C0>Deliver Silver Ingots" contract-type: DAILY mission-type: DELIVER_MMOITEM mission-objective: "MATERIAL:SILVER_INGOT" mission-requirement: 16 rewards: [ "eco give %player% 350" ] display-rewards: [ "350 money" ] experience-reward: 80 contract-points-reward: 30 level-requirement: 12 rarity: rare # HUNT_MYTHICMOB — kill a MythicMob by its internal name hunt_goblin: display-name: "<#228B22>Kill Goblins" contract-type: DAILY mission-type: HUNT_MYTHICMOB mission-objective: "Goblin" mission-requirement: 15 rewards: [ "eco give %player% 300" ] display-rewards: [ "300 money" ] experience-reward: 70 contract-points-reward: 25 level-requirement: 10 rarity: rare # ENCHANTING — enchant an item on the table enchant_sword: display-name: "<#9370DB>Enchant Swords" contract-type: DAILY mission-type: ENCHANTING mission-objective: "DIAMOND_SWORD" mission-requirement: 3 rewards: [ "eco give %player% 200" ] display-rewards: [ "200 money" ] experience-reward: 45 contract-points-reward: 14 level-requirement: 10 rarity: rare # SMELTING — take the result OUT of the furnace smelt_iron: display-name: "<#CD853F>Smelt Iron" contract-type: DAILY mission-type: SMELTING mission-objective: "IRON_INGOT" mission-requirement: 32 rewards: [ "eco give %player% 160" ] display-rewards: [ "160 money" ] experience-reward: 30 contract-points-reward: 10 level-requirement: 5 rarity: common # BREEDING — breed two animals breed_cows: display-name: "<#F5DEB3>Breed Cows" contract-type: DAILY mission-type: BREEDING mission-objective: "COW" mission-requirement: 8 rewards: [ "eco give %player% 140" ] display-rewards: [ "140 money" ] experience-reward: 28 contract-points-reward: 9 level-requirement: 3 rarity: common # TAMING — tame an animal tame_wolves: display-name: "<#D2B48C>Tame Wolves" contract-type: DAILY mission-type: TAMING mission-objective: "WOLF" mission-requirement: 2 rewards: [ "eco give %player% 220" ] display-rewards: [ "220 money" ] experience-reward: 50 contract-points-reward: 15 level-requirement: 12 rarity: rare # TRADING — the objective is WHO you trade with, not what you get trade_villagers: display-name: "<#32CD32>Trade with Villagers" contract-type: DAILY mission-type: TRADING mission-objective: "VILLAGER" mission-requirement: 10 rewards: [ "eco give %player% 190" ] display-rewards: [ "190 money" ] experience-reward: 38 contract-points-reward: 12 level-requirement: 6 rarity: common # BLOCK_PLACE — place blocks place_planks: display-name: "<#DEB887>Place Oak Planks" contract-type: DAILY mission-type: BLOCK_PLACE mission-objective: "OAK_PLANKS" mission-requirement: 128 rewards: [ "eco give %player% 120" ] display-rewards: [ "120 money" ] experience-reward: 22 contract-points-reward: 6 level-requirement: 1 rarity: common # KILL_PLAYER — PvP kills. The objective is always PLAYER pvp_kills: display-name: "<#DC143C>PvP Kills" contract-type: DAILY mission-type: KILL_PLAYER mission-objective: "PLAYER" mission-requirement: 3 rewards: [ "eco give %player% 500" ] display-rewards: [ "500 money" ] experience-reward: 90 contract-points-reward: 30 level-requirement: 15 rarity: legendary # VISIT_BIOME — reach a biome visit_desert: display-name: "<#EDC9AF>Visit the Desert" contract-type: DAILY mission-type: VISIT_BIOME mission-objective: "DESERT" mission-requirement: 1 rewards: [ "eco give %player% 150" ] display-rewards: [ "150 money" ] experience-reward: 30 contract-points-reward: 10 level-requirement: 2 rarity: common # DAMAGE_DEALT — damage you deal. Use ANY for "anything" damage_zombies: display-name: "<#B22222>Hurt Zombies" contract-type: DAILY mission-type: DAMAGE_DEALT mission-objective: "ZOMBIE" mission-requirement: 500 rewards: [ "eco give %player% 210" ] display-rewards: [ "210 money" ] experience-reward: 42 contract-points-reward: 13 level-requirement: 7 rarity: rare # DAMAGE_TAKEN — damage you take. ANY also covers falls and fire tank_skeletons: display-name: "<#708090>Tank Skeletons" contract-type: DAILY mission-type: DAMAGE_TAKEN mission-objective: "SKELETON" mission-requirement: 200 rewards: [ "eco give %player% 230" ] display-rewards: [ "230 money" ] experience-reward: 46 contract-points-reward: 14 level-requirement: 9 rarity: rare # RIDE — blocks ridden. Name the mount, or ANY for any of them ride_horse: display-name: "<#CD853F>Ride a Horse" contract-type: DAILY mission-type: RIDE mission-objective: "HORSE" mission-requirement: 1000 rewards: [ "eco give %player% 240" ] display-rewards: [ "240 money" ] experience-reward: 48 contract-points-reward: 15 level-requirement: 8 rarity: rare # STRUCTURE — get close to a structure visit_village: display-name: "<#DAA520>Find a Village" contract-type: DAILY mission-type: STRUCTURE mission-objective: "VILLAGE" mission-requirement: 1 rewards: [ "eco give %player% 260" ] display-rewards: [ "260 money" ] experience-reward: 52 contract-points-reward: 16 level-requirement: 10 rarity: rare # --------------------------------------------------------------- # These three have NO objective: playing, walking and gaining XP do not # happen "on" anything. Leave mission-objective out — and if you do write # something, it is ignored. # --------------------------------------------------------------- # XP_GAIN — experience points gained gain_xp: display-name: "<#7FFF00>Gain Experience" contract-type: DAILY mission-type: XP_GAIN mission-requirement: 500 rewards: [ "eco give %player% 200" ] display-rewards: [ "200 money" ] experience-reward: 40 contract-points-reward: 12 level-requirement: 5 rarity: rare # EXPLORE — blocks travelled on foot explore_1000: display-name: "<#87CEEB>Go Exploring" contract-type: DAILY mission-type: EXPLORE mission-requirement: 1000 rewards: [ "eco give %player% 170" ] display-rewards: [ "170 money" ] experience-reward: 34 contract-points-reward: 11 level-requirement: 3 rarity: common # PLAYTIME — minutes connected playtime_60: display-name: "<#FFD700>Play for an Hour" contract-type: DAILY mission-type: PLAYTIME mission-requirement: 60 rewards: [ "eco give %player% 280" ] display-rewards: [ "280 money" ] experience-reward: 56 contract-points-reward: 18 level-requirement: 1 rarity: rare

Rewards & rarity

Contracts pay money, XP, contract points and optional item loot (with drop chances). Each contract has a rarity (Common / Rare / Legendary) that changes its color, glow and how often it appears — and higher-level players see more rare/legendary contracts.

The default files ship 24 daily, 12 weekly and 20+ special contracts, weighted by tier: many Common, fewer Rare, only a handful of Legendary — so higher tiers are rarer to roll.

Commands

Base command /contract — aliases /contracts, /crpg. Since 2.1 you can add your own in command-aliases. Press Tab to see only the commands you can use.

Players

CommandWhat it does
/contractOpen the contracts menu
/contract shopOpen the point shop
/contract top [level|points|contracts]Leaderboard
/contract globalView the active global contract & rewards
/contract profileYour profile & stats
/contract party <invite|accept|leave|...>Group contracts (invite / accept / leave)
/contract marketPlayer marketplace (orders)
/contract market create hand <amount> <price>Order the item you are holding — custom items supported
/contract redeem <code>Redeem a code
/contract suggest <text>Suggest a contract
/contract helpCommand list
/contract versionPlugin version & author

Admin

CommandWhat it does
/contract createCreate a contract (GUI)
/contract editEdit / delete contracts (GUI, by category)
/contract reloadReload config, languages & shop
/contract resetForce a mission reset for online players
/contract resetplayer [player]Reset a player's data
/contract points [give|take|set] [player] [n]Manage contract points
/contract level [set|add] [player] [n]Change a player's level
/contract shopeditIn-game shop editor
/contract global [next|reset]Manage the global contract
/contract booster <mult> <seconds>Reward booster (×mult for N seconds)
/contract analyticsCompletion analytics (GUI)
/contract suggestionsView player suggestions
/contract placeholderList placeholders

Permissions

Grant these with LuckPerms or any permissions plugin.

PermissionWhat it doesDefault
contractrpg.useBase command & menutrue
contractrpg.shop.openOpen the shoptrue
contractrpg.reloadReloadop
contractrpg.admin.resetMission resetop
contractrpg.admin.shopeditShop editorop
contractrpg.command.placeholderPlaceholder listop
contractrpg.adminAdmin: create/edit, points, level, resetplayerop

Placeholders

Requires PlaceholderAPI. Great for scoreboards and DecentHolograms leaderboards.

%contractrpg_level% %contractrpg_exp% %contractrpg_exp_required% %contractrpg_exp_bar% %contractrpg_active_contracts_count% %contractrpg_active_<1-N>_name% %contractrpg_active_<1-N>_objective% %contractrpg_active_<1-N>_progress% %contractrpg_active_<1-N>_required% %contractrpg_active_<1-N>_target% %contractrpg_top_<level|points|completed>_<1-N>_name% %contractrpg_top_<level|points|completed>_<1-N>_value%

Configuration

Clean, commented files — most of it can be done in-game with the mission editor.

FileWhat it unlocks
config.ymlLeveling, storage, reroll, rarities, leaderboard, global contracts, completion FX, party, marketplace
contracts/daily.yml · weekly.yml · special.ymlYour contracts
global.ymlServer-wide global contracts
shop.ymlManaged in-game with /contract shopedit
lang/en·es·fr·zh.ymlEvery message, fully editable
🎨
Colours anywhere (names, rewards, messages) accept both modern <yellow> / <#ff8800> tags and classic &e / &#ff8800 codes — you can even mix them in one line.

config.yml in detail

Every setting in plugins/ContractRPG/config.yml. Keys stay in English (that's how the plugin reads them); the comments follow your language.

Language, NPC & storage

language: "es" # language (file in /lang) delivery-npc-id: -1 # Citizens NPC id for deliveries (-1 = none) storage: type: "yaml" # "yaml" or "sqlite"

Command aliases

command-aliases: extra names for /contract - missions - contratos
ℹ️
Aliases are registered at startup, so after changing them you need a full server restart/reload is not enough. If another plugin already uses that name, it is skipped and a warning is logged.

Leveling

leveling: experience-base: 250 # XP for level 1→2; 2→3 = x2, etc. level-up: message: true # message on level up title: true # on-screen title sound: ENTITY_PLAYER_LEVELUP # sound (empty = off) milestones: # commands when REACHING a level; %player% available '5': - "eco give %player% 1000" '10': - "eco give %player% 5000"

MMOCore (optional)

mmocore: enabled: false # true ONLY if you have MMOCore (use its levels/xp)

Daily / weekly / special missions

show-locked-missions: true # show missions above your level, greyed out daily-missions: offered-amount: 4 # how many are offered to choose from selectable-amount: 2 # how many can be accepted per day reset-unfinished-on-new-offer: true # clears unfinished ones when new are offered weekly-missions: offered-amount: 3 # offered per week selectable-amount: 1 # acceptable per week reset-unfinished-on-new-offer: true special-missions: offered-amount: 2 # special missions offered selectable-amount: 1

Global contracts

global-contracts: enabled: true # community goals (whole server contributes) show-bossbar: true # progress boss bar on top cooldown-min-minutes: 180 # min rest between globals (none active) cooldown-max-minutes: 360 # max rest — the wait is random between the two. 0 and 0 = back-to-back

Rarities

rarity-use-weight: true true = read weight · false = read chance rarities: each contract can have rarity: <key> common: display-name: "<gray>» Common" weight: 100 raffle tickets (higher = more frequent) weight-per-level: 0 extra tickets per player level chance: 74 the same as a percentage (they add to 100) chance-per-level: 0 glow: false glow in the GUI legendary: display-name: "<#FFAA00>✦ Legendary ✦" weight: 5 weight-per-level: 0.5 chance: 4 chance-per-level: 0.5 glow: true
🎲
A weight is a raffle ticket, not a percentage. With 100 / 30 / 5 there are 135 tickets in total, so the real split is 74% / 22% / 3.7%. That is why raising one rarity lowers all the others — the pot grew. If you prefer plain percentages, set rarity-use-weight: false and use the chance lines. Either way, the console prints the real percentages on startup.

Shop (discount per level)

shop: discount-per-level: 0 # % discount per level (0.5 = -0.5%/level) max-discount: 25 # max total discount (%)

Reroll

reroll: enabled: true # reroll offered contracts (daily/weekly) cost: 10 # contract points per reroll

Leaderboard

leaderboard: enabled: true # player leaderboard size: 10 # how many show in the top update-interval-seconds: 300 # recompute (min 30 s)

Completion sound & particles

completion: sound: "ENTITY_PLAYER_LEVELUP" # sound on completion ("" = none) sound-volume: 1.0 # volume sound-pitch: 1.0 # pitch particles: "TOTEM_OF_UNDYING" # particles ("" = none) particles-count: 30 # particle count

Party (group contracts)

party: max-size: 4 # max members per party (leader included)

Marketplace (player orders)

market: max-open-orders: 5 # open orders per player (requires Vault)

Example contract (with rarity + loot)

daily_hunt_cows: display-name: "<#CD7F32>Daily: Fresh Meat" contract-type: DAILY mission-type: HUNTING mission-objective: "COW" mission-requirement: 15 rewards: [ "eco give %player% 70" ] experience-reward: 15 contract-points-reward: 5 level-requirement: 1 rarity: rare item-rewards: '1': { material: DIAMOND, amount: 2, chance: 100 } '2': { material: EMERALD, amount: 1, chance: 50 }

Custom reward commands

rewards: is a list of console commands run when the contract is completed — use %player% for the player. display-rewards: is the human-readable text players see. Money is just the eco give command; you can add any command (ranks, kits, crates…).

rewards: - "eco give %player% 500" - "lp user %player% addgroup vip" - "crates give %player% legendary 1" display-rewards: - "500 money" - "VIP Rank" - "1x Legendary Crate"
ℹ️
You can do all of this in-game too: in the mission editor press Reward commands — left-click to add one (type command | display text), right-click to clear them all.
ContractRPG / Changelog

Version history

Every release and what changed in it.

v2.2.3 2026-08-18 Latest
  • 🐛Contracts asking for damage from a specific mob never advanced. The damage source was not passed through, and a projectile reported itself rather than its shooter — when a skeleton shoots you, the dam
  • 🐛Damaging a mob with a bow did not count towards DAMAGE_DEALT contracts. The same bug in reverse: the plugin saw the arrow as the attacker instead of the player.
  • 🐛An accepted contract vanished from the list after a reroll. It was never deleted — it stayed active and kept counting — but rerolling regenerates the offers, and offers leave out what you already hold
v2.2.2 2026-08-16
  • 🐛Seven mission types could never be completed if the contract had an objective written in: PLAYTIME, EXPLORE, XP_GAIN, KILL_PLAYER, RIDE, DAMAGE_TAKEN and TRADING. They were compared against a fixed va
  • RIDE now accepts the mount: "ride 1000 blocks on a horse" is finally something you can ask for, and a pig no longer counts toward it.
  • DAMAGE_TAKEN accepts the attacker, so "survive 200 damage from skeletons" works. Falls and fire count as ANY.
  • TRADING accepts who you trade with, so "trade 10 times with villagers" works.
  • 🔧The wiki now documents what goes in mission-objective for all 22 mission types, and ships a copy-paste example of every single one instead of only seven.
v2.2.1 2026-08-15
  • 🐛Riding contracts never progressed on animals. Horses, pigs and striders don't fire the event the plugin was listening to — only boats and minecarts do. Distance on a mount is now measured directly.
  • 🐛Multi-objective contracts could not be finished if one of their goals was moving, riding or visiting a structure. Those three checks only looked at the contract's main type, so a sub-objective of that
  • 🐛NPC deliveries counted only toward their own contract: they were invisible to global contracts and to multi-objective sub-objectives.
  • 🐛MythicMob kills didn't advance multi-objective sub-objectives either.
v2.2.0 2026-08-14
  • 🐛Crafting missions could be completed without spending materials: clicking the result slot counted progress even when the craft never happened (full inventory, or a different item on the cursor).
  • 🐛Crafting and trading counted 1 on a shift-click, no matter how many items were actually made or traded.
  • 🐛Villager trades that never went through still added mission progress.
  • 🔧command-aliases now explains itself: it names the plugin already holding an alias, and reports when the server won't refresh its command tree.
v2.1.0 2026-08-12
  • Tab completion for /contract, showing only the commands each player can actually use
  • Custom command aliases in command-aliases: set /missions, or whatever name you like
  • The marketplace accepts custom items: /contract market create hand
  • Rarity odds can be written as percentages with rarity-use-weight: false
  • 🐛The marketplace silently discarded any item with a custom name, an enchantment or damage
  • 🔧Improved — On startup, the console prints the real percentage of each rarity
v2.0.3 2026-08-10
  • 🐛Changing offered-amount or selectable-amount had no effect on players who had already opened the mission menu
  • 🔧Missions above your level are now shown greyed out with the level they need, instead of just not being there
  • show-locked-missions in config.yml — you decide whether locked missions are shown or hidden
v2.0.2 2026-08-09
  • 🐛Buying from the shop crashed when the item had a coloured name
v2.0.1 2026-08-06
  • 🐛The shop editor ignored your language setting: its menus were hardcoded. All 36 texts now come from the language files, translated to EN/ES/FR/ZH.
  • 🐛Duplicate key in lang/es.yml: it threw a "duplicate keys found" warning on startup and made the shop editor's invalid-number message show without the plugin prefix.
  • 🔧The 58 ready-made contracts now ship in English. They are examples - rename them to your own language from /contract editor.
  • 🔧config.yml, shop.yml, global.yml, codes.yml and the contract files are now documented in English, along with the console messages.
  • 🔧Language files repair themselves: a file with duplicated keys is rewritten clean on startup, keeping your texts, edits and comments.
v2.0 2026-08-01
  • Party contracts: form a group with /contract party and share progress and/or rewards (the admin decides per contract).
  • Player marketplace: post an order with /contract market ("pay X for Y items"); others fulfill it and get paid (needs Vault).
  • Multi-objective contracts: a single contract can require several goals at once — all must be completed.
  • Profile / stats GUI: /contract profile shows level, points, total completed, daily streak, favorite type and a breakdown by mission type.
  • Reward boosters: /contract booster <mult> <seconds> temporarily multiplies money, points and EXP from contracts.
  • Redeemable codes: /contract redeem <code> for events or Discord rewards (codes.yml).
  • Community suggestions: players use /contract suggest; admins review them with /contract suggestions.
  • Admin analytics: /contract analytics — a GUI with completion counts per contract to balance your economy.
  • Contracts by world/region: limit a contract to specific worlds (e.g. "kill 10 blazes in the Nether").
  • Anti-farm: a per-contract minimum time between progress to stop macro/afk abuse.
  • Smart reminders: on join, players are told about contracts that are almost complete.
  • Completion feedback: configurable sound + particles + title when a contract is completed.
  • New objective types: damage dealt, damage taken, riding/mounting distance, playtime, and visiting structures (village, fortress...).
  • 🔧Every contract-configurable feature above is also in the in-game mission editor, with its own explanation.
  • 🔧Language files now auto-update on new versions, just like the config — new messages appear without losing your edits.
v1.2 2026-07-26
  • Classic & color codes (&e, &6, &l, &#ff8800…) are now supported, alongside <minimessage> tags.
  • 🔧You can mix & codes and <minimessage> in the same line — both work everywhere (rewards, titles, menus, boss bar).
v1.1 2026-07-24
  • Global contracts now rest between one another, so they stay rare and special.
  • 🔧The gap is configurable (a random wait between two values in minutes).
  • 🔧A server-wide announcement when a fresh global contract appears.
v1.0 2026-07-11

No notes for this version.

ContractRPG / Discussion

Discussion

Comment and share your experience on each plugin version.

Log in to comment on this version.Log in

No comments on this version yet — be the first!

ContractRPG / Reviews

Player reviews

What server owners think of this plugin.

5.0
★★★★★
2 reviews
Log in to leave a review.Log in
TE
Tester03 👤 Usuario⚒️ ContractRPG: Professions⚔️ ElementalArms 12 Aug 2026
★★★★★

Thank you for creating this amazing plugin. It works perfectly on my server. The support team is incredibly enthusiastic and quick to address and fix any issues.

IN
infinity3113 ⭐ Staff🎰 SlotMachine⚔️ ElementalArms🛡️ GuardianStones 05 Aug 2026
★★★★★

buen plugin!