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

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

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

  1. Автор темы
    Lexonix

    Lexonix Новичок

    Баллы:
    6
    Помогите, я хочу сделать в своей команде /lex под-под команды (ну 2-ой аргумент).
    Главное, чтобы другие аргументы не нарушались.
    Я пытался делать /lex errors 2, но не получилось, и сделал /lex errors2


    К примеру я хочу сделать так, чтобы работали следующие команды:
    /lex (информация)
    /lex new (нововведения)
    /lex errors 2 (2 страница всех ошибок)

    Вот код команды /lex:

    Код:
    package ru.lexonix.lexonixcore.Commands;
    
    import ru.lexonix.lexonixcore.LexonixCore;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    
    public class CommandsLex implements CommandExecutor {
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (!sender.hasPermission("LexonixCore.Command.Lex.Info")) {
                sender.sendMessage(LexonixCore.getInstance().getConfig().getString("dont_perms"));
                return true;
            } else if (args.length < 1) {
                sender.sendMessage(LexonixCore.getInstance().getConfig().getString("lex_info"));
                return true;
            } else if (args[0].equalsIgnoreCase("help")) {
                if (!sender.hasPermission("LexonixCore.Command.Lex.Help")) {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("dont_perms"));
                    return true;
                } else {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("lex_help"));
                    return true;
                }
            } else if (args[0].equalsIgnoreCase("new")) {
                if (!sender.hasPermission("LexonixCore.Command.Lex.New")) {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("dont_perms"));
                    return true;
                } else {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("lex_new"));
                    return true;
                }
            } else if (args[0].equalsIgnoreCase("errors")) {
                if (!sender.hasPermission("LexonixCore.Command.Lex.Errors")) {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("dont_perms"));
                    return true;
                } else {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("lex_errors"));
                    return true;
                }
            } else if (args[0].equalsIgnoreCase("errors2")) {
                if (!sender.hasPermission("LexonixCore.Command.Lex.Errors")) {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("dont_perms"));
                    return true;
                } else {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("lex_errors2"));
                    return true;
                }
            } else if (args[0].equalsIgnoreCase("aliases")) {
                if (!sender.hasPermission("LexonixCore.Command.Lex.Aliases")) {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("dont_perms"));
                    return true;
                } else {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("lex_aliases"));
                    return true;
                }
            } else if (args[0].equalsIgnoreCase("aliases2")) {
                if (!sender.hasPermission("LexonixCore.Command.Lex.Aliases")) {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("dont_perms"));
                    return true;
                } else {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("lex_aliases2"));
                    return true;
                }
            } else {
                return false;
            }
        }
    }
    Гл. Класс:

    Код:
    package ru.lexonix.lexonixcore;
    
    import ru.lexonix.lexonixcore.Commands.*;
    import ru.lexonix.lexonixcore.Events.Chat;
    import ru.lexonix.lexonixcore.Events.Events;
    import org.bukkit.Bukkit;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class LexonixCore extends JavaPlugin {
        private static LexonixCore instance;
        public void onEnable() {
            Bukkit.getPluginCommand("broadcast").setExecutor(new CommandBroadCast());
            Bukkit.getPluginCommand("clearchat").setExecutor(new CommandClearChat());
            Bukkit.getPluginCommand("donatechat").setExecutor(new CommandDonateChat());
            Bukkit.getPluginCommand("gamemode").setExecutor(new CommandGamemode());
            Bukkit.getPluginCommand("hack").setExecutor(new CommandHack());
            Bukkit.getPluginCommand("kill").setExecutor(new CommandKill());
            Bukkit.getPluginCommand("lexonixcore").setExecutor(new CommandsLex());
            Bukkit.getPluginCommand("lreload").setExecutor(new CommandLexReload());
            Bukkit.getPluginCommand("message").setExecutor(new CommandMessage());
            Bukkit.getPluginCommand("staffchat").setExecutor(new CommandStaffChat());
            Bukkit.getPluginCommand("serversay").setExecutor(new CommandServerSay());
            Bukkit.getPluginCommand("suicide").setExecutor(new CommandSuicide());
            Bukkit.getPluginCommand("teleport").setExecutor(new CommandTeleport());
            Bukkit.getPluginManager().registerEvents(new Events(), this);
            Bukkit.getPluginManager().registerEvents(new Chat(), this);
            instance = this;
            saveDefaultConfig();
        }
        public static LexonixCore getInstance() {
            return instance;
        }
    }
     
  2. MurlikMurlik

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

    Баллы:
    96
    if (args.lenght > 1) {
    String subCommand2 = args[1];
    //Получаем второй аргумент команды если длина массива больше одного аргумента.
    }
     
  3. Автор темы
    Lexonix

    Lexonix Новичок

    Баллы:
    6
    Это куда вставлять?
     
  4. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    В свой код
     
  5. Автор темы
    Lexonix

    Lexonix Новичок

    Баллы:
    6
    В
    Код:
    if (args[0].equalsIgnoreCase("errors")) {
                if (!sender.hasPermission("LexonixCore.Command.Lex.Errors")) {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("dont_perms"));
                    return true;
                } else {
                    sender.sendMessage(LexonixCore.getInstance().getConfig().getString("lex_errors"));
                    return true;
                }
    ?
     
  6. MurlikMurlik

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

    Баллы:
    96
    Куда же еще?
     
  7. Автор темы
    Lexonix

    Lexonix Новичок

    Баллы:
    6
    А если я буду делать страницу 3, 4... 2454, то то-же самое?
    Я хочу страницы как в /help
    /help
    /help 2
    /help 3...
    /help 3454


    И да, твое не работает. Вот лог:
    Unexpected exception while parsing console command "lex errors"
    org.bukkit.command.CommandException: Unhandled exception executing command 'lex' in plugin LexonixCore v1.2.2 s7
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648) ~[spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:634) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:444) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:407) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_201]
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
    at ru.lexonix.lexonixcore.Commands.CommandsLex.onCommand(CommandsLex.java:41) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
    ... 8 more
     
  8. AkameCoder

    AkameCoder Ньюби

    Баллы:
    1
    Имя в Minecraft:
    akame
    Ты серьезно собираешься каждую страницу ручками делать?))
     
  9. MurlikMurlik

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

    Баллы:
    96
    Без прямых рук работать и не будет.

    Делай команду, создавай int page = 1;
    далее чекай по выше логике, есть ли второй аргумент. Если есть, парси из строки int число а потом присваивай ей page. А далее используй page что бы получить страницу. Если второй аргумент не указан (потому что него нет), то будет использована страница 1 "по умолчанию". Все просто донельзя.
     
  10. Автор темы
    Lexonix

    Lexonix Новичок

    Баллы:
    6
    Я тебя не понял, как это сделать. Можно кодом?
    Я просто новичок.
     
  11. MurlikMurlik

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

    Баллы:
    96
    if (args.lenght == 0) {
    return true;
    }

    if (args[0].equalsIgnoreCase("errors")) {

    int page = 1;

    if (args.lenght > 2) {
    return true;
    }

    if (args.lenght > 1) {
    page = Integer.parseInt(args[1]);
    }

    //Открывай игроку страницу page

    }
     

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