Jump to content


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


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

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

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

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

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

Read story →    0 comments    -----    bukkit, plugins, команды

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

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

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

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

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

Read story →    3 comments    -----    bukkit, events, plugins

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

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

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

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

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

Read story →    0 comments    -----


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

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

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

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

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

Read story →    10 comments    -----    плагины, bukkit, eclipse

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

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

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

Вся система настроек майнкрафт серверов и плагинов для них держится на конфигурационных файлах. Традиционно в качестве формата конфигов для 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


Read story →    0 comments    -----


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

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

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

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

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

Read story →    3 comments    -----    minecraft, bukkit, плагины

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

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

Прошлой статьей мы начали небольшой цикл на тему написания плагинов для серверов 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).

Read story →    0 comments    -----


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

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

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

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

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

Read story →    0 comments    *****    bukkit plugins плагины