package be.isach.ultracosmetics.cosmetics.morphs;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.UltraCosmeticsData;
import be.isach.ultracosmetics.cosmetics.Category;
import be.isach.ultracosmetics.cosmetics.gadgets.Gadget;
import be.isach.ultracosmetics.cosmetics.type.MorphType;
import be.isach.ultracosmetics.player.UltraPlayer;
import be.isach.ultracosmetics.util.*;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.UUID;
/**
* Represents an instance of a chicken morph summoned by a player.
*
* @author iSach
* @since 08-27-2015
*/
public class MorphChicken extends Morph {
private boolean cooldown;
public MorphChicken(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, MorphType.CHICKEN, ultraCosmetics);
}
@EventHandler
public void onPlayerToggleSneak(PlayerToggleSneakEvent event) {
if (event.getPlayer() == getPlayer() && getOwner().getCurrentMorph() == this && !cooldown) {
final List<Item> items = new ArrayList<>();
for (int j = 0; j < 10; j++) {
final Item i = getPlayer().getWorld().dropItem(getPlayer().getLocation(), ItemFactory.create(Material.EGG, (byte) 0x0, UUID.randomUUID().toString()));
i.setMetadata("UNPICKABLEUP", new FixedMetadataValue(getUltraCosmetics(), ""));
items.add(i);
Random r = new Random();
i.setVelocity(new Vector(r.nextDouble() - 0.5, r.nextDouble() / 2, r.nextDouble() - 0.5));
SoundUtil.playSound(getPlayer(), Sounds.CHICKEN_EGG_POP, .5f, 1.5f);
}
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), new Runnable() {
BukkitRunnable followRunnable;
@Override
public void run() {
final List<Chicken> chickens = new ArrayList<>();
for (Item i : items) {
Particles.BLOCK_CRACK.display(new Particles.BlockData(Material.STAINED_CLAY, (byte) 0), 0, 0, 0, 0.3f, 50, i.getLocation(), 128);
SoundUtil.playSound(i.getLocation(), Sounds.ZOMBIE_WOOD, .05f, 1f);
final Chicken chicken = (Chicken) i.getWorld().spawnEntity(i.getLocation(), EntityType.CHICKEN);
chicken.setAgeLock(true);
chicken.setBaby();
chicken.setNoDamageTicks(Integer.MAX_VALUE);
chicken.setVelocity(new Vector(0, 0.5f, 0));
i.remove();
chickens.add(chicken);
}
Bukkit.getScheduler().runTaskTimer(getUltraCosmetics(), () -> {
try {
for (Chicken chicken : chickens) {
UltraCosmeticsData.get().getVersionManager().getEntityUtil().follow(getPlayer(), chicken);
}
} catch (Exception exc) {
}
}, 0, 1);
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), () -> {
for (Chicken chicken : chickens) {
UtilParticles.display(Particles.LAVA, chicken.getLocation(), 10);
chicken.remove();
}
chickens.clear();
if (followRunnable != null) {
followRunnable.cancel();
}
}, 200);
}
}, 50);
cooldown = true;
Bukkit.getScheduler().runTaskLaterAsynchronously(getUltraCosmetics(), () -> cooldown = false, 30 * 20);
}
}
@Override
protected void onClear() {
}
@Override
public void onUpdate() {
UltraCosmeticsData.get().getVersionManager().getEntityUtil().chickenFall(getPlayer());
}
}