Kinetic Hosting - quality hosting for low prices, 24/7 support, mod support Looking for a great server host? Get your Kinetic server with our link!
Click the banner to get your server now!

Space, admin and the network

Leaving the planet and what space costs you, plus the administration tools: permissions, protection, regions, jails and the multi server network.

← All wiki sections

The section names on this page (Space.*, Admin.*) are the names these modules had in the old operator switchboard, config/dmz_ragnarok/modules.cfg, which is no longer read. Space runs when its jar is installed (the Space module, or the all-in-one jar), on any server, with or without the Ragnarok Key. The whole administration group is private and needs the Ragnarok Key. There is one key and no tiers, and singleplayer gets the public set like any other server without the key.

How SU permissions resolve (applies to every module here). A node registered as ALL is granted to everyone; OP is granted to operators only; NONE is granted to nobody by default (not even ops) and must be handed out explicitly. IMPORTANT: a per-item / per-block / per-entity node that was NEVER registered resolves as ALLOW when checked. The parent node by itself grants nothing; only the wildcard child (for example su.protection.break.*) grants the whole set. Command top-level access is the command's own default level (ALL = vanilla permission 0, everyone; OP = vanilla permission 4).

SU config files live at <gamedir>/ShuruisUtilities/<Name>.toml, NOT under config/. They are baked at load and re-baked on /rgreload-style reloads.

Space

What it does

The whole space system: a datapack space dimension you reach by flying straight up past a high altitude, generated and fixed planets you fly to and land on, moons, asteroids, stars and black holes as hazards, a pod autopilot, claimable generated planets, planet destruction, and the Apophis (Black Star) event. Space is the group parent; turning it off removes the space dimension, all planets and all travel. The seven sub-modules below are the individual switches.

Commands

/spaceplanet (alias /planet) is the only command in the group; it belongs to Space.PlanetClaims and is documented there. The other six sub-modules register no commands.

Permission nodes

shuruisutilities.spaceplanet.admin (OP) gates the admin subcommands of /spaceplanet; see Space.PlanetClaims.

Config options

None at the group level. Each sub-module owns its own file.

Gotchas

  • Space is PUBLIC, in full, on any server running the mods (with or without the Ragnarok Key), but the /spaceplanet admin subcommands are separately OP-gated.
  • Nether, End and dragonminez:otherworld can NEVER be launch sources or planet bodies; this is enforced in code and cannot be overridden in config.

Space.Travel

What it does

Launching and returning. Flying up past the entry altitude in an eligible dimension moves you into the space dimension; sinking below the return altitude pulls you down onto the nearest landable body, or returns you to where you took off if nothing is in range. Handles the DMZ space pod as a travel vehicle (the pod travels with its pilot both ways), holds nimbus riders out of space, drives the pod autopilot for a selected planet, and enforces the per-planet surface rim boundary (with a fall-catch and an "unstuck" rescue). Origin is persisted on the player so a relog mid-trip never strands anyone. (@SUModule name SpaceTravel; file .../space/SpaceTravelModule.java.)

Commands

None. (The /spaceplanet unstuck escape hatch lives on the PlanetClaims command.)

Permission nodes

None.

Config options

File: <gamedir>/ShuruisUtilities/SpaceTravel.toml, section [SpaceTravel].

