diff options
author | Glease <4586901+Glease@users.noreply.github.com> | 2022-12-24 04:12:36 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-23 21:12:36 +0100 |
commit | d8a737faaba655253666b343c052ea2ce61221ca (patch) | |
tree | 781d5cd83a9bd204e096c83fcaeb5a61040e276c /src/main/java/gregtech | |
parent | d0d00ccb75318793c0fcd0a05c60affb403bfa96 (diff) | |
download | GT5-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')
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) { |