From a807ee1f38abfc427b10cb4df2131f2b1d1fc198 Mon Sep 17 00:00:00 2001 From: fullwall Date: Wed, 2 Mar 2016 16:51:10 +0800 Subject: [PATCH] Fix non-playerlist NPCs --- .../citizensnpcs/util/PlayerUpdateTask.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/citizensnpcs/util/PlayerUpdateTask.java b/src/main/java/net/citizensnpcs/util/PlayerUpdateTask.java index 22477857d..df97fc679 100644 --- a/src/main/java/net/citizensnpcs/util/PlayerUpdateTask.java +++ b/src/main/java/net/citizensnpcs/util/PlayerUpdateTask.java @@ -1,8 +1,10 @@ package net.citizensnpcs.util; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import org.bukkit.scheduler.BukkitRunnable; @@ -16,10 +18,16 @@ public class PlayerUpdateTask extends BukkitRunnable { public void cancel() { super.cancel(); TICKERS.clear(); + TICKERS_PENDING_ADD.clear(); + TICKERS_PENDING_REMOVE.clear(); } @Override public void run() { + TICKERS.removeAll(TICKERS_PENDING_REMOVE); + TICKERS.addAll(TICKERS_PENDING_ADD); + TICKERS_PENDING_ADD.clear(); + TICKERS_PENDING_REMOVE.clear(); Iterator itr = TICKERS.iterator(); while (itr.hasNext()) { Entity entity = NMS.getHandle(itr.next()); @@ -49,12 +57,14 @@ public class PlayerUpdateTask extends BukkitRunnable { } public static void addOrRemove(org.bukkit.entity.Entity entity, boolean remove) { - if (remove) { - TICKERS.remove(entity); + if (!remove) { + TICKERS_PENDING_REMOVE.add(entity); } else { - TICKERS.add(entity); + TICKERS_PENDING_ADD.add(entity); } } - private static List TICKERS = new ArrayList(); + private static Set TICKERS = new HashSet(); + private static List TICKERS_PENDING_ADD = new ArrayList(); + private static List TICKERS_PENDING_REMOVE = new ArrayList(); }