aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java16
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java19
2 files changed, 21 insertions, 14 deletions
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java
index f6288f1e92..6cbc0a4cc4 100644
--- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java
+++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java
@@ -388,21 +388,21 @@ public class GT_MetaTileEntity_MagicalEnergyAbsorber extends GT_MetaTileEntity_B
if ((Integer) e.getKey() < Enchantment.enchantmentsList.length) {
Enchantment tEnchantment = Enchantment.enchantmentsList[(Integer) e.getKey()];
Integer tLevel = (Integer) e.getValue();
- tEU += 1000000 * tLevel / (tEnchantment.getMaxLevel() * tEnchantment.getWeight());
+ tEU += 1000000L * tLevel / tEnchantment.getMaxLevel() / tEnchantment.getWeight();
}
}
- if (isDisenchantableItem(tStack)) {
+
+ ItemStack tOutputStack = GT_Utility.copyAmount(1L, tStack);
+ if (isDisenchantableItem(tOutputStack)) {
tEU = tEU * getEfficiency() / 100;
+ EnchantmentHelper.setEnchantments(new HashMap<>(), tOutputStack);
+ } else if (isEnchantedBook(tOutputStack)) {
+ tOutputStack = new ItemStack(Items.book, 1);
}
// Only consume input if can store EU and push output
if ((getBaseMetaTileEntity().getStoredEU() + tEU) < getBaseMetaTileEntity().getEUCapacity()
- && getBaseMetaTileEntity().addStackToSlot(getOutputSlot(), tStack)) {
- if (isDisenchantableItem(tStack)) {
- EnchantmentHelper.setEnchantments(new HashMap(), tStack);
- } else if (isEnchantedBook(tStack)) {
- tStack = new ItemStack(Items.book, 1);
- }
+ && getBaseMetaTileEntity().addStackToSlot(getOutputSlot(), tOutputStack)) {
decrStackSize(getInputSlot(), 1);
} else {
tEU = 0;
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java
index 7b72473bc7..a0d3276c64 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java
@@ -4,6 +4,7 @@ import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -62,7 +63,10 @@ public class GT_MetaTileEntity_HeatExchanger extends GT_MetaTileEntity_EnhancedM
private GT_MetaTileEntity_Hatch_Output mOutputColdFluidHatch;
private boolean superheated = false;
private int superheated_threshold=0;
- private float water;
+ /**
+ * How much more steam we can make without draining real water. Unit is (1L/GT_Values.STEAM_PER_WATER)
+ */
+ private int steamBudget;
private int mCasingAmount;
public GT_MetaTileEntity_HeatExchanger(int aID, String aName, String aNameRegional) {
@@ -99,12 +103,14 @@ public class GT_MetaTileEntity_HeatExchanger extends GT_MetaTileEntity_EnhancedM
@Override
public void loadNBTData(NBTTagCompound aNBT) {
superheated = aNBT.getBoolean("superheated");
+ steamBudget = aNBT.getInteger("steamBudget");
super.loadNBTData(aNBT);
}
@Override
public void saveNBTData(NBTTagCompound aNBT) {
aNBT.setBoolean("superheated", superheated);
+ aNBT.setInteger("steamBudget", steamBudget);
super.saveNBTData(aNBT);
}
@@ -192,10 +198,11 @@ public class GT_MetaTileEntity_HeatExchanger extends GT_MetaTileEntity_EnhancedM
return true;
}
- private int useWater(float input) {
- water = water + input;
- int usage = (int) water;
- water = water - usage;
+ private int useWater(int steam) {
+ steamBudget -= steam;
+ int usage = Math.min(0, Math.floorDiv(steamBudget, GT_Values.STEAM_PER_WATER));
+ // still subtract, because usage will be a negative number
+ steamBudget -= usage * GT_Values.STEAM_PER_WATER;
return usage;
}
@@ -207,7 +214,7 @@ public class GT_MetaTileEntity_HeatExchanger extends GT_MetaTileEntity_EnhancedM
if (superheated) tGeneratedEU /= 2; // We produce half as much superheated steam if necessary
- int distilledConsumed = useWater(tGeneratedEU / 160f); // how much distilled water to consume
+ int distilledConsumed = useWater(tGeneratedEU); // how much distilled water to consume
//tGeneratedEU = distilledConsumed * 160; // EXACTLY how much steam to generate, producing a perfect 1:160 ratio with distilled water consumption
FluidStack distilledStack = GT_ModHandler.getDistilledWater(distilledConsumed);