diff options
Diffstat (limited to 'src/main/java/goodgenerator/blocks/tileEntity')
-rw-r--r-- | src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java | 96 |
1 files changed, 86 insertions, 10 deletions
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<ExtremeHeatExchanger> 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,11 +236,72 @@ 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" }; } |