package be.isach.ultracosmetics.run;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.player.UltraPlayer;
import org.bukkit.Location;
import org.bukkit.scheduler.BukkitRunnable;
/**
* Created by sacha on 11/26/2016.
*/
public class MovingChecker extends BukkitRunnable {
private UltraCosmetics ultraCosmetics;
public MovingChecker(UltraCosmetics ultraCosmetics) {
this.ultraCosmetics = ultraCosmetics;
}
@Override
public void run() {
synchronized (ultraCosmetics.getPlayerManager().getUltraPlayers()) {
for (UltraPlayer ultraPlayer : ultraCosmetics.getPlayerManager().getUltraPlayers()) {
if(ultraPlayer == null
|| ultraPlayer.getBukkitPlayer() == null) {
continue;
}
Location currentPos = ultraPlayer.getBukkitPlayer().getLocation();
ultraPlayer.setMoving(!areEqual(currentPos, ultraPlayer.getLastPos()));
ultraPlayer.setLastPos(currentPos);
}
}
}
private boolean areEqual(Location from, Location to) {
if (from == null || to == null) {
return false;
} else if (from.getClass() != to.getClass()) {
return false;
} else {
return !(from.getWorld() != to.getWorld()
&& (from.getWorld() == null || !from.getWorld().equals(to.getWorld())))
&& (Double.doubleToLongBits(from.getX()) == Double.doubleToLongBits(to.getX())
&& (Double.doubleToLongBits(from.getY()) == Double.doubleToLongBits(to.getY())
&& (Double.doubleToLongBits(from.getZ()) == Double.doubleToLongBits(to.getZ()))));
}
}
}