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

Стартап Туториал | Создание плагинов | Spigot/CraftBukkit/Bukkit

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

Статус темы:
Закрыта.
  1. Blc_Dragon

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

    Баллы:
    76
    Если люди не могут осилить статью хабра на ~10к символов, то о каких 80 стр может идти речь? Для таких людей это как войну и мир прочитать
     
  2. XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    для тех кто вообще новичёк - http://javarush.ru сам там учился
     
  3. vlad123HIOOF

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

    Баллы:
    66
    Имя в Minecraft:
    Mirol_Play
    Код:
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
                Player p = (Player) sender;
                if(sender instanceof Player)
                {
                    if(cmd.getName().equalsIgnoreCase("lab"))
                    {
                       
                        Location loc = p.getLocation();
                        loc.setZ(-20);
                        loc.setX(472);
                        p.setCompassTarget(loc);
                       
                    }
         }
         return true;
        }
    
    }
    При вводе пишет тип команды нету
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    В plugin.yml команду добавил?
     
  5. vlad123HIOOF

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

    Баллы:
    66
    Имя в Minecraft:
    Mirol_Play
    Делал всё по этому гайду http://rubukkit.org/threads/tutoria...pigot-craftbukkit-bukkit.133861/#post-1438006 ,а в нём об этом даже не писалось . Спасибо что помогли
    Вот так ?
    Код:
    commands:
    lab:
     
  6. Slavkaa

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

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
  7. TheZefirrkka

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

    Баллы:
    76

    проффесиональная, розработки.
    "обьяснишь"
     
  8. Spark108

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

    Баллы:
    66
    Имя в Minecraft:
    Spark108
    @_MasterCapeXD_, отлично сделал. Только вот помести все скриншоты под спойлеры.
     
  9. alexandrage

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

    Баллы:
    173
    Учить интерфейсам надо изучая java и писать плагины уже с каким то базовым набором знаний.
     
  10. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Это форум Bukkit, и глубоко затрагивать именно классы/методы Java здесь нет смысла, для этого есть другие сайты. А тут больше по созданию плагинов на платформе Bukkit/Spigot
    Спасибо)
     
  11. Sambon_

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

    Баллы:
    88
    Skype:
    morbla_kun
    Имя в Minecraft:
    Satael
    Имхо годная инструкция.

    Другое дело, что всё портят некоторые "профи", которые, судя по всему, пришли тупо за едой (ибо у меня начал жиром протекать монитор), оставляя вроде как "канстрюгдивнуу гредеку", а годным контентом для многохромосомчатых (на подобии меня) в её резонность её саму не снабдили. Не надо так, кхем.
     
  12. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Давно не было продолжения данного туториала, ну и ладно, уже есть)
    Сегодня мы научимся создавать собственные GUI!


    Мы сделаем так, чтобы гуишка открывалась при вводе команды, так мы и вспомним прошлую часть.
    Наш GUI будет менюшкой с двумя иконками - Да и Нет, при нажатии на Да игрок получит ссылку на этот туториал, а при нажатии нет, в чат выведет сообщение:
    Вы отказались от получения ссылки.


    Что-же, начнем. (по просьбе некоторых пользователей, теперь скринов не будет)

    Для начала создадим класс GUIBuilder, и в нем метод addIcon(), чтобы этот метод создавал предметы, которые мы будем устанавливать в GUI. Создавать класс мы уже умеем, так что приступим сразу к коду:
    Код:
    package ya.top.koder.plugin;
    
    import java.util.List;
    
    import org.bukkit.Material;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;
    
    public class GUIBuilder
    {
       
        public static ItemStack addIcon(Material material, String displayname, List<String> lore)
        {
            ItemStack item = new ItemStack(material);
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(displayname);
            meta.setLore(lore);
           
            item.setItemMeta(meta);
           
            return item;
           
        }
    
    }
    
    Мы создали метод addIcon, который использует три аргумента, Предмет material, Строку имени, и список строк - lore (описание предмета). Наш метод возвращает тип ItemStack. В самом теле метода мы создаем экземпляр класса ItemStack, с предметом material (укажем мы предмет уже когда начнем устанавливать предметы в инвентарь), потом мы достаем ItemMeta из нашего предмета item. Когда мы получили мету предмета, мы изменяем ее, устанавливая кастомное имя и описание предмета. После всех этих махинаций мы уже измененную мету вставляем в предмет, после чего возвращаем сам предмет, который уже был обработан методом.

    Теперь создадим наш GUI, для начала мы должны создать команду.
    В классе Main мы регистрируем команду, устанавливаем обработчик команд и создаем сам класс:
    Класс Main:
    Код:
    package ya.top.koder.plugin;
    
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin
    {
       
        public void onEnable()
        {
           
            getLogger().info("Norm");
            getLogger().warning("Not Norm");
            getLogger().severe("Bad");
           
            getServer().getPluginManager().registerEvents(new Join(), this);
            getServer().getPluginCommand("maininfo").setExecutor(new myCommand());
            getServer().getPluginCommand("geturl").setExecutor(new GURLCmd());           
           
        }

    Класс GURLCmd:
    Код:
    package ya.top.koder.plugin;
    
    import java.util.List;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.*********ventory.Inventory;
    
    public class GURLCmd implements CommandExecutor {
       
    
        //Создаем список строк для установки описания
       
        //Для иконки Да
        private List<String> lore1;
        //Для иконки Нет
        private List<String> lore2;
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
        {
            if(sender instanceof Player)
            {
                Player player = (Player) sender;
               
                if(cmd.getName().equalsIgnoreCase("geturl"))
                {
                    Inventory inv = Bukkit.createInventory(null, 9, "§eПолучить ссылку?");
                   
                    lore1.add("§eПодтвердить получение ссылки");
                    lore2.add("§eОтказаться от получения ссылки");
                   
                    //Устанавливаем предметы в инвентарь (первый слот начинается от нуля)
                    inv.setItem(2, GUIBuilder.addIcon(Material.EMERALD_BLOCK, "§aДа", lore1));
                    inv.setItem(6, GUIBuilder.addIcon(Material.REDSTONE_BLOCK, "§cНет", lore2));
                   
                    //Открываем инвентарь
                    player.openInventory(inv);
                }
            }
           
            return true;
        }
    
    }
    Тут все понятно по комментариям. Надеюсь)
    Ну, разве что, как вы видите, мы обратились к классу GUIBuilder и достали из него метод addIcon, и туда установили свои значения.

    Теперь мы должны запретить игроку перетаскивать предметы из инвентаря, для этого мы регистрируем ивент)

    Класс Main:
    Код:
    package ya.top.koder.plugin;
    
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin
    {
       
        public void onEnable()
        {
           
            getLogger().info("Norm");
            getLogger().warning("Not Norm");
            getLogger().severe("Bad");
           
            getServer().getPluginManager().registerEvents(new Join(), this);
            getServer().getPluginManager().registerEvents(new Click(), this);
            getServer().getPluginCommand("maininfo").setExecutor(new myCommand());
            getServer().getPluginCommand("geturl").setExecutor(new GURLCmd());           
           
        }

    Класс Click:
    Код:
    package ya.top.koder.plugin;
    
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    
    public class Click implements Listener
    {
       
        @EventHandler
        public void on(InventoryClickEvent e)
        {
           
            //Проверяем инвентарь
            if(e.getInventory().getTitle().equals("§eПолучить ссылку?"))
            {
                //Если он, то отменяем ивент
                e.setCancelled(true);
               
                //Если игрок кликнул по иконке Да, то:
                if((e.getCurrentItem().getType() == Material.EMERALD_BLOCK) && (e.getCurrentItem().getItemMeta().getDisplayName().equals("§aДа")))
                {
                    //Проверяем, есть ли это игрок
                    if(e.getWhoClicked() instanceof Player)
                    {
                        //Если да, устанавливаем игрока как того, кто кликнул и отправляем сообщение
                        Player p = (Player) e.getWhoClicked();
                        p.sendMessage("§6http://rubukkit.org/threads/tutorial-sozdanie-plaginov-spigot-craftbukkit-bukkit.133861/page-3");
                    }
                //Или если игрок кликнул по иконке Нет, то:
                } else if((e.getCurrentItem().getType() == Material.REDSTONE_BLOCK) && (e.getCurrentItem().getItemMeta().getDisplayName().equals("§cНет")))
                {
                    //Проверяем, есть ли это игрок
                    if(e.getWhoClicked() instanceof Player)
                    {
                        //Если да, устанавливаем игрока как того, кто кликнул и отправляем сообщение
                        Player p = (Player) e.getWhoClicked();
                        p.sendMessage("§cВы отказались от получения ссылки.");
                    }
                }
            }
        }
    
    }

    После всего этого не забываем вписать команду в plugin.yml:
    Код:
    name: RuBukkit
    description: Tutorial
    author: MasterCapeXD
    version: 1.0
    main: ya.top.koder.plugin.Main
    commands:
      maininfo:
        description: Main info of player
      geturl:
        description: get url of this thread

    На этом вроде все. 4 часть туториала подошла к концу.
     
  13. TheZefirrkka

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

    Баллы:
    76
    ЧСВ

    Да и лучше проверку на игрока в самом начале тогда делать...
    Так у тебя даже 2 проверки
     
  14. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Я это заметил, когда написал уже. Знал, что прицепятся)
    =)
    Эт для примера)
     
  15. xDark

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

    Баллы:
    96
    Мда
    Вообще в этом смысла я не вижу, и соглашусь с @Mr_RoboMan, не умеешь пользоватся документацией и не знаешь английский хоть чуть - чуть -- лучше даже и не начинать
    А если по коду, то так не проще?
    Material type = e.getCurremtItem().getType();
    p.sendMessage(type == блаблабла1 ? "1" : "2");
    Думаю суть этого "сложного" кода понятна.
    Дальше.
    Создать инвентарь один раз, и итем стак тоже один раз, и использовать private static видимо уже не в моде.
    Так же не нужна проверка на имя команды, если команда одна или же, если команды в отдельных классах
     
    Последнее редактирование: 24 июн 2017
  16. HellsCoder

    HellsCoder Активный участник

    Баллы:
    61
    неа
     
  17. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Насчет этого - не понял, что ты имеешь в виду? Чем тебе не нравится метод addIcon()?
    А инвентарь и так только в команде создается, больше нигде не используется
     
  18. Dexel

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

    Баллы:
    76
    Почему обязательно шутка? Хороший сайт, доступно объясняют. Ещё и практики кучу.
     
  19. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Я не пишу, что ничему там нельзя научиться, но профессионалом там не стать. Чтобы стать профессионалом надо не одну книжку прочитать и опыта набираться несколько лет. (КЭП)
     
  20. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    После самообучения (!) я смотрю на JavaRush, как на отходы жизнедеятельности. Не знаю, кого они могут чему научить...
     
Статус темы:
Закрыта.

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