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!

Races, forms and NPCs

Custom races and their abilities, transformation chains, sagas and quests, Shenron wishes, and the NPC cast with the editors that build all of it.

← All wiki sections

The SDU tree is the content half of the suite: custom races, forms, sagas, wishes, custom GeckoLib NPCs, and the in-game editors for all of them, plus a batch of gameplay features (waypoints, training dummies, buff tokens, blocks, the hakai ability). It is the only tree the other four addons are allowed to read from, which is why the whole module switchboard (ModuleCatalog / SuiteModules) lives here.

How SDU commands and modules work (read this first)

  • Every SDU gameplay command lives under one shared /rg root (Brigadier merges /rg across

    all five addons). The legacy /sdu root still exists as a hidden alias that redirects onto /rg npc.

  • The entire /rg npc ... tree and /rg edit only register when the Sdu module is on. If

    Sdu = false in modules.cfg, none of these commands exist. (/rg modules is the one exception; see the Sdu section.)

  • All SDU commands are permission level 2 (operator). The npc node and edit node both call

    .requires(source -> source.hasPermission(2)), so every subcommand under them inherits OP. The suite's permission layer (Shurui's Utilities) exposes these as command.rg.* nodes (for example command.rg.edit, command.rg.npc.hakai) so they can be granted to non-ops through the permission system; the raw Minecraft default is OP.

  • Editor content-save packets are gated by SduPerms.canEdit, which is also hasPermissions(2).

    (sdu/src/main/java/net/shurui/dev/sdu/util/SduPerms.java.)

  • Turning a module off in modules.cfg takes effect only after a server restart. The

    switchboard decides at mod construction and at command-registration time, neither of which can be undone mid-run. /rg modules set says so when you use it.

  • Fine-grained SDU keys are enforced two ways: by pulling event handlers off the Forge bus at

    startup (ModuleTeardown, sdu/.../modules/ModuleTeardown.java), and by re-checking the switch inside the server-side packet handler for editors and NPC spawns. Hiding a hub row is never the gate; the server always re-asks.

  • No SDU module is key-gated. The SDU content editors are in the public tier

    (PublicContent), so any server running the mods gets all of this, with or without the Ragnarok Key. The KeyGate class in this tree only answers key presence and gates travel to the private imported worlds (kaiow, namekow), which need the Ragnarok Key.

    Source: sdu/src/main/java/net/shurui/dev/sdu/command/DmzNpcCommand.java, .../event/ForgeEvents.java, .../modules/ModuleTeardown.java, .../network/OpenEditorRequestPacket.java, .../network/SpawnFighterPacket.java.

    Note: DmzNpcCommand's file header comment mentions a /rg npc summon and a sdu:dmz_fighter id, but no summon subcommand is registered in the current code. Custom saga fighters are placed with vanilla /summon dmz_ragnarok:dmz_fighter ... {Definition:"id"} or via the CustomNPCs "Make saga fighter" button.

Sdu

What it does

The master switch for the entire SDU half of the suite. On, you get custom races and their abilities, custom transformation forms, sagas/quests and the quest tracker, Shenron wish sets, the custom GeckoLib NPCs, the editor hub, and every gameplay feature below. Off, all of that goes away: no editors open, the custom races/forms/sagas are not served, and the whole /rg npc command tree declines to register.

Commands

  • /rg edit (OP) - opens the shared editor hub (races, forms, sagas, wishes, NPCs, plus the raid,

    tournament, dungeon and admin sections other addons register into it).

  • /rg npc edit (OP) - same as /rg edit, opens the hub.
  • /rg npc reload (OP) - reloads saga spawn bindings, deferred spawns, talk-NPC bindings and the

    saga-NPC map from disk (after an edit made outside the game).

  • /rg npc givetechnique <targets> <technique> (OP) - grants a DragonMineZ technique (kamehameha,

    galick_gun, ...) to the targets. Silent (not broadcast to other ops), so it works as a quest reward.

  • /rg npc forms verify (OP) - reads every race's form config back the way the game reads it and

    reports what is broken. Also runs at server start.

  • /rg modules and /rg modules list (OP) - lists every switchboard key, whether each is on, and

    whether a parent being off is suppressing it.

  • /rg modules set <key> <true|false> (OP) - writes a switch to modules.cfg; takes effect next

    restart. /rg modules registers unconditionally (even when Sdu is off) so you can always switch things back on in-game.

  • /sdu - hidden legacy alias, redirects to /rg npc.

