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!

Added content

Senzu beans, saibaman pets, the shrine, hoverbikes, prestige, character slots, and the two switches that change DragonMineZ itself.

← All wiki sections

This page covers the suite's own added content, the two switches that change DragonMineZ itself, and the diagnostic tooling.

Things that are true of everything on this page:

  • The section names (Content.*) are the names these modules had in the old operator switchboard

    (config/dmz_ragnarok/modules.cfg). That file is no longer read: a module runs when its jar is installed and, if it is private, when the Ragnarok Key is present.

  • A private command is not registered at all on a server without the Ragnarok Key; adding or removing the key

    takes effect on the next server restart.

  • SU config files are TOML at <gamedir>/ShuruisUtilities/<Name>.toml, NOT under config/. The file name is

    the config's registered name (SUModConfig appends .toml and redirects the path to the SU directory).

  • There is one key, the Ragnarok Key (dmz_ragnarok_key), and no tiers: a feature is public (any server running

    the mods) or needs the Ragnarok Key. Gating notes are given per module where they matter.

  • Permission default levels: ALL = everyone, OP = operators only, NONE = nobody by default.

Content

What it does

The umbrella switch for all of the suite's own added content. It is a plain group parent (not a module of its own): turning Content off in the switchboard disables every Content.* child at once (senzu, saibaman pets, shrine, hoverbikes, space pod, nimbus, form cosmetics, NPC regions, sparring, TP boost, mini clone, prestige, character slots, CustomNPCs economy).

Commands

None. (Content itself registers nothing; see each child module.)

Permission nodes

None of its own.

Config options

None of its own.

Items / blocks / entities

None of its own; see each child module.

Gotchas

  • It is an aggregate switch only. There is no @SUModule named "Content"; it exists purely so an operator can

    flip the whole content half in one line. Leave it ON unless you want to strip all added content.

Content.Senzu

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/senzu/ (module SenzuModule.java).

What it does

Adds the senzu-bean farming system: growable bean pots, a range of restorative beans (senzu, health, ki, stamina, plus cracked/burnt/death variants), the golden "death totem" bean that revives you on a lethal blow, a senzu bean bag, and Korin's weekly senzu handout.

Commands

None. (Beans are used by right-click; the bag has keybinds, see below.)

Permission nodes

None registered by this module.

Config options

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

| Key | Default | Effect | |---|---|---| | growthTicks | 287000 | Server ticks for a bean plant to grow stage 0 to stage 3 (split evenly over 3 advances). ~10x vanilla wheat, roughly 4 real hours. Range 20 to 20000000. | | crackedChance | 0.25 | Chance (0.0 to 1.0) a normal pot harvest yields the weaker cracked variant instead of the full bean. Burnt and Death pots ignore it. | | goldenCooldownMinutes | 30 | Minutes between golden-bean death saves, per player. While on cooldown a carried golden bean does not fire. 0 = no cooldown. Range 0 to 1440. | | cooldownTicks | 200 | Shared reuse cooldown in ticks (20/sec) for click-to-eat beans; eating any bean locks out every bean kind. Default 200 = 10s. 0 = none. Range 0 to 72000. | | korinBeanCount | 4 | How many bean_senzu Korin hands a player per claim. Range 1 to 64. | | korinCooldownDays | 7 | Real-life days between Korin handouts per player (wall clock, counts downtime). 0 = a claim every interaction. Range 0 to 365. |

Items / blocks / entities

Registry ids are dmz_ragnarok: namespaced. In-game names from the lang file:

Edible beans: bean_senzu "Senzu Bean", bean_hp "Health Bean", bean_ki "Ki Bean", bean_stamina "Stamina Bean", bean_cracked "Cracked Senzu Bean", bean_cracked_hp "Cracked Health Bean", bean_cracked_ki "Cracked Ki Bean", bean_cracked_stamina "Cracked Stamina Bean", bean_burnt "Burnt Bean", bean_death "Death Bean", bean_cracked_death "Cracked Death Bean".

Non-edible totem beans: bean_golden "Golden Bean", bean_cracked_golden "Cracked Golden Bean".

Seeds: seed_senzu "Senzu Bean Seed", seed_hp "Health Bean Seed", seed_ki "Ki Bean Seed", seed_stamina "Stamina Bean Seed", seed_golden "Golden Bean Seed", seed_burnt "Burnt Bean Seed", seed_death "Death Bean Seed".

Blocks (pots): bean_pot "Bean Pot" (blank), plus typed pots bean_pot_senzu "Senzu Bean Pot", bean_pot_hp, bean_pot_ki, bean_pot_stamina, bean_pot_golden, bean_pot_burnt, bean_pot_death, bean_pot_cracked.

Bag: senzubag "Senzu Bean Bag" (SenzuBagItem) with a menu; keybinds "Open bean bag" and "Pull a bean from the bag".

