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.*;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.Random;
import java.util.UUID;
/**
* Represents an instance of a color bomb gadget summoned by a player.
*
* @author iSach
* @since 08-03-2015
*/
public class GadgetColorBomb extends Gadget {
private Item bomb;
private ArrayList<Item> items = new ArrayList<>();
private boolean running = false;
public GadgetColorBomb(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, GadgetType.COLORBOMB, ultraCosmetics);
}
@Override
void onRightClick() {
ItemStack item = ItemFactory.create(Material.WOOL, (byte) MathUtils.random.nextInt(15), UUID.randomUUID().toString());
Item bomb = getPlayer().getWorld().dropItem(getPlayer().getEyeLocation(), item);
bomb.setPickupDelay(50000);
bomb.setVelocity(getPlayer().getEyeLocation().getDirection().multiply(0.7532));
this.bomb = bomb;
}
@Override
public void onUpdate() {
if (bomb != null && bomb.isValid() && !running && bomb.isOnGround()) {
running = true;
bomb.setVelocity(new Vector(0, 0, 0));
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), () -> onClear(), 100);
}
if (running) {
Particles effect;
switch (MathUtils.random.nextInt(5)) {
default:
effect = Particles.FIREWORKS_SPARK;
break;
case 1:
effect = Particles.FIREWORKS_SPARK;
break;
case 4:
effect = Particles.FLAME;
break;
case 5:
effect = Particles.SPELL_WITCH;
break;
}
UtilParticles.display(effect, bomb.getLocation(), 1, 0.2f);
try {
for (Item item : items) {
if (item.getTicksLived() > 15) {
item.remove();
items.remove(item);
}
}
Bukkit.getScheduler().runTask(getUltraCosmetics(), () -> {
if (bomb == null) {
return;
}
ItemStack item = ItemFactory.create(Material.WOOL, (byte) MathUtils.random.nextInt(15), UUID.randomUUID().toString());
Item i = bomb.getWorld().dropItem(bomb.getLocation().add(0, 0.15f, 0), item);
i.setPickupDelay(500000);
i.setVelocity(new Vector(0, 0.5, 0).add(MathUtils.getRandomCircleVector().multiply(0.1)));
items.add(i);
SoundUtil.playSound(i.getLocation(), Sounds.CHICKEN_EGG_POP, .2f, 1.0f);
for (Entity entity : bomb.getNearbyEntities(1.5, 1, 1.5)) {
if (entity instanceof Player) {
if (entity.hasMetadata("NPC")) {
continue;
}
if (affectPlayers) {
MathUtils.applyVelocity(entity, new Vector(0, 0.5, 0).add(MathUtils.getRandomCircleVector().multiply(0.1)));
}
}
}
});
} catch (Exception exc) {
}
}
}
@Override
public void onClear() {
if (bomb != null) {
bomb.remove();
bomb = null;
}
if (items != null) {
for (Item item : items) {
item.remove();
}
items.clear();
}
running = false;
}
@Override
void onLeftClick() {
}
}