package net.glowstone.dispenser;
import net.glowstone.GlowWorld;
import net.glowstone.block.GlowBlock;
import net.glowstone.block.blocktype.BlockDispenser;
import org.bukkit.Effect;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Projectile;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
public abstract class ProjectileDispenseBehavior extends DefaultDispenseBehavior {
@Override
protected ItemStack dispenseStack(GlowBlock block, ItemStack stack) {
GlowWorld world = block.getWorld();
Vector position = BlockDispenser.getDispensePosition(block);
BlockFace face = BlockDispenser.getFacing(block);
Projectile entity = getProjectileEntity(world, position);
entity.setVelocity(new Vector(face.getModX(), face.getModY() + 0.1f, face.getModZ()).multiply(6));
stack.setAmount(stack.getAmount() - 1);
if (stack.getAmount() < 1) {
return null;
}
return stack;
}
@Override
protected void playDispenseSound(GlowBlock block) {
block.getWorld().playEffect(block.getLocation(), Effect.BOW_FIRE, 0);
}
protected abstract Projectile getProjectileEntity(GlowWorld world, Vector position);
}