package be.isach.ultracosmetics.cosmetics.mounts;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.cosmetics.type.MountType;
import be.isach.ultracosmetics.player.UltraPlayer;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
import org.bukkit.entity.MagmaCube;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.util.EulerAngle;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.List;
/**
* Represents an instance of a moltonsnake mount.
*
* @author iSach
* @since 11-28-2015
*/
public class MountMoltenSnake extends Mount<MagmaCube> {
private List<Entity> entities = new ArrayList<>();
private Entity last;
private Location lastLocation;
private float lastYaw;
private float lastPitch;
public MountMoltenSnake(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, MountType.MOLTENSNAKE, ultraCosmetics);
}
@Override
public void onEquip() {
super.onEquip();
MagmaCube magmaCube = (MagmaCube) entity;
magmaCube.setSize(2);
entities.add(magmaCube);
summonTailPart(25);
}
@Override
public void onUpdate() {
Vector playerVector = getPlayer().getLocation().getDirection().multiply(0.7);
for (int i = 0; i < entities.size(); i++) {
final Entity entity = entities.get(i);
Location loc = entity.getLocation();
if (i == 0) {
entity.setVelocity(playerVector);
entity.teleport(loc.clone().add(0, -1.3, 0));
} else {
if (i != 1)
entity.teleport(lastLocation);
else {
entity.teleport(lastLocation.clone().add(0, -1.3, 0));
((ArmorStand)entity).setHelmet(null);
}
ArmorStand as = ((ArmorStand) entity);
as.setHeadPose(new EulerAngle(Math.toRadians(lastPitch), Math.toRadians(lastYaw), 0));
}
last = entity;
lastLocation = loc;
lastYaw = getPlayer().getLocation().getYaw();
lastPitch = getPlayer().getLocation().getPitch();
}
}
private void summonTailPart(int j) {
Location location = getPlayer().getLocation();
Vector v = getPlayer().getLocation().getDirection().multiply(-0.25);
for (int i = 0; i < j; i++) {
ArmorStand armorStand = getPlayer().getWorld().spawn(location.add(v), ArmorStand.class);
entities.add(armorStand);
armorStand.setVisible(false);
armorStand.setGravity(false);
armorStand.setHelmet(new ItemStack(Material.NETHERRACK));
armorStand.setMetadata("NO_INTER", new FixedMetadataValue(getUltraCosmetics(), ""));
}
}
@Override
public void onClear() {
super.onClear();
for (Entity entity : entities)
entity.remove();
entities.clear();
}
}