Content generated with AI — it may contain mistakes.

Protecting land

Backends

INTERNAL and WORLDGUARD: what each one does, what a mirrored WorldGuard region holds, switching between them, and running without WorldGuard.

ExyliaProtections always enforces protections itself. The backend only decides whether other plugins can see them as well. It is settings.backend in config.yml.

BackendWhat happens
INTERNALThe default. The plugin enforces everything and no other plugin sees the protections.
WORLDGUARDEvery protection of this server is also written as a WorldGuard region, so plugins that read WorldGuard regions (flag checks, shops, minigames) see it. Roles, clans, overrides, bans and plots are still enforced by ExyliaProtections.

WorldGuard is not required in either case. When it is installed it is also used, in both backends, to refuse new land that overlaps another plugin's region; see Creating protections.

KeyDefaultWhat it does
settings.backendINTERNALINTERNAL or WORLDGUARD.
settings.worldguard-priority10Priority of the regions this plugin writes. Plot regions get one more.
settings.allowed-world-guard-regions[]Ids of WorldGuard regions a protection may overlap. Every other region blocks it, except the global region and this plugin's own.

What a mirrored region holds

RegionValue
Idsc_ps_ followed by the protection's id without dashes
Prioritysettings.worldguard-priority
OwnerThe protection's owner
MembersIts members, a tenant of the whole protection included, and every member of each clan added to it
pvp, mob-spawning, fire-spread, crop-growth, leaf-decayALLOW or DENY from the flag of the same name
tnt, creeper-explosion, other-explosionFrom explosions
water-flow, lava-flowFrom liquid-flow
entryDENY for non-members while visitor-entry is off (the protection is locked)
buildALLOW while the protection is raidable or abandoned

While a protection is raidable or abandoned and raids.explosions-while-raidable is on, its explosion flags are ALLOW whatever its own explosions flag says. A raidable or abandoned region never carries the entry deny.

The sc_ps_ prefix is the one the module used inside ExyliaSurvivalCore, kept so existing regions carry over. Regions are saved to WorldGuard's storage two seconds after a change, once for however many changes land in that time.

Plots

While submodules.subregions is on, each plot is also a region: <region>_<plot>, a child of the protection's region, one priority above it. It holds the owner, the plot's members and only the flags the plot sets itself; every other flag is inherited from the parent. Whether a plot is private is not mirrored.

Clan members reach WorldGuard late

A region's clan members are a snapshot of the clan taken when the protection last changed or the server started. Somebody who joins the clan afterwards builds through ExyliaProtections at once, but WorldGuard only lists them at the next change.

WorldGuard keeps its own membership rules

A mirrored region is a normal WorldGuard region, so WorldGuard applies its own rules to it on top of ExyliaProtections. Anything WorldGuard refuses to non-members of a region — building, using doors and containers — stays refused to a player who is not a region member, even when the protection's visitor role or a personal override grants it. A player who belongs only to a plot is a member of the plot's region, not of the protection's, so a locked protection's entry deny keeps them from walking to their plot through the rest of the land. Use INTERNAL when the visitor role or plot-only members matter.

Switching backends

/protections admin migrate <INTERNAL|WORLDGUARD>

Needs exyliaprotections.admin. It writes settings.backend to config.yml and applies it at once:

ToWhat it does
WORLDGUARDWrites a region for every protection of this server in every loaded world, replacing any older copy, and removes every sc_ps_ region that no longer belongs to a protection.
INTERNALRemoves every sc_ps_ region from every loaded world.

It answers "Backend is now … » N protection(s) on this server synced." Nothing about the protections themselves changes; only the WorldGuard side is rewritten.

The same reconciliation runs every time the server starts, once the protections are loaded. So a server set to INTERNAL with WorldGuard installed removes any sc_ps_ regions it finds, and a server set to WORLDGUARD rebuilds them all from the database. Editing settings.backend in the file by hand takes effect on the next restart; migrate is the live way to switch.

Each server has its own backend

config.yml belongs to each server, and a server only writes regions for the protections that belong to it. On a network, run migrate on every server that should change.

Regions are written into the worlds loaded at that moment. A protection in a world loaded later — by Multiverse-Core or Worlds, for instance — is still enforced by ExyliaProtections the moment the world loads, but gets its WorldGuard region only the next time that protection changes or the server restarts.

Without WorldGuard

ExyliaProtections starts and runs normally without WorldGuard or WorldEdit; nothing related to WorldGuard is loaded.

SituationWhat happens
settings.backend: WORLDGUARD and WorldGuard missingThe plugin runs INTERNAL and logs "Protections are set to the WORLDGUARD backend, but WorldGuard is not enabled. Falling back to INTERNAL." on every start. The key stays as written.
/protections admin migrate WORLDGUARDRefused with "WorldGuard is not enabled on this server." The file is not touched.
Overlap with other plugins' regionsNot checked: there are no regions to check.
/protections admin import protectionstonesRefused: the import reads WorldGuard regions. See Migration.

Installing WorldGuard later needs a restart; the plugin checks for it when it enables.

Something missing on this page? Tell us on Discord