Simplify skinupdatetracker

This commit is contained in:
fullwall 2023-02-11 10:47:31 +08:00
parent dddabd13b8
commit 142931a86d

View File

@ -23,6 +23,7 @@ import org.bukkit.scheduler.BukkitRunnable;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.Settings.Setting;
import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.CitizensAPI;
@ -170,6 +171,7 @@ public class SkinUpdateTracker {
*/ */
public void onNPCDespawn(NPC npc) { public void onNPCDespawn(NPC npc) {
Preconditions.checkNotNull(npc); Preconditions.checkNotNull(npc);
playerTrackers.remove(npc.getUniqueId());
SkinnableEntity skinnable = getSkinnable(npc); SkinnableEntity skinnable = getSkinnable(npc);
if (skinnable == null) if (skinnable == null)
return; return;
@ -268,16 +270,8 @@ public class SkinUpdateTracker {
* </p> * </p>
*/ */
public void reset() { public void reset() {
for (Player player : Bukkit.getOnlinePlayers()) { navigating.clear();
if (player.hasMetadata("NPC")) playerTrackers.clear();
continue;
PlayerTracker tracker = playerTrackers.get(player.getUniqueId());
if (tracker == null)
continue;
tracker.hardReset(player);
}
} }
// hard reset players near a skinnable NPC // hard reset players near a skinnable NPC
@ -342,7 +336,9 @@ public class SkinUpdateTracker {
return; return;
List<SkinnableEntity> nearby = new ArrayList<SkinnableEntity>(10); List<SkinnableEntity> nearby = new ArrayList<SkinnableEntity>(10);
Set<UUID> seen = Sets.newHashSet();
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
seen.add(player.getUniqueId());
if (player.hasMetadata("NPC")) if (player.hasMetadata("NPC"))
continue; continue;
@ -356,6 +352,7 @@ public class SkinUpdateTracker {
nearby.clear(); nearby.clear();
} }
playerTrackers.keySet().removeIf(uuid -> !seen.contains(uuid));
} }
} }