diff --git a/src/engine/net/client/handlers/ItemProductionMsgHandler.java b/src/engine/net/client/handlers/ItemProductionMsgHandler.java index e4a1e28e..4b92c693 100644 --- a/src/engine/net/client/handlers/ItemProductionMsgHandler.java +++ b/src/engine/net/client/handlers/ItemProductionMsgHandler.java @@ -142,6 +142,14 @@ public class ItemProductionMsgHandler extends AbstractClientMsgHandler { workOrder.cooking.remove(virtualItem); ForgeManager.itemWorkOrderLookup.remove(virtualItem); + // WorkOrder exists until all items are completed or junked + // this is to hold a reference to the virtual item for serialization (NPCMsgHandler) + + workOrder.slots_used = workOrder.slots_used - 1; + + if (workOrder.slots_used == 0) + ForgeManager.vendorWorkOrderLookup.get(workOrder.vendor).remove(workOrder); + // Persist item and add to vendor inventory Item completedItem = DbManager.ItemQueries.PERSIST(virtualItem); @@ -364,12 +372,19 @@ public class ItemProductionMsgHandler extends AbstractClientMsgHandler { if (vendor.getBuilding() == null) return; - // Delete the item ForgeManager.inMemoryItemLookup.remove(targetItem.objectUUID); WorkOrder workOrder = ForgeManager.itemWorkOrderLookup.get(targetItem); workOrder.cooking.remove(targetItem); + // WorkOrder exists until all items are completed or junked + // this is to hold a reference to the virtual item for serialization (NPCMsgHandler) + + workOrder.slots_used = workOrder.slots_used - 1; + + if (workOrder.slots_used == 0) + ForgeManager.vendorWorkOrderLookup.get(workOrder.vendor).remove(workOrder); + // Refresh vendor's inventory to client outMsg = new ManageNPCMsg(vendor);