package be.isach.ultracosmetics.v1_9_R2.mount;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.UltraCosmeticsData;
import be.isach.ultracosmetics.cosmetics.type.MountType;
import be.isach.ultracosmetics.player.UltraPlayer;
import be.isach.ultracosmetics.util.MathUtils;
import be.isach.ultracosmetics.util.PlayerUtils;
import be.isach.ultracosmetics.util.UtilParticles;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.util.EulerAngle;
import org.bukkit.util.Vector;
/**
* Created by sacha on 1/03/17.
*/
public class MountRudolph extends MountHorse {
private ArmorStand left, right;
public MountRudolph(UltraPlayer owner, UltraCosmetics ultraCosmetics) {
super(owner, MountType.RUDOLPH, ultraCosmetics);
}
@Override
public void onEquip() {
super.onEquip();
entity.setJumpStrength(0.7);
UltraCosmeticsData.get().getVersionManager().getEntityUtil().setHorseSpeed(entity, 0.4d);
left = spawnArmorStand(false);
right = spawnArmorStand(true);
moveAntlers();
}
private ArmorStand spawnArmorStand(boolean right) {
ArmorStand armorStand = getEntity().getWorld().spawn(getEntity().getEyeLocation(), ArmorStand.class);
armorStand.setBasePlate(false);
armorStand.setGravity(false);
armorStand.setArms(true);
armorStand.setVisible(false);
if (!right) {
armorStand.setRightArmPose(new EulerAngle(MathUtils.PI, Math.PI / 4, -(MathUtils.PI / 4)));
} else {
armorStand.setRightArmPose(new EulerAngle(MathUtils.PI, Math.PI / 4 + -(Math.PI / 2), MathUtils.PI / 4));
}
armorStand.setItemInHand(new ItemStack(Material.DEAD_BUSH));
armorStand.setMetadata("C_AD_ArmorStand", new FixedMetadataValue(getUltraCosmetics(), getPlayer().getUniqueId().toString()));
getUltraCosmetics().getArmorStandManager().makeUcStand(armorStand);
return armorStand;
}
@Override
public void onUpdate() {
if (left != null && right != null)
moveAntlers();
}
private void moveAntlers() {
Location location = getEntity().getEyeLocation();
Vector vectorLeft = getLeftVector(location).multiply(0.5).multiply(1.6);
Vector rightVector = getRightVector(location).multiply(0.5).multiply(0.4);
Vector playerVector = PlayerUtils.getHorizontalDirection(getPlayer(), 0.75);
location.add(vectorLeft).add(playerVector).add(0, -1.7, 0);
left.teleport(location);
location.subtract(vectorLeft).add(rightVector);
right.teleport(location);
location.subtract(rightVector).subtract(playerVector).subtract(0, -1.5, 0);
double y = location.getY();
location.add(location.getDirection().multiply(1.15));
location.setY(y - 0.073);
UtilParticles.display(255, 0, 0, location);
new Thread(() -> {
for (Player player : getPlayer().getWorld().getPlayers()) {
UltraCosmeticsData.get().getVersionManager().getEntityUtil().sendTeleportPacket(player, right);
UltraCosmeticsData.get().getVersionManager().getEntityUtil().sendTeleportPacket(player, left);
}
}).start();
}
@Override
public void onClear() {
super.onClear();
if (left != null)
left.remove();
if (right != null)
right.remove();
}
public static Vector getLeftVector(Location loc) {
final float newX = (float) (loc.getX() + (1 * Math.cos(Math.toRadians(loc.getYaw() + 0))));
final float newZ = (float) (loc.getZ() + (1 * Math.sin(Math.toRadians(loc.getYaw() + 0))));
return new Vector(newX - loc.getX(), 0, newZ - loc.getZ());
}
public static Vector getRightVector(Location loc) {
final float newX = (float) (loc.getX() + (-1 * Math.cos(Math.toRadians(loc.getYaw() + 0))));
final float newZ = (float) (loc.getZ() + (-1 * Math.sin(Math.toRadians(loc.getYaw() + 0))));
return new Vector(newX - loc.getX(), 0, newZ - loc.getZ());
}
@Override
protected Horse.Variant getVariant() {
return Horse.Variant.MULE;
}
@Override
protected Horse.Color getColor() {
return Horse.Color.DARK_BROWN;
}
}