mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-11-29 22:23:59 +01:00
getTrait is safer
This commit is contained in:
parent
76a769489c
commit
6aca4590a3
Binary file not shown.
@ -1,8 +1,15 @@
|
|||||||
package net.citizensnpcs;
|
package net.citizensnpcs;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.npc.CitizensNPC;
|
import net.citizensnpcs.npc.CitizensNPC;
|
||||||
import net.citizensnpcs.npc.CitizensNPCManager;
|
import net.citizensnpcs.npc.CitizensNPCManager;
|
||||||
|
import net.citizensnpcs.trait.LookClose;
|
||||||
|
import net.citizensnpcs.util.Messaging;
|
||||||
|
|
||||||
|
import net.minecraft.server.EntityLiving;
|
||||||
|
|
||||||
public class NPCUpdater implements Runnable {
|
public class NPCUpdater implements Runnable {
|
||||||
private final CitizensNPCManager npcManager;
|
private final CitizensNPCManager npcManager;
|
||||||
@ -13,7 +20,42 @@ public class NPCUpdater implements Runnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
for (NPC npc : npcManager)
|
for (NPC npc : npcManager) {
|
||||||
((CitizensNPC) npc).update();
|
if (!npc.isSpawned()) {
|
||||||
|
Messaging.debug(npc.getName() + " is not spawned.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Messaging.debug(npc.getName());
|
||||||
|
CitizensNPC handle = (CitizensNPC) npc;
|
||||||
|
handle.update();
|
||||||
|
|
||||||
|
// This needs to be handled somewhere...is this the best place?
|
||||||
|
EntityLiving search = null;
|
||||||
|
if ((search = handle.getHandle().world.findNearbyPlayer(handle.getHandle(), 5)) != null
|
||||||
|
&& npc.getTrait(LookClose.class).shouldLookClose())
|
||||||
|
faceEntity(handle, search.getBukkitEntity());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void faceEntity(CitizensNPC npc, Entity target) {
|
||||||
|
if (npc.getBukkitEntity().getWorld() != target.getWorld())
|
||||||
|
return;
|
||||||
|
Location loc = npc.getBukkitEntity().getLocation();
|
||||||
|
|
||||||
|
double xDiff = target.getLocation().getX() - loc.getX();
|
||||||
|
double yDiff = target.getLocation().getY() - loc.getY();
|
||||||
|
double zDiff = target.getLocation().getZ() - loc.getZ();
|
||||||
|
|
||||||
|
double distanceXZ = Math.sqrt(xDiff * xDiff + zDiff * zDiff);
|
||||||
|
double distanceY = Math.sqrt(distanceXZ * distanceXZ + yDiff * yDiff);
|
||||||
|
|
||||||
|
double yaw = (Math.acos(xDiff / distanceXZ) * 180 / Math.PI);
|
||||||
|
double pitch = (Math.acos(yDiff / distanceY) * 180 / Math.PI) - 90;
|
||||||
|
if (zDiff < 0.0) {
|
||||||
|
yaw = yaw + (Math.abs(180 - yaw) * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
npc.getHandle().yaw = (float) yaw - 90;
|
||||||
|
npc.getHandle().pitch = (float) pitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -11,7 +11,6 @@ import net.minecraft.server.World;
|
|||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.CraftWorld;
|
import org.bukkit.craftbukkit.CraftWorld;
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public abstract class CitizensMobNPC extends CitizensNPC {
|
public abstract class CitizensMobNPC extends CitizensNPC {
|
||||||
@ -44,11 +43,6 @@ public abstract class CitizensMobNPC extends CitizensNPC {
|
|||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public LivingEntity getBukkitEntity() {
|
|
||||||
return (LivingEntity) getHandle().getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Map<Class<? extends Entity>, Integer> classToInt;
|
private static Map<Class<? extends Entity>, Integer> classToInt;
|
||||||
private static Map<Integer, Class<? extends Entity>> intToClass;
|
private static Map<Integer, Class<? extends Entity>> intToClass;
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ public abstract class CitizensNPC extends AbstractNPC {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CitizensAI getAI() {
|
public CitizensAI getAI() {
|
||||||
return new CitizensAI(this);
|
return ai;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -7,7 +7,6 @@ import net.citizensnpcs.npc.CitizensNPC;
|
|||||||
import net.citizensnpcs.util.Messaging;
|
import net.citizensnpcs.util.Messaging;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
public class CitizensAI implements AI {
|
public class CitizensAI implements AI {
|
||||||
@ -25,28 +24,6 @@ public class CitizensAI implements AI {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void faceEntity(Entity target) {
|
|
||||||
if (npc.getBukkitEntity().getWorld() != target.getWorld())
|
|
||||||
return;
|
|
||||||
Location loc = npc.getBukkitEntity().getLocation();
|
|
||||||
|
|
||||||
double xDiff = target.getLocation().getX() - loc.getX();
|
|
||||||
double yDiff = target.getLocation().getY() - loc.getY();
|
|
||||||
double zDiff = target.getLocation().getZ() - loc.getZ();
|
|
||||||
|
|
||||||
double distanceXZ = Math.sqrt(xDiff * xDiff + zDiff * zDiff);
|
|
||||||
double distanceY = Math.sqrt(distanceXZ * distanceXZ + yDiff * yDiff);
|
|
||||||
|
|
||||||
double yaw = (Math.acos(xDiff / distanceXZ) * 180 / Math.PI);
|
|
||||||
double pitch = (Math.acos(yDiff / distanceY) * 180 / Math.PI) - 90;
|
|
||||||
if (zDiff < 0.0) {
|
|
||||||
yaw = yaw + (Math.abs(180 - yaw) * 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
npc.getHandle().yaw = (float) yaw - 90;
|
|
||||||
npc.getHandle().pitch = (float) pitch;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerNavigationCallback(NavigationCallback callback) {
|
public void registerNavigationCallback(NavigationCallback callback) {
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user