summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEvilSeph <evilseph@unaligned.org>2011-05-04 22:16:26 -0400
committerEvilSeph <evilseph@unaligned.org>2011-05-04 22:16:26 -0400
commit54e2254904153ad5fbc071468560c2305e9128a8 (patch)
tree0aab6b244c629f869f647926f3ac69c3cded2166 /src
parentef7e3689b35045b4bfeb77071e6ad32bdde5e448 (diff)
downloadcraftbukkit-54e2254904153ad5fbc071468560c2305e9128a8.tar
craftbukkit-54e2254904153ad5fbc071468560c2305e9128a8.tar.gz
craftbukkit-54e2254904153ad5fbc071468560c2305e9128a8.tar.lz
craftbukkit-54e2254904153ad5fbc071468560c2305e9128a8.tar.xz
craftbukkit-54e2254904153ad5fbc071468560c2305e9128a8.zip
Made teleporting between worlds 'smoother'. Thanks Raphfrk!
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/minecraft/server/PlayerInstance.java9
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java11
2 files changed, 17 insertions, 3 deletions
diff --git a/src/main/java/net/minecraft/server/PlayerInstance.java b/src/main/java/net/minecraft/server/PlayerInstance.java
index f867aa86..eb0edeba 100644
--- a/src/main/java/net/minecraft/server/PlayerInstance.java
+++ b/src/main/java/net/minecraft/server/PlayerInstance.java
@@ -37,8 +37,11 @@ class PlayerInstance {
if (this.b.contains(entityplayer)) {
throw new IllegalStateException("Failed to add player. " + entityplayer + " already is in chunk " + this.chunkX + ", " + this.chunkZ);
} else {
- entityplayer.g.add(this.e);
- entityplayer.netServerHandler.sendPacket(new Packet50PreChunk(this.e.x, this.e.z, true));
+ // CraftBukkit start
+ if (entityplayer.g.add(this.e)) {
+ entityplayer.netServerHandler.sendPacket(new Packet50PreChunk(this.e.x, this.e.z, true));
+ }
+ // CraftBukkit end
this.b.add(entityplayer);
entityplayer.f.add(this.e);
}
@@ -63,7 +66,7 @@ class PlayerInstance {
}
entityplayer.f.remove(this.e);
- if (entityplayer.g.contains(this.e)) {
+ if (entityplayer.g.remove(this.e)) { // CraftBukkit - contains -> remove
entityplayer.netServerHandler.sendPacket(new Packet50PreChunk(this.chunkX, this.chunkZ, false));
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 9d1c9f5a..55d80dde 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -12,6 +12,7 @@ import net.minecraft.server.Packet54PlayNoteBlock;
import net.minecraft.server.Packet6SpawnPosition;
import net.minecraft.server.ServerConfigurationManager;
import net.minecraft.server.WorldServer;
+import net.minecraft.server.ChunkCoordIntPair;
import org.bukkit.Achievement;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -194,6 +195,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (teleportSuccess) {
manager.server.tracker.trackPlayer(entity);
manager.server.tracker.untrackEntity(entity);
+ int cx = (int) location.getBlockX() >> 4;
+ int cz = (int) location.getBlockZ() >> 4;
+ for (int x = -10 ; x <= 10 ; x++ ) {
+ for (int z = -10 ; z <= 10 ; z++ ) {
+ ChunkCoordIntPair chunkPosition = new ChunkCoordIntPair(cx + x, cz + z);
+ if (entity.g.remove(chunkPosition)) {
+ newEntity.g.add(chunkPosition);
+ }
+ }
+ }
oldWorld.manager.removePlayer(entity);
manager.players.remove(entity);
oldWorld.removeEntity(entity);