ContractRPG | Daily, Weekly & Global Contracts [1.21+]
2.7.0✅ A full missions & contracts economy for your server — hunt, mine, fish and craft for real rewards.
2.7.0latest2.7.0 - Create market orders from the menu, item previews and real item namesSep 16, 2026 ContractRPG 2.7.0 - Create market orders from the menu, item previews and real item names Fixed · Items from Nexo and newer ItemsAdder showed as their base material (for example PAPER) in the market: only the anvil-style name was checked. · %contractrpg_active_N_objective% showed "Missing message: translation-keys..." for objectives not in the translation list. It now shows a readable name. · On 1.21.1 and 1.21.2, biome visit contracts never progressed: the biome was always read as empty because of an API change in 1.21.3. Improved · Items show their real name in the market, deliveries, shop and rewards: the custom name first, then the item name used by Nexo and ItemsAdder. · Items without a custom name show a readable name, like "Iron Ingot" instead of IRON_INGOT. New · Create market orders from the menu: /contract market > Create an order > pick the item, set the amount and payment, publish. No commands needed. · The item list has every item in the game with a search, and hides items that cannot be obtained in survival (market.picker-hidden). · Custom items (Nexo, ItemsAdder, MMOItems...): while creating an order, click the item in your own inventory to ask for that exact item. · Right-click an order in /contract market to preview the item exactly as it is, with its name, lore, enchantments and everything its plugin adds. · The preview lists what the tooltip may hide (enchantments, durability, custom model data, source plugin) and lets you deliver from there. · In the order creator, click the chosen item to preview it the same way before publishing the order. Upgrading · Drop the jar in and restart. The new config and language keys are added to your files automatically.2.6.02.6.0 — Pages in the contract menu, offers that follow your levelSep 14, 2026 ContractRPG 2.6.0New · Pages in the contract menus. A category only had room for 28 contracts, and everything past that — accepted, offered or locked — was silently cut off. The list is now split into pages with arrows at the bottom corners. Fixed · The contract offer did not follow the player's level. Dailies and weeklies are frozen the first time the menu is opened, but the offer was never checked again after a level change. A player who went from level 1 to level 10 kept their level-1 offer, and every contract between level 2 and 10 vanished — not in the offer, and not in the locked list either. The offer now refreshes when a level change unlocks contracts the player can take, or removes ones they no longer qualify for. Only then: levelling up is not a free reroll. Offers already stuck this way fix themselves the next time the menu is opened. · SQLite: the shop purchase history was not loaded since 2.3.0. It was saved but never read back, so it came back empty on every login — one-time shop items could be bought again, and cooldowns were skipped just by relogging. This one was on me, and it is fixed. Purchases recorded before this update were overwritten with that empty history and cannot be restored. YAML storage was not affected.
Upgrading · Drop the jar in and restart. Nothing to change in your configs; the new page button texts are added to your language files automatically. · Want players to see every contract in a category? offered-amount is how many are drawn at random for each player. Set it above your total (for example 100) and they will see — and can page through — all of them. selectable-amount still limits how many they can accept. · SQLite + one-time shop items: purchase history from 2.3.0 onwards is gone, so players may be able to buy those items once more. If that matters on your server, you can temporarily remove the items or raise their price.
2.5.12.5.1 — Hotfix: contract rewards failed on 1.21.1 / 1.21.2Sep 12, 2026 ContractRPG 2.5.1 On 1.21.1 and 1.21.2, completing a contract paid nothing. The player finished the objective, got the XP and the points, and then the reward stopped halfway: no money, no items, and the contract never marked as completed. If you run one of those versions, update — and the contracts your players already lost will be paid automatically. Fixed · Completing a contract threw an IncompatibleClassChangeError on 1.21.1 / 1.21.2. The plugin is built against the 1.21.4 API, where Bukkit's Sound is an interface; on those versions it is still an enum, so the server refused the call that plays the completion sound. It happened right before the money and the items were handed out, which is why the reward vanished. Sounds and particles are now resolved in a way that works on every 1.21.x. · Contracts stuck at 100% are paid out automatically. The ones caught by the bug above stayed active with full progress, and in that state they could never complete again — the progress had already reached the requirement, so nothing ever triggered the reward. Each player gets them paid and cleared the next time they join. Nothing to run, nothing to reset. Improved · A wrong sound or particle name in config.yml now skips that effect and says so once in the console, instead of silently doing nothing.Upgrading · Drop the jar in and restart. Nothing to change in your configs. · Players with contracts left stuck at 100% get them paid on their next login — one time, automatically.
2.5.02.5.0 — Real hex colours, and start/stop global contracts by handSep 11, 2026 ContractRPG 2.5.0 If you set hex colours or gradients in the language files, you have never actually seen them. The files accepted them without a single error, and then every one was rounded to the closest of Minecraft's 16 basic colours on its way to the player. That is fixed — and the colours you already wrote will simply start showing as you meant them. Fixed · Hex colours and gradients were downsampled to the 16 vanilla colours. A <#8A2BE2> or a <gradient:...> in a message, the prefix, a menu title, an item or the boss bar came out as a plain purple or blue, so it looked as if the plugin only supported the basic colours. Everything now keeps its exact colour — MiniMessage tags and &#rrggbb codes alike. · One add-on editor message was hardcoded in Spanish ("that is not a number"). It now comes from the language file.New · /contract global start <id> — start any global contract from global.yml right away. The ids tab-complete. The one currently running ends without rewards. · /contract global stop — end the current global contract without rewards and keep them stopped, even after a restart, until you start one again. · global-contracts.automatic — true (the default) keeps today's behaviour: global contracts start and rotate on their own. false makes them manual: none runs until you start one, and after one is completed the server waits for your next command. Improved · /contract global next now announces the new global contract to the whole server. Before, the boss bar just switched to another contract with no message.
Upgrading · Drop the jar in and restart. The new config option and language keys are added to your files automatically, keeping every value you had set. · automatic arrives as true, so global contracts behave exactly as before until you change it. · Nothing to change in your language files: the hex colours and gradients you already wrote will now show as intended. If you picked a colour that only looked right because it was being rounded, you will now see the real one. · The new admin subcommands use the existing contractrpg.admin.reset permission, the same as next and reset.
2.4.02.4.0 — FancyNpcs support for NPC deliveriesSep 10, 2026 ContractRPG 2.4.0New · FancyNpcs support. Delivery contracts now work with a FancyNpcs NPC as well as with Citizens. Put the NPC's name — the one you gave it with /npc create — in delivery-fancynpc, and right-clicking it does exactly what the Citizens delivery NPC does: it takes the item in your hand if a contract accepts it, or opens the contracts menu. You can run both plugins at once. Improved · One delivery logic for both NPC plugins. Citizens and FancyNpcs go through the same code, so they cannot drift apart: both respect worlds, anti-farm-ms and party-shared, both only take the item when something accepts it, and both confirm the delivery in chat. Fixed · A cancelled click on the delivery NPC still handed the item over. If another plugin cancelled the click on the Citizens NPC — a cooldown, a protected area — the delivery went through anyway. It no longer does.
Upgrading · Drop the jar in and restart. delivery-fancynpc is added to your config.yml automatically, empty, so nothing changes until you set it. · FancyNpcs runs on Paper, not Spigot. ContractRPG does not need it: it only hooks in when FancyNpcs is installed, and says so in the console.
2.3.02.3.0 — 14 fixes: MMOCore levels, /contract reload, anti-farming & FoliaSep 9, 2026 ContractRPG 2.3.0 If your server runs MMOCore, every contract above level 1 has been impossible to take. Not rare. Not hard. Impossible, since the day you installed it, with nothing in the console to say so. The plugin was sending contract EXP to MMOCore and then checking its own internal level — which, for that exact reason, never left 1. Fixed · MMOCore servers: every contract with level-requirement above 1 was locked forever. Contract EXP goes to MMOCore, so the plugin's own level stayed at 1 permanently — and the offer list, the locked list, the accept check and the %contractrpg_level% placeholder all read that internal level. The contracts showed up greyed out and clicking them only ever said "you need level X". They all read the MMOCore level now, the same one the shop was already using. · /contract reload did not reload your contracts. It reloaded the config, the languages and the shop, and silently ignored daily.yml, weekly.yml, special.yml and global.yml. Editing a contract by hand needed a full server restart, and nothing said so. It now reloads everything and tells you how many contracts it loaded. It also works from the console. · Mining contracts could be finished with a stack of stone. Place a block, break it, repeat. Blocks a player placed are now marked and do not count when broken — and the mark lives in the chunk, so a restart does not launder it. Crops, saplings, sugar cane and anything else that grows on its own are exempt, so harvesting contracts are unaffected. · Spawner farms completed hunting contracts on their own. Mobs that came out of a spawner no longer count as kills. · worlds, anti-farm-ms and party-shared did nothing on mining, hunting, fishing, crafting, MythicMobs and NPC deliveries. Those types walked their own code path and never reached the checks. All three settings were in the editor and in the wiki, and had no effect at all on the types most servers actually use. · Protected regions counted as progress. Mining, placing, fishing or enchanting inside a WorldGuard region that cancels the action still moved the counter, even though nothing happened in the world. Any protected area was an infinite mine. · Weekly contracts only reset if you logged in on a Monday. Anyone who missed that day carried their finished weeklies for the entire following week, unable to redo them, with no warning. The plugin now stores when the weekly reset actually happened and compares calendar weeks, so the day you log in no longer matters. · A crash threw away the whole session. Data was written only when a player logged out and on a clean shutdown. Level, points and contract progress went back to whatever they were at login. There is now an auto-save every 5 minutes (storage.auto-save-minutes). · SQLite: concurrent saves could collide, and the file stayed locked. One connection was shared between async threads with no synchronisation, there was no reconnect if it ever dropped, and it was never closed on shutdown — which on Windows meant a reload could not reopen it. All three are fixed. · Riding contracts counted teleports. A /home or a portal while mounted added the whole distance in one go. Anything above anti-farm.max-ride-blocks-per-second is now treated as a teleport and ignored. · The market could take the armour off your back. Fulfilling an order counted and removed items from the armour and off-hand slots, so an order for diamond chestplates took the one you were wearing. It now only touches the normal inventory. It also pays first and removes the items after — if the economy failed, you used to lose the items and the money. · NPC deliveries fed sub-objectives and the global contract for free. Right-clicking the delivery NPC advanced multi-objective sub-objectives and the server-wide global contract before checking whether anything accepted the delivery — and if nothing did, the item stayed in your hand. Clicking over and over with the same stack filled both. The rule is now one line: the item is handed over if something accepts it, and only then. · Two GUI lines were hardcoded in Spanish ("Progreso", "Recompensas") and showed up untranslated on every server. They are now in all four language files, along with four console messages that were also in Spanish.New · Folia support. Every task now goes through the regionised schedulers, so the plugin runs on Folia instead of failing at startup. · Anti-farming section in the config — placed blocks, spawner mobs, spawn-egg mobs, the ride cap and an exemption list. All of it can be turned off. Improved · Structure contracts no longer lag the server. The structure search — one of the most expensive calls in the API, able to generate chunks — ran every 5 seconds for every player with one of those contracts. It now reuses what it already found and only searches again when the player has actually moved. · The leaderboard no longer reads the whole table. It used to load every player row into memory and sort in Java on each refresh. It now asks the database for the rows it needs, with indexes to match. · Memory: four per-player maps were never cleared on disconnect. The anti-farm one grew by one entry per player and per contract, indefinitely. · PlaceholderAPI: the expansion is now unregistered on shutdown, so reloading the plugin no longer leaves a stale one serving data from a dead instance. · The wiki now documents the per-contract options — worlds, anti-farm-ms, party-shared and party-split-reward. They were in the mission editor and written down nowhere, which did not help while they were also doing nothing on half the mission types.
Upgrading · Drop the jar in and restart. The new config and language keys are added to your files automatically, keeping every value you had set. · Weekly contracts reset once for everyone on first login after the update. That is the fix landing: the plugin has no record of when your players' last real weekly reset was, so it starts the clock cleanly. · Nothing to change in your contract files. worlds, anti-farm-ms and party-shared will simply start working on the contracts where you had already set them. · If you rely on placed blocks counting (a creative or a build server), set anti-farm.ignore-player-placed-blocks: false. · NPC deliveries now always confirm in chat (deliver.accepted, in all four languages). Deliveries that only the global contract accepts used to be impossible — now they work, and the message is what tells the player the NPC took the stack.
2.2.32.2.3 — Damage contracts now count arrowsAug 18, 2026 ContractRPG 2.2.3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Fixed · Contracts asking for damage from a specific mob never advanced. Two things were in the way. The damage source was not being passed through at all, and — the one that hid behind it — a projectile reported itself rather than whoever fired it: when a skeleton shoots you, the thing dealing the damage is the arrow, so a contract asking for SKELETON could never match. Projectiles are now traced back to their shooter. Your existing contracts work unchanged; nothing to edit. · Damaging a mob with a bow did not count. The same bug in reverse: the plugin saw the arrow as the attacker instead of the player who fired it, so no DAMAGE_DEALT contract ever advanced for an archer. · An accepted contract vanished from the list after paying for a reroll. It was never deleted — it stayed active and kept counting, and it was still there under active contracts — but rerolling regenerates the offers, and offers deliberately leave out what you already hold, so the accepted one dropped out of the list you were watching. Accepted contracts now always show at the top of their list, reroll or not.Upgrading · Drop in the new jar and restart. No config changes, nothing to migrate. · Contracts in progress keep their progress. A damage contract that had been stuck at zero simply starts counting from the next hit.
2.2.22.2.2 — FIX Seven Mission TypesAug 16, 2026 ContractRPG 2.2.2 If your server has playtime, exploring or riding contracts, they have not been counting. Not slowly. Not sometimes. At zero, from the moment they were created, with nothing in the console to say so. Fixed · Seven mission types could never be completed. If a contract of type PLAYTIME, EXPLORE, XP_GAIN, KILL_PLAYER, RIDE, DAMAGE_TAKEN or TRADING had anything written in mission-objective, it could never progress. The plugin compared that field against a fixed placeholder the contract had no way of matching, so the counter sat at zero forever. Contracts made in the in-game editor happened to work, because the editor filled that field with the exact value the check wanted. Anyone writing their own YAML hit it immediately. Nothing to change on your side: your contract files keep working exactly as they are written.New · Riding contracts can name the mount. mission-objective: "HORSE" now means a horse and not a pig. ANY still accepts anything you can sit on. · Damage-taken contracts can name the attacker. "Survive 200 damage from skeletons" is now expressible. Falls, fire and drowning count as ANY. · Trading contracts can name who you trade with (VILLAGER, WANDERING_TRADER). Improved · The wiki now says what goes in mission-objective for each of the 22 mission types, with a copy-paste example of every one instead of only seven.
Upgrading · Drop the jar in and restart. No config changes, no contract changes. · Contracts of those seven types start counting immediately — including the ones your players already accepted. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Coming tomorrow: ContractRPG: Professions The first add-on for ContractRPG arrives 17 August. Four guilds, twenty skills, and player-to-player services: a blacksmith signs your weapon, a farmer brews you a better potion, a builder sells you a blueprint that saves material. Money and items are held in escrow until the work is done, so nobody has to trust anybody. Free ContractRPG never gets worse — nothing is taken away from servers that don't run the add-on — and nobody gets stuck behind a profession, because every recipe has a second, slower route that needs no guild at all. It needs ContractRPG 2.2.0 or newer.
2.2.1[SIZE=6][B]ContractRPG 2.2.1[/B][/SIZE]Aug 15, 2026 ContractRPG 2.2.1 Fixed · Riding contracts never progressed on animals. Progress was counted from an event the server only fires for boats and minecarts — a horse, a pig or a strider is a living creature and moves through a different path, so it never fired at all. Distance on a mount is now measured directly, whatever you are riding. · Multi-objective contracts could be impossible to finish. Moving, riding and visiting a structure are checked behind a fast filter that skips the work when nobody is waiting on that action — and the filter only looked at the contract's main type. A contract whose main type was, say, mining but that carried an "explore 500 blocks" goal never advanced that goal, no matter how far you walked, and with no error anywhere. · NPC deliveries only counted toward their own contract. They were invisible to global contracts — a server-wide "deliver 500 iron" goal could never be filled — and to multi-objective sub-objectives. · MythicMob kills didn't advance multi-objective sub-objectives.2.2.0[SIZE=6][B]ContractRPG 2.2.0 — Add-on API[/B][/SIZE]Aug 14, 2026 :sparkles: New · Add-on API. Other plugins can now extend contracts without touching ContractRPG's internals. Everything lives in com.infinity3113.contractrpg.api and is safe to call from a soft-depending plugin. · Three developer events. ContractOfferEvent and ContractAcceptEvent are cancellable — the second one carries a reason string that is shown to the player, so you can refuse a contract and explain why. ContractCompletedEvent fires after the rewards are worked out and hands you the exp and points that were actually granted. · Add-ons can add buttons to the contract editor. Register an EditorOption and it appears inside the editor your admins already use, instead of forcing a second menu somewhere else. · Add-ons can add lines to a contract's description. Register a ContractLoreProvider and your text shows up under the contract in the menu. · Per-contract add-on data. Each contract can now carry extra values under addon-data, saved in contracts.yml and kept across restarts. · Chat prompts are available to add-ons. Ask a player for a number or a line of text with the same flow the editor uses. Fixed · Crafting missions could be completed without spending a single material. The plugin counted progress the moment you clicked the result slot — but that click does not mean the craft happened. With a full inventory, or a different item held on the cursor, the click fails, the materials stay on the table, and you got the progress anyway. Progress is now measured from what the player actually ends up holding. · Shift-click counted as one. Crafting 64 items in a single shift-click added 1 to your mission. Same for villager trades: ten trades in one click counted as one. Both now count what really happened. · Trades that never went through were counted. Clicking a trade result with a full inventory added mission progress without trading anything. · The editor reopened on top of a chat prompt. If the editor asked you to type something, the menu could pop back up over your answer. Improved · The contract editor was re-laid out so add-on buttons have room of their own without crowding the existing ones. · command-aliases now says why it failed. If an alias is already taken it names the plugin holding it, instead of being skipped in silence. If the server refuses to refresh its command tree, that is reported too — that combination looked exactly like "the option does nothing". Upgrading · Drop the new jar in and restart. config.yml updates itself and your settings are left alone. · Nothing was removed or renamed, so anything that worked on 2.1.0 keeps working. · Servers with no add-ons get the fixes and lose nothing — the API only sits there until something uses it. For developers Code (Text): // ContractRPG is optional: check before touching anything if (ContractRPGAPI.isAvailable()) { int level = ContractRPGAPI.getLevel(uuid); Contract c = ContractRPGAPI.getContract("mine_stone"); // your own button inside the contract editor ContractRPGAPI.registerEditorOption(myOption); // your own lines under a contract in the menu ContractRPGAPI.registerLoreProvider(myLoreProvider); } · Add softdepend: [ContractRPG] to your plugin.yml — or depend if your plugin is useless without it. · Unregister on disable (unregisterEditorOption, unregisterLoreProvider). If your plugin is disabled without a restart, a leftover button would point at a dead plugin. · Requires ContractRPG 2.2.0 or newer. Guard for it, or your plugin will throw NoClassDefFoundError on an older install instead of saying something readable.2.1.02.1.0 — Tab completion, custom items in the marketplaceAug 12, 2026 Come say hi on Discord Support, bug reports and early builds all live there, and it's the fastest way to reach me directly. When the server reaches 50 members I'll be giving away a key for one of my premium plugins. The entry requirements will be posted in the server once we get there. discord.gg/sBw99njvTU 2.1.0 — Tab completion, custom items in the marketplace Three things players asked for, plus an easier way to write the rarity odds. Everything here defaults to what you already had: dropping in the jar changes nothing until you decide to change something. New · Tab completion for /contract. All 22 subcommands, filtered by what you can actually run — if you don't have the admin permission, the admin commands are not even listed. Showing options that bounce back with "no permission" helps nobody. · It goes past the first word. market completes its own subcommands. fulfill and cancel complete the IDs of orders that are currently open, so you no longer have to copy an ID out of the chat. The admin commands complete online player names. And market create suggests hand first, because otherwise nobody would ever find out that it exists. · Custom command aliases. /contracts and /crpg still work. Now you can add your own in config.yml: Code (Text): command-aliases: - missions - contratos · How the aliases are registered. Each name goes into the server's command map while the plugin is starting, as a second name for the same command — not a copy of it. That means they inherit everything automatically: the same permission, the same subcommands, and the same tab completion. The client's command list is re-synced afterwards, so pressing Tab on /misiones works exactly like pressing it on /contract, with no extra setup. · And when it can't. If another plugin already owns that name, the alias is skipped and a warning is logged — nothing is taken from a plugin that registered first. On the rare server that blocks access to the command map, the plugin logs one warning and carries on: aliases are a convenience, not a reason to fail startup. Works on both Spigot and Paper. · The marketplace takes custom items. Hold the item and run /contract market create hand <amount> <price>. Whatever is in your hand is what you are ordering: custom names, lore, enchantments, damage, and items from MMOItems, ItemsAdder or anything else that writes NBT. · Matching is exact. A "Miner's Pickaxe" order is not filled with a plain diamond pickaxe, and a plain order is not filled with somebody's renamed one. This is the part that makes custom orders worth anything. · Rarity odds as plain percentages. New switch rarity-use-weight. Leave it true and it reads the weight lines exactly as before. Set it false and it reads the new chance lines instead. Both sets are written in the file, so you can flip between them without retyping anything. Fixed · The marketplace silently ignored any item that had ever been modified. Not just custom items — a renamed diamond, an enchanted tool, a pickaxe with a single point of damage. They were skipped when counting what you had to deliver, and nothing told you why: you just got "you don't have any of those" while holding a stack of them. The check that did this was deliberate and it is gone. · Delivered items are no longer merged by material. The pending-delivery box stored things by material only, so two different custom swords landed in the same slot and you got two copies of whichever one it happened to keep. Each item is now stored whole, so you get back exactly what was delivered. Improved · The marketplace GUI shows the real item. Orders used to be drawn as a plain item of the right material. Now the actual ordered item is displayed, with its enchantment glint, its texture and its NBT, so you can see at a glance what is being asked for. · Messages name the item, not the material. Order confirmations, delivery notices and /contract market mine now say "Miner's Pickaxe" instead of DIAMOND_PICKAXE. · Startup prints the real rarity percentages. A weight is a raffle ticket, not a percentage: 100 / 30 / 5 is really 74% / 22% / 3.7%, because there are 135 tickets in the pot. There was no way to see that without doing the arithmetic yourself. The console now does it for you at boot, whichever style you use, and tells you which of the two it read. Upgrading Drop in the new jar and restart. Orders already sitting in your market.yml are read and converted on the first load — nothing to clear, nobody loses an escrow. Your rarity odds do not move: rarity-use-weight defaults to true, which is the weight lines you already had. The chance lines are added next to them, ready if you ever want them. That default is deliberate — if the percentages had taken priority, every server updating from 2.0 would have had its odds quietly rewritten. One thing to know about the aliases: they are registered while the plugin starts, so they only appear after a full server restart. /reload will not pick them up, and neither will a plugin manager that reloads just this plugin.2.0.32.0.3 — Your config actually applies nowAug 10, 2026 2.0.3 — Your config actually applies now A follow-up to 2.0.2. Two things that made the mission menu look broken when it wasn't, and one new setting so you decide how it behaves. Fixed · Raising offered-amount did nothing for players who had already opened the menu. The missions offered to a player are locked in the first time they open it and saved to their data — that part is on purpose, so nobody can reopen the menu until they get the missions they want. What was missing: that saved list was never topped up. Set it from 4 to 12 and everyone kept seeing 4, forever. Neither /reload nor a restart helped, because it wasn't in memory — it was in their player data. · Lowering it didn't apply either. Going from 12 down to 4 left players with the 12 they were already given. The saved list is now trimmed instead, keeping the missions they already had rather than rolling new ones. Improved · Missions above your level used to be invisible. If you set offered-amount to 12 but only 2 were within your level, you saw 2 and nothing explained why. They now appear greyed out with the level they need. Clicking one still just tells you the level required — they can't be accepted by mistake. · Locked missions are sorted by level. The next one you can reach is the first one you see, so the menu reads as a path rather than a pile. New · show-locked-missions in config.yml. true shows the locked missions greyed out, false hides them like before. Servers with a slow levelling curve will want them visible; servers that start players high may not. · Translated into all four languages. The new text is in EN / ES / FR / ZH, and gets added to your existing language files on startup without touching your edits. Upgrading Drop in the new jar and restart. Nothing to delete, nothing to reconfigure. The new setting is added to your config.yml on first start, defaulting to true — if you preferred the old behaviour, set it to false.2.0.22.0.2 — Coloured item names no longer break the shopAug 9, 2026 2.0.2 — Coloured item names no longer break the shop A one-line fix, but a loud one: buying anything whose name had colours in it threw an error and cancelled the click. Fixed · Buying from the shop failed when the item had a coloured name. Minecraft stores renamed items with colour codes inside the name (§6§l…). Those codes reached the purchase message untouched, the message failed to build, and the whole click was cancelled — the player got an error in console and no item. Any shop selling renamed, coloured items was affected. Colour codes are now converted properly, whether they were written with & in your files or come baked into the item itself. · Hex colours with the section sign. §#FFD700 was ignored where &#FFD700 worked. Both are accepted now. Upgrading Drop in the new jar and restart. Nothing to delete and nothing to reconfigure — your shops, contracts and language files stay exactly as they are.2.0.12.0.1 — English out of the boxAug 7, 2026 2.0.1 — English out of the box A polish patch on top of 2.0. The plugin now speaks English everywhere it should, and your language files fix themselves. Fixed · The shop editor ignored your language setting. Its buttons and menus were hardcoded, so every server saw them in the same language no matter what language: said. All 36 texts now go through the language files, translated to EN / ES / FR / ZH. · Duplicate key in the Spanish language file. lang/es.yml declared error-invalid-number twice. It threw a duplicate keys found warning on every startup, and the shop editor's "invalid number" message showed up without the plugin prefix. Improved · The 58 ready-made contracts now ship in English. They are examples, there to show you how each mission type works — rename them to your own language straight from /contract editor whenever you like. · Everything is documented in English. config.yml, shop.yml, global.yml, codes.yml and the contract files, plus the console messages. · Language files repair themselves. If one has duplicated keys, it is rewritten clean on startup — your texts, your edits and your comments are kept. Upgrading Drop in the new jar and restart. Nothing to delete: the Spanish file cleans itself up on the first start, and everything a player reads still comes from your language files. Only if you want the new English example contracts, delete contracts/, config.yml and shop.yml and they will be regenerated — existing files are never overwritten, so your edited contracts are safe.2.02.0 — Parties, a player marketplace, profiles & 14 new featuresAug 1, 2026 2.0 — The biggest update yet Fourteen new features, straight from ideas in the thread. Team play, a player-run marketplace, profiles, boosters and a lot more — all fully configurable and in the mission editor. New — teamwork & economy · Party contracts. Form a group with /contract party invite|accept|leave. Per contract, the admin chooses whether progress is shared, whether the reward is split, or both. Numeric rewards (money, points, EXP) split by party size; items go to everyone. · Player marketplace. Post an order with /contract market create <item> <amount> <price> — "I pay X for Y items". Others deliver from /contract market and get paid instantly; you claim the delivered items with /contract market claim. The payment is held in escrow. (Requires Vault.) · Reward boosters. /contract booster <mult> <seconds> temporarily multiplies money, points and EXP from every completed contract — perfect for weekend events. New — contracts & objectives · Multi-objective contracts. One contract can require several goals at once (e.g. mine 20 stone and kill 5 zombies) — all must be completed. · New objective types. Damage dealt, damage taken, riding/mounting distance, playtime, and visiting structures (village, fortress, monument…). · Contracts by world/region. Tie a contract to specific worlds — "kill 10 blazes in the Nether". · Anti-farm. A per-contract minimum time between progress to stop macro/afk abuse. New — quality of life · Profile / stats GUI. /contract profile — level, points, total completed, daily streak, favorite type and a breakdown by mission type. · Admin analytics. /contract analytics — completion counts per contract, to balance your economy. · Redeemable codes. /contract redeem <code> for events or Discord (codes.yml). · Community suggestions. Players use /contract suggest; admins read them with /contract suggestions. · Smart reminders. On join, players are nudged about contracts that are almost complete. · Completion feedback. Configurable sound, particles and title when a contract is finished. Improved · Every contract-configurable feature above is also in the in-game mission editor, each with its own explanation — no need to touch YAML. · Self-updating language files, like the config: new messages are added on update, keeping your edits and translations. Upgrading Drop in the new jar and restart. Nothing to delete — your config, contracts and language files gain the new options automatically. The marketplace needs Vault + an economy plugin; everything else runs on its own. Thanks for all the ideas! Questions or bugs: [email protected]v1.21.2 — Classic & color codes now supportedJul 26, 2026 1.2 — Classic color codes Suggested in the thread. Until now the config understood modern <minimessage> tags only. It now also accepts the classic & color codes. New · Classic & color and format codes (&e, &6, &l…) are now supported everywhere — reward lines, contract names/titles, menus and the global boss bar. · Hex codes too: &#ff8800. Improved · You can mix & codes and <minimessage> tags in the same line — both are understood now. Upgrading Drop in the new jar and restart. Your configs are untouched — if you'd written & codes, they now colour the text as expected. Thanks for the report! Questions or bugs: [email protected]v1.11.1 — Rarer global contracts (no more economy flooding)Jul 25, 2026 1.1 — Rarer global contracts Straight from a request in the thread. Global contracts no longer run back-to-back forever. New · Global contracts now rest. When one is completed, there is a gap before the next one appears — so they feel rare and special instead of being always on and flooding your economy with rewards. Improved · Configurable gap. The wait is a random time between cooldown-min-minutes and cooldown-max-minutes (default 3–6 hours), so it isn't predictable. Set both to 0 for the old back-to-back behaviour. · Announcement to the whole server the moment a fresh global contract begins. Upgrading Drop in the new jar and restart. The default gap (3–6h) applies right away; tune it in config.yml under global-contracts, then /contract reload. Your global.yml and progress are untouched. Thanks for the idea! HunderCrafteur Questions or bugs: [email protected]v1.0Jul 12, 2026
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta