mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-09-28 15:17:43 +02:00
Pre-filter chunk unload entities
This commit is contained in:
parent
4bbe797120
commit
a360810e8d
@ -56,6 +56,7 @@ import com.google.common.base.Predicates;
|
|||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.ListMultimap;
|
import com.google.common.collect.ListMultimap;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
|
|
||||||
@ -159,15 +160,21 @@ public class EventListen implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onChunkUnload(final ChunkUnloadEvent event) {
|
public void onChunkUnload(final ChunkUnloadEvent event) {
|
||||||
|
final List<NPC> toDespawn = Lists.newArrayList();
|
||||||
|
for (Entity entity : event.getChunk().getEntities()) {
|
||||||
|
NPC npc = CitizensAPI.getNPCRegistry().getNPC(entity);
|
||||||
|
if (npc == null || !npc.isSpawned())
|
||||||
|
continue;
|
||||||
|
toDespawn.add(npc);
|
||||||
|
}
|
||||||
|
if (toDespawn.isEmpty())
|
||||||
|
return;
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
ChunkCoord coord = new ChunkCoord(event.getChunk());
|
ChunkCoord coord = new ChunkCoord(event.getChunk());
|
||||||
boolean loadChunk = false;
|
boolean loadChunk = false;
|
||||||
for (Entity entity : event.getChunk().getEntities()) {
|
for (NPC npc : toDespawn) {
|
||||||
NPC npc = CitizensAPI.getNPCRegistry().getNPC(entity);
|
|
||||||
if (npc == null || !npc.isSpawned())
|
|
||||||
continue;
|
|
||||||
if (!npc.despawn(DespawnReason.CHUNK_UNLOAD)) {
|
if (!npc.despawn(DespawnReason.CHUNK_UNLOAD)) {
|
||||||
if (!(event instanceof Cancellable)) {
|
if (!(event instanceof Cancellable)) {
|
||||||
loadChunk = true;
|
loadChunk = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user