diff options
| author | Foghrye4 <foghrye4@gmail.com> | 2016-04-11 19:44:54 +0300 |
|---|---|---|
| committer | Foghrye4 <foghrye4@gmail.com> | 2016-04-11 19:44:54 +0300 |
| commit | 05c78126859231a68e199dc34613689bd0978e2f (patch) | |
| tree | 050bea104a18c72905095d29f31bec2935a27a24 /ihl/worldgen/ores/IHLFluid.java | |
Initial commit
Diffstat (limited to 'ihl/worldgen/ores/IHLFluid.java')
| -rw-r--r-- | ihl/worldgen/ores/IHLFluid.java | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/ihl/worldgen/ores/IHLFluid.java b/ihl/worldgen/ores/IHLFluid.java new file mode 100644 index 0000000..804a52c --- /dev/null +++ b/ihl/worldgen/ores/IHLFluid.java @@ -0,0 +1,363 @@ +package ihl.worldgen.ores;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import ic2.core.Ic2Items;
+import ihl.IHLCreativeTab;
+import ihl.IHLModInfo;
+import ihl.items_blocks.IHLFluidBlock;
+import cpw.mods.fml.common.registry.GameRegistry;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.MapColor;
+import net.minecraft.block.material.Material;
+import net.minecraft.block.material.MaterialLiquid;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemBucket;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class IHLFluid extends Fluid
+{
+ private IHLFluidType type;
+ private static List<Fluid> fluidInstances = new ArrayList();
+ private static Map<String, IHLFluidType> localFluidRegistry = new HashMap();
+ private static Map<String, Float> realDensityMap = new HashMap();
+ private static Map<String, String> condensationMap = new HashMap();
+ private static Map<String, List<String>> solutionMap = new HashMap();
+ public static final int maxGaseousStateVapoursDensity = 40;
+
+ public IHLFluid(IHLFluidType type1) {
+ super(type1.fluidRegistryName);
+ type=type1;
+ this.setTemperature(type.temperature);
+ this.setDensity(Math.round(type.density));
+ realDensityMap.put(type1.fluidRegistryName, type.density);
+ this.setGaseous(type.isGaseous);
+ this.setUnlocalizedName(type.fluidRegistryName.replaceFirst("fluid", ""));
+ Fluid instance = this;
+ if (!FluidRegistry.registerFluid(instance))
+ {
+ instance = FluidRegistry.getFluid(type.fluidRegistryName);
+ }
+ if(instance.getBlock()==null && !type.noBlock)
+ {
+ instance.setBlock(new IHLFluidBlock(instance, type.blockMaterial, type.textureName, "fluid"+type.fluidName.replaceFirst("fluid", "")).setFlammable(type.flammable).setBlockName("block"+type.fluidName).setCreativeTab(IHLCreativeTab.tab));
+ }
+ if(type.haveBucket)
+ {
+ Item bucket = new ItemBucket(block).setTextureName(IHLModInfo.MODID+":bucket_"+type.fluidName).setUnlocalizedName("bucket_"+type.fluidName).setCreativeTab(IHLCreativeTab.tab);
+ GameRegistry.registerItem(bucket, "bucket_"+type.fluidName);
+ FluidContainerRegistry.registerFluidContainer(instance, new ItemStack(bucket), FluidContainerRegistry.EMPTY_BUCKET);
+ }
+ type.fluid=instance;
+ localFluidRegistry.put(type1.fluidRegistryName, type);
+ fluidInstances.add(this);
+ }
+
+ public static void init()
+ {
+ IHLFluidType[] var1 = IHLFluidType.values();
+ for(int i=0;i<var1.length;i++)
+ {
+ new IHLFluid(var1[i]);
+ }
+ condensationMap.put("steam", "ic2distilledwater");
+ condensationMap.put("ic2steam", "ic2distilledwater");
+ condensationMap.put("ic2superheatedsteam", "ic2distilledwater");
+ condensationMap.put("vapour.sulfuricacid", "sulfuricacid");
+ solutionMap.put("water", Arrays.asList(new String [] {"aquaregia","sulfuricacid","solution.nickelsulfate","solution.bluevitriol"}));
+ solutionMap.put("ic2distilledwater", Arrays.asList(new String [] {"aquaregia","sulfuricacid","solution.nickelsulfate","solution.bluevitriol"}));
+ }
+
+ public static void registerIcons(TextureMap iconRegistry)
+ {
+ Iterator<Fluid> ii = fluidInstances.iterator();
+ while(ii.hasNext())
+ {
+ Fluid instance = ii.next();
+ IHLFluidType instanceType = localFluidRegistry.get(instance.getName());
+ instance.setIcons(
+ iconRegistry.registerIcon(IHLModInfo.MODID + ":" + instanceType.textureName + "Still")
+ ,iconRegistry.registerIcon(IHLModInfo.MODID + ":" + instanceType.textureName + "Flowing")
+ );
+ }
+ }
+
+ public static ItemStack getCell(String fluidname1)
+ {
+ ItemStack filledCell = FluidContainerRegistry.fillFluidContainer(new FluidStack(FluidRegistry.getFluid(fluidname1), FluidContainerRegistry.BUCKET_VOLUME),Ic2Items.cell.copy());
+ return filledCell;
+ }
+
+ public static Block getBlock(String fluidname)
+ {
+ return localFluidRegistry.get(fluidname).fluid.getBlock();
+ }
+
+ public static int getMeltingPoint(Fluid fluid)
+ {
+ if(localFluidRegistry.get(fluid.getName())!=null)
+ {
+ IHLFluidType type = localFluidRegistry.get(fluid.getName());
+ return type.meltingPoint;
+ }
+ else
+ {
+ if(fluid.isGaseous())
+ {
+ return fluid.getTemperature()>100?fluid.getTemperature()-100:0;
+ }
+ else
+ {
+ return fluid.getTemperature();
+ }
+ }
+ }
+
+ public static int getBoilingPoint(Fluid fluid)
+ {
+ if(localFluidRegistry.containsKey(fluid.getName()))
+ {
+ IHLFluidType type = localFluidRegistry.get(fluid.getName());
+ return type.boilingPoint;
+ }
+ else
+ {
+ if(fluid.getName()=="steam" || fluid.getName()=="ic2steam" || fluid.getName()=="ic2superheatedsteam")
+ {
+ return 373;
+ }
+ else if(fluid.isGaseous())
+ {
+ return fluid.getTemperature();
+ }
+ else
+ {
+ return fluid.getTemperature()+100;
+ }
+ }
+ }
+
+ public enum IHLFluidType
+ {
+ //Methane("Methane","fluidAcetylene",10047, 293, 249, 373, 1150, "methane", Material.water, false, false, false, false),
+ LithiumChloride("LithiumChlorideDissolvedInWater",10046, 293, 249, 373, 1530, "solution.lithiumchloride", Material.water, false, false, false),
+ CalciumChloride("CalciumChlorideDissolvedInWater",10045, 293, 249, 373, 1630, "solution.calciumchloride", Material.water, false, false, false),
+ ZeolitePulp("ZeolitePulp","fluidPulpZeolite",10044, 293, 249, 373, 1150, "pulp.sodiumzeolite", Material.water, false, false, false),
+ MoltenTarPitch("MoltenTarPitch","fluidOil",10043, 373, 373, 800, 1250, "molten.tarpitch", Material.lava, false, false, false),
+ CrackingGas("CrackingGas","fluidAcetylene",10042, 293, 135, 273, 2.27f, "crackinggas",new MaterialLiquid(MapColor.blackColor), false, false, false),
+ Trichlorosilane("Trichlorosilane","fluidHydrogenChloride", 10041, 293, 147, 305, 1342, "trichlorosilane", new MaterialLiquid(MapColor.greenColor), true, false, false),
+ SiliconTetrachloride("SiliconTetrachloride","fluidChlorine", 10040, 293, 204, 330, 584, "silicontetrachloride", new MaterialLiquid(MapColor.cyanColor), true, false, false),
+ Chlorine("Chlorine", 10039, 293, 172, 238, 3.21F),
+ BoricAcid("BoricAcid",10038, 373, 249, 373, 1275, "boricacid", Material.water, false, false, false),
+ MicaPulp("PulpMica",10037, 293, 249, 373, 1150, "pulp.mica", Material.water, false, false, false),
+ CellulosePulp("PulpCellulose",10036, 293, 249, 373, 1075, "pulp.cellulose", Material.water, false, false, false),
+ Fuel("Fuel", 10035, 293, 268, 633, 840, "fuel", Material.water, true, false, true),
+ MineralOil("MineralOil", 10034, 293, 238, 704, 845, "mineraloil", Material.water, true, false, true),
+ FuelOil("FuelOil", 10033, 293, 293, 693, 991, "fueloil", Material.water, true, false, true),
+ Oil("Oil", 10032, 293, 284, 773, 850, "oil", Material.water, true, false, true),
+ Mercury("Mercury", 10031, 293, 234, 630, 13546),
+ VapourMercury("VapourMercury",10030, 630, 234, 630, 9.229F, "vapour.mercury", new MaterialLiquid(MapColor.cyanColor), false, false, false),
+ Hydrogen("Hydrogen", 10029, 293, 14, 20, 0.046F, "hydrogen", new MaterialLiquid(MapColor.blueColor), true, false, true),
+ SaltWater("SaltWater", 10028, 293, 253, 373, 1360),
+ HydrogenChloride("HydrogenChloride", 10027, 293, 159, 188, 1.477F, "hydrogenchloride", new MaterialLiquid(MapColor.yellowColor), true, false, true),
+ NatriumTungstate("NatriumTungstateDissolvedInWater",10026, 293, 249, 373, 1730, "solution.natriumtungstate", Material.water, true, false, false),
+ Turpentine("Turpentine",10025, 293, 217, 453, 1470, "turpentine", Material.water, true, false, true),
+ Air("Air", 293, 55, 93, 1.292F, Ic2Items.airCell),
+ Nitrogen("Nitrogen", 10024, 92, 56, 92, 1.251F, "nitrogen", new MaterialLiquid(MapColor.airColor), true, false, true),
+ Acetylene("Acetylene", 10023, 293, 17, 190, 1.173F, "acetylene", Material.water, true, false, true),
+ Oxygen("Oxygen", 10022, 93, 55, 93, 1.429F, "oxygen", new MaterialLiquid(MapColor.airColor), true, false, true),
+ NatriumHydroxide("NatriumHydroxideDissolvedInWater",10021, 293, 249, 373, 1525, "solution.natriumhydroxide", Material.water, true, false, false),
+ LiquidGlass("LiquidGlass",10020, 293, 253, 373, 2400),
+ fluidRubberTreeSap("fluidRubberTreeSap",10019, 293, 273, 393, 1200, "fluidrubbertreesap", Material.water, true, true, false),
+ SpruceResin("SpruceResin",10018, 293, 273, 533, 1080, "spruceresin", Material.water, true, true, true),
+ CablingColophony("CablingColophony",10017, 363, 363, 533, 1070, "cablingcolophony", Material.water, true, false, true),
+ Glyceryl("Glyceryl",10016, 293, 291, 583, 1261, "glyceryl", Material.water, true, false, true),
+ SeedOil("SeedOil",10015, 293, 256, 583, 920, "seedoil", Material.water, true, false, true),
+ AquaRegia("AquaRegia",10014, 293, 231, 356, 1060),
+ SodiumPeroxide("SodiumPeroxide",10013, 950, 950, 2223, 1800),
+ OsmiumTetroxide("OsmiumTetroxide",10012, 313, 313, 403, 9),
+ OleicAcid("OleicAcid",10011, 293, 288, 633, 895, "oleicacid", Material.water, true, false, true),
+ Limemilk("Limemilk",10010, 293, 250, 373, 1020),
+ NickelSulfateDissolvedInWater("NickelSulfateDissolvedInWater",10009, 293, 253, 373, 1220, "solution.nickelsulfate", Material.water, true, false, false),
+ BlueVitriolDissolvedInWater("BlueVitriolDissolvedInWater",10008, 293, 253, 373, 1180, "solution.bluevitriol", Material.water, true, false, false),
+ MoltenRubberWithSulfur("MoltenRubberWithSulfur",10007, 600, 600, 1000, 1200, "molten.rubber", Material.lava, false, false, true),
+ MoltenLithium("MoltenLithium","fluidMolten",10042, 454, 454, 1613, 512, "molten.lithium", Material.lava, false, false, false),
+ MoltenSodiumChloride("MoltenSodiumChloride","fluidMolten",10006, 1273, 1273, 1740, 1556, "molten.sodiumchloride", Material.lava, false, false, false),
+ MoltenGlass("MoltenGlass","fluidMolten",10048, 600, 600, 1950, 2270, "molten.glass", Material.lava, false, false, false, true),
+ MoltenMagnesium("MoltenMagnesium","fluidMolten",10006, 923, 923, 1623, 1584, "molten.magnesium", Material.lava, false, false, false),
+ MoltenSteel("MoltenSteel","fluidMolten",10006, 1800, 1800, 3134, 6980, "molten.steel", Material.lava, false, false, false),
+ MoltenCopper("MoltenCopper","fluidMolten",10048, 1356, 1356, 2840, 8920, "molten.copper", Material.lava, false, false, false),
+ MoltenBronze("MoltenBronze",10005, 940, 940, 2840, 8000, "molten.bronze", Material.lava, false, false, false),
+ MoltenGold("MoltenGold",10005, 1337, 1337, 3129, 17310, "molten.gold", Material.lava, false, false, false),
+ VapourSulfuricAcid("VapourSulfuricAcid",10004, 610, 283, 610, 4.522F, "vapour.sulfuricacid", new MaterialLiquid(MapColor.redColor), false, false, false),
+ SulfuricAnhydride("SulfuricAnhydride",10003, 45, 17, 45, 2, "sulfuricanhydride", new MaterialLiquid(MapColor.redColor), true, false, false),
+ SulfuricAcid("SulfuricAcid",10002, 293, 283, 610, 1836),
+ NitricAcid("NitricAcid",10001, 293, 231, 356, 1100);
+ IHLFluidType(String fluidName1, int celldamage, int temperature1, int meltingPoint1, int boilingPoint1, float density1)
+ {
+ fluidName=fluidName1;
+ fluidRegistryName=fluidName.toLowerCase();
+ textureName="fluid"+fluidName.replaceFirst("fluid", "");
+ temperature=temperature1;
+ density=density1;
+ cellName="itemCell"+fluidName;
+ haveBucket=false;
+ isGaseous=density1<maxGaseousStateVapoursDensity;
+ boilingPoint=boilingPoint1;
+ meltingPoint=meltingPoint1;
+ damage=celldamage;
+ }
+ IHLFluidType(String fluidName1, int temperature1, int meltingPoint1, int boilingPoint1, float density1, ItemStack cell1)
+ {
+ fluidName=fluidName1;
+ fluidRegistryName=fluidName.toLowerCase();
+ textureName="fluid"+fluidName.replaceFirst("fluid", "");
+ temperature=temperature1;
+ density=density1;
+ cellName="itemCell"+fluidName;
+ haveBucket=false;
+ isGaseous=density1<maxGaseousStateVapoursDensity;
+ boilingPoint=boilingPoint1;
+ meltingPoint=meltingPoint1;
+ damage=99999;
+ hasCell=false;
+ cell=cell1;
+ }
+
+ IHLFluidType(String fluidName1, int celldamage, int temperature1, int meltingPoint1, int boilingPoint1, float density1, String fluidRegistryName1, Material blockMaterial1, boolean hasCell1, boolean haveBucket1, boolean flammable1)
+ {
+ fluidName=fluidName1;
+ fluidRegistryName=fluidRegistryName1;
+ textureName="fluid"+fluidName.replaceFirst("fluid", "");
+ temperature=temperature1;
+ density=density1;
+ cellName="itemCell"+fluidName;
+ haveBucket=haveBucket1;
+ flammable=flammable1;
+ isGaseous=density1<maxGaseousStateVapoursDensity;
+ blockMaterial=blockMaterial1;
+ boilingPoint=boilingPoint1;
+ meltingPoint=meltingPoint1;
+ hasCell=hasCell1;
+ damage=celldamage;
+ }
+ IHLFluidType(String fluidName1, String textureName1, int celldamage, int temperature1, int meltingPoint1, int boilingPoint1, float density1, String fluidRegistryName1, Material blockMaterial1, boolean hasCell1, boolean haveBucket1, boolean flammable1)
+ {
+ fluidName=fluidName1;
+ fluidRegistryName=fluidRegistryName1;
+ textureName=textureName1;
+ temperature=temperature1;
+ density=density1;
+ cellName="itemCell"+fluidName;
+ haveBucket=haveBucket1;
+ flammable=flammable1;
+ isGaseous=density1<maxGaseousStateVapoursDensity;
+ blockMaterial=blockMaterial1;
+ boilingPoint=boilingPoint1;
+ meltingPoint=meltingPoint1;
+ hasCell=hasCell1;
+ damage=celldamage;
+ }
+ IHLFluidType(String fluidName1, String textureName1, int celldamage, int temperature1, int meltingPoint1, int boilingPoint1, float density1, String fluidRegistryName1, Material blockMaterial1, boolean hasCell1, boolean haveBucket1, boolean flammable1, boolean noBlock1)
+ {
+ noBlock=noBlock1;
+ fluidName=fluidName1;
+ fluidRegistryName=fluidRegistryName1;
+ textureName=textureName1;
+ temperature=temperature1;
+ density=density1;
+ cellName="itemCell"+fluidName;
+ haveBucket=haveBucket1;
+ flammable=flammable1;
+ isGaseous=density1<maxGaseousStateVapoursDensity;
+ blockMaterial=blockMaterial1;
+ boilingPoint=boilingPoint1;
+ meltingPoint=meltingPoint1;
+ hasCell=hasCell1;
+ damage=celldamage;
+ }
+ public String fluidName;
+ public String fluidRegistryName;
+ public String cellName;
+ public String textureName;
+ int temperature;
+ float density;
+ boolean isGaseous;
+ boolean flammable=false;
+ boolean noBlock=false;
+ boolean haveBucket;
+ Material blockMaterial = Material.water;
+ int meltingPoint;
+ int boilingPoint;
+ public boolean hasCell=true;
+ public ItemStack cell;
+ public Fluid fluid;
+ public final int damage;
+ }
+
+ public static FluidStack getCondensationResult(FluidStack condensatedGas)
+ {
+ String fluidname = condensationMap.get(condensatedGas.getFluid().getName());
+ Fluid fluid = FluidRegistry.getFluid(fluidname);
+ if(fluid!=null)
+ {
+ int quantity=Math.round(condensatedGas.amount*getCondensationConversionRate(condensatedGas.getFluid()));
+ if(quantity>0)
+ {
+ return new FluidStack(fluid.getID(),quantity);
+ }
+ }
+ return null;
+ }
+ public static float getCondensationConversionRate(Fluid gas)
+ {
+ String fluidname = condensationMap.get(gas.getName());
+ Fluid fluid = FluidRegistry.getFluid(fluidname);
+ if(fluid!=null)
+ {
+ float rate = (float)gas.getDensity()/(float)fluid.getDensity();
+ if(gas.getDensity()<0)
+ {
+ //IC2 steam density -800, 100 mb steam from 1 mb water
+ rate=(-8000F/gas.getDensity())/fluid.getDensity();
+ }
+ return rate;
+ }
+ return 0F;
+ }
+
+ public static boolean canBeDissolvedIn(FluidStack solvent, String impurity)
+ {
+ return solutionMap.get(solvent.getFluid().getName()).contains(impurity);
+ }
+
+ public static float getRealDensity(Fluid gas)
+ {
+ if(realDensityMap.containsKey(gas.getName()))
+ {
+ return realDensityMap.get(gas.getName());
+ }
+ else
+ {
+ float density = gas.getDensity();
+ if(gas.getDensity()<0)
+ {
+ //IC2 steam density -800, 100 mb steam from 1 mb water
+ density=-8000F/gas.getDensity();
+ }
+ return density;
+ }
+ }
+
+}
|
