Optimize lag with PlayerUpdateTask, completely safe

This commit is contained in:
Archer 2023-10-02 16:27:08 -04:00 committed by GitHub
parent d3426bc10a
commit 00069fac68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 7 deletions

View File

@ -1,10 +1,11 @@
package net.citizensnpcs.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@ -25,9 +26,13 @@ public class PlayerUpdateTask extends BukkitRunnable {
@Override
public void run() {
for (Entity entity : PLAYERS_PENDING_REMOVE) {
Iterator<Entity> removeIterator = PLAYERS_PENDING_REMOVE.iterator();
while (removeIterator.hasNext()) {
Entity entity = removeIterator.next();
PLAYERS.remove(entity.getUniqueId());
removeIterator.remove();
}
for (Entity entity : PLAYERS_PENDING_ADD) {
PlayerTick rm = PLAYERS.remove(entity.getUniqueId());
NPC next = ((NPCHolder) entity).getNPC();
@ -44,7 +49,6 @@ public class PlayerUpdateTask extends BukkitRunnable {
}
}
PLAYERS_PENDING_ADD.clear();
PLAYERS_PENDING_REMOVE.clear();
PLAYERS.values().forEach(Runnable::run);
}
@ -78,7 +82,7 @@ public class PlayerUpdateTask extends BukkitRunnable {
PLAYERS_PENDING_ADD.add(entity);
}
private static Map<UUID, PlayerTick> PLAYERS = new HashMap<>();
private static List<Entity> PLAYERS_PENDING_ADD = new ArrayList<>();
private static List<Entity> PLAYERS_PENDING_REMOVE = new ArrayList<>();
private static Map<UUID, PlayerTick> PLAYERS = new ConcurrentHashMap<>();
private static List<Entity> PLAYERS_PENDING_ADD = new CopyOnWriteArrayList<>();
private static List<Entity> PLAYERS_PENDING_REMOVE = new CopyOnWriteArrayList<>();
}