Small lava boiler "calcification" mechanic (#1316)

* Small lava boiler now produces impure stone dust in output slot. Efficiency drops to 33% as output fills up.

* changed tooltip

* Added config option for small lava boiler efficiency loss due to byproduct buildup.
This commit is contained in:
SteelGiant87 2018-04-11 22:36:34 +01:00 committed by Blood-Asp
parent 8ee2d52dfa
commit fd56cf48a3
3 changed files with 45 additions and 6 deletions

View file

@ -227,6 +227,7 @@ public class GT_Mod implements IGT_Mod {
gregtechproxy.mIncreaseDungeonLoot = tMainConfig.get(aTextGeneral, "IncreaseDungeonLoot", true).getBoolean(true); gregtechproxy.mIncreaseDungeonLoot = tMainConfig.get(aTextGeneral, "IncreaseDungeonLoot", true).getBoolean(true);
gregtechproxy.mAxeWhenAdventure = tMainConfig.get(aTextGeneral, "AdventureModeStartingAxe", true).getBoolean(true); gregtechproxy.mAxeWhenAdventure = tMainConfig.get(aTextGeneral, "AdventureModeStartingAxe", true).getBoolean(true);
gregtechproxy.mHardcoreCables = tMainConfig.get(aTextGeneral, "HardCoreCableLoss", false).getBoolean(false); gregtechproxy.mHardcoreCables = tMainConfig.get(aTextGeneral, "HardCoreCableLoss", false).getBoolean(false);
gregtechproxy.mSmallLavaBoilerEfficiencyLoss = tMainConfig.get(aTextGeneral, "SmallLavaBoilerEfficiencyLoss", true).getBoolean(true);
gregtechproxy.mSurvivalIntoAdventure = tMainConfig.get(aTextGeneral, "forceAdventureMode", false).getBoolean(false); gregtechproxy.mSurvivalIntoAdventure = tMainConfig.get(aTextGeneral, "forceAdventureMode", false).getBoolean(false);
gregtechproxy.mHungerEffect = tMainConfig.get(aTextGeneral, "AFK_Hunger", false).getBoolean(false); gregtechproxy.mHungerEffect = tMainConfig.get(aTextGeneral, "AFK_Hunger", false).getBoolean(false);
gregtechproxy.mHardRock = tMainConfig.get(aTextGeneral, "harderstone", false).getBoolean(false); gregtechproxy.mHardRock = tMainConfig.get(aTextGeneral, "harderstone", false).getBoolean(false);

View file

@ -132,6 +132,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {
private final DateFormat mDateFormat = DateFormat.getInstance(); private final DateFormat mDateFormat = DateFormat.getInstance();
public ArrayList<String> mBufferedPlayerActivity = new ArrayList(); public ArrayList<String> mBufferedPlayerActivity = new ArrayList();
public boolean mHardcoreCables = false; public boolean mHardcoreCables = false;
public boolean mSmallLavaBoilerEfficiencyLoss = true;
public boolean mDisableVanillaOres = true; public boolean mDisableVanillaOres = true;
public boolean mNerfStorageBlocks = true; public boolean mNerfStorageBlocks = true;
public boolean mHardMachineCasings = true; public boolean mHardMachineCasings = true;

View file

@ -1,5 +1,6 @@
package gregtech.common.tileentities.boilers; package gregtech.common.tileentities.boilers;
import gregtech.GT_Mod;
import gregtech.api.enums.Dyes; import gregtech.api.enums.Dyes;
import gregtech.api.enums.Materials; import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.OrePrefixes;
@ -10,10 +11,12 @@ import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Pollution; import gregtech.common.GT_Pollution;
import gregtech.common.gui.GT_Container_Boiler; import gregtech.common.gui.GT_Container_Boiler;
import gregtech.common.gui.GT_GUIContainer_Boiler; import gregtech.common.gui.GT_GUIContainer_Boiler;
import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
@ -24,6 +27,8 @@ public class GT_MetaTileEntity_Boiler_Lava
super(aID, aName, aNameRegional, new String[]{ super(aID, aName, aNameRegional, new String[]{
"A Boiler running off Lava", "A Boiler running off Lava",
"Produces 600L of Steam per second", "Produces 600L of Steam per second",
"Drops to 200L of Steam per second as byproduct slot fills",
"Clean out byproducts to keep efficiency high",
"Causes 20 Pollution per second"}); "Causes 20 Pollution per second"});
} }
@ -96,13 +101,37 @@ public class GT_MetaTileEntity_Boiler_Lava
aBaseMetaTileEntity.doExplosion(2048L); aBaseMetaTileEntity.doExplosion(2048L);
return; return;
} }
int maxOutput = 300;
int minOutput = 100;
double efficiency = 1.0;
if (GT_Mod.gregtechproxy.mSmallLavaBoilerEfficiencyLoss) {
ItemStack byproductStack = aBaseMetaTileEntity.getStackInSlot(3);
if (byproductStack != null && !(GT_Utility.isStackInvalid(byproductStack))) {
// Efficiency drops from 100% when there is no byproduct,
// to 0% when there is a full stack of byproduct
efficiency = 1.0 - (double) byproductStack.stackSize / (double) byproductStack.getMaxStackSize();
}
}
//Decrease water amount in proportion to steam production
//Can't decrease by a fraction, as fluid amounts are integers, so need to decrease randomly so expected amount consumed is correct
if(aBaseMetaTileEntity.getRandomNumber(100) < Math.round(efficiency * 100.0)) {
this.mFluid.amount -= 1; this.mFluid.amount -= 1;
}
//Steam output drops from maxOutput when efficiency is 100% to minOutput when efficiency is 0%
long output = (minOutput + Math.round((double) (maxOutput - minOutput) * efficiency));
if (this.mSteam == null) { if (this.mSteam == null) {
this.mSteam = GT_ModHandler.getSteam(300L); this.mSteam = GT_ModHandler.getSteam(output);
} else if (GT_ModHandler.isSteam(this.mSteam)) { } else if (GT_ModHandler.isSteam(this.mSteam)) {
this.mSteam.amount += 300; this.mSteam.amount += output;
} else { } else {
this.mSteam = GT_ModHandler.getSteam(300L); this.mSteam = GT_ModHandler.getSteam(output);
} }
} }
} else { } else {
@ -117,12 +146,20 @@ public class GT_MetaTileEntity_Boiler_Lava
if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) && if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) &&
(GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.bucket.get(Materials.Lava)))) { (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.bucket.get(Materials.Lava)))) {
this.mProcessingEnergy += 1000; this.mProcessingEnergy += 1000;
aBaseMetaTileEntity.decrStackSize(2, 1); //Either we only had one bucket of lava in the input, and this is fine, or we had a stack of lava buckets.
aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L)); //Those can only stack when cheating, so we don't care about voiding them as we can just cheat in more
aBaseMetaTileEntity.setInventorySlotContents(2, GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L));
} }
if ((this.mTemperature < 1000) && (this.mProcessingEnergy > 0) && (aTick % 8L == 0L)) { if ((this.mTemperature < 1000) && (this.mProcessingEnergy > 0) && (aTick % 8L == 0L)) {
this.mProcessingEnergy -= 3; this.mProcessingEnergy -= 3;
this.mTemperature += 1; this.mTemperature += 1;
if (aBaseMetaTileEntity.getRandomNumber(333) == 0) {
//Produce one byproduct on average every one bucket of lava
if(!aBaseMetaTileEntity.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustImpure, Materials.Stone, 1L))) {
//If the output slot had something in it already, stick one dust in:
aBaseMetaTileEntity.setInventorySlotContents(3, GT_OreDictUnificator.get(OrePrefixes.dustImpure, Materials.Stone, 1));
}
}
} }
if (this.mProcessingEnergy > 0 && (aTick % 20L == 0L)) { if (this.mProcessingEnergy > 0 && (aTick % 20L == 0L)) {