From 4b88ffc1df5b457b1cc678b8894c3267c380b0d6 Mon Sep 17 00:00:00 2001 From: Simba98 Date: Tue, 27 Aug 2024 12:13:21 +0800 Subject: [PATCH] Implement ElapsedTimeTracker to support AEKeyType AmountPerUnit scaling --- .../crafting/execution/CraftingCpuLogic.java | 5 +++-- .../crafting/execution/ElapsedTimeTracker.java | 17 ++++++++++------- .../execution/ExecutingCraftingJob.java | 5 +++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/appeng/crafting/execution/CraftingCpuLogic.java b/src/main/java/appeng/crafting/execution/CraftingCpuLogic.java index 028e37a154b..1e11e6779f9 100644 --- a/src/main/java/appeng/crafting/execution/CraftingCpuLogic.java +++ b/src/main/java/appeng/crafting/execution/CraftingCpuLogic.java @@ -22,6 +22,7 @@ import java.util.UUID; import java.util.function.Consumer; +import appeng.api.stacks.AEKeyType; import com.google.common.base.Preconditions; import org.jetbrains.annotations.Nullable; @@ -268,7 +269,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(); } @@ -408,7 +409,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 0e27a48b368..1a6a81165f4 100644 --- a/src/main/java/appeng/crafting/execution/ElapsedTimeTracker.java +++ b/src/main/java/appeng/crafting/execution/ElapsedTimeTracker.java @@ -18,6 +18,7 @@ package appeng.crafting.execution; +import appeng.api.stacks.AEKeyType; import net.minecraft.nbt.CompoundTag; public class ElapsedTimeTracker { @@ -30,9 +31,11 @@ public class ElapsedTimeTracker { private final 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) { @@ -49,11 +52,11 @@ public CompoundTag writeToNBT() { return data; } - void decrementItems(long itemDiff) { + void decrementItems(long itemDiff, AEKeyType KeyType) { long currentTime = System.nanoTime(); this.elapsedTime = this.elapsedTime + (currentTime - this.lastTime); this.lastTime = currentTime; - this.remainingItemCount -= itemDiff; + this.remainingItemCount -= itemDiff * AEKEY_SCALE_FACTOR / KeyType.getAmountPerUnit(); } public long getElapsedTime() { @@ -65,10 +68,10 @@ public long getElapsedTime() { } public long getRemainingItemCount() { - return this.remainingItemCount; + return Math.round(((float)this.remainingItemCount) / AEKEY_SCALE_FACTOR); } public long getStartItemCount() { - return this.startItemCount; + return Math.round(((float)this.startItemCount) / AEKEY_SCALE_FACTOR); } } diff --git a/src/main/java/appeng/crafting/execution/ExecutingCraftingJob.java b/src/main/java/appeng/crafting/execution/ExecutingCraftingJob.java index ce958e4a4b7..b5d7ea4c594 100644 --- a/src/main/java/appeng/crafting/execution/ExecutingCraftingJob.java +++ b/src/main/java/appeng/crafting/execution/ExecutingCraftingJob.java @@ -34,6 +34,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; @@ -78,10 +79,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; }