diff options
Diffstat (limited to 'src')
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 |