Fixed invisibility after cross-world teleportation
Dieser Commit ist enthalten in:
Ursprung
590b3874a8
Commit
dcabbda57c
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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.e = newEntity;
|
||||||
|
newEntity.inventory = entity.inventory;
|
||||||
|
newEntity.inventory.e = newEntity;
|
||||||
|
entity = newEntity;
|
||||||
|
} else {
|
||||||
entity.a.a(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) {
|
|
||||||
manager.d.a(entity);
|
|
||||||
entity.world.a(entity);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren