Improve performance for fast crafters (#3000)
This commit is contained in:
@@ -12,6 +12,7 @@ import net.minecraft.nbt.ListNBT;
|
|||||||
import net.minecraftforge.common.util.Constants;
|
import net.minecraftforge.common.util.Constants;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -30,6 +31,11 @@ public class NodeRequirements {
|
|||||||
private final Map<Integer, IStackList<FluidStack>> fluidRequirements = new LinkedHashMap<>();
|
private final Map<Integer, IStackList<FluidStack>> fluidRequirements = new LinkedHashMap<>();
|
||||||
private final Map<Integer, Integer> fluidsNeededPerCraft = new LinkedHashMap<>();
|
private final Map<Integer, Integer> fluidsNeededPerCraft = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private IStackList<ItemStack> cachedSimulatedItemRequirementSet = null;
|
||||||
|
@Nullable
|
||||||
|
private IStackList<FluidStack> cachedSimulatedFluidRequirementSet = null;
|
||||||
|
|
||||||
public void addItemRequirement(int ingredientNumber, ItemStack stack, int size, int perCraft) {
|
public void addItemRequirement(int ingredientNumber, ItemStack stack, int size, int perCraft) {
|
||||||
if (!itemsNeededPerCraft.containsKey(ingredientNumber)) {
|
if (!itemsNeededPerCraft.containsKey(ingredientNumber)) {
|
||||||
itemsNeededPerCraft.put(ingredientNumber, perCraft);
|
itemsNeededPerCraft.put(ingredientNumber, perCraft);
|
||||||
@@ -37,6 +43,7 @@ public class NodeRequirements {
|
|||||||
|
|
||||||
IStackList<ItemStack> list = itemRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createItemStackList());
|
IStackList<ItemStack> list = itemRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createItemStackList());
|
||||||
list.add(stack, size);
|
list.add(stack, size);
|
||||||
|
cachedSimulatedItemRequirementSet = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addFluidRequirement(int ingredientNumber, FluidStack stack, int size, int perCraft) {
|
public void addFluidRequirement(int ingredientNumber, FluidStack stack, int size, int perCraft) {
|
||||||
@@ -46,9 +53,15 @@ public class NodeRequirements {
|
|||||||
|
|
||||||
IStackList<FluidStack> list = fluidRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createFluidStackList());
|
IStackList<FluidStack> list = fluidRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createFluidStackList());
|
||||||
list.add(stack, size);
|
list.add(stack, size);
|
||||||
|
cachedSimulatedFluidRequirementSet = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IStackList<ItemStack> getSingleItemRequirementSet(boolean simulate) {
|
public IStackList<ItemStack> getSingleItemRequirementSet(boolean simulate) {
|
||||||
|
IStackList<ItemStack> cached = cachedSimulatedItemRequirementSet;
|
||||||
|
if (simulate && cached != null) {
|
||||||
|
return cached;
|
||||||
|
}
|
||||||
|
|
||||||
IStackList<ItemStack> toReturn = API.instance().createItemStackList();
|
IStackList<ItemStack> toReturn = API.instance().createItemStackList();
|
||||||
|
|
||||||
for (int i = 0; i < itemRequirements.size(); i++) {
|
for (int i = 0; i < itemRequirements.size(); i++) {
|
||||||
@@ -83,10 +96,17 @@ public class NodeRequirements {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cachedSimulatedItemRequirementSet = simulate ? toReturn : null;
|
||||||
|
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IStackList<FluidStack> getSingleFluidRequirementSet(boolean simulate) {
|
public IStackList<FluidStack> getSingleFluidRequirementSet(boolean simulate) {
|
||||||
|
IStackList<FluidStack> cached = cachedSimulatedFluidRequirementSet;
|
||||||
|
if (simulate && cached != null) {
|
||||||
|
return cached;
|
||||||
|
}
|
||||||
|
|
||||||
IStackList<FluidStack> toReturn = API.instance().createFluidStackList();
|
IStackList<FluidStack> toReturn = API.instance().createFluidStackList();
|
||||||
|
|
||||||
for (int i = 0; i < fluidRequirements.size(); i++) {
|
for (int i = 0; i < fluidRequirements.size(); i++) {
|
||||||
@@ -121,6 +141,8 @@ public class NodeRequirements {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cachedSimulatedFluidRequirementSet = simulate ? toReturn : null;
|
||||||
|
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user