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

В разработке [MoreHealth] плагин на увеличение сердец.

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

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

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

    Баллы:
    123
    Дабы не надоедать всем своими вопросами, я решил создать единственную тему.
    Я разрабатываю свой первый легкий плагин MoreHealth (я решил что он будет именно синего цвета :D).
    Его функционал не велик, предполагается что в нем будет всего две команды:
    /moreh enable
    /moreh disable
    Первая команда при наличии определенного права(далее пермишана) включает игроку дополнительный(е) ряд(ы) сердечек (кол-во рядов зависит от пермишена у игрока).
    Вторая команда - выключает дополнительный ряд сердечек (на самом деле просто устанавливает стандартное кол-во сердечек).
    Знаю, что такие плагины есть, возможно даже много, но, вспомните свои первые плагины, могу быть уверен, что они были не лучше.
    Немного обо мне, я начинающий программист(далее гавнокодер), изучаю Java меньше месяца на JavaRush, мне 12 лет.
    Так как это мой первый плагин, и саму Джаву я изучил плохо, прошу меня не сильно тралить.
    Код:
    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.Damageable;
    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.translateAlternateColorCodes('&', "&9&l[MoreHealth]&a Был загружен."));
        }
    
        @Override
        public void onEnable()
        {
            getServer().getPluginManager().registerEvents(this, this);
            Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', "&9&l[MoreHealth]&a Успешно включен."));
        }
    
        @Override
        public void onDisable()
        {
            Player[] players = getServer().getOnlinePlayers();
            for (Player player:players)
            {
                player.setMaxHealth(20.0);
            }
            Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', "&9&l[MoreHealth]&a Был выключен."));
        }
    
        @EventHandler
        public void onQuit(PlayerQuitEvent pqe)
        {
            Player player = pqe.getPlayer();
            player.setMaxHealth(20.0);
        }
    
        @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") || cmd.getName().equalsIgnoreCase("moreh") || cmd.getName().equalsIgnoreCase("mh"))
            {
                if (args.length == 0)
                {
                    player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9&l[MoreHealth]&c Использование плагина:&a /moreh <команда>"));
                }
                else
                {
                    if (args[0].equals("enable") || args[0].equals("e"))
                    {
                        if (player.hasPermission("morehealth.vip") && !(player.hasPermission("morehealth.premium")))
                        {
                            player.setMaxHealth(40.0);
                            player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9&l[MoreHealth]&a Дополнительные сердца активированы."));
                        }
                        else if (player.hasPermission("morehealth.premium"))
                        {
                            player.setMaxHealth(60.0);
                            player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9&l[MoreHealth]&a Дополнительные сердца активированы."));
                        }
                        else
                        {
                            player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9&l[MoreHealth]&c У вас нет прав на &4включение&c дополнительных сердец."));
                        }
                    }
                    else if (args[0].equals("disable") || args[0].equals("d"))
                    {
                        player.setMaxHealth(20.0);
                        player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9&l[MoreHealth]&c Дополнительные сердца успешно выключены."));
                    }
                    else
                    {
                        player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9&l[MoreHealth]&c Такой команды не существует."));
                    }
                }
                return true;
            }
            return false;
        }
    }
    Код:
    name: MoreHealth
    main: com.roboman.plugins.Solution
    version: 0.1
    author: Mr_RoboMan
    description: Плагин для дополнительных сердец.
    commands:
       morehealth:
          description: Основная команда плагина.
          permission: morehealth.user
          usage: /<command> [args]
       moreh:
          description: Основная команда плагина.
          permission: morehealth.user
          usage: /<command> [args]
       mh:
          description: Основная команда плагина.
          permission: morehealth.user
          usage: /<command> [args]
    1. Информация об команде без аргументов. [Спасибо CraftCoderу.]
    2. Как получить МАКСИМАЛЬНОЕ здоровье игрока? (player.getMaxHealth() > 20.0) не работает жалоба на (). [Не решен]
    Текущий вопрос:
    Как получить МАКСИМАЛЬНОЕ здоровье игрока? (player.getMaxHealth() > 20.0) не работает жалоба на ().
    Как добавить команды с аргументами в plugin.yml чтоб они высвечивались в /help MyPluginName?
     
    Последнее редактирование: 13 янв 2015
  2. Хостинг MineCraft
    <
  3. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Давай разберемся, что из себя представляет args?
     
  4. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Не знаю, но как я думаю: это массив в котором записаны аргументы(наверно String) команды.
     
  5. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Правильно, это массив. Какой параметр есть у массива? Какого будет значение этого параметра при отсутствии аргументов?
     
  6. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Наверно длинна массива, при отсутствии наверно будет null..
     
  7. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Ну раз до этого момента дошел, то подскажу. Длина масива будет равна 0. Т.е. проверяешь: если(длина масива == 0) то ...
     
  8. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Блин, спасибо большое!)) А я постоянно проверял на null :D
    Я пошел дальше писать плагин и совершать глупейшие ошибки.
    Хотя не, лучше отдохну в официальную CS:GO :D[DOUBLEPOST=1421000873,1420986746][/DOUBLEPOST]Прошу помочь. Что я делаю не так?
    Код:
    if (player.getMaxHealth() > 20.0)
    //Код
    [DOUBLEPOST=1421002071][/DOUBLEPOST]UP
     
    Последнее редактирование: 11 янв 2015
  9. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Всё так.
     
  10. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Ошибка какая-то или что?
     
  11. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    upload_2015-1-11_20-56-35.png [DOUBLEPOST=1421002684,1421002600][/DOUBLEPOST]Жалуется вроде на то что игрок может быть не Player, но я вроде сделал проверку в самом начале..
     
  12. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Меня удивляет ваша логика.
    Всё дело в том что там 2 метода с таким названием, но возращают разные типы данных.
     
  13. makssof

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

    Баллы:
    103
    Skype:
    makssofez
    Screenshot_2015-01-12-00-00-00.png [DOUBLEPOST=1421010274][/DOUBLEPOST]У самого такое давно было.
     
  14. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Не подходит чет..
    upload_2015-1-12_8-45-23.png [DOUBLEPOST=1421053460,1421045129][/DOUBLEPOST]
    Ну а как мне получить то что надо... Т.Е. Просто int с максимальным кол-вом сердечек у игрока?..
     
  15. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Вот что использует например @fromgate - https://github.com/fromgate/ReActio...te/reactions/util/BukkitCompatibilityFix.java
    Вполне сносное решение, а главное универсальное.
     
  16. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    И тут я понял что смогу написать плагин без getMaxHealth() :D[DOUBLEPOST=1421056591,1421056468][/DOUBLEPOST]Пожалуй сегодня выложу плагин. Если людям понравиться - буду дальше обновлять.[DOUBLEPOST=1421056684][/DOUBLEPOST]Хотя нет, еще вопрос как добавить в plugin.yml команду с аргументами? А именно:
    /moreh enable
    /moreh disable
     
  17. saharNooby

    saharNooby Активный участник Девелопер Пользователь

    Баллы:
    78
    Имя в Minecraft:
    saharNooby
    Достаточно добавить команду moreh, аргументы уже проверяешь в методе-обработчике ( args[0] ).
     
  18. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Это знаю, у меня сейчас все так и работает. Мне чтоб при tab высвечивало аргументы команды в чате (как у нормальных плагинов).[DOUBLEPOST=1421061210,1421060298][/DOUBLEPOST]UP[DOUBLEPOST=1421061540][/DOUBLEPOST]UP :D[DOUBLEPOST=1421061865][/DOUBLEPOST]Еще один бессмысленный UP :D
     
  19. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Кроме дефотлтных команд сервера не видел подобного. Пруфы?
     
  20. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    А, да, извиняюсь провтыкал с чем-то перепутал наверно :confused:.

    То-есть если у меня в плагине единственная команда - /moreh а все остальные аргументы то из регистрировать не надо?
     
  21. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Да.
     
Статус темы:
Закрыта.

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