Content generated with AI — it may contain mistakes.

Getting started

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.

FileWhat it holds
config.ymlLanguage, updates, debug, text style, timezone, metrics, web editor, /settings, toasts, notices, the staff log.
colors.ymlThe shared palette: {primary}, {success}, {letters} and the rest, used by every Exylia plugin.
formats.ymlHow numbers, money, percentages and dates are written.
economy.ymlWhich economy the server uses.
input.ymlHow the library asks players for text and numbers.
displays.ymlLimits on what kill, hit and arrow display effects may cost, server-wide.
cleanup.ymlDeleting 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.
What a reload covers

/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

plugins/ExyliaLib/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: []
KeyDefaultWhat it does
languageenThe language of the whole server. See Languages.
auto-updatetrueChecks for a newer ExyliaLib and stages it for the next restart.
update-check-minutes30How often to check again while the server runs. 0 leaves only the checks at startup and shutdown. Accepts 30m or 2h.
debugfalseTurns on the detail lines of every Exylia plugin at once.
small-texttrueDraws every line of every Exylia plugin in small capitals. Values a plugin substitutes, such as player names and numbers, are left alone.
text-shadowauto:0.4The 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-heada neutral headThe base64 texture used for a head that has none of its own.
timezoneemptyThe zone every schedule is read in, such as Europe/Madrid. Empty means the machine's own.
ragdoll-skin-qualitynormalHow finely ragdoll bodies are cut: high (18 pieces), normal (10) or low (5).
metrics.enabledtrueSee Metrics.
plugin-updatesonSee Updating the other plugins.
web-editor.enabledtrueWhether /exylialib editor may open a session. See Web editor.
web-editor.urlhttps://utils.exylia.netOnly change it to run your own copy of the editor.
webhook-headmc-heads.netThe image a player's head is drawn from in Discord webhook messages; %uuid% is the player's id.
settings.commandoffRegisters /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.fallbackaction-barWhat an advancement popup becomes when it cannot be drawn: action-bar, title, chat or none.
notices.keep-days30How 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: es

The 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 to lang/custom/, and the plugin's language is set to custom.
  • 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.

Where the reviewed defaults live

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

plugins/ExyliaLib/cleanup.yml
logs:
  enabled: true
  keep-days: 7

Deletes 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