summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/PlayerInstance.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft/server/PlayerInstance.java')
-rw-r--r--src/main/java/net/minecraft/server/PlayerInstance.java25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/main/java/net/minecraft/server/PlayerInstance.java b/src/main/java/net/minecraft/server/PlayerInstance.java
index ba0797bf..a4d90475 100644
--- a/src/main/java/net/minecraft/server/PlayerInstance.java
+++ b/src/main/java/net/minecraft/server/PlayerInstance.java
@@ -10,6 +10,7 @@ class PlayerInstance {
private short[] dirtyBlocks;
private int dirtyCount;
private int f;
+ private boolean loaded = false; // CraftBukkit
final PlayerManager playerManager;
@@ -19,15 +20,33 @@ class PlayerInstance {
this.dirtyBlocks = new short[64];
this.dirtyCount = 0;
this.location = new ChunkCoordIntPair(i, j);
- playermanager.a().chunkProviderServer.getChunkAt(i, j);
+ // CraftBukkit start
+ playermanager.a().chunkProviderServer.getChunkAt(i, j, new Runnable() {
+ public void run() {
+ PlayerInstance.this.loaded = true;
+ }
+ });
+ // CraftBukkit end
}
- public void a(EntityPlayer entityplayer) {
+ public void a(final EntityPlayer entityplayer) { // CraftBukkit - added final to argument
if (this.b.contains(entityplayer)) {
throw new IllegalStateException("Failed to add player. " + entityplayer + " already is in chunk " + this.location.x + ", " + this.location.z);
} else {
this.b.add(entityplayer);
- entityplayer.chunkCoordIntPairQueue.add(this.location);
+
+ // CraftBukkit start
+ if (this.loaded) {
+ entityplayer.chunkCoordIntPairQueue.add(this.location);
+ } else {
+ // Abuse getChunkAt to add another callback
+ this.playerManager.a().chunkProviderServer.getChunkAt(this.location.x, this.location.z, new Runnable() {
+ public void run() {
+ entityplayer.chunkCoordIntPairQueue.add(PlayerInstance.this.location);
+ }
+ });
+ }
+ // CraftBukkit end
}
}