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 e41b78d..3bfefa0 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java @@ -312,8 +312,7 @@ public class NPC { } public Location getLocation() { - return this.npcPath != null ? - this.npcPath.getLocation().bukkitLocation() : - this.npcPojo.getLocation().bukkitLocation(); + if (this.npcPath != null && this.npcPath.getLocation() != null) return this.npcPath.getLocation().bukkitLocation(); + return this.npcPojo.getLocation().bukkitLocation(); } } 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 deleted file mode 100644 index cf19e15..0000000 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.github.znetworkw.znpcservers.npc.task; - -import io.github.znetworkw.znpcservers.configuration.ConfigurationConstants; -import io.github.znetworkw.znpcservers.npc.FunctionFactory; -import io.github.znetworkw.znpcservers.npc.NPC; -import io.github.znetworkw.znpcservers.npc.conversation.ConversationModel; -import io.github.znetworkw.znpcservers.user.ZUser; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import org.bukkit.scheduler.BukkitRunnable; - -public class NPCManagerTask extends BukkitRunnable { - public NPCManagerTask(Plugin serversNPC) { - 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().distanceSquared(npc.getLocation()) <= distSq); - if (npc.getViewers().contains(zUser) && !canSeeNPC) { - npc.delete(zUser); - continue; - } - if (canSeeNPC) { - if (!npc.getViewers().contains(zUser)) npc.spawn(zUser); - if (FunctionFactory.isTrue(npc, "look") && !hasPath) npc.lookAt(zUser, player.getLocation(), false); - npc.getHologram().updateNames(zUser); - ConversationModel conversationStorage = npc.getNpcPojo().getConversation(); - if (conversationStorage != null && conversationStorage.getConversationType() == ConversationModel.ConversationType.RADIUS) npc.tryStartConversation(player); - } - } - } - } -} diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCPathTask.java b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCPathTask.java new file mode 100644 index 0000000..21abd3b --- /dev/null +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCPathTask.java @@ -0,0 +1,15 @@ +package io.github.znetworkw.znpcservers.npc.task; + +import io.github.znetworkw.znpcservers.npc.NPC; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; + +public class NPCPathTask extends BukkitRunnable { + public NPCPathTask(Plugin serversNPC) { + runTaskTimerAsynchronously(serversNPC, 60L, 1L); + } + + public void run() { + for (NPC npc : NPC.all()) if (npc.getNpcPath() != null) npc.getNpcPath().handle(); + } +} diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCUpdateTask.java b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCUpdateTask.java new file mode 100644 index 0000000..a4c33b9 --- /dev/null +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCUpdateTask.java @@ -0,0 +1,36 @@ +package io.github.znetworkw.znpcservers.npc.task; + +import io.github.znetworkw.znpcservers.configuration.ConfigurationConstants; +import io.github.znetworkw.znpcservers.npc.FunctionFactory; +import io.github.znetworkw.znpcservers.npc.NPC; +import io.github.znetworkw.znpcservers.npc.conversation.ConversationModel; +import io.github.znetworkw.znpcservers.user.ZUser; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; + +public class NPCUpdateTask extends BukkitRunnable { + public NPCUpdateTask(Plugin serversNPC) { + runTaskTimerAsynchronously(serversNPC, 60L, 10L); + } + + public void run() { + int distSq = ConfigurationConstants.VIEW_DISTANCE * ConfigurationConstants.VIEW_DISTANCE; + for (NPC npc : NPC.all()) for (Player player : Bukkit.getOnlinePlayers()) { + ZUser zUser = ZUser.find(player); + boolean canSeeNPC = (player.getWorld() == npc.getLocation().getWorld() && player.getLocation().distanceSquared(npc.getLocation()) <= distSq); + if (npc.getViewers().contains(zUser) && !canSeeNPC) { + npc.delete(zUser); + continue; + } + if (canSeeNPC) { + if (!npc.getViewers().contains(zUser)) npc.spawn(zUser); + if (FunctionFactory.isTrue(npc, "look") && npc.getNpcPath() == null) npc.lookAt(zUser, player.getLocation(), false); + npc.getHologram().updateNames(zUser); + ConversationModel conversationStorage = npc.getNpcPojo().getConversation(); + if (conversationStorage != null && conversationStorage.getConversationType() == ConversationModel.ConversationType.RADIUS) npc.tryStartConversation(player); + } + } + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java b/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java index a171564..f094bda 100644 --- a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java +++ b/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java @@ -11,7 +11,8 @@ import io.github.znetworkw.znpcservers.npc.NPC; import io.github.znetworkw.znpcservers.npc.NPCModel; import io.github.znetworkw.znpcservers.npc.NPCPath; import io.github.znetworkw.znpcservers.npc.NPCType; -import io.github.znetworkw.znpcservers.npc.task.NPCManagerTask; +import io.github.znetworkw.znpcservers.npc.task.NPCPathTask; +import io.github.znetworkw.znpcservers.npc.task.NPCUpdateTask; import io.github.znetworkw.znpcservers.npc.task.NPCSaveTask; import io.github.znetworkw.znpcservers.user.ZUser; import io.github.znetworkw.znpcservers.utility.BungeeUtils; @@ -77,7 +78,8 @@ public class ZNPCsPlus extends JavaPlugin { SCHEDULER = new SchedulerUtils(this); BUNGEE_UTILS = new BungeeUtils(this); Bukkit.getOnlinePlayers().forEach(ZUser::find); - new NPCManagerTask(this); + new NPCPathTask(this); + new NPCUpdateTask(this); new NPCSaveTask(this, ConfigurationConstants.SAVE_DELAY); new PlayerListener(this); new InventoryListener(this);