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.MathUtils;
import be.isach.ultracosmetics.util.Particles;
import be.isach.ultracosmetics.util.UtilParticles;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
import org.bukkit.event.HandlerList;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.List;
/**
* Represents an instance of a tsunami gadget summoned by a player.
*
* @author iSach
* @since 08-08-2015
*/
public class GadgetTsunami extends Gadget {
List<Entity> cooldownJump = new ArrayList<>();
public GadgetTsunami(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, GadgetType.TSUNAMI, ultraCosmetics);
}
@Override
void onRightClick() {
final Vector v = getPlayer().getLocation().getDirection().normalize().multiply(0.3);
v.setY(0);
final Location loc = getPlayer().getLocation().subtract(0, 1, 0).add(v);
final int i = Bukkit.getScheduler().runTaskTimerAsynchronously(getUltraCosmetics(), new Runnable() {
@Override
public void run() {
if (loc.getBlock().getType() != Material.AIR
&& loc.getBlock().getType().isSolid())
loc.add(0, 1, 0);
if (loc.clone().subtract(0, 1, 0).getBlock().getType() == Material.AIR)
loc.add(0, -1, 0);
Location loc1 = loc.clone().add(MathUtils.randomDouble(-1.5, 1.5), MathUtils.randomDouble(0, .5) - 0.75, MathUtils.randomDouble(-1.5, 1.5));
Location loc2 = loc.clone().add(MathUtils.randomDouble(-1.5, 1.5), MathUtils.randomDouble(1.3, 1.8) - 0.75, MathUtils.randomDouble(-1.5, 1.5));
for (int i = 0; i < 5; i++) {
UtilParticles.display(Particles.EXPLOSION_NORMAL, 0.2d, 0.2d, 0.2d, loc1, 1);
UtilParticles.display(Particles.DRIP_WATER, 0.4d, 0.4d, 0.4d, loc2, 2);
}
for (int a = 0; a < 100; a++)
UtilParticles.display(0, 0, 255, loc.clone().add(MathUtils.randomDouble(-1.5, 1.5), MathUtils.randomDouble(1, 1.6) - 0.75, MathUtils.randomDouble(-1.5, 1.5)));
if (affectPlayers)
for (final Entity ent : getPlayer().getWorld().getEntities()) {
if (ent.getLocation().distance(loc) < 0.6 &&
!cooldownJump.contains(ent) &&
ent != getPlayer() && !(ent instanceof ArmorStand)) {
MathUtils.applyVelocity(ent, new Vector(0, 1, 0).add(v.clone().multiply(2)));
cooldownJump.add(ent);
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), new Runnable() {
@Override
public void run() {
cooldownJump.remove(ent);
}
}, 20);
}
}
loc.add(v);
}
}, 0, 1).getTaskId();
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), new Runnable() {
@Override
public void run() {
Bukkit.getScheduler().cancelTask(i);
}
}, 40);
}
@Override
void onLeftClick() {
}
@Override
public void onUpdate() {
}
@Override
public void onClear() {
HandlerList.unregisterAll(this);
}
}