diff options
author | Travis Watkins <amaranth@ubuntu.com> | 2012-04-23 09:47:05 -0500 |
---|---|---|
committer | EvilSeph <evilseph@gmail.com> | 2012-04-23 21:52:08 -0400 |
commit | b7376e08651e32addce2ba986d02f6e53e3ecdf2 (patch) | |
tree | 96aebe992dad04b205e7f2781bb387d441734f14 /src/main/java/net/minecraft/server/Chunk.java | |
parent | e8459c1ff6a8e58f6d7578a99ea164deadc30884 (diff) | |
download | craftbukkit-b7376e08651e32addce2ba986d02f6e53e3ecdf2.tar craftbukkit-b7376e08651e32addce2ba986d02f6e53e3ecdf2.tar.gz craftbukkit-b7376e08651e32addce2ba986d02f6e53e3ecdf2.tar.lz craftbukkit-b7376e08651e32addce2ba986d02f6e53e3ecdf2.tar.xz craftbukkit-b7376e08651e32addce2ba986d02f6e53e3ecdf2.zip |
Avoid doing unnecessary range checks when we're looping from start to end.
Make EntityLiving call AI logic every tick again.
Rework PathfinderGoalSelector logic.
Adds UnsafeList for use in places where we use ArrayList and know we won't
get index out of range errors. Added usage to World's tickEntities, Chunk's
entitySlices to speed up searching for entities, and to PathfinderGoalSelector
to speed up dealing with AI goals.
Reworked logic in PathfinderGoalSelector with help from fullwall. This code
no longer uses an extra ArrayList for setting up goals and only updates which
goals should be run every other time it is called.
Removed only calling PathfinderGoalSelector every other tick from EntityLiving
as we now only setup new goals every other tick. This ensures existing goals
run every tick to properly update mob movement.
Diffstat (limited to 'src/main/java/net/minecraft/server/Chunk.java')
-rw-r--r-- | src/main/java/net/minecraft/server/Chunk.java | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java index 814886ef..9aa52174 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; import java.util.Random; import org.bukkit.Bukkit; // CraftBukkit +import org.bukkit.craftbukkit.util.UnsafeList; // CraftBukkit public class Chunk { @@ -53,7 +54,7 @@ public class Chunk { this.heightMap = new int[256]; for (int k = 0; k < this.entitySlices.length; ++k) { - this.entitySlices[k] = new ArrayList(); + this.entitySlices[k] = new UnsafeList(); // CraftBukkit - use UnsafeList } Arrays.fill(this.b, -999); @@ -697,10 +698,10 @@ public class Chunk { } for (int k = i; k <= j; ++k) { - List list1 = this.entitySlices[k]; + UnsafeList list1 = (UnsafeList) this.entitySlices[k]; // CraftBukkit - use UnsafeList for (int l = 0; l < list1.size(); ++l) { - Entity entity1 = (Entity) list1.get(l); + Entity entity1 = (Entity) list1.unsafeGet(l); // CraftBukkit - use unsafeGet if (entity1 != entity && entity1.boundingBox.a(axisalignedbb)) { list.add(entity1); @@ -736,10 +737,10 @@ public class Chunk { } for (int k = i; k <= j; ++k) { - List list1 = this.entitySlices[k]; + UnsafeList list1 = (UnsafeList) this.entitySlices[k]; // CraftBukkit - use UnsafeList for (int l = 0; l < list1.size(); ++l) { - Entity entity = (Entity) list1.get(l); + Entity entity = (Entity) list1.unsafeGet(l); // CraftBukkit - use unsafeGet if (oclass.isAssignableFrom(entity.getClass()) && entity.boundingBox.a(axisalignedbb)) { list.add(entity); |