Skip to content
OrePlugins

ServerContracts

One goal. Every player pushing at it. Everyone paid for the part they did.

Product pagev2.4.01.21 and newer · Java 21+

Installation

  1. 1Download the jar from your account page.
  2. 2Drop it into plugins/ and restart the server. A reload is not enough for a first install.
  3. 3Run /contractsadmin to open the editor. The defaults are playable as shipped.
  4. 4Optional: install Vault for money rewards and PlaceholderAPI for placeholders, then run /contractsadmin info to confirm both were picked up.

The files

Four files appear in plugins/ServerContracts/.

config.yml holds settings, anti-farm, tiers, personal contracts, streaks, multipliers and feedback. contracts.yml holds the contract templates and is written by the in-game editor. messages.yml holds every player-facing string as MiniMessage. state.yml and players.yml are live state and player stats — the plugin writes those, so do not hand-edit them.

Reward multipliers

Multipliers are defined as a list, not as permission-to-value pairs:

multipliers:
  - permission: "servercontracts.multiplier.vip"
    value: 1.25

This matters. A YAML key containing dots is re-read by Bukkit as a nested path, so a permission node used as a key silently becomes empty sections and matches nobody.

The highest multiplier a player holds wins — they never stack — and the streak bonus is added on top.

PlaceholderAPI

The identifier is servercontracts. Contract indexes are 1-based, matching what players see.

%servercontracts_active_count%
%servercontracts_contract_1_name%
%servercontracts_contract_1_bar%
%servercontracts_personal_1_percent%
%servercontracts_my_earned%
%servercontracts_top_1_name%

An unknown placeholder is returned untouched rather than blank, so a typo shows up as itself instead of silently deleting the line. No placeholder touches disk or a database — every value is already in memory, because these get called from async threads many times a second.

The in-game editor

/contractsadmin opens the admin menu. From there you can rotate, force-complete or cancel any running contract; page through every template and edit its name, description, type, targets, scope, weight, duration, amounts and rewards; create a new one by typing an id; and change the settings from config.yml with them applying on click rather than at the next restart.

Targets can be set by holding an item and clicking Add held item, so there is no guessing at 1.21 material names. Typing works too, comma-separated.

Item rewards are copied, not consumed. Drop items into the reward menu, close it, and you get everything back — clones are what get written to contracts.yml.

New templates start at weight 0 with no targets, so a half-built contract can never go live by accident.

Commands

ServerContracts commands and permissions
CommandWhat it doesPermission
/contractsOpen the menuservercontracts.use
/contracts listActive contracts in chatservercontracts.use
/contracts info <index>Details for one contractservercontracts.use
/contracts deliver <index>Hand in itemsservercontracts.use
/contracts topTop contributorsservercontracts.use
/contracts guide [topic]The in-game guideservercontracts.use
/contracts personalYour daily contractsservercontracts.use
/contracts statsYour own totalsservercontracts.use
/contractsadminOpen the admin editorservercontracts.admin
/contractsadmin reloadReload config, messages and templatesservercontracts.admin
/contractsadmin rotate [index]Replace one contract, or all of themservercontracts.admin
/contractsadmin new <template>Start a named template immediatelyservercontracts.admin
/contractsadmin cancel <index>End one with no payoutservercontracts.admin
/contractsadmin complete <index>Force to 100 percent and pay outservercontracts.admin
/contractsadmin reset <player>Wipe a player’s statsservercontracts.admin
/contractsadmin infoPlugin and hook statusservercontracts.admin

Still stuck?

Post in Discord with your server version and the relevant part of the log. That is almost always enough to get a straight answer the same day.

Get help