From 27c86bc8317f69d48d14377cbe6f8e135e5e6b34 Mon Sep 17 00:00:00 2001 From: NotEvil Date: Thu, 16 Apr 2026 14:36:45 +0200 Subject: [PATCH] fix ghost LaborRecord entries for non-working prisoners on escape --- .../java/com/tiedup/remake/prison/PrisonerManager.java | 8 ++++++++ .../remake/prison/service/EscapeMonitorService.java | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tiedup/remake/prison/PrisonerManager.java b/src/main/java/com/tiedup/remake/prison/PrisonerManager.java index 2792ee4..a9bbb30 100644 --- a/src/main/java/com/tiedup/remake/prison/PrisonerManager.java +++ b/src/main/java/com/tiedup/remake/prison/PrisonerManager.java @@ -113,6 +113,14 @@ public class PrisonerManager extends SavedData { return laborRecords.computeIfAbsent(playerId, id -> new LaborRecord()); } + /** + * Get labor record only if one exists. Does not create ghost entries. + */ + @Nullable + public LaborRecord getLaborRecordIfExists(UUID playerId) { + return laborRecords.get(playerId); + } + /** * Set the labor record for a player. */ diff --git a/src/main/java/com/tiedup/remake/prison/service/EscapeMonitorService.java b/src/main/java/com/tiedup/remake/prison/service/EscapeMonitorService.java index 304354d..7c9734f 100644 --- a/src/main/java/com/tiedup/remake/prison/service/EscapeMonitorService.java +++ b/src/main/java/com/tiedup/remake/prison/service/EscapeMonitorService.java @@ -94,8 +94,9 @@ public class EscapeMonitorService { ); // Step 1: Save guard ID BEFORE state transition (manager.escape() removes the LaborRecord) - LaborRecord laborBeforeEscape = manager.getLaborRecord(playerId); - UUID guardId = laborBeforeEscape.getGuardId(); + // Use direct map lookup to avoid creating ghost LaborRecord entries for non-WORKING prisoners + LaborRecord laborBeforeEscape = manager.getLaborRecordIfExists(playerId); + UUID guardId = laborBeforeEscape != null ? laborBeforeEscape.getGuardId() : null; // Step 2: Transition prisoner state to FREE boolean stateChanged = manager.escape(playerId, currentTime, reason);