Reloading and Updating Changes

From DragonMineZ Wiki

Not every change needs a server restart, but not every change can be picked up live either. This page explains what /dmzreload does, how config values reach the clients, when you still need a restart or a resource reload, and what happens to your files when DragonMineZ itself is updated.

The /dmzreload command

/dmzreload [target] is defined in ReloadCommand.java. It requires the dragonminez.dmz.reload permission node, dragonminez.admin, or operator level 2 (see Permissions). The console can always run it.

/dmzreload            -> reloads everything (same as "all")
/dmzreload all        -> config + story + wishes
/dmzreload config     -> config files, raids, storage, NPC rules and placements
/dmzreload story      -> quests, sagas, side quests and NPC dialogues
/dmzreload wishes     -> dragon wishes only
Target What it reloads
config Every file in config/dragonminez (general, combat, training, skills, techniques, entities, races, forms, stack forms, raids, tournaments), the raid types, the player storage backend (StorageManager.reload()), NPC alignment rules and NPC placements (respawning configured NPCs). Then every config file is resent to every online player, and their skill limits and progression are resynced.
story QuestRegistry.loadAll(server), which re-reads sagas, quests and side quests from the world save (running the quest auto-upgrade described below), and DialogueRegistry.loadAll(server) for NPC dialogues. Then the quest registry is resent to every online player.
wishes WishManager.loadWishes(server), then the wishes are resent to every online player.
all All of the above, in that order.

After a reload, connected players are resynced automatically; they don't need to relog. The console also prints the JSON load report (files that failed to load, files that were auto-upgraded).

In-game config screen

The DragonMineZ entry of the Forge Mods screen has a config screen that lists every file in config/dragonminez and lets you edit them in-game; while you are in a world it also has a reload button that runs /dmzreload. It edits the files of your own game folder, so it is meant for singleplayer and LAN hosts. On a dedicated server, edit the server's files.

Changing one value live with /dmzconfig

/dmzconfig <file> <key> <value> or /dmzconfig <file> <section> <key> <value> (permission: dragonminez.admin or operator level 2) changes a single value, saves the file and resends it to every online player. Examples:

/dmzconfig general-server gameplay tpGainMultiplier 2.0
/dmzconfig general-server worldGen generateDragonBalls false

It only edits plain values (numbers, true/false, text) directly in the file or one section deep; lists and deeper objects must be edited in the file. It writes the file as it is, without the version upgrade described below.

How config reaches the clients

See also: Configuration
  • When a player joins, the server sends them every file under config/dragonminez except the client-only general-user.json and hud_layout.json, one compressed packet per file. While connected, the client uses the server's values for everything those files control (stats, forms, skills, combat values shown in the menus and so on).
  • /dmzreload config and /dmzconfig send the files again to everyone online.
  • The server sends the files as they are on disk. If you edit a file and don't reload, the server keeps running the old values while players who join afterwards receive your edited file. Always run /dmzreload config after editing.
  • On disconnect, the client drops the server's copy and goes back to its own local files.

What /dmzreload covers

  • config/dragonminez/general-server.json, combat.json, training.json, skills.json, techniques.json, entities.json
  • config/dragonminez/races/<race>/character.json, stats.json and forms/*.json, and config/dragonminez/forms/*.json (stack forms)
  • config/dragonminez/raids/*.json and config/dragonminez/tournaments/*.json
  • <world save>/dragonminez/{sagas,quests,sidequests} and <world save>/dragonminez/dialogues (with story or all)
  • <world save>/dragonminez/wishes/*.json (with wishes or all); see Custom Wishes
  • <world save>/dragonminez/npcs/{placements.json,alignment_rules.json} (with config or all); see NPC Placement and Alignment

What /dmzreload does not cover

  • general-user.json and hud_layout.json: these are client files. Players change them from the in-game Configuration screen and the HUD editor; hand edits need a game restart.
  • Resource pack assets (models, textures, animations under assets/dragonminez/...). They need a client resource reload (F3 + T), since they are loaded on the client, not from the server config.
  • Datapack reload listeners: spacepod/*.json (see Space Pod Destinations), weapon_attributes/*.json (see Weapon Attributes) and rhythm_charts/*.json. These follow vanilla datapack rules: use the vanilla /reload or restart the server.
  • External Dragon Ball add-on packs under <game dir>/dragonballs/. They are re-read by the vanilla /reload (ball sets, radars, dragons and the pack's wishes). Run /dmzreload wishes afterwards so the per-world wish files are merged on top of the reloaded pack wishes again.
  • Storage backend switch (NBT ↔ JSON ↔ DATABASE): /dmzreload config saves the online players and restarts the storage backend with the new settings, but switching backends with players online is not something to do casually; prefer doing it with the server empty.
  • New Java code or add-on jars: these always require a restart.

Updating DragonMineZ

When you install a new DMZ version, your files are upgraded automatically on the next start.

Config files

See also: How to JSON

Each config file carries a configVersion (for example "2.2.0"). When it is older than the mod's version, DMZ moves the old file to config/dragonminez/oldBackup/<same path>, writes the new defaults, and merges your values back in: values you never touched take the new default, values you changed are kept, and new keys are added. The details are on How to JSON.

Quests, sagas and side quests

See also: Custom Quests, Sagas

With autoUpdateQuests enabled in General Server Config (the default), the default quest, saga and side-quest files DMZ generated in your world are upgraded the same way when the server starts (and on /dmzreload story):

  • Each generated file carries a "defaultsVersion". Files already at the current version are skipped.
  • A field you never edited takes the new default, so balance fixes reach your world.
  • A field you edited keeps your value. If the new version also changed that field, it is recorded as a conflict, and your value still wins.
  • Keys you added are kept. Lists (objectives, rewards) are only merged entry by entry when their structure still matches; otherwise your whole list is kept and reported as a conflict.
  • Before a file is changed, a copy goes to <world>/dragonminez/oldBackup/<same path>. A summary of what changed is written to <world>/dragonminez/quest_update_report.txt and shown in the JSON load report.
  • Quest files you created yourself are never touched.

With autoUpdateQuests set to false, default files are only written when they are missing.

Starting over from the defaults To throw your world's story files away and start from the current defaults, use /dmzrestoreupdate. It deletes everything in <world>/dragonminez/wishes, sagas and quests, then runs /dmzreload all to regenerate them (side quests are not touched). It asks for confirmation first: click the button or run /dmzrestoreupdate confirm within 15 seconds.

Practical workflow

  1. Edit your JSON file or files.
  2. Validate the JSON syntax (see How to JSON).
  3. Run the narrowest /dmzreload <target> that covers your change: config for balance, race, form and raid edits, story for quest, saga and dialogue edits, wishes for wish edits.
  4. Check the server log (or the JSON load report in chat). A malformed JSON message means DMZ couldn't read your file: it is running on defaults for that file and your file was left untouched. Fix it and reload again.
  5. For resource pack or datapack changes, do a client resource reload or a vanilla /reload instead.

If in doubt, /dmzreload all is safe to run at any time: it just re-runs every reload path and resyncs everyone.