Помогите Как получить всех игроков которое не в режиме спектатора

Статус
Закрыто для дальнейших ответов.

Conorfish

Активный участник
Пользователь
Баллы
76
Нужно через запятую получить всех игроков онлайн, у которых геймод не равен спектатору(всех у кого гм 1, гм 2, гм 0), и написать это все игроку "sender". Как это можно сделать?
 
Циклом перебираешь всех игроков, и делаешь проверку на игровой режим.
 
Код:
    public void send(Player sender) {
        List<String> players = new ArrayList<String>();
        Bukkit.getOnlinePlayers().stream().filter(player -> !player.getGameMode().equals(GameMode.SPECTATOR)).forEach(player -> {
            players.add(player.getName());
        });
        sender.sendMessage(String.join(",", players));
    }
 
Ну можно обойтись обычным циклом for, хотя, каждый дрочит как он хочет)
Я лишь дополнил твой ответ - обычное совмещение строк через + не стоит использовать в цикле - утечка памяти из-за создания кучи объектов String. Вариант из другой темы как альтернатива.
 
Я лишь дополнил твой ответ - обычное совмещение строк через + не стоит использовать в цикле - утечка памяти из-за создания кучи объектов String. Вариант из другой темы как альтернатива.
Какая еще утечка памяти :D
 
Код:
    public void send(Player sender) {
        List<String> players = new ArrayList<String>();
        Bukkit.getOnlinePlayers().stream().filter(player -> !player.getGameMode().equals(GameMode.SPECTATOR)).forEach(player -> {
            players.add(player.getName());
        });
        sender.sendMessage(String.join(",", players));
    }
public void? насчет sender, я про ввод команды
 
Код:
    public void send(Player sender) {
        List<String> players = new ArrayList<String>();
        Bukkit.getOnlinePlayers().stream().filter(player -> !player.getGameMode().equals(GameMode.SPECTATOR)).forEach(player -> {
            players.add(player.getName());
        });
        sender.sendMessage(String.join(",", players));
    }
Код:
sender.sendMessage(Bukkit.getOnlinePlayers().stream()
        .filter(p -> !p.getGameMode().equals(GameMode.SPECTATOR))
        .map(Object::toString)
        .collect(Collectors.joining(",")));
 
Я лишь дополнил твой ответ - обычное совмещение строк через + не стоит использовать в цикле - утечка памяти из-за создания кучи объектов String. Вариант из другой темы как альтернатива.
bruh, ради рофла потестил, 1кк стрингов занимают 5 мегабайт
 
Последнее редактирование:
bruh, ради рофла потестил, 1кк стрингов занимают 5 мегабайт
В конце концов, всегда стоит поддерживаться рекомендуемых практик, если только у тебя нет вариантов по-лучше. Мало ли для каких дел будет использоваться этот или подобный код.
 
В конце концов, всегда стоит поддерживаться рекомендуемых практик, если только у тебя нет вариантов по-лучше. Мало ли для каких дел будет использоваться этот или подобный код.
в чем проблема стринг билдер в цикле юзать, о каких ты практиках говоришь чел
 
Фикс.
Код:
    public void send(Player sender) {
        sender.sendMessage(Bukkit.getOnlinePlayers().stream()
                .filter(p -> !p.getGameMode().equals(GameMode.SPECTATOR))
                .map(player -> player.getName()).collect(Collectors.joining(",")));
    }
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх