Fixed invisibility after cross-world teleportation

Dieser Commit ist enthalten in:
Dinnerbone 2011-02-06 14:03:28 +00:00
Ursprung 590b3874a8
Commit dcabbda57c
3 geänderte Dateien mit 24 neuen und 15 gelöschten Zeilen

Datei anzeigen

@ -5,7 +5,7 @@ public class InventoryPlayer implements IInventory {
public ItemStack[] a = new ItemStack[36]; public ItemStack[] a = new ItemStack[36];
public ItemStack[] b = new ItemStack[4]; public ItemStack[] b = new ItemStack[4];
public int c = 0; public int c = 0;
private EntityHuman e; public EntityHuman e; // Craftbukkit - public
private ItemStack f; private ItemStack f;
public boolean d = false; public boolean d = false;

Datei anzeigen

@ -33,7 +33,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
public NetworkManager b; public NetworkManager b;
public boolean c = false; public boolean c = false;
private MinecraftServer d; private MinecraftServer d;
private EntityPlayer e; public EntityPlayer e; // Craftbukkit - public
private int f = 0; private int f = 0;
private double g; private double g;
private double h; private double h;

Datei anzeigen

@ -116,28 +116,37 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override @Override
public void teleportTo(Location location) { public void teleportTo(Location location) {
boolean worldChange = location.getWorld() != getWorld(); WorldServer oldWorld = ((CraftWorld)getWorld()).getHandle();
WorldServer newWorld = ((CraftWorld)location.getWorld()).getHandle();
ServerConfigurationManager manager = server.getHandle(); ServerConfigurationManager manager = server.getHandle();
if (worldChange) { if (oldWorld != newWorld) {
manager.c.k.a(entity); manager.c.k.a(entity);
manager.c.k.b(entity); manager.c.k.b(entity);
manager.d.b(entity); manager.d.b(entity);
entity.world.e(entity); manager.b.remove(entity);
oldWorld.e(entity);
entity.world = ((CraftWorld)location.getWorld()).getHandle(); EntityPlayer newEntity = new EntityPlayer(manager.c, newWorld, entity.name, new ItemInWorldManager(newWorld));
entity.c = new ItemInWorldManager(((CraftWorld)location.getWorld()).getHandle()); newEntity.id = entity.id;
entity.c.a = entity; newEntity.a = entity.a;
newEntity.health = entity.health;
newEntity.fireTicks = entity.fireTicks;
newWorld.A.d((int) location.getBlockX() >> 4, (int) location.getBlockZ() >> 4);
((WorldServer)entity.world).A.d((int) entity.locX >> 4, (int) entity.locZ >> 4); newEntity.a.a(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
} manager.d.a(newEntity);
newWorld.a(newEntity);
manager.b.add(newEntity);
newEntity.l();
entity.a.a(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); entity.a.e = newEntity;
newEntity.inventory = entity.inventory;
if (worldChange) { newEntity.inventory.e = newEntity;
manager.d.a(entity); entity = newEntity;
entity.world.a(entity); } else {
entity.a.a(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
} }
} }
} }