Перейти к содержимому


Статьи по плагинам


Команда молодости нашей... (с)

10.01.2016 22:13 | vasco в Статьи по плагинам

- Всем - стоять! Трамвай - прижаться вправо!
- Пендальф!!!
- Я майор милиции, Заслуженный пожарник Поволжья и Почетный дружинник!
Выходить по одному, сабли на пол, руки за голову!..
Команда была "Стоять!"... Я... сказал... "Стоять!"!!!
х/ф "Две сорванные башни"

Вот есть у нас несколько десятков событий баккита. Казалось бы, что еще нужно, чтобы спокойно встретить старость наладить взаимодействие с игроками? К сожалению, Minecraft - это не Black & White, одними жестами игре не объяснишь, что тебе от нее нужно. Рано или поздно приходится иметь дело с консолью, а именно - с консольными командами. Эти самые команды позволяют предельно формализованно отправить сервер в нужном направлении, пояснив с помощью аргументов - что нужно надеть на шею и что делать при встрече с поездом.

Консольные команды условно можно разделить на "административные", вводимые с консоли сервера (если к ней есть доступ), и "пользовательские", которые обычные игроки применяют, используя строку чата. Деление это достаточно условное, поскольку большинство "административных" команд можно запустить непосредственно из клиента игры через строку чата, так и многие "пользовательские" команды могут быть введены с консоли сервера. Так что деление это обуславливается скорее системой "разрешений" или "пермишенсов" (permissions), установленной на сервере для разных групп игроков (обязательно посвятим этому отдельную статью).

Читать полностью →    0 Комментариев:    -----    bukkit, plugins, команды

Не думай о событиях свысока!

05.01.2016 00:23 | vasco в Статьи по плагинам

- Какое главное событие в моей жизни?!
- шепотом Впереди...
- Главное событие в вашей жизни еще впереди!
к/ф "Собачье сердце"

Разрабатывая бесконечную, как мир Майнкрафта, тему написания плагинов, нельзя объехать на хромой кобыле обойти вниманием столь важный момент, как обработка событий Баккита. Собственно, события и их обработка - это основная причина, по которой в качестве Майнкрафт-сервера выбирают именно платформу Баккит (и ее производные). Без них разработка плагинов становится делом не то что муторным, а по сути невозможным. Думаю, процентов 90, а то и 95 действий плагинов сводятся к обработке того или иного баккитовского события. А все остальное - тоже либо подготовка к этому, либо обеспечение этих действий. В дальнейшем для упрощения повествования события баккита будут именоваться просто "событиями", без уточнения источника (хотя события могут генерить и другие компоненты сервера).

События сами по себе - это не скрижали, посланные свыше, а просто объекты (как и все в языке Ява), производные от класса org.bukkit.event.Event. В какой-то момент, при какой-то ситуации, создается объект события определенного типа и запускается в обработку. Появление данного события в обработке как раз и сигнализирует о возникновении некой ситуации на сервере. То есть события - это индикаторы возникновения некой ситуации (штатной или не очень), соответствующей данному типу событий.

Читать полностью →    3 Комментариев:    -----    bukkit, events, plugins

Монументальное полотно "Сеятель"

23.12.2015 20:40 | vasco в Статьи по плагинам

Киса, я давно вас хотел спросить как художник — художника. Вы… рисовать умеете?
к/ф "Двенадцать стульев"

"А когда же будет про Яву?", спросите вы. А "про яву" не будет. Ну не думаете же вы, в самом деле, что я сейчас начну долго и нудно объяснять - что такое пакеты и классы, циклы и интерфейсы? Беседа выйдет, конечно, "безумно интересной", но абсолютно непродуктивной: о программировании на Яве написан вагон и маленькая тележка книжек, тонких и толстых, пересказывать их краткое содержание - что может быть более глупым. Полно форумов, в том числе и на русском, где давно уже по 16 раз обсудили и решили все те проблемы, которые вы считаете неразрешимыми. Есть великолепный сайт, где собраны примеры по Яве на все случаи жизни.

