public static Location setDirection(Location loc, Location lookat) {
loc = loc.clone();
double dx = lookat.getX() - loc.getX();
double dy = lookat.getY() - loc.getY();
double dz = lookat.getZ() - loc.getZ();
if (dx != 0) {
if (dx < 0) {
loc.setYaw((float) (1.5 * Math.PI));
} else {
loc.setYaw((float) (0.5 * Math.PI));
}
loc.setYaw((float) loc.getYaw() - (float) Math.atan(dz / dx));
} else if (dz < 0) {
loc.setYaw((float) Math.PI);
}
double dxz = Math.sqrt(Math.pow(dx, 2) + Math.pow(dz, 2));
loc.setPitch((float) -Math.atan(dy / dxz));
loc.setYaw(-loc.getYaw() * 180f / (float) Math.PI);
loc.setPitch(loc.getPitch() * 180f / (float) Math.PI);
return loc;
}