Помогите Как сделать что пишешь команду, и тебе выводит игроков которые больше всех на сервере играет

  • Автор темы Автор темы Sevare
  • Дата начала Дата начала

Sevare

Активный участник
Пользователь
Баллы
61
Здравствуйте, помогите мне пожалуйста, мне нужно знать как сделать так что пишешь например команду /top и тебе выводит тех игроков которые больше всех играли на сервере, пожалуйста если знаете, то напишите подробный пример, и объясните пожалуйста на пальцах. Я знаю как сделать команду, но как сделать чтобы тебе выводило топ игроков которые играют на сервере я не знаю...
 
Как вариант получаешь коллекцию всех игроков, получаешь их статистику и сортируешь нужный стат
 
Общий алгоритм такой:
Код:
List<Player> topPlayers = Bukkit.getOnlinePlayers().stream()
        .sorted(Comparator.comparingInt(player -> player.getStatistic(Statistic.PLAY_ONE_TICK)))
        .collect(Collectors.toList());

Он отсортирован по возрастанию отыгранного времени.

Раз вы хотите топ от максимального наигранного времени к минимальному, стоит развернуть список:
Код:
List<Player> topPlayers = Bukkit.getOnlinePlayers().stream()
        .sorted((first, second) -> second.getStatistic(Statistic.PLAY_ONE_TICK) - first.getStatistic(Statistic.PLAY_ONE_TICK))
        .collect(Collectors.toList());
(если не понятно, что изменилось - смотрите на вызов sorted())

Вот минимальный пример:
Код:
import org.bukkit.Bukkit;
import org.bukkit.Statistic;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class TopPlayersCommand implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String label, String[] args) {
        Bukkit.getOnlinePlayers().stream()
                .sorted((first, second) -> second.getStatistic(Statistic.PLAY_ONE_TICK) - first.getStatistic(Statistic.PLAY_ONE_TICK))
                .forEach(player -> commandSender.sendMessage(player.getName()));

        return true;
    }
}
 
Последнее редактирование:
Назад
Верх