diff --git a/src/net/jitse/npclib/api/NPC.java b/src/net/jitse/npclib/api/NPC.java index cdb08b8..c68cb6a 100644 --- a/src/net/jitse/npclib/api/NPC.java +++ b/src/net/jitse/npclib/api/NPC.java @@ -11,6 +11,7 @@ import net.jitse.npclib.events.NPCDestroyEvent; import net.jitse.npclib.events.NPCSpawnEvent; import net.jitse.npclib.events.trigger.TriggerType; import net.jitse.npclib.skin.Skin; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -38,27 +39,27 @@ public abstract class NPC { protected Location location; public NPC(JavaPlugin plugin, Skin skin, double autoHideDistance, List lines) { - if (skin == null) { - throw new IllegalArgumentException("Skin cannot be null."); - } - this.plugin = plugin; this.skin = skin; this.autoHideDistance = autoHideDistance; - this.lines = (lines == null ? new ArrayList<>() : lines); + this.lines = (lines == null ? Collections.emptyList() : lines); NPCManager.add(this); } protected GameProfile generateGameProfile(UUID uuid, String name) { GameProfile gameProfile = new GameProfile(uuid, name); - gameProfile.getProperties().removeAll("textures"); - gameProfile.getProperties().put("textures", new Property("textures", skin.getValue(), skin.getSignature())); + + if (skin != null) { + gameProfile.getProperties().put("textures", new Property("textures", skin.getValue(), skin.getSignature())); + } + return gameProfile; } public void destroy() { NPCManager.remove(this); + shown.stream().filter(u -> !autoHidden.contains(u)).forEach(u -> hide(Bukkit.getPlayer(u), true)); } public Set getShown() { diff --git a/src/net/jitse/npclib/listeners/PlayerMoveListener.java b/src/net/jitse/npclib/listeners/PlayerMoveListener.java index b30aa88..430ead2 100644 --- a/src/net/jitse/npclib/listeners/PlayerMoveListener.java +++ b/src/net/jitse/npclib/listeners/PlayerMoveListener.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerTeleportEvent; /** * @author Jitse Boonstra @@ -26,23 +27,31 @@ public class PlayerMoveListener implements Listener { return; } - Player player = event.getPlayer(); + handleMove(event.getPlayer()); + } + @EventHandler + public void onPlayerTeleport(PlayerTeleportEvent event) { + handleMove(event.getPlayer()); + } + + private void handleMove(Player player) { for (NPC npc : NPCManager.getAllNPCs()) { if (!npc.getShown().contains(player.getUniqueId())) { continue; // NPC was never supposed to be shown to the player. } - double distance = player.getLocation().distance(npc.getLocation()); + double hideDistance = npc.getAutoHideDistance(); + boolean inRange = player.getLocation().distanceSquared(npc.getLocation()) <= (hideDistance * hideDistance); if (npc.getAutoHidden().contains(player.getUniqueId())) { // Check if the player and NPC are within the range to sendShowPackets it again. - if (distance <= npc.getAutoHideDistance()) { + if (inRange) { npc.show(player, true); npc.getAutoHidden().remove(player.getUniqueId()); } } else { // Check if the player and NPC are out of range to sendHidePackets it. - if (distance > npc.getAutoHideDistance()) { + if (!inRange) { npc.hide(player, true); npc.getAutoHidden().add(player.getUniqueId()); } diff --git a/src/net/jitse/npclib/plugin/NPCLibPlugin.java b/src/net/jitse/npclib/plugin/NPCLibPlugin.java index b2884dd..aa82a34 100644 --- a/src/net/jitse/npclib/plugin/NPCLibPlugin.java +++ b/src/net/jitse/npclib/plugin/NPCLibPlugin.java @@ -8,7 +8,6 @@ import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.NPC; import net.jitse.npclib.plugin.listeners.NPCListener; import net.jitse.npclib.skin.MineSkinFetcher; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -28,8 +27,8 @@ public class NPCLibPlugin extends JavaPlugin implements Listener { @Override public void onEnable() { this.npcLib = new NPCLib(this); - Bukkit.getConsoleSender().sendMessage(ChatColor.BLUE + "[NPCLib] " + ChatColor.WHITE + "plugin enabled."); - Bukkit.getConsoleSender().sendMessage(ChatColor.BLUE + "[NPCLib] " + + getServer().getConsoleSender().sendMessage(ChatColor.BLUE + "[NPCLib] " + ChatColor.WHITE + "plugin enabled."); + getServer().getConsoleSender().sendMessage(ChatColor.BLUE + "[NPCLib] " + ChatColor.GRAY + "This is a test plugin usually used for development reasons. " + "You can spawn NPCs by pressing [shift] in game."); @@ -40,7 +39,7 @@ public class NPCLibPlugin extends JavaPlugin implements Listener { @Override public void onDisable() { - Bukkit.getConsoleSender().sendMessage(ChatColor.BLUE + "[NPCLib] " + ChatColor.WHITE + "plugin disabled."); + getServer().getConsoleSender().sendMessage(ChatColor.BLUE + "[NPCLib] " + ChatColor.WHITE + "plugin disabled."); } @EventHandler @@ -57,7 +56,7 @@ public class NPCLibPlugin extends JavaPlugin implements Listener { )); npc.create(event.getPlayer().getLocation()); - for (Player player : Bukkit.getOnlinePlayers()) { + for (Player player : getServer().getOnlinePlayers()) { npc.show(player); } });