Fix non-playerlist NPCs

This commit is contained in:
fullwall 2016-03-02 16:51:10 +08:00
parent 8e85dde59b
commit a807ee1f38

View File

@ -1,8 +1,10 @@
package net.citizensnpcs.util; package net.citizensnpcs.util;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Set;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
@ -16,10 +18,16 @@ public class PlayerUpdateTask extends BukkitRunnable {
public void cancel() { public void cancel() {
super.cancel(); super.cancel();
TICKERS.clear(); TICKERS.clear();
TICKERS_PENDING_ADD.clear();
TICKERS_PENDING_REMOVE.clear();
} }
@Override @Override
public void run() { public void run() {
TICKERS.removeAll(TICKERS_PENDING_REMOVE);
TICKERS.addAll(TICKERS_PENDING_ADD);
TICKERS_PENDING_ADD.clear();
TICKERS_PENDING_REMOVE.clear();
Iterator<org.bukkit.entity.Entity> itr = TICKERS.iterator(); Iterator<org.bukkit.entity.Entity> itr = TICKERS.iterator();
while (itr.hasNext()) { while (itr.hasNext()) {
Entity entity = NMS.getHandle(itr.next()); 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) { public static void addOrRemove(org.bukkit.entity.Entity entity, boolean remove) {
if (remove) { if (!remove) {
TICKERS.remove(entity); TICKERS_PENDING_REMOVE.add(entity);
} else { } else {
TICKERS.add(entity); TICKERS_PENDING_ADD.add(entity);
} }
} }
private static List<org.bukkit.entity.Entity> TICKERS = new ArrayList<org.bukkit.entity.Entity>(); private static Set<org.bukkit.entity.Entity> TICKERS = new HashSet<org.bukkit.entity.Entity>();
private static List<org.bukkit.entity.Entity> TICKERS_PENDING_ADD = new ArrayList<org.bukkit.entity.Entity>();
private static List<org.bukkit.entity.Entity> TICKERS_PENDING_REMOVE = new ArrayList<org.bukkit.entity.Entity>();
} }