Gotchas

  • The golden bean is a passive death totem: on a lethal blow, if you carry one anywhere in your inventory and

    are off cooldown, the death is cancelled and you are fully restored (fires at HIGHEST priority, so it beats the grave handler). A full golden bean is a guaranteed save; a cracked golden bean is a 75% gamble that still consumes the bean and stamps the cooldown even on a failed roll. Cooldown is stored on persisted NBT (survives relog and death) and measured in game ticks, so a stopped server does not burn it.

  • Pots grow ONLY on their own ticker: bone meal, random ticks and AE2 growth accelerators do nothing.
  • The cooldownTicks knob is shared across ALL bean kinds by design; there is no per-kind pacing.
  • Typed pots only accept their own seed type ("This pot only accepts %s bean seeds").
  • Gating: senzu is PUBLIC. The beans, the senzu bag and the farm work on any server running the mods, with or

    without the Ragnarok Key.

Content.SaibamanPets

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/saibaman/ (module ModuleSaibamanPet.java).

What it does

Adds growable, tamed Saibaman companion pets. You plant a saibaman seed; the longer you charge ki beside the growing plant, the higher the pet's tier (and colour) when it hatches. Pets fight for you and self-destruct in an explosion when near death.

Commands

None. (Seeds are placed and pets managed by interaction; the growth rod is admin-only, see below.)

Permission nodes

None registered by this module.

Config options

File: <gamedir>/ShuruisUtilities/SaibamanPets.toml, section [SaibamanPets]. Also editable in-game from the SU admin GUI ("Saibaman Pets" editor), which writes and re-bakes live onto loaded pets.

| Key | Default | Effect | |---|---|---| | maxHealth | 20.0 | Fallback max health of a tamed pet (used when the owner has no readable DMZ character). Floor 1.0, no ceiling. | | attackDamage | 4.0 | Fallback melee attack damage. Floor 0.0, no ceiling. | | moveSpeed | 0.3 | Movement-speed attribute. Floor 0.0, no ceiling. | | explosionThreshold | 0.2 | Fraction of max health at or below which the pet self-destructs (0.0 to 1.0). | | explosionRadius | 3.0 | Radius (blocks) of the near-death explosion; breaks no blocks. Range 0.0 to 32.0. | | explosionDamage | 6.0 | Peak explosion damage at the centre (falls to 0 at the edge); never harms the owner or the owner's other pets. Floor 0.0, no ceiling. | | maxPetsPerPlayer | 3 | Most live pets one player may have on THIS server (per shard, not network-wide). Growing a new one is refused at the cap. Range 1 to 256. |

Note: a harvested pet actually scales to a PERCENTAGE of its OWNER's live DMZ stats (max health tracks owner max health, melee tracks owner melee), by tier: tier 1 = 50% of the owner, +10% per tier, so tier 6 is about 81%. The tier is set by the FRACTION of the plant's growth spent charging ki beside it (floors 0.0 / 0.20 / 0.40 / 0.60 / 0.80 / 0.95). Those tier percentages and the growth-quality curve are hard-coded design constants, NOT toml knobs; the flat maxHealth/attackDamage above are only the fallback.

Items / blocks / entities

  • saibaman_seed "Saibaman Seed" (planted to grow a pet).
  • saibaman_grow_tool "Saibaman Growth Rod" (admin: right-click a growing plant to finish it instantly).
  • Block saibaman_crop "Saibaman Plant".
  • Entity saibaman_pet "Saibaman". Six tier names shown per colour: Feeble, Scrappy, Sturdy, Fierce, Savage,

    Elite (tiers 1 to 6).

Gotchas

  • maxPetsPerPlayer is per-shard and deliberately NOT synced across the shard network (it is excluded from the

    shard state snapshot); the other six stats DO sync network-wide (last-write-wins).

  • Editing the config or GUI re-bakes onto every loaded pet live, no restart needed.
  • Gating: the seed path is PUBLIC (plant a seed, grow it, get a pet) on any server. The pet config editor and

    admin tuning need the Ragnarok Key.

Content.Shrine

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/shrine/ (module ModuleShrine.java).

What it does

A "place of power" system. Admins define named shrines, each granting a timed buff to one DMZ stat OR a personal TP-gain boost, and bind them to physical world blocks. A player right-clicks a bound block to get the buff, with a per-player per-shrine cooldown.

Commands

/shrine (admin, OP). Player-usable is only "right-click a bound block"; there is no player subcommand.

  • /shrine create <name> create a shrine.
  • /shrine delete <name> delete one.
  • /shrine list list shrines with type/percent/duration/cooldown.
  • /shrine info <name> show one shrine's settings.
  • /shrine settype <name> <STAT|TP> set the shrine type.
  • /shrine setstat <name> <stat> set which DMZ stat a STAT shrine buffs (valid: STR, SKP, RES, STM, VIT, PWR, ENE).
  • /shrine setpercent <name> <percent> set the buff percent (clamped to maxPercent).
  • /shrine setduration <name> <seconds> set buff duration (>= 1).
  • /shrine setcooldown <name> <seconds> set per-player per-shrine cooldown (>= 0).
  • /shrine setname <name> <display...> set the display name (supports & colour codes).
  • /shrine bind <name> bind the block you are looking at to a shrine.
  • /shrine unbind unbind the shrine block you are looking at.

    Console cannot use /shrine (canConsoleUseCommand = false).

