From 1c7d8e41f0b95fde2931fd11834a942a60b56506 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 13 Jun 2023 09:54:26 +0200 Subject: [PATCH] leaded fuel pollution --- .../handler/pollution/PollutionHandler.java | 2 ++ .../java/com/hbm/inventory/fluid/Fluids.java | 7 ++++--- .../hbm/inventory/fluid/trait/FluidTrait.java | 1 + .../fluid/trait/FluidTraitSimple.java | 10 +++++++++- .../machine/TileEntityHeaterOilburner.java | 6 +++++- .../TileEntityMachineCombustionEngine.java | 6 +++++- .../machine/TileEntityMachineDiesel.java | 6 ++++++ .../gui/processing/gui_electrolyser.png | Bin 9336 -> 9377 bytes 8 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/handler/pollution/PollutionHandler.java b/src/main/java/com/hbm/handler/pollution/PollutionHandler.java index 570f91415..d781b4e32 100644 --- a/src/main/java/com/hbm/handler/pollution/PollutionHandler.java +++ b/src/main/java/com/hbm/handler/pollution/PollutionHandler.java @@ -32,6 +32,8 @@ public class PollutionHandler { /** Baserate of soot generation for a furnace-equivalent machine per second */ public static final float SOOT_PER_SECOND = 1F / 25F; + /** Baserate of heavy metal generation, balanced around the soot values of combustion engines */ + public static final float HEAVY_METAL_PER_SECOND = 1F / 50F; /////////////////////// /// UTILITY METHODS /// diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index f9de9f7b3..df3839c36 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -167,6 +167,7 @@ public class Fluids { public static final FT_NoContainer NOCON = new FT_NoContainer(); public static final FT_NoID NOID = new FT_NoID(); public static final FT_Delicious DELICIOUS = new FT_Delicious(); + public static final FT_Leaded LEADED = new FT_Leaded(); public static void init() { @@ -255,9 +256,9 @@ public class Fluids { SALIENT = new FluidType("SALIENT", 0x457F2D, 0, 0, 0, EnumSymbol.NONE).addTraits(DELICIOUS, LIQUID, VISCOUS); XPJUICE = new FluidType("XPJUICE", 0xBBFF09, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); ENDERJUICE = new FluidType("ENDERJUICE", 0x127766, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); - PETROIL_LEADED = new FluidType("PETROIL_LEADED", 0x44413d, 1, 3, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2331F6)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 450_000), LIQUID); - GASOLINE_LEADED = new FluidType("GASOLINE_LEADED", 0x445772, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2F775A)).addTraits(new FT_Flammable(400_000), new FT_Combustible(FuelGrade.HIGH, 1_500_000), LIQUID); - COALGAS_LEADED = new FluidType("COALGAS_LEADED", 0x445772, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x1E155F)).addTraits(new FT_Flammable(75_000), new FT_Combustible(FuelGrade.MEDIUM, 250_000), LIQUID); + PETROIL_LEADED = new FluidType("PETROIL_LEADED", 0x44413d, 1, 3, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2331F6)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 450_000), LIQUID, LEADED); + GASOLINE_LEADED = new FluidType("GASOLINE_LEADED", 0x445772, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2F775A)).addTraits(new FT_Flammable(400_000), new FT_Combustible(FuelGrade.HIGH, 1_500_000), LIQUID, LEADED); + COALGAS_LEADED = new FluidType("COALGAS_LEADED", 0x445772, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x1E155F)).addTraits(new FT_Flammable(75_000), new FT_Combustible(FuelGrade.MEDIUM, 250_000), LIQUID, LEADED); SULFURIC_ACID = new FluidType("SULFURIC_ACID", 0xB0AA64, 3, 0, 2, EnumSymbol.ACID).addTraits(new FT_Corrosive(50), LIQUID); COOLANT_HOT = new FluidType("COOLANT_HOT", 0x99525E, 1, 0, 0, EnumSymbol.NONE).setTemp(600).addTraits(LIQUID); MUG = new FluidType("MUG", 0x4B2D28, 0, 0, 0, EnumSymbol.NONE).addTraits(DELICIOUS, LIQUID); diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FluidTrait.java b/src/main/java/com/hbm/inventory/fluid/trait/FluidTrait.java index 2d5bac5ab..ba385ad54 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FluidTrait.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FluidTrait.java @@ -33,6 +33,7 @@ public abstract class FluidTrait { traitNameMap.put("amat", FT_Amat.class); traitNameMap.put("leadcontainer", FT_LeadContainer.class); traitNameMap.put("delicious", FT_Delicious.class); + traitNameMap.put("leaded", FT_Leaded.class); traitNameMap.put("noid", FT_NoID.class); traitNameMap.put("nocontainer", FT_NoContainer.class); } diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java b/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java index 319a7e6d4..d282cea42 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java @@ -49,10 +49,18 @@ public class FluidTraitSimple { info.add(EnumChatFormatting.DARK_RED + "[Requires hazardous material tank to hold]"); } } + public static class FT_Delicious extends FluidTrait { @Override public void addInfoHidden(List info) { info.add(EnumChatFormatting.DARK_GREEN + "[Delicious]"); - }} + } + } + + public static class FT_Leaded extends FluidTrait { + @Override public void addInfoHidden(List info) { + info.add(EnumChatFormatting.BLUE + "[Leaded Fuel]"); + } + } public static class FT_NoID extends FluidTrait { } public static class FT_NoContainer extends FluidTrait { } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index a4ba8adab..555704c86 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -9,6 +9,7 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Flammable; +import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Leaded; import com.hbm.inventory.gui.GUIOilburner; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; @@ -73,7 +74,10 @@ public class TileEntityHeaterOilburner extends TileEntityMachineBase implements this.heatEnergy += heat * toBurn; - if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * burnRate * 0.5F); + if(worldObj.getTotalWorldTime() % 20 == 0) { + PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * burnRate * 0.5F); + if(tank.getTankType().hasTrait(FT_Leaded.class)) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.HEAVYMETAL, PollutionHandler.HEAVY_METAL_PER_SECOND * burnRate * 0.5F); + } shouldCool = false; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index 64ea819ff..a01fd1347 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -9,6 +9,7 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Combustible; +import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Leaded; import com.hbm.inventory.gui.GUICombustionEngine; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemPistons.EnumPistonType; @@ -86,7 +87,10 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachineBase imp this.power += toBurn * (trait.getCombustionEnergy() / 10_000D) * eff; fill -= toBurn; - if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * setting * 0.1F); + if(worldObj.getTotalWorldTime() % 20 == 0) { + PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * setting * 0.1F); + if(tank.getTankType().hasTrait(FT_Leaded.class)) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.HEAVYMETAL, PollutionHandler.HEAVY_METAL_PER_SECOND * setting * 0.1F); + } if(toBurn > 0) { wasOn = true; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index 1ec212628..dcb1f443a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -6,6 +6,8 @@ import java.util.HashMap; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.handler.pollution.PollutionHandler; +import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; import com.hbm.inventory.FluidContainerRegistry; @@ -15,6 +17,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Combustible; import com.hbm.inventory.fluid.trait.FT_Combustible.FuelGrade; +import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Leaded; import com.hbm.inventory.gui.GUIMachineDiesel; import com.hbm.items.ModItems; import com.hbm.lib.Library; @@ -203,6 +206,9 @@ public class TileEntityMachineDiesel extends TileEntityMachineBase implements IE tank.setFill(tank.getFill() - 1); if(tank.getFill() < 0) tank.setFill(0); + + PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 0.5F); + if(tank.getTankType().hasTrait(FT_Leaded.class)) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.HEAVYMETAL, PollutionHandler.HEAVY_METAL_PER_SECOND * 0.5F); if(power + getHEFromFuel() <= powerCap) { power += getHEFromFuel(); diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_electrolyser.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_electrolyser.png index 7a250f025ce6a59109555b4547c758c80e23016a..3f28a4951cdbcaf884e974ae997476bfa9ff80c7 100644 GIT binary patch literal 9377 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