Помогите Как проверить написали ли нужную команду?

  • Автор темы Автор темы ItsWay
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

ItsWay

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
ItsWay
Здравствуйте, хочу поинтересоваться, как мне через метод if проверить, если это не команда определённая то выполняеться event.setCancelled(true); отмена команда?
 
Я использу. этот ивент, но как мне через if проверить саму команду?
Например так.

Код:
    @EventHandler
    public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent e) {
        String[] args = e.getMessage().split(" ");
        if (args.length == 0) {
            return;
        }

        if (args[0].equalsIgnoreCase("твоя_команда")) {
            e.setCancelled(true);
        }
    }
 
Например так.

Код:
    @EventHandler
    public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent e) {
        String[] args = e.getMessage().split(" ");
        if (args.length == 0) {
            return;
        }

        if (args[0].equalsIgnoreCase("твоя_команда")) {
            e.setCancelled(true);
        }
    }
Так не катит
 
Код:
@EventHandler
public void onCommand (PlayerCommandPreprocessEvent e) {

    Player p = e.getPlayer();
    String cmd = e.getMessage().split(" ")[0].toLowerCase();
    List<String> list = config.getStringList("Commands"); // Получаем лист с командами из конфига

    if(p.isOp()) return;

    for(int i = 0; i < cmd.length(); i++) {
        if(!list.contains(cmd)) return; // Если не содержится в листе, то ничего не делаем
        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cmessage"));
        e.setCancelled(true);
    }
}
 
А что конкретно нужно?

for(int i = 0; i < cmd.length(); i++) { if(!list.contains(cmd)) return; // Если не содержится в листе, то ничего не делаем p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cmessage")); e.setCancelled(true); }
Для чего здесь цикл for?
 
Можешь вот так:
Код:
    @EventHandler
    public void onStartCommands(PlayerCommandPreprocessEvent e) {
        Player p = e.getPlayer();

        if (e.getMessage().toLowerCase().startsWith("/start")) { // Если команда /start то
               p.sendMessage("Ого, ты написал команду /start");
        }
    }
 
Можешь вот так:
Код:
    @EventHandler
    public void onStartCommands(PlayerCommandPreprocessEvent e) {
        Player p = e.getPlayer();

        if (e.getMessage().toLowerCase().startsWith("/start")) { // Если команда /start то
               p.sendMessage("Ого, ты написал команду /start");
        }
    }
В твоем случае код будет выполняться при любых, начинающихся со "/start". Да, оно будет выполняться при команде "/start", но будет выполняться и, к примеру, при командах "/startrace", "/startbattle", "/startevent" и так далее.
 
Упрощу задачу более адекватным и понятным кодом.
Код:
@EventHandler
public void onCommand (PlayerCommandPreprocessEvent e) {
    Player p = e.getPlayer();
    String[] args = e.getMessage().split(" ");
    if(args.lenght !=0) {
         if(args[0].equalsIgnoreCase("комманда") {
             e.setCancelled(true);
         }
    }
}
 
Последнее редактирование:
Упрощу задачу более адекватным и понятным кодом.
Код:
@EventHandler
public void onCommand (PlayerCommandPreprocessEvent e) {
    Player p = e.getPlayer();
    String[] args = e.getMessage().split(" ");
    if(args[0].equalsIgnoreCase("комманда") {
        e.setCancelled(true);
    }
}
То же самое, что я написал, лул, просто создал дополнительные ненужные переменные.
 
То же самое, что я написал, лул, просто создал дополнительные ненужные переменные.
Читабильность кода? Не)
equalsIgnoreCase? Зачем, люди должны писать команду точь в точь, как она есть!
А если вдруг введут "/" null? outofboundsexception?
 
Читабильность кода? Не)
equalsIgnoreCase? Зачем, люди должны писать команду точь в точь, как она есть!
А если вдруг введут "/" null? outofboundsexception?
1. Слеш входит в проверку, поэтому exception'ов этих не будет.
2. Я лично очень сильный перфекционист и люблю, чтобы все было точно до мелких деталей, это дело каждого, учитывать регистр или нет. Не знаю точно, но если "test" и "tEst" воспринимаются ядром, как две разные команды, то тут точно имеет смысл проверять регистр, в другом случае ты прав, можно обойтись и без этого, это в каких-то случаях даже удобнее будет.
3. Код и так читается нормально, потому что он сам по себе очень прост.
какие же переменные тут ненужные, друг?)
Строковый массив args. Ты создаешь поле args и используешь его лишь один раз в коде. Зачем, друг?)
 
1. Слеш входит в проверку, поэтому exception'ов этих не будет.
2. Я лично очень сильный перфекционист и люблю, чтобы все было точно до мелких деталей, это дело каждого, учитывать регистр или нет. Не знаю точно, но если "test" и "tEst" воспринимаются ядром, как две разные команды, то тут точно имеет смысл проверять регистр, в другом случае ты прав, можно обойтись и без этого, это в каких-то случаях даже удобнее будет.
3. Код и так читается нормально, потому что он сам по себе очень прост.

Строковый массив args. Ты создаешь поле args и используешь его лишь один раз в коде. Зачем, друг?)

Видимо ты не совсем понимаешь, что такое читабельность кода. В данном случае мы помогли с 1 методом, я не могу знать, будет ли он использовать далее args, если будет, то вписывая его везде, получая его - уже будет нечитабельно. Перфекционизм перфекционизмом, но давай предположим ситуацию, с плагином на баны. В чат спамят рекламой, а у модератора был включен капслок. Человек максимально быстро реагирует на нарушения, вводя, допустим "/BAN *nick*" И что же ему выдаст твой перфекционизм? Ошибку, верно. Речь идет не о перфекционизме в данный момент, а о работоспособности и универсальности плагина.

С ошибками ладно, проворонил момент :)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх