001 package net.minecraft.dispenser;
002
003 import net.minecraft.block.BlockDispenser;
004 import net.minecraft.entity.Entity;
005 import net.minecraft.entity.IProjectile;
006 import net.minecraft.item.ItemStack;
007 import net.minecraft.util.EnumFacing;
008 import net.minecraft.world.World;
009
010 public abstract class BehaviorProjectileDispense extends BehaviorDefaultDispenseItem
011 {
012 /**
013 * Dispense the specified stack, play the dispense sound and spawn particles.
014 */
015 public ItemStack dispenseStack(IBlockSource par1IBlockSource, ItemStack par2ItemStack)
016 {
017 World var3 = par1IBlockSource.getWorld();
018 IPosition var4 = BlockDispenser.func_82525_a(par1IBlockSource);
019 EnumFacing var5 = EnumFacing.func_82600_a(par1IBlockSource.func_82620_h());
020 IProjectile var6 = this.getProjectileEntity(var3, var4);
021 var6.setThrowableHeading((double)var5.func_82601_c(), 0.10000000149011612D, (double)var5.func_82599_e(), this.func_82500_b(), this.func_82498_a());
022 var3.spawnEntityInWorld((Entity)var6);
023 par2ItemStack.splitStack(1);
024 return par2ItemStack;
025 }
026
027 /**
028 * Play the dispense sound from the specified block.
029 */
030 protected void playDispenseSound(IBlockSource par1IBlockSource)
031 {
032 par1IBlockSource.getWorld().playAuxSFX(1002, par1IBlockSource.getXInt(), par1IBlockSource.getYInt(), par1IBlockSource.getZInt(), 0);
033 }
034
035 /**
036 * Return the projectile entity spawned by this dispense behavior.
037 */
038 protected abstract IProjectile getProjectileEntity(World var1, IPosition var2);
039
040 protected float func_82498_a()
041 {
042 return 6.0F;
043 }
044
045 protected float func_82500_b()
046 {
047 return 1.1F;
048 }
049 }