aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util
diff options
context:
space:
mode:
authorHoleFish <48403212+HoleFish@users.noreply.github.com>2024-08-24 02:40:15 +0800
committerGitHub <noreply@github.com>2024-08-23 18:40:15 +0000
commit59f7b8c34641851010999dc31f59f996a5e7a3ff (patch)
tree83b9353eb1a5ccd3d04f334159c95fdaf8275bcd /src/main/java/gregtech/api/util
parenteb34e71e22177fb2d8072522eb7f3e5401b84eea (diff)
downloadGT5-Unofficial-59f7b8c34641851010999dc31f59f996a5e7a3ff.tar.gz
GT5-Unofficial-59f7b8c34641851010999dc31f59f996a5e7a3ff.tar.bz2
GT5-Unofficial-59f7b8c34641851010999dc31f59f996a5e7a3ff.zip
Add recipemap for EBF gas recipes (#2931)
add Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gregtech/api/util')
-rw-r--r--src/main/java/gregtech/api/util/BlastFurnaceGasStat.java91
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeConstants.java78
2 files changed, 169 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/util/BlastFurnaceGasStat.java b/src/main/java/gregtech/api/util/BlastFurnaceGasStat.java
new file mode 100644
index 0000000000..ac1601e846
--- /dev/null
+++ b/src/main/java/gregtech/api/util/BlastFurnaceGasStat.java
@@ -0,0 +1,91 @@
+package gregtech.api.util;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import net.minecraftforge.fluids.FluidStack;
+
+import com.github.bartimaeusnek.bartworks.system.material.Werkstoff;
+import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader;
+
+import gregtech.api.enums.Materials;
+
+public class BlastFurnaceGasStat {
+
+ public enum Gases {
+
+ Nitrogen(new BlastFurnaceGasStat(Materials.Nitrogen.getGas(1L), 1.0, 1.0)),
+ Helium(new BlastFurnaceGasStat(Materials.Helium.getGas(1L), 0.9, 1.0)),
+ Argon(new BlastFurnaceGasStat(Materials.Argon.getGas(1L), 0.8, 0.85)),
+ Radon(new BlastFurnaceGasStat(Materials.Radon.getGas(1L), 0.7, 0.7)),
+ Neon(new BlastFurnaceGasStat(WerkstoffLoader.Neon)),
+ Krypton(new BlastFurnaceGasStat(WerkstoffLoader.Krypton)),
+ Xenon(new BlastFurnaceGasStat(WerkstoffLoader.Xenon)),
+ Oganesson(new BlastFurnaceGasStat(WerkstoffLoader.Oganesson));
+
+ public final BlastFurnaceGasStat stat;
+
+ Gases(BlastFurnaceGasStat stat) {
+ this.stat = stat;
+ }
+ }
+
+ public static List<BlastFurnaceGasStat> NOBLE_GASES;
+ public static List<BlastFurnaceGasStat> ANAEROBE_GASES;
+ public static List<BlastFurnaceGasStat> NOBLE_AND_ANAEROBE_GASES;
+ FluidStack gas;
+ double recipeTimeMultiplier;
+ double recipeConsumedAmountMultiplier;
+
+ public BlastFurnaceGasStat(FluidStack gas, double recipeTimeMultiplier, double recipeConsumedAmountMultiplier) {
+ this.gas = gas;
+ this.recipeTimeMultiplier = recipeTimeMultiplier;
+ this.recipeConsumedAmountMultiplier = recipeConsumedAmountMultiplier;
+ }
+
+ public BlastFurnaceGasStat(Werkstoff material) {
+ this(
+ material.getFluidOrGas(1),
+ material.getStats()
+ .getEbfGasRecipeTimeMultiplier(),
+ material.getStats()
+ .getEbfGasRecipeConsumedAmountMultiplier());
+ }
+
+ public static Collection<BlastFurnaceGasStat> getNobleGases() {
+ if (NOBLE_GASES == null) {
+ NOBLE_GASES = Arrays.asList(
+ Gases.Helium.stat,
+ Gases.Argon.stat,
+ Gases.Radon.stat,
+ Gases.Neon.stat,
+ Gases.Krypton.stat,
+ Gases.Xenon.stat,
+ Gases.Oganesson.stat);
+ }
+ return NOBLE_GASES;
+ }
+
+ public static Collection<BlastFurnaceGasStat> getAnaerobeGases() {
+ if (ANAEROBE_GASES == null) {
+ ANAEROBE_GASES = Arrays.asList(Gases.Nitrogen.stat, Gases.Xenon.stat, Gases.Oganesson.stat);
+ }
+ return ANAEROBE_GASES;
+ }
+
+ public static Collection<BlastFurnaceGasStat> getNobleAndAnaerobeGases() {
+ if (NOBLE_AND_ANAEROBE_GASES == null) {
+ NOBLE_AND_ANAEROBE_GASES = Arrays.asList(
+ Gases.Nitrogen.stat,
+ Gases.Helium.stat,
+ Gases.Argon.stat,
+ Gases.Radon.stat,
+ Gases.Neon.stat,
+ Gases.Krypton.stat,
+ Gases.Xenon.stat,
+ Gases.Oganesson.stat);
+ }
+ return NOBLE_AND_ANAEROBE_GASES;
+ }
+}
diff --git a/src/main/java/gregtech/api/util/GT_RecipeConstants.java b/src/main/java/gregtech/api/util/GT_RecipeConstants.java
index 22dc842941..7077654fb4 100644
--- a/src/main/java/gregtech/api/util/GT_RecipeConstants.java
+++ b/src/main/java/gregtech/api/util/GT_RecipeConstants.java
@@ -22,8 +22,10 @@ import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.TierEU;
import gregtech.api.interfaces.IRecipeMap;
+import gregtech.api.objects.ItemData;
import gregtech.api.recipe.RecipeCategories;
import gregtech.api.recipe.RecipeMaps;
import gregtech.api.recipe.RecipeMetadataKey;
@@ -201,6 +203,14 @@ public class GT_RecipeConstants {
public static final RecipeMetadataKey<Integer> DECAY_TICKS = SimpleRecipeMetadataKey
.create(Integer.class, "decay_ticks");
+ public static final RecipeMetadataKey<Boolean> NOBLE_GASES = SimpleRecipeMetadataKey
+ .create(Boolean.class, "noble_gases");
+
+ public static final RecipeMetadataKey<Boolean> ANAEROBE_GASES = SimpleRecipeMetadataKey
+ .create(Boolean.class, "anaerobe_gases");
+
+ public static final RecipeMetadataKey<Boolean> NO_GAS = SimpleRecipeMetadataKey.create(Boolean.class, "no_gas");
+
/**
* Add a arc furnace recipe. Adds to both normal arc furnace and plasma arc furnace.
* Will override the fluid input with oxygen/plasma for the respective recipe maps, so there is no point setting it.
@@ -514,6 +524,74 @@ public class GT_RecipeConstants {
});
/**
+ * Adds an Electric Blast Furnace recipe that might use gas.
+ */
+ public static final IRecipeMap BlastFurnaceWithGas = IRecipeMap.newRecipeMap(builder -> {
+ Collection<GT_Recipe> ret = new ArrayList<>();
+ int basicGasAmount = builder.getMetadataOrDefault(ADDITIVE_AMOUNT, 1000);
+ double durationBase = builder.getDuration();
+ ArrayList<ItemStack> items = new ArrayList<>(Arrays.asList(builder.getItemInputsBasic()));
+ int circuitConfig = 1;
+ if (items.size() == 1) {// Set circuit config if it is a dust -> ingot recipe.
+ ItemData data = GT_OreDictUnificator.getAssociation(items.get(0));
+ if (data != null) {
+ OrePrefixes prefix = data.mPrefix;
+ if (OrePrefixes.dust.equals(prefix)) {
+ circuitConfig = 1;
+ } else if (OrePrefixes.dustSmall.equals(prefix)) {
+ circuitConfig = 4;
+ } else if (OrePrefixes.dustTiny.equals(prefix)) {
+ circuitConfig = 9;
+ }
+ }
+ } else { // Set circuit config if there is an integrated circuit
+ for (int i = 0; i < items.size(); i++) {
+ if (GT_Utility.isAnyIntegratedCircuit(items.get(i))) {
+ circuitConfig = items.get(i)
+ .getItemDamage();
+ items.remove(i--);
+ }
+ }
+ }
+
+ if (builder.getMetadataOrDefault(NO_GAS, false)) {
+ items.add(GT_Utility.getIntegratedCircuit(circuitConfig));
+ ret.addAll(
+ builder.copy()
+ .itemInputs(items.toArray(new ItemStack[0]))
+ .fluidInputs()
+ .duration((int) Math.max(durationBase * 1.1, 1))
+ .addTo(RecipeMaps.blastFurnaceRecipes));
+ items.remove(items.size() - 1);
+ circuitConfig += 10;
+ }
+
+ items.add(GT_Utility.getIntegratedCircuit(circuitConfig));
+ boolean nobleGases = builder.getMetadataOrDefault(NOBLE_GASES, false);
+ boolean anaerobeGases = builder.getMetadataOrDefault(ANAEROBE_GASES, false);
+ Collection<BlastFurnaceGasStat> gases = new ArrayList<>();
+
+ if (nobleGases && anaerobeGases) {
+ gases = BlastFurnaceGasStat.getNobleAndAnaerobeGases();
+ } else if (nobleGases) {
+ gases = BlastFurnaceGasStat.getNobleGases();
+ } else if (anaerobeGases) {
+ gases = BlastFurnaceGasStat.getAnaerobeGases();
+ }
+ for (BlastFurnaceGasStat gas : gases) {
+ int gasAmount = (int) (gas.recipeConsumedAmountMultiplier * basicGasAmount);
+ int duration = (int) Math.max(gas.recipeTimeMultiplier * durationBase, 1);
+ ret.addAll(
+ builder.copy()
+ .itemInputs(items.toArray(new ItemStack[0]))
+ .fluidInputs(GT_Utility.copyAmount(gasAmount, gas.gas))
+ .duration(duration)
+ .addTo(RecipeMaps.blastFurnaceRecipes));
+ }
+ return ret;
+ });
+
+ /**
* Just like any normal assembler recipe, however it accepts one input item to be oredicted. Pass in the item to
* oredict via {@link #OREDICT_INPUT}. It will be used along all other item inputs as input of this recipe.
*/