diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java index eb07d8e09e..e1589354d5 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -173,8 +173,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { iterator1.remove(); if (chunkcoordintpair != null && this.world.isLoaded(chunkcoordintpair.x << 4, 0, chunkcoordintpair.z << 4)) { - arraylist.add(this.world.getChunkAt(chunkcoordintpair.x, chunkcoordintpair.z)); - arraylist1.addAll(((WorldServer) this.world).getTileEntities(chunkcoordintpair.x * 16, 0, chunkcoordintpair.z * 16, chunkcoordintpair.x * 16 + 16, 256, chunkcoordintpair.z * 16 + 16)); + // CraftBukkit start - Get tile entities directly from the chunk instead of the world + Chunk chunk = this.world.getChunkAt(chunkcoordintpair.x, chunkcoordintpair.z); + arraylist.add(chunk); + arraylist1.addAll(chunk.tileEntities.values()); + // CraftBukkit end } } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java index 13f67da57c..6d8495fade 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -643,17 +643,24 @@ public class WorldServer extends World implements org.bukkit.BlockChangeDelegate public List getTileEntities(int i, int j, int k, int l, int i1, int j1) { ArrayList arraylist = new ArrayList(); - // CraftBukkit start - Use iterator - Iterator iterator = this.tileEntityList.iterator(); - while (iterator.hasNext()) { - TileEntity tileentity = (TileEntity) iterator.next(); - // CraftBukkit end + // CraftBukkit start - Get tile entities from chunks instead of world + for (int chunkX = (i >> 4); chunkX <= ((l - 1) >> 4); chunkX++) { + for (int chunkZ = (k >> 4); chunkZ <= ((j1 - 1) >> 4); chunkZ++) { + Chunk chunk = getChunkAt(chunkX, chunkZ); + if (chunk == null) { + continue; + } - if (tileentity.x >= i && tileentity.y >= j && tileentity.z >= k && tileentity.x < l && tileentity.y < i1 && tileentity.z < j1) { - arraylist.add(tileentity); + for (Object te : chunk.tileEntities.values()) { + TileEntity tileentity = (TileEntity) te; + if ((tileentity.x >= i) && (tileentity.y >= j) && (tileentity.z >= k) && (tileentity.x < l) && (tileentity.y < i1) && (tileentity.z < j1)) { + arraylist.add(tileentity); + } + } } } + // CraftBukkit end return arraylist; }