Permission nodes

  • su.shrine - ALL - "Use shrines (right-click a bound block)".
  • su.shrine.admin - OP - "Manage shrines (/shrine)".

Config options

File: <gamedir>/ShuruisUtilities/Shrine.toml. (This file is shared with Content.TpBoost.)

Section [Shrine]:

| Key | Default | Effect | |---|---|---| | defaultPercent | 25.0 | Percent boost a newly-created shrine starts with (25.0 = +25%). | | defaultDuration | 300 | Default buff duration in seconds for a new shrine. | | defaultCooldown | 3600 | Default per-player per-shrine cooldown in seconds. | | allowedStats | ["STR","SKP","RES","STM","VIT","PWR","ENE"] | Stat keys a STAT shrine may buff. | | maxPercent | 500.0 | Hard cap on any shrine's percent boost. |

Items / blocks / entities

None. Shrines bind to EXISTING world blocks; the module adds no block or item of its own. Shrine definitions and their bound blocks are stored by ShrineManager; buff timers live on the player's persisted NBT (survive relog and death).

Gotchas

  • Buff timers are owned by SU because DMZ BonusStats have no expiry.
  • The shrine needs the Ragnarok Key: a server without it never gets /shrine in the dispatcher.

Content.Hoverbikes

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/hoverbike/ (module ModuleHoverbikes.java).

What it does

Adds four ridable hoverbikes as Curios "chips": equip a chip, then use the summon keybind to deploy/dismiss the bike. Speeds and sprint boost are configurable.

Commands

None. Uses the keybind "Summon/Dismiss Hoverbike" (key.dmz_ragnarok.core.hoverbike) and a toggle packet.

Permission nodes

None registered by this module.

Config options

File: <gamedir>/ShuruisUtilities/Hoverbikes.toml, section [Hoverbikes]. Also editable in the SU admin GUI.

| Key | Default | Effect | |---|---|---| | speed_1 | 0.35 | Base ground speed of hoverbike 1 (Mk. I), blocks/tick scalar on forward input. Floor 0.0, no ceiling. | | speed_2 | 0.40 | Base ground speed of hoverbike 2 (Mk. II). | | speed_3 | 0.45 | Base ground speed of hoverbike 3 (Mk. III). | | speed_4 | 0.50 | Base ground speed of hoverbike 4 (Mk. IV). | | sprintMultiplier | 1.6 | Speed multiplier while the rider holds sprint. Floor 1.0, no ceiling. | | soundEnabled | true | Play the looping engine sound while a bike is driven. |

Items / blocks / entities

  • hoverbike_1 "Hoverbike Mk. I", hoverbike_2 "Hoverbike Mk. II", hoverbike_3 "Hoverbike Mk. III",

    hoverbike_4 "Hoverbike Mk. IV" - Curios chip items sharing the hoverbike Curios slot.

  • Entity hoverbike "Hoverbike"; Curios identifier hoverbike "Hoverbike".

Gotchas

  • The four bikes, the space pod chip and the nimbus chip ALL share the single hoverbike Curios slot and the

    same summon keybind, so exactly one vehicle (bike OR pod OR nimbus) can be worn/deployed at a time.

  • Editing config re-bakes onto every loaded bike live (needed so clients on a dedicated server pick up new

    speeds).

  • Gating: hoverbikes are PUBLIC and work on any server running the mods, like the space pod and the nimbus

    (see below).

Content.SpacePod

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/spacepod/ (PodChipItem.java).

What it does

Adds a Curios chip that summons DragonMineZ's own space pod vehicle. Split out of Content.Hoverbikes on 2026-08-30 into its own switch.

Commands

None. Uses the shared hoverbike summon keybind and toggle packet.

Permission nodes

None.

Config options

None of its own.

Items / blocks / entities

  • space_pod_chip "Space Pod Chip" - a Curios chip (no cosmetic variants). Right-click auto-equips into the

    hoverbike slot.

Gotchas

  • Shares the hoverbike Curios slot and summon keybind with the hoverbikes and the nimbus: only one vehicle at

    a time.

  • The chip's use() (and the toggle packet's pod branch) is gated on BOTH PublicContent.FEATURE_SPACE_POD

    AND SuiteModules.on("Content.SpacePod"). If the switch is off the chip equips but never summons.

  • Gating: the pod IS public (available with no key), like hoverbikes. Content.SpacePod is a plain

    switchboard entry (not an @SUModule); its runtime sites read it by key.

Content.Nimbus

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/nimbus/ (NimbusChipItem.java).

What it does

Adds a Curios chip that summons DragonMineZ's flying nimbus (the black nimbus for an evil alignment). Split out of Content.Hoverbikes on 2026-08-30 into its own switch.

Commands

None. Uses the shared hoverbike summon keybind and toggle packet.

Permission nodes

None.

Config options

None of its own.

