aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech
diff options
context:
space:
mode:
authorGlease <4586901+Glease@users.noreply.github.com>2022-12-24 04:12:36 +0800
committerGitHub <noreply@github.com>2022-12-23 21:12:36 +0100
commitd8a737faaba655253666b343c052ea2ce61221ca (patch)
tree781d5cd83a9bd204e096c83fcaeb5a61040e276c /src/main/java/gregtech
parentd0d00ccb75318793c0fcd0a05c60affb403bfa96 (diff)
downloadGT5-Unofficial-d8a737faaba655253666b343c052ea2ce61221ca.tar.gz
GT5-Unofficial-d8a737faaba655253666b343c052ea2ce61221ca.tar.bz2
GT5-Unofficial-d8a737faaba655253666b343c052ea2ce61221ca.zip
add NEI handler for ic2 fuel rods (#1580)
* add NEI handler for ic2 fuel rods Signed-off-by: Glease <4586901+Glease@users.noreply.github.com> * fix typo Signed-off-by: Glease <4586901+Glease@users.noreply.github.com> * rename variable to cover up the original intention Signed-off-by: Glease <4586901+Glease@users.noreply.github.com> Signed-off-by: Glease <4586901+Glease@users.noreply.github.com>
Diffstat (limited to 'src/main/java/gregtech')
-rw-r--r--src/main/java/gregtech/GT_Mod.java1
-rw-r--r--src/main/java/gregtech/api/gui/modularui/GT_UITextures.java2
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java29
-rw-r--r--src/main/java/gregtech/api/items/GT_BreederCell_Item.java25
-rw-r--r--src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java11
-rw-r--r--src/main/java/gregtech/api/util/GT_Recipe.java60
-rw-r--r--src/main/java/gregtech/common/GT_RecipeAdder.java40
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_FakeRecipeLoader.java20
-rw-r--r--src/main/java/gregtech/nei/IMCForNEI.java2
9 files changed, 186 insertions, 4 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
index 4c45a34925..9dd563c701 100644
--- a/src/main/java/gregtech/GT_Mod.java
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -368,6 +368,7 @@ public class GT_Mod implements IGT_Mod {
new GT_BlockResistanceLoader().run();
new GT_RecyclerBlacklistLoader().run();
new GT_MinableRegistrator().run();
+ new GT_FakeRecipeLoader().run();
new GT_MachineRecipeLoader().run();
new GT_ScrapboxDropLoader().run();
new GT_CropLoader().run();
diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
index b82876d5cf..a92ff64df6 100644
--- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
+++ b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
@@ -265,6 +265,8 @@ public class GT_UITextures {
public static final AdaptableUITexture PICTURE_SCREEN_BLACK =
AdaptableUITexture.of(MODID, "gui/picture/screen_black", 16, 16, 2);
+ public static final UITexture PICTURE_RADIATION_WARNING =
+ UITexture.fullImage(MODID, "gui/picture/radiation_warning");
public static final UITexture PICTURE_GT_LOGO_17x17_TRANSPARENT =
UITexture.fullImage(MODID, "gui/picture/gt_logo_17x17_transparent");
public static final UITexture PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY =
diff --git a/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java b/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java
index 2dd5ab9fa0..bcb5cc5402 100644
--- a/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java
+++ b/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java
@@ -1,5 +1,6 @@
package gregtech.api.interfaces.internal;
+import gregtech.api.util.GT_Recipe;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
@@ -1323,4 +1324,32 @@ public interface IGT_RecipeAdder {
int aDuration,
int aEUt,
int aSpecialValue);
+
+ /**
+ * Add a breeder cell.
+ * @param input raw stack. should be undamaged.
+ * @param output breed output
+ * @param heatMultiplier bonus progress per neutron pulse per heat step
+ * @param heatStep divisor for hull heat
+ * @param reflector true if also acts as a neutron reflector, false otherwise.
+ * @param requiredPulses progress required to complete breeding
+ * @return added fake recipe
+ */
+ GT_Recipe addIC2ReactorBreederCell(
+ ItemStack input, ItemStack output, boolean reflector, int heatStep, int heatMultiplier, int requiredPulses);
+
+ /**
+ * Add a fuel cell.
+ * @param input raw stack. should be undamaged.
+ * @param output depleted stack
+ * @param aMox true if has mox behavior, false if uranium behavior.
+ * @param aHeat inherent heat output multiplier of the fuel material. should not add the extra heat from being
+ * a multi-cell!
+ * @param aEnergy inherent energy output multiplier of the fuel material. should not add the extra energy from
+ * being a multi-cell!
+ * @param aCells cell count
+ * @return added fake recipe
+ */
+ GT_Recipe addIC2ReactorFuelCell(
+ ItemStack input, ItemStack output, boolean aMox, float aHeat, float aEnergy, int aCells);
}
diff --git a/src/main/java/gregtech/api/items/GT_BreederCell_Item.java b/src/main/java/gregtech/api/items/GT_BreederCell_Item.java
index 93bd95086f..05b73d730c 100644
--- a/src/main/java/gregtech/api/items/GT_BreederCell_Item.java
+++ b/src/main/java/gregtech/api/items/GT_BreederCell_Item.java
@@ -3,6 +3,7 @@ package gregtech.api.items;
import static gregtech.api.util.GT_Utility.formatNumbers;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
import gregtech.api.util.GT_Utility;
import ic2.api.reactor.IReactor;
import ic2.api.reactor.IReactorComponent;
@@ -25,6 +26,9 @@ public class GT_BreederCell_Item extends GT_Generic_Item implements IReactorComp
protected final int mHeatBonusStep;
protected final int mHeatBonusMultiplier;
protected ItemStack mProduct;
+ protected boolean deflector = false;
+ protected boolean hidden = false;
+ protected boolean neiAdded = false;
public GT_BreederCell_Item(
String aUnlocalized,
@@ -39,7 +43,24 @@ public class GT_BreederCell_Item extends GT_Generic_Item implements IReactorComp
this.mHeatBonusMultiplier = aHeatBonusMultiplier;
this.setMaxDamage(aRequiredPulse);
setNoRepair();
- GregTech_API.sAfterGTServerstart.add(() -> mProduct = aProduct.get());
+ GregTech_API.sAfterGTPostload.add(() -> {
+ mProduct = aProduct.get();
+ if (!hidden && !neiAdded) {
+ GT_Values.RA.addIC2ReactorBreederCell(
+ new ItemStack(this), mProduct, deflector, mHeatBonusStep, mHeatBonusMultiplier, getMaxDamage());
+ neiAdded = true;
+ }
+ });
+ }
+
+ public GT_BreederCell_Item setDeflector() {
+ deflector = true;
+ return this;
+ }
+
+ public GT_BreederCell_Item setHidden() {
+ hidden = true;
+ return this;
}
@Override
@@ -100,7 +121,7 @@ public class GT_BreederCell_Item extends GT_Generic_Item implements IReactorComp
else yourStack.setItemDamage(myLevel);
}
- return false;
+ return deflector;
}
protected int getNewDamage(IReactor reactor, ItemStack stack) {
diff --git a/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java b/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java
index 894c03db90..95c584fd6a 100644
--- a/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java
+++ b/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java
@@ -1,6 +1,7 @@
package gregtech.api.items;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
import gregtech.api.util.GT_Utility;
import ic2.api.reactor.IReactor;
import ic2.api.reactor.IReactorComponent;
@@ -12,6 +13,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implements IReactorComponent {
+ private static final int MYSTERIOUS_MULTIPLIER_HEAT = 4;
public final int numberOfCells;
public final float sEnergy;
public final int sRadiation;
@@ -38,6 +40,11 @@ public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implement
this.sHeat = aHeat;
this.sDepleted = aDepleted;
this.sMox = aMox;
+ if (aDepleted != null && aEnergy > 0 && aHeat > 0) {
+ // avoid adding depleted cells to recipe map
+ GT_Values.RA.addIC2ReactorFuelCell(
+ new ItemStack(this), aDepleted, aMox, aHeat * MYSTERIOUS_MULTIPLIER_HEAT, aEnergy, aCellcount);
+ }
}
private static int checkPulseable(IReactor reactor, int x, int y, ItemStack me, int mex, int mey, boolean heatrun) {
@@ -74,11 +81,11 @@ public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implement
// int heat = sumUp(pulses) * 4;
- int heat = triangularNumber(pulses) * 4;
+ int heat = triangularNumber(pulses) * MYSTERIOUS_MULTIPLIER_HEAT;
heat = getFinalHeat(reactor, yourStack, x, y, heat);
- ArrayList<ItemStackCoord> heatAcceptors = new ArrayList();
+ ArrayList<ItemStackCoord> heatAcceptors = new ArrayList<>();
checkHeatAcceptor(reactor, x - 1, y, heatAcceptors);
checkHeatAcceptor(reactor, x + 1, y, heatAcceptors);
checkHeatAcceptor(reactor, x, y - 1, heatAcceptors);
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java
index a4562acb3d..b13d164109 100644
--- a/src/main/java/gregtech/api/util/GT_Recipe.java
+++ b/src/main/java/gregtech/api/util/GT_Recipe.java
@@ -2479,6 +2479,8 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
.setUsualFluidOutputCount(0)
.setProgressBar(GT_UITextures.PROGRESSBAR_ASSEMBLE, ProgressBar.Direction.RIGHT);
+ public static final GT_Recipe_Map_IC2NuclearFake sIC2NuclearFakeRecipe = new GT_Recipe_Map_IC2NuclearFake();
+
/**
* HashMap of Recipes based on their Items
*/
@@ -5397,6 +5399,64 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
}
}
+ public static class GT_Recipe_Map_IC2NuclearFake extends GT_Recipe_Map {
+ public GT_Recipe_Map_IC2NuclearFake() {
+ super(
+ new HashSet<>(10),
+ "gt.recipe.ic2nuke",
+ "Fission",
+ null,
+ RES_PATH_GUI + "basicmachines/Default",
+ 1,
+ 1,
+ 1,
+ 0,
+ 1,
+ E,
+ 1,
+ E,
+ true,
+ true);
+ setLogo(GT_UITextures.PICTURE_RADIATION_WARNING);
+ setLogoPos(152, 24);
+ setNEIBackgroundSize(172, 60);
+ setProgressBar(GT_UITextures.PROGRESSBAR_ARROW, ProgressBar.Direction.RIGHT);
+ }
+
+ /**
+ * Add a breeder cell.
+ * @param input raw stack. should be undamaged.
+ * @param output breed output
+ * @param heatMultiplier bonus progress per neutron pulse per heat step
+ * @param heatStep divisor for hull heat
+ * @param reflector true if also acts as a neutron reflector, false otherwise.
+ * @param requiredPulses progress required to complete breeding
+ * @return added fake recipe
+ */
+ public GT_Recipe addBreederCell(
+ ItemStack input,
+ ItemStack output,
+ boolean reflector,
+ int heatStep,
+ int heatMultiplier,
+ int requiredPulses) {
+ return addFakeRecipe(
+ input,
+ output,
+ reflector ? "Neutron reflecting breeder cell" : "Heat neutral Breeder Cell",
+ String.format("Every %d reactor hull heat", heatStep),
+ String.format("increase speed by %d00%%", heatMultiplier),
+ String.format("Required pulses: %d", requiredPulses));
+ }
+
+ public GT_Recipe addFakeRecipe(ItemStack input, ItemStack output, String... neiDesc) {
+ GT_Recipe r = new GT_Recipe(
+ new ItemStack[] {input}, new ItemStack[] {output}, null, new int[] {10000}, null, null, 0, 0, 0);
+ r.setNeiDesc(neiDesc);
+ return addRecipe(r, true, true, false);
+ }
+ }
+
public static class GT_Recipe_Map_LargeChemicalReactor extends GT_Recipe_Map_LargeNEI {
private static final int TOTAL_INPUT_COUNT = 6;
private static final int OUTPUT_COUNT = 6;
diff --git a/src/main/java/gregtech/common/GT_RecipeAdder.java b/src/main/java/gregtech/common/GT_RecipeAdder.java
index ee056ddebd..ed2840e38e 100644
--- a/src/main/java/gregtech/common/GT_RecipeAdder.java
+++ b/src/main/java/gregtech/common/GT_RecipeAdder.java
@@ -16,6 +16,8 @@ import gregtech.api.objects.ItemData;
import gregtech.api.util.*;
import gregtech.api.util.GT_Recipe.GT_Recipe_AssemblyLine;
import gregtech.common.items.GT_IntegratedCircuit_Item;
+import ic2.core.init.MainConfig;
+import ic2.core.util.ConfigUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@@ -3358,6 +3360,44 @@ public class GT_RecipeAdder implements IGT_RecipeAdder {
return true;
}
+ @Override
+ public GT_Recipe addIC2ReactorBreederCell(
+ ItemStack input,
+ ItemStack output,
+ boolean reflector,
+ int heatStep,
+ int heatMultiplier,
+ int requiredPulses) {
+ return GT_Recipe.GT_Recipe_Map.sIC2NuclearFakeRecipe.addFakeRecipe(
+ input,
+ output,
+ reflector ? "Neutron reflecting Breeder" : "Heat neutral Breeder",
+ String.format("Every %d reactor hull heat", heatStep),
+ String.format("increase speed by %d00%%", heatMultiplier),
+ String.format("Required pulses: %d", requiredPulses));
+ }
+
+ @Override
+ public GT_Recipe addIC2ReactorFuelCell(
+ ItemStack input, ItemStack output, boolean aMox, float aHeat, float aEnergy, int aCells) {
+ // for the mysterious constant 5.0f,
+ // see ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric.getOfferedEnergy
+ // don't ask, just accept
+ int pulses = aCells / 2 + 1;
+ float nukePowerMult = 5.0f * ConfigUtil.getFloat(MainConfig.get(), "balance/energy/generator/nuclear");
+ return GT_Recipe.GT_Recipe_Map.sIC2NuclearFakeRecipe.addFakeRecipe(
+ input,
+ output,
+ aMox ? "MOX Model" : "Uranium Model",
+ "Neutron Pulse: " + aCells,
+ aCells == 1
+ ? String.format("Heat: %.1f * n1 * (n1 + 1)", aHeat / 2f)
+ : String.format("Heat: %.1f * (%d + n1) * (%d + n1)", aHeat * aCells / 2f, aCells, aCells + 1),
+ String.format(
+ "Energy: %.1f + n2 * %.1f EU/t",
+ aEnergy * aCells * pulses * nukePowerMult, aEnergy * nukePowerMult));
+ }
+
private boolean areItemsAndFluidsBothNull(ItemStack[] items, FluidStack[] fluids) {
boolean itemsNull = true;
if (items != null) {
diff --git a/src/main/java/gregtech/loaders/postload/GT_FakeRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_FakeRecipeLoader.java
new file mode 100644
index 0000000000..3e552cf0b2
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GT_FakeRecipeLoader.java
@@ -0,0 +1,20 @@
+package gregtech.loaders.postload;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.util.GT_ModHandler;
+
+public class GT_FakeRecipeLoader implements Runnable {
+ @Override
+ public void run() {
+ if (!GregTech_API.mIC2Classic) {
+ GT_Values.RA.addIC2ReactorBreederCell(
+ GT_ModHandler.getIC2Item("reactorLithiumCell", 1),
+ GT_ModHandler.getIC2Item("TritiumCell", 1),
+ true,
+ 3000,
+ 1,
+ 10000);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/nei/IMCForNEI.java b/src/main/java/gregtech/nei/IMCForNEI.java
index a168867fab..94b9186cbd 100644
--- a/src/main/java/gregtech/nei/IMCForNEI.java
+++ b/src/main/java/gregtech/nei/IMCForNEI.java
@@ -26,6 +26,8 @@ public class IMCForNEI {
sendCatalyst("gt.recipe.nanoforge", "gregtech:gt.blockmachines:357");
sendHandler("gt.recipe.pcbfactory", "gregtech:gt.blockmachines:356");
sendCatalyst("gt.recipe.pcbfactory", "gregtech:gt.blockmachines:356");
+ sendHandler("gt.recipe.ic2nuke", "IC2:blockGenerator:5");
+ sendCatalyst("gt.recipe.ic2nuke", "IC2:blockGenerator:5");
}
private static void sendHandler(String aName, String aBlock, int aMaxRecipesPerPage) {