diff options
author | YannickMG <yannickmg@gmail.com> | 2022-02-03 12:55:55 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-03 18:55:55 +0100 |
commit | a48a158ad76dfa0b8d74894bbbe8d2520ff760af (patch) | |
tree | ce6ac0d636c9076f15febc0e1a47efa25c83cdf6 /src/main/java/gregtech/common/power | |
parent | b4ff9ad8d8a8003a2b0a63e0a2153f37f60cd02f (diff) | |
download | GT5-Unofficial-a48a158ad76dfa0b8d74894bbbe8d2520ff760af.tar.gz GT5-Unofficial-a48a158ad76dfa0b8d74894bbbe8d2520ff760af.tar.bz2 GT5-Unofficial-a48a158ad76dfa0b8d74894bbbe8d2520ff760af.zip |
Basic Machine NEI Power Tiers (#914)
* Add IntelliJ .shelf folder to .gitignore
* Fixing GT_GuiTooltip bug I introduced
* Deprecated superfluous String trans methods.
* Add Power class to compute and describe power usage
* trans -> GT_Utility.trans
Removed absent param from Javadoc
* Add Power to BasicMachine and use it for power calculations
* Steam BasicMachine rework
Have Bronze and Steel tier override Power with appropriate SteamPower
Make Bronze machines explicitly tier 1
Make Steel machines explicitly tier 2
Defined recipe list and bricked status for each machine
Unified checkRecipe uses machine's recipe list and Power
* Raised NEI dependency to 2.2.5
* Defining NEI transfer rect in individual UIs
Using a new interface called from GT_RectHandler
* Code cleanup & minor refactor
* Add power field to NEI Default Handler
Add method to create Power object from the recipe map
* Display power tier in NEI handler name
* User Power to draw NEI Handler description
* Enable filtering handler recipes using Power
* Repurposing aBricked parameter into aHighPressure
To fix my previous faulty method of setting mTier
* Must call getCache to get recipes properly.
* Better communicate NEI Overclock info
Diffstat (limited to 'src/main/java/gregtech/common/power')
5 files changed, 245 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/power/BasicMachineEUPower.java b/src/main/java/gregtech/common/power/BasicMachineEUPower.java new file mode 100644 index 0000000000..12691ac6d9 --- /dev/null +++ b/src/main/java/gregtech/common/power/BasicMachineEUPower.java @@ -0,0 +1,72 @@ +package gregtech.common.power; + +import gregtech.api.util.GT_Utility; + +import static gregtech.api.enums.GT_Values.V; + +public class BasicMachineEUPower extends EUPower{ + private static final String OC = " (OC)"; + private boolean wasOverclocked; + + public BasicMachineEUPower(byte tier, int amperage) { + super(tier, amperage); + } + + @Override + public void computePowerUsageAndDuration(int euPerTick, int duration) { + super.computePowerUsageAndDuration(euPerTick, duration); + if (tier == 0) { + //Long time calculation + long xMaxProgresstime = ((long) duration) << 1; + if (xMaxProgresstime > Integer.MAX_VALUE - 1) { + //make impossible if too long + recipeEuPerTick = Integer.MAX_VALUE - 1; + recipeDuration = Integer.MAX_VALUE - 1; + } else { + recipeEuPerTick = euPerTick >> 2; + recipeDuration = (int) xMaxProgresstime; + } + } else { + //Long EUt calculation + long xEUt = euPerTick; + //Isnt too low EUt check? + long tempEUt = Math.max(xEUt, V[1]); + + recipeDuration = duration; + + while (tempEUt <= V[tier - 1] * (long) amperage) { + tempEUt <<= 2;//this actually controls overclocking + //xEUt *= 4;//this is effect of everclocking + recipeDuration >>= 1;//this is effect of overclocking + xEUt = recipeDuration == 0 ? xEUt >> 1 : xEUt << 2;//U know, if the time is less than 1 tick make the machine use 2x less power + } + if (xEUt > Integer.MAX_VALUE - 1) { + recipeEuPerTick = Integer.MAX_VALUE - 1; + recipeDuration = Integer.MAX_VALUE - 1; + } else { + recipeEuPerTick = (int) xEUt; + if (recipeEuPerTick == 0) + recipeEuPerTick = 1; + if (recipeDuration == 0) + recipeDuration = 1;//set time to 1 tick + } + } + wasOverclocked = checkIfOverclocked(); + } + + @Override + public String getPowerUsageString() { + return decorateWithOverclockLabel(super.getPowerUsageString()); + } + + private String decorateWithOverclockLabel(String s) { + if (wasOverclocked) { + s += OC; + } + return s; + } + + private boolean checkIfOverclocked() { + return originalVoltage != computeVoltageForEuRate(recipeEuPerTick); + } +} diff --git a/src/main/java/gregtech/common/power/EUPower.java b/src/main/java/gregtech/common/power/EUPower.java new file mode 100644 index 0000000000..41ebca3fda --- /dev/null +++ b/src/main/java/gregtech/common/power/EUPower.java @@ -0,0 +1,57 @@ +package gregtech.common.power; + +import gregtech.api.enums.GT_Values; +import gregtech.api.util.GT_Utility; +import net.minecraft.util.EnumChatFormatting; + +public class EUPower extends Power { + protected final int amperage; + protected int originalVoltage; + + public EUPower(byte tier, int amperage) { + super(tier); + 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) { + originalVoltage = computeVoltageForEuRate(euPerTick); + recipeEuPerTick = euPerTick; + recipeDuration = duration; + } + + @Override + public String getTierString() { + return GT_Values.TIER_COLORS[tier] + GT_Values.VN[tier] + EnumChatFormatting.RESET; + } + + @Override + public String getTotalPowerString() { + return GT_Utility.formatNumbers((long) recipeDuration * recipeEuPerTick) + " EU"; + } + + @Override + public String getPowerUsageString() { + return GT_Utility.formatNumbers(recipeEuPerTick) + " EU/t"; + } + + @Override + public String getVoltageString() { + String voltageDescription = GT_Utility.formatNumbers(originalVoltage) + " EU"; + byte recipeTier = GT_Utility.getTier(originalVoltage); + if (recipeTier >= 0 && recipeTier < 16) { + voltageDescription += " (" + GT_Values.VN[recipeTier] + ")"; + } + return voltageDescription; + } + + @Override + public String getAmperageString() { + return GT_Utility.formatNumbers(amperage); + } + + protected int computeVoltageForEuRate(int euPerTick) { + return euPerTick / amperage; + } +} diff --git a/src/main/java/gregtech/common/power/Power.java b/src/main/java/gregtech/common/power/Power.java new file mode 100644 index 0000000000..e0526c14aa --- /dev/null +++ b/src/main/java/gregtech/common/power/Power.java @@ -0,0 +1,48 @@ +package gregtech.common.power; + +import gregtech.api.util.GT_Utility; + +public abstract class Power { + protected final byte tier; + protected int recipeEuPerTick; + protected int recipeDuration; + + public Power(byte tier) { + this.tier = tier; + } + + public byte getTier() { + return tier; + } + + public abstract String getTierString(); + + /** + * This method should be called prior to usage of any value except the power tier. + */ + public abstract void computePowerUsageAndDuration(int euPerTick, int duration); + + public int getEuPerTick() { + return recipeEuPerTick; + } + + public int getDurationTicks() { + return recipeDuration; + } + + public double getDurationSeconds() { + return 0.05d * getDurationTicks(); + } + + public String getDurationString() { + return GT_Utility.formatNumbers(getDurationSeconds()) + GT_Utility.trans("161", " secs"); + } + + public abstract String getTotalPowerString(); + + public abstract String getPowerUsageString(); + + public abstract String getVoltageString(); + + public abstract String getAmperageString(); +} diff --git a/src/main/java/gregtech/common/power/SteamPower.java b/src/main/java/gregtech/common/power/SteamPower.java new file mode 100644 index 0000000000..3e394e10c5 --- /dev/null +++ b/src/main/java/gregtech/common/power/SteamPower.java @@ -0,0 +1,46 @@ +package gregtech.common.power; + +import gregtech.api.util.GT_Utility; + +public class SteamPower extends Power { + private final double euPerTickOverride; + private final double durationOverride; + private final String[] STEAM_TIER_NAMES = {"Bronze", "Steel"}; + + public SteamPower(byte tier, double euPerTickMultiplier, double durationMultiplier) { + super(tier); + this.euPerTickOverride = euPerTickMultiplier; + this.durationOverride = durationMultiplier; + } + + @Override + public String getTierString() { + return STEAM_TIER_NAMES[tier - 1]; + } + + @Override + public void computePowerUsageAndDuration(int euPerTick, int duration) { + recipeEuPerTick = (int) (euPerTick * euPerTickOverride); + recipeDuration = (int) (duration * durationOverride); + } + + @Override + public String getTotalPowerString() { + return GT_Utility.formatNumbers((long) recipeDuration * recipeEuPerTick) + " Steam"; + } + + @Override + public String getPowerUsageString() { + return GT_Utility.formatNumbers(20L * recipeEuPerTick) + " L/s Steam"; + } + + @Override + public String getVoltageString() { + return null; + } + + @Override + public String getAmperageString() { + return null; + } +} diff --git a/src/main/java/gregtech/common/power/UnspecifiedEUPower.java b/src/main/java/gregtech/common/power/UnspecifiedEUPower.java new file mode 100644 index 0000000000..91158e3605 --- /dev/null +++ b/src/main/java/gregtech/common/power/UnspecifiedEUPower.java @@ -0,0 +1,22 @@ +package gregtech.common.power; + +import gregtech.api.util.GT_Utility; + +public class UnspecifiedEUPower extends EUPower { + private final String VOLTAGE = GT_Utility.trans("156", "unspecified"); + private final String AMPERAGE = GT_Utility.trans("157", "unspecified"); + + public UnspecifiedEUPower(byte tier, int amperage) { + super(tier, amperage); + } + + @Override + public String getVoltageString() { + return VOLTAGE; + } + + @Override + public String getAmperageString() { + return AMPERAGE; + } +} |