Change default tab implementation to show all online players

This commit is contained in:
TheMode 2021-08-11 14:18:04 +02:00
parent 3924d2c0a2
commit fd08cabb6a
4 changed files with 20 additions and 29 deletions

View File

@ -306,7 +306,7 @@ public class Entity implements Viewable, Tickable, TagHandler, PermissionHandler
}
protected boolean addViewer0(@NotNull Player player) {
if (!this.viewers.add(player)) {
if (player == this || !this.viewers.add(player)) {
return false;
}
player.viewableEntities.add(this);
@ -334,7 +334,7 @@ public class Entity implements Viewable, Tickable, TagHandler, PermissionHandler
}
protected boolean removeViewer0(@NotNull Player player) {
if (!viewers.remove(player)) {
if (player == this || !viewers.remove(player)) {
return false;
}
player.getPlayerConnection().sendPacket(new DestroyEntitiesPacket(getEntityId()));

View File

@ -241,7 +241,10 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
EventDispatcher.call(skinInitEvent);
this.skin = skinInitEvent.getSkin();
// FIXME: when using Geyser, this line remove the skin of the client
playerConnection.sendPacket(getAddPlayerToList());
PacketUtils.broadcastPacket(getAddPlayerToList());
for (var player : MinecraftServer.getConnectionManager().getOnlinePlayers()) {
this.playerConnection.sendPacket(player.getAddPlayerToList());
}
// Commands start
{
@ -429,11 +432,6 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
teleport(respawnEvent.getRespawnPosition()).thenRun(this::refreshAfterTeleport);
}
@Override
public void spawn() {
}
@Override
public boolean isOnGround() {
return onGround;
@ -462,16 +460,8 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
this.viewableEntities.forEach(entity -> entity.removeViewer(this));
// Clear all viewable chunks
this.viewableChunks.forEach(chunk -> chunk.removeViewer(this));
}
@Override
protected boolean addViewer0(@NotNull Player player) {
if (player == this) {
return false;
}
PlayerConnection viewerConnection = player.getPlayerConnection();
viewerConnection.sendPacket(getAddPlayerToList());
return super.addViewer0(player);
// Remove from the tab-list
PacketUtils.broadcastPacket(getRemovePlayerToList());
}
@Override
@ -479,13 +469,9 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
if (player == this || !super.removeViewer0(player)) {
return false;
}
PlayerConnection viewerConnection = player.getPlayerConnection();
viewerConnection.sendPacket(getRemovePlayerToList());
// Team
if (this.getTeam() != null && this.getTeam().getMembers().size() == 1) {// If team only contains "this" player
viewerConnection.sendPacket(this.getTeam().createTeamDestructionPacket());
player.getPlayerConnection().sendPacket(this.getTeam().createTeamDestructionPacket());
}
return true;
}

View File

@ -15,8 +15,8 @@ import net.minestom.server.network.packet.client.login.LoginStartPacket;
import net.minestom.server.network.packet.server.login.LoginSuccessPacket;
import net.minestom.server.network.packet.server.play.DisconnectPacket;
import net.minestom.server.network.packet.server.play.KeepAlivePacket;
import net.minestom.server.network.player.PlayerSocketConnection;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.network.player.PlayerSocketConnection;
import net.minestom.server.utils.StringUtils;
import net.minestom.server.utils.async.AsyncUtils;
import net.minestom.server.utils.validate.Check;
@ -373,11 +373,12 @@ public final class ConnectionManager {
final Instance spawningInstance = loginEvent.getSpawningInstance();
Check.notNull(spawningInstance, "You need to specify a spawning instance in the PlayerLoginEvent");
waitingPlayer.UNSAFE_init(spawningInstance);
// Spawn the player at Player#getRespawnPoint during the next instance tick
spawningInstance.scheduleNextTick(waitingPlayer::setInstance);
Player finalWaitingPlayer = waitingPlayer;
spawningInstance.scheduleNextTick(instance -> {
finalWaitingPlayer.UNSAFE_init(spawningInstance);
finalWaitingPlayer.setInstance(spawningInstance);
});
}
}

View File

@ -10,8 +10,8 @@ import net.minestom.server.listener.manager.PacketListenerManager;
import net.minestom.server.network.packet.FramedPacket;
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.player.PlayerSocketConnection;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.network.player.PlayerSocketConnection;
import net.minestom.server.network.socket.Server;
import net.minestom.server.utils.binary.BinaryWriter;
import net.minestom.server.utils.callback.validator.PlayerValidator;
@ -122,6 +122,10 @@ public final class PacketUtils {
sendGroupedPacket(players, packet, player -> true);
}
public static void broadcastPacket(@NotNull ServerPacket packet) {
sendGroupedPacket(MinecraftServer.getConnectionManager().getOnlinePlayers(), packet);
}
public static void writeFramedPacket(@NotNull ByteBuffer buffer,
@NotNull ServerPacket packet,
boolean compression) {