Installation
The loader jar and the licence, dependencies and what each optional plugin adds, the files the plugin writes, the database, networks and updating.
Getting the plugin
ExyliaProtections is a premium plugin, bought from the Exylia store.
It ships through the Lukittu loader, so the file you install is the loader jar,
Exylia-Protections-Loader.jar. Bought on BuiltByBit, the licence is embedded in that jar: there is no
key to enter. The loader checks the licence on every start and then hands over to the plugin.
Before you start
| Plugin | What for |
|---|---|
packetevents | Required. Declared under depend, so without it the server does not load ExyliaProtections at all. The selector is an item only its holder's client sees, and border previews are drawn with packets. |
ExyliaLib | Required, version 1.238.0 or newer. Configuration, menus and prompts, the database, the selector, economy, clans, teleports, placeholders and the cross-server channels. |
plugin.yml names ExyliaLib under softdepend on purpose: the loader is what installs it, so the loader
has to be allowed to start without it. On a server without ExyliaLib it downloads the newest release into
plugins/ and asks for a restart. On a server running a release older than 1.238.0 it stages the newest
one in the update folder and says so in the console; restart once more to apply it. Without network access it
skips the install and tries again on the next start — put ExyliaLib.jar in plugins/ by hand.
Optional plugins
| Plugin | What it adds |
|---|---|
ExyliaSurvivalCore | Its statistics count what players do with their land — protections created, bought, sold, rented, upgraded, raids, bans — so missions, seasons and leaderboards can read them. Its player settings let each player mute the protection titles and the raid announcements. A server coming from its protections module imports them; see Migration. |
ExyliaEconomy or Vault | The currencies of the shop, the selector, the bank, upkeep, rent, sales, upgrades and moving a core, through ExyliaLib's economy. Without any economy every price above 0 is refused with "You need … for that.", so cores have to be handed out with /protections admin give. |
PlaceholderAPI | The plugin's placeholders in other plugins: scoreboards, tab, holograms. See Placeholders. |
WorldGuard and WorldEdit | The WORLDGUARD backend, the check that new land does not overlap another WorldGuard region, and the ProtectionStones import. See Backends. |
BlueMap, dynmap | Every protection drawn on the web map, coloured by its state. See Land tools. |
Worlds or Multiverse-Core | Listed so ExyliaProtections starts after them: the worlds they load at startup already exist when protections are set up and mirrored. |
Clans come from whichever clan plugin ExyliaLib detects — Factions, HuskTowns, ZelTeams, Kingdoms, SimpleClans, UltimateClans or ExyliaClans among them. Without one, the Add clan button answers "There is no clan plugin on this server."
Installing
Drop in the jars
Exylia-Protections-Loader.jar and packetevents into plugins/. Add WorldGuard, an economy or
a web map now if you want what they bring.
Start the server
The loader writes loader.yml, checks the licence and installs ExyliaLib if it is missing. If it
had to install it, restart once more.
Let it generate
The plugin writes config.yml, database.yml, messages.yml and its menus, creates its tables
and loads every protection. The console ends with ExyliaProtections enabled.
Protect something
Every player can already open /protections, buy a core and protect land: exyliaprotections.use
and exyliaprotections.select are on for everybody by default. See
First steps.
exyliaprotections.bypass is on for operators by default: they build, open and enter anywhere, and are
never refused by a protection. Test protections from an account without it. See
Permissions.
Generated files
All of them live in plugins/ExyliaProtections/.
| File | Contents |
|---|---|
loader.yml | Written by the loader. A BuiltByBit purchase needs nothing in it: the licence is in the jar. |
config.yml | Every setting: the backend, limits, the selector, the feature switches, each feature's keys, the import, the cleanup, the default roles and the core tiers. See Configuration. |
database.yml | Where rows are stored, and Redis. Written by ExyliaLib. |
lang/<language>/messages.yml | Every line the plugin sends, titles, boss bars, map labels and the names of permissions, flags and log actions. |
lang/<language>/menus/user/ | The 24 player screens: the hub, the list, the shop, a protection's overview and its sections, members, roles, switches, bans, logs, market, plots, rent, warps, perks and merge. |
lang/<language>/menus/admin/ | The 5 staff screens: the admin search, one protection, the tier list, one tier and the cleanup. |
.imported-survivalcore | Written once the ExyliaSurvivalCore import has run. See Migration. |
<language> is the language ExyliaLib is set to in its own config.yml. English, Spanish, Portuguese and
French are shipped (en, es, pt, fr); any other code starts from the English files.
config.yml and messages.yml are written from a schema: a key a release adds appears with its
default, and every value you set is kept. The player screens under menus/user/ are yours: a release only
writes the files that are missing, and when it has to change a layout it raises menu-version at the top
of that file, replaces it and keeps your previous one beside it. The staff screens under menus/admin/
are the plugin's and are rewritten from the jar on every start — an edit there does not survive a restart.
Database
By default the plugin uses H2: a file inside the plugin folder, with no server, no installation and
no maintenance. The engine is chosen in database.yml:
database:
type: mysql
mysql:
host: 127.0.0.1
port: 3306
database: minecraft
username: root
password: ""Supported engines: h2, mysql, mariadb, postgresql and mongodb. The file is ExyliaLib's; its full
reference, including the redis block, is in the library's database page.
| Table | What it holds |
|---|---|
protections | One row per protection: owner, name, tier, world, box, core, home, the server it belongs to, and its data — members, clans, roles, overrides, flags, bans, plots, level, perks, greetings |
protections_logs | The audit log |
protections_accounts | Each protection's bank balance and upkeep state |
protections_listings | Protections for sale |
protections_seen | When each player was last seen, for upkeep and the inactive cleanup |
protections_rent_offers | Plots and protections offered for rent |
protections_warps, protections_warp_ratings, protections_warp_visits, protections_warp_totals | Public warps, their ratings and their visits |
Cores that could not be handed over — a full inventory, a player who went offline — wait in ExyliaLib's
exylia_pending_rewards and are given on the player's next join.
A network
Point every server at the same database in its database.yml and every server sees every protection:
lists, limits, the market, rent and warps are network-wide. Each protection belongs to the server it was
made on, and only that server enforces it.
- Turn Redis on. Each server keeps every protection in memory. With Redis in
database.yml, a change made on one server is announced and re-read by the others at once; without it, the other servers see it only after their next restart. - Give every server its own name. A protection's server is the name the proxy bridge gives the
server, or
server-idin theredisblock ofdatabase.ymlwithout a bridge. Two servers sharing one name both enforce each other's protections in worlds of the same name; renaming a server leaves its protections belonging to the old name, unenforced.
Updating
The loader downloads the current release when it starts, so a restart is an update. The loader jar itself only needs replacing when a release asks for it.
Your config.yml, messages.yml, database.yml and the player screens are kept. config.yml carries
a version and is migrated in place when a release renames or moves a key; the console reports it.
There is no /protections admin reload. /exylialib reload re-reads the menu files of every Exylia
plugin, this one included, so a menu edit applies without a restart. A change to config.yml or
messages.yml needs a restart.
Something missing on this page? Tell us on Discord