aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/goodgenerator/blocks/tileEntity
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/goodgenerator/blocks/tileEntity')
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java96
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"
};
}