Railcraft is OpenSourced dude
Ow~ Yes, found it.
That does not mean, what i'm started a work on SpwnX suggestion.
Railcraft is OpenSourced dude
Ow~ Yes, found it.
That does not mean, what i'm started a work on SpwnX suggestion.
You are late dude. That thing has already been resolved and was a Bug on my Side.
It clearly says "23 days ago" though.
So, electric tunnel bore? yay.
Yay or nay ?
You are late dude. That thing has already been resolved and was a Bug on my Side.
I'm reading GregTech thread from time to time, especially when last message of thread is your message, but this was a surprize for me.
Hello,
I get the following crash after update both forestry and ihl duting startup:
http://pastebin.com/NqJxpTvD
Top of trace:
cpw.mods.fml.common.LoaderException: java.lang.RuntimeException: A mod has attempted to assign BlockID ihl.crop_harvestors.BlockFluidRubberTreeSap@7d2741f to the Fluid 'seedoil' but this Fluid has already been linked to BlockID forestry.core.fluids.BlockForestryFluid@7f7cf9cd. Configure your mods to prevent this from happening.
at net.minecraftforge.fluids.Fluid.setBlock(Fluid.java:128) ~[Fluid.class:?]
at net.minecraftforge.fluids.BlockFluidBase.<init>(BlockFluidBase.java:66) ~[BlockFluidBase.class:?]
at net.minecraftforge.fluids.BlockFluidClassic.<init>(BlockFluidClassic.java:27) ~[BlockFluidClassic.class:?]
at ihl.crop_harvestors.BlockFluidRubberTreeSap.<init>(BlockFluidRubberTreeSap.java:29) ~[BlockFluidRubberTreeSap.class:?]
at ihl.worldgen.ores.IHLFluid.<init>(IHLFluid.java:48) ~[IHLFluid.class:?]
at ihl.worldgen.ores.IHLFluid.init(IHLFluid.java:63) ~[IHLFluid.class:?]
at ihl.IHLMod.preInit(IHLMod.java:223) ~[IHLMod.class:?]
seedoil is matched to BlockFluidRubberTreeSap .. is that intentional ?
Forestry: build 379
IHL: build 522
Forge: 1277
Hello,
I get the following crash after update both forestry and ihl duting startup:
I add some liquids to IHL, alongside with seedoil from Forestry and mindlessly assign my own version of fluid block to instance. Quickfix created. Sorry about that. New version is tested with latest Forestry in SSP and seems work fine.
You add Liquids to a Mod called "I hate Liquids"? lol
I add some liquids to IHL, alongside with seedoil from Forestry and mindlessly assign my own version of fluid block to instance. Quickfix created. Sorry about that. New version is tested with latest Forestry in SSP and seems work fine.
Just updated, it seems to work! Thanks for the quick fix.
You add Liquids to a Mod called "I hate Liquids"? lol
I hate just vanilla ones
found this error when loading game.
java.lang.NoClassDefFoundError: scala/actors/threadpool/Arrays
at ihl.IHLMod.postInit(IHLMod.java:644) ~[IHLMod.class:?]
i decompiled your mod and found
import scala.actors.threadpool.Arrays;
Arrays.asList();
is that supposed to be import java.util.Arrays; ?
I unlinked Scala from my Dev Environent, just because of this shit.
is that supposed to be import java.util.Arrays; ?
Absolutely.
I unlinked Scala from my Dev Environent, just because of this shit.
I did a same (now).
Fixed version are ready.
[This is just a copy/past from the message I've posted on the kirara thread, since you don't appear to have a blacklist option to disable the wailers in said dimensions).
Howdy, I've raided one newest TC dungeon with keda but I had to go back
inside because I've thought that he was lost. When the loading screen
disappeared, I was dead. One thing to notice is that this dungeon has a
layer of Ancien stone, and has a layer of "Nothing.block" under/behind it.
The room in which you spawn had 4 empty corners which are empty and
there's a 5 blocks high room made out of this "Nothing.block". Touching
this block gives a hell lot of damage, regardless if you're quantumed,
and what happened is that once my player went through this portal, one
stupid wailer pushed me over in a corner and I've found myself with 1/2
seconds alive to finally see that I was dead and all my stuff was gone.
This "Nothing.block" will act as void, it'll make you fall out of the
world and destroy your items.
My statement is that this dungeon is
really hard enough, I've spent 1 hour getting to the boss room, and I
had to come back to my base quite a few times to charge my depleted
quantum armor. The amount of damages you get inside is HUGE, and you
don't stand a chance without a dozen regen potions. That's why you
should consider disabling the wailers inside this dimension.
Nonetheless,
I haven't found a way to specify a dimension blacklist for these
wailers, that's why I'll send this message to Foghrye (sorry if I've
spelt it wrong) too.
Here is a source code:
if(this.config.enableWailers)
{
EntityRegistry.addSpawn(LostHeadEntity.class, 50, 1, 10, EnumCreatureType.monster, BiomeDictionary.getBiomesForType(Type.END));
}
In vanilla minecraft Wailer spawn only in "End" dimension. It seems, that newest TC dungeon has registered biome type as "Type.END" . Thus i decide to add spawn of Wailers only in biome named as original "End":
BiomeGenBase[] biomes = BiomeDictionary.getBiomesForType(Type.END);
for(int i=0;i<biomes.length;i++)
{
if(biomes[i].biomeName.equals("Sky"))
{
if(this.config.enableWailers)
{
EntityRegistry.addSpawn(LostHeadEntity.class, 50, 1, 10, EnumCreatureType.monster, biomes[i]);
}
}
}
Display More
I'm 90% sure this will help.
I reported this to Greg first, who confirmed it to be an IHL problem, so here ya go:
Noticed a bug. Since the latest GT and IHL and IC2 and Forge, it seems GT no longer unificates most IHL stuff, namely Glycerine into Glyceryl Trinitrate, which broke my nitro-diesel machine system completely and had to be reconfigured to reverse the Gcell+fuel to FCell+Glyceryl to fix. Seems a few other things may also not unify. I couldn't find anything in the config to force it. So yeah, you get IHL's glycerine cells from GT chemical reactors, which then can't be used for stuff
So yeah, you get IHL's glycerine cells from GT chemical reactors
It seems, that GT generate recipes using FluidRegistry entry for fluid container.
Lately, i removed ore dictionary registration for this cells. So far, i decided to take it back. Unfortunately, this is not helping, so i add recipe with my version of cells manually. It seems to work fine now.
Edit: Heh, this message looked like a stream of consciousness. Every sentence must have a different timestamp.
It is simple, Fluid Containers are somewhat broken if you have two Containers with the same Fluid and the same empty Container Item. That is why I added a manual Fluid canner Recipe in order to at least empty my Cells.
The OreDict Entry should be kept btw. otherwise you would really break things.
It is simple, Fluid Containers are somewhat broken if you have two Containers with the same Fluid and the same empty Container Item. That is why I added a manual Fluid canner Recipe in order to at least empty my Cells.
You gave me an idea to change my fluid class:
ItemStack filledCell = FluidContainerRegistry.fillFluidContainer(new FluidStack(instance, FluidContainerRegistry.BUCKET_VOLUME),Ic2Items.cell);
if(filledCell==null)
{
cell = new ItemStack(new IHLItemCell(type.cellName,type.fluidRegistryName).setCreativeTab(IHLCreativeTab.tab));
OreDictionary.registerOre("cell"+type.fluidName.replaceFirst("fluid", ""), cell);
}
else
{
cell=filledCell;
}
This will work more correctly. But there will be missing items (again).
Full code:
public class IHLFluid extends Fluid
{
private Type type;
private ItemStack cell;
private static List<Fluid> fluidInstances = new ArrayList();
private static Map<String, IHLFluid> localFluidRegistry = new HashMap();
private static Map<String, String> condensationMap = new HashMap();
public static final int maxGaseousStateVapoursDensity = 40;
public IHLFluid(Type type1) {
super(type1.fluidRegistryName);
type=type1;
this.setTemperature(type.temperature);
this.setDensity(type.density);
this.setGaseous(type.isGaseous);
this.setUnlocalizedName(type.fluidRegistryName.replaceFirst("fluid", ""));
Fluid instance = this;
if (!FluidRegistry.registerFluid(instance))
{
instance = FluidRegistry.getFluid(type.fluidRegistryName);
}
localFluidRegistry.put(type1.fluidRegistryName, this);
ItemStack filledCell = FluidContainerRegistry.fillFluidContainer(new FluidStack(instance, FluidContainerRegistry.BUCKET_VOLUME),Ic2Items.cell);
if(filledCell==null)
{
cell = new ItemStack(new IHLItemCell(type.cellName,type.fluidRegistryName).setCreativeTab(IHLCreativeTab.tab));
OreDictionary.registerOre("cell"+type.fluidName.replaceFirst("fluid", ""), cell);
}
else
{
cell=filledCell;
}
if(instance.getBlock()==null)
{
instance.setBlock(new BlockFluidRubberTreeSap(instance, type.blockMaterial, "fluid"+type.fluidName.replaceFirst("fluid", "")).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), new ItemStack(Items.bucket));
}
fluidInstances.add(instance);
}
public static void init()
{
Type[] var1 = Type.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");
}
public static void registerIcons()
{
Iterator<Fluid> ii = fluidInstances.iterator();
while(ii.hasNext())
{
Fluid instance = ii.next();
instance.setIcons(instance.getBlock().getBlockTextureFromSide(0), instance.getBlock().getBlockTextureFromSide(1));
}
}
public static ItemStack getCell(String fluidname)
{
return localFluidRegistry.get(fluidname).cell.copy();
}
public static int getMeltingPoint(Fluid fluid)
{
if(localFluidRegistry.get(fluid.getName())!=null)
{
IHLFluid ihlfluid = localFluidRegistry.get(fluid.getName());
return ihlfluid.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.get(fluid.getName())!=null)
{
IHLFluid ihlfluid = localFluidRegistry.get(fluid.getName());
return ihlfluid.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 Type
{
fluidRubberTreeSap("fluidRubberTreeSap","itemCellRubberTreeSap", 293, 273, 393, 1200, true),
SpruceResin("SpruceResin", 293, 273, 533, 1070, true),
CablingColophony("CablingColophony", 363, 363, 533, 1070),
Glyceryl("Glyceryl", 293, 291, 583, 1261),
SeedOil("SeedOil", 293, 256, 583, 920),
AquaRegia("AquaRegia", 293, 231, 356, 1060),
SodiumPeroxide("SodiumPeroxide", 950, 950, 2223, 1800),
OsmiumTetroxide("OsmiumTetroxide", 313, 313, 403, 9),
OleicAcid("OleicAcid", 293, 288, 633, 895),
Limemilk("Limemilk", 293, 253, 373, 1020),
NickelSulfateDissolvedInWater("NickelSulfateDissolvedInWater", 293, 253, 373, 1220, "solution.nickelsulfate"),
BlueVitriolDissolvedInWater("BlueVitriolDissolvedInWater", 293, 253, 373, 1180, "solution.bluevitriol"),
MoltenSteel("MoltenSteel", 1800, 1800, 3134, 7800, "molten.steel", Material.lava),
MoltenBronze("MoltenBronze", 940, 940, 2840, 8000, "molten.bronze", Material.lava),
VapourSulfuricAcid("VapourSulfuricAcid", 610, 283, 610, 4, "vapour.sulfuricacid"),
SulfuricAnhydride("SulfuricAnhydride", 45, 17, 45, 2, "sulfuricanhydride"),
SulfuricAcid("SulfuricAcid", 293, 283, 610, 1836),
NitricAcid("NitricAcid", 293, 231, 356, 1100);
Type(String fluidName1, int temperature1, int meltingPoint1, int boilingPoint1, int density1)
{
fluidName=fluidName1;
fluidRegistryName=fluidName.toLowerCase();
temperature=temperature1;
density=density1;
cellName="itemCell"+fluidName;
haveBucket=false;
isGaseous=density1<maxGaseousStateVapoursDensity;
boilingPoint=boilingPoint1;
meltingPoint=meltingPoint1;
}
Type(String fluidName1, int temperature1, int meltingPoint1, int boilingPoint1, int density1, String fluidRegistryName1)
{
fluidName=fluidName1;
fluidRegistryName=fluidRegistryName1;
temperature=temperature1;
density=density1;
cellName="itemCell"+fluidName;
haveBucket=false;
isGaseous=density1<maxGaseousStateVapoursDensity;
boilingPoint=boilingPoint1;
meltingPoint=meltingPoint1;
}
Type(String fluidName1, int temperature1, int meltingPoint1, int boilingPoint1, int density1, String fluidRegistryName1, Material blockMaterial1)
{
fluidName=fluidName1;
fluidRegistryName=fluidRegistryName1;
temperature=temperature1;
density=density1;
cellName="itemCell"+fluidName;
haveBucket=false;
isGaseous=density1<maxGaseousStateVapoursDensity;
blockMaterial=blockMaterial1;
boilingPoint=boilingPoint1;
meltingPoint=meltingPoint1;
}
Type(String fluidName1, String cellName1, int temperature1, int meltingPoint1, int boilingPoint1, int density1)
{
fluidName=fluidName1;
fluidRegistryName=fluidName.toLowerCase();
temperature=temperature1;
density=density1;
cellName=cellName1;
haveBucket=false;
isGaseous=density1<maxGaseousStateVapoursDensity;
boilingPoint=boilingPoint1;
meltingPoint=meltingPoint1;
}
Type(String fluidName1, String cellName1, int temperature1, int meltingPoint1, int boilingPoint1, int density1, boolean haveBucket1)
{
fluidName=fluidName1;
fluidRegistryName=fluidName.toLowerCase();
temperature=temperature1;
density=density1;
cellName=cellName1;
haveBucket=haveBucket1;
isGaseous=density1<maxGaseousStateVapoursDensity;
boilingPoint=boilingPoint1;
meltingPoint=meltingPoint1;
}
Type(String fluidName1, int temperature1, int meltingPoint1, int boilingPoint1, int density1, boolean haveBucket1)
{
fluidName=fluidName1;
fluidRegistryName=fluidName.toLowerCase();
temperature=temperature1;
density=density1;
cellName="itemCell"+fluidName;
haveBucket=haveBucket1;
isGaseous=density1<maxGaseousStateVapoursDensity;
boilingPoint=boilingPoint1;
meltingPoint=meltingPoint1;
}
Type(String fluidName1, int density1, int meltingPoint1, int boilingPoint1)
{
fluidName=fluidName1;
fluidRegistryName=fluidName.toLowerCase();
temperature=20;
density=density1;
cellName="cell"+fluidName;
haveBucket=false;
isGaseous=density1<maxGaseousStateVapoursDensity;
boilingPoint=boilingPoint1;
meltingPoint=meltingPoint1;
}
String fluidName;
String fluidRegistryName;
String cellName;
int temperature;
int density;
boolean isGaseous;
boolean haveBucket;
Material blockMaterial = Material.water;
int meltingPoint;
int boilingPoint;
}
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,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/(float)gas.getDensity())/(float)fluid.getDensity();
}
return rate;
}
return 0F;
}
}
Display More
public static Item bucket_tarPitch = new IHLItemSimple("bucket_tarPitch");
public IHLItemSimple(String unlocalizedName1)
{
...
GameRegistry.registerItem(this, this.itemName);
}
This is a slightly dodgy way of registering items. It means that, for example, if some other mod accesses the IHLMod class before FML does, then tar pitch buckets will be registered under the other mod instead of IHL.