| Key | Default | Range | Effect | |---|---|---|---| | enabled | true | bool | Master switch. False: flying up never sends anyone to space and no altitude checks run. | | entryAltitude | 1000.0 | 0..4096 | Y you must rise above (in an eligible dimension) to enter space. | | returnAltitude | 288.0 | -64..4096 | Y in space you must sink below to be pulled onto the nearest body (or returned to origin). | | nearestPlanetRange | 6144.0 | 0..100000 | How far (blocks, measured to a body's surface) to search for a landable body when you sink below the return altitude. | | eligibleDimensions | ["minecraft:overworld"] | string list | EXTRA non-planet dimensions you may launch from. Every planet body is already launchable automatically. Nether/End/otherworld are always excluded in code. |

Gotchas

  • Staff (creative, opped, or vanished) are exempt from the surface rim clamp but keep the fly-up-to-leave and fall rescue.
  • The pod autopilot cruise speed is set in the SpacePlanets config (spaceAutopilotCruiseSpeed), not here.

Space.Hazards

What it does

The danger of space: star burn (proximity damage, lethal at the surface) and black holes (an inverse-square pull that becomes inescapable past the point of no return, and an instant kill at the event horizon). Spectators, creative players, and players on an active pod autopilot are immune. Deaths carry clear translated causes. (@SUModule name SpaceHazards; file .../space/SpaceHazardModule.java.)

Commands

None.

Permission nodes

None.

Config options

None of its own. It reads every strength and toggle from the SpacePlanets config (starsEnabled, starDamageOuter, starDamageInner, blackHolesEnabled, blackHolePullOuter, blackHolePullInner, blackHoleInfluenceFactor, and the star/black-hole spawn ranges). Tune hazards in SpacePlanets.toml.

Gotchas

  • Damage figures are FRACTIONS of the victim's max health per application, so they stay meaningful against DMZ's inflated health pools.
  • The black hole inner pull is derived from the player's own max flight speed (2x in a pod), so it is inescapable for everybody, not just an average flyer.

Space.Planets

What it does

Owns the whole planet/surface layout and the one config file the space system reads. Stamps the asteroid field into real blocks; everything else (planets, stars, black holes) is a pure function of world position that the client draws itself and the server re-derives, so nothing distant is a tracked entity. Generates claimable planets with themed surfaces (water, vegetation, structures, villages, Saibamen huts), wild defender garrisons that guard unowned planets, moons, and the Destroyer Gods that guard the seven Super Dragon Ball bodies. Runs the destroyed-planet debris timer. (@SUModule name SpacePlanets; file .../space/PlanetSpawnModule.java.)

Commands

None. (Claiming/destroying is done through /spaceplanet.)

Permission nodes

None.

Config options

File: <gamedir>/ShuruisUtilities/SpacePlanets.toml, section [SpacePlanets]. This is the largest space file; the SpaceHazards module reads its hazard keys too.

Core / bodies: | Key | Default | Range | Effect | |---|---|---|---| | enabled | true | bool | Master switch for planet bodies. | | spawnRange | 12000.0 | 256..64000 | How near a player keeps a planet visible. | | excludeTimeChamber | true | bool | Exclude dragonminez:time_chamber as a body (it is a room). | | requireLoadedDimension | true | bool | Only make a destination a body if its dimension is loaded (drops addon-only dims on installs that lack them). | | asteroidsEnabled | true | bool | Scatter scenery asteroids. | | asteroidSpawnRange | 384.0 | 64..4096 | How near a player an asteroid is stamped. | | generatedPlanetsEnabled | true | bool | Scatter claimable generated planets. | | generatedPlanetSpawnRange | 12000.0 | 256..64000 | Outer cull for generated planets. | | generatedSectorSize | 2048 | 256..65536 | Cell size a generated planet sits in (smaller = denser). | | generatedDensity | 0.5 | 0..1 | Fraction of cells holding a generated planet. | | fixedRingRadius | 2400.0 | 512..64000 | Floor for the fixed-planet ring radius. | | fixedRingJitter | 1000.0 | 0..32000 | Per-body hashed radius variety. | | fixedPlanetMinSeparation | 15000.0 | 10000..64000 | Hard minimum centre-to-centre distance between fixed planets. | | spaceAutopilotCruiseSpeed | 12.0 | 2..40 | Pod autopilot cruise (blocks/tick) when the pilot's own speed is slower. Keep <= ~20. | | bodyDrawDistance | (SpaceLayout default) | (floored above the largest hazard field) | How far the CLIENT draws bodies; independent of render distance. | | planetDebrisSeconds | 604800 (7 days) | 0..MAX | How long a destroyed planet stays rubble before a new one forms. | | guildRaidSpoilsSeconds | 86400 (24h) | 0..MAX | How long a guild's raid-won destruction right lasts. 0 = never lapses. |

Surface build: | Key | Default | Range | |---|---|---| | surfaceStampBlocksPerTick | 49152 | 256..1000000 | | surfaceColumnDepth | 128 | 4..150 | | moonSurfaceSize | 400 | 20..500 | | surfaceWaterEnabled | true | bool | | surfaceVegetationEnabled | true | bool | | surfaceSeaLevelOffset | 3 | 1..16 | | surfaceBasinFrequency | 0.30 | 0..1 | | surfaceVegetationDensity | 0.45 | 0..1 | | surfaceThemeWeightStony | 12 | 0..1000 | | surfaceThemeWeightOverworld | 34 | 0..1000 | | surfaceThemeWeightNamek | 21 | 0..1000 | | surfaceThemeWeightNether | 12 | 0..1000 | | surfaceThemeWeightEnd | 8 | 0..1000 | | surfaceThemeWeightKaio | 13 | 0..1000 | | surfaceStructuresEnabled | true | bool | | surfaceVillageFrequency | 0.35 | 0..1 | | surfaceHutFrequency | 0.5 | 0..1 | | surfaceHutSeedPlantedChance | 0.33 | 0..1 | | surfaceHutSeedHarvestChance | 0.33 | 0..1 |

Hazards (read by SpaceHazards): | Key | Default | Range | |---|---|---| | starsEnabled | true | bool | | starSpawnRange | 4096.0 | 256..4096 | | starSectorSize | (StarPositions default) | 1024..65536 | | starDensity | (StarPositions default) | 0..1 | | starDamageOuter | 0.05 | 0..1 (fraction of max health per half-second at field edge) | | starDamageInner | 0.40 | 0..2 (at the surface) | | blackHolesEnabled | true | bool | | blackHoleSpawnRange | 4096.0 | 256..4096 | | blackHoleSectorSize | (BlackHolePositions default) | 2048..65536 | | blackHoleDensity | (BlackHolePositions default) | 0..1 | | blackHoleInfluenceFactor | 30.0 | 1..50 (pull-field reach as a multiple of the hole radius) | | blackHolePullOuter | 0.25 | 0..5 (blocks/tick at the outer edge) | | blackHolePullInner | 6.0 | 0..40 (minimum inner pull floor) |

Wild defenders (garrison): | Key | Default | Range | |---|---|---| | wildDefendersEnabled | true | bool | | wildDefenderMinCount | 3 | 0..64 | | wildDefenderMaxCount | 6 | 0..64 | | wildDefenderBattlePowerMin | 5000.0 | 0..1e12 | | wildDefenderBattlePowerMax | 50000.0 | 0..1e12 | | wildDefenderToughnessDivisor | 10.0 | 0..1e9 (0 = use raw aggregate) | | wildFlatToughnessWhenDisabled | true | bool | | wildDefenderWeightSaiyan / ...Overworld / ...Namekian / ...Saibamen / ...FrostDemon / ...Robot | 1 each | 0..1000 |

Super Dragon Ball Destroyer God: | Key | Default | Range | |---|---|---| | superGodEnabled | true | bool | | superGodBattlePowerMin | 500000.0 | 0..1e12 | | superGodBattlePowerMax | 3000000.0 | 0..1e12 | | superRenderDistance | 1000.0 | 100..45000 |

Gotchas

  • The star/black-hole starSectorSize/starDensity/blackHoleSectorSize/blackHoleDensity defaults come from constants in StarPositions/BlackHolePositions and are not literal numbers in the config code.
  • Changing layout numbers re-derives space deterministically; already-stamped surfaces keep their persisted size/theme (a change only affects planets/moons stamped afterward).
  • surfaceColumnDepth max is capped so the deepest column never reaches the dimension floor at Y -64.

Space.LayoutSync

What it does

Sends the map of where the bodies are (sector sizes, densities, ring radius/jitter, owner map, destroyed set) to each client so they can draw space correctly. Off means the client sees an empty sky. It re-syncs whenever the layout changes (config bake, a claim, a destroy, a debris respawn). (@SUModule name SpaceLayoutSync; file .../space/SpaceLayoutSync.java.)

Commands

None.

Permission nodes

None.

Config options

None. (It sends the numbers baked in SpacePlanets.)

Gotchas

  • Purely client-facing state; turning it off does not stop server-side landing/hazards, it just stops clients drawing bodies.

Space.PlanetClaims

What it does

Lets a guild own a generated planet, and gives operators the tools to destroy/restore a planet and manage the Super Dragon Ball bodies. Ownership is keyed by planet id (survives the body evaporating) and follows the same rules as guild chunk claims: you must be in a guild, need the guild CLAIM/UNCLAIM rank permission, and a guild may hold exactly one body (planet OR moon). An unowned planet cannot be claimed while its wild defenders still live. (@SUModule name SpacePlanetClaims; command .../space/CommandSpacePlanet.java; module .../space/ModuleSpacePlanetClaims.java.)

Commands

/spaceplanet (alias /planet), default level ALL, player-only (no console). Most subcommands require standing on a generated planet's surface.

Player-facing:

  • /spaceplanet claim: claim the generated planet you are standing on for your guild (needs guild CLAIM rank permission; one body per guild; blocked while defenders live).
  • /spaceplanet unclaim: release your guild's claim on the planet you stand on (needs guild UNCLAIM rank permission).
  • /spaceplanet info: say whether the planet you stand on is claimed and by whom. This is the default when no subcommand is given. Operators (admin node) also get the planet's raw id on a clickable line here, click it to copy the id to your clipboard for destroy/restore.
  • /spaceplanet look: open the planet-info screen for the generated planet you are LOOKING at from space (fallback for a stolen P keybind; needs no surface). Operators (admin node) also get the raw id, clickable to copy, printed under the readout.
  • /spaceplanet unstuck: teleport you to your planet's ground-snapped cell centre if you are stuck at the rim. No permission gate; any player may use it.

    Owner/staff (OP-gated by node shuruisutilities.spaceplanet.admin, run from anywhere):

  • /spaceplanet destroy <planetId>: destroy a generated planet by id (may destroy an owned one).
  • /spaceplanet restore <planetId>: restore a destroyed planet (same planet, no generation bump).
  • /spaceplanet search <name>: find a planet, moon or destroyed body by a case-insensitive substring of its display name, so you can recover the id without flying to it. Lists each match's name, its id (click to copy), its state (unclaimed / claimed by which guild / destroyed with the time left until it regenerates) and its space coordinates, plus the distance from you when you are in space. Nearest first when you are in space, else alphabetical. Capped at 10 results with an "... and N more, refine the search" tail. Includes moons and currently-destroyed bodies so you can find the id to restore.
  • /spaceplanet superstatus: read-only status of all seven Super Dragon Ball bodies (state, position, distance from Earth, whether the god is alive).
  • /spaceplanet superrelocate <star|all>: force-relocate a genuinely-lost Super body (star 1..7 or all).

Permission nodes

  • shuruisutilities.spaceplanet.admin: default OP. Gates destroy, restore, search, superstatus, superrelocate, and the extra planet-id lines shown by info and look. Registered at server start with description "Destroy or restore a generated planet".
  • Claim/unclaim are gated by the guild rank permissions CLAIM / UNCLAIM, not by an SU node.

Config options

None.

Gotchas

  • destroy/restore/search/superstatus/superrelocate do NOT require you to stand on the planet; the other subcommands do.
  • destroy tab-completes existing destructible ids and restore tab-completes destroyed ids, each with the display name on hover. Both read a cached index that only rebuilds after a destroy, a debris regeneration or a restore, so completion stays cheap.
  • search covers the region within generatedPlanetSpawnRange of the space origin (where all fixed content and normal play sit), reusing the live derivation so a listed id is exactly what destroy accepts.
  • The admin nodes are checked with .requires(...) at registration; because RegisterCommands runs before any teardown, the subcommands stay registered even if the module is later disabled, but the node check still gates use.
  • Only GENERATED planets are destructible; fixed worlds and moons return "cannot be destroyed".

Space.PlanetBuster

What it does

Phase B of planet destruction: a player in space charges a GIANT BALL ki blast (or a long enough beam), fires it at a generated planet whose nameplate is showing, and the planet is destroyed only if the shot wins a DMZ beam-clash struggle against the planet's toughness. An unclaimed planet may be busted freely; a claimed planet only if the firer's guild holds an unspent raid entitlement for that exact planet. Every destruction routes through the same single entry point the admin command uses. The destroyer loses DMZ alignment points. (@SUModule name PlanetBuster; file .../space/PlanetBusterModule.java.)

Commands

None. (Uses the fired ki attack; admin destroy/restore lives on /spaceplanet.)

Permission nodes

None.

Config options

File: <gamedir>/ShuruisUtilities/PlanetBuster.toml, section [PlanetBuster].

| Key | Default | Range | Effect | |---|---|---|---| | enabled | true | bool | Master switch for busting. | | allowedKiTypes | ["GIANT_BALL"] | DMZ KiType names | Which ki attack types may destroy a planet. Valid names: SMALL_BALL, MEDIUM_BALL, GIANT_BALL, WAVE, LASER, BEAM, DISK, EXPLOSION, SHIELD, BARRAGE, AREA. | | redRampTicks | 60 | 0..1200 | Ticks a doomed planet tints red before it is destroyed. | | shatterTicks | 40 | 0..1200 | Client shatter animation length after destruction. | | alignmentPenalty | 10 | 0..100 | DMZ alignment points the destroyer loses (0 disables). | | clashEnabled | true | bool | Whether the beam-clash gate applies; false = the ball always destroys. | | clashTriggerRadiusMultiplier | 2.0 | 1..100 | Where the clash forms, as a multiple of planet radius. | | clashTriggerMinDistance | 50.0 | 1..100000 | Flat minimum clash trigger distance (blocks). | | clashWildToughness | 5000.0 | 0..1e9 | Toughness of an unowned planet (ki-damage scale). | | clashGuildToughnessBase | 5000.0 | 0..1e9 | Base toughness of a guild-owned planet. | | clashGuildToughnessPerMember | 2000.0 | 0..1e9 | Added per guild member. | | clashGuildBattlePowerDivisor | 100.0 | 0..1e12 | Guild aggregate battle power / this = a toughness term (0 ignores it). | | clashGuildToughnessFloor | 8000.0 | 0..1e9 | Minimum guild-owned planet toughness (covers offline guilds). | | minBlastKiDamage | 3000.0 | 0..1e9 | Minimum ki damage a blast must carry to bust at all (0 disables this gate). | | beamEnabled | true | bool | Whether beams (ki waves) can bust planets. | | minBeamKiDamage | 3000.0 | 0..1e9 | Beam twin of minBlastKiDamage (0 disables). | | clashDebug | false | bool | Diagnostics: one clash-state log line per second. Leave false in production. | | clashBattlePowerEnabled | true | bool | Weigh attacker battle power (not ki damage alone) in a planet clash so melee builds can compete. | | clashKiDamageWeight | 0.15 | 0..1e6 | Weight on raw ki damage in the blend. | | clashBattlePowerWeight | 1.0 | 0..1e6 | Weight on the battle-power term. | | clashBattlePowerScale | 0.05 | 0..1e6 | Scales raw battle power onto the ki-damage scale. | | clashDefenderWeight | 0.05 | 0.01..100 | How hard the planet pushes back in the clash minigame (NOT linear; a log curve saturates near clash weight ~1358). |

Gotchas

  • There is deliberately NO destruction range config: you may only bust a planet from the same distance its nameplate shows (SpaceLayout.LABEL_DISTANCE).
  • clashDefenderWeight is non-linear; only cuts below ~1358 clash weight are felt.
  • A raid win makes destroying a claimed planet POSSIBLE but never automatic; the entitlement is consumed at impact.

Space.Apophis

What it does

The Black Star ("apophis") dragon-ball endgame: seven Black Star balls seeded across seven random generated planets within 45,000 blocks of Earth, a red dragon summonable only on a generated planet, a one-real-week countdown armed by that summon, and a planet-aware radar to find the balls. If all seven balls are re-collected before the deadline the summon planet is spared; if the deadline passes first the planet is destroyed. (@SUModule name ApophisSummon; file .../space/ApophisSummonModule.java.)

Commands

None.

Permission nodes

None.

Config options

None. (The re-form/debris timing rides planetDebrisSeconds in SpacePlanets; the summon deadline is a fixed one real week.)

Gotchas

  • The one-week timer is wall-clock (absolute deadline), so it advances even while the server is offline.
  • The dimension gate (a completed Black Star set only works on planet_surface) is enforced by a mixin, not by this module.

Admin

What it does

The parent switch for the entire administration suite (permissions, protection, regions, jail, banned items, staff, perf tools, world borders, multiworld, block updates, WorldEdit tools). Turning Admin off takes every Admin.* sub-module with it. The whole group is PRIVATE except the WorldEdit selection tools (public, because arena and room bounds are picked with them): it needs the Ragnarok Key, so a server without the key (singleplayer included) does not get it.

Commands

None at the group level; each sub-module below owns its commands.

Permission nodes

None at the group level.

Config options

None at the group level.

Gotchas

  • Admin.Permissions and Admin.Protection are core (Protection is canDisable = false in code); turning off Permissions "leaves every other permission check unanswered", so it is effectively load-bearing for the rest.

Admin.Permissions

What it does

The permission and rank-prefix system every other module asks. Staff use it to put players into permission GROUPS, grant/deny individual nodes to a user or a group, set chat prefixes/suffixes, and define permission ZONES (areas where different permissions apply). Reach for it whenever you need to give a rank a command, take a node away from someone, or promote a player into a group. It also owns permission-tagged items (items that carry a permission a holder must have). (@SUModule name Permissions; module .../permissions/ModulePermissions.java.)

Commands

Registered by ModulePermissions:

  • /perm (aliases /sup, /p), default OP, console usable. The main permission editor. Top-level subcommands include help, user <player> ... (with perms, prefix [clear], suffix [clear], group list|<add/remove> [group], allow <perm>, deny <perm>, clear <perm>, value <perm>, denydefault, zone <zone> ...), and parallel group ..., list ..., plus test, reload, save, debug. (Argument tokens are joined with && internally.)
  • /promote <player> <group>, default OP, console usable. Move a player into a permission group.
  • /area (alias /zone), default OP, player-only. Define and manage permission zones: help, select <zone>, list [pageLimit], info <zone>, define <zone> <type>, redefine <zone> <type>, delete <zone>, message exit|entry <zone> get|clear|set <message>.
  • /permtaggeditem, default OP, player-only. Tag the held item with a permission requirement: mode inventory|equip|use, perm <perm> true|false, group <group>, reset.
  • /rggui (permissions GUI command), opens the permission editor screen.

Permission nodes

Registered defaults:

  • su.perm (ALL): base permission command node.
  • su.perm.* (OP): full permission command access.
  • su.perm.test (ALL), su.perm.debug (ALL): test/debug a node.
  • su.perm.reload (OP), su.perm.save (OP).
  • su.perm.user (OP), su.perm.user.perms (OP), su.perm.user.spawn (OP), su.perm.user.fix (OP).
  • su.perm.group (OP), su.perm.group.perms (OP), su.perm.group.spawn (OP), su.perm.group.fix (OP).
  • su.perm.list.perms (ALL), su.perm.list.zones (OP), su.perm.list.users (OP), su.perm.list.groups (OP).
  • su.perm.zone and children su.perm.zone.* (OP), .list (ALL), .info (ALL), .define/.delete/.settings (OP). [from CommandZone; .list and .info are ALL]
  • su.perm.autoPromote (OP).
  • su.core.info (OP): access /rginfo.
  • su.playerlimit.bypass (OP): bypass the network player cap.
  • su.maptp (OP): map teleport.
  • su.internal.group.promotion (a.k.a. GROUP_PROMOTION) (NONE): nobody by default.
  • su.internal.spawn.bed (SPAWN_BED) (ALL).

Config options

File: <gamedir>/ShuruisUtilities/Permissions.toml, section [Permissions]. | Key | Default | Effect | |---|---|---| | persistenceBackend | "singlejson" | Which permission storage backend: flatfile, json, or singlejson. | | fakePlayerIsSpecialBunny | true | Treat fake players specially. | | useEntireCommandNode | false | Whether command permission nodes use the entire command node path. |

Gotchas

  • Turning this module off leaves every other module's permission checks unanswered (documented in the catalog).
  • Remember the unset-node rule: unregistered per-item nodes resolve as ALLOW; the parent grants nothing, only parent.* grants the whole set.
  • NONE nodes (for example group promotion) are granted to nobody, not even ops, until explicitly handed out.

Admin.Protection

What it does

The zone/global protection layer: block break/place, interaction, item use/craft, entity damage (to and from), mob spawning (natural vs placed), fire, explosions, PvP, sleep, hunger, pressure plates, ki-blast griefing, and knockback. Staff use it to lock down areas or set server-wide rules by toggling permission nodes on the default group, on a group, or inside a permission zone. Zone effects (run a command, deal damage, apply a potion) can fire on entry/exit. (@SUModule name Protection; core module, canDisable = false. Module .../protection/protection/ModuleProtection.java.)

Commands

  • /itemperm, default ALL, player-only. Set allow/deny/clear for the held item across the protection categories: <type> allow|deny|clear [all|*].
  • /protectdebug, default OP, player-only. Report which protection check would refuse a given action: /protectdebug <command> or bare.

    (Zone entry/exit effects are configured through the zone/region tooling, not a standalone command. CommandEffect is a zone-effect type that runs a command, not a registered player command.)

Permission nodes

All protection nodes are registered at default ALL (permissive by default; you protect by DENYING). Base su.protection. Representative nodes:

  • su.protection.pvp, .sleep, .needsfood, .pressureplate, .explosion.
  • su.protection.use.*, .break.*, .place.*, .trample.*, .interact.*, .interact.entity, .explode.*, .kiblast.*, .inventory.*, .exist.*, .craft.* (each with per-block/per-item children).
  • su.protection.damageto.* and su.protection.damageby.* (with per-entity, per-damage-type and .explosion children).
  • su.protection.mobspawn.natural.*, .forced.*, .placed.* (with per-entity children).
  • su.protection.fire.destroy (ALL), su.protection.fire.spread (ALL).
  • su.protection.zone.knockback (NONE): off by default.
  • mc.commandblock: command-block permission marker.

Config options

None. (Protection state lives in the permission store / zones, edited through /perm, /area, /itemperm, not a toml.)

Gotchas

  • Because every registered node defaults to ALL and unregistered per-item nodes also resolve as ALLOW, protection is an explicit DENY model: nothing is blocked until you deny it (globally, per-group, or per-zone).
  • This is a core module: it cannot be disabled in code (canDisable = false), so the Admin.Protection switchboard key turning it off may not fully unregister it.

Admin.Regions

What it does

WorldGuard-style cuboid protection regions. Staff select a cuboid (WorldEdit or pos1/pos2), define a named region, then set flags (build, pvp, natural/spawned mobs, DMZ healing, ki-blast griefing, entry, and more) via commands or the GUI. Regions support owners/members, priorities and parents. Reach for it to protect a build, a spawn, or a specific area with fine-grained rules. Persists to <gamedir>/ShuruisUtilities/regions.json. (@SUModule name Regions; module .../regions/ModuleRegions.java.)

Commands

  • /serverclaim, default OP, player-only:
    • define <name>: create a region from your current selection.
    • add <name> / remove <name>: add/remove a cuboid to/from a region.
    • rename <name> <newname>.
    • list: list regions.
    • bypass: toggle your own region bypass.
    • info <name>: region details.
    • tp <name>: teleport to a region.
    • priority <name> <value>: set region priority.
    • flag <name> <flag> <value>: set a region flag.
    • parent <name> <parent>: set a parent region.
    • addowner|removeowner|addmember|removemember <name> <member>.
  • Region GUI is reachable via /rggui admin -> Regions.

Permission nodes

  • su.regions.admin (OP): manage regions (/serverclaim).
  • su.regions.bypass (OP): bypass region restrictions.

Config options

None (a toml). Region data is JSON at <gamedir>/ShuruisUtilities/regions.json.

Gotchas

  • Flags are a WorldGuard-style catalogue with several types (STATE tri-state allow/deny/unset, plus message/number/gamemode/weather/time/location value flags). Some environmental STATE flags are catalogued for parity but not yet enforced. The DMZ flags (ki-griefing, dmz-gravity, dmz-heal) route through DragonMineZ.
  • su.regions.bypass is OP by default; /serverclaim bypass toggles it live.

Admin.Commands

This is the suite's general admin command set: the single biggest module, registered by ModuleCommands (SUModule name Commands). It bundles roughly five dozen standalone slash commands that have nothing to do with each other beyond being staff and player utilities: healing and buffing players, moderating them (freeze, ban, vanish), managing items and personal storage (kits, vaults, ender chests), reading server and player information, and controlling the world (time, weather, entity and item cleanup, chunk pruning). A handful of the commands are DMZ-specific (saga difficulty, race unlocks, the shadow dragon endgame, wish tracking).

Every command's base permission is a node named command.<name> (for example command.fly, command.heal), whose default is the level listed per command below. OP means only operators (server level-2+) hold it by default; ALL means every player has it; NONE means nobody has it until it is granted. Aliases resolve onto the primary command's node, so granting command.pardon does nothing: grant command.unban.

What it does

Provides the everyday staff and player toolkit: heal/repair/buff players and yourself, moderate (freeze, temp-ban, vanish, invsee, gamemode, run-as), hand out and manage kits, personal vaults and ender chests, look up players and server state, and edit the world (set time and weather, cull mobs, sweep dropped items, prune unused chunks). It also carries a few DMZ-specific admin tools (saga difficulty override, shadow dragon race and form grants, the dragon ball wish-tracking subsystem), and a configurable /buy store link.

Config options

The module reads <gamedir>/ShuruisUtilities/Commands.toml. Section headers below are the TOML tables as they appear in that file.

  • [Commands Config] version (default 5) - internal migration marker. Do not edit.
  • [Command Rules Settings] filename (default rules.txt) - name of the rules text file, read

    from the <gamedir>/ShuruisUtilities/ folder, that /rules displays.

  • [Command VirtualChest Settings] VirtualChestRows (default 6, range 1-6) - rows per personal

    vault. 1 row = 9 slots, 3 = single chest, 6 = double chest (the max).

  • [Command VirtualChest Settings] VirtualChestName (default Vault) - vault display name, shown

    as <name> #<n>. The old baked-in default Vault 13 is auto-migrated to Vault.

  • [Command Findblock Settings] defaultRange (default 320) - default max search distance for

    /findblock.

  • [Command Findblock Settings] defaultSpeed (default 256) - default scan speed for /findblock.
  • [CommandHelp Settings] custom_help (default empty list) - extra lines appended to /help.
  • [CommandHelp Settings] commandPerPage (default 8, range 1-50) - commands shown per /help page.
  • [CommandHelp Settings] commandColor (default 2 = dark_green) - colour code (0-15) for commands in /help.
  • [CommandHelp Settings] subCommandColor (default 7 = gray) - colour code (0-15) for subcommands in /help.
  • [Command Ping Settings] response (default Pong! %time) - /ping reply format; must contain %time.
  • [Command Kit Settings] kitForNewPlayers (default blank) - kit name auto-given to new players; blank disables it.

    One further key lives in the CORE config, not this module's file:

  • <gamedir>/ShuruisUtilities/main.toml, [Misc] StoreUrl (default blank) - the URL /buy links

    to. Leaving it blank means /buy is not registered at all (see Gotchas). Setting it requires a server restart to take effect.

Gotchas

  • Three commands register conditionally, so an operator can see them present on one server and

    absent on another:

    • /buy (aliases /store, /shop) is registered only when [Misc] StoreUrl is non-blank

      (CommandStore.configured()). Because Brigadier's dispatcher is built once at RegisterCommandsEvent, adding the URL needs a restart; it will not appear on a config reload. (Added to this module today.)

    • /character (aliases /characters, /char) registers only if the Character Slots feature is

      enabled; /prestige registers only if the Prestige feature is enabled. Both belong to those separate features and are documented here only because this module is where they are wired in.

  • The whole module needs the Ragnarok Key. If the key is absent (the entitlement answer is

    false), registerCommands returns immediately and NONE of these commands exist. Entitlement is decided at registration, so a server holding the Ragnarok Key keeps them.

  • /rg prune is not its own command. It is a subcommand hung directly on the shared /rg

    root (registered raw, bypassing SUCommandManager), so it has no command.* node: it gates on vanilla permission level 2. It shares the same code and safeguards as /purgechunks.

  • /buy collides with Tebex. If the Tebex/BuyCraft mod is installed it registers its own

    /buy; whichever loads last wins. Set disable-buy-command=true in config/buycraft/config.properties to keep both.

  • /clearitems vs /remove. /clearitems sweeps dropped items across EVERY loaded

    dimension and always spares dragon balls (and the configured exclusion list). /remove takes a radius and centre in ONE dimension and removes anything, dragon balls included.

  • /kit cooldown resets are configured per player permission, and /gamemode, /heal,

    /kill, /potion, /smite, /burn, /repair, /sagadifficulty, /vanish and /pv all self-serve by default but need a separate .others node to target another player.

Information and lookup

  • /help (alias /?) - /help [page]. Paginated list of registered commands, with operator

    custom lines. For: player. Node command.help, default ALL.

  • /commandbook (alias /cmdbook) - /commandbook. Gives you a written book of commands. For:

    player. Node command.commandbook, default ALL.

  • /modlist - /modlist [page]. Lists the mods installed on the server. For: player. Node

    command.modlist, default ALL.

  • /ping - /ping. Replies with the configured pong string (round-trip time). For: player.

    Node command.ping, default ALL.

  • /rules - /rules, /rules page <n>, /rules help, /rules book, plus editor subcommands

    /rules add <text>, /rules change <page> <text>, /rules remove <page>, /rules move <from> <to>. Shows the server rules; editing needs the su.commands.rules.edit node (OP). For: player (read), staff (edit). Node command.rules, default ALL.

  • /locate (aliases /gps, /loc, /playerinfo) - /locate <player>. Reports a player's

    position and info. For: staff. Node command.locate, default OP.

  • /seen - /seen <player>. Reports when a player was last online. For: player. Node

    command.seen, default ALL.

  • /playtime (alias /played) - /playtime, /playtime <player>, /playtime top [count].

    Shows your own or another player's total play time, or a leaderboard. For: player. Node command.playtime, default ALL.

  • /findblock (alias /fb) - /findblock <blockstate>. Scans outward for the nearest matching

    block within the configured range. For: staff. Node command.findblock, default OP.

  • /npcprobe - /npcprobe. Dumps the live AI state of the nearest CustomNPC (movement,

    standing, targeting), a diagnostic tool. For: staff. Node command.npcprobe, default OP.

  • /buy (aliases /store, /shop) - /buy. Hands the player a clickable link to the store

    URL the operator configured; console gets the plain address. Registered only when [Misc] StoreUrl is set (see Gotchas). For: player. Node command.buy, default ALL.

Items and inventory

  • /kit - /kit <name> (redeem), /kit list, /kit modify create <name> [cooldown],

    /kit modify delete <name>. Redeem or manage kits. Redeeming a kit needs the per-kit node su.commands.kit.<kitname>; the modify subcommands need su.commands.admin (OP); cooldowns can be bypassed with su.commands.kit.bypasscooldown (OP). For: player (redeem), staff (modify). Node command.kit, default ALL.

  • /enderchest (alias /echest) - /enderchest, /enderchest <player>. Opens your own or

    another player's ender chest. For: staff (opening others). Node command.enderchest, default OP.

  • /pv (aliases /virtualchest, /vchest) - /pv [number], /pv <target> <vault>. Opens a

    personal virtual vault. How many vaults you may open is set by the su.pv.amount permission property (default 1); opening another player's vault needs su.pv.others (OP). For: player; staff for others. Node command.pv, default ALL.

  • /craft - /craft. Opens a virtual crafting table. For: staff. Node command.craft,

    default OP.

  • /drop - /drop <pos> <count> <item>. Drops a stack of an item at a position. For: staff.

    Node command.drop, default OP.

  • /duplicate - /duplicate <size>. Duplicates the held item stack to the given count. For:

    staff. Node command.duplicate, default OP.

  • /enchant - /enchant <enchantment> maxlevel or /enchant <level> custom. Enchants the item

    in your hand. For: staff. Node command.enchant, default OP.

  • /dechant - /dechant <enchantment>. Removes an enchantment from the held item. For: staff.

    Node command.dechant, default OP.

  • /repair - /repair self MaxValue, /repair self Custom <amount>,

    /repair others <player> MaxValue, /repair others <player> custom <amount>. Repairs the held item's durability. Repairing others needs su.commands.repair.others (OP). For: staff. Node command.repair, default OP.

  • /rune - armour: /rune armor tier <tier>, /rune armor stat <stat> <arrows>,

    /rune armor socket <stat> <tier>, /rune armor unsocket <slot>, /rune armor reroll, /rune armor info; item: /rune item stat <stat>, /rune item grade <grade>, /rune item tier <tier>, /rune item reroll, /rune item info. Edits the rune data on the held armour or rune item. For: staff. Node command.rune, default OP.

  • /rename - /rename <name>. Renames the held item (colour codes allowed). For: staff. Node

    command.rename, default OP.

  • /bind - /bind left command <command>, /bind left none, /bind right command <command>,

    /bind right none, /bind clear. Binds a command to left/right click of the held item. For: staff. Node command.bind, default OP.

Healing and buffs

  • /heal - /heal, /heal <player>. Restores health (and feeds). Healing others needs

    su.commands.heal.others (OP). For: staff; self-heal is OP too. Node command.heal, default OP.

  • /potion - /potion give <targets> <effect> [seconds] [amplifier] [hideParticles],

    /potion clear <targets> [effect]. Applies or clears potion effects. Affecting others needs su.commands.potion.others (OP). For: staff. Node command.potion, default OP.

  • /god - /god me <true|false>, /god others <player> <true|false>. Toggles invulnerability.

    For: staff. Node command.god, default OP.

  • /fly - /fly, /fly <true|false>. Toggles or sets flight. For: staff. Node command.fly,

    default OP.

  • /speed - /speed set <multiplier>, /speed reset, /speed current. Changes your movement

    speed. For: staff. Node command.speed, default OP.

Moderation and punishment

  • /gamemode (alias /gm) - /gamemode <survival|creative|adventure|spectator> [targets].

    Sets game mode; targeting others needs su.commands.gamemode.others (OP). For: staff. Node command.gamemode, default OP.

  • /invsee - /invsee <player>. Opens and edits another player's inventory. For: staff. Node

    command.invsee, default OP.

  • /vanish - /vanish, /vanish <player>. Toggles invisibility to other players; toggling

    another player needs su.commands.vanish.others (OP). For: staff. Node command.vanish, default OP.

  • /freeze - /freeze <player>, /freeze <player> <true|false>. Freezes a player in place

    (enforcement is live from module load). For: staff. Node command.freeze, default OP.

  • /doas - /doas <player> <command>. Runs a command as the named player. For: staff. Node

    command.doas, default OP.

  • /kill - /kill, /kill <player>. Kills yourself, or another player with

    su.commands.kill.others (OP). For: staff. Node command.kill, default OP.

  • /burn - /burn me [time], /burn others <player> [time]. Sets a player on fire for a

    number of seconds. Affecting others needs su.commands.burn.others (OP). For: staff. Node command.burn, default OP.

  • /smite - /smite player <player>, /smite location <pos>, /smite (where you are looking).

    Strikes lightning. Affecting others needs su.commands.smite.others (OP). For: staff. Node command.smite, default OP.

  • /tempban - /tempban <player> <duration> <reason>. Temporarily bans a player with a stored

    reason. For: staff. Node command.tempban, default OP.

  • /unban (alias /pardon) - /unban <player>. Lifts a ban and clears the stored reason. For:

    staff. Node command.unban, default OP.

  • /meleeclash - /meleeclash, /meleeclash <player>. Starts a melee clash rhythm minigame

    (against yourself, or a named player), a testing tool. For: staff. Node command.meleeclash, default OP.

World and time

  • /time - /time set <day|midday|dusk|night|midnight|ticks> <all|dimension>,

    /time add <ticks> <all|dimension>, /time freeze <all|dimension>, /time (info). Sets, adds or freezes time per dimension or across all. For: staff. Node command.time, default OP.

  • /weather - /weather rain <enable|disable|force|start|stop>,

    /weather storm <enable|disable|force|start|stop>, /weather clear; bare rain/storm show info. Controls weather. For: staff. Node command.weather, default OP.

  • /butcher - /butcher <radius> [mobType] [x y z] [world], bare /butcher prints usage.

    Culls mobs of a type within a radius (radius -1 for unlimited). For: staff. Node command.butcher, default OP.

  • /remove (alias /clearGroundItems) - /remove <radius> <position> [dimension]. Clears

    dropped items in a radius in one dimension (removes everything, dragon balls included). For: staff. Node command.remove, default OP.

  • /clearitems (alias /clearitemsglobal) - /clearitems (clear now), /clearitems warn

    (start the countdown). Clears dropped items across every loaded dimension, sparing dragon balls and the exclusion list. For: staff. Node command.clearitems, default OP.

  • /purgechunks - /purgechunks <dimension> (dry run), /purgechunks <dimension> confirm

    (apply). Reclaims unclaimed, untouched wilderness in ONE dimension so it regenerates; claims, regions, homes, spawn and loaded chunks are protected. For: owner/console. Node command.purgechunks, default OP.

  • /rg prune - /rg prune (dry run), /rg prune confirm (apply). The all-dimensions

    counterpart to /purgechunks, sweeping every loaded dimension on the allow-list. For: owner/console. No command.* node: gates on vanilla permission level 2. (Subcommand of the shared /rg root, not a standalone command.)

  • /updateblocks (aliases /fixblocks, /ub) - /updateblocks <radius>,

    /updateblocks area <chunkRadius>, /updateblocks cancel. Re-triggers block updates in a radius or chunk area (fixes floating/un-updated blocks). For: staff. Node command.updateblocks, default OP.

  • /push - /push <pos>. Remotely presses the button or flips the lever at a block position.

    Console-usable, so command blocks and redstone can use it. For: player/staff. Node command.push, default ALL.

Server control and broadcasting

  • /serversettings (alias /ss) - /serversettings <setting> modify <value> or

    /serversettings <setting> view, over a large set of server.properties keys (allow-flight, allow-nether, difficulty, pvp, motd, view-distance, spawn-protection, white-list, max-build-height, online-mode, resource-pack, and many more); bare /ss lists them. Reads and edits live server settings. For: owner/console. Node command.serversettings, default OP.

  • /broadcast - /broadcast <message>. Sends a server-wide message. For: staff. Node

    command.broadcast, default OP.

  • /delayedaction - /delayedaction <time> <command>. Schedules a command to run after a

    readable delay. For: owner/console. Node command.delayedaction, default OP.

  • /afk - /afk (toggle your AFK state); admin: /afk timeout player <player> <seconds>,

    /afk timeout group <group> <seconds>, /afk autokick player <player> <true|false>, /afk autokick group <group> <true|false>. Announce needs su.commands.afk.announce (ALL); the auto-kick timeout property is su.commands.afk.autotime (default 480) and auto-kick toggle su.commands.afk.autokick (default NONE); warmup su.commands.afk.warmup (default 10). For: player (self), staff (config). Node command.afk, default ALL.

  • /bubble - /bubble (toggle), /bubble on, /bubble off. Puts a protection bubble around

    you (blocks use/place/break/interact via the command_bubble group) so you cannot be griefed while building. For: staff. Node command.bubble, default OP.

DMZ progression, races and events

  • /sagadifficulty - /sagadifficulty <easy|normal|hard> (self),

    /sagadifficulty <player> <difficulty>. Overrides a player's DMZ saga difficulty, bypassing DMZ's one-time choice latch. Targeting others needs su.commands.sagadifficulty.others (OP). For: staff. Node command.sagadifficulty, default OP.

  • /rgreset (alias /sureset) - /rgreset <player>. Resets an online player's SU economy

    balance to the starting balance, clears their banked Z-Souls and clears tournament titles (cross-mod parts no-op if the addon is absent). For: owner/console. Node command.rgreset, default OP.

  • /rggrave (alias /sugrave) - /rggrave cleannames, /rggrave listballs [page],

    /rggrave listballs all [page], /rggrave removeball <dimension> <pos> [confirm]. Manages dragon ball totems/graves in the world. For: staff. Node command.rggrave, default OP.

  • /wishtracking - /wishtracking status, /wishtracking reset, /wishtracking trigger,

    /wishtracking arm. Diagnostics and manual control of the dragon ball wish-tracking cinematic subsystem. For: owner/console. Node command.wishtracking, default OP.

  • /raceunlock - /raceunlock grant <player> <unlock>, /raceunlock revoke <player> <unlock>,

    /raceunlock query <player> [unlock], where <unlock> is shadow_dragon, omega_shenron or shadow_dragon_form. Grants, revokes or queries the shadow dragon race and form unlocks (durable per-UUID, survives a DMZ character reset, works offline). Gated by su.raceunlock.admin (OP). For: owner/console. Node command.raceunlock, default OP.

  • /shadowdragonform - /shadowdragonform grant [player], /shadowdragonform revoke [player].

    Grants or revokes the shadow dragon (Omega Shenron) transformation by hand, matching what the corrupted-ball endgame grants. Gated by su.shadowdragonform.admin (OP). For: owner/console. Node command.shadowdragonform, default OP.

  • /character (aliases /characters, /char) - /character (GUI), /character list,

    /character gui, /character switch <slot>, /character new [name], /character rename <slot> <name>, /character delete <slot>. Manages a player's character slots. Registered only when the Character Slots feature is enabled (belongs to that feature). For: player. Node command.character, default ALL.

  • /prestige - /prestige (GUI); admin: /prestige npc [type] [name],

    /prestige delete [all], /prestige forceall [level], /prestige kit set|clear|list ..., /prestige questgate set|clear|list ..., plus per-level colour subcommands. Opens the prestige UI and administers the prestige system. Admin subcommands need <prestige>.admin (OP). Registered only when the Prestige feature is enabled (belongs to that feature). For: player (GUI), staff (admin). Node command.prestige, default ALL.

Admin.Jail

What it does

Named jails and jailing. Staff define one or more jail points, then confine a player for a set time or indefinitely. A jailed player is teleported in, kept within a radius each tick, auto-released when the sentence expires, and (by default) blocked from breaking/placing/interacting/damaging and from any command outside a small allow-list. Jail state persists on the player so it survives logout and death. (@SUModule name Jail; module .../jail/JailModule.java.)

Commands

  • /jail <player> [jail] [time] [reason], default OP, console usable. Jail a player. A single <player> <word> is read as the jail name if it matches one, otherwise as a duration against the default jail (so /jail Bob 30m works). Full forms: <player>, <player> <jail>, <player> <jail> <time> [reason], <player> <time> [reason].
  • /setjail <name> (aliases /deljail, /jails), default OP, player-only:
    • <name>: create a jail at your position.
    • list: list jails.
    • delete <name>: delete a jail.
  • /unjail <player>, default OP, console usable. Release a player.

Permission nodes

  • su.jail (OP): allow jailing.
  • su.jail.unjail (OP): allow releasing.
  • su.jail.set (OP): allow creating/deleting jails.
  • su.jail.exempt (NONE): a player with this can never be jailed. Nobody has it by default.

Config options

File: <gamedir>/ShuruisUtilities/Jail.toml, section [General]. | Key | Default | Effect | |---|---|---| | containmentRadius | 12.0 | How far (blocks) a jailed player may move before being teleported back. | | defaultJail | "" (blank = first jail defined) | Jail used by /jail when no jail name is given. | | blockInteractions | true | Block jailed players from breaking/placing, interacting and dealing any damage. | | restrictCommands | true | Block jailed players from commands outside the allow-list. | | allowedCommands | (a small list) | Root command names (lower-case) a jailed player may still use. |

Gotchas

  • su.jail.exempt is a NONE node: it protects a player from being jailed only once you explicitly grant it.
  • The duration/jail-name ambiguity is resolved by insertion order; a single unknown word after the player is treated as a duration against the default jail.

Admin.BanItem

What it does

Ban specific items server-wide. Staff hold an item and run /banitem to ban it; banned items cannot be used, placed or picked up, and are swept out of the inventories of players who lack the bypass. The ban list persists to <gamedir>/ShuruisUtilities/banned_items.json. (@SUModule name BanItem; module .../banitem/ModuleBanItem.java.)

Commands

  • /banitem, default OP, player-only:
    • (bare): ban the item currently held.
    • list: list banned items.
    • unban: unban the held item.

Permission nodes

  • su.banitem.bypass (OP): exempt from banned-item enforcement and inventory sweeps.

Config options

None (a toml). Ban list is JSON at <gamedir>/ShuruisUtilities/banned_items.json.

Gotchas

  • Bypass is OP by default; opped players are not swept and can still use banned items.

Admin.Staff

What it does

Staff shifts (a clock) and a task board. Staff clock in/out (driven by login/logout too), see who is on shift, and work a board of tasks assigned per staff role: accept, drop, complete, submit for review; reviewers approve or deny. Owners/admins add and remove staff roles and tasks. Reach for it to run a moderation rota and track work. (@SUModule name Staff; module .../staff/ModuleStaff.java.)

Commands

  • /clockin, default ALL, player-only. Toggle your own shift (clock in if out, out if in).
  • /staff, default ALL, console usable:
    • status [player]: your shift status (or another player's).
    • clockin / clockout: clock in/out.
    • list: who is on shift.
    • tasks: your task board.
    • accept <task> / drop <task> / complete <task>: work a task.
    • review: the review queue (reviewers).
    • approve <task> / deny <task> <reason>: review a submitted task.
    • addtask <roles> <text> / deltask <task>: create/delete a task (admin).
    • add <player> <role> / remove <player>: manage the staff roster (admin).

Permission nodes

  • su.staff.clock (NONE): who may clock in as staff. Nobody by default; grant to your staff rank.
  • su.staff.admin (OP): add/remove staff and tasks.
  • su.staff.review (OP): approve/deny submitted tasks.

Config options

None. (Roster and tasks are persisted data, not a toml.)

Gotchas

  • The staff ROSTER and the permission GROUP are deliberately separate: being on the roster is not the same as holding staff permissions.
  • su.staff.clock is NONE, so no one can clock in until it is granted to a rank.

Admin.PerfTools

What it does

Performance tooling for operators: a memory watchdog that warns ops when server memory is high, and two read-out commands (server performance snapshot, and a chunk-loader listing by player or mod). Reach for it when the server is lagging or you suspect a mod/player is force-loading chunks. (@SUModule name Perftools; module .../perftools/PerfToolsModule.java.)

Commands

  • /perfstats, default OP, console usable. Server performance snapshot.
  • /chunkloaderlist, default OP, player-only:
    • (bare): all chunk loaders.
    • player <player>: a player's chunk loaders.
    • modname <modname>: a mod's chunk loaders.

Permission nodes

  • su.core.memUsageMsg (OP): receive the high-memory warning (registered only when the watchdog is enabled).

Config options

File: <gamedir>/ShuruisUtilities/Perftools.toml, section [core] (SU core category). | Key | Default | Range | Effect | |---|---|---|---| | warnHighMemUsage | true | bool | Warn ops when high memory is detected. | | percentageWarn | 90 | 1..100 | Memory percentage at which to warn. | | checkInterval | 5 | 1..60 | Minutes between memory checks. |

Gotchas

  • The three keys are written under a [core] section (SUConfig core category) inside Perftools.toml, not a [Perftools] section.
  • PerfTools needs the Ragnarok Key: without it the commands and the watchdog do not exist. The memory warning permission is registered only if warnHighMemUsage is true, so if you disable the warn key the node never appears.

Admin.WorldBorder

What it does

Per-world (per-dimension) borders with configurable centre, shape (box or ellipse) and size, plus a stack of border EFFECTS applied by how far a player is past the edge (run a command, deal damage, kick, knock back, message, apply a potion, or smite). Reach for it to fence a dimension and punish/return players who leave it. (@SUModule name WorldBorder; module .../worldborder/ModuleWorldBorder.java.)

Commands

  • /worldborder (alias /wb), default OP, player-only. All subcommands take <world> (a dimension) first:
    • <world> info: border status.
    • <world> enable / disable.
    • <world> define: define the border from context.
    • <world> center info / center set <location>.
    • <world> shape info / shape set box / shape set ellipse.
    • <world> size info / size set radius <radius> / size set XandZ <x-radius> <z-radius>.
    • <world> effect info / effect list / effect remove <index>.
    • <world> effect add <TriggerDistance> command <interval> <command>.
    • <world> effect add <TriggerDistance> damage <timeout> <damage>.
    • <world> effect add <TriggerDistance> kick <timeout>.
    • <world> effect add <TriggerDistance> knockback.
    • <world> effect add <TriggerDistance> message <interval> <message>.
    • <world> effect add <TriggerDistance> potion <interval> <effect> <seconds> <amplifier>.
    • <world> effect add <TriggerDistance> smite <interval>.
    • help.

Permission nodes

  • su.worldborder.admin (OP): manage borders.
  • su.worldborder.bypass (NONE): ignore the border. Nobody by default.

Config options

None (a toml). Borders persist through the SU DataManager.

Gotchas

  • su.worldborder.bypass is a NONE node: grant it to let staff cross freely; it is off for everyone by default including ops.
  • Effects are indexed; remove one with effect remove <index> after checking effect list.

Admin.Multiworld

What it does

Create and manage extra worlds (dimensions) at runtime: make a new world from a preset or a fully custom generator, import an existing world folder (as void or terrain), list available generators/biome-providers/dimension-types, teleport, and delete. Reach for it to add a survival world, a creative flat, a minigame dimension, etc. (@SUModule name MultiworldV2; module .../multiworld/v2/ModuleMultiworldV2.java.)

Commands

  • /mw, default OP, console usable:
    • list CurrentMultiworlds | AvailableDimensionSettings | AvailableBiomeProviders | AvailableChunkGenerators | AvailableDimensionTypes.
    • info <world>.
    • help.
    • import <folder> <worldName> [void|terrain] (defaults to void).
    • create <name> presets Overworld|Nether|End|Superflat|FloatingIslands|Amplified|LargeBiomes.
    • create <name> custom <chunkGenerator> <biomeProvider> <dimensionType> <dimensionSettings> [seed] [generatorOptions].
    • delete <world>.
  • /mwtp <target> <dim> <pos>, default OP, console usable. Teleport a player to a dimension at a position.

Permission nodes

  • su.multiworld.manage (OP): create/manage worlds.
  • su.multiworld.delete (OP): delete worlds.
  • su.multiworld.list (ALL): list worlds.
  • su.multiworld.teleport (PERM_TELEPORT is defined; registration not confirmed).

Config options

File: <gamedir>/ShuruisUtilities/MultiworldV2.toml, section [General]. | Key | Default | Effect | |---|---|---| | test | false | A test value; no operator-facing effect. |

Gotchas

  • The primary command is /mw and teleport is /mwtp (the catalog label "Multiworld" and the class name differ from the command names).
  • deleting a world is destructive; su.multiworld.delete is a separate node from manage.

Admin.UpdateBlocks

What it does

The /updateblocks sweep: force block-state/shape updates over an area, used after bulk edits (WorldEdit, world imports, chunk surgery) so blocks re-evaluate their connections and neighbours. It processes a budget of positions per tick so a big radius does not freeze the server. (@SUModule name UpdateBlocks; config .../commands/world/UpdateBlocksConfig.java; command .../commands/world/CommandUpdateBlocks.java.)

Commands

  • /updateblocks (aliases /fixblocks, /ub), default OP, player-only:
    • <radius>: sweep a block radius around you (0..MAX_RADIUS).
    • area <chunkRadius>: sweep by chunk radius (0..MAX_CHUNK_RADIUS).
    • cancel: cancel a running sweep.

Permission nodes

None registered specifically; access is the command's default OP level.

Config options

File: <gamedir>/ShuruisUtilities/UpdateBlocks.toml, section [UpdateBlocks]. | Key | Default | Range | Effect | |---|---|---|---| | blocksPerTick | 8192 | 256..1000000 | Block positions processed per tick before the sweep yields. | | maxRadius | CommandUpdateBlocks.MAX_RADIUS | 0..MAX_RADIUS | Upper cap on the radius a player may pass. |

Gotchas

  • The command is registered by the general Commands module's registration pass, but its config and module identity are the separate UpdateBlocks module. Both the Admin.Commands and Admin.UpdateBlocks switchboard keys are relevant.
  • Only setBlock with the shape-update flag actually re-runs shape updates; this is the tool that does it safely in batches.

Admin.WorldEdit

What it does

The WorldEdit selection integration (WEIntegrationTools). It hooks SU into WorldEdit's own selection so arena and dungeon room bounds (and region/border definitions) can be picked with a WorldEdit selection. It adds no commands of its own; you use WorldEdit's commands to make the selection, and SU reads it. (@SUModule name WEIntegrationTools; class .../compat/worldedit/WEIntegration.java, handler WEIntegrationHandler.java.)

Commands

None (SU-side). WorldEdit provides its own selection commands.

Permission nodes

None (SU-side).

Config options

None.

Gotchas

  • This module only loads if WorldEdit Forge is installed AND a modern WorldEdit is present (it probes com.sk89q.worldedit.forge.ForgePermissionsProvider); otherwise it unregisters itself and logs an error. Presence of the mod is not enough, the class probe must pass.
  • A developer override system property shuruisutilities.developermode.we=true force-disables it. For devs only.
  • This is the piece other modules use to pick arena/room/region bounds; it is public (part of the public set) because those bounds are picked with it.

Shard.CommandForwarding

What it does

On a multi-server (shard) network, this lets a player-targeting command typed on one shard act on a player who is actually online on ANOTHER shard. Example: a moderator on shard A types /smite Bob, but Bob is on shard B; the command is sent to B, rebuilt from B's own dispatcher, re-checked against the sender's OWN permissions on B (never run as console), executed there, and the result returned to the sender. Off, such a command just fails locally with "no player found" and staff must connect to Bob's shard first. It never runs a raw command string off the wire; it costs reach, not safety. (Class .../shard/ShardCommandForward.java; config .../shard/ShardConfig.java.)

Commands

None of its own. It transparently forwards OTHER commands.

Permission nodes

None of its own. The forwarded command is re-checked against the sender's existing permission nodes on the destination shard.

Config options

This feature is doubly gated and needs BOTH to be on:

  1. The switchboard key Shard.CommandForwarding in config/dmz_ragnarok/modules.cfg (default ON).
  2. forwardPlayerCommands in <gamedir>/ShuruisUtilities/shard.json (default false, ships OFF).

    Relevant shard.json keys (network-scoped operator JSON, hand-parsed at construction, never sent to clients): | Key | Default | Effect | |---|---|---| | forwardPlayerCommands | false | Master enable for cross-shard command forwarding. Ships off; turn on only after launch-testing. | | commandForwardDenyList | ["tp","teleport","tphere","tphereall","tpa","tpahere","tpaccept","tpdeny","tpo","tpohere","tpall","spawn","server","back","home","warp","top","bottom","execute","doas"] | Command roots that must NEVER be forwarded (positional/teleport/routing commands, plus execute/doas which could launder identity). This is a deny list; every OTHER player-targeting command inherits forwarding. |

Gotchas

  • Both the module key and forwardPlayerCommands must be true; either being off stops forwarding.
  • It is off by default because a mistake in how authority is carried would be a privilege escalation; the deny list is the one hand-maintained list and the place to add any command that must never cross.
  • No string is executed from the wire: a forwarded command travels as a validated root token plus argument tokens and is rebuilt from the destination's own dispatcher, so a hand-edited database row cannot smuggle anything through.