Что касается документации непосредственно на баккит, то тут все немного сложнее. Я в настоящий момент пользуюсь справочником по Bukkit API, размещенным на сайте проекта Spigot. Раньше у баккита был свой голубенький шикарный справочник, но после известных событий он приказал жить долго и счастливо. Тем не менее, основную свою задачу спиготовский справочник выполняет вполне успешно, пользоваться им можно и нужно.

Читать полностью →    0 Комментариев:    -----


Эклипсом по баккиту

15.12.2015 23:08 | vasco в Статьи по плагинам

Ударим автопробегом по бездорожью и разгильдяйству!
И.Ильф, Е.Петров "Золотой теленок"

Почти уверен, что уже вполне назрел сакральный вопрос: "А когда мы приедем?" (с). Отвечаю не менее шаблонно: "Приедем, когда приедем!" (с). Прежде чем приступить к собственно написанию этих самых плагинов, необходимо ответить на не менее важный вопрос - "А на чем (в чем) их писать?". Конечно, брутальные пацаны сейчас закидают меня тухлыми пингвиньими яйцами и скажут, что писать нужно в текстовом редакторе (конечно же, консольном), компилить и собирать - с помощью трехэтажной консольной конструкции, а если чего-то непонятно - RTFM (идти читать этот чертов мануал). До сих пор поражаюсь, почему они не пишут все исключительно на ассемблере?

На самом деле, все уже украдено написано до нас. Для написания плагинов используется все та же ява, на которой написаны и NMS и баккит. А под нее, в свою очередь, создано порядочное количество различных IDE (сред разработки), позволяющих, слава КПСС, обойтись без использования консольных команд. Большинство использует великолепную вещь, именуемую Eclipse(Эклипс). Работает она во всех распространенных операционных системах, имеет множество средств контроля корректности кода, а самое главное - собирает проект, благодаря специально системе компиляции, предельно быстро.

Читать полностью →    10 Комментариев:    -----    плагины, bukkit, eclipse

YML и все-все-все...

07.12.2015 14:59 | vasco в Статьи по плагинам

- Гляди, Пятачок!
- Ой, выходит... то есть... входит!
- Входит!!
- И выхо-о-одит! И входит... Замечательно выходит!
- И выходит! И входит! Хе-хе!
м/ф "Винни-пух"

Вся система настроек майнкрафт серверов и плагинов для них держится на конфигурационных файлах. Традиционно в качестве формата конфигов для mc-серверов используется YAML (он же YML) - формат сериализации данных, базирующийся на сдвиге выражения описания элемента данных относительно начала строки. Чтобы наглядно показать, о чем идет речь, приведу следующий пример (в нем начальные пробелы заменены на точки):
settings:
..debug: false
..save-user-cache-on-stop-only: false
..filter-creative-items: true
..moved-wrongly-threshold: 0.0625
..moved-too-quickly-threshold: 100.0
..bungeecord: false
..late-bind: false
..sample-count: 12
..player-shuffle: 0
..user-cache-size: 1000
..int-cache-limit: 1024
..timeout-time: 60
..restart-on-crash: true
..restart-script: ./start.sh
..netty-threads: 4
..attribute:
....maxHealth:
......max: 2048.0
....movementSpeed:
......max: 2048.0
....attackDamage:
......max: 2048.0


Читать полностью →    0 Комментариев:    -----


Ведро с гайками

26.11.2015 14:42 | vasco в Статьи по плагинам

- Кто он такой, этот Bukkit потерпевший? Куда он пошел? Я его, говорит, первый раз вижу!
к/ф "Мимино"

По сути, оригинальный сервер minecraft, в общих чертах описанный в предыдущей статье, является "вещью в себе", ибо написан так, как было удобно разработчикам. Взаимодействие с внешними модулями сводилось к минимальному набору событий, свойства (объекты) класса объявлялись либо публичными (с полным доступом) либо с дефолтным доступом (на уровне пакета) либо приватными, причем делалось это, похоже, без всякой системы, по крайней мере, какой-то строгой логичной системы я в этом не уловил. Примерно так же обстояло дело и с доступностью методов. Обычный ООП-подход, когда объект (переменная) класса объявляется приватной, а доступ к ней осуществляется методами get() и set() практически не использовался. Ну и таких косяков был - вагон.

