diff options
Diffstat (limited to 'src/main/java/gregtech/api/util')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_OverclockCalculator.java | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java index 026f5e3fc9..d8948fc265 100644 --- a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java +++ b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java @@ -40,6 +40,13 @@ public class GT_OverclockCalculator { */ private boolean mHeatOC, mOneTickDiscount, calculated, mHeatDiscount; + /** If the OC calculator should only do a given amount of overclocks. Mainly used in fusion reactors */ + private boolean limitOverclocks; + /** Maximum amount of overclocks to perform, when limitOverclocks = true */ + private int maxOverclocks; + /** How many overclocks have been performed */ + private int overclockCount; + private static final int HEAT_DISCOUNT_THRESHOLD = 900; private static final int HEAT_PERFECT_OVERCLOCK_THRESHOLD = 1800; @@ -213,6 +220,16 @@ public class GT_OverclockCalculator { } /** + * Limit the amount of overclocks that can be performed, regardless of how much power is available. Mainly used for + * fusion reactors. + */ + public GT_OverclockCalculator limitOverclockCount(int maxOverclocks) { + this.limitOverclocks = true; + this.maxOverclocks = maxOverclocks; + return this; + } + + /** * Call this when all values have been put it. */ public GT_OverclockCalculator calculate() { @@ -250,7 +267,8 @@ public class GT_OverclockCalculator { long tNextConsumption = ((long) Math .ceil(mRecipeEUt * mParallel * mRecipeAmps * mEUtDiscount * heatDiscountMultiplier)) << mEUtIncreasePerOC; - while (tTierDifference > 0 && tNextConsumption < mEUt * mAmps) { + while (tTierDifference > 0 && tNextConsumption < mEUt * mAmps + && (!limitOverclocks || overclockCount++ < maxOverclocks)) { if (mDuration <= 1) { break; } @@ -263,7 +281,7 @@ public class GT_OverclockCalculator { long tNextConsumption = ((long) Math .ceil(mRecipeEUt * mParallel * mRecipeAmps * mEUtDiscount * heatDiscountMultiplier)) << mEUtIncreasePerOC; - while (tNextConsumption < mEUt * mAmps) { + while (tNextConsumption < mEUt * mAmps && (!limitOverclocks || overclockCount++ < maxOverclocks)) { if (mDuration <= 1) { break; } @@ -307,4 +325,14 @@ public class GT_OverclockCalculator { } return mDuration; } + + /** + * @return Number of performed overclocks + */ + public int getPerformedOverclocks() { + if (!calculated) { + calculate(); + } + return overclockCount; + } } |