package com.taiter.ce.CItems; import java.util.List; import java.util.Set; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import com.taiter.ce.EffectManager; public class Deathscythe extends CItem { int Range; int MaximumHookTime; public Deathscythe(String originalName, ChatColor color, String lDescription, long lCooldown, Material mat) { super(originalName, color, lDescription, lCooldown, mat); this.configEntries.put("Range", 10); this.configEntries.put("MaximumHookTime", 240); triggers.add(Trigger.INTERACT); } @Override public boolean effect(Event event, final Player player) { PlayerInteractEvent e = (PlayerInteractEvent) event; if(player.hasMetadata("ce." + getOriginalName())) { Entity target = null; for(Entity ent : player.getNearbyEntities(Range*2, Range*2, Range*2)) if(ent.getEntityId() == player.getMetadata("ce." + getOriginalName()).get(0).asInt()) target = ent; if(target == null) { player.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "The Soul escaped!"); return true; } Vector vec; if(e.getAction().toString().startsWith("RIGHT")) { e.setCancelled(true); vec = player.getLocation().subtract(target.getLocation()).toVector(); vec.normalize(); vec.add(new Vector(0, 0.25, 0)); vec.multiply(2); target.setFallDistance(-10); target.setVelocity(vec); } else if(e.getAction().toString().startsWith("LEFT")) { vec = target.getLocation().subtract(player.getLocation()).toVector(); vec.normalize(); vec.add(new Vector(0, 0.25, 0)); vec.multiply(2); player.setFallDistance(-10); player.setVelocity(vec); } player.removeMetadata("ce." + getOriginalName(), main); return true; } if(e.getAction().toString().startsWith("RIGHT")) { e.setCancelled(true); Location loc = player.getLocation(); List<Entity> ents = player.getNearbyEntities(Range, Range, Range); for(int i = ents.size()-1; i >= 0; i--) if(!(ents.get(i) instanceof LivingEntity)) ents.remove(i); if(ents.isEmpty()) { EffectManager.playSound(loc, "BLOCK_PORTAL_TRAVEL", 0.01f, 100f); player.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "There are no souls nearby"); return true; } for(int i = 1; i < Range; i++) { loc = player.getTargetBlock((Set<Material>)null, i).getLocation(); if(!loc.getBlock().getType().equals(Material.AIR)) return true; loc.getWorld().playEffect(loc, Effect.SMOKE, Range*2); for(Entity ent : ents) { Location entLoc = ent.getLocation(); if( Math.abs(entLoc.getBlockX() - loc.getBlockX()) < 2 && Math.abs(entLoc.getBlockY() - loc.getBlockY()) < 2 &&Math.abs(entLoc.getBlockZ() - loc.getBlockZ()) < 2) { EffectManager.playSound(ent.getLocation(), "BLOCK_PISTON_EXTEND", 0.1f, 0.3f); player.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "You caught a Soul!"); player.setMetadata("ce." + getOriginalName(), new FixedMetadataValue(main, ent.getEntityId())); new BukkitRunnable() { @Override public void run() { if(player.hasMetadata("ce." + getOriginalName())) { player.removeMetadata("ce." + getOriginalName(), main); player.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "The Soul escaped!"); } } }.runTaskLater(main, MaximumHookTime); return false; } } } player.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "You missed!"); EffectManager.playSound(loc, "BLOCK_PORTAL_TRAVEL", 0.01f, 100f); } return true; } @Override public void initConfigEntries() { Range = Integer.parseInt(getConfig().getString("Items." + getOriginalName() + ".Range")); MaximumHookTime = Integer.parseInt(getConfig().getString("Items." + getOriginalName() + ".MaximumHookTime")); } }