Merge pull request #88 from Mooselk/master

Fixed NPE
This commit is contained in:
Jitse Boonstra 2020-06-22 18:20:14 +02:00 committed by GitHub
commit 615da55a31
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 30 additions and 28 deletions

View File

@ -1,8 +1,6 @@
package net.jitse.npclib.listeners; package net.jitse.npclib.listeners;
import java.util.HashMap; import net.jitse.npclib.NPCLib;
import java.util.UUID;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -11,38 +9,42 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
import net.jitse.npclib.NPCLib; import java.util.HashMap;
import java.util.UUID;
public class PeriodicMoveListener extends HandleMoveBase implements Listener { public class PeriodicMoveListener extends HandleMoveBase implements Listener {
private final NPCLib instance; private final NPCLib instance;
private final long updateInterval; private final long updateInterval;
private final HashMap<UUID, BukkitTask> tasks = new HashMap<>(); private final HashMap<UUID, BukkitTask> tasks = new HashMap<>();
public PeriodicMoveListener(NPCLib instance, long updateInterval) { public PeriodicMoveListener(NPCLib instance, long updateInterval) {
this.instance = instance; this.instance = instance;
this.updateInterval = updateInterval; this.updateInterval = updateInterval;
} }
private void startTask(UUID uuid) { private void startTask(UUID uuid) {
// purposefully using UUIDs and not holding player references // purposefully using UUIDs and not holding player references
tasks.put(uuid, Bukkit.getScheduler().runTaskTimer(instance.getPlugin(), () -> { tasks.put(uuid, Bukkit.getScheduler().runTaskTimer(instance.getPlugin(), () -> {
Player player = Bukkit.getPlayer(uuid); Player player = Bukkit.getPlayer(uuid);
if (player != null) { // safety check if (player != null) { // safety check
handleMove(player); handleMove(player);
} }
}, 1L, updateInterval)); }, 1L, updateInterval));
} }
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent evt) { public void onPlayerJoin(PlayerJoinEvent event) {
startTask(evt.getPlayer().getUniqueId()); startTask(event.getPlayer().getUniqueId());
} }
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent evt) { public void onPlayerQuit(PlayerQuitEvent event) {
tasks.remove(evt.getPlayer().getUniqueId()).cancel(); BukkitTask task = tasks.remove(event.getPlayer().getUniqueId());
} if (task != null) {
task.cancel();
}
}
} }