E1: Initialize currentResistance in NBT at equip time from ResistanceComponent — eliminates MAX-scan fallback bug E2: BuiltInLockComponent for organic items (already committed) E3: canStruggle refactor — new model: - ARMS: always struggle-able (no lock gating) - Non-ARMS: only if locked OR built-in lock - Removed dead isItemLocked() from StruggleState + overrides E4: canUnequip already handled by BuiltInLockComponent.blocksUnequip() via ComponentHolder delegation E5: Help/assist mechanic deferred (needs UI design) E6: Removed lock resistance from ILockable (5 methods + NBT key deleted) - GenericKnife: new knifeCutProgress NBT for cutting locks - StruggleAccessory: accessoryStruggleResistance NBT replaces lock resistance - PacketV2StruggleStart: uses config-based padlock resistance - All lock/unlock packets cleaned of initializeLockResistance/clearLockResistance E7: Fixed 3 pre-existing bugs: - B2: DataDrivenItemRegistry.clear() synchronized on RELOAD_LOCK - B3: V2TyingPlayerTask validates heldStack before equip (prevents duplication) - B5: EntityKidnapperMerchant.remove() cleans playerToMerchant map (memory leak)
Strip all Phase references, TODO/FUTURE roadmap notes, and internal planning comments from the codebase. Run Prettier for consistent formatting across all Java files.
Remove build artifacts, dev tool configs, unused dependencies, and third-party source dumps. Add proper README, update .gitignore, clean up Makefile.