И вот группа социально активных граждан сбилась в шайку и сваяла свою серверную сборку, с интерфейсами и событиями.Назвала она свое творение... нет, не Bukkit, назвали это CraftBukkit. Все классы пакета org.bukkit.craftbukkit.v1_X_RY (окончание такое же, как и у соответствующего ему NMS) разложены по подпакетам (item, event, entity и т.д.) и представляют собой, по сути, обертки для оригинальных классов. Однако структура их гораздо более продумана, свойства (переменные) и методы классов имеют четкую прослеживаемую систему видимости и доступа. Все что нужно (ну, почти все) доступно через соответствующие методы getXXX() и setXXX(). Доступ к оригинальному объекту NMS осуществляется [как правило] через метод getHandle(), причем этот оригинальный NMS-объект создается одновременно с соответствующим ему объектом CraftBukkit.

Читать полностью →    3 Комментариев:    -----    minecraft, bukkit, плагины

Что такое NMS и как с ним бороться?

24.11.2015 14:13 | vasco в Статьи по плагинам

Прошлой статьей мы начали небольшой цикл на тему написания плагинов для серверов Bukkit. Статья получилась из разряда "Вообще". Сегодня обратимся к конкретике и рассмотрим основы структуры майнкрафтовского сервера.

- Астронавты, которая тут цапа?!
- Там... ржавая гайка, родной.
- У вас все тут ржавое!
- А эта самая ржавая!
к/ф "Кин-дза-дза"

А вот тут как бы сам по себе, из ниоткуда, возник резонный вопрос: "А для чего мы все это делаем, и что это за Баккит такой?". Попробуем потихоньку разобраться во всех этих майновских хитросплетениях, поскольку без хотя бы минимального понимания механизма работы сервера писать для него плагины будет сущим мучением (испытано на себе, не повторять в домашних условиях!).

Итак, майновский сервер представляет собой jar-файл с набором откомпилированных до уровня байт-кода java-классов. Если интересно, можно открыть его каким-нибудь архиватором типа WinRAR или 7-zip (сейчас меня закидают яйцами пингвинов) и посмотреть как это все разложено по каталогам. Основной набор файлов лежит в подкаталоге /net/minecraft/server/v1_X_RY/, где X - мажорная (основная) версия сервера, а Y - минорный (вторичный) номер билда. Например, для майнкрафта версии 1.8.8 этот подкаталог имеет название "v1_8_R3". В подкаталоге находится более 1.5 тысяч файлов с расширением .class (java байт-код), обеспечивающих работу вашего сервера. Минорная версия (билд) меняется не очень часто, например, билд R3 тянется аж (если мне склероз не изменяет) с версии 1.8.4. Мажорный номер, как вы понимаете, меняется еще реже, в соответствии с изменением версии игры (например, переход с версии 1.7.10 на 1.8).

Читать полностью →    0 Комментариев:    -----


Плагины, говоришь?.. Хех!

23.11.2015 00:46 | vasco в Статьи по плагинам

Добрый день, веселая минутка.
к/ф "Белое солнце пустыни"

Написанное ни в коем случае не претендует на какое-то справочное пособие, для этого есть вполне себе самодостаточная майн-вики. Даже полнотой охвата, логичностью и структурированностью изложенное отличаться не будет. Скорее это будут мысли "на тему", изложенные на бумаге. В основном это будет результат копания в коде майна и баккита, опыт многократного наступания на грабли и муторного исправления тривиальнейших (с высоты полученного опыта) ошибок. Пишется в том числе для того, чтобы предостеречь начинающего плагинописателя от долгого и нудного поиска правильного пути, не всегда самого короткого, но на выходе дающего наилучший результат.

Пока написано 7 статей, 3 еще вчерне набросаны. Буду публиковать по 1-2 в неделю. Дальше посмотрим.
PS: статьи автоматически дублируются в разделе "Серверные плагины", там же можно задавать вопросы, предлагать правки.

Читать полностью →    0 Комментариев:    *****    bukkit plugins плагины