The library's own files
plugins/ExyliaLib/config.yml and its neighbours: language, updates, metrics, the web editor and what each other file holds.
Everything a server owner sets for the library lives in plugins/ExyliaLib/. The files are generated
on first start, with a comment above every key, and /exylialib reload reads most of them again
without a restart.
| File | What it holds |
|---|---|
config.yml | Language, updates, debug, text style, timezone, metrics, web editor, /settings, toasts, notices, the staff log. |
colors.yml | The shared palette: {primary}, {success}, {letters} and the rest, used by every Exylia plugin. |
formats.yml | How numbers, money, percentages and dates are written. |
economy.yml | Which economy the server uses. |
input.yml | How the library asks players for text and numbers. |
displays.yml | Limits on what kill, hit and arrow display effects may cost, server-wide. |
cleanup.yml | Deleting old files in the server's logs/ folder. |
lang/<code>/ | The library's own messages and screens in each language. |
dumps/ | What /exylialib export and wipe write. |
/exylialib reload re-reads config.yml, colors.yml, formats.yml, economy.yml, input.yml,
cleanup.yml and the library's language files, and redraws every scoreboard, hologram and item with the
new colours. displays.yml, metrics, logs.flush-seconds and the /settings command need a restart.
It never reloads another plugin's files: each plugin has its own reload command, and each plugin's
database.yml lives in that plugin's folder.
config.yml
language: en
auto-update: true
update-check-minutes: 30
debug: false
small-text: true
text-shadow: auto:0.4
fallback-head: eyJ0ZXh0dXJlcyI6...
timezone: ''
ragdoll-skin-quality: normal
metrics:
enabled: true
plugin-updates:
enabled: true
majors: false
owners: [Exylia-Plugins, DiGround-s]
skip: []
web-editor:
enabled: true
url: https://utils.exylia.net
webhook-head: https://mc-heads.net/avatar/%uuid%/64
settings:
command:
enabled: false
name: settings
aliases: [preferences, options]
toasts:
fallback: action-bar
notices:
keep-days: 30
logs:
retention-days: 30
flush-seconds: 10
max-rows: 540
console-rows: 20
disabled: []| Key | Default | What it does |
|---|---|---|
language | en | The language of the whole server. See Languages. |
auto-update | true | Checks for a newer ExyliaLib and stages it for the next restart. |
update-check-minutes | 30 | How often to check again while the server runs. 0 leaves only the checks at startup and shutdown. Accepts 30m or 2h. |
debug | false | Turns on the detail lines of every Exylia plugin at once. |
small-text | true | Draws every line of every Exylia plugin in small capitals. Values a plugin substitutes, such as player names and numbers, are left alone. |
text-shadow | auto:0.4 | The shadow under every line: #rrggbb, #rrggbbaa, auto (a quarter of each letter's colour, like vanilla), auto:0.4 (40 % of it), none, or empty for whatever the client draws. Needs 1.21.4 or newer. |
fallback-head | a neutral head | The base64 texture used for a head that has none of its own. |
timezone | empty | The zone every schedule is read in, such as Europe/Madrid. Empty means the machine's own. |
ragdoll-skin-quality | normal | How finely ragdoll bodies are cut: high (18 pieces), normal (10) or low (5). |
metrics.enabled | true | See Metrics. |
plugin-updates | on | See Updating the other plugins. |
web-editor.enabled | true | Whether /exylialib editor may open a session. See Web editor. |
web-editor.url | https://utils.exylia.net | Only change it to run your own copy of the editor. |
webhook-head | mc-heads.net | The image a player's head is drawn from in Discord webhook messages; %uuid% is the player's id. |
settings.command | off | Registers /settings (and its aliases), the screen where players set the preferences every plugin registers. Off by default because a plugin can open the same screen from its own command. Needs a restart. |
toasts.fallback | action-bar | What an advancement popup becomes when it cannot be drawn: action-bar, title, chat or none. |
notices.keep-days | 30 | How long a message left for an offline player waits before it is deleted unread. |
logs | — | The staff audit log: days kept (0 keeps them for ever), seconds between writes, rows per lookup and per console answer, and plugins or Plugin:action pairs never recorded. See Commands. |
Languages
One key sets the language of the whole network:
language: esThe library ships en, es, pt, fr, ru and tr. Every Exylia plugin whose own language is
default — what a fresh install writes — follows it, and so do the library's own screens and prompts.
Setting a plugin's own language to a code overrides it for that plugin alone.
Each language is a folder of complete files under lang/ in each plugin's folder:
plugins/ExyliaFFA/config.yml language: default
plugins/ExyliaFFA/lang/es/messages.yml
plugins/ExyliaFFA/lang/es/menus/...- English is the base. A file or a line not translated yet still arrives, in English.
- Any other code is yours. A code nothing ships for (
de,custom, anything with letters, digits,-and_) starts as English and is the owner's to rewrite. - Servers that predate languages keep their files. The first time a translated file is asked for,
the one at its old place (
menus/,messages.yml) moves tolang/custom/, and the plugin'slanguageis set tocustom. - Changing it takes effect on each plugin's own reload; the library's own lines change on
/exylialib reload.
The library's hard-coded panel text is translated through lang/<code>/phrases.yml: the English line is
the key and the translation its value. A file with that shape at
plugins/ExyliaLib/lang/<code>/phrases.yml overrides any line, and is how a language the library does
not ship is added.
Lengths of time
Anywhere a length of time is configured, it can be written out instead of as a bare number: 30s,
1m30s, 500ms, 40t (ticks), 2h, 2d, 1w, 1mo, 2.5h. A bare number keeps meaning what it
always did for that key — seconds for a -seconds key, ticks for a menu's interval.
Updates
The library itself
With auto-update: true the library checks GitHub for a newer release at startup, every
update-check-minutes, and while the server stops. A newer jar is downloaded, verified and written
to plugins/update/, which the server applies on the next start. A reload never swaps it: every plugin
is bound to the running copy.
/exylialib update checks now, whatever auto-update says.
Updating the other plugins
The same passes keep the other Exylia plugins up to date from the GitHub releases of the repository each
one names in its plugin.yml. Before a jar is staged:
- the repository's owner must be listed in
plugin-updates.owners; - the release must be newer, and of the same major version unless
majors: true— a major release may change configs or commands, so by default it is only announced; - the download must be a jar of the same plugin at the release's version;
- it must run on the ExyliaLib that will be there after the restart; one that needs a newer library waits until the library catches up.
plugin-updates.skip lists plugins never updated. /exylialib plugins checks now, and an admin with
exylialib.admin is told on join when updates are waiting for a restart. Updating everything takes a
single restart.
Changed defaults
A plugin update adds new keys to every file on its own: nobody can have chosen something that did not
exist. A changed default is different — a value still equal to its old default may be exactly what
the owner wants — so it is never rewritten silently. It waits in /exylialib updates:
- A key you changed is yours and is never listed.
- A key still at the old default whose default changed or was removed is listed, with the current value and the new one.
- A menu or catalogue whose layout changed too much to merge (the plugin raised its
menu-version) is replaced at once when untouched. When edited, it waits as one change; applying it replaces the file and keeps yours as<name>.v<old version>.
For a player, /exylialib updates opens a menu: plugins, then their files, then each change. On a change,
left click applies and right click keeps. On a plugin or file, shift-left applies all of it and
shift-right keeps all of it. The console gets the same list as text, with
/exylialib updates apply <number|plugin|all> and /exylialib updates keep <number|plugin|all>.
Applying writes the new default and reloads what the file belongs to, so it is live at once. Keeping
marks it reviewed and leaves your value alone. A file edited by hand after the list was shown is left
alone and reported as stale. Pending changes are announced once in the console after startup, and to
anyone with exylialib.updates on join.
In .defaults/ inside each plugin's folder. On a server that predates this, nothing is reviewed yet,
so every value already there counts as yours and nothing is listed on the first start.
Metrics
With metrics.enabled: true the library reports to stats.exylia.net, every half hour or so:
- the server software and version, Minecraft and Java versions, operating system, cores, memory and heap in use, thread count, online and maximum players, online mode, and whether it is behind a proxy;
- the names and versions of the installed plugins, sent again only when the list changes;
- how the Exylia plugins are set up, as each one describes itself (event counts, region sizes);
- the errors Exylia plugins throw, grouped.
No player names, ids, IP addresses or anything a player typed. The server is identified by a random id in
metrics-id.txt. Only release builds of Exylia plugins count: a server running none sends nothing, and neither does a
development build.
enabled: false sends nothing, ever.
Cleanup
logs:
enabled: true
keep-days: 7Deletes files in the server's logs/ folder older than keep-days, a minute after startup and every six
hours. The log being written and anything that is not a log file are never touched. Turn it off if
something else already rotates them.
Something missing on this page? Tell us on Discord