From 4f6048c058e80e6ab1399d56ff0b5b081df858ee Mon Sep 17 00:00:00 2001 From: Pyr Date: Wed, 19 Apr 2023 20:37:02 +0100 Subject: [PATCH] change the ludicrous 1-tick delay for npc distance checks, fix useless cache miss errors --- .../znetworkw/znpcservers/cache/TypeCache.java | 14 +++++++++----- .../io/github/znetworkw/znpcservers/npc/NPC.java | 3 +-- .../znpcservers/npc/packet/PacketV19.java | 2 +- .../znetworkw/znpcservers/npc/packet/PacketV8.java | 2 +- .../znpcservers/npc/task/NPCLoadTask.java | 3 +-- .../znpcservers/npc/task/NPCManagerTask.java | 5 +++-- src/main/resources/plugin.yml | 1 + 7 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/github/znetworkw/znpcservers/cache/TypeCache.java b/src/main/java/io/github/znetworkw/znpcservers/cache/TypeCache.java index 43fa095..671c784 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/cache/TypeCache.java +++ b/src/main/java/io/github/znetworkw/znpcservers/cache/TypeCache.java @@ -140,16 +140,20 @@ public interface TypeCache { } public T load() { + return load(false); + } + + public T load(boolean missAllowed) { if (this.loaded) return this.cached; try { - if (this.BUILDER_CLASS == null) throw new IllegalStateException("can't find class for: " + this.cacheBuilder.className); + if (this.BUILDER_CLASS == null) throw new ClassNotFoundException("No class found: " + this.cacheBuilder.className.toString()); T eval = (this.cached != null) ? this.cached : (this.cached = onLoad()); if (eval == null) throw new NullPointerException(); } catch (Throwable throwable) { - throwable.printStackTrace(); - if (throwable instanceof IllegalStateException) log("No cache found for: " + this.cacheBuilder.className); - log("No cache found for: " + this.cacheBuilder.className + " : " + this.cacheBuilder.methods.toString()); - log("Skipping cache for " + this.cacheBuilder.className); + if (!missAllowed) { + log("Cache for class failed to load due to the following exception: " + this.cacheBuilder.className); + throwable.printStackTrace(); + } } this.loaded = true; return this.cached; diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java b/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java index b4178a8..e41b78d 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java @@ -201,8 +201,7 @@ public class NPC { } public synchronized void spawn(ZUser user) { - if (this.viewers.contains(user)) - throw new IllegalStateException(user.getUUID().toString() + " is already a viewer."); + if (this.viewers.contains(user)) throw new IllegalStateException(user.getUUID().toString() + " is already a viewer."); try { this.viewers.add(user); boolean npcIsPlayer = (this.npcPojo.getNpcType() == NPCType.PLAYER); diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/packet/PacketV19.java b/src/main/java/io/github/znetworkw/znpcservers/npc/packet/PacketV19.java index f1467ed..71994d1 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/packet/PacketV19.java +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/packet/PacketV19.java @@ -11,7 +11,7 @@ public class PacketV19 extends PacketV18 { public Object getPlayerPacket(Object nmsWorld, GameProfile gameProfile) throws ReflectiveOperationException { try { - return CacheRegistry.PLAYER_CONSTRUCTOR_NEW_1.load().newInstance(CacheRegistry.GET_SERVER_METHOD.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile, null); + return CacheRegistry.PLAYER_CONSTRUCTOR_NEW_1.load(true).newInstance(CacheRegistry.GET_SERVER_METHOD.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile, null); } catch (Throwable e) { return CacheRegistry.PLAYER_CONSTRUCTOR_NEW_2.load().newInstance(CacheRegistry.GET_SERVER_METHOD.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile); } diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/packet/PacketV8.java b/src/main/java/io/github/znetworkw/znpcservers/npc/packet/PacketV8.java index 820ee98..d51740b 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/packet/PacketV8.java +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/packet/PacketV8.java @@ -39,7 +39,7 @@ public class PacketV8 implements Packet { public Object getMetadataPacket(int entityId, Object nmsEntity) throws ReflectiveOperationException { Object dataWatcher = CacheRegistry.GET_DATA_WATCHER_METHOD.load().invoke(nmsEntity); try { - return CacheRegistry.PACKET_PLAY_OUT_ENTITY_META_DATA_CONSTRUCTOR.load().newInstance(entityId, dataWatcher, true); + return CacheRegistry.PACKET_PLAY_OUT_ENTITY_META_DATA_CONSTRUCTOR.load(true).newInstance(entityId, dataWatcher, true); } catch (Exception e2) { return CacheRegistry.PACKET_PLAY_OUT_ENTITY_META_DATA_CONSTRUCTOR_V1.load().newInstance(entityId, CacheRegistry.GET_DATAWATCHER_B_LIST.load().invoke(dataWatcher)); } diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCLoadTask.java b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCLoadTask.java index 874ec61..fdbf60c 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCLoadTask.java +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCLoadTask.java @@ -22,8 +22,7 @@ public class NPCLoadTask extends BukkitRunnable { return; } World world = Bukkit.getWorld(this.npc.getNpcPojo().getLocation().getWorldName()); - if (world == null) - return; + if (world == null) return; cancel(); this.npc.onLoad(); } diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java index 92fbbd7..cf19e15 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java @@ -12,16 +12,17 @@ import org.bukkit.scheduler.BukkitRunnable; public class NPCManagerTask extends BukkitRunnable { public NPCManagerTask(Plugin serversNPC) { - runTaskTimerAsynchronously(serversNPC, 60L, 1L); + runTaskTimerAsynchronously(serversNPC, 60L, 10L); } public void run() { + int distSq = ConfigurationConstants.VIEW_DISTANCE * ConfigurationConstants.VIEW_DISTANCE; for (NPC npc : NPC.all()) { boolean hasPath = (npc.getNpcPath() != null); if (hasPath) npc.getNpcPath().handle(); for (Player player : Bukkit.getOnlinePlayers()) { ZUser zUser = ZUser.find(player); - boolean canSeeNPC = (player.getWorld() == npc.getLocation().getWorld() && player.getLocation().distance(npc.getLocation()) <= ConfigurationConstants.VIEW_DISTANCE); + boolean canSeeNPC = (player.getWorld() == npc.getLocation().getWorld() && player.getLocation().distanceSquared(npc.getLocation()) <= distSq); if (npc.getViewers().contains(zUser) && !canSeeNPC) { npc.delete(zUser); continue; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 911b935..47089ab 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,6 @@ name: ZNPCsPlus main: lol.pyr.znpcsplus.ZNPCsPlus +load: POSTWORLD version: ${version} api-version: 1.13 softdepend: [ PlaceholderAPI ] \ No newline at end of file