- Баллы
- 153
Подготовка
Для написания своих плагинов нам понадобятся:
Если вы уже знакомы с Eclipse или увас другая IDE, то пропускайте этот раздел.
Проблем с установкой эклипса возниктуть не должно: его нужно просто распаковать в любоую папку и запустить. Сразу после этого, эклипс попросит указать, какое рабочее пространство(workspace) сейчас открыть. Это папка, в которой будут сохранятся все созданные проекты и где ее располагать – лично ваше решение. Если вам всеранво, то оставляйте все как есть. Если вдруг захотите изменить рабочее пространстро, то не переживайте: при каждом следующем запуске, эклипс сново спросит вас о рабочем пространстве. Таких пространств можно наделать сколько угодно и каждое может быть настроено по разному, под какие-то определенные цели. К примеру у меня есть 2 рабочих пространства: для написания обычных java-приложений и для написания плагинов под “ведро”. Если вдруг вам надоест это сообщение, там есть галочка «Use this as the default and do not ask again», что позволяет задать workspace по-умолчанию.
Как только вы определитесь с выбором места и загрузится Eclipse, то мы увидим пригласительную вкладку… которую сразу же закрываем. Она нам ни к чему.
Теперь же мы видим рабочее пространство самого эклипса. Из всего этого, нам понадобится только следующие панели:
Рабочее место почти готово. Осталось только поставить еще 2 галочки в настройках.
Переходим в меню Window -> Preferences, далее по древу General -> Editor -> Text Editors и выставляем галочку «Show line numbers», чтобы включить отображение нумерации строк. Теперь переходим в General -> Workspace и в группе «Text file encoding» выставляем кодировку UTF-8, тем самым установив кодировку по-умолчанию.
С установкой и настройкой покончено. Теперь поясню, как создавать новый проект для плагина. Это можно сделать одим из 3-х способов:
Перед нами откроется окно New Java Project. В Project name указываем название нашему проекту.
Нажимаем Next.
В появившемся окне, переходим на вкладку Libraries, нажимаем кнопку Add External JARs и выбираем скаченный Bukkit API.
Жмем Finish.
Слева, в Package Explorer, показался наш проект с папкой src, в которой будут храниться наши исходные коды. Теперь созданим новый класс. Делается это точно так же, как и с Java Project.
В окне New Java Class нам понадобятся только следующие графы:
Вот теперь переходим непосредственно к коду.
Пишем простой плагин
Как только мы создали новый класс, нашему взору предстает уже готовый пустой шаблон:
Пока это всего лишь пустой класс, который абсолютно бесполезен в быту. Будем это исправлять. Изменяем вот это:
на это
Эклипс подчеркнет нам JavaPlugin, указывая на ошибку в коде. Если подвести мышь к такому подчеркнутому коду, то откроется окошко с описанием ошибки и способы ее решения. В данном случае нам нужно импортировать класс из Bukkit API, для чего выбираем пункт «Import ‘JavaPlugin’(org.bukkit.plugin.java)».
Сразу же замечаем, как над всем нашим кодом вписалась строчка
Немного теоретического материала. У плагинов есть 3 основных метода: onEnable(), onDisable() и onLoad(). Первые два отвечают за включение и отключение плагина, а последний срабатывает когда плагин непосредственно подгружается в память сервера. Из этого следует, что onLoad выполняется самым первым, но сам плагин начинает работать только после вызова onEnable со стороны сервера. По выключению или перезагрузки сервера, вызывается метод onDisable.
С “точками входа-выхода” разобрались. Давайте теперь напишем что-нибудь более-менее работоспособное. Приведем общий код класса к следующему виду:
То что мы сейчас написали – готовый плагин. Все что он делает – это пишет в чат о приходе и уходе игрока на сервер. Разбираться в его работе будем по порядку(а как иначе?).
Сперва обращу внимание на строку объявления класса. Как видно, к нашему классу добавилось расширение Listener. Не углубляясь в дебри явы, скажу проще: указывая данное расширение, мы тем самым расширяем область применения класса не только как плагина(JavaPlugin), но и как обработчика событий(Listener). А вот как раз в методе onEnable() мы регистрируем наш класс на сервере как обработчик событий(this – это указание «на самого себя», если кто забыл).
В этом и есть координальное отличие от старой системы обработки событий, которые были мною описаны ранее. Теперь, вместо того, чтобы лепить кучу классов, и запоминатьточные названия методов событий, нам достаточно расширить класс до листенера и указать с помощью «@EventHandler», какие функции будут являтся обработчиками событий. Просто? Да не то слово как просто!!
Далее следует 2 наших обработчика событий onJoin() и onQuit(). Первый отвечает а событие входа игрока на сервер, а второй – за уход. С помощью метода event.getPlayer().sendMessage(), мы можем отправить сообщение тому игроку, которое вызвал данное событие(в нашем случае игроку, который зашел). Статический класс ChatColor хранит в себе константы цветов для окраски. Думаю как им пользоваться уже видно из примера. Так же, оба наших обработчка оповещают других игроков на сервере о произошетших событиях, но делают это по разному. В onJoin() с помощью метода event.setJoinMessage() мы меняем привычное сообщение «Player joined the game» на любое другое. А в onQuit() мы поступили инача(в целях примера): убрали вывод сообщения о выходе и сообщаем об этом через метод getServer().broadcastMessage(), который просто посылает всем игрокам на сервере указанное сообщение.
Дело осталось за малым: написание важного файлика plugin.yml и упаковка всего этого в jar-файл.
plugin.yml – это файл описания плагина. В нем задается название плагина, главный класс, описание и какие комманды зарегестрировать за плагинов(об этом позже) и т.д. В нашем случае, файлик должен выглядеть так:
Ой, забфл сказать, где этот файлик должен находится. Жмем правой кнопкой мыши в PackageExplorer по папке src и через меню New выбираем File. В поле File name пишем plugin.yml и жмем Finish. В открывшемся текстовом редакторе, пишем то, что я указывал выше. Всё сохраняем и переходим к последней фазе: упаковке.
Правый тык по папке src -> Export. В древе папок, открываем Java и выбираем JAR file и жмем Next. Из голочек оставляем только «Export generated class files and resources» и «Compress the contents of the JAR file». В поле JAR file указываем, куда будем сохранять полученный плагин. После нажатия на Finish, плагин можно класть в папку plugins, запускать сервер и проверять его работу.
Видите? Это совсем просто. С практикой вы наберетесь больше опыта и сможете делать более крутые плагины, даже такие легендарные как WorldEdit и WorldGuard.
Ссылки
Следующая статья:
Документация:
Полезности:
Для написания своих плагинов нам понадобятся:
- Среда разработки Java-приложений Eclipse.
Есть много разных сборок этой IDE, но нам хватит и Классического. - Bukkit API
- Документация по Bukkit API
- Основы Java для начинающих
Сайт рассчитан на тех, кто только начинает изучать Java - Java (Beginner) Programming Tutorials
Видео-туториал по Ява, рассчитанный для новичков(я начинал с него). - Справочник по java
Я бы назвал это шпаргалкой по яве - Java эксперт
И пусть вас не пугает название. Здесь можно найти множество примеров решения на те или иные задачи.
Если вы уже знакомы с Eclipse или увас другая IDE, то пропускайте этот раздел.
Проблем с установкой эклипса возниктуть не должно: его нужно просто распаковать в любоую папку и запустить. Сразу после этого, эклипс попросит указать, какое рабочее пространство(workspace) сейчас открыть. Это папка, в которой будут сохранятся все созданные проекты и где ее располагать – лично ваше решение. Если вам всеранво, то оставляйте все как есть. Если вдруг захотите изменить рабочее пространстро, то не переживайте: при каждом следующем запуске, эклипс сново спросит вас о рабочем пространстве. Таких пространств можно наделать сколько угодно и каждое может быть настроено по разному, под какие-то определенные цели. К примеру у меня есть 2 рабочих пространства: для написания обычных java-приложений и для написания плагинов под “ведро”. Если вдруг вам надоест это сообщение, там есть галочка «Use this as the default and do not ask again», что позволяет задать workspace по-умолчанию.
Как только вы определитесь с выбором места и загрузится Eclipse, то мы увидим пригласительную вкладку… которую сразу же закрываем. Она нам ни к чему.
- Package Explorer
Здесь будут отображаться ваши проекты, пакеты(о них позже) и всевозможные файлы наших будующих плагинов. - Problems
Этой панелькой мы будем редко пользоваться(если вообще до нее дело дойдет), но сказать о ней стоит. Здесь будут показываться ошибки, допущенные в коде, а так же предупреждающие сообщения о возможных ошибках или неточностях. - Outline
Тут будет отображаться навигация непосредственно по коду открытого java исходника.
Рабочее место почти готово. Осталось только поставить еще 2 галочки в настройках.
Переходим в меню Window -> Preferences, далее по древу General -> Editor -> Text Editors и выставляем галочку «Show line numbers», чтобы включить отображение нумерации строк. Теперь переходим в General -> Workspace и в группе «Text file encoding» выставляем кодировку UTF-8, тем самым установив кодировку по-умолчанию.
- Меню File -> New -> Java Project
- Кнопка на панели инструментов
- Правый клик в Package Explorer
В появившемся окне, переходим на вкладку Libraries, нажимаем кнопку Add External JARs и выбираем скаченный Bukkit API.
Слева, в Package Explorer, показался наш проект с папкой src, в которой будут храниться наши исходные коды. Теперь созданим новый класс. Делается это точно так же, как и с Java Project.
- Package
указывается пакет, в котором будет хранится наш класс. Формат имени должен быть примерно такой: ru.dmitriymx.bukkit.tutorial.
Если в двух словах и на пальцах, то пакеты в ява – это пространство имен(namespace) или «виртуальные папки», в которые помещаются классы. Подробнее про это можно прочитать здесь: [1], [2], [3]. - Name
указываем название класса (у меня это DmxFirstPlugin)
Вот теперь переходим непосредственно к коду.
Пишем простой плагин
Как только мы создали новый класс, нашему взору предстает уже готовый пустой шаблон:
Java:
package ru.dmitriymx.bukkit.tutorial;
public class DmxFirstPlugin {
}
Java:
public class DmxFirstPlugin
Java:
public class DmxFirstPlugin extends JavaPlugin
Java:
import org.bukkit.plugin.java.JavaPlugin;
С “точками входа-выхода” разобрались. Давайте теперь напишем что-нибудь более-менее работоспособное. Приведем общий код класса к следующему виду:
Java:
package ru.dmitriymx.bukkit.tutorial;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
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 DmxFirstPlugin extends JavaPlugin implements Listener {
public static final Logger _log = Logger.getLogger("Minecraft");
@Override
public void onEnable() {
_log.info("[DMX PLG] onEnable()"); //вывод произвольного текста в консоль сервера
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onJoin(PlayerJoinEvent event){
event.getPlayer().sendMessage(ChatColor.GREEN + "Добро подаловать на сервер, " + ChatColor.GOLD + event.getPlayer().getName());
event.setJoinMessage(ChatColor.GRAY + "Игрок " + ChatColor.GOLD + event.getPlayer().getName() + " зашел на сервер");
}
@EventHandler
public void onQuit(PlayerQuitEvent event){
event.setQuitMessage("");
getServer().broadcastMessage(ChatColor.GRAY + "Игрок " + ChatColor.GOLD + event.getPlayer().getName() + " покинул сервер");
}
}
Сперва обращу внимание на строку объявления класса. Как видно, к нашему классу добавилось расширение Listener. Не углубляясь в дебри явы, скажу проще: указывая данное расширение, мы тем самым расширяем область применения класса не только как плагина(JavaPlugin), но и как обработчика событий(Listener). А вот как раз в методе onEnable() мы регистрируем наш класс на сервере как обработчик событий(this – это указание «на самого себя», если кто забыл).
В этом и есть координальное отличие от старой системы обработки событий, которые были мною описаны ранее. Теперь, вместо того, чтобы лепить кучу классов, и запоминатьточные названия методов событий, нам достаточно расширить класс до листенера и указать с помощью «@EventHandler», какие функции будут являтся обработчиками событий. Просто? Да не то слово как просто!!
Далее следует 2 наших обработчика событий onJoin() и onQuit(). Первый отвечает а событие входа игрока на сервер, а второй – за уход. С помощью метода event.getPlayer().sendMessage(), мы можем отправить сообщение тому игроку, которое вызвал данное событие(в нашем случае игроку, который зашел). Статический класс ChatColor хранит в себе константы цветов для окраски. Думаю как им пользоваться уже видно из примера. Так же, оба наших обработчка оповещают других игроков на сервере о произошетших событиях, но делают это по разному. В onJoin() с помощью метода event.setJoinMessage() мы меняем привычное сообщение «Player joined the game» на любое другое. А в onQuit() мы поступили инача(в целях примера): убрали вывод сообщения о выходе и сообщаем об этом через метод getServer().broadcastMessage(), который просто посылает всем игрокам на сервере указанное сообщение.
Дело осталось за малым: написание важного файлика plugin.yml и упаковка всего этого в jar-файл.
plugin.yml – это файл описания плагина. В нем задается название плагина, главный класс, описание и какие комманды зарегестрировать за плагинов(об этом позже) и т.д. В нашем случае, файлик должен выглядеть так:
YAML:
name: Dmx First Plugin
main: ru.dmitriymx.bukkit.tutorial.DmxFirstPlugin
description: Простой плагин с сайта dmitriymx.ru
version: 1.0
Правый тык по папке src -> Export. В древе папок, открываем Java и выбираем JAR file и жмем Next. Из голочек оставляем только «Export generated class files and resources» и «Compress the contents of the JAR file». В поле JAR file указываем, куда будем сохранять полученный плагин. После нажатия на Finish, плагин можно класть в папку plugins, запускать сервер и проверять его работу.
Ссылки
Следующая статья:
Документация:
Полезности:
- DmitriyMX.ru / Уроки по Bukkit
- Bukkit API
- Официальный форум Bukkit (eng)
- Русскоязычное сообщество MinePlanet.ru
- Русскоязычное сообщество RuBukkit
- JRE / JDK
- Документация по Java 6
- Java (Beginner) Programming Tutorials
- Основы Java для начинающих
- Справочник по java
- Спецификация языка Ява
- Java эксперт
- Eclipse
- Декомпилятор Java (плагин для Eclipse)
- Старая статья по написанию плагинов
________________________________________
Источник: Пишем простой плагин для Bukkit
это замечание? Если да, то объясните почему
