From 3b834d6cebae287cd9bbeddd4f157338da6e1ea5 Mon Sep 17 00:00:00 2001 From: Maxim Date: Thu, 16 Feb 2023 10:14:49 +0100 Subject: Fusion NEI support (#1742) * Added optional special value to Power and getter for power into IMTE * Added FusionPower to properly display available fusion recipes and OC * spotlessApply (#1743) Co-authored-by: GitHub GTNH Actions <> * Moved compare flag to recipe map * Missed a new constructor * Added user request * Addressed reviews * Typo * Update src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java Co-authored-by: miozune * Removed wrong bracket from git online commit --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: miozune --- .../gregtech/common/power/BasicMachineEUPower.java | 4 ++ src/main/java/gregtech/common/power/EUPower.java | 5 +++ .../java/gregtech/common/power/FusionPower.java | 52 ++++++++++++++++++++++ src/main/java/gregtech/common/power/Power.java | 17 +++++++ 4 files changed, 78 insertions(+) create mode 100644 src/main/java/gregtech/common/power/FusionPower.java (limited to 'src/main/java/gregtech/common/power') diff --git a/src/main/java/gregtech/common/power/BasicMachineEUPower.java b/src/main/java/gregtech/common/power/BasicMachineEUPower.java index 14f1d27a3f..6fec7e7954 100644 --- a/src/main/java/gregtech/common/power/BasicMachineEUPower.java +++ b/src/main/java/gregtech/common/power/BasicMachineEUPower.java @@ -11,6 +11,10 @@ public class BasicMachineEUPower extends EUPower { super(tier, amperage); } + public BasicMachineEUPower(byte tier, int amperage, int specialValue) { + super(tier, amperage, specialValue); + } + @Override public void computePowerUsageAndDuration(int euPerTick, int duration) { super.computePowerUsageAndDuration(euPerTick, duration); diff --git a/src/main/java/gregtech/common/power/EUPower.java b/src/main/java/gregtech/common/power/EUPower.java index 815ae0c190..a630c2d90d 100644 --- a/src/main/java/gregtech/common/power/EUPower.java +++ b/src/main/java/gregtech/common/power/EUPower.java @@ -13,6 +13,11 @@ public class EUPower extends Power { this.amperage = amperage; } + public EUPower(byte tier, int amperage, int specialValue) { + super(tier, specialValue); + this.amperage = amperage; + } + @Override // This generic EU Power class has no overclock defined and does no special calculations. public void computePowerUsageAndDuration(int euPerTick, int duration) { diff --git a/src/main/java/gregtech/common/power/FusionPower.java b/src/main/java/gregtech/common/power/FusionPower.java new file mode 100644 index 0000000000..c253d51be0 --- /dev/null +++ b/src/main/java/gregtech/common/power/FusionPower.java @@ -0,0 +1,52 @@ +package gregtech.common.power; + +import static gregtech.api.enums.GT_Values.V; + +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.enums.GT_Values; +import gregtech.nei.FusionSpecialValueFormatter; + +public class FusionPower extends BasicMachineEUPower { + + public FusionPower(byte tier, int startupPower) { + super(tier, 1, 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) { + tempEUt <<= 1; // this actually controls overclocking + recipeDuration >>= 1; // 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(); + } + + @Override + public String getTierString() { + return GT_Values.TIER_COLORS[tier] + "MK " + + FusionSpecialValueFormatter.getFusionTier(specialValue, recipeEuPerTick) + + EnumChatFormatting.RESET; + } +} diff --git a/src/main/java/gregtech/common/power/Power.java b/src/main/java/gregtech/common/power/Power.java index 13d1cc37c1..0c80c43bf3 100644 --- a/src/main/java/gregtech/common/power/Power.java +++ b/src/main/java/gregtech/common/power/Power.java @@ -7,9 +7,15 @@ public abstract class Power { protected final byte tier; protected int recipeEuPerTick; protected int recipeDuration; + protected final int specialValue; public Power(byte tier) { + this(tier, 0); + } + + public Power(byte tier, int specialValue) { this.tier = tier; + this.specialValue = specialValue; } public byte getTier() { @@ -23,6 +29,10 @@ public abstract class Power { */ public abstract void computePowerUsageAndDuration(int euPerTick, int duration); + public void computePowerUsageAndDuration(int euPerTick, int duration, int specialValue) { + computePowerUsageAndDuration(euPerTick, duration); + } + public int getEuPerTick() { return recipeEuPerTick; } @@ -53,4 +63,11 @@ public abstract class Power { public abstract String getVoltageString(); public abstract String getAmperageString(); + + public int compareTo(byte tier, int specialValue) { + if (this.tier != tier) { + return this.tier - tier; + } + return this.specialValue - specialValue; + } } -- cgit