Changelog — v1.7.0
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
| Area | Change |
|---|---|
| Open Pack | Multi-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 |
| Core | AutoFillService centralised utility — wire() 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 |
| Core | ITEM_IDS unified pool — DynamicOptions.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 |
| Core | ROOM_IDS dynamic list — RoomEditor 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 |
| Core | First-save directory fix — FileUtil.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 |
| Quests | Quest 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) |
| Manifest | Core 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 |
| Languages | Display/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 |
| Languages | LangRegistry rename listener — addRenameListener() API fires when replace() is called; LanguageEditor.renameKey() updates the existing row in place, preserving any existing translation instead of creating a duplicate |
| Languages | Language 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 |
| Manifest | loadFromData fully restores all section category rows — sectionPanels and sectionAdders maps enable programmatic row creation from JSON so loading a saved manifest file rebuilds the full UI |
| All editors | Live JSON preview wired everywhere — DocumentListener, 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 newRecipeEditoroutput field converted from plainJTextFieldtoliveCombo(ITEM_IDS)DungeonEditorroom rows converted fromJTextFieldtoliveCombo(ROOM_IDS)
Fixes
- Enemy group name no longer has
sappended inid, texture path,DynamicOptionspush, andloadFromDataround-trip DungeonEditor.autoFill()method placement fixed — moved beforebuildJson()to resolve forward-reference compile errorPackIndexerrecipe type now reads fromrecipe.typeinner map instead of root level; room files handle bothroomandroomsroot keysEquipmentEditormissingDynamicOptionsimport added;PackIndexerduplicateplating/armourcase removed