Changelog β v1.9.0
v1.9.0 is a major architectural release β a central session context replaces all fragmented singletons, a shared base class unifies all 11 editors, equipment slot resolution is now synchronous and reliable, and the pack directory scaffold is made static and predictable.
New Features
| Area | Change |
|---|---|
| Core | EditorContext β central shared session state replacing all fragmented singletons (PackContext, EquipmentSlotRegistry, scattered DynamicOptions calls); holds pack name, pack root, equipment slot types, and equipment categories; fires typed events (SLOT_TYPES_CHANGED, EQUIP_CATEGORIES_CHANGED, RESET) that editors receive immediately on the EDT |
| Core | BaseEditor abstract class β all 11 editors now extend BaseEditor instead of JPanel implements Saveable, Undoable; provides ctx field (EditorContext), isShipSlot() helper with full resolution chain, onContextEvent() with automatic listener cleanup |
| Core | EquipmentSlotRegistry middleware singleton β ConcurrentHashMap mapping category IDs to "ship"/"personal"; written synchronously by PackIndexer, ManifestEditor, and EditorContext; eliminates all EDT timing issues around slot type resolution |
| Equipment | Slot type indicator β live label displayed below the Category combo; green = SHIP (from manifest), blue = PERSONAL (from manifest), amber = inferred; confirms EditorContext registration at a glance |
| Core | PackIndexer.indexManifest() runs synchronously on pack open β manifest is parsed before the async scan so equipment categories and slot types are immediately available; reads the slotType field embedded by ManifestEditor |
| Manifest | Embeds slotType in core_systems JSON β each category entry now stores "slotType": "ship"/"personal" so the slot type survives across sessions without relying on naming conventions |
| Equipment | Equipment category combo fully dynamic β no original:* built-in slots pre-seeded; SLOT_TYPES_CHANGED event triggers an immediate Equipment tab refresh when the manifest is saved or loaded |
| Manifest | Static pack directory scaffold β Create Full Pack Structure creates only 13 universal base directories; all content-specific folders (skill categories, quest groups, recipe types, equipment slots) are created from manifest ticked rows only, not pre-generated |
| Open Pack | Reference pack tree locked β [REF] tab clicks no longer switch the file tree or enable Load into Editor; the tree always shows the edit pack only; eliminates the cross-pack loading corruption bug |
Changes
deriveSlotValuematches by string not combo index β custom manifest categories return their category ID asequipmentSlot; built-inoriginal:*categories matched by exact string againstEQUIPMENT_CATEGORIES- All
original:*seeds removed fromDynamicOptionsβCRAFT_TYPES,SKILLS,QUEST_CATEGORIES,SKILL_CATEGORIES,equipment_categoriesstart empty and are populated only from manifest saves or pack file scans - Skills section in Manifest starts with no default rows β
combat/crafting/scienceno longer pre-seeded; users add only the categories their pack uses
Fixes
- Equipment slot type not applying for custom-named categories (e.g.
weapon_001) β resolved viaEditorContextwhich all three write paths update synchronously - Room and Quest files not loading into editors β
PackBrowserEditorswitch now handles bothroom/roomsandquest/questsroot keys - Memory not cleared on pack close β
EditorContext.reset()clears all registries atomically