[Bleeding] Implemented Vanish API.

Remove players that cannot see a player from their EntityTrackerEntry and only
send user list updates to players who can see the player they reference.
This commit is contained in:
Travis Watkins
2012-01-31 13:54:15 -06:00
committed by EvilSeph
parent 028cbb8fe9
commit 37c8868532
4 changed files with 82 additions and 25 deletions

View File

@@ -111,10 +111,8 @@ public class ServerConfigurationManager {
}
public void c(EntityPlayer entityplayer) {
// CraftBukkit start
cserver.detectListNameConflict(entityplayer);
this.sendAll(new Packet201PlayerInfo(entityplayer.listName, true, 1000));
// CraftBukkit end
cserver.detectListNameConflict(entityplayer); // CraftBukkit
//this.sendAll(new Packet201PlayerInfo(entityplayer.name, true, 1000)); // CraftBukkit - replaced with loop below
this.players.add(entityplayer);
WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension);
@@ -142,11 +140,24 @@ public class ServerConfigurationManager {
worldserver.addEntity(entityplayer);
this.getPlayerManager(entityplayer.dimension).addPlayer(entityplayer);
// CraftBukkit start - sendAll above replaced with this loop
Packet201PlayerInfo packet = new Packet201PlayerInfo(entityplayer.listName, true, 1000);
for (int i = 0; i < this.players.size(); ++i) {
EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i);
if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) {
entityplayer1.netServerHandler.sendPacket(packet);
}
}
// CraftBukkit end
for (int i = 0; i < this.players.size(); ++i) {
EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i);
// CraftBukkit start - .name -> .listName
entityplayer.netServerHandler.sendPacket(new Packet201PlayerInfo(entityplayer1.listName, true, entityplayer1.ping));
if (entityplayer.getBukkitEntity().canSee(entityplayer1.getBukkitEntity())) {
entityplayer.netServerHandler.sendPacket(new Packet201PlayerInfo(entityplayer1.listName, true, entityplayer1.ping));
}
// CraftBukkit end
}
}
@@ -169,8 +180,15 @@ public class ServerConfigurationManager {
this.server.getWorldServer(entityplayer.dimension).kill(entityplayer);
this.players.remove(entityplayer);
this.getPlayerManager(entityplayer.dimension).removePlayer(entityplayer);
// CraftBukkit start - .name -> .listName
this.sendAll(new Packet201PlayerInfo(entityplayer.listName, false, 9999));
// CraftBukkit start - .name -> .listName, replace sendAll with loop
Packet201PlayerInfo packet = new Packet201PlayerInfo(entityplayer.listName, false, 9999);
for (int i = 0; i < this.players.size(); ++i) {
EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i);
if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) {
entityplayer1.netServerHandler.sendPacket(packet);
}
}
// CraftBukkit end
return playerQuitEvent.getQuitMessage(); // CraftBukkit