5a0fd88182
Most of it is working just need some more work before can be call Updated. Still have to fix model rotations, Add new steam engine, Add Eletric motor block, Add crank Shaft, Fix all models to fit to pipes, Re do pipes to look nicer. Most likely i need to fix both steam engine and boiler's share resources methods, and Generation methods
289 lines
9.9 KiB
Java
289 lines
9.9 KiB
Java
package EUI.SteamPower;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
import universalelectricity.basiccomponents.BasicComponents;
|
|
|
|
import EUI.SteamPower.boiler.TileEntityBoiler;
|
|
import EUI.SteamPower.burner.TileEntityFireBox;
|
|
import EUI.SteamPower.turbine.TileEntityGenerator;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.src.*;
|
|
import EUI.SteamPower.*;
|
|
import EUIClient.SteamPower.GUIFireBox;
|
|
import EUIClient.SteamPower.GUIGenerator;
|
|
import EUIClient.SteamPower.GuiBoiler;
|
|
import net.minecraftforge.common.ForgeDirection;
|
|
|
|
public class BlockMachine extends universalelectricity.extend.BlockMachine
|
|
{
|
|
|
|
private Random furnaceRand = new Random();
|
|
private static boolean keepFurnaceInventory = true;
|
|
|
|
public BlockMachine(int par1)
|
|
{
|
|
super("machine", par1, Material.iron);
|
|
this.setRequiresSelfNotify();
|
|
this.setCreativeTab(CreativeTabs.tabBlock);
|
|
|
|
}
|
|
@Override
|
|
public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
|
|
{
|
|
|
|
par3List.add(new ItemStack(this, 1, 1));
|
|
par3List.add(new ItemStack(this, 1, 2));
|
|
par3List.add(new ItemStack(this, 1, 3));
|
|
par3List.add(new ItemStack(this, 1, 15));
|
|
}
|
|
@Override
|
|
protected int damageDropped(int metadata)
|
|
{
|
|
return metadata;
|
|
}
|
|
@Override
|
|
public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random)
|
|
{
|
|
TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z);
|
|
|
|
if(tileEntity instanceof TileEntityFireBox)
|
|
{
|
|
if(((TileEntityFireBox)tileEntity).generateRate > 0)
|
|
{
|
|
int var6 = ((TileEntityFireBox) tileEntity).getDirection();
|
|
float var7 = (float)x + 0.5F;
|
|
float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
|
|
float var9 = (float)z + 0.5F;
|
|
float var10 = 0.52F;
|
|
float var11 = par5Random.nextFloat() * 0.6F - 0.3F;
|
|
|
|
if (var6 == 5)
|
|
{
|
|
par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
|
|
par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
|
|
}
|
|
else if (var6 == 4)
|
|
{
|
|
par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
|
|
par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
|
|
}
|
|
else if (var6 == 3)
|
|
{
|
|
par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D);
|
|
par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D);
|
|
}
|
|
else if (var6 == 2)
|
|
{
|
|
par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D);
|
|
par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@Override
|
|
public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side)
|
|
{
|
|
TileEntity tileEntity = par1iBlockAccess.getBlockTileEntity(x, y, z);
|
|
int metadata = par1iBlockAccess.getBlockMetadata(x, y, z);
|
|
if(metadata > -1 && tileEntity != null)
|
|
{
|
|
if (side == 1)
|
|
{
|
|
switch(metadata)
|
|
{
|
|
case 0: return 6;
|
|
case 1: return 4;
|
|
case 2: return 7;
|
|
case 3: return 4;
|
|
}
|
|
}
|
|
//If it is the back side
|
|
else if(side == ((TileEntityMachine) tileEntity).getDirection());
|
|
{
|
|
switch(metadata)
|
|
{
|
|
case 0: return 5;
|
|
case 2: return 8;
|
|
case 3: return 4;
|
|
}
|
|
}
|
|
|
|
|
|
switch(metadata)
|
|
{
|
|
case 1: return 0;
|
|
case 2: return 2;
|
|
}
|
|
}
|
|
return 1;
|
|
|
|
|
|
}
|
|
@Override
|
|
public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer)
|
|
{
|
|
TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4);
|
|
|
|
//Reorient the block
|
|
switch(tileEntity.getDirection())
|
|
{
|
|
case 2: tileEntity.setDirection(5); break;
|
|
case 5: tileEntity.setDirection(3); break;
|
|
case 3: tileEntity.setDirection(4); break;
|
|
case 4: tileEntity.setDirection(2); break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
/**
|
|
* Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the
|
|
* block.
|
|
*/
|
|
@Override
|
|
public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer)
|
|
{
|
|
if (par1World.isRemote)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z);
|
|
|
|
if (blockEntity != null)
|
|
{
|
|
|
|
if(blockEntity instanceof TileEntityBoiler)
|
|
{
|
|
TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z);
|
|
par5EntityPlayer.openGui(SteamPower.instance, 1, par1World, x, y, z);
|
|
}
|
|
if(blockEntity instanceof TileEntityFireBox)
|
|
{
|
|
TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z);
|
|
par5EntityPlayer.openGui(SteamPower.instance, 0, par1World, x, y, z);
|
|
}
|
|
if(blockEntity instanceof TileEntityGenerator)
|
|
{
|
|
TileEntity var6 = (TileEntityGenerator)par1World.getBlockTileEntity(x, y, z);
|
|
par5EntityPlayer.openGui(SteamPower.instance, 2, par1World, x, y, z);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
@Override
|
|
public TileEntity createNewTileEntity(World var1,int meta)
|
|
{
|
|
switch(meta)
|
|
{
|
|
case 1: return new TileEntityBoiler();
|
|
case 2: return new TileEntityFireBox();
|
|
case 3: return new TileEntityGenerator();
|
|
case 15: return new TileEntityNuller();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Called when the block is placed in the world.
|
|
*/
|
|
@Override
|
|
public void onBlockPlacedBy(World par1World, int x, int y, int z, EntityLiving par5EntityLiving)
|
|
{
|
|
int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
|
|
int metadata = par1World.getBlockMetadata(x, y, z);
|
|
TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z);
|
|
|
|
switch (angle)
|
|
{
|
|
case 0: tileEntity.setDirection(5); break;
|
|
case 1: tileEntity.setDirection(3); break;
|
|
case 2: tileEntity.setDirection(4); break;
|
|
case 3: tileEntity.setDirection(2); break;
|
|
}
|
|
}
|
|
/**
|
|
* Called whenever the block is removed.
|
|
*/
|
|
@Override
|
|
public void breakBlock(World par1World, int par2, int par3, int par4,int par5, int par6){
|
|
if (!keepFurnaceInventory)
|
|
{
|
|
TileEntityMachine var5 = null;
|
|
TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4);
|
|
if(entityBox instanceof TileEntityFireBox)
|
|
{
|
|
var5 = (TileEntityFireBox)entityBox;
|
|
}
|
|
else if(entityBox instanceof TileEntityBoiler)
|
|
{
|
|
var5 = (TileEntityBoiler)entityBox;
|
|
}
|
|
if (var5 != null)
|
|
{
|
|
for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6)
|
|
{
|
|
ItemStack var7 = var5.getStackInSlot(var6);
|
|
|
|
if (var7 != null)
|
|
{
|
|
float var8 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
|
|
float var9 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
|
|
float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
|
|
|
|
while (var7.stackSize > 0)
|
|
{
|
|
int var11 = this.furnaceRand.nextInt(21) + 10;
|
|
|
|
if (var11 > var7.stackSize)
|
|
{
|
|
var11 = var7.stackSize;
|
|
}
|
|
|
|
var7.stackSize -= var11;
|
|
EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage()));
|
|
|
|
if (var7.hasTagCompound())
|
|
{
|
|
var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy());
|
|
}
|
|
|
|
float var13 = 0.05F;
|
|
var12.motionX = (double)((float)this.furnaceRand.nextGaussian() * var13);
|
|
var12.motionY = (double)((float)this.furnaceRand.nextGaussian() * var13 + 0.2F);
|
|
var12.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var13);
|
|
par1World.spawnEntityInWorld(var12);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
super.breakBlock(par1World, par2, par3, par4, par5, par6);
|
|
}
|
|
@Override
|
|
public String getTextureFile()
|
|
{
|
|
return "/EUIClient/textures/blocks/blocks.png";
|
|
}
|
|
@Override
|
|
public boolean isOpaqueCube()
|
|
{
|
|
return false;
|
|
}
|
|
@Override
|
|
public boolean renderAsNormalBlock()
|
|
{
|
|
return false;
|
|
}
|
|
@Override
|
|
public int getRenderType()
|
|
{
|
|
return -1;
|
|
}
|
|
}
|