diff options
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; + } +} |