refactoring & fix npc trying to look at players in different worlds
This commit is contained in:
parent
f6940df7d2
commit
d79d9f53d1
19 changed files with 68 additions and 31 deletions
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.hologram;
|
||||
package io.github.znetworkw.znpcservers.hologram;
|
||||
|
||||
import io.github.znetworkw.znpcservers.UnexpectedCallException;
|
||||
import io.github.znetworkw.znpcservers.reflection.Reflections;
|
||||
|
@ -6,7 +6,7 @@ import io.github.znetworkw.znpcservers.configuration.Configuration;
|
|||
import io.github.znetworkw.znpcservers.configuration.ConfigurationConstants;
|
||||
import io.github.znetworkw.znpcservers.configuration.ConfigurationValue;
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import io.github.znetworkw.znpcservers.npc.hologram.replacer.LineReplacer;
|
||||
import io.github.znetworkw.znpcservers.hologram.replacer.LineReplacer;
|
||||
import io.github.znetworkw.znpcservers.user.ZUser;
|
||||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
import org.bukkit.Location;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.hologram.replacer;
|
||||
package io.github.znetworkw.znpcservers.hologram.replacer;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import io.github.znetworkw.znpcservers.user.ZUser;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.hologram.replacer;
|
||||
package io.github.znetworkw.znpcservers.hologram.replacer;
|
||||
|
||||
import io.github.znetworkw.znpcservers.configuration.ConfigurationConstants;
|
||||
import io.github.znetworkw.znpcservers.utility.Utils;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.mojang.authlib.GameProfile;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import io.github.znetworkw.znpcservers.utility.Utils;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Lists;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import io.github.znetworkw.znpcservers.reflection.Reflections;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import io.github.znetworkw.znpcservers.reflection.Reflections;
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import io.github.znetworkw.znpcservers.reflection.Reflections;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.mojang.authlib.GameProfile;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import io.github.znetworkw.znpcservers.reflection.Reflections;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.znetworkw.znpcservers.npc.nms;
|
||||
package io.github.znetworkw.znpcservers.nms;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
|
@ -5,10 +5,10 @@ import com.mojang.authlib.GameProfile;
|
|||
import com.mojang.authlib.properties.Property;
|
||||
import com.mojang.authlib.properties.PropertyMap;
|
||||
import io.github.znetworkw.znpcservers.UnexpectedCallException;
|
||||
import io.github.znetworkw.znpcservers.reflection.Reflections;
|
||||
import io.github.znetworkw.znpcservers.hologram.Hologram;
|
||||
import io.github.znetworkw.znpcservers.nms.PacketCache;
|
||||
import io.github.znetworkw.znpcservers.npc.conversation.ConversationModel;
|
||||
import io.github.znetworkw.znpcservers.npc.hologram.Hologram;
|
||||
import io.github.znetworkw.znpcservers.npc.nms.PacketCache;
|
||||
import io.github.znetworkw.znpcservers.reflection.Reflections;
|
||||
import io.github.znetworkw.znpcservers.user.ZUser;
|
||||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
import io.github.znetworkw.znpcservers.utility.location.ZLocation;
|
||||
|
@ -75,7 +75,7 @@ public class NPC {
|
|||
this.gameProfile.getProperties().put("textures", new Property("textures", this.npcPojo.getSkin(), this.npcPojo.getSignature()));
|
||||
changeType(this.npcPojo.getNpcType());
|
||||
updateProfile(this.gameProfile.getProperties());
|
||||
setLocation(getNpcPojo().getLocation().bukkitLocation(), false);
|
||||
setLocation(getNpcPojo().getLocation().toBukkitLocation(), false);
|
||||
this.hologram.createHologram();
|
||||
if (this.npcPojo.getPathName() != null)
|
||||
setPath(NPCPath.AbstractTypeWriter.find(this.npcPojo.getPathName()));
|
||||
|
@ -249,7 +249,7 @@ public class NPC {
|
|||
public void lookAt(ZUser player, Location location, boolean rotation) {
|
||||
long lastMoveNanos = System.nanoTime() - this.lastMove;
|
||||
if (this.lastMove > 1L && lastMoveNanos < 1000000000L) return;
|
||||
Location direction = rotation ? location : this.npcPojo.getLocation().bukkitLocation().clone().setDirection(location.clone().subtract(this.npcPojo.getLocation().bukkitLocation().clone()).toVector());
|
||||
Location direction = rotation ? location : this.npcPojo.getLocation().pointingTo(location);
|
||||
try {
|
||||
Object lookPacket = Reflections.PACKET_PLAY_OUT_ENTITY_LOOK_CONSTRUCTOR.get().newInstance(this.entityID, (byte) (int) (direction.getYaw() * 256.0F / 360.0F), (byte) (int) (direction.getPitch() * 256.0F / 360.0F), true);
|
||||
Object headRotationPacket = Reflections.PACKET_PLAY_OUT_ENTITY_HEAD_ROTATION_CONSTRUCTOR.get().newInstance(this.nmsEntity, (byte) (int) (direction.getYaw() * 256.0F / 360.0F));
|
||||
|
@ -314,7 +314,7 @@ public class NPC {
|
|||
}
|
||||
|
||||
public Location getLocation() {
|
||||
if (this.npcPath != null && this.npcPath.getLocation() != null) return this.npcPath.getLocation().bukkitLocation();
|
||||
return this.npcPojo.getLocation().bukkitLocation();
|
||||
if (this.npcPath != null && this.npcPath.getLocation() != null) return this.npcPath.getLocation().toBukkitLocation();
|
||||
return this.npcPojo.getLocation().toBukkitLocation();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -252,7 +252,7 @@ public interface NPCPath {
|
|||
setLocation(location);
|
||||
ZLocation next = getPath().getLocationList().get(getNextLocation());
|
||||
Vector vector = next.toVector().add(new Vector(0.0D, location.getY() - next.getY(), 0.0D));
|
||||
Location direction = next.bukkitLocation().clone().setDirection(location.toVector().subtract(vector)
|
||||
Location direction = next.toBukkitLocation().clone().setDirection(location.toVector().subtract(vector)
|
||||
.multiply(new Vector(-1, 0, -1)));
|
||||
getNpc().setLocation(direction, false);
|
||||
getNpc().lookAt(null, direction, true);
|
||||
|
|
|
@ -3,7 +3,7 @@ package io.github.znetworkw.znpcservers.npc.conversation;
|
|||
import lol.pyr.znpcsplus.ZNPCsPlus;
|
||||
import io.github.znetworkw.znpcservers.configuration.ConfigurationConstants;
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import io.github.znetworkw.znpcservers.npc.hologram.replacer.LineReplacer;
|
||||
import io.github.znetworkw.znpcservers.hologram.replacer.LineReplacer;
|
||||
import io.github.znetworkw.znpcservers.user.ZUser;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
|
|
|
@ -19,6 +19,7 @@ public class NPCPositionTask extends BukkitRunnable {
|
|||
npc.getNpcPath().handle();
|
||||
}
|
||||
else if (FunctionFactory.isTrue(npc, "look")) for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
if (!player.getWorld().equals(npc.getLocation().getWorld())) continue;
|
||||
ZUser user = ZUser.find(player);
|
||||
if (npc.getViewers().contains(user)) npc.lookAt(user, player.getLocation(), false);
|
||||
}
|
||||
|
|
|
@ -4,6 +4,8 @@ import com.google.common.base.Preconditions;
|
|||
import com.google.gson.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.util.NumberConversions;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
@ -16,7 +18,6 @@ public class ZLocation {
|
|||
private final double z;
|
||||
private final float yaw;
|
||||
private final float pitch;
|
||||
private Location bukkitLocation;
|
||||
|
||||
public ZLocation(String worldName, double x, double y, double z, float yaw, float pitch) {
|
||||
this.worldName = worldName;
|
||||
|
@ -40,6 +41,10 @@ public class ZLocation {
|
|||
return this.worldName;
|
||||
}
|
||||
|
||||
public World getWorld() {
|
||||
return Bukkit.getWorld(this.worldName);
|
||||
}
|
||||
|
||||
public double getX() {
|
||||
return this.x;
|
||||
}
|
||||
|
@ -60,15 +65,46 @@ public class ZLocation {
|
|||
return this.pitch;
|
||||
}
|
||||
|
||||
public Location bukkitLocation() {
|
||||
if (this.bukkitLocation != null)
|
||||
return this.bukkitLocation;
|
||||
return this
|
||||
.bukkitLocation = new Location(Bukkit.getWorld(this.worldName), this.x, this.y, this.z, this.yaw, this.pitch);
|
||||
public Location toBukkitLocation() {
|
||||
return new Location(getWorld(), this.x, this.y, this.z, this.yaw, this.pitch);
|
||||
}
|
||||
|
||||
public Vector toVector() {
|
||||
return bukkitLocation().toVector();
|
||||
return new Vector(x, y, z);
|
||||
}
|
||||
|
||||
private static final double _2PI = 2 * Math.PI;
|
||||
|
||||
public Location pointingTo(Location loc) {
|
||||
return pointingTo(new ZLocation(loc)).toBukkitLocation();
|
||||
}
|
||||
|
||||
public ZLocation pointingTo(ZLocation loc) {
|
||||
/*
|
||||
* Sin = Opp / Hyp
|
||||
* Cos = Adj / Hyp
|
||||
* Tan = Opp / Adj
|
||||
*
|
||||
* x = -Opp
|
||||
* z = Adj
|
||||
*/
|
||||
final double x = loc.getX() - this.x;
|
||||
final double z = loc.getZ() - this.z;
|
||||
final double y = loc.getY() - this.y;
|
||||
|
||||
if (x == 0 && z == 0) {
|
||||
return new ZLocation(worldName, this.x, this.y, this.z, this.yaw, y > 0 ? -90 : 90);
|
||||
}
|
||||
|
||||
double x2 = NumberConversions.square(x);
|
||||
double z2 = NumberConversions.square(z);
|
||||
double xz = Math.sqrt(x2 + z2);
|
||||
|
||||
double theta = Math.atan2(-x, z);
|
||||
float yaw = (float) Math.toDegrees((theta + _2PI) % _2PI);
|
||||
float pitch = (float) Math.toDegrees(Math.atan(-y / xz));
|
||||
|
||||
return new ZLocation(worldName, this.x, this.y, this.z, yaw, pitch);
|
||||
}
|
||||
|
||||
static class ZLocationSerializer implements JsonSerializer<ZLocation>, JsonDeserializer<ZLocation> {
|
||||
|
|
Loading…
Reference in a new issue