1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем ItsWay, 5 май 2022.

Статус темы:
Закрыта.
  1. Автор темы
    ItsWay

    ItsWay Активный участник Пользователь

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

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
  3. Автор темы
    ItsWay

    ItsWay Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Я использу. этот ивент, но как мне через if проверить саму команду?
     
  4. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    Например так.

    Код:
        @EventHandler
        public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent e) {
            String[] args = e.getMessage().split(" ");
            if (args.length == 0) {
                return;
            }
    
            if (args[0].equalsIgnoreCase("твоя_команда")) {
                e.setCancelled(true);
            }
        }
     
  5. Автор темы
    ItsWay

    ItsWay Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Так не катит
     
  6. Sergeo

    Sergeo Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Solomka
    Код:
          
    @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);
        }
    }
         
     
  7. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    А что конкретно нужно?

    Для чего здесь цикл for?
     
  8. Sturm_PT

    Sturm_PT Активный участник Пользователь

    Баллы:
    76
    Чтобы появился баг с тем, что код не обрабатывает команды в один символ:good:
     
  9. Автор темы
    ItsWay

    ItsWay Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Не работает так.
     
  10. mirrerror

    mirrerror Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    http://rubukkit.org/threads/kak-otklonit-vypolnenie-komandy.182354/
     
  11. Автор темы
    ItsWay

    ItsWay Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
  12. GhostSetuper

    GhostSetuper Участник Пользователь

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

    mirrerror Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    В твоем случае код будет выполняться при любых, начинающихся со "/start". Да, оно будет выполняться при команде "/start", но будет выполняться и, к примеру, при командах "/startrace", "/startbattle", "/startevent" и так далее.
     
  14. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Сладких снов))
     
  15. uknwnxk

    uknwnxk Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    uknwnxk
    Упрощу задачу более адекватным и понятным кодом.
    Код:
    @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);
             }
        }
    }
     
    Последнее редактирование: 8 май 2022
  16. mirrerror

    mirrerror Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    То же самое, что я написал, лул, просто создал дополнительные ненужные переменные.
     
  17. uknwnxk

    uknwnxk Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    uknwnxk
    какие же переменные тут ненужные, друг?)
     
  18. uknwnxk

    uknwnxk Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    uknwnxk
    Читабильность кода? Не)
    equalsIgnoreCase? Зачем, люди должны писать команду точь в точь, как она есть!
    А если вдруг введут "/" null? outofboundsexception?
     
  19. mirrerror

    mirrerror Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    1. Слеш входит в проверку, поэтому exception'ов этих не будет.
    2. Я лично очень сильный перфекционист и люблю, чтобы все было точно до мелких деталей, это дело каждого, учитывать регистр или нет. Не знаю точно, но если "test" и "tEst" воспринимаются ядром, как две разные команды, то тут точно имеет смысл проверять регистр, в другом случае ты прав, можно обойтись и без этого, это в каких-то случаях даже удобнее будет.
    3. Код и так читается нормально, потому что он сам по себе очень прост.
    Строковый массив args. Ты создаешь поле args и используешь его лишь один раз в коде. Зачем, друг?)
     
  20. uknwnxk

    uknwnxk Активный участник Пользователь

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

    С ошибками ладно, проворонил момент :)
     
Статус темы:
Закрыта.

Поделиться этой страницей