aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/util')
-rw-r--r--src/main/java/gregtech/api/util/GT_OverclockCalculator.java32
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;
+ }
}