Changelog — v1.8.0
v1.8.0 focuses on session hygiene, extensibility, and UX polish — a full memory reset on pack close, a custom material type system, a shared loot component, a Language right-click menu, and a sweep of important behavioural fixes.
New Features
| Area | Change |
|---|---|
| Core | Full memory reset on pack close — closing the last edit pack clears PackContext, PackIndexer, DynamicOptions (all lists), LangRegistry, and FileUtil.lastDir; session is completely fresh without restarting; same reset fires when promoting a reference pack to edit |
| Core | DynamicOptions.clearAll() — clears all dynamic lists and re-seeds built-in MDK defaults (craft types, skill categories, quest types, material types); all registered live combos refresh automatically |
| Materials | Custom material type combo — type field converted to liveCombo; type any custom folder name (e.g. wire) for new categories; routes saves to data/items/materials/wires/; custom types persist for the session and are pushed back on save; PackIndexer infers type from parent folder on pack open; smart pluralisation (wire→wires, alloy→alloys, already-plural types unchanged) |
| UI | Shared LootPanel component — loot entry UI extracted from EnemyEditor and RoomEditor into ui/LootPanel.java; Item ID field uses liveCombo(ITEM_IDS) showing all indexed materials and equipment; single fix point for both editors going forward |
| Languages | Language tab right-click context menu — right-click any key row for a themed popup with two actions: Remove Row (table only) and Remove & Unregister Key (table + LangRegistry); only appears on key/value rows, not section headers |
| Quests | Quest description field removed from form — now a hidden auto-derived lang key (displayName + ".desc"); both display name and description registered to Quests section on save automatically |
| Manifest | Manifest live lang key push removed — category row lang keys are only pushed to LangRegistry on Save/Create, not on every keystroke; eliminates phantom language entries appearing while typing |
| Core | PackIndexer improvements — indexes quest displayName to LangRegistry; handles both new quest (singular) and old quests root keys; category detected from top-level field first with meta.category as fallback |
| Enemies | Enemy loot Item ID converted to liveCombo(ITEM_IDS) — all indexed materials and equipment available in the dropdown; eliminates spelling errors in loot table entries |
Changes
- Enemy resistance spinners range changed from
0–1to-1–10— negative values represent vulnerability (enemy takes amplified damage of that type) - Equipment save path now uses
deriveCatPath()andisShipCategory()— correctly routesoriginal:personal_suittodata/items/equipment/personal/suit/instead of the raw MDK ID string EquipmentEditorgainslastSavedDispEquip/lastSavedDescEquiptracking, matching the pattern used by all other editorsPackIndexer.setPackRoot(null)now cancels a pending background scan instead of triggering a new one
Fixes
- Manifest tab no longer sends keystrokes to Language tab —
autoRegisterLangKeyremoved fromDocumentListenerandrefreshPreview; keys only fire on save - Quest
displayNamelang key tracked withlastSavedDispQuest;LangRegistry.replace()called on re-save to rename rather than duplicate PackBrowserEditortab bar reliable —addRefBtnandleftPanelstored as instance fields; revalidation propagated up ancestor chain viaSwingUtilities.invokeLater