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 be.isach.ultracosmetics.util.SoundUtil;
import be.isach.ultracosmetics.util.Sounds;
import org.bukkit.*;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Item;
import org.bukkit.event.HandlerList;
import org.bukkit.inventory.meta.FireworkMeta;
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 chickenator gadget summoned by a player.
*
* @author iSach
* @since 08-03-2015
*/
public class GadgetChickenator extends Gadget {
private List<Item> items = new ArrayList<>();
public GadgetChickenator(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, GadgetType.CHICKENATOR, ultraCosmetics);
}
@Override
void onRightClick() {
final Chicken chicken = (Chicken) getPlayer().getWorld().spawnEntity(getPlayer().getEyeLocation(), EntityType.CHICKEN);
chicken.setNoDamageTicks(500);
chicken.setVelocity(getPlayer().getLocation().getDirection().multiply(Math.PI / 1.5));
SoundUtil.playSound(getPlayer(), Sounds.CHICKEN_IDLE, 1.4f, 1.5f);
SoundUtil.playSound(getPlayer(), Sounds.EXPLODE, 0.3f, 1.5f);
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), () -> {
spawnRandomFirework(chicken.getLocation());
SoundUtil.playSound(getPlayer(), Sounds.CHICKEN_HURT, 1.4f, 1.5f);
chicken.remove();
for (int i = 0; i < 30; i++) {
final Item ITEM = chicken.getWorld().dropItem(chicken.getLocation(), ItemFactory.create(Material.COOKED_CHICKEN, (byte) 0, UUID.randomUUID().toString()));
ITEM.setPickupDelay(30000);
ITEM.setVelocity(new Vector(MathUtils.random.nextDouble() - 0.5, MathUtils.random.nextDouble() / 2.0, MathUtils.random.nextDouble() - 0.5));
items.add(ITEM);
}
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), () -> {
items.forEach(Item::remove);
}, 50);
}, 9);
getPlayer().updateInventory();
}
@Override
public void onUpdate() {
}
@Override
public void onClear() {
for (Item i : items) {
i.remove();
}
}
public static FireworkEffect getRandomFireworkEffect() {
FireworkEffect.Builder builder = FireworkEffect.builder();
return builder.flicker(false).trail(false).with(FireworkEffect.Type.BALL_LARGE).withColor(Color.WHITE).withFade(Color.WHITE).build();
}
public void spawnRandomFirework(Location location) {
final ArrayList<Firework> fireworks = new ArrayList<>();
for (int i = 0; i < 4; i++) {
final Firework f = getPlayer().getWorld().spawn(location, Firework.class);
FireworkMeta fm = f.getFireworkMeta();
fm.addEffect(getRandomFireworkEffect());
f.setFireworkMeta(fm);
fireworks.add(f);
}
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), () -> {
for (Firework f : fireworks)
f.detonate();
}, 2);
}
@Override
void onLeftClick() {
}
}