package be.isach.ultracosmetics.cosmetics.morphs;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.cosmetics.type.MorphType;
import be.isach.ultracosmetics.player.UltraPlayer;
import be.isach.ultracosmetics.util.ItemFactory;
import be.isach.ultracosmetics.util.MathUtils;
import be.isach.ultracosmetics.util.SoundUtil;
import be.isach.ultracosmetics.util.Sounds;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Creature;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.metadata.FixedMetadataValue;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
*
*
* @author iSach
* @since 10-18-2015
*/
public class MorphWitherSkeleton extends Morph {
boolean inCooldown;
public MorphWitherSkeleton(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, MorphType.WITHERSKELETON, ultraCosmetics);
}
@Override
public void onUpdate() {
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onSneak(PlayerToggleSneakEvent event) {
if (event.getPlayer() == getPlayer() && !inCooldown) {
inCooldown = true;
Bukkit.getScheduler().runTaskLaterAsynchronously(getUltraCosmetics(), () -> inCooldown = false, 200);
for (Entity ent : getPlayer().getNearbyEntities(3, 3, 3)) {
if (ent instanceof Player || ent instanceof Creature)
MathUtils.applyVelocity(ent, ent.getLocation().toVector().subtract(getPlayer().getLocation().toVector()).setY(1));
}
final List<Entity> items = new ArrayList<>();
for (int i = 0; i < 20; i++) {
Item bone = getPlayer().getWorld().dropItem(getPlayer().getLocation().add(Math.random() * 5.0D - 2.5D, Math.random() * 3.0D, Math.random() * 5.0D - 2.5D), ItemFactory.create(Material.BONE, (byte) 0, UUID.randomUUID().toString()));
bone.setVelocity(MathUtils.getRandomVector());
bone.setMetadata("UNPICKABLEUP", new FixedMetadataValue(getUltraCosmetics(), ""));
items.add(bone);
}
Bukkit.getScheduler().runTaskLaterAsynchronously(getUltraCosmetics(), () -> {
for (Entity bone : items)
bone.remove();
items.clear();
}, 50);
SoundUtil.playSound(getPlayer(), Sounds.SKELETON_HURT, 0.4f, (float) Math.random() + 1f);
}
}
@Override
protected void onClear() {
}
}