Items / blocks / entities

  • nimbus_chip "Nimbus Chip" - a single Curios chip (no cosmetic variants). Which nimbus ENTITY spawns (flying

    vs black) is decided at summon time from the player's DMZ alignment, not from the chip.

Gotchas

  • Shares the hoverbike Curios slot and summon keybind with the hoverbikes and the space pod: only one vehicle

    at a time.

  • Gated on BOTH PublicContent.FEATURE_NIMBUS AND SuiteModules.on("Content.Nimbus"); off = equips but never

    summons.

  • Gating: the nimbus IS public. Content.Nimbus is a plain switchboard entry (not an @SUModule).

Content.FormCosmetics

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/cosmetics/form/ (module ModuleFormCosmetic.java).

What it does

A Patreon supporter cosmetic: it lets an entitled player override how one of their DMZ forms looks (and the aura cosmetic), styling that is synced so everyone renders it the same.

Commands

None. The module is only a login hook (ModuleFormCosmetic.onLogin); editing is done through the in-game form appearance GUI, which sends the choice to FormCosmeticManager.

Permission nodes

None. Entitlement is decided server-side through PatreonAPI.hasReward(uuid, REWARD_FORM_COSMETIC), never a client claim or a permission node.

Config options

None.

Items / blocks / entities

None.

Gotchas

  • Lapse policy: a stored override is kept forever (so it returns if the player resubscribes) but is only put on

    the wire while the player is CURRENTLY entitled. A lapsed supporter can no longer edit (save is refused) and their styling stops rendering for everyone until they resubscribe.

  • Gating: form cosmetics are PUBLIC on any server, but the actual perk follows the supporter's active Patreon

    tier as above, so being "public" means it is not key-locked, not that everyone gets the cosmetic.

Content.NpcRegions

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/npcregion/ (module ModuleNpcRegion.java).

What it does

Admin tool: define box regions in the world in which custom NPCs spawn (populations, drops, aggro behaviour). Regions are usually drawn by shift-dragging on Xaero's world map, but every action is also a command.

Commands

/npcregion (admin, OP). Cannot be used from console.

  • /npcregion define <name> define a region from your current WorldEdit//pos1+/pos2 selection.
  • /npcregion define <name> <x1> <z1> <x2> <z2> define by explicit XZ (full world height).
  • /npcregion create <x1> <z1> <x2> <z2> create with an auto name (npcregion1, npcregion2, ...); used by the map drag.
  • /npcregion addbox <name> <x1> <z1> <x2> <z2> add another box to an existing region.
  • /npcregion removebox <name> <index> delete one box (1-based); refuses if only one box remains.
  • /npcregion remove <name> delete a region.
  • /npcregion rename <name> <newname> rename a region.
  • /npcregion list list region names.
  • /npcregion info <name> show a region's dimension, volume, boxes and NPC configs.
  • /npcregion tp <name> teleport to a region.
  • /npcregion edit <name> open the region editor GUI.

Permission nodes

  • su.npcregion.admin - OP - "Manage NPC regions (/npcregion, editor saves, map outlines)".
  • su.npcregion.create - OP - "Create new NPC regions (map drag / define / create)". Checked separately

    from .admin so a server can grant edit-existing without grant-new.

  • su.gui.npcregions - OP - "Open the NPC Regions editor GUI".
  • (su.npcregion is the parent description node.)

Config options

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

| Key | Default | Effect | |---|---|---| | NpcRegionAutoAggroBpFraction | 0.10 | How far (either way) a player's DMZ battle power may be from a hostile region NPC's own and still be attacked on sight, as a fraction (0.10 = a +/-10% band). A weaker player questing nearby or one who far outclasses the NPC is left alone. Never affects retaliation. 0 = only an exact BP match engages; 1 = engage every player in range (old behaviour). Range 0.0 to 1.0. |

Items / blocks / entities

None of its own. Region NPCs are spawned from the DMZ/CustomNPCs entity types the region config points at.

Gotchas

  • Region drawing goes through Xaero's world map (shift-drag) for most operators; the commands are the fallback.
  • Renaming a region repoints a live airdrop chest's owning-region pointer, so airdrop bindings survive a rename.
  • Gating: NPC regions need the Ragnarok Key.

Content.Sparring

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/sparring/ (module ModuleSparring.java).

What it does

A consensual, non-lethal training bout between two guild OR party members. Damage is capped/non-lethal, and the spar awards DMZ Training Points scaled by how long and hard it was fought and how close the two are in power, so it is a group alternative to DMZ's solo training minigames.

Commands

/spar (player, ALL). Cannot be used from console.

  • /spar <player> send a spar invite.
  • /spar accept accept a pending invite.
  • /spar deny deny a pending invite.
  • /spar cancel clear your invite, or forfeit the spar you are in.

Permission nodes

  • su.spar.use - ALL - "Start and accept spars".
  • su.gui.sparringsettings - OP - "Edit the sparring settings".
  • (su.spar is the parent description node.)

Config options

File: <gamedir>/ShuruisUtilities/sparring/config.json (this is a JSON via the SU DataManager, NOT a TOML), edited in-game from the sparring settings GUI. Defaults from SparConfig.java:

