From a628cfde78df9f419510aca196a8b8e67164eb16 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Tue, 25 Jan 2022 22:04:51 +0800 Subject: finish the XHE recipe and running system --- .../blocks/myFluids/FluidsBuilder.java | 13 +++ .../blocks/tileEntity/ExtremeHeatExchanger.java | 96 +++++++++++++++++++--- src/main/java/goodgenerator/loader/Loaders.java | 4 + .../java/goodgenerator/loader/RecipeLoader_02.java | 51 +++++++++++- .../java/goodgenerator/main/GoodGenerator.java | 1 + .../java/goodgenerator/util/MyRecipeAdder.java | 74 +++++++++++++++-- 6 files changed, 221 insertions(+), 18 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java b/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java index 57923a99ad..eb7879200f 100644 --- a/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java +++ b/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java @@ -24,6 +24,7 @@ public class FluidsBuilder { crackedNaquadahAsphalt_Heavily(); combustionPromotor(); coalTar(); + supercriticalSteam(); } public static void crackedNaquadahGas_Lightly(){ @@ -186,4 +187,16 @@ public class FluidsBuilder { GameRegistry.registerBlock(tmp2,"coalTar"); NEI_Config.hide(tmp2); } + + public static void supercriticalSteam(){ + Fluid tmp = BaseFluid.BuildFluid("supercriticalSteam"); + tmp.setGaseous(true) + .setTemperature(648) + .setUnlocalizedName("supercriticalSteam"); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("supercriticalSteam"); + tmp2.setBlockTextureName("supercriticalSteam"); + GameRegistry.registerBlock(tmp2,"supercriticalSteam"); + NEI_Config.hide(tmp2); + } } diff --git a/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java b/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java index 02d0cfa17a..13f7919100 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java @@ -6,6 +6,7 @@ import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.StructureDefinition; import goodgenerator.loader.Loaders; import goodgenerator.util.DescTextLocalization; +import goodgenerator.util.MyRecipeAdder; import gregtech.api.GregTech_API; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -14,6 +15,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_Utility; import ic2.core.Ic2Items; @@ -22,10 +25,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; import org.lwjgl.input.Keyboard; import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.GT_Values.V; import static gregtech.api.enums.Textures.BlockIcons.*; import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; @@ -33,12 +39,13 @@ public class ExtremeHeatExchanger extends GT_MetaTileEntity_MultiblockBase_EM im protected IStructureDefinition multiDefinition = null; - public static float penalty_per_config = 0.015f; + public static double penalty_per_config = 0.015d; protected int casingAmount = 0; protected GT_MetaTileEntity_Hatch_Input mHotFluidHatch; protected GT_MetaTileEntity_Hatch_Output mCooledFluidHatch; private boolean transformed = false; - private int transformed_threshold = 0; + private String hotName; + private MyRecipeAdder.ExtremeHeatExchangerRecipe tRunningRecipe; public ExtremeHeatExchanger(String name) { super(name); @@ -180,12 +187,17 @@ public class ExtremeHeatExchanger extends GT_MetaTileEntity_MultiblockBase_EM im @Override public void loadNBTData(NBTTagCompound aNBT) { transformed = aNBT.getBoolean("transformed"); + hotName = aNBT.getString("hotName"); + if (hotName != null) { + tRunningRecipe = MyRecipeAdder.mXHeatExchangerFuelMap.get(new Fluid(hotName)); + } super.loadNBTData(aNBT); } @Override public void saveNBTData(NBTTagCompound aNBT) { aNBT.setBoolean("transformed", transformed); + aNBT.setString("hotName", hotName); super.saveNBTData(aNBT); } @@ -203,19 +215,17 @@ public class ExtremeHeatExchanger extends GT_MetaTileEntity_MultiblockBase_EM im tt.addMachineType("Heat Exchanger/Plasma Heat Exchanger") .addInfo("Controller block for the Extreme Heat Exchanger.") .addInfo("Accept Hot fluid like lava, hot coolant or plasma.") - .addInfo("Output SC Steam/SH Steam/Steam ot other working fluid.") - .addInfo("Works like the normal Heat Exchanger with lava and hot coolant,") - .addInfo("but max input/output speed and threshold value is x10.") + .addInfo("Output SC Steam/SH Steam/Steam.") .addInfo("Check NEI for more info.") .addInfo(BLUE_PRINT_INFO) .addSeparator() .addController("Front bottom") - .addOtherStructurePart("Input Hatch: distilled water or other working fluid", "Hint block with dot 1") - .addOtherStructurePart("Output Hatch: SC Steam/SH Steam/Steam or other heated working fluid", "Hint block with dot 2") + .addOtherStructurePart("Input Hatch: distilled water", "Hint block with dot 1") + .addOtherStructurePart("Output Hatch: SC Steam/SH Steam/Steam", "Hint block with dot 2") .addOtherStructurePart("Input Hatch: Hot fluid or plasma", "Hint block with dot 3") .addOtherStructurePart("Output Hatch: Cold fluid", "Hint block with dot 4") .addMaintenanceHatch("Any Casing") - .addCasingInfo("obust Tungstensteel Machine Casings", 25) + .addCasingInfo("Robust Tungstensteel Machine Casings", 25) .toolTipFinisher("Good Generator"); if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { return tt.getInformation(); @@ -226,10 +236,71 @@ public class ExtremeHeatExchanger extends GT_MetaTileEntity_MultiblockBase_EM im @Override public boolean checkRecipe_EM(ItemStack aStack) { - this.mEfficiencyIncrease = 80; + tRunningRecipe = null; + if (mHotFluidHatch.getFluid() == null) + return true; + MyRecipeAdder.ExtremeHeatExchangerRecipe tRecipe = MyRecipeAdder.mXHeatExchangerFuelMap.get(mHotFluidHatch.getFluid().getFluid()); + if (tRecipe == null) + return false; + tRunningRecipe = tRecipe; + this.hotName = mHotFluidHatch.getFluid().getFluid().getName(); + int tMaxConsume = tRecipe.getMaxHotFluidConsume(); + int transformed_threshold = tRecipe.mSpecialValue; + int tRealConsume = Math.min(tMaxConsume, mHotFluidHatch.getFluid().amount); + double penalty = 0.0d; + double efficiency = 1d; + int shs_reduction_per_config = 150; + + if (mInventory[1] != null && mInventory[1].getUnlocalizedName().startsWith("gt.integrated_circuit")) { + int circuit_config = mInventory[1].getItemDamage(); + if (circuit_config >= 1 && circuit_config <= 25) { + penalty = (circuit_config - 1) * penalty_per_config; + transformed_threshold -= (shs_reduction_per_config * (circuit_config - 1)); + } + } + efficiency -= penalty; + + if (transformed_threshold <= 0) + transformed_threshold = 1; + + transformed = tRealConsume >= transformed_threshold; + + this.mMaxProgresstime = 20; + this.mEUt = (int) (tRecipe.getEUt() * efficiency * ((double) tRealConsume / (double) tMaxConsume)); + mHotFluidHatch.drain(tRealConsume, true); + mCooledFluidHatch.fill(new FluidStack(tRecipe.getCooledFluid(), tRealConsume), true); + this.mEfficiencyIncrease = 160; + return true; } + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.mEUt > 0 && tRunningRecipe != null) { + Fluid tReadySteam = transformed ? tRunningRecipe.getHeatedSteam() : tRunningRecipe.getNormalSteam(); + int waterAmount = (int) (this.mEUt / getUnitSteamPower(tReadySteam.getName())) / 160; + if (waterAmount < 0) return false; + if (depleteInput(GT_ModHandler.getDistilledWater(waterAmount))) { + addOutput(new FluidStack(tReadySteam, waterAmount * 160)); + } + else { + GT_Log.exp.println(this.mName+" had no more Distilled water!"); + mHotFluidHatch.getBaseMetaTileEntity().doExplosion(V[8]); + return false; + } + } + return true; + } + + public double getUnitSteamPower(String steam) { + switch (steam) { + case "steam": return 0.5; + case "ic2superheatedsteam": return 1; + case "supercriticalsteam": return 100; + default: return -1; + } + } + @Override public void construct(ItemStack stackSize, boolean hintsOnly) { structureBuild_EM(mName, 2, 5, 0, hintsOnly, stackSize); @@ -252,6 +323,7 @@ public class ExtremeHeatExchanger extends GT_MetaTileEntity_MultiblockBase_EM im @Override public String[] getInfoData() { + int tThreshold = tRunningRecipe != null ? tRunningRecipe.mSpecialValue : 0; return new String[]{ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(mProgresstime / 20) + EnumChatFormatting.RESET + " s / " + @@ -259,7 +331,11 @@ public class ExtremeHeatExchanger extends GT_MetaTileEntity_MultiblockBase_EM im StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + EnumChatFormatting.RED + (getIdealStatus() - getRepairStatus()) + EnumChatFormatting.RESET + " " + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + ": " + - EnumChatFormatting.YELLOW + mEfficiency / 100.0F + EnumChatFormatting.RESET + " %" + EnumChatFormatting.YELLOW + mEfficiency / 100.0F + EnumChatFormatting.RESET + " %", + StatCollector.translateToLocal("scanner.info.XHE.0") + " " + + (transformed ? EnumChatFormatting.RED : EnumChatFormatting.YELLOW) + GT_Utility.formatNumbers(this.mEUt) + EnumChatFormatting.RESET + " EU/t", + StatCollector.translateToLocal("scanner.info.XHE.1") + " " + + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(tThreshold) + EnumChatFormatting.RESET + " L/s" }; } diff --git a/src/main/java/goodgenerator/loader/Loaders.java b/src/main/java/goodgenerator/loader/Loaders.java index 86e706d891..228bd2d5c2 100644 --- a/src/main/java/goodgenerator/loader/Loaders.java +++ b/src/main/java/goodgenerator/loader/Loaders.java @@ -213,6 +213,10 @@ public class Loaders { postInitLoadRecipes(); } + public static void completeLoad(){ + RecipeLoader_02.FinishLoadRecipe(); + } + public static void initLoadRecipes(){ RecipeLoader.InitLoadRecipe(); RecipeLoader_02.InitLoadRecipe(); diff --git a/src/main/java/goodgenerator/loader/RecipeLoader_02.java b/src/main/java/goodgenerator/loader/RecipeLoader_02.java index a4c80fcdd5..1f00fce0e3 100644 --- a/src/main/java/goodgenerator/loader/RecipeLoader_02.java +++ b/src/main/java/goodgenerator/loader/RecipeLoader_02.java @@ -5,13 +5,12 @@ import goodgenerator.items.MyMaterial; import goodgenerator.util.CrackRecipeAdder; import goodgenerator.util.ItemRefer; import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; +import goodgenerator.util.MyRecipeAdder; import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.*; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; @@ -887,6 +886,24 @@ public class RecipeLoader_02 { 220, 7680 ); + + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + FluidRegistry.getFluidStack("lava", 20000), + FluidRegistry.getFluidStack("ic2pahoehoelava", 20000), + FluidRegistry.getFluidStack("ic2distilledwater", 20000), + FluidRegistry.getFluidStack("steam", 3200000), + FluidRegistry.getFluidStack("ic2superheatedsteam", 1600000), + 10000 + ); + + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + FluidRegistry.getFluidStack("ic2hotcoolant", 16000), + FluidRegistry.getFluidStack("ic2coolant", 16000), + FluidRegistry.getFluidStack("ic2distilledwater", 20000), + FluidRegistry.getFluidStack("ic2superheatedsteam", 3200000), + FluidRegistry.getFluidStack("supercriticalsteam", 32000), + 8000 + ); } public static void InitLoadRecipe() { @@ -1052,4 +1069,32 @@ public class RecipeLoader_02 { 7680 ); } + + public static void FinishLoadRecipe() { + for (GT_Recipe plasmaFuel : GT_Recipe.GT_Recipe_Map.sPlasmaFuels.mRecipeList) { + FluidStack tPlasma = GT_Utility.getFluidForFilledItem(plasmaFuel.mInputs[0], true); + if (tPlasma == null) { + continue; + } + tPlasma.amount = 100; + String tPlasmaName = FluidRegistry.getFluidName(tPlasma); + int tUnit = plasmaFuel.mSpecialValue; + if (tPlasmaName.split("\\.", 2).length == 2) { + String tOutName = tPlasmaName.split("\\.", 2)[1]; + FluidStack output = FluidRegistry.getFluidStack(tOutName, tPlasma.amount); + if (output == null) + output = FluidRegistry.getFluidStack("molten." + tOutName, tPlasma.amount); + if (output != null) { + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + tPlasma, + output, + FluidRegistry.getFluidStack("ic2distilledwater", tUnit * 100), + FluidRegistry.getFluidStack("ic2superheatedsteam", tUnit * 100), + FluidRegistry.getFluidStack("supercriticalsteam", tUnit), + 1 + ); + } + } + } + } } diff --git a/src/main/java/goodgenerator/main/GoodGenerator.java b/src/main/java/goodgenerator/main/GoodGenerator.java index 1daa7dfedb..b818aa0647 100644 --- a/src/main/java/goodgenerator/main/GoodGenerator.java +++ b/src/main/java/goodgenerator/main/GoodGenerator.java @@ -65,6 +65,7 @@ public final class GoodGenerator { public void onLoadComplete(FMLLoadCompleteEvent event) { //NaquadahReworkRecipeLoader.SmallRecipeChange(); NaquadahReworkRecipeLoader.Remover(); + Loaders.completeLoad(); } public static void crossMod() { diff --git a/src/main/java/goodgenerator/util/MyRecipeAdder.java b/src/main/java/goodgenerator/util/MyRecipeAdder.java index 59bce6220c..231a93a27b 100644 --- a/src/main/java/goodgenerator/util/MyRecipeAdder.java +++ b/src/main/java/goodgenerator/util/MyRecipeAdder.java @@ -5,10 +5,12 @@ import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; public class MyRecipeAdder { @@ -113,6 +115,8 @@ public class MyRecipeAdder { NA.addNARecipe(input1, input2, output1, output2, ticks, maxNKE * 10000 + minNKE); } + public static HashMap mXHeatExchangerFuelMap = new HashMap<>(); + public static class ExtremeHeatExchangerMapper extends GT_Recipe.GT_Recipe_Map { public ExtremeHeatExchangerMapper(Collection aRecipeList, String aUnlocalizedName, String aLocalName, String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, boolean aNEIAllowed){ super(aRecipeList, aUnlocalizedName, aLocalName, aNEIName, aNEIGUIPath, aUsualInputCount, aUsualOutputCount, aMinimalInputItems, aMinimalInputFluids, aAmperage, aNEISpecialValuePre, aNEISpecialValueMultiplier, aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed); @@ -120,7 +124,9 @@ public class MyRecipeAdder { @Override public GT_Recipe addRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, int[] aOutputChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) { - return addRecipe(new ExtremeHeatExchangerRecipe(aFluidInputs, aFluidOutputs, aSpecialValue)); + ExtremeHeatExchangerRecipe tRecipe = new ExtremeHeatExchangerRecipe(aFluidInputs, aFluidOutputs, aSpecialValue); + mXHeatExchangerFuelMap.put(aFluidInputs[0].getFluid(), tRecipe); + return addRecipe(tRecipe); } } @@ -137,12 +143,70 @@ public class MyRecipeAdder { inputStacks.add(new PositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidInputs[0], true), 22, 3)); inputStacks.add(new PositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidInputs[1], true), 22, 27)); } + return inputStacks; + } + + @Override + public ArrayList getOutputPositionedStacks() { + ArrayList outputStacks = new ArrayList<>(); if (this.mFluidOutputs != null && this.mFluidOutputs.length == 3) { - inputStacks.add(new PositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidOutputs[0], true), 124, 3)); - inputStacks.add(new PositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidOutputs[1], true), 124, 21)); - inputStacks.add(new PositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidOutputs[2], true), 124, 44)); + outputStacks.add(new PositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidOutputs[0], true), 124, 3)); + outputStacks.add(new PositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidOutputs[1], true), 124, 21)); + outputStacks.add(new PositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidOutputs[2], true), 124, 44)); } - return inputStacks; + return outputStacks; + } + + public int getMaxHotFluidConsume() { + if (this.mFluidInputs != null) { + return this.mFluidInputs[0].amount; + } + return 0; + } + + public Fluid getNormalSteam() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[0].getFluid(); + } + return null; + } + + public Fluid getHeatedSteam() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[1].getFluid(); + } + return null; + } + + public Fluid getCooledFluid() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[2].getFluid(); + } + return null; + } + + public int getEUt() { + if (getNormalSteam() != null) { + switch (getNormalSteam().getName()) { + case "steam": { + int tVal = this.mFluidInputs[1].amount * 4; + if (tVal < 0) tVal = -tVal; + return tVal; + } + case "ic2superheatedsteam": { + int tVal = this.mFluidInputs[1].amount * 8; + if (tVal < 0) tVal = -tVal; + return tVal; + } + case "supercriticalsteam": { + int tVal = this.mFluidInputs[1].amount * 800; + if (tVal < 0) tVal = -tVal; + return tVal; + } + default: return 0; + } + } + return 0; } } -- cgit