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:
parent
8ee2d52dfa
commit
fd56cf48a3
3 changed files with 45 additions and 6 deletions
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in a new issue