diff --git a/src/main/java/appeng/crafting/execution/CraftingCpuLogic.java b/src/main/java/appeng/crafting/execution/CraftingCpuLogic.java index 2c881cf1453..449d9495a02 100644 --- a/src/main/java/appeng/crafting/execution/CraftingCpuLogic.java +++ b/src/main/java/appeng/crafting/execution/CraftingCpuLogic.java @@ -42,6 +42,7 @@ import appeng.api.networking.energy.IEnergyService; import appeng.api.networking.security.IActionSource; import appeng.api.stacks.AEKey; +import appeng.api.stacks.AEKeyType; import appeng.api.stacks.GenericStack; import appeng.api.stacks.KeyCounter; import appeng.core.AELog; @@ -221,7 +222,8 @@ public int executeCrafting(int maxPatterns, CraftingService craftingService, IEn for (var expectedContainerItem : expectedContainerItems) { job.waitingFor.insert(expectedContainerItem.getKey(), expectedContainerItem.getLongValue(), Actionable.MODULATE); - job.timeTracker.addMaxItems(expectedContainerItem.getLongValue()); + job.timeTracker.addMaxItems(expectedContainerItem.getLongValue(), + expectedContainerItem.getKey().getType()); } cluster.markDirty(); @@ -276,7 +278,7 @@ public long insert(AEKey what, long amount, Actionable type) { } if (type == Actionable.MODULATE) { - job.timeTracker.decrementItems(amount); + job.timeTracker.decrementItems(amount, what.getType()); // Process Fluid and Items job.waitingFor.extract(what, amount, Actionable.MODULATE); cluster.markDirty(); } @@ -416,7 +418,7 @@ public ElapsedTimeTracker getElapsedTimeTracker() { if (this.job != null) { return this.job.timeTracker; } else { - return new ElapsedTimeTracker(0); + return new ElapsedTimeTracker(0, AEKeyType.items()); } } diff --git a/src/main/java/appeng/crafting/execution/ElapsedTimeTracker.java b/src/main/java/appeng/crafting/execution/ElapsedTimeTracker.java index f81e323abb2..77d3b2fb9c9 100644 --- a/src/main/java/appeng/crafting/execution/ElapsedTimeTracker.java +++ b/src/main/java/appeng/crafting/execution/ElapsedTimeTracker.java @@ -20,6 +20,8 @@ import net.minecraft.nbt.CompoundTag; +import appeng.api.stacks.AEKeyType; + public class ElapsedTimeTracker { private static final String NBT_ELAPSED_TIME = "elapsedTime"; private static final String NBT_START_ITEM_COUNT = "startItemCount"; @@ -32,9 +34,11 @@ public class ElapsedTimeTracker { private long startItemCount; private long remainingItemCount; - public ElapsedTimeTracker(long startItemCount) { - this.startItemCount = startItemCount; - this.remainingItemCount = startItemCount; + private static final int AEKEY_SCALE_FACTOR = AEKeyType.fluids().getAmountPerUnit(); + + public ElapsedTimeTracker(long startItemCount, AEKeyType KeyType) { + this.startItemCount = startItemCount * AEKEY_SCALE_FACTOR / KeyType.getAmountPerUnit(); + this.remainingItemCount = startItemCount * AEKEY_SCALE_FACTOR / KeyType.getAmountPerUnit(); } public ElapsedTimeTracker(CompoundTag data) { @@ -57,15 +61,15 @@ private void updateTime() { this.lastTime = currentTime; } - void decrementItems(long itemDiff) { + void decrementItems(long itemDiff, AEKeyType KeyType) { updateTime(); - this.remainingItemCount -= itemDiff; + this.remainingItemCount -= itemDiff * AEKEY_SCALE_FACTOR / KeyType.getAmountPerUnit(); } - void addMaxItems(long itemDiff) { + void addMaxItems(long itemDiff, AEKeyType KeyType) { updateTime(); - this.startItemCount += itemDiff; - this.remainingItemCount += itemDiff; + this.startItemCount += itemDiff * AEKEY_SCALE_FACTOR / KeyType.getAmountPerUnit(); + this.remainingItemCount += itemDiff * AEKEY_SCALE_FACTOR / KeyType.getAmountPerUnit(); } public long getElapsedTime() { @@ -77,10 +81,10 @@ public long getElapsedTime() { } public long getRemainingItemCount() { - return this.remainingItemCount; + return (this.remainingItemCount + AEKEY_SCALE_FACTOR / 2) / AEKEY_SCALE_FACTOR; } public long getStartItemCount() { - return this.startItemCount; + return (this.remainingItemCount + AEKEY_SCALE_FACTOR / 2) / AEKEY_SCALE_FACTOR; } } diff --git a/src/main/java/appeng/crafting/execution/ExecutingCraftingJob.java b/src/main/java/appeng/crafting/execution/ExecutingCraftingJob.java index db56db0f1d9..a8bcfe57725 100644 --- a/src/main/java/appeng/crafting/execution/ExecutingCraftingJob.java +++ b/src/main/java/appeng/crafting/execution/ExecutingCraftingJob.java @@ -35,6 +35,7 @@ import appeng.api.networking.crafting.ICraftingPlan; import appeng.api.stacks.AEItemKey; import appeng.api.stacks.AEKey; +import appeng.api.stacks.AEKeyType; import appeng.api.stacks.GenericStack; import appeng.crafting.CraftingLink; import appeng.crafting.inv.ListCraftingInventory; @@ -79,10 +80,10 @@ interface CraftingDifferenceListener { for (var entry : plan.patternTimes().entrySet()) { tasks.computeIfAbsent(entry.getKey(), p -> new TaskProgress()).value += entry.getValue(); for (var output : entry.getKey().getOutputs()) { - totalPending += output.amount() * entry.getValue(); + totalPending += output.amount() * entry.getValue() * output.what().getAmountPerUnit(); } } - this.timeTracker = new ElapsedTimeTracker(totalPending); + this.timeTracker = new ElapsedTimeTracker(totalPending, AEKeyType.items()); this.link = link; this.playerId = playerId; }