SPIGOT-4752: Fixed inconsistency between isChunkLoaded and chunk load/unload events

By: blablubbabc <lukas@wirsindwir.de>
This commit is contained in:
CraftBukkit/Spigot
2019-05-16 01:11:20 +02:00
parent 0e59838abf
commit e2b8949bf3
8 changed files with 209 additions and 143 deletions

View File

@@ -93,6 +93,9 @@ public class CraftChunk implements Chunk {
@Override
public Entity[] getEntities() {
if (!isLoaded()) {
getWorld().getChunkAt(x, z); // Transient load for this tick
}
int count = 0, index = 0;
net.minecraft.server.Chunk chunk = getHandle();
@@ -118,6 +121,9 @@ public class CraftChunk implements Chunk {
@Override
public BlockState[] getTileEntities() {
if (!isLoaded()) {
getWorld().getChunkAt(x, z); // Transient load for this tick
}
int index = 0;
net.minecraft.server.Chunk chunk = getHandle();

View File

@@ -330,7 +330,7 @@ public class CraftWorld implements World {
@Override
public boolean isChunkLoaded(int x, int z) {
net.minecraft.server.Chunk chunk = world.getChunkProvider().getChunkAt(x, z, false);
return chunk != null && chunk.loaded;
return chunk != null;
}
@Override
@@ -345,8 +345,7 @@ public class CraftWorld implements World {
@Override
public Chunk[] getLoadedChunks() {
Long2ObjectLinkedOpenHashMap<PlayerChunk> chunks = world.getChunkProvider().playerChunkMap.visibleChunks;
return chunks.values().stream().map(PlayerChunk::getChunk).filter(Objects::nonNull).filter((chunk) -> chunk.loaded).map(net.minecraft.server.Chunk::getBukkitChunk).toArray(Chunk[]::new);
return chunks.values().stream().map(PlayerChunk::getFullChunk).filter(Objects::nonNull).map(net.minecraft.server.Chunk::getBukkitChunk).toArray(Chunk[]::new);
}
@Override

View File

@@ -530,7 +530,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@Override
public boolean isValid() {
return entity.isAlive() && entity.valid;
return entity.isAlive() && entity.valid && entity.isChunkLoaded();
}
@Override