| Key | Default | Effect | |---|---|---| | enabled | true | Master switch for the feature. | | allowGuildSpar | true | Allow spars between two members of the same guild. | | allowPartySpar | true | Allow spars between two members of the same DMZ party. | | requireGuildBaseForGuildSpar | true | A guild spar may only start while both fighters stand in a chunk claimed by their shared guild. Party spars never require a base. | | maxSeparationBlocks | 64.0 | Max blocks the fighters may drift apart before the spar ends as a draw (no TP). Leaving the dimension ends it the same way. | | inviteExpireSeconds | 30 | Seconds a pending invite stays open. | | cooldownSeconds | 600 | Per-player cooldown before starting another spar (default 10 min). | | idleTimeoutSeconds | 20 | No blow landed for this many seconds ends the spar as a draw (no TP). | | maxDurationSeconds | 300 | Hard cap on a single spar's length; on reaching it, draw (no TP). | | blockHealingItems | true | Block healing items for both fighters during a spar. | | blockAllFood | false | Block ALL edible items, not just healing ones. | | extraBlockedHealingItemIds | ["dragonminez:senzu_bean","minecraft:golden_apple","minecraft:enchanted_golden_apple"] | Extra item ids blocked during a spar (on top of SU's own healing beans). | | tpPointsPerHealthBar | 3.0 | "Training points" per full bar of damage dealt (relative to opponent max health). | | tpPointsPerMinute | 2.0 | Training points per minute the spar lasts. | | winnerTpTransferPercent | 25.0 | Winner takes this percent (0 to 100) of the loser's earned TP (zero-sum transfer). 0 disables the transfer. | | perSparPointCap | 40.0 | Cap on effort points a single spar can earn. | | globalTpMultiplier | 1.0 | Global multiplier on every spar payout. | | closenessExponent | 2.0 | Power-closeness curve exponent (higher punishes mismatches harder). Uses BASE battle power. | | minClosenessRatio | 0.34 | If the weaker fighter's base BP is below this fraction of the stronger's, the spar pays ZERO (anti-farm floor, ~3:1 gap). | | scaleByProgression | true | Convert points to TP with DMZ's own progression curve so the reward tracks growth. | | rewardBaseCoefficient | 3.4 | DMZ reward coefficient (matches DMZ training.json). | | rewardCostExponent | 0.6 | DMZ reward cost exponent (matches DMZ training.json). | | flatTpPerPoint | 5000 | Flat TP per reward point when scaleByProgression is off. |

Items / blocks / entities

None.

Gotchas

  • Its config is JSON under sparring/, not a TOML in the SU root, so it is the exception to the "SU config is

    TOML" rule for this group.

  • A spar only starts between two members of the same guild OR the same DMZ party.
  • Gating: sparring needs the Ragnarok Key.

Content.TpBoost

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/tpboost/ (module ModuleTpBoost.java).

What it does

Lets an admin start a server-wide DMZ Training-Point gain boost for a set time (an "XP weekend" style event switch). It stacks with prestige and permission TP bonuses.

Commands

/tpboost (admin, OP). Usable from console.

  • /tpboost <percent> <seconds> start a +percent% global TP boost for seconds (clamped to config caps; broadcasts).
  • /tpboost off end the current boost immediately (broadcasts).
  • /tpboost status show the active boost's percent and remaining time.

Permission nodes

  • su.tpboost.admin - OP - "Manage the global TP boost (/tpboost)".
  • (su.tpboost is the parent description node.)

Config options

File: <gamedir>/ShuruisUtilities/Shrine.toml, section [Shrine_TpBoost] (the caps live in the shrine config file).

| Key | Default | Effect | |---|---|---| | tpBoostMaxPercent | 1000.0 | Maximum percent /tpboost may set. 0 = uncapped. | | tpBoostMaxDuration | 86400 | Maximum duration in seconds /tpboost may set. 0 = uncapped. |

Items / blocks / entities

None.

Gotchas

  • The boost is global (server-wide), not per player, and is announced to everyone when started/ended.
  • The caps are stored in Shrine.toml, not a TpBoost.toml.
  • Starting/ending re-pushes the TP multiplier to all clients so the DMZ "TP Multiplier" tooltip updates.
  • Gating: TP boosts need the Ragnarok Key.

Content.MiniClone

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/clone/ (MiniClone.java), feature key MiniClone in core/config/Features.java.

What it does

A quest-earned DMZ technique (su_mini_clone) that, when charged and cast, summons miniature clones of the caster to fight alongside them. A full charge spawns one clone; overcharging to ~175% spawns a second. Majin casters get a tinted Buu, bio-androids a tinted Cell Jr., everyone else a green-outlined copy of themselves.

Commands

