diff options
author | Tahg <tahgtahv@gmail.com> | 2011-10-05 11:31:23 -0400 |
---|---|---|
committer | Tahg <tahgtahv@gmail.com> | 2011-10-05 11:36:03 -0400 |
commit | 696349884b8f09430eba0c4a9847805e3e6c002c (patch) | |
tree | f81a3dcb58b13dec20ddcf383e65728c71114b6f /src/main/java/org/bukkit | |
parent | 8ab90b344c2a510fb7bc7b2bdddc2c5db995c761 (diff) | |
download | craftbukkit-696349884b8f09430eba0c4a9847805e3e6c002c.tar craftbukkit-696349884b8f09430eba0c4a9847805e3e6c002c.tar.gz craftbukkit-696349884b8f09430eba0c4a9847805e3e6c002c.tar.lz craftbukkit-696349884b8f09430eba0c4a9847805e3e6c002c.tar.xz craftbukkit-696349884b8f09430eba0c4a9847805e3e6c002c.zip |
don't store weak references for EmptyChunks or cache CraftBlocks
Diffstat (limited to 'src/main/java/org/bukkit')
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/CraftChunk.java | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java index 543fb0e6..3e9fcac9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java @@ -1,10 +1,9 @@ package org.bukkit.craftbukkit; -import com.google.common.collect.MapMaker; import java.lang.ref.WeakReference; -import java.util.concurrent.ConcurrentMap; import net.minecraft.server.ChunkPosition; +import net.minecraft.server.EmptyChunk; import net.minecraft.server.WorldServer; import org.bukkit.Chunk; @@ -19,13 +18,14 @@ import net.minecraft.server.WorldChunkManager; public class CraftChunk implements Chunk { private WeakReference<net.minecraft.server.Chunk> weakChunk; - private final ConcurrentMap<Integer, Block> cache = new MapMaker().softValues().makeMap(); private WorldServer worldServer; private int x; private int z; public CraftChunk(net.minecraft.server.Chunk chunk) { - this.weakChunk = new WeakReference<net.minecraft.server.Chunk>(chunk); + if(!(chunk instanceof EmptyChunk)) { + this.weakChunk = new WeakReference<net.minecraft.server.Chunk>(chunk); + } worldServer = (WorldServer) getHandle().world; x = getHandle().x; z = getHandle().z; @@ -39,7 +39,9 @@ public class CraftChunk implements Chunk { net.minecraft.server.Chunk c = weakChunk.get(); if (c == null) { c = worldServer.getChunkAt(x, z); - weakChunk = new WeakReference<net.minecraft.server.Chunk>(c); + if(!(c instanceof EmptyChunk)) { + weakChunk = new WeakReference<net.minecraft.server.Chunk>(c); + } } return c; } @@ -62,18 +64,7 @@ public class CraftChunk implements Chunk { } public Block getBlock(int x, int y, int z) { - int pos = (x & 0xF) << 11 | (z & 0xF) << 7 | (y & 0x7F); - Block block = this.cache.get(pos); - if (block == null) { - Block newBlock = new CraftBlock(this, (getX() << 4) | (x & 0xF), y & 0x7F, (getZ() << 4) | (z & 0xF)); - Block oldBlock = this.cache.put(pos, newBlock); - if (oldBlock == null) { - block = newBlock; - } else { - block = oldBlock; - } - } - return block; + return new CraftBlock(this, (getX() << 4) | (x & 0xF), y & 0x7F, (getZ() << 4) | (z & 0xF)); } public Entity[] getEntities() { |