package be.isach.ultracosmetics.cosmetics.gadgets;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.player.UltraPlayer;
import be.isach.ultracosmetics.cosmetics.type.GadgetType;
import be.isach.ultracosmetics.util.ItemFactory;
import be.isach.ultracosmetics.util.MathUtils;
import org.bukkit.EntityEffect;
import org.bukkit.Material;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.UUID;
/**
* Represents an instance of a fleshhook gadget summoned by a player.
*
* @author iSach
* @since 08-03-2015
*/
public class GadgetFleshHook extends Gadget implements Listener {
private ArrayList<Item> items = new ArrayList<>();
public GadgetFleshHook(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, GadgetType.FLESHHOOK, ultraCosmetics);
}
@org.bukkit.event.EventHandler
public void onItemPickup(PlayerPickupItemEvent event) {
if (items.contains(event.getItem())) {
event.setCancelled(true);
if (event.getPlayer().getName().equals(getPlayer().getName())) {
return;
}
items.remove(event.getItem());
event.getItem().remove();
final Player HIT = event.getPlayer();
HIT.playEffect(EntityEffect.HURT);
Player hitter = getPlayer();
double dX = HIT.getLocation().getX() - hitter.getLocation().getX();
double dY = HIT.getLocation().getY() - hitter.getLocation().getY();
double dZ = HIT.getLocation().getZ() - hitter.getLocation().getZ();
double yaw = Math.atan2(dZ, dX);
double pitch = Math.atan2(Math.sqrt(dZ * dZ + dX * dX), dY) + Math.PI;
double X = Math.sin(pitch) * Math.cos(yaw);
double Y = Math.sin(pitch) * Math.sin(yaw);
double Z = Math.cos(pitch);
Vector vector = new Vector(X, Z, Y);
if (affectPlayers)
MathUtils.applyVelocity(HIT, vector.multiply(2.5D).add(new Vector(0D, 1.45D, 0D)));
}
}
@Override
void onRightClick() {
Item hook = getPlayer().getWorld().dropItem(getPlayer().getEyeLocation(), ItemFactory.create(Material.TRIPWIRE_HOOK, (byte) 0x0, UUID.randomUUID().toString()));
hook.setPickupDelay(0);
hook.setVelocity(getPlayer().getEyeLocation().getDirection().multiply(1.5));
items.add(hook);
}
@Override
void onLeftClick() {
}
@Override
public void onUpdate() {
Iterator<Item> it = items.iterator();
while (it.hasNext()) {
Object pair = it.next();
if (((Item) pair).isOnGround()) {
((Item) pair).remove();
it.remove();
}
}
}
@Override
public void onClear() {
for (Item item : items)
item.remove();
HandlerList.unregisterAll(this);
}
}