aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/api/util/AdvFusionPower.java43
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java6
2 files changed, 48 insertions, 1 deletions
diff --git a/src/main/java/gregtech/api/util/AdvFusionPower.java b/src/main/java/gregtech/api/util/AdvFusionPower.java
new file mode 100644
index 0000000000..2ea04d9e0d
--- /dev/null
+++ b/src/main/java/gregtech/api/util/AdvFusionPower.java
@@ -0,0 +1,43 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.GT_Values.V;
+
+import gregtech.common.power.FusionPower;
+import gregtech.nei.FusionSpecialValueFormatter;
+
+public class AdvFusionPower extends FusionPower {
+
+ public AdvFusionPower(byte tier, int startupPower) {
+ super(tier, startupPower);
+ }
+
+ @Override
+ public void computePowerUsageAndDuration(int euPerTick, int duration, int specialValue) {
+ originalVoltage = computeVoltageForEuRate(euPerTick);
+ recipeEuPerTick = euPerTick;
+ recipeDuration = duration;
+ // It's safe to assume fusion is above ULV. We put this as safety check here anyway
+ if (tier > 0) {
+ int maxPossibleOverclocks = FusionSpecialValueFormatter.getFusionTier(this.specialValue, V[tier - 1])
+ - FusionSpecialValueFormatter.getFusionTier(specialValue, euPerTick);
+ // Isn't too low EUt check?
+ long tempEUt = Math.max(euPerTick, V[1]);
+
+ recipeDuration = duration;
+
+ while (tempEUt <= V[tier - 1] * (long) amperage && maxPossibleOverclocks-- > 0 && recipeDuration > 1) {
+ tempEUt <<= 2; // this actually controls overclocking
+ recipeDuration >>= 2; // this is effect of overclocking
+ }
+ if (tempEUt > Integer.MAX_VALUE - 1) {
+ recipeEuPerTick = Integer.MAX_VALUE - 1;
+ recipeDuration = Integer.MAX_VALUE - 1;
+ } else {
+ recipeEuPerTick = (int) tempEUt;
+ if (recipeEuPerTick == 0) recipeEuPerTick = 1;
+ if (recipeDuration == 0) recipeDuration = 1; // set time to 1 tick
+ }
+ }
+ wasOverclocked = checkIfOverclocked();
+ }
+}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java
index dcad1fc671..80b03b56ba 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java
@@ -17,6 +17,7 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.render.TextureFactory;
+import gregtech.api.util.AdvFusionPower;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_FusionComputer;
import gtPlusPlus.core.block.ModBlocks;
@@ -33,11 +34,14 @@ public class GregtechMetaTileEntity_Adv_Fusion_MK4 extends GT_MetaTileEntity_Fus
}
public GregtechMetaTileEntity_Adv_Fusion_MK4(int aID, String aName, String aNameRegional) {
- super(aID, aName, aNameRegional, 6);
+ super(aID, aName, aNameRegional, 9);
+ // Theoretically this fusion reactor has a slightly higher startup power, but special value only uses integer
+ power = new AdvFusionPower((byte) 9, Integer.MAX_VALUE);
}
public GregtechMetaTileEntity_Adv_Fusion_MK4(String aName) {
super(aName);
+ power = new AdvFusionPower((byte) 9, Integer.MAX_VALUE);
}
@Override