blob: 2dbfa1dd1a76dfdc05e628cacb75ce57fd75e66c [file] [log] [blame] [raw]
package universalelectricity.prefab;
import java.util.Random;
import net.minecraft.src.BlockContainer;
import net.minecraft.src.CreativeTabs;
import net.minecraft.src.EntityItem;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.IInventory;
import net.minecraft.src.ItemStack;
import net.minecraft.src.Material;
import net.minecraft.src.NBTTagCompound;
import net.minecraft.src.TileEntity;
import net.minecraft.src.World;
import universalelectricity.implement.IItemElectric;
import buildcraft.api.tools.IToolWrench;
/**
* A block you may extend from to create your machine blocks! You do not have to extend from this block if
* you do not want to. It's optional but it comes with some useful functions that will make coding easier
* for you.
*/
public abstract class BlockMachine extends BlockContainer
{
public BlockMachine(String name, int id, Material material)
{
super(id, material);
this.setBlockName(name);
this.setHardness(0.5F);
}
public BlockMachine(String name, int id, Material material, CreativeTabs creativeTab)
{
this(name, id, material);
this.setCreativeTab(creativeTab);
}
@Override
protected int damageDropped(int metadata)
{
return metadata;
}
/**
* Returns the quantity of items to drop on block destruction.
*/
@Override
public int quantityDropped(Random par1Random)
{
return 1;
}
/**
* Returns the ID of the items to drop on destruction.
*/
@Override
public int idDropped(int par1, Random par2Random, int par3)
{
return this.blockID;
}
/**
* DO NOT OVERRIDE THIS FUNCTION!
* Called when the block is right clicked by the player. This modified version detects
* electric items and wrench actions on your machine block. Do not override this function.
* Use machineActivated instead! (It does the same thing)
*/
@Override
public boolean onBlockActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
{
int metadata = par1World.getBlockMetadata(x, y, z);
/**
* Check if the player is holding a wrench or an electric item. If so, do not open the GUI.
*/
if (par5EntityPlayer.inventory.getCurrentItem() != null)
{
if (par5EntityPlayer.inventory.getCurrentItem().getItem() instanceof IToolWrench)
{
par1World.notifyBlocksOfNeighborChange(x, y, z, this.blockID);
((IToolWrench)par5EntityPlayer.inventory.getCurrentItem().getItem()).wrenchUsed(par5EntityPlayer, x, y, z);
if(par5EntityPlayer.isSneaking())
{
return this.onSneakUseWrench(par1World, x, y, z, par5EntityPlayer);
}
else
{
return this.onUseWrench(par1World, x, y, z, par5EntityPlayer);
}
}
else if (par5EntityPlayer.inventory.getCurrentItem().getItem() instanceof IItemElectric)
{
if(this.onUseElectricItem(par1World, x, y, z, par5EntityPlayer))
{
return true;
}
}
}
if(par5EntityPlayer.isSneaking())
{
return this.onSneakMachineActivated(par1World, x, y, z, par5EntityPlayer);
}
else
{
return this.onMachineActivated(par1World, x, y, z, par5EntityPlayer);
}
}
/**
* Called when the machine is right clicked by the player
* @return True if something happens
*/
public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer)
{
return false;
}
/**
* Called when the machine is right clicked by the player while sneaking (shift clicking)
* @return True if something happens
*/
public boolean onSneakMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer)
{
return false;
}
/**
* Called when a player uses an electric item on the machine
* @return True if some happens
*/
public boolean onUseElectricItem(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer)
{
return false;
}
/**
* Called when a player uses a wrench on the machine
* @return True if some happens
*/
public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer)
{
return false;
}
/**
* Called when a player uses a wrench on the machine while sneaking
* @return True if some happens
*/
public boolean onSneakUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer)
{
return this.onUseWrench(par1World, x, y, z, par5EntityPlayer);
}
/**
* Returns the TileEntity used by this block.
* You should use the metadata sensitive version of this to get the maximum optimization!
*/
@Override
public TileEntity createNewTileEntity(World var1)
{
return null;
}
/**
* Override this if you don't need it. This will eject all items out
* of this machine if it has an inventory
*/
@Override
public void breakBlock(World par1World, int x, int y, int z, int par5, int par6)
{
TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z);
if(tileEntity != null)
{
if(tileEntity instanceof IInventory)
{
IInventory inventory = (IInventory)tileEntity;
for (int var6 = 0; var6 < inventory.getSizeInventory(); ++var6)
{
ItemStack var7 = inventory.getStackInSlot(var6);
if (var7 != null)
{
Random random = new Random();
float var8 = random.nextFloat() * 0.8F + 0.1F;
float var9 = random.nextFloat() * 0.8F + 0.1F;
float var10 = random.nextFloat() * 0.8F + 0.1F;
while (var7.stackSize > 0)
{
int var11 = random.nextInt(21) + 10;
if (var11 > var7.stackSize)
{
var11 = var7.stackSize;
}
var7.stackSize -= var11;
EntityItem var12 = new EntityItem(par1World, (x + var8), (y + var9), (z + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage()));
if (var7.hasTagCompound())
{
var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy());
}
float var13 = 0.05F;
var12.motionX = ((float)random.nextGaussian() * var13);
var12.motionY = ((float)random.nextGaussian() * var13 + 0.2F);
var12.motionZ = ((float)random.nextGaussian() * var13);
par1World.spawnEntityInWorld(var12);
}
}
}
}
}
super.breakBlock(par1World, x, y, z, par5, par6);
}
}