aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/power
diff options
context:
space:
mode:
authorYannickMG <yannickmg@gmail.com>2022-02-03 12:55:55 -0500
committerGitHub <noreply@github.com>2022-02-03 18:55:55 +0100
commita48a158ad76dfa0b8d74894bbbe8d2520ff760af (patch)
treece6ac0d636c9076f15febc0e1a47efa25c83cdf6 /src/main/java/gregtech/common/power
parentb4ff9ad8d8a8003a2b0a63e0a2153f37f60cd02f (diff)
downloadGT5-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')
-rw-r--r--src/main/java/gregtech/common/power/BasicMachineEUPower.java72
-rw-r--r--src/main/java/gregtech/common/power/EUPower.java57
-rw-r--r--src/main/java/gregtech/common/power/Power.java48
-rw-r--r--src/main/java/gregtech/common/power/SteamPower.java46
-rw-r--r--src/main/java/gregtech/common/power/UnspecifiedEUPower.java22
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;
+ }
+}