v1.7.0 is the largest architectural release to date — multi-pack reference support, a centralised auto-fill service, unified item and room ID pools, a fully overhauled Quest schema, live preview wired across every editor, and a sweep of targeted fixes.

New Features

AreaChange
Open PackMulti-pack reference system — Open Pack tab holds multiple packs simultaneously via a tab bar; first pack is [EDIT] (sets PackContext + PackIndexer); additional packs are [REF] (file tree + JSON preview work, all IDs indexed into every editor dropdown); + Reference Pack button; per-tab × close; duplicate-pack detection prevents loading the same directory twice
CoreAutoFillService centralised utilitywire() and wireWithCombo() replace all duplicated DocumentListener boilerplate across editors; key pattern is a Supplier<String> so each editor overrides derivation without subclassing; isAutoDerived() is public static for custom override
CoreITEM_IDS unified poolDynamicOptions.ITEM_IDS merges all material and equipment IDs; populated by MaterialEditor, EquipmentEditor, PackIndexer, and reference pack scanning; RecipeEditor output combo uses ITEM_IDS so both materials and equipment appear as valid recipe outputs
CoreROOM_IDS dynamic listRoomEditor pushes saved room IDs on every save; DungeonEditor room rows use liveCombo(ROOM_IDS) and auto-populate as rooms are saved; PackIndexer indexes existing room files on pack open
CoreFirst-save directory fixFileUtil.resolveSubDir falls back to PackIndexer.getPackRoot() when lastDir is null; the save dialog opens in the correct subdirectory on the very first save of a session, not just subsequent ones
QuestsQuest tab fully overhauled — new schema: root key quest, id = pack:group/questId, description = real in-game text string, category top-level, minLevel spinner; Objectives section (type / requiredAmount / currentAmount / description per row); Rewards section (XP + Credits + item rows with liveCombos from ITEM_IDS); Meta section (autoAccept / autoComplete / priority)
ManifestCore Systems ship/personal type dropdown — each category row has a personal / ship type combo that routes equipment to the correct data/items/equipment/{type}/{slot}/ and assets/textures/equipment/{type}/{slot}/ directories; auto-detected from sub-key prefix on file load
LanguagesDisplay/desc key fields removed from all editor tabs — replaced with an info label; keys are auto-derived via AutoFillService and pushed to LangRegistry on every save and live as you type in Manifest
LanguagesLangRegistry rename listeneraddRenameListener() API fires when replace() is called; LanguageEditor.renameKey() updates the existing row in place, preserving any existing translation instead of creating a duplicate
LanguagesLanguage tab hover tooltips — each row shows Section, human-readable name, full key, and translation value on hover; description keys labelled (description); empty translations highlighted in amber
ManifestloadFromData fully restores all section category rowssectionPanels and sectionAdders maps enable programmatic row creation from JSON so loading a saved manifest file rebuilds the full UI
All editorsLive JSON preview wired everywhereDocumentListener, ChangeListener, and ActionListener on every control in Materials, Enemies, and Rooms tabs, which previously had no listeners; all editors now refresh the preview on any field change

Changes

  • LangRegistry.registerAll() always fires listeners — Language tab syncs on every save, not just when keys are new
  • RecipeEditor output field converted from plain JTextField to liveCombo(ITEM_IDS)
  • DungeonEditor room rows converted from JTextField to liveCombo(ROOM_IDS)

Fixes

  • Enemy group name no longer has s appended in id, texture path, DynamicOptions push, and loadFromData round-trip
  • DungeonEditor.autoFill() method placement fixed — moved before buildJson() to resolve forward-reference compile error
  • PackIndexer recipe type now reads from recipe.type inner map instead of root level; room files handle both room and rooms root keys
  • EquipmentEditor missing DynamicOptions import added; PackIndexer duplicate plating/armour case removed