GSO Data Helper is more than a form-to-JSON converter. A set of interconnected smart systems keeps all 11 editors in sync, automates tedious bookkeeping, and gets out of your way while you build datapacks.

Pack Name Sync — PackContext

Set your pack name once in the Manifest editor. PackContext is a shared singleton that every other editor reads. Change the pack name and all 11 editors reflect the new value immediately — no manual update required.

Background File Scanner — PackIndexer

A daemon thread scans saved JSON files in the background and populates all editor dropdowns (skills, materials, enemies, dungeons, recipe types, quest categories) from actual saved files. A timestamp cache ensures only changed files are re-parsed. Files are processed in batches of 30 with 50ms pauses to keep memory stable on large packs. You never need to manually register IDs — open a pack and every dropdown fills itself.

Dynamic Dropdowns — DynamicOptions

DynamicOptions maintains live-updating lists of IDs that feed combo boxes across editors. Dropdowns are populated two ways: by PackIndexer reading saved files, and immediately when Manifest category rows are ticked — so other editors see new categories in real time without saving first.

When you save or tick a…The following is auto-populated
Skill (saved file or Manifest row)Recipe editor skill requirement dropdowns
Material (saved file)Recipe editor ingredient autocomplete lists
Enemy (saved file)Room editor hostile autocomplete list
Manifest category row (ticked)Matching DynamicOptions list instantly, plus its subdirectory is created automatically

Language Key System — LangRegistry

Every save pushes displayName and description keys to LangRegistry. In v1.6.0 the registry gained two new capabilities:

  • Key correction — editors track their last-saved key. Fixing a typo and re-saving calls LangRegistry.replace(), which updates the key in all open language editors instead of creating a duplicate entry.
  • Remove Selected — deleting a row in the Language editor removes the key from both the table and the registry via LangRegistry.remove().
  • Direct key editing — editing a key cell in the Language table syncs the change back to the registry live.

Multi-Language Sync

When two or more language files are open at the same time, new keys propagate to all of them automatically when any file is saved. The Retro-fill button adds all registry keys missing from an older translation file in one click.

Texture Picker

Available in the Materials, Equipment, Enemies, and Skills editors. The workflow:

  1. Click the browse button — a file chooser opens with an image preview panel
  2. Navigate to your source image and select it
  3. The tool copies it to the correct assets/textures/ subfolder for the editor
  4. The relative path is written directly into the texture JSON field

In the Equipment editor, the texture subdirectory switches automatically when you change the equipment category — no stale paths from a previous item.

Equipment Auto-Fill

The Equipment editor derives Display Name Key, Description Key, and texture path live as you type the item ID and select a category — using the pattern pack_name.category.item_id. Category IDs use exact MDK original: namespace values (original:personal_suit, original:ship_hull, etc.) so the generated JSON always matches the MDK manifest spec.

Undo / Redo — EditorHistory

Every editor maintains its own undo/redo stack via EditorHistory, up to 100 snapshots. Keyboard shortcuts:

ActionShortcut
UndoCtrl+Z
RedoCtrl+Y

Undo/redo state is per-editor and independent — undoing in the Materials editor does not affect the Equipment editor.

Ctrl+S Save

Pressing Ctrl+S anywhere in the application saves the currently visible editor, routed via the Saveable interface. Save dialogs open directly in the correct subdirectory for each editor by walking up to the pack root — no manual navigation required.

Dark & Light Mode

Toggle between dark and light themes from the menu bar. Theme changes trigger a full component-tree repaint using role-based colour classification — every panel, spinner, combo box, split pane, and scroll pane updates correctly.

Exit Confirmation

A custom exit dialog with larger, easier-to-hit buttons prevents accidental closes when you have unsaved work.