None. It is a technique cast in DMZ (dispatched via a mixin on DMZ's technique dispatcher), not a command.

Permission nodes

None. This is a Features toggle, not a permission-gated command.

Config options

None. The only operator switch is the switchboard key Content.MiniClone.

Items / blocks / entities

  • Entity mini_clone "Mini Clone". Variants: player copy (green-outlined), Buu (majin), Cell Jr. (bio-android).

Gotchas

  • Recasting replaces existing clones rather than accumulating them.
  • Player-copy clones get a green scoreboard-team outline so nobody mistakes one for the real player; that team

    membership is cleaned up on death (leaving it would leak permanent rows into scoreboard.dat).

  • Tournament characters cannot summon a clone ("You cannot summon a clone as a tournament character").
  • Gating: the mini clone technique is PUBLIC (mini-clone in PUBLIC_FEATURES) and can be cast on any server

    running the mods, with or without the Ragnarok Key.

Content.Prestige

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/prestige/, feature key Prestige in core/config/Features.java. Kit gating in shuruisutilities/src/main/java/net/shurui/shuruisutilities/commands/item/CommandKit.java.

What it does

Lets a maxed character reset for a permanent reward. At a prestige NPC (or /prestige), a character with all six DMZ stats maxed can prestige: its DMZ progress (stats, skills/abilities, mastery, techniques, bonus stats, quest data, dynamic growth) and beyond-cap Z-Soul progress are wiped, and each prestige level grants permanent bonuses (a TP-gain bonus, a wider stat cap, an optional name colour, and an optional reward kit). Prestige is per character slot, so each character climbs independently.

Commands

/prestige (player, ALL). Cannot be used from console.

  • /prestige open the prestige screen (needs su.prestige.use).
  • /prestige npc [entityType] [name] (OP) turn a spawned entity into a right-clickable prestige master.
  • /prestige delete (OP) delete the nearest prestige NPC within 8 blocks.
  • /prestige delete all (OP) delete all prestige NPCs in this dimension.
  • /prestige forceall <level> (OP) set a server-wide prestige FLOOR (see gotchas). 0 clears it.
  • /prestige forceall (OP) report the current floor.
  • /prestige kit set <level> <kit> (OP) set which existing kit a prestige level unlocks.
  • /prestige kit clear <level> (OP) clear a level's kit.
  • /prestige kit list (OP) list level-to-kit mappings.
  • /prestige colour set <level> <colour> / color ... (OP) set the name colour a level (and up) paints.
  • /prestige colour clear <level> / color ... (OP) clear a level's colour (it then inherits the highest below it).
  • /prestige colour list / color list (OP) list colours.
  • /prestige questgate set <quest> <level> (OP) require a minimum prestige to do a quest.
  • /prestige questgate clear <quest> (OP) clear a quest gate.
  • /prestige questgate list (OP) list quest gates.

    (Both colour and color spellings are registered.)

Permission nodes

  • su.prestige.use - ALL - "Use the prestige system".
  • su.prestige.admin - OP - "Spawn prestige NPCs" (and all admin subcommands: npc, delete, forceall, kit, colour, questgate).
  • su.tpgain - value-permission, default "0" - "Extra TP gain in percent (stacks with the prestige bonus)".
  • su.prestige.rewarded - value-permission, default "0", registered OP-only/hidden - internal reward

    ledger: the highest prestige level this player was ever rewarded for (do not edit by hand).

    Kit permission nodes (deny-by-default for prestige kits). The per-kit node is su.commands.kit.<kitName> (PERM = su.commands.kit, from CommandKit). The default levels differ by kit:

  • For an ORDINARY kit: the per-kit node su.commands.kit.<name> is never registered, and an unset SU

    permission node resolves as ALLOW, so ordinary kits are claimable by everyone until an operator explicitly denies the node. (This is SU's long-standing allow-by-default behaviour.)

  • For a prestige-reward kit (any kit named by /prestige kit set): it is deny-by-default. A player may

    only /kit <name> it if EITHER they have earned it (crossed the prestige level, recorded as an unlock in their PlayerInfo) OR su.commands.kit.<name> has been explicitly SET to true for them or one of their groups (an explicit grant, su.commands.kit.*, or * all pass). An unset node is NOT enough. So handing a server prestige level 1 no longer leaks every level's kit at prestige 0.

  • Kit admin: su.commands.admin - OP - "Administer kits"; su.commands.kit.bypasscooldown - OP -

    "Bypass kit cooldown".

Config options

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

| Key | Default | Effect | |---|---|---| | PrestigeMaxLevel | 3 | Highest prestige level a character can reach. No ceiling. | | PrestigeTpBonusPercentPerLevel | 10 | Bonus TP gain in percent per prestige level (additive; 10 => +30% at prestige 3). Range 0 to 100000. | | PrestigeCapBonusPercentPerLevel | 25 | Bonus to the DMZ per-stat max cap in percent per prestige level (additive; 25 => +100% = double the max at prestige 4). Range 0 to 100000. |

Per-world settings NOT in the TOML (stored as PrestigeSettings SavedData, seeded from the config defaults the first time the world is created): the level-to-kit map, level colours, quest gates, the prestige floor and its "set at" timestamp, and the NPC model. These are edited only through /prestige and the prestige admin GUI.

Items / blocks / entities

No items or blocks. Prestige NPCs are ordinary entities turned into masters by /prestige npc (any entity type; default model comes from PrestigeSettings).

Gotchas

  • The reward ledger IS the character-slot reward. Each newly-crossed prestige level grants one extra

    character slot: su.prestige.rewarded tracks the highest level ever rewarded, and when any of a player's characters climbs above it, one slot is granted per newly-crossed level and the ledger bumps. The ledger is seeded once on first encounter to the current highest prestige, so existing players get no retroactive slots. Both the ledger and the slot grant live in per-UUID player data (via PrestigeLedger), so they travel with the player across the shard network and survive character deletion.

  • A level UNLOCKS its kit; it does not just hand it over once. Crossing the level records a permanent unlock

    and gives the kit once immediately (starting the kit's own cooldown); afterwards the player re-claims it with /kit <name> whenever that kit's cooldown is up. Prestige keeps no timer of its own.

  • /prestige forceall <level> sets a FLOOR, it does not rewrite playerdata. It reaches everyone online now

    and everyone who had already played before it was set, the first time they next log in; every character it raises is RESET to scratch. It stamps the moment it is set, so players whose first login is after that are left alone. Running it twice does nothing twice. 0 clears it (nobody is demoted).

  • Setting /prestige kit set to a kit that does not exist is refused at the command; a kit deleted later is

    logged as a warning at grant time and skipped.

  • The TP-gain bonus applied to earned TP is prestige (level x PrestigeTpBonusPercentPerLevel) + the

    su.tpgain value-perm.

  • Gating: prestige needs the Ragnarok Key.

Content.CharacterSlots

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/character/, feature key CharacterSlots in core/config/Features.java.

What it does

Lets a player keep multiple separate DMZ characters on one account and switch between them. Each slot has its own DMZ character, inventory, Curios, XP, food and effects; the ender chest is shared.

Commands

/character (aliases /characters, /char) (player, ALL). Cannot be used from console.

  • /character or /character gui open the character selection GUI.
  • /character list list your characters and which is active.
  • /character switch <slot> switch to slot number (1-based).
  • /character new [name] create a new character (optionally named).
  • /character rename <slot> <name> rename a slot.
  • /character delete <slot> delete a slot.

Permission nodes

  • su.character.use - ALL - "Use character slots".
  • su.character.slots - value-permission, default "1" - "How many character slots a player may have".

    Clamped to HARD_CAP = 20. On a network this grant lives in player data (via PrestigeLedger) so it travels with the prestige that earned it.

  • su.character.swap_cooldown - value-permission, default "600" - seconds between character swaps (0 = no cooldown).
  • su.character.combat_lock - value-permission, default "120" - seconds after combat during which swaps are blocked (0 = off).

Config options

No TOML. The tunables are the value-permissions above (defaults set at registration).

Items / blocks / entities

None.

Gotchas

  • Slot count is a value-permission, capped at a hard 20 regardless of the granted value.
  • Extra slots are the standard prestige reward (see Content.Prestige reward ledger).
  • Gating: character slots are PUBLIC and work on any server running the mods. (Note: tournament characters

    are a separate system and were never key-gated.)

Content.CnpcEconomy

Source: shuruisutilities/src/main/java/net/shurui/shuruisutilities/economy/ModuleEconomy.java + compat/customnpcs/ZeniShopHandler.java, compat/customnpcs/TransporterFeeHandler.java. Feature key CustomNpcsEconomy in core/config/Features.java.

What it does

Pays CustomNPCs shops and transporter (fast-travel) fees out of the suite's Zeni economy, so CustomNPCs commerce uses your server currency instead of vanilla emeralds/items.

Commands

None of its own (uses the existing economy and CustomNPCs interfaces).

Permission nodes

  • su.economy.fasttravel_zeni_per_10 - value-permission, default "1" - "Zeni charged per 10 blocks of

    CustomNPCs fast travel (0 = free)". Distance is rounded up per started 10 blocks; too little Zeni cancels the transport.

  • su.economy.shop_shiftclick_stacks - value-permission, default "1" - shift-click stack buying behaviour

    in Zeni shops.

Config options

None (behaviour is driven by the value-permissions above and the CustomNPCs shop setups).

Items / blocks / entities

None.

Gotchas

  • Requires the optional mod customnpcs to be loaded; the handlers only initialise when

    ModList.isLoaded("customnpcs") AND the CustomNpcsEconomy feature is enabled.

  • It also depends on the Economy (Zeni) module; like the rest of the economy it needs the Ragnarok Key. Not

    public.

MutantNerf

Source: four mixins in shuruisutilities/src/main/java/net/shurui/shuruisutilities/core/mixin/dmz/: MixinDmzMutantStats, MixinDmzMutantForms, MixinDmzMutantMastery, MixinDmzMutantAnnounce.

What it does

DEFAULT OFF. When turned on, it strips the mechanical payoff of DragonMineZ's mutant trait so a mutant's numbers are exactly a non-mutant's. Specifically, while on:

  • TP gain: StatsData.getMutantTpMultiplier is forced to 1.0, so a mutant no longer earns training points

    faster (and the client TP tooltip drops its mutant line automatically).

  • Legendary form access: TransformationsHelper.hasMutantLegendaryAccess is forced false (the real skill level

    is required, no one-level shortcut), and the mutant preference in getGroupWithFirstAvailableForm is suppressed so a mutant's auto-picked first form matches a non-mutant's.

  • Form power: applyMutantFormPowerModifier returns the multiplier unchanged, so a legendary form is worth what

    it is worth to a non-mutant.

  • Mastery: PotionEffectHelper.getMutantMasteryMultiplier is forced to 1.0, so a mutant masters forms at the

    normal rate.

    The trait itself is left in place: the mutant lottery still runs, the player is still flagged (isMutant still returns true), and the effect icon still shows. Only the four bonuses above are removed.

Commands

None.

Permission nodes

None.

Config options

None beyond the switchboard key MutantNerf in config/dmz_ragnarok/modules.cfg (default false).

Items / blocks / entities

None.

Gotchas

  • Why an ordinary server leaves it off: with the switch off (the default), DragonMineZ's mutant works

    exactly as DMZ wrote it, which is what someone who installed the suite for its content expects. Only this network wants the nerf; it ADDS a change rather than removing something.

  • The nerf is decided per side per call (SuiteModules.onHere(...)): these mixins apply on client and server,

    and the client asks the set the SERVER synced on login, not its own file, so a client cannot draw a bonus the server does not grant.

  • It is a standalone key (not under a group parent) so it is never toggled off as a side effect of disabling

    some other module.

  • Changing it requires a restart (switchboard is read at construction).

MutantNerf.Joke

What it does

DEFAULT ON (but only ever seen when MutantNerf is on). Replaces the line a newly-created mutant sees. Instead of DMZ's congratulations (message.dragonminez.mutant.gained), the player gets the suite's line message.dmz_ragnarok.mutant.gained: "Congratulations, you are a mutant. Do you feel special?". With this child off, DMZ's own congratulation message is shown again.

Commands

None.

Permission nodes

None.

Config options

None beyond the switchboard key MutantNerf.Joke (default true).

Items / blocks / entities

None.

Gotchas

  • It is a CHILD of MutantNerf. SuiteModules.on walks the ancestor chain, so if MutantNerf is off (the

    default) this line is NEVER shown whatever MutantNerf.Joke says: a joke about an inert trait would be a lie on a server where the trait still pays.

  • The grant still runs in full (the player is flagged, saved-data updated, stats synced); only the sentence

    changes.

HitDiagnostics

Source: sdu/src/main/java/net/shurui/dev/sdu/diagnostics/HitDiagnostics.java (passive log) + shuruisutilities/src/main/java/net/shurui/shuruisutilities/diagnostics/HitCheckCommand.java (/rg hitcheck).

What it does

DEFAULT OFF. An instrument for chasing "I cannot damage this NPC" reports. When on:

  • Passive log: immediately before any gate cancels a player's hit on an entity, it emits one [hitdiag] log

    line naming the exact gate that refused it (protection permission, guild claim, region flag, jail, freeze, spar, dungeon, raid, tournament, or DMZ stun), at most once per attacker per 5 seconds.

  • Active probe: the /rg hitcheck command (below) evaluates every deterministic gate in pipeline order for the

    entity you are looking at and prints an ALLOW/DENY verdict per gate, plus notes for stochastic gates (dodge rolls) it cannot decide from state.

    It is strictly read-only: it changes NOTHING about what any gate decides. Its whole body is wrapped so a bug in it cannot suppress a hit.

Commands

/rg hitcheck - run as a player, looking at the NPC you cannot hit. Prints the per-gate verdict and the first gate to refuse. Registered ONLY while HitDiagnostics is on (a command cannot be removed from the dispatcher after registration, so the switch is checked at RegisterCommandsEvent).

Permission nodes

None registered. Access is gated by the raw operator level: /rg hitcheck requires permission level 2 (op); .requires(src -> src.hasPermission(2)) gates the tab suggestion and the run.

Config options

None beyond the switchboard key HitDiagnostics in config/dmz_ragnarok/modules.cfg (default false).

Items / blocks / entities

None.

Gotchas

  • Why an ordinary server leaves it off: it ADDS log traffic and a probe command that a normal server never

    needs. The intended workflow is: turn it on, RESTART, reproduce the report, read the [hitdiag] line (or run /rg hitcheck), then turn it off again.

  • Turning it on/off needs a restart, because the switch is read at construction and the /rg hitcheck

    registration happens at command-registration time.

  • The probe hangs hitcheck under a /rg root that Brigadier merges with the sdu switchboard's own /rg

    subcommands, so both coexist.

  • The probe's very first gate is a REACH/attribute check: a common "cannot damage" cause is a zeroed or NaN

    forge:entity_reach attribute (a hit that never lands, not a gate that refused it), which is why relogging can clear it. That is not a gate and the passive log stays silent for it, so the probe calls it out explicitly.