Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Команда повторяется два раза...

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

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

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

    Баллы:
    123
    И опять уже в который раз: "Здравствуйте."
    Я уже научился писать плагины (лан-лан шучу, ток гавнокод я писать научился. :D ), все круто но...
    У меня ЧЕТЫРЕ команды вместо ДВУХ.
    В общем, надеюсь разберетесь, и покажите где я настолько криворук...
    Код:
    package com.roboman.plugins;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Solution extends JavaPlugin implements Listener
    {
        @Override
        public void onLoad()
        {
            Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_AQUA + "Has been loaded");
        }
    
        @Override
        public void onEnable()
        {
            getServer().getPluginManager().registerEvents(this, this);
            Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_GREEN + "Has been enabled");
        }
    
        @Override
        public void onDisable()
        {
            Player[] players = getServer().getOnlinePlayers();
            for (Player player:players)
            {
                player.setHealth(20);
            }
            Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_RED + "Has been disabled");
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
        {
            Player player = null;
            if (sender instanceof Player)
            {
                player = (Player) sender;
            }
            if (cmd.getName().equalsIgnoreCase("morehealthenable") && player.hasPermission("morehealth.user"))
            {
                player.setMaxHealth(40);
                player.sendMessage(ChatColor.GREEN + "[MoreHealth] Дополнительные жизни включены.");
                return true;
            }
            else if (cmd.getName().equalsIgnoreCase("morehealthdisable"))
            {
                player.setMaxHealth(20);
                player.sendMessage(ChatColor.RED + "[MoreHealth] Дополнительные жизни выключены.");
                return true;
            }
            return false;
        }
    
        @EventHandler
        public void onQuit(PlayerQuitEvent pqe)
        {
            Player player = pqe.getPlayer();
            player.setMaxHealth(20);
        }
    }
    Код:
    name: MoreHealth
    main: com.roboman.plugins.Solution
    version: 0.1
    author: Mr_RoboMan
    description: Плагин для дополнительных сердец.
    commands:
       morehealthenable:
          description: Включение дополнительных жизней.
          permission: morehealth.user
          usage: /<command>
       morehealthdisable:
          description: Выключение дополнительных жизней.
          usage: /<command>
    Работают ВСЕ команды (1,2 и 3,4 - одинаково).
    /morehealthenable
    /morehealth:morehealthenable
    /morehealthdisable
    /morehealth:morehealthdisable
     
  2. Хостинг MineCraft
    <
  3. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    А не проще сделать одну команду /morehealth и дальше уже слушать её аргументы?
    Например, /morehealth enable, или /morehealth disable[DOUBLEPOST=1420826847,1420826788][/DOUBLEPOST]Если хочешь, могу рассказать, как такое осуществить
     
  4. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Конечно проще, я так и хотел сначала, но понял что тут надо то самое "слушать аргументы", а я такого не знаю...
    Но узнаю с удовольствием :3
     
  5. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Очень просто делается
    Код:
    if(args.length > 0)//Если аргументов команды больше нуля...
    {
    if(args[0].eqalsIgnoreCase("enable")) // И если первый аргумент равен "enable"...
    {
    //...то делаешь то, что задумал
    }
    }
    
     
  6. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Очень тупой вопрос, мне надо создать только одну команду (morehealth) а все остальное - данным кодом?
     
  7. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Код:
    if ((cmd.getName().equalsIgnoreCase("morehealth")) && ((sender instanceof Player)))//Если отправитель команды-игрок
    {
    if(args.length > 0)//Если аргументов команды больше нуля...
    {
    if(args[0].eqalsIgnoreCase("enable")) // И если первый аргумент равен "enable"...
    {
    //...то делаешь то, что задумал
    }
    }
    }
    
     
  8. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Большой спасибон!)))[DOUBLEPOST=1420828624,1420827889][/DOUBLEPOST]И еще вопрос, как при таком коде:
    Код:
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
        {
            Player player = null;
            if (sender instanceof Player)
            {
                player = (Player) sender;
            }
            if (cmd.getName().equalsIgnoreCase("morehealth"))
            {
                if (args.length > 0)
                {
                    if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.user"))
                    {
                        player.setMaxHealth(40);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены.");
                        return true;
                    } else if (args[0].equalsIgnoreCase("disable"))
                    {
                        player.setMaxHealth(20);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.RED + "Дополнительные жизни были выключены.");
                        return true;
                    }
                }
            }
            return false;
        }
    
    Должен выглядит plugin.yml (часть с commands)?[DOUBLEPOST=1420829203][/DOUBLEPOST]Уже разобрался с plugin.yml.[DOUBLEPOST=1420829254][/DOUBLEPOST]Но проблема с двойной командой осталась!!!
    Прощу помощи!!! Теперь есть 2 команды:
    /morehealth
    и
    /morehealth:morehealth[DOUBLEPOST=1420833277][/DOUBLEPOST]UP
     
  9. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    /morehealth:morehealth просто так не исправишь. Это Баккита "фича": первое - название плагина, второе - команда.
     
  10. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Но ведь в других плагинах такой уйни нету...
     
  11. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Разве? Должно.
     
  12. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Та ну как так-то... НЕ В ОДНОМ плагине такого не видел...[DOUBLEPOST=1420834631,1420834270][/DOUBLEPOST]AuthMe и мой плагин...
    [​IMG]
    [​IMG][DOUBLEPOST=1420834674][/DOUBLEPOST]И я не только про аучме, вооще негде не наблюдал такого..
     
  13. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    С plugin.yml нормально все?

    PS. Упс, увидел
     
  14. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Код:
    name: MoreHealth
    main: com.roboman.plugins.Solution
    version: 0.1
    author: Mr_RoboMan
    description: Плагин для дополнительных сердец.
    commands:
       morehealth:
          description: Основная команда плагина.
          permission: morehealth.user
          usage: /<command> [args]
    
    Да-да, знаю что лучше использовать switch...case, но я в нем не разобрался.
    Код:
    package com.roboman.plugins;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Solution extends JavaPlugin implements Listener
    {
        @Override
        public void onLoad()
        {
            Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_AQUA + "Успешно загружен.");
        }
    
        @Override
        public void onEnable()
        {
            getServer().getPluginManager().registerEvents(this, this);
            Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_GREEN + "Успешно включен.");
        }
    
        @Override
        public void onDisable()
        {
            Player[] players = getServer().getOnlinePlayers();
            for (Player player:players)
            {
                player.setHealth(20);
            }
            Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_RED + "Был выключен.");
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
        {
            Player player = null;
            if (sender instanceof Player)
            {
                player = (Player) sender;
            }
            if (cmd.getName().equalsIgnoreCase("morehealth"))
            {
                player.sendMessage("[MoreHealth] Плагин успешно работает.");
                if (args.length > 0)
                {
                    if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.vip"))
                    {
                        player.setMaxHealth(40);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены.");
                        return true;
                    }
                    else if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.premium"))
                    {
                        player.setMaxHealth(60);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены.");
                        return true;
                    }
                    else if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.mega"))
                    {
                        player.setMaxHealth(80);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены.");
                        return true;
                    }
                    else if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.ultra"))
                    {
                        player.setMaxHealth(100);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены.");
                        return true;
                    }
                    else if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.admin"))
                    {
                        player.setMaxHealth(1000);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены.");
                        return true;
                    }
                    else if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.owner"))
                    {
                        player.setMaxHealth(10000);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены.");
                        return true;
                    }
                    else if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.laggs"))
                    {
                        player.setMaxHealth(100000);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены (осторожно, на сервере могут возникнуть лаги).");
                        return true;
                    }
                    else if (args[0].equalsIgnoreCase("enable") && player.hasPermission("morehealth.ultralaggs"))
                    {
                        player.setMaxHealth(1000000);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.GREEN + "Дополнительные жизни были включены (осторожно, на сервере могут возникнуть лаги).");
                        return true;
                    }
                    else if (args[0].equalsIgnoreCase("disable"))
                    {
                        player.setMaxHealth(20);
                        player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.RED + "Дополнительные жизни были выключены.");
                        return true;
                    }
                }
            }
            return false;
        }
    
        @EventHandler
        public void onQuit(PlayerQuitEvent pqe)
        {
            Player player = pqe.getPlayer();
            player.setHealth(20);
        }
    }
    
    Я в общем спать, если кто что найдет, тому большой спасибон :D[DOUBLEPOST=1420888605,1420835624][/DOUBLEPOST]UP.
     
  15. UniWest

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

    Баллы:
    66
    Skype:
    CrazyLee1337
    Имя в Minecraft:
    Reflect1on
    Странно, лично я ошибки не нашел. Да и у меня такой ошибки не наблюдается, на 1.5.2
     

    Вложения:

    • screen.png
      screen.png
      Размер файла:
      19,9 КБ
      Просмотров:
      17
  16. kvqplay

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

    Баллы:
    66
    Имя в Minecraft:
    kvq_play
    На 1.5.2 этого вроде и не было .

    Можно попробовать убрать это через PlayerChatTabCompleteEvent , но когда я тестировал у меня этот евент вообще не срабатывал , возможно все из-за того что я использовал spigot 1.8 .

    P.S. буду рад если кто-то объяснит мне в чем проблема
     
    Последнее редактирование: 10 янв 2015
  17. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Ну вот... Круто конечно...Но у меня 1.7...
    Блин, неужели это надо обязательно какими-то костылями убирать?!! Во всех же плагинах нормально!!!
    P.S. Также буду рад если кто-то объяснит мне в чем проблема.[DOUBLEPOST=1420899789,1420899082][/DOUBLEPOST]Такое чувство... Что моя КРИВОРУКОСТЬ ЗАШКАЛИВАЕТ!!...
     
  18. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
  19. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    А может сила Бейкера расскажет что это означает на русском? :3
     
  20. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    Крч здесь замешаны командные блоки.
     
  21. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Поставил в properies enble commandblock = false
    Все-равно...[DOUBLEPOST=1420962325,1420909030][/DOUBLEPOST]UPчхи.
     

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