- Баллы
- 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. В данном посте(треде) я во всем опираюсь на свой личный опыт.
Я уже какое-то время занимаюсь программированием на 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. В данном посте(треде) я во всем опираюсь на свой личный опыт.
Последнее редактирование:
