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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Kloper, 17 авг 2020.

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

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    Как сделать так чтобы команду можно было выполнить ТОЛЬКО от консоли..

    Вот мой вариант команды:

    Код:
            if(cmd.getName().equalsIgnoreCase("makeadmin")) {
                if(sender == Bukkit.getConsoleSender()) {
                    if(args.length == 0) {
                        sender.sendMessage("[gavnoponos] Укажи ник игрока!");
                        return true;
                    } else {
                        if(args.length > 4 || args.length < 4) {
                            sender.sendMessage("[gavnoponos] Укажи аргументы!");
                            return true;
                        } else {
                            Integer lvl = parse(args[1]);
                            Integer pass = parse(args[2]);
                            if(lvl == null || pass == null) {
                                sender.sendMessage("[gavnoponos] Укажи аргументы!");
                                return true;
                            } else {
                                Player target = Bukkit.getPlayerExact(args[0]);
                                if(target == null) {
                                    sender.sendMessage("[gavnoponos] Укажи ник игрока!");
                                    return true;
                                } else {
                                    String admGiveCheck = plugin.getConfig().getString("Admins." + target.getName());
                                    if(admGiveCheck == null) {
                                        plugin.getConfig().set("Admins." + target.getName() + ".Admin Password", pass);
                                        plugin.getConfig().set("Admins." + target.getName() + ".Admin Level", lvl);
                                        plugin.getConfig().set("Admins." + target.getName() + ".Admin Auth", false);
                                        plugin.getConfig().set("Admins." + target.getName() + ".First IP", target.getAddress());
                                        plugin.saveConfig();
                                        target.sendMessage("§6[Информация] §fВас повысили/понизили до " + lvl + " уровня администратора!");
                                        sender.sendMessage("[gavnoponos] Админка выдана.");
                                    } else {
                                        plugin.getConfig().set("Admins." + target.getName() + ".Admin Level", lvl);
                                        plugin.getConfig().set("Admins." + target.getName() + ".Admin Password", pass);
                                        plugin.getConfig().set("Admins." + target.getName() + ".Admin Auth", false);
                                        target.sendMessage("§6[Информация] §fВас повысили/понизили до " + lvl + " уровня администратора!");
                                        target.sendMessage("§4[Ошибка] §cАдмин-пароль поменялся, необходимо вновь авторизоваться..");
                                        sender.sendMessage("[gavnoponos] Админка выдана.");
                                    }
                                }
                            }
                        }
                    }
                } else {
                    sender.sendMessage("§4[Ошибка] §cУ вас недостаточно прав!");
                    return true;
                }
            }
    Но в таком случае выходит ошибка:

    Код:
    [00:42:34] [Server thread/WARN]: Unexpected exception while parsing console command "makeadmin"
    org.bukkit.command.CommandException: Unhandled exception executing command 'makeadmin' in plugin ShrekAC v0.1
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Bukkit-e60fc34]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-e60fc34]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:628) ~[craftbukkit.jar:git-Bukkit-e60fc34]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:614) [craftbukkit.jar:git-Bukkit-e60fc34]
        at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:408) [craftbukkit.jar:git-Bukkit-e60fc34]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:372) [craftbukkit.jar:git-Bukkit-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:651) [craftbukkit.jar:git-Bukkit-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:555) [craftbukkit.jar:git-Bukkit-e60fc34]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_261]
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_12_R1.command.ColouredConsoleSender cannot be cast to org.bukkit.entity.Player
        at t1mqxikzz.main.Administration.onCommand(Administration.java:38) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-e60fc34]
        ... 8 more
    Как я понял проблема в 38 строке, вот что написано там

    Код:
    if(lvl == null || pass == null) {
    return true;
    } else {
    конкретно в 38 строке написано
    Код:
    } else {
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Не кастуй сендера к игроку и все. Будет работать и от консоли.
     
  3. Автор темы
    Kloper

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    так я и не кастую, никакого упоминания игрока у меня нету, кроме этого:
    Код:
    Player target = Bukkit.getPlayerExact(args[0]);
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Сервак так не считает.

    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_12_R1.command.ColouredConsoleSender cannot be cast to org.bukkit.entity.Player
    at t1mqxikzz.main.Administration.onCommand(Administration.java:38) ~[?:?]
     
  5. deadanykey

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

    Баллы:
    96
    Ответ на сабж
    if (!(sender instanceof Player)) {
    return;
    }
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Так он же консоль сендера как раз и кастует в игрока :D
     
  7. deadanykey

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

    Баллы:
    96
    Где? Он же таргета кастует. Или я невнимателен?
     
  8. Автор темы
    Kloper

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    Так в том то и прикол что мне так и так надо брать игрока из аргумента :(
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    В куске кода не видно, но консоль лучше знает)
     
  10. Conorfish

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

    Баллы:
    76
    Разве это не ответ? Если убрать "!"?
    Код:
    if (sender instanceof Player) {
        return;
    }
     

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