Directly access entity list

This replaces the very slow chunk dance that was being used.
This commit is contained in:
Kenzie Togami 2015-01-13 22:32:02 -08:00 committed by wizjany
parent 98a7257c47
commit 372a520382
2 changed files with 8 additions and 22 deletions

View File

@ -87,17 +87,11 @@ public class BukkitWorld extends LocalWorld {
public List<com.sk89q.worldedit.entity.Entity> getEntities(Region region) { public List<com.sk89q.worldedit.entity.Entity> getEntities(Region region) {
World world = getWorld(); World world = getWorld();
List<Entity> ents = world.getEntities();
List<com.sk89q.worldedit.entity.Entity> entities = new ArrayList<com.sk89q.worldedit.entity.Entity>(); List<com.sk89q.worldedit.entity.Entity> entities = new ArrayList<com.sk89q.worldedit.entity.Entity>();
for (Vector2D pt : region.getChunks()) { for (Entity ent : ents) {
if (!world.isChunkLoaded(pt.getBlockX(), pt.getBlockZ())) { if (region.contains(BukkitUtil.toVector(ent.getLocation()))) {
continue; entities.add(BukkitAdapter.adapt(ent));
}
final Entity[] ents = world.getChunkAt(pt.getBlockX(), pt.getBlockZ()).getEntities();
for (Entity ent : ents) {
if (region.contains(BukkitUtil.toVector(ent.getLocation()))) {
entities.add(BukkitAdapter.adapt(ent));
}
} }
} }
return entities; return entities;

View File

@ -373,18 +373,10 @@ public class ForgeWorld extends AbstractWorld {
public List<? extends Entity> getEntities(Region region) { public List<? extends Entity> getEntities(Region region) {
List<Entity> entities = new ArrayList<Entity>(); List<Entity> entities = new ArrayList<Entity>();
World world = getWorld(); World world = getWorld();
for (Vector2D pt : region.getChunks()) { List<net.minecraft.entity.Entity> ents = world.loadedEntityList;
if (!world.getChunkProvider().chunkExists(pt.getBlockX(), pt.getBlockZ())) { for (net.minecraft.entity.Entity entity : ents) {
continue; if (region.contains(new Vector(entity.posX, entity.posY, entity.posZ))) {
} entities.add(new ForgeEntity(entity));
Chunk chunk = world.getChunkProvider().provideChunk(pt.getBlockX(), pt.getBlockZ());
for (List<net.minecraft.entity.Entity> entitySubList : chunk.entityLists) {
for (net.minecraft.entity.Entity entity : entitySubList) {
if (region.contains(new Vector(entity.posX, entity.posY, entity.posZ))) {
entities.add(new ForgeEntity(entity));
}
}
} }
} }
return entities; return entities;