SPIGOT-3207: Fix hiding players in a BukkitRunnable after joining
This happened because "joining" wasn't cleared until the player was ticked. Runnables (presumably) ran _after_ the player list packet was sent, but before the player was ticked; thus, the player list packet was sent, but not cleared. The fix is to replace joining with hasSentListPacket, which is set immediately before sending any player list packets (thus, if hidePlayer is called after, it sees that the list packet has been sent and sends a new one to reset it). With this fix, the player is added to the list and then removed shortly afterwards. The reason why running /hideall in the example wouldn't fix the invisibility is because the server already thinks the player's been removed from the list (as they're hidden), and thus doesn't want to send another hide packet. This is correct behavior assuming that they get hidden correctly the first time, which they now do. By: Pokechu22 <Pokechu022@gmail.com>
This commit is contained in:
parent
0f12ccbdba
commit
c5b0a788e9
3 changed files with 51 additions and 49 deletions
|
@ -167,7 +167,7 @@
|
|||
NBTTagCompound nbttagcompound1;
|
||||
|
||||
if (entityplayer.getName().equals(this.server.Q()) && nbttagcompound != null) {
|
||||
@@ -252,28 +300,72 @@
|
||||
@@ -252,28 +300,73 @@
|
||||
|
||||
}
|
||||
|
||||
|
@ -211,6 +211,7 @@
|
|||
+
|
||||
+ entityplayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, new EntityPlayer[] { entityplayer1}));
|
||||
}
|
||||
+ entityplayer.sentListPacket = true;
|
||||
+ // CraftBukkit end
|
||||
|
||||
- worldserver.addEntity(entityplayer);
|
||||
|
@ -246,7 +247,7 @@
|
|||
this.savePlayerFile(entityplayer);
|
||||
if (entityplayer.isPassenger()) {
|
||||
Entity entity = entityplayer.getVehicle();
|
||||
@@ -305,13 +397,61 @@
|
||||
@@ -305,13 +398,61 @@
|
||||
this.o.remove(uuid);
|
||||
}
|
||||
|
||||
|
@ -311,7 +312,7 @@
|
|||
GameProfileBanEntry gameprofilebanentry = (GameProfileBanEntry) this.k.get(gameprofile);
|
||||
|
||||
s = "You are banned from this server!\nReason: " + gameprofilebanentry.getReason();
|
||||
@@ -319,10 +459,12 @@
|
||||
@@ -319,10 +460,12 @@
|
||||
s = s + "\nYour ban will be removed on " + PlayerList.g.format(gameprofilebanentry.getExpires());
|
||||
}
|
||||
|
||||
|
@ -327,7 +328,7 @@
|
|||
IpBanEntry ipbanentry = this.l.get(socketaddress);
|
||||
|
||||
s = "Your IP address is banned from this server!\nReason: " + ipbanentry.getReason();
|
||||
@@ -330,13 +472,25 @@
|
||||
@@ -330,13 +473,25 @@
|
||||
s = s + "\nYour ban will be removed on " + PlayerList.g.format(ipbanentry.getExpires());
|
||||
}
|
||||
|
||||
|
@ -356,7 +357,7 @@
|
|||
UUID uuid = EntityHuman.a(gameprofile);
|
||||
ArrayList arraylist = Lists.newArrayList();
|
||||
|
||||
@@ -371,17 +525,27 @@
|
||||
@@ -371,17 +526,27 @@
|
||||
}
|
||||
|
||||
return new EntityPlayer(this.server, this.server.getWorldServer(0), gameprofile, (PlayerInteractManager) object);
|
||||
|
@ -385,7 +386,7 @@
|
|||
entityplayer.dimension = i;
|
||||
Object object;
|
||||
|
||||
@@ -392,6 +556,11 @@
|
||||
@@ -392,6 +557,11 @@
|
||||
}
|
||||
|
||||
EntityPlayer entityplayer1 = new EntityPlayer(this.server, this.server.getWorldServer(entityplayer.dimension), entityplayer.getProfile(), (PlayerInteractManager) object);
|
||||
|
@ -397,7 +398,7 @@
|
|||
|
||||
entityplayer1.playerConnection = entityplayer.playerConnection;
|
||||
entityplayer1.copyTo(entityplayer, flag);
|
||||
@@ -406,43 +575,157 @@
|
||||
@@ -406,43 +576,157 @@
|
||||
entityplayer1.a(s);
|
||||
}
|
||||
|
||||
|
@ -572,7 +573,7 @@
|
|||
public void f(EntityPlayer entityplayer) {
|
||||
GameProfile gameprofile = entityplayer.getProfile();
|
||||
int i = this.isOp(gameprofile) ? this.operators.a(gameprofile) : 0;
|
||||
@@ -481,12 +764,111 @@
|
||||
@@ -481,12 +765,111 @@
|
||||
}
|
||||
|
||||
public void changeWorld(Entity entity, int i, WorldServer worldserver, WorldServer worldserver1) {
|
||||
|
@ -684,7 +685,7 @@
|
|||
if (entity.dimension == -1) {
|
||||
d0 = MathHelper.a(d0 / 8.0D, worldserver1.getWorldBorder().b() + 16.0D, worldserver1.getWorldBorder().d() - 16.0D);
|
||||
d1 = MathHelper.a(d1 / 8.0D, worldserver1.getWorldBorder().c() + 16.0D, worldserver1.getWorldBorder().e() - 16.0D);
|
||||
@@ -505,6 +887,8 @@
|
||||
@@ -505,6 +888,8 @@
|
||||
BlockPosition blockposition;
|
||||
|
||||
if (i == 1) {
|
||||
|
@ -693,7 +694,7 @@
|
|||
blockposition = worldserver1.getSpawn();
|
||||
} else {
|
||||
blockposition = worldserver1.getDimensionSpawn();
|
||||
@@ -518,16 +902,27 @@
|
||||
@@ -518,16 +903,27 @@
|
||||
worldserver.entityJoinedWorld(entity, false);
|
||||
}
|
||||
}
|
||||
|
@ -724,7 +725,7 @@
|
|||
worldserver1.entityJoinedWorld(entity, false);
|
||||
}
|
||||
|
||||
@@ -535,11 +930,23 @@
|
||||
@@ -535,11 +931,23 @@
|
||||
}
|
||||
|
||||
entity.spawnIn(worldserver1);
|
||||
|
@ -749,7 +750,7 @@
|
|||
this.u = 0;
|
||||
}
|
||||
|
||||
@@ -552,6 +959,25 @@
|
||||
@@ -552,6 +960,25 @@
|
||||
|
||||
}
|
||||
|
||||
|
@ -775,7 +776,7 @@
|
|||
public void a(Packet<?> packet, int i) {
|
||||
for (int j = 0; j < this.players.size(); ++j) {
|
||||
EntityPlayer entityplayer = (EntityPlayer) this.players.get(j);
|
||||
@@ -650,11 +1076,23 @@
|
||||
@@ -650,11 +1077,23 @@
|
||||
|
||||
this.operators.add(new OpListEntry(gameprofile, this.server.q(), this.operators.b(gameprofile)));
|
||||
this.b(this.a(gameprofile.getId()), i);
|
||||
|
@ -799,7 +800,7 @@
|
|||
}
|
||||
|
||||
private void b(EntityPlayer entityplayer, int i) {
|
||||
@@ -679,7 +1117,7 @@
|
||||
@@ -679,7 +1118,7 @@
|
||||
}
|
||||
|
||||
public boolean isOp(GameProfile gameprofile) {
|
||||
|
@ -808,7 +809,7 @@
|
|||
}
|
||||
|
||||
@Nullable
|
||||
@@ -703,6 +1141,12 @@
|
||||
@@ -703,6 +1142,12 @@
|
||||
for (int j = 0; j < this.players.size(); ++j) {
|
||||
EntityPlayer entityplayer = (EntityPlayer) this.players.get(j);
|
||||
|
||||
|
@ -821,7 +822,7 @@
|
|||
if (entityplayer != entityhuman && entityplayer.dimension == i) {
|
||||
double d4 = d0 - entityplayer.locX;
|
||||
double d5 = d1 - entityplayer.locY;
|
||||
@@ -750,7 +1194,7 @@
|
||||
@@ -750,7 +1195,7 @@
|
||||
public void reloadWhitelist() {}
|
||||
|
||||
public void b(EntityPlayer entityplayer, WorldServer worldserver) {
|
||||
|
@ -830,7 +831,7 @@
|
|||
|
||||
entityplayer.playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
|
||||
entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(worldserver.getTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean("doDaylightCycle")));
|
||||
@@ -758,16 +1202,21 @@
|
||||
@@ -758,16 +1203,21 @@
|
||||
|
||||
entityplayer.playerConnection.sendPacket(new PacketPlayOutSpawnPosition(blockposition));
|
||||
if (worldserver.W()) {
|
||||
|
@ -856,7 +857,7 @@
|
|||
entityplayer.playerConnection.sendPacket(new PacketPlayOutHeldItemSlot(entityplayer.inventory.itemInHandIndex));
|
||||
}
|
||||
|
||||
@@ -780,7 +1229,7 @@
|
||||
@@ -780,7 +1230,7 @@
|
||||
}
|
||||
|
||||
public String[] getSeenPlayers() {
|
||||
|
@ -865,7 +866,7 @@
|
|||
}
|
||||
|
||||
public boolean getHasWhitelist() {
|
||||
@@ -829,17 +1278,29 @@
|
||||
@@ -829,17 +1279,29 @@
|
||||
}
|
||||
|
||||
public void u() {
|
||||
|
@ -898,7 +899,7 @@
|
|||
}
|
||||
|
||||
public void sendMessage(IChatBaseComponent ichatbasecomponent) {
|
||||
@@ -876,8 +1337,10 @@
|
||||
@@ -876,8 +1338,10 @@
|
||||
WorldServer[] aworldserver = this.server.worldServer;
|
||||
int j = aworldserver.length;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue