This class is supposed to have a multiuse bow that can shoot high velocity arrows or exploding arrows, but nothing is working. I have registered it in. Code:java package org.wolfempire.witherdefense.listener; import java.util.Arrays;import org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.Location;import org.bukkit.Material;import org.bukkit.entity.Arrow;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.block.Action;import org.bukkit.event.entity.EntityShootBowEvent;import org.bukkit.event.entity.ProjectileHitEvent;import org.bukkit.event.player.PlayerInteractEvent;import org.bukkit.inventory.meta.ItemMeta;import org.bukkit.metadata.FixedMetadataValue;import org.bukkit.scheduler.BukkitRunnable;import org.wolfempire.witherdefense.WitherDefense; public class TacticalArcher implements Listener { WitherDefense plugin; public TacticalArcher(WitherDefense plugin) { this.plugin = plugin; } @EventHandler public void onInteract(PlayerInteractEvent e) { if (e.getPlayer().getInventory().getItemInHand() != null) { if (e.getPlayer().getInventory().getItemInHand().getType().equals(Material.BOW)) { if (e.getPlayer().getInventory().getItemInHand().getItemMeta().hasLore()) { if (e.getAction().equals(Action.LEFT_CLICK_AIR) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)) { if (e.getPlayer().getInventory().getItemInHand().getItemMeta().getLore().contains(ChatColor.RESET + "" + ChatColor.AQUA + "Piercing Shot")) { ItemMeta bowMeta = e.getPlayer().getInventory().getItemInHand().getItemMeta(); bowMeta.setLore(Arrays.asList(ChatColor.RESET + "" + ChatColor.AQUA + "Current Type:", ChatColor.RESET + "" + ChatColor.AQUA + "Explosive Shot", "Left Click to switch Type")); e.getPlayer().updateInventory(); } if (e.getPlayer().getInventory().getItemInHand().getItemMeta().getLore().contains(ChatColor.RESET + "" + ChatColor.AQUA + "Explosive Shot")) { ItemMeta bowMeta = e.getPlayer().getInventory().getItemInHand().getItemMeta(); bowMeta.setLore(Arrays.asList(ChatColor.RESET + "" + ChatColor.AQUA + "Current Type:", ChatColor.RESET + "" + ChatColor.AQUA + "Piercing Shot", "Left Click to switch Type")); e.getPlayer().updateInventory(); } } } } } } @EventHandler public void onShoot(EntityShootBowEvent e) { if (e.getEntity() instanceof Player) { Player shooter = (Player) e.getEntity(); if (e.getProjectile() instanceof Arrow) { if (shooter.getInventory().getItemInHand() != null) { if (shooter.getInventory().getItemInHand().getType().equals(Material.BOW)) { if (shooter.getInventory().getItemInHand().getItemMeta().hasLore()) { if (shooter.getInventory().getItemInHand().getItemMeta().getLore().contains(ChatColor.RESET + "" + ChatColor.AQUA + "Piercing Shot")) { e.getProjectile().setVelocity(e.getProjectile().getVelocity().multiply(1.25)); } if (shooter.getInventory().getItemInHand().getItemMeta().getLore().contains(ChatColor.RESET + "" + ChatColor.AQUA + "Explosive Shot")) { if (shooter.getLevel() == 1) { e.getProjectile().setMetadata("Explosive Shot", new FixedMetadataValue(plugin, true)); shooter.setExp(0F); new Cooldown(shooter) { }.runTaskTimer(plugin, 0L, 1L); } else { e.setCancelled(true); } } } } } } } } @EventHandler public void onHit(ProjectileHitEvent e) { if (e.getEntity() instanceof Arrow) { if (e.getEntity().hasMetadata("Explosive Shot")) { Location loc = e.getEntity().getLocation(); Bukkit.getWorld("world").createExplosion(loc.getX(), loc.getBlockY(), loc.getBlockZ(), 3L, false, false); } } }} class Cooldown extends BukkitRunnable { Player player; public Cooldown(Player player) { this.player = player; } @Override public void run() { if (player.getLevel() != 1) { player.giveExp(2); } else { this.cancel(); } }}
iWareWolf Okay if you have already registered your event's then does this throw a stacktrace when run it on the server?