Помогите Выполняется команда много раз

  • Автор темы Автор темы Arm4x
  • Дата начала Дата начала
У тебя порядок циклов нарушен + 1 лишний имеется.
 
upload_2021-5-31_17-6-13.png
В цикле, которым ты права перебираешь, каждый раз вводиться команда. 8 строк прав - 8 вводов конмад
 
Не думал что когда-то буду писать код для новичков как @alexandrage

Код:
public static void rubukkit(){

        List<Player> list = new ArrayList<>();

        for(String perm : Лист прав){
            for(Player p : Bukkit.getOnlinePlayers()){
                if(!p.isOp() && p.hasPermission(perm)){
                    if(!list.contains(p)) {
                        list.add(p);
                    }
                }
            }
        }

        for(Player p : list){
            Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban "+p.getName());
        }

    }
 
Не думал что когда-то буду писать код для новичков как @alexandrage

Код:
public static void rubukkit(){

        List<Player> list = new ArrayList<>();

        for(String perm : Лист прав){
            for(Player p : Bukkit.getOnlinePlayers()){
                if(!p.isOp() && p.hasPermission(perm)){
                    if(!list.contains(p)) {
                        list.add(p);
                    }
                }
            }
        }

        for(Player p : list){
            Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban "+p.getName());
        }

    }
Лучше не стало :D. Это решается более простым способом без листа, выходом из цикла. Но придется поменять их порядок.
 
Примерно как то так. Удобнее всего разделить все на методы и не делать куча циклов внутри цикла.

Код:
private void checkPlayers() {
for (Player pl : Bukkit.getOnlinePlayers()) {
//Игнорируем тех кого не надо проверять
if (!config.getStringList("players").contains(pl.getName())) {
if (checkPerms(pl)) {
sendCommands(pl);
}
}
}

//Если хоть одно право с конфига было найдено у игрока, возвращаем true
private boolean checkPerms(Player pl) {
for (String perms : config.getStringList("permissions")) {
if (pl.hasPermissons(perms)) {
return true;
}
}
return false;
}


private void sendCommands(Player pl) {
for (String cmd : config.getStringList("commands")) {
//Выполняй здесь команду 'cmd' от имени консоли
}
}
 
Примерно как то так. Удобнее всего разделить все на методы и не делать куча циклов внутри цикла.

Код:
private void checkPlayers() {
for (Player pl : Bukkit.getOnlinePlayers()) {
//Игнорируем тех кого не надо проверять
if (!config.getStringList("players").contains(pl.getName())) {
if (checkPerms(pl)) {
sendCommands(pl);
}
}
}

//Если хоть одно право с конфига было найдено у игрока, возвращаем true
private boolean checkPerms(Player pl) {
for (String perms : config.getStringList("permissions")) {
if (pl.hasPermissons(perms)) {
return true;
}
}
return false;
}


private void sendCommands(Player pl) {
for (String cmd : config.getStringList("commands")) {
//Выполняй здесь команду 'cmd' от имени консоли
}
}
Серьезно? :D
Код:
        List<String> perms = this.getConfig().getStringList("perm");
        Bukkit.getOnlinePlayers().forEach(player -> {
            perms.forEach(perm -> {
                if (player.hasPermission(perm) прочие проверки) {
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), команда);
                    return;
                }
            });
        });
 
Серьезно? :D
Код:
        List<String> perms = this.getConfig().getStringList("perm");
        Bukkit.getOnlinePlayers().forEach(player -> {
            perms.forEach(perm -> {
                if (player.hasPermission(perm) прочие проверки) {
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), команда);
                    return;
                }
            });
        });
Это просто по-другому написано. А по сути тот же цикл в цикле. Разницы никакой.
 
Назад
Верх