Plots & districts
The plots module connects Eternal with PlotSquared for CityBuild servers. Besides the flag GUI (/plotflags) and the plot border (/rand), it divides the plot world into districts – rings around the spawn plot – and makes /plot merge cost coins, with fixed or dynamic prices per district. In the dashboard, the page „Grundstücke“ ("Plots") shows all plots, districts and paid merges.
License: plots needs an EternalSystem license. Free in the base by default are core, punishments, reports and lobby; which modules are free can change – the dashboard shows locked modules grayed out.
Enabling
- Module key:
plots, included in thecitybuildandfullpresets (see Modules & Presets). PlotSquared itself comes from the plugin library of the Eternal Cloud. - Districts and the paid merge need PlotSquared 7, i.e. Minecraft from 1.13 (see Versions & compatibility).
- The paid merge charges coins and therefore needs the
economymodule (see Coins & market).
Districts
Districts are rings around the spawn plot.
- An admin stands on the spawn plot – this may also be a merged one, e.g. 3 × 3 – and runs
/district setspawn. - The rectangle of this plot is the spawn: district 0 „Spawn“.
- Rows count outward from its edge: row 1 directly touches the spawn.
Default rings:
| District | Rows |
|---|---|
| 0 „Spawn“ | the spawn plot |
| 1 | rows 1–3 |
| 2 – 11 | 5 rows each (rows 4–53) |
| from 12 | 10 rows each, endlessly |
The rings can be changed in the dashboard settings: a list of rows per district (ringRows) and the row count for all further districts (repeatRows).
For players
- When walking into another district, "You enter <name>" appears with the district's motto below it.
/district(alias/bezirk) shows the district you are standing in and your home district – the district of your own plot closest to the spawn./district ringsshows the ring table with the price per m² and per plot.- The scoreboard has the placeholders
{district}(home district) and{district_here}(district you are standing in) as well as the element „District“.
Paid merge (/plot merge)
/plot merge costs coins:
- The first
/plot mergeshows a quote: district, up to how many plots are added, price per plot, maximum total and price mode – plus a clickable [Bestätigen] ("Confirm"). - Confirm by clicking or by running
/plot mergeagain withinconfirmSeconds(default 30 s). - After confirming, Eternal holds back the maximum total. Once PlotSquared has merged the plots, only the plots actually added are charged; the rest is refunded.
- If the merge does not happen within 20 s, everything is refunded.
If the coins are not enough, the merge is denied. With eternal.plots.merge.free, merging is free (default: nobody).
Prices
Prices are kept per m². The area of one plot (plotArea, e.g. 32 × 32 = 1,024 m²) is reported by the CityBuild server from PlotSquared. The price is calculated per added plot = price per m² × plot area. The basis is the district price per m²:
district price/m² = pricePerM2 × districtFactor^(d − 1)
(never below minFactor × pricePerM2)
district price = district price/m² × plotArea
d is the district number. A fixed price per m² can be entered for individual districts; it replaces this calculation. Older settings (price per plot) are converted to m² automatically when loaded.
| Mode | Price per plot |
|---|---|
fixed | District price |
dynamic (default, "like the stock market") | see formula below |
price per plot = district price
× size ^ sizeExponent
× ((scarcityReference + 1) / (plot groups of this size + 1)) ^ scarcityWeight
× (paid merges in the district in the last 7 days + 1) ^ demandWeight
Size is the size after the merge. So larger groups cost more per plot, rare sizes are more expensive than common ones, and high demand in the district raises the price.
| Value | Default | Meaning |
|---|---|---|
pricePerM2 | ≈ 4.88 | Price per m² in district 1 (coins, two decimals) |
plotArea | from the server | Area of one plot in m² |
districtFactor | 0.85 | Factor per district further out |
minFactor | 0.1 | Lower limit as a share of basePrice |
sizeExponent | 0.25 | Weight of the size |
scarcityWeight | 0.3 | Weight of the scarcity |
scarcityReference | 10 | This many groups of one size count as normal: fewer → dearer, more → cheaper |
demandWeight | 0.15 | Weight of the demand |
confirmSeconds | 30 | Validity of the quote |
Mortgages (/hypothek)
Players can borrow against their own plot. Eternal values it, pays part of the value out at once as a loan, and then debits one installment every day.
For players:
- Stand on your own plot and run
/hypothek scan. The scan counts every block on the plot. It works once every 24 hours. - The chat shows the value, the offer and the terms. Clicking [Hypothek aufnehmen] (or
/hypothek annehmen) within 60 minutes pays the loan into the wallet. - From then on an installment is debited automatically every 24 hours (real days, counted from signing).
Value and loan:
| Part | How |
|---|---|
| Land | area in m² × the district's price per m² (see Prices) |
| Blocks | every block on the plot × its AdminShop sell price, otherwise the market base value |
| Loan | 80 % of land + blocks, rounded down to whole coins |
| To repay | loan + 10 % interest, split into 30 equal daily installments |
Stone, dirt, grass blocks, bedrock, air, water and technical blocks are worth nothing. The list can be changed in the dashboard.
When an installment is missed:
| When | What happens |
|---|---|
| Installment due, not enough money | Every container on the plot is locked at once (chests, barrels, shulkers, furnaces, hoppers …). As soon as there is enough money, Eternal debits all open installments and unlocks them. /hypothek zahlen does it right away. |
| 7 days after the oldest open installment | The plot is seized: it belongs to the server, helpers and members are removed, the player can no longer enter. /hypothek tilgen with the whole rest gives it back exactly as it was. |
| 30 days after the oldest open installment | The plot is deleted (cleared and unclaimed). |
Any time: /hypothek tilgen pays the whole rest at once and ends the mortgage. While a mortgage is open, the plot cannot be deleted, cleared, unlinked, merged, moved, swapped or given to another player.
Locking containers needs the container locks module (locks). Installments are debited by the server that runs the plot world. If it is off, it catches up as soon as it runs again.
Dashboard: mortgages
Grundstücke ("Plots") → Hypotheken (permission eternal.web.plots):
- Totals: running loans, open installments, seized plots and how much is still outstanding.
- Loans: every mortgage with player, plot, loan, paid, rest, installment, next installment and state, filterable. Erlassen (forgive) ends an open mortgage without further payment: the CityBuild server unlocks the containers and gives a seized plot back.
- Settings:
| Setting | Default | Effect |
|---|---|---|
| Loan in % of value | 80 | share that is paid out |
| Interest % | 10 | on the whole loan, spread over all installments |
| Term | 30 | number of daily installments |
| Highest loan | unlimited | cap per mortgage |
| Scan every … hours | 24 | wait between two scans of a player |
| Offer valid … minutes | 60 | how long the player can accept |
| Seize after … days | 7 | from the oldest open installment |
| Delete after … days | 30 | from the oldest open installment |
| Blocks count at % | 100 | share of the block value |
| Mortgages per player | 1 | open at the same time |
| Container lock | Hard | Hard: cannot be opened. Soft: opens, nothing can be taken out. Breaking is refused in both cases. |
| Blocks without value | ground, technical | material names, comma separated |
Dashboard: Grundstücke ("Plots")
Page „Grundstücke“ ("Plots", permission eternal.web.plots):
- Totals across all plots
- Table per district: name, prestige, rows, plots, owners, merges, median price per m² over 7/30/90/365 days, land value (base price per m²) and current price per m² (per plot below)
- Plot list with search – a snapshot the CityBuild server writes every 5 minutes
- Recent paid merges
- Settings: price per m², factors, fixed m² prices, modes, rings, preview (per m² and per plot)
District pages
Clicking a district opens its own page:
- Name, motto and description – editable in the dashboard (pencil icon). Without own text a fitting default is used: Prachtviertel ("the most exclusive quarter") for the innermost rings, then Innenstadt, Mittelstadt, Vorstadt and, furthest out, the Grenzland. Name and motto also show in-game when entering.
- Prestige from 5 to 1 stars – the closer to the spawn, the more.
- Figures: price per m² now, land value, median of the m² prices paid, occupancy (owned plots of all plots in the ring) and neighbourhood (residents, area, merges this week).
- Biggest land owners as a podium, ranks 4–10 below.
- Neighbourhood badges from the numbers, e.g. Beste Adresse, Fast ausverkauft, Heiß begehrt, Schnäppchen-Lage, Geheimtipp, Anwesen (biggest plot) or "name regiert hier".
- All plots of the district with owner, size and m², searchable, plus the recent merges.
- The arrows at the top switch to the previous / next district.
The player page shows a district badge and the player's plots.
Commands
| Command | Aliases | Permission | Description |
|---|---|---|---|
/district | /bezirk | – | District here and home district |
/district rings | /bezirk rings | – | Ring table with price per plot |
/district setspawn | /bezirk setspawn | eternal.plots.admin | Set the plot below you as the spawn (district 0) |
/plot merge | – | PlotSquared; free with eternal.plots.merge.free | Show the quote, confirm the second time |
/plotflags [Seite] | /pflags, /plotflag | eternal.plots.flags | GUI of all PlotSquared flags of the plot ([Seite] = page) |
/rand [Block|gui] | /plotrand, /border | eternal.plots.border | Set the plot border |
/hypothek | /mortgage, /hypotheken | eternal.plots.mortgage | Own mortgages, next installment |
/hypothek scan | – | eternal.plots.mortgage | Value the plot (every 24 h; no wait with eternal.plots.mortgage.admin) |
/hypothek annehmen | – | eternal.plots.mortgage | Accept the last scan's offer |
/hypothek zahlen | – | eternal.plots.mortgage | Debit open installments now |
/hypothek tilgen | – | eternal.plots.mortgage | Pay the whole rest, buy a seized plot back |
Permissions
| Permission | Default level | Purpose |
|---|---|---|
eternal.plots.flags | All | /plotflags |
eternal.plots.border | All | /rand |
eternal.plots.admin | Admin | /district setspawn; flag GUI and /rand on other players' plots too |
eternal.plots.merge.free | Off | /plot merge without costs |
eternal.plots.mortgage | All | /hypothek |
eternal.plots.mortgage.admin | Admin | /hypothek scan without the 24-hour wait |
eternal.web.plots | Admin | Dashboard page „Grundstücke“ ("Plots") |
API
| Method | Path | Purpose |
|---|---|---|
GET | /plots | Plot list |
GET | /plots/summary?days= | Totals and district table |
GET | /plots/trades?days= | Paid merges |
GET · PUT | /plots/pricing | Read · save the price settings |
GET | /players/{name}/plots | Plots of a player |
GET · PUT | /plots/mortgages/config | Read · save the mortgage settings |
GET | /plots/mortgages?state=&q= | Mortgages (state: open, ACTIVE, SEIZED, PAID, DELETED, CANCELLED) and totals |
POST | /plots/mortgages/{id}/forgive | Forgive a mortgage |
Common pitfalls
- No districts: PlotSquared 7 is missing (only available from 1.13), or
/district setspawnhas not been run yet. - Merge denied: the coins are not enough. The maximum total of the quote is held back first – the player must have that much, even if less is charged in the end.
- Quote expired: the confirmation is only valid for
confirmSeconds– run/plot mergeagain. - Plot list in the dashboard is outdated: the CityBuild server only writes it every 5 minutes.