Configuration
ShadowRegions
Protect a place in three steps, with the rules written in plain words.
Where the files are
plugins/ShadowRegions/ The plugin creates them on first start and updates them by itself on new versions, keeping your changes.
Applying changes
/rg reload Reloads the files without restarting the server.
No setting found
Try another word, or search every plugin.
Settings
The files that decide how the plugin behaves. Start here.
config.yml
General settings 97 settings
config.ymlplugins/ShadowRegions/config.yml File notes
Everything you need is here. The other files are:
lang/<locale>.yml translations menus/<name>.yml GUI layouts presets/<name>.yml flag presets data/regions/*.yml the regions (YAML mode)
On update your files are moved to the new version automatically: what you changed is kept, the old copies are in backup/<date>/, and if something needs your attention you will find PORTING-<version>.txt in this folder.
config-version1general2 keysserver-id"server-1"Identifies this server, used when several servers share one database.
update-checktrueMessages
Adding a language = dropping a file into lang/. It is picked up on its own. Player facing text lives there, not here.
messages2 keysdefault-locale"en_US"The language used when a player's own is not in lang/, and by the console. Ships with en_US and it_IT. Set "it_IT" here for an Italian server.
follow-client-localetrueStorage
AUTO -> YAML files inside this folder (the default). No setup at all.
Fill in the MySQL host below and AUTO switches to the database.
YAML -> always files, even when credentials are present
MYSQL -> always the databaseKeep reading
Regions live in memory either way: the backend only ever receives the writes, so performance is identical between the two. To move from one to the other: /rg storage migrate
storage7 keystypeAUTOflush-interval"20s"How often changed regions are written to disk. They are also written immediately by /rg save and at shutdown.
table-prefix"sr_"Table prefix, used by the database backend only.
fail-safetruetrue -> if storage dies we stay up, read only false -> if storage dies the plugin disables itself
storage.backup3 keysenabledtrueon-startuptruekeep10storage.mysql6 keyshost""Empty host = we stay on the local files.
port3306database"shadowregions"username""password""storage.mysql.properties3 keysuseSSLfalsecharacterEncoding"utf8mb4"serverTimezone"UTC"storage.pool5 keysmaximum-size6minimum-idle2connection-timeout"10s"idle-timeout"10m"max-lifetime"30m"Protection
How the engine behaves when somebody tries to do something.
protection9 keysenabled-worlds[ ]Empty = every world. disabled-worlds wins over enabled-worlds.
disabled-worlds[ ]deny-build-for-non-memberstruetrue = a freshly created region protects straight away (WorldGuard behaviour) false = a region with no flags stops nobody
auto-bypasstrueWhoever holds the bypass permission has it already on, without turning it on.
op-bypasstruebypass-ignores-effectsfalsefalse = greeting, game mode and effects also apply to somebody in bypass
event-priorityNORMALLOWEST | LOW | NORMAL | HIGH | HIGHEST
fail-closedfalseIf a listener throws: false lets the action through, true blocks it.
deny-message-cooldown"2s"Anti spam for the refusal messages, per player.
Selection
selection5 keyswandWOODEN_AXEmatch-by-materialfalsetrue = any item of that material works as a wand false = only the wand handed out by /rg wand (carries an internal tag)
max-volume50000000 = no limit
max-polygon-points150Every extra vertex is one more step of deciding whether a block is inside, and that runs inside events. 150 is already a shape nobody draws by hand; past 512 the plugin will not go anyway.
persistfalsetrue = the selection survives a restart
Limits
Raised per group with permissions:
shadowregions.limits.regions.<n> shadowregions.limits.volume.<n>
and lifted entirely with shadowregions.limits.bypass
limits5 keysmax-regions-per-player0max-volume-per-player0min-size1max-children0limits.claim5 keysenabledtrueworlds[ ]min-size5max-size500overlap-allowedfalseParticle outline
preview9 keysenabledtrueradius64Nothing is drawn past this distance from the player.
max-points600Most points drawn in one pass.
interval10Ticks between one drawing and the next.
color-edge"#FFFFFF"color-normal"#55FF55"color-expand"#55FF55"color-contract"#FF5555"color-shift"#55FFFF"editor6 keysArea editor (the menu with a button per side) docs/11-EDITOR-AREA.md
default-step1steps[1, 2, 5, 10, 25, 50, 100]shift-multiplier5undo-depth32auto-previewtrueconfirm-on-closetruePerformance. There is almost never a reason to touch these
docs/15-PERFORMANCE.md
index1 keymax-chunks4096Past this width in chunks a region goes into the "large" list instead of filling thousands of buckets.
query-cache2 keysenabledtruettl500milliseconds
Flags that act over time: healing, food, effects, game mode, flight
effects2 keystick-interval20ticks between one pass and the next
restore-on-exittrueput game mode, flight and speed back when leaving the region
The chunk-unload flag
A region with chunk-unload deny keeps the chunks of its box loaded (Paper plugin chunk tickets: nothing is written into the world, and they go away when the plugin stops). A region wider than this, in chunks, is skipped with a warning in the console.
chunk-unload1 keymax-chunks-per-region256Change history (/rg history, /rg undo)
history3 keysenabledtruekeep-per-region50keep-days30Conditional rules
Flags that switch themselves on when something happens:
/rg condition arena add pvp deny when weather thunder
They are evaluated on a timer, never inside an event, so a region with rules costs the same as one without at query time. docs/25-CONDIZIONI.md
conditions2 keysenabledtrueinterval20ticks between one evaluation and the next
Selling, renting and expiry
The money is moved by the economy plugin: without one, all of this is inert. docs/26-VENDITA-E-AFFITTO.md
lease4 keysenabledtrueon-expiryUNCLAIMDELETE -> on expiry the region is deleted UNCLAIM -> on expiry it stays, but with no owners
warn-before[1d, 1h]how far ahead to warn the owner
check-interval"30s"how often to check expiries and renewals
Per region statistics (/rg stats)
Entries, time spent inside, blocks placed and broken.
stats2 keysenabledtruetrack-visitorstruekeeps the list of unique visitors. Turn it off if you do not need it.
Block log and /rg rollback
This is NOT a replacement for CoreProtect and does not try to be: it records only the changes INSIDE regions, with a ceiling on rows, and it is off by default. It is for putting spawn back together at 2am without installing anything else. docs/27-ROLLBACK.md
rollback3 keysenabledfalsemax-entries200000keep-days7Web map
With Dynmap installed, regions show up as coloured areas. Without Dynmap this section does nothing.
map1 keymap.dynmap7 keysenabledtruelabel"Region"fill-colour"#7B2FF7"fill-opacity0.25line-colour"#F107A3"line-opacity0.8line-weight2Import from other plugins
import2 keyson-conflictSKIPSKIP | OVERWRITE | RENAME
backup-beforetruesecurity1 keySecurity docs/29-SICUREZZA.md
region-console-commandstrueThe enter-command / exit-command flags can run commands as the console. Setting them already needs a permission of its own (shadowregions.flag.enter-command), but if you do not want a region to be able to reach the console under any circumstance, set this to false.
bStats - anonymous usage statistics (https://bstats.org)
metrics1 keyenabledtrueWhat is sent, every 30 minutes: that this server runs ShadowRegions, the plugin, Minecraft/Paper and Java versions, the operating system, the number of CPU cores, how many players are online (a number, nothing else), a random serverUuid that identifies nothing, and whether storage is YAML or MySQL. No player data leaves the server: no names, no UUIDs, no addresses, no regions or coordinates.
Keep reading
false switches it off for this plugin only. enabled: false in plugins/bStats/config.yml switches it off for every plugin on this server at once.
Diagnostics
debug3 keysenabledfalsewatchdogfalselogs a warning when a listener runs over its time budget
log-deniedfalsewrites every blocked action to the console. Very noisy.
blacklist.yml
What cannot be protected 3 settings
blacklist.ymlplugins/ShadowRegions/blacklist.yml File notes
Rules that apply EVERYWHERE, inside regions and outside them. They are for the things that must not happen on the server, full stop. A region watches an area; the blacklist watches an item.
While "enabled" is false this file costs nothing: the listeners leave on their first line.
enabledfalseHow a rule is written
- items: a list of materials, or [ "*" ] for every one of them
on: break | place | use | interact | drop | pickup
(when missing, the rule applies to all of them)
actions: deny stop the action
tell tell whoever did it
notify tell whoever holds shadowregions.notify
log write it to the console
kick kick from the server
message: MiniMessage text to use instead of the default oneKeep reading
Whoever holds shadowregions.blacklist.bypass is never stopped.
The keys above are the syntax and stay English. The "message" is what a player reads, so write it in whatever language your server speaks.
default[ ]These apply in every world.
Ready made examples, uncomment to use:
default:
- items: [ TNT, TNT_MINECART ]
on: [ place, use ]
actions: [ deny, notify, log ]
message: "<red>La TNT e disattivata su questo server."- items: [ LAVA_BUCKET ] on: [ place ] actions: [ deny, tell ]
- items: [ BEDROCK, BARRIER, COMMAND_BLOCK, STRUCTURE_BLOCK ] on: [ place, break ] actions: [ deny, notify, log ]
- items: [ SPAWNER ] on: [ break ] actions: [ notify, log ]
worlds{ }Extra rules for one world only. They add to the default ones.
worlds:
world_nether:
- items: [ WHITE_BED, RED_BED ]
on: [ interact ]
actions: [ deny, tell ]
message: "<red>I letti esplodono qui. Te lo sto risparmiando."Languages
The texts the plugin shows to players, one file per language.
lang/
Texts and messages 2 files
lang/plugins/ShadowRegions/lang/ File notes
This is the one file that is meant to be translated. Everything a player reads lives here; nothing here is syntax.
MiniMessage format. Placeholders are written <like-this> and their names are fixed: keep them, move them, but do not rename them. A key missing here is taken from the copy of this same language inside the jar first, then from the default language and from en_US, one key at a time.
A message can be a plain string or a map:
some-key: text: "<red>Text" channel: ACTION_BAR # CHAT | ACTION_BAR | TITLE | SUBTITLE | NONE sound: block.note_block.bass volume: 0.7 pitch: 0.8 cooldown: "2s" # anti spam, per player
Careful with keys like "on", "off", "yes" and "no": YAML reads them as true/false unless they are quoted. Write them as "on": and "off":.
Every message the plugin shows to players, one file per language. The keys are not listed one by one: here are the files, how many texts they hold and the placeholders they use.
| File | Language | Texts |
|---|---|---|
lang/en_US.yml reference | English | 1,097 |
lang/it_IT.yml | Italiano | 1,097 |
Most used placeholders
The plugin replaces them with the right value: leave them written as they are.
<prefix><region><count><flag><world><value><volume><name><x><z><y><max><size-x><size-y>
Message groups
prefix1common9help56command9selection29region66info11member8flag36protection22editor10preview4admin72dynmap4confirm6input22gui4menu334preset18blacklist10condition20stats9rollback12guide7create1flag-category9flag-type10flag-desc149flag-name149
Other
Ready-made content, examples, imports: the files you copy and edit as a model.
presets/
Region presets 9 files
presets/plugins/ShadowRegions/presets/ 9 files with the same structure. Below, 4 of them in full, one for each different shape; the others are listed by name.
arena-pvp.ymlhome.ymljail.ymlmuseum.ymlno-protection.ymlpublic-farm.ymlsafe-zone.ymlshop.ymlspawn.yml
Example presets/public-farm.yml
File notes
Preset "public-farm": everybody harvests, nobody destroys.
build: deny is the wall. block-break and block-place open one door in it and allowed-blocks decides how wide that door is: a material that is not on the list is stopped before the build check even runs. The crops keep changing hands, the fences, the water and the chests stay exactly where they are.
Name and description come from lang/<language>.yml, under preset.public-farm: write the words here instead to show the same ones in every language.
name"lang:preset.public-farm.name"description"lang:preset.public-farm.description"iconWHEATflags15 keysbuilddenyblock-breakallowblock-placeallowallowed-blocks"WHEAT, CARROTS, POTATOES, BEETROOTS, NETHER_WART, MELON, MELON_STEM, PUMPKIN, PUMPKIN_STEM, SUGAR_CANE, BAMBOO, COCOA, SWEET_BERRY_BUSH, CACTUS, TORCHFLOWER_CROP, PITCHER_CROP"interactallowuseallowchest-accessdenytrampledenycrop-growthallowpvpdenymob-spawningdenytntdenyfire-spreaddenylava-firedenylighterdeny Example presets/spawn.yml
File notes
Preset "spawn": the front door of the server.
Nobody builds here: with no members on the region the engine already says no. But doors, buttons, plates and crafting tables have to work, or the spawn build is furniture nobody can touch. "use" does not cover containers, so the chests stay shut all the same.
Name and description come from lang/<language>.yml, under preset.spawn: write the words here instead to show the same ones in every language.
name"lang:preset.spawn.name"description"lang:preset.spawn.description"iconBEACONflags15 keysuseallowpvpdenymob-spawningdenymob-damagedenyfall-damagedenyfire-damagedenydrowning-damagedenytntdenycreeper-explosiondenyother-explosiondenyfire-spreaddenylighterdenyitem-dropdenyhunger-draindenypassthroughdeny Example presets/jail.yml
File notes
Preset "jail": you go in, you do not walk out.
exit is the flag doing the work; the two teleport flags close the usual ways around it. Whoever holds the bypass permission is never held.
Name and description come from lang/<language>.yml, under preset.jail: write the words here instead to show the same ones in every language.
name"lang:preset.jail.name"description"lang:preset.jail.description"iconIRON_BARSflags15 keysexitdenyexit-via-teleportdenyenderpearldenychorus-fruit-teleportdenyflydenybuilddenyinteractdenyusedenychest-accessdenypvpdenymob-spawningdenymob-damagedenyitem-dropdenyitem-pickupdenyhunger-draindeny Example presets/museum.yml
File notes
Preset "museum": look, do not touch.
Name and description come from lang/<language>.yml, under preset.museum: write the words here instead to show the same ones in every language.
name"lang:preset.museum.name"description"lang:preset.museum.description"iconITEM_FRAMEflags12 keysbuilddenyinteractdenyusedenychest-accessdenyitem-frame-rotatedenyentity-item-frame-destroydenyentity-painting-destroydenyarmor-stand-manipulatedenypvpdenymob-spawningdenyinvincibleallowitem-dropdeny