290 lines
9.9 KiB
Java
290 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;
|
||
|
}
|
||
|
}
|