package be.isach.ultracosmetics.cosmetics.gadgets;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.cosmetics.type.GadgetType;
import be.isach.ultracosmetics.player.UltraPlayer;
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.Material;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.util.Vector;
/**
* Represents an instance of an antigravity gadget summoned by a player.
*
* @author iSach
* @since 08-10-2015
*/
public class GadgetAntiGravity extends Gadget {
private ArmorStand as;
private boolean running;
public GadgetAntiGravity(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, GadgetType.ANTIGRAVITY, ultraCosmetics);
}
@Override
void onRightClick() {
as = getPlayer().getWorld().spawn(getPlayer().getLocation(), ArmorStand.class);
as.setMetadata("NO_INTER", new FixedMetadataValue(getUltraCosmetics(), ""));
as.setGravity(false);
as.setSmall(true);
running = true;
as.setVisible(false);
as.setHelmet(new ItemStack(Material.SEA_LANTERN));
Bukkit.getScheduler().runTaskLater(getUltraCosmetics(), () -> running = false, 240);
}
@Override
void onLeftClick() {
}
@Override
public void onUpdate() {
if (as != null && as.isValid()) {
if (running) {
as.setHeadPose(as.getHeadPose().add(0, 0.1, 0));
UtilParticles.display(Particles.PORTAL, 3f, 3f, 3f, as.getLocation(), 150);
UtilParticles.display(Particles.SPELL_WITCH, .3f, .3f, .3f, as.getEyeLocation(), 5);
for (Entity ent : as.getNearbyEntities(3, 2, 3)) {
if (ent instanceof LivingEntity && !(ent instanceof ArmorStand)) {
MathUtils.applyVelocity(ent, new Vector(0, 0.05, 0));
}
}
} else {
as.remove();
as = null;
}
}
}
// Find a fkn alternative to this shit :^)
@EventHandler
public void onKick(PlayerKickEvent event) {
try {
if (running) {
if (as != null && as.isValid() && event.getReason().contains("Fly")) {
if (as.getLocation().distance(event.getPlayer().getLocation()) < 8) {
event.setCancelled(true);
System.out.println("UltraCosmetics >> Cancelling invalid Flight KicK.");
return;
}
}
event.setCancelled(true);
System.out.println("UltraCosmetics >> Cancelling invalid Flight KicK.");
return;
}
} catch (Exception exc) {
}
}
@Override
public void onClear() {
if (as != null) {
as.remove();
}
running = false;
}
}