Помогите Проверка названия аргумента.

Vlad8989

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
DeleteMe
Как через if сделать так, что если игрок написал аргумент info то выведет ему то-то, а если ip то-то, а если не указано то-то. (Пример: /goto info - Выводит информацию; /goto ip - Выводит еще что-то; /goto asdv - выводит ошибку что аргумент указан не верно.)
 
PHP:
if(args[0].equals("ip")) {
    //то-то
} else if (args[0].equals("info")) {
    //что-то
} else {
    //неправильный аргумент
}
 
Тогда так.
Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        boolean b = false;
        if(args.length==0) {
            return b;
        }
        try {
            Method method = this.getClass().getDeclaredMethod(args[0].toLowerCase(), CommandSender.class, String[].class);
            b = (boolean) method.invoke(this, sender, args);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return b;
    }


Код:
    public boolean info(CommandSender sender, String[] args) {
        //TODO
        return true;
    }
 
    public boolean ip(CommandSender sender, String[] args) {
        //TODO
        return false;
    }
 
Тогда так.
Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        boolean b = false;
        if(args.length==0) {
            return b;
        }
        try {
            Method method = this.getClass().getDeclaredMethod(args[0].toLowerCase(), CommandSender.class, String[].class);
            b = (boolean) method.invoke(this, sender, args);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return b;
    }


Код:
    public boolean info(CommandSender sender, String[] args) {
        //TODO
        return true;
    }
 
    public boolean ip(CommandSender sender, String[] args) {
        //TODO
        return false;
    }
Зачем? Можн просто Map<String, Supplier<CommandDTO>>
 
PHP:
if(args.length != 0)
        switch (args[0].toLowerCase()) {
                case "ip":
                        \\do something
                        break;
                case "info":
                        \\do something but with info
                        break;
        }

не?
 
Код:
public interface ICommand {
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args);
}


Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (args.length == 0) {
            return false;
        }
        if (this.plugin.cmds.containsKey(args[0]).toLowerCase()) {
            return this.plugin.cmds.get(args[0].toLowerCase()).onCommand(sender, cmd, label, args);
        }
        return false;
    }
Код:
Map<String, ICommand> cmds = new HashMap<String, ICommand>();
cmds.put("info", new CmdInfo(this));
cmds.put("ip", new CmdIp(this));
 
Код:
public interface ICommand {
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args);
}


Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (args.length == 0) {
            return false;
        }
        if (this.plugin.cmds.containsKey(args[0])) {
            return this.plugin.cmds.get(args[0]).onCommand(sender, cmd, label, args);
        }
        return false;
    }
Код:
Map<String, ICommand> cmds = new HashMap<String, ICommand>();
cmds.put("info", new CmdInfo(this));
cmds.put("ip", new CmdIp(this));
Ну с мапой лучше чем с рефлексией
 
Не сильно важно. Скорость не особо важна тут, если на команды есть задержка от идиотов.
С рефлексией то все таки больше шансов ошибиться когда название метода пишешь
 
С рефлексией то все таки больше шансов ошибиться когда название метода пишешь
Если ты про таб комплит аргументов. На.

Код:
        for(Method m : this.getClass().getDeclaredMethods()) {
            if(!m.getName().equals("onCommand")/* TODO прочие методы на пропуск*/) {
                //TODO заполняем таб комплит.
                m.getName();
            }
        }
 
Если ты про таб комплит аргументов. На.

Код:
        for(Method m : this.getClass().getDeclaredMethods()) {
            if(!m.getName().equals("onCommand")/* TODO прочие методы на пропуск*/) {
                //TODO заполняем таб комплит.
                m.getName();
            }
        }
С рефлексией так себе. Из другого класса если над получить, то тоже так же рефлексией, засоряет код, а с мапой норм
 
С рефлексией так себе. Из другого класса если над получить, то тоже так же рефлексией, засоряет код, а с мапой норм
Мапа была просто уже, писал же). Осталось еще автомапа по классам из пакета.
 
Назад
Верх