Permission nodes

command.rg.edit, command.rg.npc.*, command.rg.modules.* - all default OP (level 2). Exact node derivation is handled by Shurui's Utilities' command layer.

Config options

  • config/dmz_ragnarok/modules.cfg (hand-parsed) - the operator switchboard. Contains a line per

    key in ModuleCatalog. Unknown/absent keys default to ON. Dotted keys are a hierarchy: Sdu = false disables every Sdu.* child. Read at mod construction; changes need a restart.

  • config/sdu-common.toml (Forge COMMON config, Config.java). Server-side. Keys and defaults:
    • requireOpToEdit = true - if true, only operators (or the NPC's owner) may open the NPC editor.
    • maxNpcHealth = 1000000000 - upper bound the Options screen offers for an NPC's max health

      (effectively no ceiling; no editor actually clamps to it).

    • enableDmzIntegration = true - scale NPC combat stats/damage through DMZ's ki-stat system.
    • enableAuraStacking = true - render a form's extra aura layers on top of DMZ's aura (safety

      switch to false if stacked auras misbehave).

    • barrierDefaultLevel = 100 - default DMZ level a freshly-placed Level Barrier gates to.
    • chamberRadius = 12 - Gravity Chamber effect radius in blocks when no WorldEdit region is captured.
    • chamberMultiplier = 1.5 - TP-gain multiplier inside a Gravity Chamber.
    • chamberShareFraction = 0.25 - fraction of post-multiplier TP shared to every other player in

      the same chamber (0 disables sharing).

    • chamberGravity = 1.0 - extra gravity applied inside a fresh chamber (1.0 = none); needs DMZ's

      gravity.machineGravityEnabled = true.

    • shadowDummyCooldownSeconds = 90 - per-player cooldown between shadow dummy summons (0 disables).
    • shadowDummyMaxAlivePerParty = 1 - max live shadow dummies per party.
    • partyTpFalloffThreshold = 3 - party sizes at/below this keep full shared TP.
    • partyTpFalloffStepPercent = 20 - percent of shared TP removed per member beyond the threshold.
    • partyTpFalloffFloorPercent = 20 - minimum shared-TP fraction, as a percent, at any party size.
    • allowPrivateWorldsWithoutKey = false - no longer has any effect: travel to the private imported worlds

      (kaiow, namekow) always needs the Ragnarok Key. Kept only so existing config files stay valid. Most of these are also editable live from the in-game Options screen via an op-gated save packet (Config.applyAndSave), which persists back to the toml without a restart.

  • config/sdu-client.toml (Forge CLIENT config, ClientConfig.java). Per-player, never syncs. See

    the Waypoints/Transformations sections for the specific keys; all five are: overShoulderCrosshair = true, firstPersonCrosshair = true, reskinContainers = false, guiSounds = true, alwaysShowExtraFormsTab = false.

  • The per-feature JSON data files under config/sdu/ are documented in their own module sections below.

Items / blocks / entities

The whole SDU content set (see each module below). Nothing extra registered by Sdu itself.

Gotchas

  • Off, the /rg npc tree and /rg edit do not register at all, but the added items/blocks/entities

    stay registered (a disabled module must never orphan world data).

  • /rg modules reports only the operator's switches; a server key can withhold more, and the startup

    log names anything it withheld. The two axes are independent.

  • Namespaces stay dmz_ragnarok (the merged mod id) even though the code tree is sdu.

Sdu.Races

What it does

Custom playable races and their racial abilities, plus the in-game race editor. A race can carry a "racial skill" with configurable behaviour: percentage stat buffs, health/ki/stamina regen, potion effects and incoming-damage resistance, triggered one of several ways (always-on, while below an HP threshold like a Zenkai, for a window after taking a hit or a kill, or on the racial keybind with a cooldown). The editor can also suppress DragonMineZ's own default races/classes so only your custom ones show.

Commands

None of its own. The race editor is reached through /rg edit -> race, gated on Sdu.Races server-side.

Permission nodes

Editor access: hasPermissions(2) (SduPerms.canEdit). No dedicated node beyond the hub.

Config options

  • config/sdu/racial_skills.json - per-race racial-skill behaviour, keyed by DMZ race id. Written by

    the editor. Per-entry fields include trigger (default ALWAYS_ON) and cooldownSeconds (default 30.0) plus stat/regen/effect/resistance bags. Starts empty on a fresh server.

  • config/sdu/suppressed_defaults.json - the list of DMZ default race/class ids to hide. Written by

    the editor.

  • config/sdu/generated_lang.json - generated display-name lang keys for custom races/classes/forms

    (server-authoritative names streamed to clients). Managed automatically.

  • Custom race definitions themselves are DMZ race files under config/dragonminez/races/<race>/

    (DMZ's own format; the editor writes them).

Items / blocks / entities

None directly (races are data).

Gotchas

  • The racial-skill runtime handler (RacialSkillHandler) is pulled off the bus when Sdu.Races is

    off, so racial abilities stop applying, but the races themselves remain selectable.

  • DMZ's typed race config drops SDU's custom auraWidth/auraHeight keys, so per-race aura sizes are

    kept in a separate lookup (RaceAuraConfig, rebuilt from disk at boot) and synced to clients on login.

  • Suppressing defaults strips them from DMZ's in-memory maps before players join; a resync happens on connect.

Sdu.Forms

What it does

Custom transformation forms, form groups and transformation chains, plus the form editors. Adds a per-form combat layer (auto-dodge chance and incoming-damage reduction while transformed), optional extra aura layers rendered on top of DMZ's aura, and the ability to quest-gate which forms a player can buy. Includes server-side helpers for buying "stack" skills (kaioken, ultimate) and for granting every form at once.

Commands (under /rg npc, OP)

  • /rg npc buyskill <skill> - self-buys the next level of a DMZ stack skill (kaioken, ultimate).

    This is the purchase path the DMZ client menu never sends for a stack skill's first level. Self-only (acts on the sender), still requires OP to reach /rg npc.

  • /rg npc forms grantall [targets] - unlocks all DMZ forms and maxes mastery for the targets

    (default the sender), then resyncs. A bare @a fans out across the shard network.

  • /rg npc forms verify - audits every race's form config (also listed under Sdu).

Permission nodes

command.rg.npc.buyskill, command.rg.npc.forms.* - default OP.

Config options

  • config/sdu/form_combat.json - per-form combat tuning (dodge %, damage reduction), keyed by form

    skill name. Written by the form editor. Version 1.

  • config/sdu/form_auras.json - per-form extra aura layers. Written by the editor. Gated at render

    time by enableAuraStacking in sdu-common.toml.

  • config/sdu/form_quest_gates.json - which forms are locked behind which quests (advisory UX in the

    skills menu), keyed by lower-cased form-skill name.

  • config/sdu/form_tombstones.json - deleted custom form-type ids, so their leftover skill entries

    and usage history are scrubbed rather than resurrected.

  • config/dragonminez/forms/... - the custom form definitions themselves live in DMZ's form config

    tree, written by the editor.

Items / blocks / entities

None directly (forms are data).

Gotchas

  • enableAuraStacking = false in sdu-common.toml is a global kill-switch for the extra aura layers.
  • A form with prices: [] or [-1] is silently unreachable (a known DMZ config trap).
  • The startup path re-seeds custom form types from DMZ's live skills config and "heals" stack defaults

    (restores kaioken/ultimate stack entries an older build removed) so DMZ's form purchase menu lists them.

Sdu.Sagas

What it does

Sagas, quests, objectives and side-quests, plus the quest tracker and the saga/side-quest editors. Lets you author story content (talk-to, kill, reach-a-place objectives, timed and repeatable quests) and bind saga steps to NPC spawns. Talking to any living entity whose name matches a configured talk-target completes a TALK_TO objective.

Commands

No dedicated commands. Editors are reached through /rg edit -> saga / sidequest, gated on Sdu.Sagas server-side. /rg npc reload (under Sdu) reloads saga bindings from disk.

Permission nodes

Editor access: hasPermissions(2).

Config options

  • Saga/quest/side-quest content is stored in the world save under

    <world>/dragonminez/{sagas, quests, sidequests}/ (DMZ's own data dirs; the editor writes there).

  • config/sdu/saga_quest_gates.json - quest-gated saga-unlock map (which quest unlocks which saga),

    synced to clients for the quest-tree saga lock.

  • config/sdu/quest_timers.json - per-quest time limits.
  • config/sdu/quest_repeats.json - repeatable-quest configuration.
  • config/sdu/quest_item_consume.json - which quest items are consumed on turn-in.
  • config/dmz_ragnarok/saga_npc_map.json - the saga -> NPC binding map.

    All of these are editor/tooling-managed; they start empty on a fresh server.

Items / blocks / entities

None directly. Saga fighters use the Sdu.Npcs entity.

Gotchas

  • Off, the quest-repeat and quest-timer handlers and the saga spawn-look handler come off the bus, so

    those behaviours stop, but the saga data files remain.

  • Saga/quest data lives in the world folder, not in config/, so it is per-world and travels with the save.

Sdu.Wishes

What it does

Shenron wish sets, the shrine wishes and the wish editors. Adds SDU's own Shenron-shrine blocks and a custom wish flow that is independent of DMZ's built-in dragon-ball wish system, plus a non-interactable Shenron display entity summoned by the shrine.

Commands

No dedicated commands. Wish and shrine editors reached through /rg edit -> wish / shrine, gated on Sdu.Wishes server-side.

Permission nodes

Editor access: hasPermissions(2).

Config options

  • config/sdu/shenron_shrines.json - the custom Shenron-shrine wish configuration (its own wish sets,

    independent of DMZ). Written by the shrine editor. Version 1. Starts empty.

  • Wish content for DMZ's dragon-ball wishes is stored under <world>/dragonminez/wishes/.

Items / blocks / entities

  • Blocks: Blue Shenron Shrine, Gold Shenron Shrine, Green Shenron Shrine, Red Shenron Shrine

    (registry ids shenron_shrine_blue/gold/green/red). Four colour variants of the shrine block.

  • Entity: Shenron (dmz_ragnarok:shenron) - the fully custom, non-interactable Shenron display

    entity summoned by the shrine feature.

Gotchas

  • The shrine wish system is deliberately separate from DMZ's dragon-ball wishes; a wrong wishScreenId

    is a known way to make a custom dragon serve the wrong wish list.

  • Note the standalone "Wish Shrine" block that Shurui's Utilities registers (Content.Shrine) is a

    different thing from these four SDU Shenron shrines.

Sdu.Npcs

What it does

SDU's custom GeckoLib NPCs and their editor, including the ragnarok cast. The core entity is the "DMZ Saga Fighter": a real DMZ-style fighter (true saga AI, DMZ animations, ki-move loadouts) that renders as a configurable custom NPC model. Used as living saga bosses and enemies.

Commands (under /rg npc, OP)

  • /rg npc reload (listed under Sdu) reloads NPC definitions and saga bindings.
  • No dedicated spawn command. A fighter is created either from the CustomNPCs "Make saga fighter"

    button (which sends SpawnFighterPacket, OP + CNPC-present + Sdu.Npcs-on gated) or by summoning the dmz_ragnarok:dmz_fighter entity with a definition.

Permission nodes

Spawn/edit: hasPermissions(2).

Config options

  • config/sdu/npcs/*.json - the custom NPC definitions (model, skin, hair, stats, ki loadout). One

    file per NPC. Managed by the editor; example files ship for reference.

Items / blocks / entities

  • Entity: DMZ Saga Fighter (dmz_ragnarok:dmz_fighter) - the custom GeckoLib fighter, sized

    0.7 x 2.0, MONSTER category.

  • The ragnarok cast (ninjin models) is delivered as server-streamed assets, not bundled in the jar

    (see the workspace asset-delivery system); the model tables list ~386 entries regardless of what a client holds.

Gotchas

  • Reads NBT key SduKiMovesCsv for per-spawn ki-move loadouts (the dungeon advanced spawner writes

    this; a DMZ or CustomNPC entity ignores it). CustomNPC clones keep their loadout as sdu_dmz_ki_moves on the display data instead.

  • The GeckoLib fighter needs the CustomNPCs stack only for the "Make saga fighter" conversion button;

    the entity itself renders without CustomNPCs.

  • SpawnFighterPacket re-checks Sdu.Npcs server-side, so a stale open screen cannot spawn one after

    the operator switched custom NPCs off.

Sdu.Transformations

What it does

The transformation engine that drives custom form changes on NPCs/entities (as opposed to player forms). It swaps an entity's model, stats and attributes when a trigger fires, and applies a combat layer (auto-dodge and damage mitigation) to the transformed entity based on its active form.

Commands

None.

Permission nodes

None.

Config options

None of its own (transform definitions ride the form/NPC data). The client toggle alwaysShowExtraFormsTab = false in sdu-client.toml keeps the transformation wheel's Extra Forms slot visible even when empty.

Items / blocks / entities

None.

Gotchas

  • Off, TransformEngine and TransformCombatHandler come off the bus, so NPC transformations stop.
  • Keyed off the entity's sdu_tf_active NBT, a different data source from the player form-combat

    system's sdu_form_rage, so the two never cross-contaminate.

Sdu.Waypoints

What it does

Waypoints, the compass strip and the on-screen markers. Automatically derives temporary waypoints from your active DMZ quest objectives (biome, coordinate, dimension, interact, kill and structure objectives) so the target shows on screen, and lets admins pin manual named waypoints on players.

Commands (under /rg npc waypoint, OP)

  • /rg npc waypoint set <targets> <name> [pos] [dimension] - add/replace a named manual waypoint per

    target. pos defaults to the target's block position, dimension to its current one. Names are unique per player (case-insensitive), so re-setting a name moves it. Fans out across shards for a bare @a.

  • /rg npc waypoint clear <targets> <name> - remove one named waypoint.
  • /rg npc waypoint clearall <targets> - remove all of a player's manual waypoints.
  • /rg npc waypoint list <targets> - list a player's waypoints.

Permission nodes

command.rg.npc.waypoint.* - default OP.

Config options

  • config/sdu-client.toml client toggles that affect the HUD reticle/markers:

    overShoulderCrosshair = true, firstPersonCrosshair = true. Per-player, client-side only.

  • Manual waypoints are stored in server saved-data (WaypointStore), not a config file.

Items / blocks / entities

None.

Gotchas

  • Manual waypoints (cyan, COLOR_MANUAL) are persisted; quest-derived waypoints (gold, COLOR_QUEST)

    are transient and rebuilt from live quest state each tick.

  • Off, the WaypointTracker handler comes off the bus, so both the auto quest markers and the

    compass strip stop updating.

Sdu.Combat

What it does

SDU's own combat handling: NPC defence and form combat modifiers. Applies DMZ's resistance-mitigation curve to mob victims (DMZ's own curve is player-only, so custom fighters would otherwise take raw damage), and runs the per-player form combat layer (auto-dodge and form damage mitigation on transformed players).

Commands

None.

Permission nodes

None.

Config options

  • Per-form combat numbers come from config/sdu/form_combat.json (see Sdu.Forms).
  • NPC defence is read from the entity's NpcDefense.KEY persistent-data value (written by the NPC

    editor/spawner), not a config file.

Items / blocks / entities

None.

Gotchas

  • Off, both NpcDefenseHandler and FormCombatHandler come off the bus. Custom fighters would then

    take unmitigated damage and player forms lose their dodge/mitigation.

  • FormCombatHandler is registered at LOWEST priority on LivingDamageEvent (not via annotation) so

    it lands after DMZ's own LOWEST armour-reduction rebuild, which would otherwise discard it. This is why it is added by hand in DmzNpc.commonSetup.

Sdu.Hakai

What it does

The hakai (erase) ability: a hidden admin technique (shuruis_hakai) that plays a ~10.4 second erase sequence on a target, freezing it, then disintegrating it. Against a player it permanently bans and kicks them at the erase moment; against any other living entity it kills it.

Commands (under /rg npc hakai, OP)

  • /rg npc hakai - self-grant the hidden shuruis_hakai technique to yourself.
  • /rg npc hakai <targets> - grant it to other players (re-gated per target on hasPermissions(2),

    so a non-op target is refused and not counted).

  • /rg npc hakai revoke <targets> - remove it from players.

Permission nodes

command.rg.npc.hakai.* - default OP. The technique itself is also re-gated on hasPermissions(2) when granted, so a non-op cannot receive or keep it.

Config options

None.

Items / blocks / entities

None (it is a DMZ technique, kept out of givetechnique's suggestions).

Gotchas

  • Erasing a player issues a permanent ban and kick, not just a kill. This is a destructive admin tool.
  • Off, HakaiManager comes off the bus, so any in-progress erase sequences stop driving.

Sdu.Dummies

What it does

Training dummies and their spawn limits. Applies server-side rules to DMZ's shadow/training dummies: a per-player summon cooldown, a cap on live dummies per party, and an anti-farm rule that gives a player in a party no TP for killing a dummy.

Commands

None.

Permission nodes

None.

Config options

In config/sdu-common.toml (see Sdu for the full list):

  • shadowDummyCooldownSeconds = 90 - per-player cooldown between summons (0 disables the rule).
  • shadowDummyMaxAlivePerParty = 1 - max live dummies a party may have out at once.
  • partyTpFalloffThreshold = 3, partyTpFalloffStepPercent = 20, partyTpFalloffFloorPercent

    = 20 - the party shared-TP fall-off (these govern DMZ shared-TP generally, applied around dummy and party kills). Editable live from the Options screen.

Items / blocks / entities

None (uses DMZ's own shadow dummy entity).

Gotchas

  • Off, both ShadowDummySpawnLimitEvents and ShadowDummyTpEvents come off the bus, so dummies spawn

    without limits and party members earn normal TP from them again.

  • The party-kill anti-farm removes the entire TP from a dummy kill for party members, not just DMZ's bonus.
  • Solo players always keep normal dummy TP.

Sdu.Blocks

What it does

SDU's two data-carrying blocks: the Level Barrier and the Gravity Chamber. The Level Barrier is an invisible break-gate that a player cannot mine through until they reach a required DMZ level. The Gravity Chamber is a training block that multiplies TP gain for players inside its area and shares a fraction of that gain with everyone else training in the same chamber.

Commands

None. (The barrier's required level is set by an op right-clicking the placed block.)

Permission nodes

None dedicated; setting a barrier's level is op/creative-gated at the block interaction.

Config options

In config/sdu-common.toml:

  • barrierDefaultLevel = 100 - default required DMZ level a freshly-placed Level Barrier gates to.
  • chamberRadius = 12 - Gravity Chamber effect radius (blocks) when no WorldEdit region is captured.
  • chamberMultiplier = 1.5 - TP-gain multiplier inside a chamber.
  • chamberShareFraction = 0.25 - fraction of post-multiplier TP shared to others in the same

    chamber (0 disables sharing).

  • chamberGravity = 1.0 - extra gravity inside a fresh chamber (1.0 = none); needs DMZ's

    gravity.machineGravityEnabled = true to take effect.

Items / blocks / entities

  • Gravity Chamber (dmz_ragnarok:gravity_chamber) - solid gray block; area TP multiplier + shared pool.
  • Level Barrier (dmz_ragnarok:level_barrier) - invisible red-map block; per-block DMZ-level break

    gate. Does not suffocate or block view (pinned like glass) despite its full collision box.

Gotchas

  • Off, BlockFeatureEvents comes off the bus, so barriers no longer block mining and chambers no

    longer boost TP, but the placed blocks stay.

  • The Gravity Chamber's gravity effect silently does nothing unless the DMZ server config

    gravity.machineGravityEnabled is true.

  • An op can right-click a placed Level Barrier to set its gate to their own current level.

Sdu.Buffs

What it does

Consumable buff tokens. TP Buff Tokens grant a temporary extra-TP-gain buff; Stat Discount Tokens grant a temporary discount on stat purchases. Each token is right-clicked to apply its effect for 30 minutes; multiple tokens of a family stack additively, each keeping its own expiry.

Commands

None.

Permission nodes

None.

Config options

None (the durations and tiers are hard-coded).

Items / blocks / entities

Two families of nine tiers each (10%, 15%, 20%, 25%, 30%, 35%, 40%, 45%, 50%):

  • TP Buff Token (10%..50%) (dmz_ragnarok:tp_buff_token_10 .. _50) - extra TP gain, aqua tint.
  • Stat Discount Token (10%..50%) (dmz_ragnarok:stat_buff_token_10 .. _50) - cheaper stat

    purchases, green-to-gold tint. Both apply for 30 minutes each. Tokens are always foil (glint).

Gotchas

  • Off, TokenBuffEvents comes off the bus so the TP-gain buff stops applying. (The stat discount is

    applied by a separate stat-cost mixin reading the same store; verify both if disabling.)

  • Buff state is persistent and survives relog; the server re-syncs running buffs to the client on login

    so displayed prices match what the server will charge.

Sdu.DragonBalls

What it does

SDU's dragon-ball handling. The sdu-side behaviour is the rescatter: at server-started (after Shurui's Utilities' MultiWorld dimensions are registered), it scatters every configured dragon-ball set into the dimensions DMZ skipped during its own earlier first-scatter (DMZ tends to fill only the first valid dimension of each set and races SU's dimension registration). Idempotent, so it only fills the dimensions DMZ missed.

Commands

None.

Permission nodes

None.

Config options

None in the sdu tree. (Which dimensions a set scatters into is DMZ's own dragon-ball set config.)

Items / blocks / entities

None registered in the sdu tree.

Gotchas

  • The custom dragon-ball sets the catalog description mentions (Black Star, Super, Cerulean) are

    implemented in the shuruisutilities tree, not sdu. In the sdu tree, Sdu.DragonBalls only controls the rescatter handler (DragonBallRescatterHandler).

  • Off, DragonBallRescatterHandler comes off the bus, so sets that DMZ failed to place in

    MultiWorld/late dimensions (e.g. shuruisutilities:smp) will not be scattered there.

Sdu.Cnpc

What it does

CustomNPCs integration: adds a DragonMineZ sub-GUI tab to the CustomNPCs editor and a model bridge. Lets a Custom NPC be given DMZ GeckoLib models and animations, DMZ move sets, an AI level, player/URL skins and a model preset, and lets saga steps spawn CustomNPC clones. Optional: needs the CustomNPCs port (customnpcs) and, for models, the CNPC-Gecko-Addon (cnpcgeckoaddon).

Commands (under /rg npc dmznpc, OP)

  • /rg npc dmznpc model <geo> <anim> [idle] [walk] [attack] [hurt] - feeds DMZ GeckoLib geo/animation

    reslocs onto the nearest Custom NPC within 8 blocks. Requires the CNPC-Gecko-Addon; refuses with a message otherwise. A test hook until the editor tab covers it.

Permission nodes

command.rg.npc.dmznpc.* - default OP.

Config options

  • config/sdu/npcs/*.json shares the NPC definition store with Sdu.Npcs.
  • CNPC preview/model bridge data is stored per-NPC on the CustomNPCs display data

    (sdu_dmz_ki_moves, model persist fields), not a standalone file.

Gotchas

  • This is the single place the customnpcs isModLoaded probe and the model-bridge bus registration

    happen. When Sdu.Cnpc is off, DmzCnpcCompat.init() is never called, so cnpcAvailable() stays false and every downstream CNPC path is quiet, and no optional CustomNPCs class is classloaded.

  • The DMZ tab is hidden in the CustomNPCs creation GUI when Sdu.Cnpc is off

    (GuiCreationEntitiesTabMixin).

  • Both optional mods can be absent: SDU still loads and the CNPC features disable themselves with one

    warning. The model command needs the Gecko addon specifically, not just the CNPC port.