package emasher.tileentities; import cpw.mods.fml.common.Loader; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; public class TileShaleResource extends TileEntity { FluidStack theFluid; boolean init; public TileShaleResource() { init = false; } public FluidStack getFluid() { return theFluid; } public void setFluid( Fluid f ) { theFluid = new FluidStack( f, FluidContainerRegistry.BUCKET_VOLUME * worldObj.rand.nextInt( emasher.util.Config.maxGasInVent() - emasher.util.Config.minGasInVent() ) + emasher.util.Config.minGasInVent() ); } @Override public void updateEntity() { if( !init && worldObj != null && worldObj.blockExists( xCoord, yCoord, zCoord ) && !worldObj.isRemote ) { int meta = worldObj.getBlockMetadata( xCoord, yCoord, zCoord ); init = true; if( meta == 0 ) { setFluid( emasher.fluids.Fluids.fluidNaturalGas() ); } else if( Loader.isModLoaded( "BuildCraft|Core" ) && FluidRegistry.getFluid( "oil" ) != null && meta == 1 ) { Fluid oil = FluidRegistry.getFluid( "oil" ); setFluid( oil ); } else if( meta == 2 ) { setFluid( emasher.fluids.Fluids.fluidPlasma() ); } else { worldObj.setBlockMetadataWithNotify( xCoord, yCoord, zCoord, 0, 3 ); setFluid( emasher.fluids.Fluids.fluidNaturalGas() ); } } } public FluidStack drain( int maxDrain, boolean doDrain ) { FluidStack result = null; if( theFluid == null ) { worldObj.setBlock( xCoord, yCoord, zCoord, Blocks.bedrock ); worldObj.removeTileEntity( xCoord, yCoord, zCoord ); } else if( theFluid.amount <= maxDrain && !emasher.util.Config.infiniteGasInVent() ) { result = new FluidStack( theFluid.getFluid(), theFluid.amount ); if( doDrain ) { theFluid.amount = 0; } worldObj.setBlock( xCoord, yCoord, zCoord, Blocks.bedrock ); worldObj.removeTileEntity( xCoord, yCoord, zCoord ); } else { result = new FluidStack( theFluid.getFluid(), maxDrain ); if( doDrain ) { theFluid.amount -= maxDrain; } } return result; } @Override public void readFromNBT( NBTTagCompound data ) { super.readFromNBT( data ); theFluid = FluidStack.loadFluidStackFromNBT( data ); if( data.hasKey( "init-sr" ) ) { init = data.getBoolean( "init-sr" ); } } @Override public void writeToNBT( NBTTagCompound data ) { super.writeToNBT( data ); if( theFluid != null ) theFluid.writeToNBT( data ); data.setBoolean( "init-sr", init ); } }