mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-11-29 06:05:17 +01:00
moved NPC rotation to LookClose trait, fix name color saving
This commit is contained in:
parent
3c1f9fd8c0
commit
455e49b4eb
Binary file not shown.
@ -1,14 +1,8 @@
|
|||||||
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.minecraft.server.EntityLiving;
|
|
||||||
|
|
||||||
public class NPCUpdater implements Runnable {
|
public class NPCUpdater implements Runnable {
|
||||||
private final CitizensNPCManager npcManager;
|
private final CitizensNPCManager npcManager;
|
||||||
@ -24,34 +18,6 @@ public class NPCUpdater implements Runnable {
|
|||||||
continue;
|
continue;
|
||||||
CitizensNPC handle = (CitizensNPC) npc;
|
CitizensNPC handle = (CitizensNPC) npc;
|
||||||
handle.update();
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -8,7 +8,7 @@ import net.citizensnpcs.api.npc.trait.trait.Spawned;
|
|||||||
import net.citizensnpcs.npc.ai.CitizensAI;
|
import net.citizensnpcs.npc.ai.CitizensAI;
|
||||||
import net.citizensnpcs.trait.Inventory;
|
import net.citizensnpcs.trait.Inventory;
|
||||||
import net.citizensnpcs.util.Messaging;
|
import net.citizensnpcs.util.Messaging;
|
||||||
import net.citizensnpcs.util.StringHelper;
|
|
||||||
import net.minecraft.server.EntityLiving;
|
import net.minecraft.server.EntityLiving;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -23,7 +23,7 @@ public abstract class CitizensNPC extends AbstractNPC {
|
|||||||
protected final NPCInventory inventory;
|
protected final NPCInventory inventory;
|
||||||
|
|
||||||
protected CitizensNPC(CitizensNPCManager manager, int id, String name) {
|
protected CitizensNPC(CitizensNPCManager manager, int id, String name) {
|
||||||
super(id, StringHelper.parseColors(name));
|
super(id, name);
|
||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
inventory = new NPCInventory(this);
|
inventory = new NPCInventory(this);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package net.citizensnpcs.npc;
|
package net.citizensnpcs.npc;
|
||||||
|
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
|
import net.citizensnpcs.util.StringHelper;
|
||||||
import net.minecraft.server.EntityHuman;
|
import net.minecraft.server.EntityHuman;
|
||||||
import net.minecraft.server.IInventory;
|
import net.minecraft.server.IInventory;
|
||||||
import net.minecraft.server.ItemStack;
|
import net.minecraft.server.ItemStack;
|
||||||
@ -20,7 +21,7 @@ public class NPCInventory implements IInventory {
|
|||||||
|
|
||||||
public NPCInventory(NPC npc) {
|
public NPCInventory(NPC npc) {
|
||||||
this.npc = npc;
|
this.npc = npc;
|
||||||
name = npc.getFullName();
|
name = StringHelper.parseColors(npc.getFullName());
|
||||||
contents = new ItemStack[size];
|
contents = new ItemStack[size];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package net.citizensnpcs.npc.entity;
|
|||||||
import net.citizensnpcs.npc.CitizensNPC;
|
import net.citizensnpcs.npc.CitizensNPC;
|
||||||
import net.citizensnpcs.npc.CitizensNPCManager;
|
import net.citizensnpcs.npc.CitizensNPCManager;
|
||||||
import net.citizensnpcs.resource.lib.EntityHumanNPC;
|
import net.citizensnpcs.resource.lib.EntityHumanNPC;
|
||||||
|
import net.citizensnpcs.util.StringHelper;
|
||||||
import net.minecraft.server.EntityLiving;
|
import net.minecraft.server.EntityLiving;
|
||||||
import net.minecraft.server.ItemInWorldManager;
|
import net.minecraft.server.ItemInWorldManager;
|
||||||
import net.minecraft.server.WorldServer;
|
import net.minecraft.server.WorldServer;
|
||||||
@ -12,6 +13,7 @@ import org.bukkit.craftbukkit.CraftWorld;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class CitizensHumanNPC extends CitizensNPC {
|
public class CitizensHumanNPC extends CitizensNPC {
|
||||||
|
|
||||||
public CitizensHumanNPC(CitizensNPCManager manager, int id, String name) {
|
public CitizensHumanNPC(CitizensNPCManager manager, int id, String name) {
|
||||||
super(manager, id, name);
|
super(manager, id, name);
|
||||||
}
|
}
|
||||||
@ -39,8 +41,8 @@ public class CitizensHumanNPC extends CitizensNPC {
|
|||||||
@Override
|
@Override
|
||||||
protected EntityLiving createHandle(Location loc) {
|
protected EntityLiving createHandle(Location loc) {
|
||||||
WorldServer ws = ((CraftWorld) loc.getWorld()).getHandle();
|
WorldServer ws = ((CraftWorld) loc.getWorld()).getHandle();
|
||||||
EntityHumanNPC handle = new EntityHumanNPC(ws.getServer().getServer(), ws, getFullName(),
|
EntityHumanNPC handle = new EntityHumanNPC(ws.getServer().getServer(), ws,
|
||||||
new ItemInWorldManager(ws));
|
StringHelper.parseColors(getFullName()), new ItemInWorldManager(ws));
|
||||||
handle.removeFromPlayerMap(getFullName());
|
handle.removeFromPlayerMap(getFullName());
|
||||||
handle.setPositionRotation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
|
handle.setPositionRotation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
|
||||||
return handle;
|
return handle;
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
package net.citizensnpcs.trait;
|
package net.citizensnpcs.trait;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
|
||||||
import net.citizensnpcs.api.DataKey;
|
import net.citizensnpcs.api.DataKey;
|
||||||
import net.citizensnpcs.api.exception.NPCLoadException;
|
import net.citizensnpcs.api.exception.NPCLoadException;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.trait.SaveId;
|
import net.citizensnpcs.api.npc.trait.SaveId;
|
||||||
import net.citizensnpcs.api.npc.trait.Trait;
|
import net.citizensnpcs.api.npc.trait.Trait;
|
||||||
|
import net.citizensnpcs.npc.CitizensNPC;
|
||||||
|
import net.minecraft.server.EntityLiving;
|
||||||
|
|
||||||
@SaveId("look-close")
|
@SaveId("look-close")
|
||||||
public class LookClose implements Trait, Runnable {
|
public class LookClose implements Trait, Runnable {
|
||||||
@ -17,11 +22,7 @@ public class LookClose implements Trait, Runnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(DataKey key) throws NPCLoadException {
|
public void load(DataKey key) throws NPCLoadException {
|
||||||
try {
|
|
||||||
shouldLookClose = key.getBoolean("");
|
shouldLookClose = key.getBoolean("");
|
||||||
} catch (Exception ex) {
|
|
||||||
throw new NPCLoadException("Invalid value. Valid values: true or false");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -31,8 +32,10 @@ public class LookClose implements Trait, Runnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// TODO Auto-generated method stub
|
EntityLiving search = null;
|
||||||
|
CitizensNPC handle = (CitizensNPC) npc;
|
||||||
|
if ((search = handle.getHandle().world.findNearbyPlayer(handle.getHandle(), 5)) != null && shouldLookClose)
|
||||||
|
faceEntity(handle, search.getBukkitEntity());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLookClose(boolean shouldLookClose) {
|
public void setLookClose(boolean shouldLookClose) {
|
||||||
@ -47,6 +50,28 @@ public class LookClose implements Trait, Runnable {
|
|||||||
shouldLookClose = !shouldLookClose;
|
shouldLookClose = !shouldLookClose;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "LookClose{" + shouldLookClose + "}";
|
return "LookClose{" + shouldLookClose + "}";
|
||||||
|
Loading…
Reference in New Issue
Block a user