diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 99c90d18c..5542dc18b 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -8,6 +8,7 @@ import com.hbm.inventory.fluid.FluidType.ExtContainer; import com.hbm.inventory.fluid.trait.*; import com.hbm.inventory.fluid.trait.FluidTraitSimple.*; import com.hbm.inventory.fluid.trait.FT_Combustible.FuelGrade; +import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType; import com.hbm.render.util.EnumSymbol; public class Fluids { @@ -300,6 +301,11 @@ public class Fluids { metaOrder.add(PLASMA_XM); metaOrder.add(PLASMA_BF); + WATER.addTraits(new FT_Heatable().setEff(HeatingType.BOILER, 1.0D).setEff(HeatingType.HEATEXCHANGER, 0.25D) + .addStep(20, 1, Fluids.STEAM, 100) + .addStep(220, 1, Fluids.HOTSTEAM, 10) + .addStep(220, 1, Fluids.SUPERHOTSTEAM, 1)); + if(idMapping.size() != metaOrder.size()) { throw new IllegalStateException("A severe error has occoured during NTM's fluid registering process! The MetaOrder and Mappings are inconsistent! Mapping size: " + idMapping.size()+ " / MetaOrder size: " + metaOrder.size()); } diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java new file mode 100644 index 000000000..5802834ad --- /dev/null +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java @@ -0,0 +1,73 @@ +package com.hbm.inventory.fluid.trait; + +import com.hbm.inventory.fluid.FluidType; + +import net.minecraft.util.EnumChatFormatting; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class FT_Heatable extends FluidTrait { + + protected List steps = new ArrayList(); + protected HashMap efficiency = new HashMap(); + + /** Add in ascending order, lowest heat required goes first! */ + public FT_Heatable addStep(int heat, int req, FluidType type, int prod) { + steps.add(new HeatingStep(req, heat, type, prod)); + return this; + } + + /** sets efficiency for different types of heating, main difference is with water */ + public FT_Heatable setEff(HeatingType type, double eff) { + efficiency.put(type, eff); + return this; + } + + public double getEfficiency(HeatingType type) { + Double eff = this.efficiency.get(type); + return eff != null ? eff : 0.0D; + } + + public HeatingStep getFirstStep() { + return this.steps.get(0); + } + + public void addInfoHidden(List info) { + for(HeatingType type : HeatingType.values()) { + + double eff = getEfficiency(type); + + if(eff > 0) { + info.add(EnumChatFormatting.AQUA + "[" + type.name + "]"); + info.add(EnumChatFormatting.AQUA + "Efficiency: " + ((int) (eff * 100D)) + "%"); + } + } + } + + public static class HeatingStep { + public final int amountReq; + public final int heatReq; + public final FluidType typeProduced; + public final int amountProduced; + + public HeatingStep(int req, int heat, FluidType type, int prod) { + this.amountReq = req; + this.heatReq = heat; + this.typeProduced = type; + this.amountProduced = prod; + } + } + + public static enum HeatingType { + BOILER("Boilable"), + HEATEXCHANGER("Heatable"); + + public String name; + + private HeatingType(String name) { + this.name = name; + } + } +}