From 9c21cad9f62fdfe022d3a6049ce3f9b9a112c505 Mon Sep 17 00:00:00 2001 From: Anton Bulakh Date: Sat, 12 Jun 2021 18:07:43 +0300 Subject: [PATCH] Improve performance for fast crafters (#3000) --- .../task/v6/node/NodeRequirements.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/NodeRequirements.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/NodeRequirements.java index 7f3c91f8d..c98288228 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/NodeRequirements.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/NodeRequirements.java @@ -12,6 +12,7 @@ import net.minecraft.nbt.ListNBT; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; +import javax.annotation.Nullable; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -30,6 +31,11 @@ public class NodeRequirements { private final Map> fluidRequirements = new LinkedHashMap<>(); private final Map fluidsNeededPerCraft = new LinkedHashMap<>(); + @Nullable + private IStackList cachedSimulatedItemRequirementSet = null; + @Nullable + private IStackList cachedSimulatedFluidRequirementSet = null; + public void addItemRequirement(int ingredientNumber, ItemStack stack, int size, int perCraft) { if (!itemsNeededPerCraft.containsKey(ingredientNumber)) { itemsNeededPerCraft.put(ingredientNumber, perCraft); @@ -37,6 +43,7 @@ public class NodeRequirements { IStackList list = itemRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createItemStackList()); list.add(stack, size); + cachedSimulatedItemRequirementSet = null; } public void addFluidRequirement(int ingredientNumber, FluidStack stack, int size, int perCraft) { @@ -46,9 +53,15 @@ public class NodeRequirements { IStackList list = fluidRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createFluidStackList()); list.add(stack, size); + cachedSimulatedFluidRequirementSet = null; } public IStackList getSingleItemRequirementSet(boolean simulate) { + IStackList cached = cachedSimulatedItemRequirementSet; + if (simulate && cached != null) { + return cached; + } + IStackList toReturn = API.instance().createItemStackList(); for (int i = 0; i < itemRequirements.size(); i++) { @@ -83,10 +96,17 @@ public class NodeRequirements { } } + cachedSimulatedItemRequirementSet = simulate ? toReturn : null; + return toReturn; } public IStackList getSingleFluidRequirementSet(boolean simulate) { + IStackList cached = cachedSimulatedFluidRequirementSet; + if (simulate && cached != null) { + return cached; + } + IStackList toReturn = API.instance().createFluidStackList(); for (int i = 0; i < fluidRequirements.size(); i++) { @@ -121,6 +141,8 @@ public class NodeRequirements { } } + cachedSimulatedFluidRequirementSet = simulate ? toReturn : null; + return toReturn; }