summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTahg <tahgtahv@gmail.com>2011-10-05 11:31:23 -0400
committerTahg <tahgtahv@gmail.com>2011-10-05 11:36:03 -0400
commit696349884b8f09430eba0c4a9847805e3e6c002c (patch)
treef81a3dcb58b13dec20ddcf383e65728c71114b6f /src
parent8ab90b344c2a510fb7bc7b2bdddc2c5db995c761 (diff)
downloadcraftbukkit-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')
-rw-r--r--src/main/java/net/minecraft/server/Chunk.java10
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftChunk.java25
2 files changed, 14 insertions, 21 deletions
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 939fa69f..82955f65 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -56,10 +56,12 @@ public class Chunk {
Arrays.fill(this.c, -999);
// CraftBukkit start
- org.bukkit.craftbukkit.CraftWorld cworld = this.world.getWorld();
- this.bukkitChunk = (cworld == null) ? null : cworld.popPreservedChunk(i, j);
- if (this.bukkitChunk == null) {
- this.bukkitChunk = new org.bukkit.craftbukkit.CraftChunk(this);
+ if (!(this instanceof EmptyChunk)) {
+ org.bukkit.craftbukkit.CraftWorld cworld = this.world.getWorld();
+ this.bukkitChunk = (cworld == null) ? null : cworld.popPreservedChunk(i, j);
+ if (this.bukkitChunk == null) {
+ this.bukkitChunk = new org.bukkit.craftbukkit.CraftChunk(this);
+ }
}
}
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() {