private void handlePlayerQuit(PlayerQuitEvent event) {
        Player player = event.getPlayer();

        this.teams.values().forEach(t -> {
            t.unsubscribe(player, true);
            t.removePlayer(player);
        });
        this.objectives.values().forEach(o -> o.unsubscribe(player, true));

        Map<String, PacketScoreboardObjective> playerObjectives = this.playerObjectives.remove(player.getUniqueId());
        if (playerObjectives != null) {
            playerObjectives.values().forEach(o -> o.unsubscribe(player, true));
        }

        Map<String, PacketScoreboardTeam> playerTeams = this.playerTeams.remove(player.getUniqueId());
        if (playerTeams != null) {
            playerTeams.values().forEach(t -> {
                t.unsubscribe(player, true);
                t.removePlayer(player);
            });
        }
    }
Implements {@link Scoreboard} using ProtocolLib.

<p>This class as well as all returned instances are thread safe.</p>
helper/src/main/java/me/lucko/helper/scoreboard/PacketScoreboard.java