From 36a1d635108f1e3384f8a346fe6b2abf82b93dee Mon Sep 17 00:00:00 2001 From: NotEvil Date: Wed, 15 Apr 2026 03:44:12 +0200 Subject: [PATCH] fix(D-01/E): padlock resistance double-count + knife progress persist (review) BUG-001: PacketV2StruggleStart only adds padlock resistance bonus on first session (when resistance >= base). Interrupted sessions that persisted combined resistance no longer re-add the bonus, preventing infinite resistance inflation. BUG-002: PacketV2LockToggle UNLOCK clears knifeCutProgress and accessoryStruggleResistance NBT keys, preventing partial knife-cut progress from persisting across lock/unlock cycles. --- .../v2/bondage/network/PacketV2LockToggle.java | 4 ++++ .../bondage/network/PacketV2StruggleStart.java | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tiedup/remake/v2/bondage/network/PacketV2LockToggle.java b/src/main/java/com/tiedup/remake/v2/bondage/network/PacketV2LockToggle.java index 565fb11..f989157 100644 --- a/src/main/java/com/tiedup/remake/v2/bondage/network/PacketV2LockToggle.java +++ b/src/main/java/com/tiedup/remake/v2/bondage/network/PacketV2LockToggle.java @@ -149,6 +149,10 @@ public class PacketV2LockToggle { return; } + // Clear partial knife-cut progress and stale struggle resistance on unlock + com.tiedup.remake.util.ItemNBTHelper.remove(stack, "knifeCutProgress"); + com.tiedup.remake.util.ItemNBTHelper.remove(stack, "accessoryStruggleResistance"); + TiedUpMod.LOGGER.debug( "[V2LockToggle] Unlocked region {} on entity {}", region.name(), diff --git a/src/main/java/com/tiedup/remake/v2/bondage/network/PacketV2StruggleStart.java b/src/main/java/com/tiedup/remake/v2/bondage/network/PacketV2StruggleStart.java index bf91b25..66bd586 100644 --- a/src/main/java/com/tiedup/remake/v2/bondage/network/PacketV2StruggleStart.java +++ b/src/main/java/com/tiedup/remake/v2/bondage/network/PacketV2StruggleStart.java @@ -84,7 +84,21 @@ public class PacketV2StruggleStart { if (stack.getItem() instanceof ILockable lockable) { isLocked = lockable.isLocked(stack); if (isLocked) { - resistance += com.tiedup.remake.core.SettingsAccessor.getPadlockResistance(null); + // Only add padlock bonus on FIRST session (fresh resistance = base). + // If resistance was already decremented and persisted from a prior + // interrupted session, the padlock bonus is already baked in. + int baseResistance = resistance; // getCurrentResistance returns base if no NBT + com.tiedup.remake.v2.bondage.component.ResistanceComponent comp = + com.tiedup.remake.v2.bondage.datadriven.DataDrivenBondageItem.getComponent( + stack, com.tiedup.remake.v2.bondage.component.ComponentType.RESISTANCE, + com.tiedup.remake.v2.bondage.component.ResistanceComponent.class); + if (comp != null) { + baseResistance = comp.getBaseResistance(); + } + if (resistance >= baseResistance) { + // Fresh or fully restored — add padlock bonus + resistance += com.tiedup.remake.core.SettingsAccessor.getPadlockResistance(null); + } } }