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

В разработке Я создаю свой первый плагин для Rubukkit!

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

?

Интересно?

  1. Да, продолжай!

    14 голосов
    58,3%
  2. Нет,

    10 голосов
    41,7%
  1. Автор темы
    leonmark061

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

    Баллы:
    76
    Всем привет.
    Я уже какое-то время занимаюсь программированием на Java(и не только :) ), но из плагинов писал только кривые и никому не нужные штуки, вроде фиксов для WG.
    Но теперь мне захотелось создать что-то полезное для сообщества и поделиться этим, вероятно, долгим, нудным процессом с дорогими пользователями, которые только начинают писать плагины, и научить вас плохим манерам программирования и созданию плагинов в общем.
    Если Вы продвинутый кодер(коим я, конечно же, не являюсь), и у Вас уже есть свои устоявшиеся принципы написания кода, которые, по вашему мнению, правильнее моих, то пожалуйста, "критикуйте меня полностью". Иначе я буду открыто показывать пользователям, как, возможно, "писать" нельзя.
    Ну, это при условии, что данный пост вообще кто-то будет читать...

    Итак.
    Хочу немного прояснить, что я вообще задумал.
    Я решил написать плагин и поделиться этим процессом написания с вами, описывая каждый шаг. Для ленивых, и тех, кто не воспринимает больше 10 строчек текста, сразу скажу, что никаких видео с демонстрацией данного процесса я записывать не планирую - только текст и скриншоты. Так что, либо читать, либо идти мимо.
    Каждый шаг создания плагина будет сопровождаться подробным описанием этого шага, листингом с комментариями и, возможно, каким-нибудь скриншотом.

    Я не хочу писать слишком большие плагины, по-этому выберу "среднячок".

    Идея​
    Для начала необходимо продумать, что вообще должен уметь плагин. Представить его основные функции их реализацию.
    Так как моя задница слишком ленивая(а ведь именно в ней у меня генерируются идеи), я возьму одну идею из уже имеющихся на данном форуме.
    Я выбрал идею пользователя @craftist - "CommandVote". Мне плевать, если кто-то уже взялся за разработку такого плагина, ведь реализовывать его я буду по-своему. И не факт, что плагин будет в точности воспроизводить функционал, предложенный автором идеи. Да, в итоге может получится несколько плагинов со схожим функционалом, но кого это волнует? Продолжим.

    Проектирование.​
    Определившись с идеей, надо спроектировать функционал плагина. Это необходимо для того, что в процессе разработки у вас не возникало никаких трудностей с организацией классов. Приступим.

    Так как плагин будет не маленький, то и классов в нем будет большое количество(2+).
    Итак, CommandVotePlugin - первый класс, головной. В этом классе будет происходить инициализация всех остальных компонентов плагина. И через него же я буду обращаться к этим самым компонентам(прим.: запуск голосования и т.п.). Второй , не менее важный класс - CommandVoteCommandExecutor. В нем я буду обрабатывать команды, введенные игроком.
    Как вы могли заметить, в качестве префикса к основному названию класса я использую название самого плагина(CommandVote + Plugin, CommandVote + CommandExecutor). Это полезно, если вы в нескольких своих плагинах используйте схожие названия классов и хотите иметь возможность взаимодействовать между ними. Но если вам нафиг не сдались эти префиксы, их спокойно можно отбросить. Продолжим.
    Нам понадобятся еще два класса Voting и VotingManager. Первый будет представлять из себя само голосование в виде объекта и хранить в себе данные: имя, выполняемая команда, кол-во голосов для выполнения и т.д.. Второй будет управлять голосованиями: запускать их, считать голоса, выполнять, останавливать и т.д.
    Данные о голосованиях нам надо откуда-то брать, поэтому следующие два класса называются Configuration и VotingConfiguration. В первом я буду считывать и глобальные настройки для плагина. В втором - всю информацию о голосовании. Так же нам понадобятся классы для событий:
    VotingBeginEvent, VotingVoteEvent, VotingEndEvent,VotingTimeoutEvent и соответствующие слушатели для них. Класс MessageUtils будет служить для формирования сообщений, заменяя флаги (типа {RandVoted}, {YesVoted} и т.п.) на соответствующую информацию.
    Для базового функционала мне этого хватит. Если чего-то будет не хватать, можно добавлять это по ходу разработки.

    Реализация.
    ...
    Если вам интересно - пишите, не стесняйтесь. В следующих постах я буду мало-помалу заниматься реализацией плагина и делиться этим процессом с вами. В конце разработки, я создам тему для самого плагина и исходного кода.

    Не кидайтесь тапками(или чем потяжелей). Если задумка многим будет не по душе, я прекращу выкладывать посты и попрошу удалить тему.

    P.S. В данном посте(треде) я во всем опираюсь на свой личный опыт.
     
    Последнее редактирование: 26 дек 2015
  2. Хостинг MineCraft
    <
  3. Mr_IZeam

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

    Баллы:
    66
    Имя в Minecraft:
    Mr_IZeam
    Есть идея!Создай плагин на запрет предметов,блоков,мата,флуда и рекламы на сервере.Или можно создать плагин на статистику,Кароче говоря вот тебе две идеи выбирай сам)
     
  4. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Это не полезно. Я не думаю, что какой ниб Вася будет копировать твой package для своего плагина. Достаточно будет заиметь уникальный package (аля org.rubukkit.leonmark061.commandvote), и твои мозолящие глаза префиксы канут в небытие.
    Мажорно. Небось и ссылки на переменные конфигов будут статическими :D
     
  5. Автор темы
    leonmark061

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

    Баллы:
    76
    Тогда создайте мне два класса... хм. Допустим EffectFactory. Поместите их в разные пакеты, например первый в org.rubukkit.dereku.weaponeffects, а другой в org.rubukkit.dereku.particleeffects. И заставьте работать их один на другого. Это можно будет провести только таким образом:
    Код:
    package org.rubukkit.dereku.weaponeffects;
    
    ...
    
    EffectFactory factory = new EffectFactory(new org.rubukkit.dereku.particleeffects.EffectFactory())
    Не знал, что вам проще прописывать именно полный путь к классу, а не короткий префикс.
    Что еще за "мажорно"? Как будто-то кто-то ограничивает вас в количестве возможно кода...
     
  6. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А зачем мне два одинаковых класса? Весьма глупый аргумент в сторону защиты префиксов на каждый класс.
    Ограничивать никто не собирается, но вот обслуживать всё это тебе.
     
  7. Larin

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

    Баллы:
    103
    Просто ты говнокодер, у кого есть 2 класса с одинаковым названием, нормальные кодеры так не делают.
     
  8. Автор темы
    leonmark061

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

    Баллы:
    76
    Не стоит так предвзято относится к людям. Вы еще не видели мой код, поэтому не можете называть меня говнокодером. С тем же успехом я могу назвать вас так же.
     
  9. Larin

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

    Баллы:
    103
    То, что нужно загружать 2 класса с одинаковым именем уже говорит о говнокоде.
     
  10. Автор темы
    leonmark061

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

    Баллы:
    76
    Вы очень невнимательны. Я нигде и не предлагал загружать два класса с одинаковым именем. Я лишь привел пример, как этого можно избежать.
     
  11. Larin

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

    Баллы:
    103
    Глупый что ли? Ты сказал, как избежать этого, а я сказал, что если такая проблема появляется - значит говнокод.
     
  12. Автор темы
    leonmark061

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

    Баллы:
    76
    Как вам угодно. Видимо, у вас очень большой опыт копания в говнокоде. Не буду больше спорить с вами.
     
  13. Shockwave

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

    Баллы:
    103
    У вас два класса с названием EffectFactory в разных пакетах... ЗАЧЕМ? Сделайте WeaponEffectFactory и ParticleEffectFactory которые наследуются EffectFactory.
     
  14. Автор темы
    leonmark061

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

    Баллы:
    76
    У меня два разных плагина, две разные реализации EffectFactory. Одна для частиц, другая для различных бонусов. Следовательно, наследовать какой-то общий класс они не могут. Обе реализации в задействованы в разных плагинах.
    Надеюсь так понятно.

    Пример был приведен для того, что бы показать, как можно было бы использовать имена классов без написания префиксов к основному имени, приводя полный путь к классу.
     
  15. Shockwave

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

    Баллы:
    103
    Если они в разных плагинах то в чем проблема? Кто сказал что нужно писать полный путь?
     
  16. Автор темы
    leonmark061

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

    Баллы:
    76
    Боже. Если не знаете о чем идет речь, лучше вообще не встревайте. Прежде, читайте диалоги полностью.
     
  17. Shockwave

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

    Баллы:
    103
    Да с вами вскоре никто и не захочет вести диалог.[DOUBLEPOST=1451403231,1451403090][/DOUBLEPOST]Придумывать никому не нужные велосипеды и обвинять людей что они их не понимают и не принимают.
     
  18. Автор темы
    leonmark061

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

    Баллы:
    76
    Это ваше дело. Я никого не заставляю ничего понимать или принимать.
    Но я вас очень прошу, не заставляйте меня отвечать на одни и те же вопросы!
     
  19. Автор темы
    leonmark061

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

    Баллы:
    76
    Я не кодер. Я - программист. И если вы меня не понимаете - не надо. Даже не пытайтесь.
     
    Последнее редактирование: 30 дек 2015
  20. kirill2011s

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

    Баллы:
    103
    Даже не пытайтесь меня понять, но я напишу распишу процесс создания плагина!

    Проще говоря, для кого ты пишешь это, если тебя не надо понимать? Тебе, между прочим, дельные советы дают, а ты их игнорируешь.
     
    Последнее редактирование: 31 дек 2015
  21. Mr_Grom

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

    Баллы:
    78
    Имя в Minecraft:
    Failer
    Посмеялся :D
     

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