Skip to content

Commit 162716f

Browse files
committed
fix: detect in-flight packages during recovery
1 parent eedb833 commit 162716f

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

‎src/main/java/com/innygr/icreateordernetworking/delivery/PackagerFrogportAdapter.java‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,21 @@ private static int findEmptySlot(ItemStackHandler inventory, int except) {
327327
return -1;
328328
}
329329

330+
/**
331+
* True when a transaction-marked package still exists at its source Packager.
332+
* Recovery must not collect replacement factory stock while a matching package
333+
* is held or queued; it may be about to leave or may already be in transit.
334+
*/
335+
static boolean hasMarkedPackageAtSource(ServerLevel level, ShipmentJournalData.Shipment shipment) {
336+
if (level == null || shipment == null || shipment.route() != DeliveryRoute.FROGPORT
337+
|| level.getServer() == null || !level.getServer().isSameThread()) return false;
338+
EndpointPair pair = EndpointPair.parse(shipment.sourceReference());
339+
if (pair == null || !level.hasChunkAt(pair.source())) return false;
340+
if (!(level.getBlockEntity(pair.source()) instanceof TerminalLoggerBlockEntity source)) return false;
341+
PackagerBlockEntity packager = findSourcePackager(level, source);
342+
return packager != null && countMarkedPackages(packager, shipment) > 0;
343+
}
344+
330345
private static int countMarkedPackages(PackagerBlockEntity packager,
331346
ShipmentJournalData.Shipment shipment) {
332347
if (packager == null || shipment == null) return 0;

0 commit comments

Comments
 (0)