aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/tileentities/boilers
diff options
context:
space:
mode:
authorLéa Gris <lea.gris@noiraude.net>2021-04-18 20:00:36 +0200
committerLéa Gris <lea.gris@noiraude.net>2021-04-24 13:23:25 +0200
commit48915ecd042d1c78f126b1c8bbff3a8dba08dca5 (patch)
tree15a24fb24d2066b525af6913a930b1dbfbff32c9 /src/main/java/gregtech/common/tileentities/boilers
parent11b3ef3a4323fe4116e183db2baea320624156d3 (diff)
downloadGT5-Unofficial-48915ecd042d1c78f126b1c8bbff3a8dba08dca5.tar.gz
GT5-Unofficial-48915ecd042d1c78f126b1c8bbff3a8dba08dca5.tar.bz2
GT5-Unofficial-48915ecd042d1c78f126b1c8bbff3a8dba08dca5.zip
impr(solarboilers): configurable solar boilers
Diffstat (limited to 'src/main/java/gregtech/common/tileentities/boilers')
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java93
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java57
2 files changed, 100 insertions, 50 deletions
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java
index 1a98e5af53..b1501901f6 100644
--- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java
@@ -1,5 +1,6 @@
package gregtech.common.tileentities.boilers;
+import gregtech.api.GregTech_API;
import gregtech.api.enums.Dyes;
import gregtech.api.enums.Textures.BlockIcons;
import gregtech.api.interfaces.ITexture;
@@ -14,34 +15,63 @@ import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
+import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.util.ForgeDirection;
+import static gregtech.api.enums.ConfigCategories.machineconfig;
+
public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
- // Calcification start time is 43200*25/20=54000s or 15 hours of game time.
- static final int CALCIFICATION_TIME = 43200;
+ private static final String LPS_FMT = "%s L/s";
+ protected static final String DEFAULT_STR = "Default: ";
private static final String localizedDescFormat = GT_LanguageManager.addStringLocalization(
"gt.blockmachines.boiler.solar.desc.format",
"Steam Power by the Sun%n" +
"Produces %sL of Steam per second%n" +
"Calcifies over time, reducing Steam output to %sL/s%n" +
"Break and replace to descale");
- protected int minOutputPer25Ticks = 50;
- protected int maxOutputPer25Ticks = 150;
- protected int basicTemperatureMod = 5;
- protected int basicLossTimerLimit = 45;
+ protected int calcificationTicks;
+ protected int minOutputPerSecond;
+ protected int maxOutputPerSecond;
+ protected int basicTemperatureMod = 5; // Base Celsius gain or loss
+ protected int coolDownTicks;
private int mRunTime = 0;
public GT_MetaTileEntity_Boiler_Solar(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional, new String[0]);
+ onConfigLoad();
+ }
+
+ protected void onConfigLoad() {
+ final Configuration config = GregTech_API.sMachineFile.mConfig;
+ final String configCategory = machineconfig + ".SimpleSolarBoiler";
+
+ final int defaultCalcificationTicks = 54000;
+ final int defaultMinOutputPerSecond = 40;
+ final int defaultMaxOutputPerSecond = 120;
+ final int defaultCoolDownTicks = 45;
+
+ calcificationTicks = config.get(configCategory, "CalcificationTicks", defaultCalcificationTicks,
+ "Number of run-time ticks before boiler starts calcification.\n" +
+ "100% calcification and minimal output will be reached at 2 times this.\n" +
+ DEFAULT_STR + defaultCalcificationTicks).getInt();
+ minOutputPerSecond = config.get(configCategory, "MinOutputPerSecond", defaultMinOutputPerSecond,
+ DEFAULT_STR + defaultMinOutputPerSecond).getInt();
+ maxOutputPerSecond = config.get(configCategory, "MaxOutputPerSecond", defaultMaxOutputPerSecond,
+ DEFAULT_STR + defaultMaxOutputPerSecond).getInt();
+ coolDownTicks = config.get(configCategory, "CoolDownTicks", defaultCoolDownTicks,
+ "Number of ticks it takes to loose 1°C.\n" +
+ DEFAULT_STR + defaultCoolDownTicks).getInt();
}
public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
super(aName, aTier, aDescription, aTextures);
+ onConfigLoad();
}
public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
super(aName, aTier, aDescription, aTextures);
+ onConfigLoad();
}
@Override
@@ -72,6 +102,14 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
return rTextures;
}
+ protected long getMaxOutputPerSecond() {
+ return maxOutputPerSecond;
+ }
+
+ protected long getMinOutputPerSecond() {
+ return minOutputPerSecond;
+ }
+
@Override
public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity, getCapacity());
@@ -130,14 +168,14 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
if (this.mTemperature < 100) {
return 0;
}
- if (mRunTime > CALCIFICATION_TIME) {
- // Calcification takes about 2/3 CALCIFICATION_TIME to completely calcify on basic solar.
- // For HP solar, it takes about 2x CALCIFICATION_TIME
- return Math.max(minOutputPer25Ticks,
- // Every 288*25 ticks, or 6 minutes, lose 1 L output.
- maxOutputPer25Ticks - (mRunTime - CALCIFICATION_TIME) / CALCIFICATION_TIME * maxOutputPer25Ticks);
+ if (mRunTime > calcificationTicks) {
+ /* When reaching calcification ticks; discount the proportion of run-time spent on calcification
+ * from the maximum output per second, and return this or the minimum output per second
+ */
+ return Math.max(minOutputPerSecond,
+ maxOutputPerSecond - (mRunTime - calcificationTicks) / calcificationTicks * maxOutputPerSecond);
} else {
- return maxOutputPer25Ticks;
+ return maxOutputPerSecond;
}
}
@@ -153,7 +191,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
@Override
protected int getCooldownInterval() {
- return basicLossTimerLimit / basicTemperatureMod;
+ return coolDownTicks / basicTemperatureMod;
}
@Override
@@ -164,13 +202,14 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
@Override
protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
World world = aBaseMetaTileEntity.getWorld();
- if ((aTick % 256L != 0L) || (world.isThundering())) {
+ // Heat-up every 12s (240 ticks), has to be multiple of 20 ticks
+ if ((aTick % 240L != 0L) || (world.isThundering())) {
return;
}
if (!aBaseMetaTileEntity.getSkyAtSide((byte) ForgeDirection.UP.ordinal())) {
return;
}
- boolean weatherClear = !world.isRaining() || !(aBaseMetaTileEntity.getBiome().rainfall > 0.0F);
+ boolean weatherClear = !world.isRaining() || aBaseMetaTileEntity.getBiome().rainfall == 0.0F;
if (!weatherClear && world.skylightSubtracted >= 4) {
return;
}
@@ -194,14 +233,14 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
public String[] getInfoData() {
return String.format("Heat Capacity: " + EnumChatFormatting.GREEN + "%s %%" + EnumChatFormatting.RESET +
" Hot time: " + EnumChatFormatting.RED + "%s s" + EnumChatFormatting.RESET + "%n" +
- "Min output: " + EnumChatFormatting.RED + "%s L/s" + EnumChatFormatting.RESET +
- " Max output: " + EnumChatFormatting.RED + "%s L/s" + EnumChatFormatting.RESET + "%n" +
- "Current Output: " + EnumChatFormatting.YELLOW + "%s L/s" + EnumChatFormatting.RESET,
+ "Min output: " + EnumChatFormatting.RED + LPS_FMT + EnumChatFormatting.RESET +
+ " Max output: " + EnumChatFormatting.RED + LPS_FMT + EnumChatFormatting.RESET + "%n" +
+ "Current Output: " + EnumChatFormatting.YELLOW + LPS_FMT + EnumChatFormatting.RESET,
GT_Utility.formatNumbers(getHeatCapacityPercent()),
GT_Utility.formatNumbers(getHotTimeSeconds()),
GT_Utility.formatNumbers(getMinOutputPerSecond()),
GT_Utility.formatNumbers(getMaxOutputPerSecond()),
- GT_Utility.formatNumbers(getCurrentOutputPerSecond()))
+ GT_Utility.formatNumbers(getProductionPerSecond()))
.split("\\R");
}
@@ -210,19 +249,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
}
protected long getHotTimeSeconds() {
- return mRunTime * 25L / 20L;
- }
-
- protected long getMinOutputPerSecond() {
- return minOutputPer25Ticks * 20L / 25L;
- }
-
- protected long getMaxOutputPerSecond() {
- return maxOutputPer25Ticks * 20L / 25L;
- }
-
- protected long getCurrentOutputPerSecond() {
- return getProductionPerSecond() * 20L / 25L;
+ return mRunTime;
}
@Override
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java
index 81ccf4c03d..c348f2dd27 100644
--- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java
@@ -1,5 +1,6 @@
package gregtech.common.tileentities.boilers;
+import gregtech.api.GregTech_API;
import gregtech.api.enums.Dyes;
import gregtech.api.enums.Textures.BlockIcons;
import gregtech.api.interfaces.ITexture;
@@ -8,33 +9,40 @@ import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.common.gui.GT_GUIContainer_Boiler;
import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraftforge.common.config.Configuration;
+
+import static gregtech.api.enums.ConfigCategories.machineconfig;
public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boiler_Solar {
+ private static final int defaultCalcificationTicks = 54000;
public GT_MetaTileEntity_Boiler_Solar_Steel(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional);
- configure();
+ onConfigLoad();
}
- private void configure() {
- minOutputPer25Ticks = 150;
- maxOutputPer25Ticks = 450;
- basicLossTimerLimit = 75; // Cools down slower than normal boiler
- }
+ @Override
+ protected void onConfigLoad() {
+ final Configuration config = GregTech_API.sMachineFile.mConfig;
+ final String configCategory = machineconfig + ".HighPressureSolarBoiler";
- public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
- super(aName, aTier, aDescription, aTextures);
- configure();
- }
+ final int defaultCalcificationTicks = 54000;
+ final int defaultMinOutputPerSecond = 120;
+ final int defaultMaxOutputPerSecond = 360;
+ final int defaultCoolDownTicks = 75;
- public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
- super(aName, aTier, aDescription, aTextures);
- configure();
- }
+ calcificationTicks = config.get(configCategory, "CalcificationTicks", defaultCalcificationTicks,
+ "Number of run-time ticks before boiler starts calcification.\n" +
+ "100% calcification and minimal output will be reached at 2 times this.\n" +
+ DEFAULT_STR + defaultCalcificationTicks).getInt();
+ minOutputPerSecond = config.get(configCategory, "MinOutputPerSecond", defaultMinOutputPerSecond,
+ DEFAULT_STR + defaultMinOutputPerSecond).getInt();
+ maxOutputPerSecond = config.get(configCategory, "MaxOutputPerSecond", defaultMaxOutputPerSecond,
+ DEFAULT_STR + defaultMaxOutputPerSecond).getInt();
+ coolDownTicks = config.get(configCategory, "CoolDownTicks", defaultCoolDownTicks,
+ "Number of ticks it takes to loose 1°C (Cools down slower than normal boiler).\n" +
+ DEFAULT_STR + defaultCoolDownTicks).getInt();
- @Override
- public int getCapacity() {
- return 32000;
}
@Override
@@ -64,8 +72,23 @@ public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boil
}
@Override
+ public int getCapacity() {
+ return 32000;
+ }
+
+ @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Boiler_Solar_Steel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures);
}
+ public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aDescription, aTextures);
+ onConfigLoad();
+ }
+
+ public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aDescription, aTextures);
+ onConfigLoad();
+ }
+
}