From 22f4b6d1daa7581cf46ac4bc19b346605b46494e Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Sat, 17 Apr 2021 12:37:08 +0800 Subject: Fix solar boiler heat up speed Signed-off-by: Glease <4586901+Glease@users.noreply.github.com> --- .../common/tileentities/boilers/GT_MetaTileEntity_Boiler.java | 6 +++++- .../tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java index a2b357e302..ea1af92ed0 100644 --- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java +++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java @@ -245,7 +245,7 @@ public abstract class GT_MetaTileEntity_Boiler extends GT_MetaTileEntity_BasicTa private void calculateHeatUp(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if ((this.mTemperature < getMaxTemperature()) && (this.mProcessingEnergy > 0) && (aTick % 12L == 0L)) { this.mProcessingEnergy -= getEnergyConsumption(); - this.mTemperature += 1; + this.mTemperature += getHeatUpAmount(); } aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0); } @@ -370,5 +370,9 @@ public abstract class GT_MetaTileEntity_Boiler extends GT_MetaTileEntity_BasicTa protected abstract int getCooldownInterval(); + protected int getHeatUpAmount() { + return 1; + } + protected abstract void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick); } 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 b08c4bf8cf..12a7177d08 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 @@ -145,7 +145,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { @Override protected int getEnergyConsumption() { - return 1; + return basicTemperatureMod; } @Override @@ -153,6 +153,11 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { return basicLossTimerLimit / basicTemperatureMod; } + @Override + protected int getHeatUpAmount() { + return basicTemperatureMod; + } + @Override protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if ((aTick % 256L == 0L) && (!aBaseMetaTileEntity.getWorld().isThundering())) { -- cgit From 11b3ef3a4323fe4116e183db2baea320624156d3 Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Sat, 17 Apr 2021 22:48:42 +0200 Subject: refactor(solarboilers): reorganise cleanup factorise code --- .../boilers/GT_MetaTileEntity_Boiler_Solar.java | 188 +++++++++++++-------- .../GT_MetaTileEntity_Boiler_Solar_Steel.java | 68 ++++---- 2 files changed, 153 insertions(+), 103 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 12a7177d08..1a98e5af53 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,20 +1,37 @@ package gregtech.common.tileentities.boilers; import gregtech.api.enums.Dyes; -import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.util.GT_LanguageManager; import gregtech.api.util.GT_Utility; import gregtech.common.gui.GT_Container_Boiler; import gregtech.common.gui.GT_GUIContainer_Boiler; 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.util.ForgeDirection; 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 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; + private int mRunTime = 0; + public GT_MetaTileEntity_Boiler_Solar(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional, new String[0]); } @@ -29,51 +46,57 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { @Override public String[] getDescription() { - return new String[]{ - "Steam Power by the Sun", - "Produces 120L of Steam per second", - "Calcifies over time, reducing Steam output to 40L/s", - "Break and replace to decalcify"}; + return String.format(localizedDescFormat, + GT_Utility.formatNumbers(getMaxOutputPerSecond()), + GT_Utility.formatNumbers(getMinOutputPerSecond())) + .split("\\R"); } - + @Override public ITexture[][][] getTextureSet(ITexture[] aTextures) { ITexture[][][] rTextures = new ITexture[4][17][]; - for (byte i = -1; i < 16; i = (byte) (i + 1)) { - ITexture[] tmp0 = {new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa))}; - rTextures[0][(i + 1)] = tmp0; - ITexture[] tmp1 = {new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_SOLAR)}; - rTextures[1][(i + 1)] = tmp1; - ITexture[] tmp2 = {new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa))}; - rTextures[2][(i + 1)] = tmp2; - ITexture[] tmp3 = {new GT_RenderedTexture(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE)}; - rTextures[3][(i + 1)] = tmp3; + for (int color = -1; color < 16; color++) { + int i = color + 1; + short[] colorModulation = Dyes.getModulation(color, Dyes._NULL.mRGBa); + rTextures[0][i] = new ITexture[]{ + new GT_RenderedTexture(BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, colorModulation)}; + rTextures[1][i] = new ITexture[]{ + new GT_RenderedTexture(BlockIcons.MACHINE_BRONZEBRICKS_TOP, colorModulation), + new GT_RenderedTexture(BlockIcons.BOILER_SOLAR)}; + rTextures[2][i] = new ITexture[]{ + new GT_RenderedTexture(BlockIcons.MACHINE_BRONZEBRICKS_SIDE, colorModulation)}; + rTextures[3][i] = new ITexture[]{ + new GT_RenderedTexture(BlockIcons.MACHINE_BRONZEBRICKS_SIDE, colorModulation), + new GT_RenderedTexture(BlockIcons.OVERLAY_PIPE)}; } return rTextures; } - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { - return mTextures[aSide >= 2 ? ((byte) (aSide != aFacing ? 2 : 3)) : aSide][aColorIndex + 1]; + @Override + public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity, getCapacity()); } - public int maxProgresstime() { - return 500; + @Override + public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SolarBoiler.png", getCapacity()); } - public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity, 16000); + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { + int i = aColorIndex + 1; + if (aSide >= 2) { + if (aSide != aFacing) return mTextures[2][i]; + return mTextures[3][i]; + } + return mTextures[aSide][i]; } - public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SolarBoiler.png", 16000); + @Override + public int maxProgresstime() { + return 500; } - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Solar(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - private int mRunTime = 0; - @Override public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); @@ -86,29 +109,6 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { this.mRunTime = aNBT.getInteger("mRunTime"); } - @Override - public String[] getInfoData() { - return new String[]{ - "Heat Capacity: " + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(this.mTemperature * 100 / maxProgresstime()) + " % " + EnumChatFormatting.RESET - + " Hot time: " + EnumChatFormatting.RED + GT_Utility.formatNumbers(this.mRunTime*25/20)+EnumChatFormatting.RESET+" s", - "Min output: " + EnumChatFormatting.RED + GT_Utility.formatNumbers(this.basicMaxOuput*20/25)+EnumChatFormatting.RESET+ " L/s" - + " Max output: " + EnumChatFormatting.RED + GT_Utility.formatNumbers(this.basicOutput*20/25)+EnumChatFormatting.RESET+" L/s", - "Current Output: " + EnumChatFormatting.YELLOW + GT_Utility.formatNumbers(getProductionPerSecond()*20/25) +EnumChatFormatting.RESET+" L/s"}; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - protected int basicOutput = 150; - protected int basicMaxOuput = 50; - protected int basicTemperatureMod = 5; - protected int basicLossTimerLimit = 45; - - // Calcification start time is 43200*25/20=54,000s or 15 hours of game time. - static final int CALCIFICATION_TIME = 43200; - @Override protected void produceSteam(int aAmount) { super.produceSteam(aAmount); @@ -127,14 +127,17 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { @Override protected int getProductionPerSecond() { - if (this.mTemperature < 100 ) { + if (this.mTemperature < 100) { return 0; } - if (this.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(this.basicMaxOuput, this.basicOutput - ((this.mRunTime - CALCIFICATION_TIME) / (CALCIFICATION_TIME/150))); // Every 288*25 ticks, or 6 minutes, lose 1 L output. + 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); } else { - return this.basicOutput; + return maxOutputPer25Ticks; } } @@ -160,19 +163,70 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { @Override protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if ((aTick % 256L == 0L) && (!aBaseMetaTileEntity.getWorld().isThundering())) { - boolean bRain = aBaseMetaTileEntity.getWorld().isRaining() && aBaseMetaTileEntity.getBiome().rainfall > 0.0F; - mProcessingEnergy += bRain && aBaseMetaTileEntity.getWorld().skylightSubtracted >= 4 || !aBaseMetaTileEntity.getSkyAtSide((byte) 1) ? 0 : !bRain && aBaseMetaTileEntity.getWorld().isDaytime() ? 8 * basicTemperatureMod : basicTemperatureMod; + World world = aBaseMetaTileEntity.getWorld(); + if ((aTick % 256L != 0L) || (world.isThundering())) { + return; } + if (!aBaseMetaTileEntity.getSkyAtSide((byte) ForgeDirection.UP.ordinal())) { + return; + } + boolean weatherClear = !world.isRaining() || !(aBaseMetaTileEntity.getBiome().rainfall > 0.0F); + if (!weatherClear && world.skylightSubtracted >= 4) { + return; + } + if (weatherClear) { + if (world.isDaytime()) { + mProcessingEnergy += 8 * basicTemperatureMod; + } else { + mProcessingEnergy += basicTemperatureMod; + } + } else { + mProcessingEnergy += basicTemperatureMod; + } + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + 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, + GT_Utility.formatNumbers(getHeatCapacityPercent()), + GT_Utility.formatNumbers(getHotTimeSeconds()), + GT_Utility.formatNumbers(getMinOutputPerSecond()), + GT_Utility.formatNumbers(getMaxOutputPerSecond()), + GT_Utility.formatNumbers(getCurrentOutputPerSecond())) + .split("\\R"); + } + + protected long getHeatCapacityPercent() { + return mTemperature * 100L / maxProgresstime(); + } + + protected long getHotTimeSeconds() { + return mRunTime * 25L / 20L; + } + + protected long getMinOutputPerSecond() { + return minOutputPer25Ticks * 20L / 25L; + } + + protected long getMaxOutputPerSecond() { + return maxOutputPer25Ticks * 20L / 25L; } - /** for waila */ - public int getBasicOutput() { - return basicOutput; + protected long getCurrentOutputPerSecond() { + return getProductionPerSecond() * 20L / 25L; } - /** for waila */ - public int getCalcificationOutput() { - return getProductionPerSecond(); + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_Boiler_Solar(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); } } 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 594d338204..81ccf4c03d 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,73 +1,69 @@ package gregtech.common.tileentities.boilers; import gregtech.api.enums.Dyes; -import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.objects.GT_RenderedTexture; -import gregtech.common.gui.GT_Container_Boiler; import gregtech.common.gui.GT_GUIContainer_Boiler; import net.minecraft.entity.player.InventoryPlayer; public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boiler_Solar { + public GT_MetaTileEntity_Boiler_Solar_Steel(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); - basicOutput = 450; - basicMaxOuput = 150; + configure(); + } + + private void configure() { + minOutputPer25Ticks = 150; + maxOutputPer25Ticks = 450; basicLossTimerLimit = 75; // Cools down slower than normal boiler } public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { super(aName, aTier, aDescription, aTextures); - basicOutput = 450; - basicMaxOuput = 150; - basicLossTimerLimit = 75; + configure(); } public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { super(aName, aTier, aDescription, aTextures); - basicOutput = 450; - basicMaxOuput = 150; - basicLossTimerLimit = 75; + configure(); + } + + @Override + public int getCapacity() { + return 32000; } + @Override public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[4][17][]; - for (byte i = -1; i < 16; i = (byte) (i + 1)) { - ITexture[] tmp0 = {new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa))}; - rTextures[0][(i + 1)] = tmp0; - ITexture[] tmp1 = {new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.BOILER_SOLAR)}; - rTextures[1][(i + 1)] = tmp1; - ITexture[] tmp2 = {new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa))}; - rTextures[2][(i + 1)] = tmp2; - ITexture[] tmp3 = {new GT_RenderedTexture(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE)}; - rTextures[3][(i + 1)] = tmp3; + for (int color = -1; color < 16; color++) { + int i = color + 1; + short[] colorModulation = Dyes.getModulation(color, Dyes._NULL.mRGBa); + rTextures[0][i] = new ITexture[]{ + new GT_RenderedTexture(BlockIcons.MACHINE_STEELBRICKS_BOTTOM, colorModulation)}; + rTextures[1][i] = new ITexture[]{ + new GT_RenderedTexture(BlockIcons.MACHINE_STEELBRICKS_TOP, colorModulation), + new GT_RenderedTexture(BlockIcons.BOILER_SOLAR)}; + rTextures[2][i] = new ITexture[]{ + new GT_RenderedTexture(BlockIcons.MACHINE_STEELBRICKS_SIDE, colorModulation)}; + rTextures[3][i] = new ITexture[]{ + new GT_RenderedTexture(BlockIcons.MACHINE_STEELBRICKS_SIDE, colorModulation), + new GT_RenderedTexture(BlockIcons.OVERLAY_PIPE)}; } return rTextures; } - public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity, 32000); - } - + @Override public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SolarHPBoiler.png", 32000); + return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SolarHPBoiler.png", getCapacity()); } @Override - public String[] getDescription() { - return new String[]{ - "Steam Power by the Sun", - "Produces 360L of Steam per second", - "Calcifies over time, reducing Steam output to 120L/s", - "Break and replace to decalcify"}; - } - - public int getCapacity() { - return 32000; - } - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_Boiler_Solar_Steel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); } -- cgit From 48915ecd042d1c78f126b1c8bbff3a8dba08dca5 Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Sun, 18 Apr 2021 20:00:36 +0200 Subject: impr(solarboilers): configurable solar boilers --- .../boilers/GT_MetaTileEntity_Boiler_Solar.java | 93 ++++++++++++++-------- .../GT_MetaTileEntity_Boiler_Solar_Steel.java | 57 +++++++++---- 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 @@ -63,9 +71,24 @@ public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boil return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SolarHPBoiler.png", getCapacity()); } + @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(); + } + } -- cgit From 6abf79c50fbb3861e152801cbc2b6a6965e2b97c Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Mon, 19 Apr 2021 02:17:49 +0200 Subject: fix(solarboilers): fixes and QOL improvements - Change run-time counter from seconds to ticks since solar boilers are ticking every 10 ticks, or 0.5 second. - Prevent run-time counter from overflowing Integer.MAX_VALUE ticks. - Fix missing check of available steam before pushing to output. - Fix the cool-down rate that broke in GTNH 2.1.0.6. - Make the solar boilers entirely configurable. --- .../boilers/GT_MetaTileEntity_Boiler.java | 2 +- .../boilers/GT_MetaTileEntity_Boiler_Solar.java | 69 ++++++++++++++-------- .../GT_MetaTileEntity_Boiler_Solar_Steel.java | 7 +-- 3 files changed, 47 insertions(+), 31 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java index ea1af92ed0..7cef8278be 100644 --- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java +++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java @@ -201,7 +201,7 @@ public abstract class GT_MetaTileEntity_Boiler extends GT_MetaTileEntity_BasicTa protected void produceSteam(int aAmount) { mExcessWater -= aAmount; if (mExcessWater < 0) { - int tWaterToConsume = -mExcessWater / GT_Values.STEAM_PER_WATER + 1; + int tWaterToConsume = -mExcessWater / GT_Values.STEAM_PER_WATER; mFluid.amount -= tWaterToConsume; mExcessWater += GT_Values.STEAM_PER_WATER * tWaterToConsume; } 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 b1501901f6..eb7993a448 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 @@ -20,10 +20,10 @@ import net.minecraftforge.common.util.ForgeDirection; import static gregtech.api.enums.ConfigCategories.machineconfig; - +@SuppressWarnings("unused") public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { - private static final String LPS_FMT = "%s L/s"; - protected static final String DEFAULT_STR = "Default: "; + public static final String DEFAULT_STR = "Default: "; + public static final String LPS_FMT = "%s L/s"; private static final String localizedDescFormat = GT_LanguageManager.addStringLocalization( "gt.blockmachines.boiler.solar.desc.format", "Steam Power by the Sun%n" + @@ -35,7 +35,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { protected int maxOutputPerSecond; protected int basicTemperatureMod = 5; // Base Celsius gain or loss protected int coolDownTicks; - private int mRunTime = 0; + private int mRunTimeTicks = 0; public GT_MetaTileEntity_Boiler_Solar(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional, new String[0]); @@ -44,9 +44,9 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { protected void onConfigLoad() { final Configuration config = GregTech_API.sMachineFile.mConfig; - final String configCategory = machineconfig + ".SimpleSolarBoiler"; + final String configCategory = machineconfig + ".boiler.solar.bronze"; - final int defaultCalcificationTicks = 54000; + final int defaultCalcificationTicks = 1080000; // 15 hours final int defaultMinOutputPerSecond = 40; final int defaultMaxOutputPerSecond = 120; final int defaultCoolDownTicks = 45; @@ -60,7 +60,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { 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" + + "Number of ticks it takes to lose 1°C.\n" + DEFAULT_STR + defaultCoolDownTicks).getInt(); } @@ -74,6 +74,28 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { onConfigLoad(); } + /** + * for WAILA + */ + public int getBasicOutput() { + return getMaxOutputPerSecond(); + } + + public int getMaxOutputPerSecond() { + return maxOutputPerSecond; + } + + /** + * for WAILA + */ + public int getCalcificationOutput() { + return getMinOutputPerSecond(); + } + + public int getMinOutputPerSecond() { + return minOutputPerSecond; + } + @Override public String[] getDescription() { return String.format(localizedDescFormat, @@ -102,14 +124,6 @@ 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()); @@ -138,23 +152,26 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { @Override public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); - aNBT.setInteger("mRunTime", this.mRunTime); + aNBT.setInteger("mRunTime", mRunTimeTicks); } @Override public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); - this.mRunTime = aNBT.getInteger("mRunTime"); + mRunTimeTicks = aNBT.getInteger("mRunTime"); } @Override protected void produceSteam(int aAmount) { super.produceSteam(aAmount); - mRunTime++; + // produceSteam is getting called every 10 ticks + if (mRunTimeTicks > 0 && mRunTimeTicks < (Integer.MAX_VALUE - 10)) mRunTimeTicks += 10; + else mRunTimeTicks = Integer.MAX_VALUE; // Prevent Integer overflow wrap } @Override protected void pushSteamToInventories(IGregTechTileEntity aBaseMetaTileEntity) { + if (mSteam == null || mSteam.amount == 0) return; pushSteamToSide(aBaseMetaTileEntity, aBaseMetaTileEntity.getFrontFacing()); } @@ -165,15 +182,15 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { @Override protected int getProductionPerSecond() { - if (this.mTemperature < 100) { + if (mTemperature < 100) { return 0; } - if (mRunTime > calcificationTicks) { + if (mRunTimeTicks > 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); + maxOutputPerSecond - (mRunTimeTicks - calcificationTicks) / calcificationTicks * maxOutputPerSecond); } else { return maxOutputPerSecond; } @@ -244,16 +261,16 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { .split("\\R"); } - protected long getHeatCapacityPercent() { - return mTemperature * 100L / maxProgresstime(); + public int getHeatCapacityPercent() { + return mTemperature * 100 / maxProgresstime(); } - protected long getHotTimeSeconds() { - return mRunTime; + public int getHotTimeSeconds() { + return mRunTimeTicks / 20; } @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Solar(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + return new GT_MetaTileEntity_Boiler_Solar(mName, mTier, mDescriptionArray, mTextures); } } 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 c348f2dd27..aab1e2550d 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 @@ -14,7 +14,6 @@ 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); @@ -24,9 +23,9 @@ public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boil @Override protected void onConfigLoad() { final Configuration config = GregTech_API.sMachineFile.mConfig; - final String configCategory = machineconfig + ".HighPressureSolarBoiler"; + final String configCategory = machineconfig + ".boiler.solar.steel"; - final int defaultCalcificationTicks = 54000; + final int defaultCalcificationTicks = 1080000; // 15 hours final int defaultMinOutputPerSecond = 120; final int defaultMaxOutputPerSecond = 360; final int defaultCoolDownTicks = 75; @@ -40,7 +39,7 @@ public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boil 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" + + "Number of ticks it takes to loose 1°C (Cools down slower than a normal boiler).\n" + DEFAULT_STR + defaultCoolDownTicks).getInt(); } -- cgit From 7209e1deb162a2decfb4ef847df03ccbf6968f38 Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Mon, 19 Apr 2021 15:43:16 +0200 Subject: impr(solarboilers): abstracted the config --- .../boilers/GT_MetaTileEntity_Boiler_Solar.java | 94 ++++++++++++++++------ .../GT_MetaTileEntity_Boiler_Solar_Steel.java | 70 +++++++++------- 2 files changed, 107 insertions(+), 57 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 eb7993a448..bfb7190e7a 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 @@ -22,7 +22,6 @@ import static gregtech.api.enums.ConfigCategories.machineconfig; @SuppressWarnings("unused") public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { - public static final String DEFAULT_STR = "Default: "; public static final String LPS_FMT = "%s L/s"; private static final String localizedDescFormat = GT_LanguageManager.addStringLocalization( "gt.blockmachines.boiler.solar.desc.format", @@ -30,6 +29,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { "Produces %sL of Steam per second%n" + "Calcifies over time, reducing Steam output to %sL/s%n" + "Break and replace to descale"); + private final Config config = new Config(); protected int calcificationTicks; protected int minOutputPerSecond; protected int maxOutputPerSecond; @@ -39,39 +39,17 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { 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 + ".boiler.solar.bronze"; - - final int defaultCalcificationTicks = 1080000; // 15 hours - 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 lose 1°C.\n" + - DEFAULT_STR + defaultCoolDownTicks).getInt(); + config.onConfigLoad(); } public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { super(aName, aTier, aDescription, aTextures); - onConfigLoad(); + config.onConfigLoad(); } public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { super(aName, aTier, aDescription, aTextures); - onConfigLoad(); + config.onConfigLoad(); } /** @@ -273,4 +251,68 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_Boiler_Solar(mName, mTier, mDescriptionArray, mTextures); } + + protected class Config { + public static final String DEFAULT_STR = "Default: "; + private static final String localCategory = "boiler.solar.bronze"; + private static final int defaultCalcificationTicks = 1080000; // 15 hours + private static final String defaultCalcificationTicksComment = + "Number of run-time ticks before boiler starts calcification.\n" + + "100% calcification and minimal output will be reached at 2 times this.\n"; + private static final int defaultMinOutputPerSecond = 40; + private static final String defaultMinOutputPerSecondComment = ""; + private static final int defaultMaxOutputPerSecond = 120; + private static final String defaultMaxOutputPerSecondComment = ""; + private static final int defaultCoolDownTicks = 45; + private static final String defaultCoolDownTicksComment = "Number of ticks it takes to lose 1°C.\n"; + final Configuration configuration = GregTech_API.sMachineFile.mConfig; + final String configCategory = getConfigCategory(); + + protected String getConfigCategory() { + return machineconfig + "." + localCategory; + } + + protected void onConfigLoad() { + calcificationTicks = configuration.get(configCategory, "CalcificationTicks", getDefaultCalcificationTicks(), + getDefaultCalcificationTicksComment() + DEFAULT_STR + getDefaultCalcificationTicks()).getInt(); + minOutputPerSecond = configuration.get(configCategory, "MinOutputPerSecond", getDefaultMinOutputPerSecond(), + getDefaultMinOutputPerSecondComment() + DEFAULT_STR + getDefaultMinOutputPerSecond()).getInt(); + maxOutputPerSecond = configuration.get(configCategory, "MaxOutputPerSecond", getDefaultMaxOutputPerSecond(), + getDefaultMaxOutputPerSecondComment() + DEFAULT_STR + getDefaultMaxOutputPerSecond()).getInt(); + coolDownTicks = configuration.get(configCategory, "CoolDownTicks", getDefaultCoolDownTicks(), + getDefaultCoolDownTicksComment() + DEFAULT_STR + getDefaultCoolDownTicks()).getInt(); + } + + protected int getDefaultCalcificationTicks() { + return defaultCalcificationTicks; + } + + protected String getDefaultCalcificationTicksComment() { + return defaultCalcificationTicksComment; + } + + protected int getDefaultMinOutputPerSecond() { + return defaultMinOutputPerSecond; + } + + protected String getDefaultMinOutputPerSecondComment() { + return defaultMinOutputPerSecondComment; + } + + protected int getDefaultMaxOutputPerSecond() { + return defaultMaxOutputPerSecond; + } + + protected String getDefaultMaxOutputPerSecondComment() { + return defaultMaxOutputPerSecondComment; + } + + protected int getDefaultCoolDownTicks() { + return defaultCoolDownTicks; + } + + protected String getDefaultCoolDownTicksComment() { + return defaultCoolDownTicksComment; + } + } } 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 aab1e2550d..6de07316e9 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,6 +1,5 @@ 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; @@ -9,39 +8,25 @@ 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 final GT_MetaTileEntity_Boiler_Solar_Steel.Config config = new GT_MetaTileEntity_Boiler_Solar_Steel.Config(); public GT_MetaTileEntity_Boiler_Solar_Steel(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); - onConfigLoad(); + config.onConfigLoad(); } - @Override - protected void onConfigLoad() { - final Configuration config = GregTech_API.sMachineFile.mConfig; - final String configCategory = machineconfig + ".boiler.solar.steel"; - - final int defaultCalcificationTicks = 1080000; // 15 hours - final int defaultMinOutputPerSecond = 120; - final int defaultMaxOutputPerSecond = 360; - final int defaultCoolDownTicks = 75; - - 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 a normal boiler).\n" + - DEFAULT_STR + defaultCoolDownTicks).getInt(); + public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + config.onConfigLoad(); + } + public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + config.onConfigLoad(); } @Override @@ -80,14 +65,37 @@ public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boil 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(); - } + protected class Config extends GT_MetaTileEntity_Boiler_Solar.Config { + private static final String localCategory = "boiler.solar.steel"; + private static final int defaultMinOutputPerSecond = 120; + private static final int defaultMaxOutputPerSecond = 360; + private static final int defaultCoolDownTicks = 75; + private static final String defaultCoolDownTicksComment = "Number of ticks it takes to loose 1°C (Cools down slower than a normal boiler).\n"; - public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - onConfigLoad(); + @Override + protected String getConfigCategory() { + return machineconfig + "." + localCategory; + } + + @Override + protected int getDefaultMinOutputPerSecond() { + return defaultMinOutputPerSecond; + } + + @Override + protected int getDefaultMaxOutputPerSecond() { + return defaultMaxOutputPerSecond; + } + + @Override + protected int getDefaultCoolDownTicks() { + return defaultCoolDownTicks; + } + + @Override + protected String getDefaultCoolDownTicksComment() { + return defaultCoolDownTicksComment; + } } } -- cgit From 8ed4dd90d52b1d1697807a4abbddcf1338a52337 Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Fri, 23 Apr 2021 19:08:09 +0200 Subject: fixes(solarboiler): integer math, waila plugin interface, config - Fix integer math of getProductionPerSecond by moving the multiplier ahead. - Fix and deprecate WAILAPlugins interface by returning ratio adjusted values. - Simplify the inner Config class. --- .../boilers/GT_MetaTileEntity_Boiler_Solar.java | 101 +++++++++------------ .../GT_MetaTileEntity_Boiler_Solar_Steel.java | 24 ++--- 2 files changed, 50 insertions(+), 75 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 bfb7190e7a..631f7eed7a 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,6 +1,5 @@ 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; @@ -15,12 +14,11 @@ 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.GregTech_API.sMachineFile; import static gregtech.api.enums.ConfigCategories.machineconfig; -@SuppressWarnings("unused") public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { public static final String LPS_FMT = "%s L/s"; private static final String localizedDescFormat = GT_LanguageManager.addStringLocalization( @@ -54,9 +52,13 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { /** * for WAILA + * + * @deprecated replaced by {@link #getMaxOutputPerSecond()} + * TODO: Update WAILAPlugins to use getMaxOutputPerSecond() instead */ + @Deprecated public int getBasicOutput() { - return getMaxOutputPerSecond(); + return (int) (getMaxOutputPerSecond() * 1.25F); } public int getMaxOutputPerSecond() { @@ -65,13 +67,14 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { /** * for WAILA + * + * @deprecated replaced by {@link #getProductionPerSecond()} + * TODO: Update WAILAPlugins to use getProductionPerSecond() instead */ + @SuppressWarnings("unused") + @Deprecated public int getCalcificationOutput() { - return getMinOutputPerSecond(); - } - - public int getMinOutputPerSecond() { - return minOutputPerSecond; + return (int) (getProductionPerSecond() * 1.25F); } @Override @@ -82,6 +85,10 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { .split("\\R"); } + public int getMinOutputPerSecond() { + return minOutputPerSecond; + } + @Override public ITexture[][][] getTextureSet(ITexture[] aTextures) { ITexture[][][] rTextures = new ITexture[4][17][]; @@ -143,7 +150,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { protected void produceSteam(int aAmount) { super.produceSteam(aAmount); // produceSteam is getting called every 10 ticks - if (mRunTimeTicks > 0 && mRunTimeTicks < (Integer.MAX_VALUE - 10)) mRunTimeTicks += 10; + if (mRunTimeTicks >= 0 && mRunTimeTicks < (Integer.MAX_VALUE - 10)) mRunTimeTicks += 10; else mRunTimeTicks = Integer.MAX_VALUE; // Prevent Integer overflow wrap } @@ -159,7 +166,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { } @Override - protected int getProductionPerSecond() { + public int getProductionPerSecond() { if (mTemperature < 100) { return 0; } @@ -168,7 +175,8 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { * from the maximum output per second, and return this or the minimum output per second */ return Math.max(minOutputPerSecond, - maxOutputPerSecond - (mRunTimeTicks - calcificationTicks) / calcificationTicks * maxOutputPerSecond); + maxOutputPerSecond + - maxOutputPerSecond * (mRunTimeTicks - calcificationTicks) / calcificationTicks); } else { return maxOutputPerSecond; } @@ -253,66 +261,41 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { } protected class Config { - public static final String DEFAULT_STR = "Default: "; - private static final String localCategory = "boiler.solar.bronze"; - private static final int defaultCalcificationTicks = 1080000; // 15 hours - private static final String defaultCalcificationTicksComment = - "Number of run-time ticks before boiler starts calcification.\n" + - "100% calcification and minimal output will be reached at 2 times this.\n"; - private static final int defaultMinOutputPerSecond = 40; - private static final String defaultMinOutputPerSecondComment = ""; - private static final int defaultMaxOutputPerSecond = 120; - private static final String defaultMaxOutputPerSecondComment = ""; - private static final int defaultCoolDownTicks = 45; - private static final String defaultCoolDownTicksComment = "Number of ticks it takes to lose 1°C.\n"; - final Configuration configuration = GregTech_API.sMachineFile.mConfig; - final String configCategory = getConfigCategory(); - - protected String getConfigCategory() { - return machineconfig + "." + localCategory; - } - - protected void onConfigLoad() { - calcificationTicks = configuration.get(configCategory, "CalcificationTicks", getDefaultCalcificationTicks(), - getDefaultCalcificationTicksComment() + DEFAULT_STR + getDefaultCalcificationTicks()).getInt(); - minOutputPerSecond = configuration.get(configCategory, "MinOutputPerSecond", getDefaultMinOutputPerSecond(), - getDefaultMinOutputPerSecondComment() + DEFAULT_STR + getDefaultMinOutputPerSecond()).getInt(); - maxOutputPerSecond = configuration.get(configCategory, "MaxOutputPerSecond", getDefaultMaxOutputPerSecond(), - getDefaultMaxOutputPerSecondComment() + DEFAULT_STR + getDefaultMaxOutputPerSecond()).getInt(); - coolDownTicks = configuration.get(configCategory, "CoolDownTicks", getDefaultCoolDownTicks(), - getDefaultCoolDownTicksComment() + DEFAULT_STR + getDefaultCoolDownTicks()).getInt(); - } - protected int getDefaultCalcificationTicks() { - return defaultCalcificationTicks; + protected int get(final String key, final int defaultValue, final String... comments) { + final StringBuilder comment = new StringBuilder(); + if (comments.length > 0) comment.append(String.join("\n", comments)).append("\n"); + comment.append("Default: ").append(defaultValue); + return sMachineFile.mConfig.get(getConfigCategory(), key, defaultValue, comment.toString()).getInt(); } - protected String getDefaultCalcificationTicksComment() { - return defaultCalcificationTicksComment; + protected int getCalcificationTicks() { + return get("CalcificationTicks", 1080000, + "Number of run-time ticks before boiler starts calcification.", + "100% calcification and minimal output will be reached at 2 times this."); } - protected int getDefaultMinOutputPerSecond() { - return defaultMinOutputPerSecond; - } - - protected String getDefaultMinOutputPerSecondComment() { - return defaultMinOutputPerSecondComment; + protected String getConfigCategory() { + return machineconfig + ".boiler.solar.bronze"; } - protected int getDefaultMaxOutputPerSecond() { - return defaultMaxOutputPerSecond; + protected int getCoolDownTicks() { + return get("CoolDownTicks", 45, "Number of ticks it takes to lose 1°C."); } - protected String getDefaultMaxOutputPerSecondComment() { - return defaultMaxOutputPerSecondComment; + protected int getMaxOutputPerSecond() { + return get("MaxOutputPerSecond", 120); } - protected int getDefaultCoolDownTicks() { - return defaultCoolDownTicks; + protected int getMinOutputPerSecond() { + return get("MinOutputPerSecond", 40); } - protected String getDefaultCoolDownTicksComment() { - return defaultCoolDownTicksComment; + protected void onConfigLoad() { + calcificationTicks = getCalcificationTicks(); + minOutputPerSecond = getMinOutputPerSecond(); + maxOutputPerSecond = getMaxOutputPerSecond(); + coolDownTicks = getCoolDownTicks(); } } } 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 6de07316e9..aebc1fae0a 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 @@ -66,36 +66,28 @@ public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boil } protected class Config extends GT_MetaTileEntity_Boiler_Solar.Config { - private static final String localCategory = "boiler.solar.steel"; - private static final int defaultMinOutputPerSecond = 120; - private static final int defaultMaxOutputPerSecond = 360; - private static final int defaultCoolDownTicks = 75; - private static final String defaultCoolDownTicksComment = "Number of ticks it takes to loose 1°C (Cools down slower than a normal boiler).\n"; @Override protected String getConfigCategory() { - return machineconfig + "." + localCategory; + return machineconfig + ".boiler.solar.steel"; } @Override - protected int getDefaultMinOutputPerSecond() { - return defaultMinOutputPerSecond; + protected int getCoolDownTicks() { + return get("CoolDownTicks", 75, + "Number of ticks it takes to loose 1°C (Cools down slower than a normal boiler)."); } @Override - protected int getDefaultMaxOutputPerSecond() { - return defaultMaxOutputPerSecond; + protected int getMaxOutputPerSecond() { + return get("MaxOutputPerSecond", 360); } @Override - protected int getDefaultCoolDownTicks() { - return defaultCoolDownTicks; + protected int getMinOutputPerSecond() { + return get("MinOutputPerSecond", 120); } - @Override - protected String getDefaultCoolDownTicksComment() { - return defaultCoolDownTicksComment; - } } } -- cgit From 915d64b1d0b202b07956f3ec6ffc3a2a5c317dff Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Sat, 24 Apr 2021 19:14:22 +0800 Subject: Optimize config code 1. Reuse same config across all solar boilers of the same class 2. Remove shading of config field in subclass Signed-off-by: Glease <4586901+Glease@users.noreply.github.com> --- .../boilers/GT_MetaTileEntity_Boiler_Solar.java | 92 ++++++++++++---------- .../GT_MetaTileEntity_Boiler_Solar_Steel.java | 42 +++------- 2 files changed, 61 insertions(+), 73 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 631f7eed7a..566209401b 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 @@ -27,27 +27,32 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { "Produces %sL of Steam per second%n" + "Calcifies over time, reducing Steam output to %sL/s%n" + "Break and replace to descale"); - private final Config config = new Config(); - protected int calcificationTicks; - protected int minOutputPerSecond; - protected int maxOutputPerSecond; + protected final Config mConfig; protected int basicTemperatureMod = 5; // Base Celsius gain or loss - protected int coolDownTicks; private int mRunTimeTicks = 0; public GT_MetaTileEntity_Boiler_Solar(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional, new String[0]); - config.onConfigLoad(); + mConfig = createConfig(); } public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { super(aName, aTier, aDescription, aTextures); - config.onConfigLoad(); + mConfig = createConfig(); } public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { super(aName, aTier, aDescription, aTextures); - config.onConfigLoad(); + mConfig = createConfig(); + } + + protected GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, Config aConfig) { + super(aName, aTier, aDescription, aTextures); + mConfig = aConfig; + } + + protected Config createConfig() { + return new Config(machineconfig + ".boiler.solar.bronze",1080000,40,120,45); } /** @@ -62,7 +67,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { } public int getMaxOutputPerSecond() { - return maxOutputPerSecond; + return mConfig.getMaxOutputPerSecond(); } /** @@ -86,7 +91,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { } public int getMinOutputPerSecond() { - return minOutputPerSecond; + return mConfig.getMinOutputPerSecond(); } @Override @@ -170,15 +175,15 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { if (mTemperature < 100) { return 0; } - if (mRunTimeTicks > calcificationTicks) { + if (mRunTimeTicks > mConfig.getCalcificationTicks()) { /* 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 - - maxOutputPerSecond * (mRunTimeTicks - calcificationTicks) / calcificationTicks); + return Math.max(mConfig.getMinOutputPerSecond(), + mConfig.getMaxOutputPerSecond() + - mConfig.getMaxOutputPerSecond() * (mRunTimeTicks - mConfig.getCalcificationTicks()) / mConfig.getCalcificationTicks()); } else { - return maxOutputPerSecond; + return mConfig.getMaxOutputPerSecond(); } } @@ -194,7 +199,7 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { @Override protected int getCooldownInterval() { - return coolDownTicks / basicTemperatureMod; + return mConfig.getCoolDownTicks() / basicTemperatureMod; } @Override @@ -257,45 +262,50 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Solar(mName, mTier, mDescriptionArray, mTextures); + return new GT_MetaTileEntity_Boiler_Solar(mName, mTier, mDescriptionArray, mTextures, mConfig); } - protected class Config { - - protected int get(final String key, final int defaultValue, final String... comments) { - final StringBuilder comment = new StringBuilder(); - if (comments.length > 0) comment.append(String.join("\n", comments)).append("\n"); - comment.append("Default: ").append(defaultValue); - return sMachineFile.mConfig.get(getConfigCategory(), key, defaultValue, comment.toString()).getInt(); - } - - protected int getCalcificationTicks() { - return get("CalcificationTicks", 1080000, + protected static class Config { + private final int calcificationTicks; + private final int minOutputPerSecond; + private final int maxOutputPerSecond; + private final int coolDownTicks; + + public Config(String aCategory, + int aDefaultCalcificationTicks, + int aDefaultMinOutputPerSecond, + int aDefaultMaxOutputPerSecond, + int aDefaultCoolDownTicks) { + calcificationTicks = get(aCategory,"CalcificationTicks", aDefaultCalcificationTicks, "Number of run-time ticks before boiler starts calcification.", "100% calcification and minimal output will be reached at 2 times this."); + minOutputPerSecond = get(aCategory,"MinOutputPerSecond", aDefaultMinOutputPerSecond); + maxOutputPerSecond = get(aCategory,"MaxOutputPerSecond", aDefaultMaxOutputPerSecond); + coolDownTicks = get(aCategory,"CoolDownTicks", aDefaultCoolDownTicks, "Number of ticks it takes to lose 1°C."); } - protected String getConfigCategory() { - return machineconfig + ".boiler.solar.bronze"; + protected int get(final String aCategory, final String aKey, final int aDefaultValue, final String... aComments) { + final StringBuilder tCommentBuilder = new StringBuilder(); + for (String tComment: aComments) + tCommentBuilder.append(tComment).append('\n'); + tCommentBuilder.append("Default: ").append(aDefaultValue); + return sMachineFile.mConfig.get(aCategory, aKey, aDefaultValue, tCommentBuilder.toString()).getInt(); } - protected int getCoolDownTicks() { - return get("CoolDownTicks", 45, "Number of ticks it takes to lose 1°C."); + public int getCalcificationTicks() { + return calcificationTicks; } - protected int getMaxOutputPerSecond() { - return get("MaxOutputPerSecond", 120); + public int getMinOutputPerSecond() { + return minOutputPerSecond; } - protected int getMinOutputPerSecond() { - return get("MinOutputPerSecond", 40); + public int getMaxOutputPerSecond() { + return maxOutputPerSecond; } - protected void onConfigLoad() { - calcificationTicks = getCalcificationTicks(); - minOutputPerSecond = getMinOutputPerSecond(); - maxOutputPerSecond = getMaxOutputPerSecond(); - coolDownTicks = getCoolDownTicks(); + public int getCoolDownTicks() { + return coolDownTicks; } } } 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 aebc1fae0a..feaaa7fa32 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 @@ -12,21 +12,25 @@ import net.minecraft.entity.player.InventoryPlayer; import static gregtech.api.enums.ConfigCategories.machineconfig; public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boiler_Solar { - private final GT_MetaTileEntity_Boiler_Solar_Steel.Config config = new GT_MetaTileEntity_Boiler_Solar_Steel.Config(); - public GT_MetaTileEntity_Boiler_Solar_Steel(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); - config.onConfigLoad(); } public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { super(aName, aTier, aDescription, aTextures); - config.onConfigLoad(); } public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { super(aName, aTier, aDescription, aTextures); - config.onConfigLoad(); + } + + public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, Config aConfig) { + super(aName, aTier, aDescription, aTextures, aConfig); + } + + @Override + protected Config createConfig() { + return new Config(machineconfig + ".boiler.solar.steel",108000, 120, 360, 75); } @Override @@ -62,32 +66,6 @@ public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boil @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Solar_Steel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - protected class Config extends GT_MetaTileEntity_Boiler_Solar.Config { - - @Override - protected String getConfigCategory() { - return machineconfig + ".boiler.solar.steel"; - } - - @Override - protected int getCoolDownTicks() { - return get("CoolDownTicks", 75, - "Number of ticks it takes to loose 1°C (Cools down slower than a normal boiler)."); - } - - @Override - protected int getMaxOutputPerSecond() { - return get("MaxOutputPerSecond", 360); - } - - @Override - protected int getMinOutputPerSecond() { - return get("MinOutputPerSecond", 120); - } - + return new GT_MetaTileEntity_Boiler_Solar_Steel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures, this.mConfig); } - } -- cgit From 57de9adedb1a6d4c34ea5544ff4feccfa1693284 Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Sat, 24 Apr 2021 13:25:57 +0200 Subject: cleanup(todo): remove done todo tasks mentions WAILAPlugins has been updated to the new solar boiler interface. Deprecated methods are left behind for backward compat with older plugins. Rebase from experimental --- .../common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java | 2 -- 1 file changed, 2 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 566209401b..3fd061eff5 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 @@ -59,7 +59,6 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { * for WAILA * * @deprecated replaced by {@link #getMaxOutputPerSecond()} - * TODO: Update WAILAPlugins to use getMaxOutputPerSecond() instead */ @Deprecated public int getBasicOutput() { @@ -74,7 +73,6 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { * for WAILA * * @deprecated replaced by {@link #getProductionPerSecond()} - * TODO: Update WAILAPlugins to use getProductionPerSecond() instead */ @SuppressWarnings("unused") @Deprecated -- cgit