aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlueWeabo <76872108+BlueWeabo@users.noreply.github.com>2022-10-01 13:10:15 +0300
committerGitHub <noreply@github.com>2022-10-01 12:10:15 +0200
commit32d74ba4d4f17af68335c5af3fcc44e20da25fd0 (patch)
treef7741bd2dcfba31bf8aa878c3996a7111cebbe2f
parent51a41123b0ccdf10cb7b311f8d87d250f78d1b89 (diff)
downloadGT5-Unofficial-32d74ba4d4f17af68335c5af3fcc44e20da25fd0.tar.gz
GT5-Unofficial-32d74ba4d4f17af68335c5af3fcc44e20da25fd0.tar.bz2
GT5-Unofficial-32d74ba4d4f17af68335c5af3fcc44e20da25fd0.zip
With recent changes, Allow PA to handle cell-less recipes (#1346)
* add recipe maps, and allow PA to handle more than 1 fluid output * add some null checks * add forestry combs to the recipe map * safety null checks. * spotless
-rw-r--r--src/main/java/gregtech/api/util/GT_Forestry_Compat.java2
-rw-r--r--src/main/java/gregtech/api/util/GT_Recipe.java48
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java23
-rw-r--r--src/main/java/gregtech/common/GT_RecipeAdder.java198
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java18
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java11
6 files changed, 290 insertions, 10 deletions
diff --git a/src/main/java/gregtech/api/util/GT_Forestry_Compat.java b/src/main/java/gregtech/api/util/GT_Forestry_Compat.java
index 6e73c099cb..1edfd836f3 100644
--- a/src/main/java/gregtech/api/util/GT_Forestry_Compat.java
+++ b/src/main/java/gregtech/api/util/GT_Forestry_Compat.java
@@ -137,6 +137,8 @@ public class GT_Forestry_Compat {
}
GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes.addRecipe(
true, new ItemStack[] {tRecipe.getInput()}, tOutputs, null, tChances, null, null, 128, 5, 0);
+ GT_Recipe.GT_Recipe_Map.sMultiblockCentrifugeRecipes.addRecipe(
+ true, new ItemStack[] {tRecipe.getInput()}, tOutputs, null, tChances, null, null, 128, 5, 0);
}
} catch (Throwable e) {
if (GT_Values.D1) {
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java
index 1ab29c067b..26cff0b262 100644
--- a/src/main/java/gregtech/api/util/GT_Recipe.java
+++ b/src/main/java/gregtech/api/util/GT_Recipe.java
@@ -2142,6 +2142,54 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
" EU",
true,
true);
+ public static final GT_Recipe_Map sMultiblockElectrolyzerRecipes = new GT_Recipe_Map(
+ new HashSet<>(300),
+ "gt.recipe.largeelectrolyzer",
+ "Large(PA) Electrolyzer",
+ null,
+ RES_PATH_GUI + "basicmachines/LCRNEI",
+ 1,
+ 9,
+ 0,
+ 0,
+ 1,
+ "",
+ 0,
+ "",
+ true,
+ false);
+ public static final GT_Recipe_Map sMultiblockCentrifugeRecipes = new GT_Recipe_Map(
+ new HashSet<>(1200),
+ "gt.recipe.largecentrifuge",
+ "Large(PA) Centrifuge",
+ null,
+ RES_PATH_GUI + "basicmachines/LCRNEI",
+ 1,
+ 9,
+ 0,
+ 0,
+ 1,
+ "",
+ 0,
+ "",
+ true,
+ false);
+ public static final GT_Recipe_Map sMultiblockMixerRecipes = new GT_Recipe_Map(
+ new HashSet<>(900),
+ "gt.recipe.largemixer",
+ "Large(PA) Mixer",
+ null,
+ RES_PATH_GUI + "basicmachines/LCRNEI",
+ 9,
+ 3,
+ 0,
+ 0,
+ 1,
+ "",
+ 0,
+ "",
+ true,
+ false);
public static final GT_Recipe_Map_LargeBoilerFakeFuels sLargeBoilerFakeFuels =
new GT_Recipe_Map_LargeBoilerFakeFuels();
diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java
index 5898e5fd14..270619363f 100644
--- a/src/main/java/gregtech/api/util/GT_Utility.java
+++ b/src/main/java/gregtech/api/util/GT_Utility.java
@@ -4254,6 +4254,29 @@ public class GT_Utility {
return Textures.BlockIcons.ERROR_TEXTURE_INDEX;
}
+ public static boolean isCellEmpty(ItemStack itemStack) {
+ if (itemStack == null) return false;
+ ItemStack tStack = ItemList.Cell_Empty.get(1);
+ tStack.stackSize = itemStack.stackSize;
+ return GT_Utility.areStacksEqual(itemStack, tStack);
+ }
+
+ public static FluidStack convertCellToFluid(ItemStack itemStack) {
+ if (itemStack == null) return null;
+ if (getFluidForFilledItem(itemStack, true) != null) {
+ FluidStack fluidStack = getFluidForFilledItem(itemStack, true);
+ if (fluidStack != null) fluidStack.amount = fluidStack.amount * itemStack.stackSize;
+ return fluidStack;
+ }
+ return null;
+ }
+
+ public static boolean checkIfSameIntegratedCircuit(ItemStack itemStack) {
+ if (itemStack == null) return false;
+ for (int i = 0; i < 25; i++) if (itemStack.isItemEqual(GT_Utility.getIntegratedCircuit(i))) return true;
+ return false;
+ }
+
@AutoValue
public abstract static class ItemId {
/** This method copies NBT, as it is mutable. */
diff --git a/src/main/java/gregtech/common/GT_RecipeAdder.java b/src/main/java/gregtech/common/GT_RecipeAdder.java
index b8a76d8980..01327b881f 100644
--- a/src/main/java/gregtech/common/GT_RecipeAdder.java
+++ b/src/main/java/gregtech/common/GT_RecipeAdder.java
@@ -223,6 +223,45 @@ public class GT_RecipeAdder implements IGT_RecipeAdder {
aDuration,
aEUt,
aCleanroom ? -100 : 0);
+ ItemStack[] itemInputs = {aInput1, aInput2};
+ ItemStack[] itemOutputs = {aOutput1, aOutput2, aOutput3, aOutput4, aOutput5, aOutput6};
+ FluidStack[] fluidInputs = {aFluidInput, null, null};
+ FluidStack[] fluidOutputs = {aFluidOutput, null, null, null, null, null, null};
+
+ byte iNumber = 0;
+ byte oNumber = 0;
+
+ for (ItemStack item : itemInputs) {
+ if (item != null) {
+ if (GT_Utility.getFluidForFilledItem(aInput1, true) != null || GT_Utility.isCellEmpty(item)) {
+ fluidInputs[iNumber + 1] = GT_Utility.convertCellToFluid(item);
+ itemInputs[iNumber] = null;
+ }
+ }
+ iNumber++;
+ }
+
+ for (ItemStack item : itemOutputs) {
+ if (item != null) {
+ if (GT_Utility.getFluidForFilledItem(item, true) != null || GT_Utility.isCellEmpty(item)) {
+ fluidOutputs[oNumber + 1] = GT_Utility.convertCellToFluid(item);
+ itemOutputs[oNumber] = null;
+ }
+ }
+ oNumber++;
+ }
+
+ GT_Recipe.GT_Recipe_Map.sMultiblockCentrifugeRecipes.addRecipe(
+ false,
+ itemInputs,
+ itemOutputs,
+ null,
+ aChances,
+ fluidInputs,
+ fluidOutputs,
+ aDuration,
+ aEUt,
+ aCleanroom ? -100 : 0);
return true;
}
@@ -308,6 +347,38 @@ public class GT_RecipeAdder implements IGT_RecipeAdder {
aDuration,
aEUt,
0);
+ ItemStack[] itemInputs = {aInput1, aInput2};
+ ItemStack[] itemOutputs = {aOutput1, aOutput2, aOutput3, aOutput4, aOutput5, aOutput6};
+ FluidStack[] fluidInputs = {aFluidInput, null, null};
+ FluidStack[] fluidOutputs = {aFluidOutput, null, null, null, null, null, null};
+
+ byte iNumber = 0;
+ byte oNumber = 0;
+
+ for (ItemStack item : itemInputs) {
+ if (item != null) {
+ if (GT_Utility.getFluidForFilledItem(aInput1, true) != null
+ || GT_Utility.isCellEmpty(item)
+ || GT_Utility.checkIfSameIntegratedCircuit(item)) {
+ fluidInputs[iNumber + 1] = GT_Utility.convertCellToFluid(item);
+ itemInputs[iNumber] = null;
+ }
+ }
+ iNumber++;
+ }
+
+ for (ItemStack item : itemOutputs) {
+ if (item != null) {
+ if (GT_Utility.getFluidForFilledItem(item, true) != null || GT_Utility.isCellEmpty(item)) {
+ fluidOutputs[oNumber + 1] = GT_Utility.convertCellToFluid(item);
+ itemOutputs[oNumber] = null;
+ }
+ }
+ oNumber++;
+ }
+
+ GT_Recipe.GT_Recipe_Map.sMultiblockElectrolyzerRecipes.addRecipe(
+ false, itemInputs, itemOutputs, null, aChances, fluidInputs, fluidOutputs, aDuration, aEUt, 0);
return true;
}
@@ -2423,6 +2494,36 @@ public class GT_RecipeAdder implements IGT_RecipeAdder {
aDuration,
aEUt,
0);
+ ItemStack[] itemInputs = {aInput1, aInput2, aInput3, aInput4, aInput5, aInput6, aInput7, aInput8, aInput9};
+ ItemStack[] itemOutputs = {aOutput};
+ FluidStack[] fluidInputs = {aFluidInput, null, null, null, null, null, null, null, null, null};
+ FluidStack[] fluidOutputs = {aFluidOutput, null};
+
+ byte iNumber = 0;
+ byte oNumber = 0;
+
+ for (ItemStack item : itemInputs) {
+ if (item != null) {
+ if (GT_Utility.getFluidForFilledItem(aInput1, true) != null || GT_Utility.isCellEmpty(item)) {
+ fluidInputs[iNumber + 1] = GT_Utility.convertCellToFluid(item);
+ itemInputs[iNumber] = null;
+ }
+ }
+ iNumber++;
+ }
+
+ for (ItemStack item : itemOutputs) {
+ if (item != null) {
+ if (GT_Utility.getFluidForFilledItem(item, true) != null || GT_Utility.isCellEmpty(item)) {
+ fluidOutputs[oNumber + 1] = GT_Utility.convertCellToFluid(item);
+ itemOutputs[oNumber] = null;
+ }
+ }
+ oNumber++;
+ }
+
+ GT_Recipe.GT_Recipe_Map.sMultiblockMixerRecipes.addRecipe(
+ false, itemInputs, itemOutputs, null, null, fluidInputs, fluidOutputs, aDuration, aEUt, 0);
return true;
}
@@ -2445,6 +2546,73 @@ public class GT_RecipeAdder implements IGT_RecipeAdder {
aDuration,
aEUt,
0);
+ List<ItemStack> tItemInputList;
+ if (ItemInputArray == null) {
+ tItemInputList = new ArrayList<>(1);
+ } else {
+ tItemInputList = new ArrayList<>(Arrays.asList(ItemInputArray));
+ }
+ List<FluidStack> tFluidInputList;
+ if (FluidInputArray != null) {
+ tFluidInputList = new ArrayList<>(Arrays.asList(FluidInputArray));
+ } else {
+ tFluidInputList = new ArrayList<>(1);
+ }
+ for (int i = 0; i < tItemInputList.size(); i++) {
+ if (tItemInputList.get(i) != null) {
+ if (GT_Utility.getFluidForFilledItem(tItemInputList.get(i), true) != null
+ || GT_Utility.isCellEmpty(tItemInputList.get(i))) {
+ tFluidInputList.add(GT_Utility.convertCellToFluid(tItemInputList.get(i)));
+ tItemInputList.set(i, null);
+ }
+ }
+ }
+ List<ItemStack> tItemOutputList;
+ if (ItemInputArray == null) {
+ tItemOutputList = new ArrayList<>(1);
+ } else {
+ tItemOutputList = new ArrayList<>(Arrays.asList(ItemInputArray));
+ }
+ List<FluidStack> tFluidOutputList;
+ if (FluidOutputArray != null) {
+ tFluidOutputList = new ArrayList<>(Arrays.asList(FluidOutputArray));
+ ;
+ } else {
+ tFluidOutputList = new ArrayList<>(1);
+ }
+ for (int i = 0; i < tItemOutputList.size(); i++) {
+ if (tItemOutputList.get(i) != null) {
+ if (GT_Utility.getFluidForFilledItem(tItemOutputList.get(i), true) != null
+ || GT_Utility.isCellEmpty(tItemOutputList.get(i))) {
+ tFluidInputList.add(GT_Utility.convertCellToFluid(tItemOutputList.get(i)));
+ tItemOutputList.set(i, null);
+ }
+ }
+ }
+
+ ItemStack[] tItemInputArray = new ItemStack[tItemInputList.size()];
+ for (int i = 0; i < tItemInputArray.length; i++) tItemInputArray[i] = tItemInputList.get(i);
+
+ FluidStack[] tFluidInputArray = new FluidStack[tFluidInputList.size()];
+ for (int i = 0; i < tFluidInputArray.length; i++) tFluidInputArray[i] = tFluidInputList.get(i);
+
+ ItemStack[] tItemOutputArray = new ItemStack[tItemOutputList.size()];
+ for (int i = 0; i < tItemOutputArray.length; i++) tItemOutputArray[i] = tItemOutputList.get(i);
+
+ FluidStack[] tFluidOutputArray = new FluidStack[tFluidOutputList.size()];
+ for (int i = 0; i < tFluidOutputArray.length; i++) tFluidOutputArray[i] = tFluidOutputList.get(i);
+
+ GT_Recipe.GT_Recipe_Map.sMultiblockMixerRecipes.addRecipe(
+ false,
+ tItemInputArray,
+ tItemOutputArray,
+ null,
+ null,
+ tFluidInputArray,
+ tFluidOutputArray,
+ aDuration,
+ aEUt,
+ 0);
return true;
}
@@ -2491,6 +2659,36 @@ public class GT_RecipeAdder implements IGT_RecipeAdder {
aDuration,
aEUt,
0);
+ ItemStack[] itemInputs = {aInput1, aInput2, aInput3, aInput4, aInput5, aInput6, aInput7, aInput8, aInput9};
+ ItemStack[] itemOutputs = {aOutput1, aOutput2, aOutput3, aOutput4};
+ FluidStack[] fluidInputs = {aFluidInput, null, null, null, null, null, null, null, null, null};
+ FluidStack[] fluidOutputs = {aFluidOutput, null, null, null, null};
+
+ byte iNumber = 0;
+ byte oNumber = 0;
+
+ for (ItemStack item : itemInputs) {
+ if (item != null) {
+ if (GT_Utility.getFluidForFilledItem(aInput1, true) != null || GT_Utility.isCellEmpty(item)) {
+ fluidInputs[iNumber + 1] = GT_Utility.convertCellToFluid(item);
+ itemInputs[iNumber] = null;
+ }
+ }
+ iNumber++;
+ }
+
+ for (ItemStack item : itemOutputs) {
+ if (item != null) {
+ if (GT_Utility.getFluidForFilledItem(item, true) != null || GT_Utility.isCellEmpty(item)) {
+ fluidOutputs[oNumber + 1] = GT_Utility.convertCellToFluid(item);
+ itemOutputs[oNumber] = null;
+ }
+ }
+ oNumber++;
+ }
+
+ GT_Recipe.GT_Recipe_Map.sMultiblockMixerRecipes.addRecipe(
+ false, itemInputs, itemOutputs, null, null, fluidInputs, fluidOutputs, aDuration, aEUt, 0);
return true;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
index 538290a4e8..0e68b0f312 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
@@ -330,8 +330,10 @@ public class GT_MetaTileEntity_ProcessingArray
tOut[h].stackSize = 0;
}
}
- FluidStack tFOut = null;
- if (aRecipe.getFluidOutput(0) != null) tFOut = aRecipe.getFluidOutput(0).copy();
+ FluidStack[] tFOut = new FluidStack[aRecipe.mFluidOutputs.length];
+ for (int i = 0; i < aRecipe.mFluidOutputs.length; i++)
+ if (aRecipe.getFluidOutput(i) != null)
+ tFOut[i] = aRecipe.getFluidOutput(i).copy();
for (int f = 0; f < tOut.length; f++) {
if (aRecipe.mOutputs[f] != null && tOut[f] != null) {
for (int g = 0; g < parallel; g++) {
@@ -340,9 +342,13 @@ public class GT_MetaTileEntity_ProcessingArray
}
}
}
- if (tFOut != null) {
- int tSize = tFOut.amount;
- tFOut.amount = tSize * parallel;
+ byte oNumber = 0;
+ for (FluidStack fluidStack : tFOut) {
+ if (fluidStack != null) {
+ int tSize = fluidStack.amount;
+ tFOut[oNumber].amount = tSize * parallel;
+ }
+ oNumber++;
}
this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
this.mOutputItems = Arrays.stream(tOut)
@@ -350,7 +356,7 @@ public class GT_MetaTileEntity_ProcessingArray
.flatMap(GT_MetaTileEntity_ProcessingArray::splitOversizedStack)
.filter(is -> is.stackSize > 0)
.toArray(ItemStack[]::new);
- this.mOutputFluids = new FluidStack[] {tFOut};
+ this.mOutputFluids = tFOut;
updateSlots();
return true;
}
diff --git a/src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java
index c9564dcd4a..b758ab2004 100644
--- a/src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java
+++ b/src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java
@@ -24,11 +24,13 @@ public class GT_ProcessingArrayRecipeLoader {
// Canner
GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.canner", GT_Recipe_Map.sCannerRecipes);
// Centrifuge
- GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.centrifuge", GT_Recipe_Map.sCentrifugeRecipes);
+ GT_ProcessingArray_Manager.addRecipeMapToPA(
+ "basicmachine.centrifuge", GT_Recipe_Map.sMultiblockCentrifugeRecipes);
// Chemical Bath
GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.chemicalbath", GT_Recipe_Map.sChemicalBathRecipes);
// Chemical Reactor
- GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.chemicalreactor", GT_Recipe_Map.sChemicalRecipes);
+ GT_ProcessingArray_Manager.addRecipeMapToPA(
+ "basicmachine.chemicalreactor", GT_Recipe_Map.sMultiblockChemicalRecipes);
// Circuit Assembler
GT_ProcessingArray_Manager.addRecipeMapToPA(
"basicmachine.circuitassembler", GT_Recipe_Map.sCircuitAssemblerRecipes);
@@ -39,7 +41,8 @@ public class GT_ProcessingArrayRecipeLoader {
// Distillery
GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.distillery", GT_Recipe_Map.sDistilleryRecipes);
// Electrolyzer
- GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.electrolyzer", GT_Recipe_Map.sElectrolyzerRecipes);
+ GT_ProcessingArray_Manager.addRecipeMapToPA(
+ "basicmachine.electrolyzer", GT_Recipe_Map.sMultiblockElectrolyzerRecipes);
// Extractor
GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.extractor", GT_Recipe_Map.sExtractorRecipes);
// Extruder
@@ -74,7 +77,7 @@ public class GT_ProcessingArrayRecipeLoader {
// Microwave
GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.microwave", GT_Recipe_Map.sMicrowaveRecipes);
// Mixer
- GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.mixer", GT_Recipe_Map.sMixerRecipes);
+ GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.mixer", GT_Recipe_Map.sMultiblockMixerRecipes);
// Ore Washer
GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.orewasher", GT_Recipe_Map.sOreWasherRecipes);
// Plasma Arc Furnace