aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/nei
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2021-12-12 12:34:49 +0000
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2021-12-12 12:34:49 +0000
commitcdaa19e700a862766e1af69528c42af43cf1a1fc (patch)
treecb065ed7cae780e5b11e35431cf54171e0534c3c /src/Java/gtPlusPlus/nei
parent5e0647862dae8d3cc847f09ff081e424a537f7f4 (diff)
downloadGT5-Unofficial-cdaa19e700a862766e1af69528c42af43cf1a1fc.tar.gz
GT5-Unofficial-cdaa19e700a862766e1af69528c42af43cf1a1fc.tar.bz2
GT5-Unofficial-cdaa19e700a862766e1af69528c42af43cf1a1fc.zip
Fixed cells being consumed in nuclear reprocessing.
Removed some debug logging. Removed ClassTransformer_CC_GuiContainerManager. Improved handling in GT_NEI_LFTR_Sparging. Added Erbium. Added HeLiCoPtEr.
Diffstat (limited to 'src/Java/gtPlusPlus/nei')
-rw-r--r--src/Java/gtPlusPlus/nei/GT_NEI_LFTR.java1
-rw-r--r--src/Java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java178
2 files changed, 83 insertions, 96 deletions
diff --git a/src/Java/gtPlusPlus/nei/GT_NEI_LFTR.java b/src/Java/gtPlusPlus/nei/GT_NEI_LFTR.java
index a88df530ab..9fbc689ac3 100644
--- a/src/Java/gtPlusPlus/nei/GT_NEI_LFTR.java
+++ b/src/Java/gtPlusPlus/nei/GT_NEI_LFTR.java
@@ -101,7 +101,6 @@ public class GT_NEI_LFTR extends GTPP_NEI_DefaultHandler {
if ((mRecipe.mFluidOutputs.length > 8) && (mRecipe.mFluidOutputs[8] != null) && (mRecipe.mFluidOutputs[8].getFluid() != null)) {
this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(mRecipe.mFluidOutputs[8], true), 138, 41, mRecipe.getOutputChance(tStartIndex++)));
}
- Logger.INFO("Outputs: "+mRecipe.mFluidOutputs.length);
}
}
diff --git a/src/Java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java b/src/Java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java
index acaea3fa4b..b293ac7c6f 100644
--- a/src/Java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java
+++ b/src/Java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java
@@ -1,10 +1,11 @@
package gtPlusPlus.nei;
import java.awt.Rectangle;
+import java.lang.ref.SoftReference;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.stream.Collectors;
import org.lwjgl.opengl.GL11;
@@ -19,19 +20,18 @@ import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.GasSpargingRecipe;
import gregtech.api.util.GasSpargingRecipeMap;
-import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.gui.machine.GUI_DecayablesChest;
import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
public class GT_NEI_LFTR_Sparging extends TemplateRecipeHandler {
public static final String mNEIName = GasSpargingRecipeMap.mNEIDisplayName;
+ private SoftReference<List<GasSpargingRecipeNEI>> mCachedRecipes = null;
public String getRecipeName() {
return mNEIName;
@@ -63,97 +63,86 @@ public class GT_NEI_LFTR_Sparging extends TemplateRecipeHandler {
public void loadTransferRects() {
this.transferRects.add(new RecipeTransferRect(new Rectangle(72, 14, 22, 16), getRecipeName(), new Object[0]));
}
-
- public List<GasSpargingRecipe> getSortedRecipes() {
- List<GasSpargingRecipe> result = new ArrayList<GasSpargingRecipe>(GasSpargingRecipeMap.mRecipes);
- Collections.sort(result);
- return result;
- }
-
- @Override
- public void loadCraftingRecipes(final String outputId, final Object... results) {
- if (outputId.equals(getRecipeName())) {
- for (GasSpargingRecipe tRecipe : getSortedRecipes()) {
- this.arecipes.add(new GasSpargingRecipeNEI(tRecipe));
- }
- } else {
- super.loadCraftingRecipes(outputId, results);
- }
- }
-
- @Override
- public void loadCraftingRecipes(final ItemStack aResult) {
- ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
-
- ArrayList<ItemStack> tResults = new ArrayList<ItemStack>();
- tResults.add(aResult);
- tResults.add(GT_OreDictUnificator.get(true, aResult));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
- if (tFluid != null) {
- tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tResults.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (GasSpargingRecipe tRecipe : getSortedRecipes()) {
- GasSpargingRecipeNEI tNEIRecipe = new GasSpargingRecipeNEI(tRecipe);
- for (ItemStack tStack : tResults) {
- if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- //CachedDefaultRecipe tNEIRecipe;
- }
-
- public void loadUsageRecipes(ItemStack aInput) {
- ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
-
- ArrayList<ItemStack> tInputs = new ArrayList<ItemStack>();
- tInputs.add(aInput);
- tInputs.add(GT_OreDictUnificator.get(false, aInput));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
- if (tFluid != null) {
- tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tInputs.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (GasSpargingRecipe tRecipe : getSortedRecipes()) {
- GasSpargingRecipeNEI tNEIRecipe = new GasSpargingRecipeNEI(tRecipe);
- for (ItemStack tStack : tInputs) {
- if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
-
- private final void sort() {
- List<GasSpargingRecipeNEI> g = new ArrayList<GasSpargingRecipeNEI>();
- for (CachedRecipe u : arecipes) {
- g.add((GasSpargingRecipeNEI) u);
- }
- if (g != null && !g.isEmpty()) {
- Collections.sort(g);
- }
- }
+
+ public List<GasSpargingRecipeNEI> getCache() {
+ List<GasSpargingRecipeNEI> cache;
+ if (mCachedRecipes == null || (cache = mCachedRecipes.get()) == null) {
+ cache = GasSpargingRecipeMap.mRecipes.stream() // do not use parallel stream. This is already parallelized by NEI
+ .sorted()
+ .map(temp -> {return createCachedRecipe(temp);})
+ .collect(Collectors.toList());
+ // while the NEI parallelize handlers, for each individual handler it still uses sequential execution model
+ // so we do not need any synchronization here
+ mCachedRecipes = new SoftReference<>(cache);
+ }
+ return cache;
+ }
+
+ public GasSpargingRecipeNEI createCachedRecipe(GasSpargingRecipe aRecipe) {
+ return new GasSpargingRecipeNEI(aRecipe);
+ }
+
+ public void loadCraftingRecipes(String outputId, Object... results) {
+ if (outputId.equals(getOverlayIdentifier())) {
+ arecipes.addAll(getCache());
+ } else {
+ super.loadCraftingRecipes(outputId, results);
+ }
+ }
+
+ public void loadCraftingRecipes(ItemStack aResult) {
+ ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
+
+ ArrayList<ItemStack> tResults = new ArrayList<>();
+ tResults.add(aResult);
+ tResults.add(GT_OreDictUnificator.get(true, aResult));
+ if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
+ for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
+ tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
+ }
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
+ FluidStack tFluidStack;
+ if (tFluid != null) {
+ tFluidStack = tFluid;
+ tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
+ }
+ else tFluidStack = GT_Utility.getFluidFromDisplayStack(aResult);
+ if (tFluidStack != null) {
+ tResults.addAll(GT_Utility.getContainersFromFluid(tFluidStack));
+ }
+ for (GasSpargingRecipeNEI recipe : getCache()) {
+ if (tResults.stream().anyMatch(stack -> recipe.contains(recipe.mOutputs, stack)))
+ arecipes.add(recipe);
+ }
+ }
+
+ public void loadUsageRecipes(ItemStack aInput) {
+ ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
+
+ ArrayList<ItemStack> tInputs = new ArrayList<>();
+ tInputs.add(aInput);
+ tInputs.add(GT_OreDictUnificator.get(false, aInput));
+ if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
+ for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
+ tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
+ }
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
+ FluidStack tFluidStack;
+ if (tFluid != null) {
+ tFluidStack = tFluid;
+ tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
+ }
+ else tFluidStack = GT_Utility.getFluidFromDisplayStack(aInput);
+ if (tFluidStack != null) {
+ tInputs.addAll(GT_Utility.getContainersFromFluid(tFluidStack));
+ }
+ for (GasSpargingRecipeNEI recipe : getCache()) {
+ if (tInputs.stream().anyMatch(stack -> recipe.contains(recipe.mInputs, stack)))
+ arecipes.add(recipe);
+ }
+ }
public void drawExtras(int aRecipeIndex) {
final long tEUt = ((GasSpargingRecipeNEI) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
@@ -320,7 +309,6 @@ public class GT_NEI_LFTR_Sparging extends TemplateRecipeHandler {
if ((tRecipe.mFluidOutputs.length > 8) && (tRecipe.mFluidOutputs[8] != null) && (tRecipe.mFluidOutputs[8].getFluid() != null)) {
this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[8], false), 138, 41, tRecipe.getMaxOutput(tStartIndex++)));
}
- Logger.INFO("Outputs: "+tRecipe.mFluidOutputs.length);
}
}