Modules & Presets
EternalSystem consists of one jar (Eternal-<Version>.jar) for Spigot/Paper and the proxy (BungeeCord/Waterfall or Velocity). Replay, party, lobby, Autonicker, coins etc. are no longer separate plugins but modules in this jar. Every server only loads the modules that are enabled for it. A disabled module has no commands (they reply with „Dieses Modul ist auf diesem Server nicht aktiv“, "This module is not active on this server"), no listeners and no background tasks.
License: the free base currently holds core, punishments, reports, lobby. All other modules need an EternalSystem license. Which modules are free can change – the dashboard shows locked modules grayed out.
Files in the plugin folder
After the first start, plugins/Eternal/ contains:
| File / folder | Contents |
|---|---|
config.yml | All settings, one section per module (replay:, party:, lobby:, economy:, magic:, clan: …) |
modules.yml | Which modules this server loads (fallback, see below) |
reasons.yml | Ban/mute reasons, report reasons, shortening templates for appeals |
translations/<sprache>.yml | All texts (<sprache> = language), including party, clan and cloud messages |
names.txt | Autonicker name pool |
replays/, lobby/, chatlogs/ | Data of the respective modules |
The files are not overwritten during updates.
How a server gets its modules
- The server starts and registers itself via heartbeat in the database (
eternal_shared_config, keyserver:<name>): type, version, installed plugins, active modules. After that, again every 5 minutes. - A new server runs with
coreonly (basic commands). - In the dashboard under Server → Module ("Modules"), select the server on the left, choose a preset and/or toggle modules individually, then Speichern ("Save"). The dashboard stores
modules.yml:<server>in the database for this. - On the next restart or after
/eternal reload, the server adopts this database copy. It always wins over the local file.
Without a database copy, plugins/Eternal/modules.yml (Spigot) or the same file in the proxy's data folder applies.
The proxy is a server of its own with its own module list. The proxy only registers /ban, /mute, /lookup, /history, /modify, /resethistory with punishments, /report only with reports, /invsee only with inventory-sync. If the module is missing on the proxy, the command ends up on the Spigot server (single-server fallback) – that works, but is not intended in a network.
modules.yml
# first apply a preset
preset: core
# then turn individual modules on/off
modules: {}
# market: false
# magic-items: false
# custom presets
# presets:
# bauserver:
# modules: [core, punishments, reports, chatlog, inventory-sync, item-tracking, locks]
Without preset, core applies. Unknown keys under modules: are treated as custom modules (see below). The file is meant for sharing: modules.yml exportieren ("Export modules.yml") in the dashboard delivers exactly this file, custom presets included.
All modules
| Key | Name in the dashboard | Contents | requires |
|---|---|---|---|
core | Basis ("Base") | tp, home, warp, spawn, fly, gamemode, msg, vanish, /settings, /trade, chat channels | – |
punishments | Strafen ("Punishments") | /ban, /mute, /history, /lookup, ban screen, unban appeals | – |
reports | Reports | /report, report handling in the dashboard | – |
replay | Replay | Recordings for reports, replay in-game and in the browser | reports |
chatlog | Chat-Logs ("Chat logs") | Network-wide chat/command logs, log cleanup | – |
socialspy | Social Spy | /socialspy for private messages | core |
inventory-sync | Inventar-Sync ("Inventory sync") | Inventories in the database, /invsee everywhere | – |
item-tracking | Item-Tracking | Item IDs, history, chest registry, statistics, assignment, /deleteitem | inventory-sync |
locks | Sperren ("Locks") | Item and chest locks, automatic locks by quantity | item-tracking |
economy | Coins | /money, /pay, /baltop, /eco, Vault integration | – |
market | Aktienmarkt ("Stock market") | Bet on item prices (in the dashboard) | economy + item-tracking |
shop | AdminShop | Trader NPCs, selling/buying, fixed or dynamic prices, payout quota | economy |
magic-items | MagicItems | Elite/Epic/Legendary tools with abilities | – |
perks | Perks | /perks: auto pickup, XP boost, haste, flying … | – |
nick | Autonicker | Disguise with random names | – |
party | Party & Freunde ("Party & friends") | /party, /friend, party head (in the hotbar only in the lobby) | – |
clans | Clans | /clan: tag, ranks, invitations, bank, clan home, clan chat | – |
lobby | Lobby | Navigator, cosmetics, double jump, lobby protection, hotbar items of nick/party | – |
plots | Plots | CityBuild on PlotSquared: /plotflags (flag GUI), /rand (plot border), districts (rings around the spawn) and /plot merge for coins. PlotSquared itself comes from the plugin library | – |
farm-worlds | Farmwelten ("Farm worlds") | /farm: farm worlds with spawn teleport, automatic reset, their own perks and settings | – |
gamemodes | Spielmodi ("Gamemodes") | Gamemodes like TTT: rounds, map setup (/gsetup), passes. On servers of a gamemode task it is on automatically (unless gamemodes: false). No license of its own; each mode has one (gm:<id>) | – |
Dependencies are checked transitively: if you enable locks without inventory-sync, item-tracking is dropped first, and with it locks. The dashboard shows missing prerequisites in red („braucht: …“, "requires: …"); the server logs „Modul X bleibt aus — braucht Y“ ("Module X stays off — requires Y").
The ban check on join always runs, regardless of the punishments module. A banned player cannot get onto a server even if it has no ban commands.
Presets
| Preset | Modules |
|---|---|
core | core |
full | all modules |
survival | core, punishments, reports, replay, chatlog, socialspy, inventory-sync, item-tracking, locks, economy, market, magic-items, perks, nick, party |
lobby | core, punishments, reports, chatlog, socialspy, nick, party, lobby |
minigame | core, punishments, reports, replay, chatlog, socialspy, nick, party, gamemodes |
moderation | punishments, reports, replay, chatlog |
economy | core, inventory-sync, item-tracking, locks, economy, market |
citybuild | core, punishments, reports, replay, chatlog, socialspy, inventory-sync, item-tracking, locks, economy, market, magic-items, perks, nick, party, clans, plots, shop, farm-worlds |
clans is included in full and citybuild – enable it additionally for survival servers.
Custom presets are created in the dashboard via Aktuelle Auswahl als Preset speichern ("Save current selection as preset"). They are stored in modules-presets.yml in the database and embedded in every exported modules.yml. Built-in presets cannot be deleted.
Dashboard: Server → Module
Permission: eternal.web.modules (default level Admin, requires eternal.web.admin).
- Server list on the left: green dot = online, tooltip with „zuletzt gesehen“ ("last seen"). A crossed-out pencil means „noch nicht im Dashboard konfiguriert – nutzt lokale modules.yml“ ("not yet configured in the dashboard – uses local modules.yml").
- The Preset selection at the top right resets all toggles.
- Per module: toggle, description, „braucht: …“ (green = met, red = missing), status chip läuft ("running", active on the server) or ausstehend ("pending", saved, active after restart or
/eternal reload). - Speichern ("Save"), modules.yml exportieren ("Export modules.yml"), Vergessen ("Forget"; removes the server from the list, it registers again on its next start).
- At the bottom, you can see how many modules are active after resolving dependencies.
Assignment & custom modules (Server → Zuordnung)
Every toggleable unit of the plugin is a feature with a stable key:
| Prefix | Kind | Example |
|---|---|---|
cmd: | Command | cmd:trackitem |
listener: | Listener | listener:report-gui |
svc: | Service | svc:item-tracking |
task: | Background task | task:money-tags |
perms: | Permission category | perms:inventory |
config: | Section in config.yml | config:lobby |
The page lists all features with the module they ship in. Permission: eternal.web.modules.
- Reassigning: every feature can be moved to a different module (built-in or custom). The server then toggles it together with that module.
- Custom modules: key (
a-z,0-9,-), name, icon, description. A custom module is off on every server until it is enabled per server under Module. - It is stored network-wide as
features.txtin the database; effective after restart or/eternal reload.
Other plugins' commands: when a command is off (its module is off on this server), another plugin with the same command takes it over – e.g. Essentials' /msg. Eternal's version stays reachable as /eternal:msg. When the command is on, it belongs to Eternal even if the other plugin was loaded later (its version: /<plugin>:<command>). Example: put cmd:msg and cmd:reply into a custom module that is off → Essentials handles private messages.
Commands often need a service from another feature. If you move cmd:trackitem into a custom module, you must also enable svc:item-tracking – otherwise the command replies with the module notice.
Some examples of the default assignment that are not obvious:
| Feature | Module |
|---|---|
cmd:settings, cmd:trade, cmd:chat, cmd:teamchat, cmd:group, cmd:globalmute | core |
cmd:partychat | party |
cmd:deleteitem, cmd:trackitem, cmd:trackchest | item-tracking |
cmd:itemlock, cmd:chestlock | locks |
task:tab-teams (rank color in tab) | nick |
task:money-tags (coins below the name) | economy |
config:log-cleanup | chatlog |
Clearlag (part of core)
Removes items on the ground: automatically at an interval (feature task:clearlag) with an announcement before, or right away with /clearlag (permission eternal.clearlag). /clearlag info shows everyone the time left. MagicItems, custom items and locked items stay; tracked items get a "Clearlag" entry in their history.
clearlag:
auto: true
interval-minutes: 15
warn-seconds: [60, 10]
arrows: true # stuck arrows too
xp-orbs: false # XP orbs too
worlds-excluded: [] # worlds where nothing is removed
Common pitfalls
- Change does not take effect: modules are only read at startup and on
/eternal reload. The dashboard then shows „ausstehend“ ("pending"). - Module stays off: a prerequisite is missing (log line „bleibt aus — braucht …“, "stays off — requires …").
- Server does not show up: the heartbeat goes into the server's database. The dashboard only sees it if server and REST API use the same MySQL database – not with the local H2 file (
database.type: h2). - Hotbar items of nick and party are missing: the name tag and party head only exist on servers with the
lobbymodule. On game servers, only the commands work. See Lobby module. - Same server name twice:
server-nameinconfig.ymlmust be unique per server and match the name in the proxy – otherwise heartbeat and module list overwrite each other.