| 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 | |
| public 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); | |
| } | |
| } |