@SuppressWarnings("deprecation") private void handleProjectile(Vector v, Projectile projectile) { projectile.setPersistent(false); projectile.setGravity(gravity); if (projectile instanceof Explosive) { if (yield != null) { ((Explosive) projectile).setYield(yield.floatValue()); } if (isIncendiary != null) { ((Explosive) projectile).setIsIncendiary(isIncendiary); } } if (projectile instanceof Fireball && setFireballDirection) { ((Fireball) projectile).setDirection(v.clone().normalize().multiply(speed)); } if (projectileType == Arrow.class) { Events.autoRemoveProjectile(projectile.getEntityId()); ((Arrow) projectile).setPickupStatus(Arrow.PickupStatus.DISALLOWED); } if (!gravity) { (new BukkitRunnable() { @Override public void run() { projectile.remove(); } }).runTaskLater(RPGItems.plugin, 80); } }
@SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerPickupTrident(PlayerPickupArrowEvent e) { if (e.getItem().getItemStack().getType() != Material.TRIDENT || !e.getItem().getItemStack().hasItemMeta()) { return; } ItemStack tridentItem = e.getItem().getItemStack(); ItemMeta itemMeta = tridentItem.getItemMeta(); if (!itemMeta.hasLore() || itemMeta.getLore().isEmpty()) { return; } try { UUID uuid = UUID.fromString(itemMeta.getLore().get(0)); ItemStack realItem = removeLocalItemStack(uuid); if (realItem != null) { if (realItem.getType() == Material.AIR) { e.getArrow().setPickupStatus(Arrow.PickupStatus.DISALLOWED); e.getArrow().setPersistent(false); e.setCancelled(true); Bukkit.getScheduler().runTaskLater(RPGItems.plugin, () -> e.getArrow().remove(), 100L); } else { RPGItem.updateItemStack(realItem); e.getItem().setItemStack(realItem); } } } catch (IllegalArgumentException ex) { logger.log(Level.WARNING, "Exception when PlayerPickupArrowEvent. May be harmless.", ex); } }
@SuppressWarnings("deprecation") @Override public PowerResult<Void> fire(Player player, ItemStack stack) { if (!checkCooldown(this, player, cooldown, true, true)) return PowerResult.cd(); if (!getItem().consumeDurability(stack, cost)) return PowerResult.cost(); player.playSound(player.getLocation(), Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f); Events.registerRPGProjectile(this.getItem(), stack, player); Arrow arrow = player.launchProjectile(Arrow.class); arrow.setPickupStatus(Arrow.PickupStatus.DISALLOWED); Events.autoRemoveProjectile(arrow.getEntityId()); arrow.setPersistent(false); return PowerResult.ok(); }