From 590b3874a85404c54fe2f46e76e72e8ff09fcdf6 Mon Sep 17 00:00:00 2001 From: Dinnerbone Date: Sun, 6 Feb 2011 02:04:15 +0000 Subject: [PATCH] Fixed various multiworld teleporting issues --- .../server/ServerConfigurationManager.java | 2 +- .../craftbukkit/entity/CraftPlayer.java | 23 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minecraft/server/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/ServerConfigurationManager.java index a9e3a90639..1532f97cf2 100644 --- a/src/main/java/net/minecraft/server/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/ServerConfigurationManager.java @@ -27,7 +27,7 @@ public class ServerConfigurationManager { public static Logger a = Logger.getLogger("Minecraft"); public List b = new ArrayList(); - private MinecraftServer c; + public MinecraftServer c; // Craftbukkit - public public PlayerManager d; // Craftbukkit - public private int e; private Set f = new HashSet(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 3b835a451a..f59b6b70ab 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -8,6 +8,8 @@ import net.minecraft.server.ItemInWorldManager; import net.minecraft.server.Packet; import net.minecraft.server.Packet3Chat; import net.minecraft.server.Packet6SpawnPosition; +import net.minecraft.server.Packet9Respawn; +import net.minecraft.server.ServerConfigurationManager; import net.minecraft.server.WorldServer; import org.bukkit.Location; import org.bukkit.craftbukkit.CraftServer; @@ -115,18 +117,27 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void teleportTo(Location location) { boolean worldChange = location.getWorld() != getWorld(); + ServerConfigurationManager manager = server.getHandle(); + if (worldChange) { - // Unload player from current chunks - server.getServer().f.d.b(entity); + manager.c.k.a(entity); + manager.c.k.b(entity); + manager.d.b(entity); + entity.world.e(entity); + + entity.world = ((CraftWorld)location.getWorld()).getHandle(); entity.c = new ItemInWorldManager(((CraftWorld)location.getWorld()).getHandle()); entity.c.a = entity; + + ((WorldServer)entity.world).A.d((int) entity.locX >> 4, (int) entity.locZ >> 4); } - entity.world = ((CraftWorld)location.getWorld()).getHandle(); - entity.b(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); + + entity.a.a(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); + if (worldChange) { - // Forceload the chunks around player - server.getServer().f.d.a(entity); + manager.d.a(entity); + entity.world.a(entity); } } }