Economy
Economy System
SCS2 integrates with Vault to provide a full economy system for claims. When enabled, players pay to claim chunks and can sell their claims to other players.
Enable economy in config.yml:
claims:
economy:
enabled: true
max-price: 1_000_000_000
formatted-number: true
currency-format: "%amount%$" # 2.8
- enabled — activates the economy system
- max-price — maximum price a player can set when selling a claim
- formatted-number — displays prices with formatting (e.g., 1,000,000 instead of 1000000)
- currency-format — how money is displayed everywhere (messages, menus, holograms, web maps, dashboard):
%amount%stands for the formatted number. Examples:"%amount%$"(default),"$%amount%","%amount% coins","%amount% €". (2.8)
Since 2.8 the language strings and map popups no longer carry a literal $: the symbol comes from currency-format. Files customized before 2.8 are migrated on startup (the $ glued to %price%, %cost%, %balance%... is stripped), so nothing changes visually unless you edit the format.
Vault and an economy plugin (e.g., EssentialsX, CMI, PlayerPoints) must be installed for the economy system to work. Without them, the economy features are silently disabled.
Chunk Costs & Multipliers
Each time a player claims a chunk, they pay a configurable cost. How that cost grows as a claim gets bigger is controlled by the cost mode and the cost multiplier.
Cost modes
The global claims.economy.cost-mode option chooses how the per-chunk price is computed (N = the number of chunks the player already owns):
| Mode | Formula | Behaviour |
|---|---|---|
EXPONENTIAL (default) | chunk-cost × cost-multiplier ^ N | Large claims get progressively (steeply) more expensive. |
LINEAR | chunk-cost + cost-multiplier × N | Steady growth — cost-multiplier becomes a flat amount added per chunk. |
FIXED | chunk-cost | The same price for every chunk, whatever the claim size. |
claims:
economy:
cost-mode: EXPONENTIAL # EXPONENTIAL | LINEAR | FIXED
cost-mode is server-wide and applies to everyone after a /scs reload. The key is added to your config.yml automatically on update; an unknown or missing value falls back to EXPONENTIAL, so existing setups are unchanged.
How chunk cost works (EXPONENTIAL)
The formula for the Nth chunk is:
cost = chunk_cost * (cost_multiplier ^ (N - 1))
Where N is the number of chunks the player already owns + 1.
Example
With chunk-cost: 100 and cost-multiplier: 1.5:
| Chunk # | Cost |
|---|---|
| 1st chunk | 100 |
| 2nd chunk | 150 |
| 3rd chunk | 225 |
| 4th chunk | 337.5 |
| 5th chunk | 506.25 |
Example — LINEAR
With chunk-cost: 100, cost-multiplier: 50 and cost-mode: LINEAR, every chunk costs 50 more than the previous one: 100, 150, 200, 250, 300, …
The max-claim-price cap (0 = no cap) is applied to each chunk in every mode.
In EXPONENTIAL mode, set cost-multiplier: 1.0 for a flat rate per chunk, or higher values to make large claims progressively more expensive.
Both chunk cost and cost multiplier can be set per player via permissions (scs.limit.cost.<amount>, scs.limit.cost-multiplier.<amount>) or admin commands.
Paying past your chunk limit (Added in 2.6.6)
By default a player is hard-stopped the moment they reach their max-chunks limit. With pay-over-limit you let them keep claiming beyond that limit as long as they can pay a per-chunk fee. Chunks up to the limit are unaffected (free, or at the normal chunk cost); only the chunks past the limit are charged this extra fee.
claims:
economy:
pay-over-limit:
enabled: false
price: 1000.0 # price of the 1st chunk past the limit
mode: FIXED # FIXED | LINEAR | EXPONENTIAL
multiplier: 1.0
max-price: 0.0 # per-chunk cap, 0 = no cap
When enabled: true — with the economy on and price > 0 — the fee for each over-limit chunk is derived from how many chunks the player is already past the limit (over, starting at 0 for the first one):
| Mode | Fee for an over-limit chunk |
|---|---|
FIXED (default) | price — a flat fee for every chunk past the limit. |
LINEAR | price + multiplier × over |
EXPONENTIAL | price × multiplier ^ over |
max-price caps the fee of a single over-limit chunk (0 = no cap). This applies only to the chunk limit (max-chunks); the claim-count limit (max-claims) stays a hard limit and is never sold past. If the player can't afford the fee they are blocked as usual with the "not enough money" message.
Left at enabled: false (the default), max-chunks remains a hard limit and nothing changes. Like every economy feature, this needs Vault + an economy plugin.
Claim creation cost (2.8)
Independently from the chunk price, a server can charge a price for every new claim. It is added to the chunk cost of the first chunk(s) on /claim, /claim <radius>, /claim create and auto-claim, and never charged for /claim addchunk, merges or purchases. Nothing is refunded on unclaim.
claims:
economy:
claim-creation:
enabled: false
mode: FIXED # FIXED | LINEAR (base + multiplier × claims owned) | EXPONENTIAL (base × multiplier ^ claims owned)
multiplier: 1.0
max-price: 0.0 # cap per claim, 0 = no cap
players:
default:
claim-cost: 0.0 # base price of a new claim
- claim-cost is the per-player base price:
players.default.claim-cost, overridable per rank withscs.limit.claim-cost.<amount>(lowest wins) or per player with/scs player <player> set-claim-cost <amount>. Players withscs.limit.bypasscreate claims for free. - mode, multiplier and max-price follow the same formulas as the chunk cost, with the number of claims the player already owns as the tier.
- The confirmation message shows the total; when a creation price is part of it, a second line details it (
claim-confirmation-money-details, placeholders%creation-price%and%chunks-price%). - Placeholders:
%claim-cost%and%next-claim-cost%in the player and claim menus,%scs_claim-cost%and%scs_next_claim_cost%in PlaceholderAPI.
Selling & Buying Claims
Players can put their claims up for sale and other players can buy them:
Selling
/claim sell [claim] <price>
Puts the specified claim up for sale at the given price. The claim appears in the sale list and on map integrations with a "for sale" style. A sale announcement can be broadcast to the server (configurable).
Cancelling a sale
/claim cancel-sale [claim]
Removes the claim from the sale listing.
Buying
/claim buy
Buys the claim you are standing in (if it is for sale). The price is deducted from the buyer's balance and added to the seller's balance. Full ownership — including all chunks, members, permissions, flags, and settings — transfers to the buyer.
The maximum sale price is capped by the max-price config value and optionally by the player's scs.limit.max-claim-price.<amount> permission.
Claim Tax / Rent
Claims can optionally incur a recurring tax that the owner must pay to keep them. Disabled by default — opt in via config:
claims:
tax:
enabled: false
taxation-period: 1d
amount-per-chunk: 1.0
grace-periods: 3
notify: true
default-multiplier: 1.0
- taxation-period — how often the tax is charged. Any duration:
30s,15m,1h,2h,1d,1w… The owner is billed once per elapsed period. - amount-per-chunk — amount charged per owned chunk, per
taxation-period, summed across all of the owner's claims. - grace-periods — how many consecutive unpaid periods the owner can accumulate before all their claims are auto-unclaimed.
- notify — when
true(default), the console logs a line each time the tax is charged, partially charged or could not be charged. The owner always receives the in-game message when online. (2.6.7, console-only since 2.8) - default-multiplier — multiplies every bill. Per-rank override with
scs.limit.tax-multiplier.<value>, lowest value wins: givescs.limit.tax-multiplier.0.5to a VIP rank for half price, or.0to exempt it. Read live for online owners, from their last saved value for offline ones. (2.7.1)
How it works
- Billing is timestamp-based, not tick-based: the plugin stores each owner's
last-tax-paidtime and charges for every wholetaxation-periodelapsed since. It survives restarts — if the server is offline across several periods, the next run bills for them all at once. - Total charged =
amount-per-chunk × number of chunks × periods elapsed × multiplier. Chunk counts come straight from the database, so every owner is billed — not only those whose claims happen to be loaded. - On success the balance is debited and the meter advances by exactly the periods charged; any sub-period remainder carries over to the next run.
- If the balance doesn't cover the whole bill, the plugin still collects every whole period the balance covers and advances the meter by those; the remaining periods stay due and the owner is told (when online) how much is missing. Once the unpaid periods exceed
grace-periods, every claim the owner has is unclaimed automatically. (2.8: partial collection; before, nothing was collected until the full bill could be paid)
The check frequency is auto-derived (taxation-period ÷ 10, floored at 30s) and is not configurable — it only affects how punctually a charge lands, never the amount. Use taxation-period to control billing.
Requires Vault and an economy plugin — without them the collector runs but charges nothing. A startup message is logged if amount-per-chunk is ≤ 0 or taxation-period is invalid.
Plugins can hook the tax through ClaimTaxEvent: it fires once per owner and per run, before the money moves, and lets a listener change the amount or cancel the charge. (2.7.1)
How do owners pay? They do nothing: the tax is debited automatically from their Vault balance. When the balance is too low, the owner gets the tax-overdue message (amount, current balance, missing amount, periods left) and the charge is retried on every later check — topping up the balance is all it takes. (2.8: the message now shows the amounts.)
Checking and paying by hand
Because the collector only passes every taxation-period ÷ 10, an owner who just topped up their balance could wait a long time for the next attempt. Two commands remove the guesswork. (2.8.1)
| Command | What it does |
|---|---|
/claim tax or /claim tax info | Shows the chunks owned, the amount per chunk, the owner's multiplier, the tax per period, the last payment, the time left before the next one, what is overdue (amount, periods, grace left), the total paid and the current balance. |
/claim tax pay | Pays right away everything that is due, with the same rules as the collector (whole periods the balance covers, the rest stays due). Nothing can be paid in advance: when no period has elapsed yet the player is told when the next payment falls. |
- Both need
scs.claim.tax(granted by default) and only show up in tab-completion while the tax is enabled. - A manual payment never removes claims: only the automatic collector enforces
grace-periods. - An owner who logs in with periods already due is charged again a few seconds after joining, so a player who comes back with enough money does not wait for the next pass.
- The collector and a manual payment can never charge the same periods twice, including across servers sharing a database.
- The total shown by
/claim taxcounts the payments made since 2.8.1. ClaimTaxEventfires for manual payments too.