Вверх ↑
2019-08-05 163
Плагины - Создание плагина

Создание плагина
Общая информация
   Для создания большинства собственных плагинов не нужны никакие особые инструменты, кроме графического редактора для текстур и текстового редактора для gui диалогов.
Структура файлов
   Все плагины находятся в папке plugins в корне клиента и имеют следующую структуру:

(название плагина)/ info.json
icon.png
gui/
dialog.xml
texture.png
graph/
(структура соответствует структуре файлов в каталоге /media/graph/ клиента)
mob/
entity.png
block/
stone.png
res/
iron.png
diamond.png

Обязательным является только info.json, в котором находится полное описание плагина, icon.png - это иконка плагина размером 64 на 64 пикселя. Если иконка не задана, то будет отображаться та, что установлена по умолчанию.
Описание плагина (info.json)
   Данный файл содержит полное описание плагина, он пишется в формате json с кодировкой UTF-8 и имеет следующий формат:

{
"name": "Краткое название плагина 3-32 символа",
"desc": "Расширенное описание плагина 3-256 символов",
"author": "автор плагина (должен совпадать с ником, если плагин заливается на сайт)",
"version": "версия в формате: (мажорная версия).(минорная версия)",
"gui|mob|graph|armor|terrain|misc|environment|art|fonts": [
{ "file": "имя заменяемого файла", "hash": "его md5 hash" },
],
"block|item": [
{ "file": "stone.png", "id": 1, "meta": 0 }
],
"ingame": [
{ "file": "gui.xml", "hash": "md5 hash" }
]
}

name - в этом поле указывается уникальное название плагина, которое не должно совпадать ни с каким другим названием в каталоге плагинов. После публикации плагина, изменить это название на данный момент времени невозможно, поэтому выбирать его следует аккуратно.

desc - небольшое описание плагина, которое будет отображаться в игре в настройках плагинов.

author - автор плагина (ваш ник на форуме и в игре).

version - версия плагина, должна соответствовать формату #.#, вы можете нумеровать свои версии как 0.1, 0.2, 1.0, 1.1, либо 1.0, 2.0, 3.0 и т.д.

  Далее идут секции, описывающие замену конкретных файлов в клиенте. Название секции как правило соответствует аналогичному каталогу в клиенте игры, файлы из которого заменяются файлами плагина, за исключением секции ingame и block (о них см. ниже).

  Параметр file в секции должен указывать на полный путь к файлу, т.е. иметь расширение и родительские каталоги, если таковые имеются. Параметр hash должен содержать md5hash оригинального файла клиента, который подменяется данным плагином. Именно по этому хешу клиент определяет может ли он заменить оригинальный файл файлом из вашего плагина. Сделано это для того, чтобы в случае обновления оригинального файла ваш плагин перестал работать до тех пор, пока вы не выпустите его обновление с учетом внесенных в оригинальный файл изменений.

  Если оригинального файла в клиенте нет (такое возможно, когда заменяется xml диалог со своими текстурами), то параметр hash не указывается вовсе. Чтобы получить md5hash нужного файла достаточно оставить его пустым в конфиге, запустить клиент с открытой консолью и попробовать установить свой плагин. В консоле при этом будет выведена примерно такая ошибка:

[ERROR]: плагин [название вашего плагина] - файл gui.xml устарел: "" <> ddf78a91685a8f9f3bbec45b720e9a6d

В этой ошибке "ddf78a91685a8f9f3bbec45b720e9a6d" это и есть оригинальный md5hash файла, который ожидает увидеть клиент. Достаточно скопировать его и вставить в свой конфигурационный файл.

Пример файла info.json

{
"name": "Тестер плагинов",
"desc": "Тестовый плагин, замена диалога торговки",
"author": "return",
"version": "0.1",
"gui": [
{ "file": "trader.xml", "hash": "8746f5f12fa868d4a0b67562cd98f3ae" },
{ "file": "stars.png", "hash": "9caae1328d0a701b88b81c5a87202545" }
],
"mob": [
{ "file": "spider.png", "hash": "73e866c18e7d0a666b7f0ee026da16d4" }
],
"graph": [
{ "file": "item/default/items3.png", "hash": "518ccda1d0e0f68abe392689d37044dd" }
],
"block": [
{ "file": "stone.png", "id": 1, "meta": 0 },
{ "file": "tree.png", "id": 6, "meta": 0 },
{ "file": "pumpkin.png", "id": 86 }
]
}
Порядок применения плагинов
   Все включенные плагины применяются последовательно один за другим. Сначала происходит проверка на соответствие hash суммы оригинального файла клиента тому, что указан в настройках и если они совпадают, то происходит замена файла. Если несколько плагинов меняют один и тот же файл, то в конечном счете применен будет тот, который загрузится последним.

   На данный момент включение/выключение плагина из клиента практически всегда заменяет и возвращает все файлы без его перезагрузки.

   Если хотя бы один из файлов плагина не может быть применен (не совпадает hash или не найден оригинальный файл), то плагин не будет применен полностью даже если все остальные файлы ошибок не вызывают.
Секция block (и item)
   Секция block является особенной и работает немного иначе, чем все остальные секции. Если во всех остальных секциях конкретный файл клиента заменяется файлом из плагина, то в данной секции все файлы текстур из плагина заменяют лишь часть оригинальной текстуры terrain.png.

   Чтобы клиент понимал, какую именно часть оригинальной текстуры заменить, ему нужно дать подсказки, а именно указать id блока (и номер metadata, если необходимо). Зная id блока, клиент может получить все текстуры, которые использует данный блок и именно их заменить на текстуры из плагина.

   Большая часть блоков использует одну текстуру для всех сторон. В этом случае конфигурация будет самой простой:
	"block": [
{ "file": "stone.png", "id": 1 }
]
При этом файл stone.png это небольшая текстурка размером 64x64 (для HD версии). Данная настройка изменит текстуру блока камня
. Если же необходимо изменить гранит, у которого такой же id, но другая метадата, то конфигурация будет уже такая:
	"block": [
{ "file": "stone.png", "id": 1, "meta": 1 }
]

Но как быть, если у блока с разных сторон разная текстура? Например у
три различные текстуры: текстура лица, сторон и верх/низ. В этом случае конфигурация остается такой же, как в случае с камнем:
	"block": [
{ "file": "pumpkin.png", "id": 86 }
]
Однако файл pumpkin.png должен содержать уже не 1 текстуру, а все три и располагаться они должны следующим образом:


Порядок следования такой: низ, верх, сторона 1, сторона 2, сторона 3, сторона 4. Если у блока не все 6 текстур различны, то одинаковые просто пропускаются и в файле не указываются.

   В случае с секцией item все работает точно так же, только тут одна текстура всегда будет соответствовать одному предмету с указанным id и meta.
Секция ingame
   В настоящее время там может быть описан только один файл - gui.xml. Это файл с аналогичным названием, лежащий в каталоге /bin/media/xml/ клиента и отвечающий за расположение панелей на основном экране игры.
Быстрый старт
   Самый простой способ максимально быстро получить работающий плагин это скачать один из уже готовых (например, плагин из demo набора https://forum.minecraft-galaxy.ru/plugins/#demo) и после скачивания в клиенте открыть папку с плагином и поменять в нем нужные файлы на свои. Затем уже изменить название, описание и иконку, если это необходимо.
Распространение
   Любой плагин может быть передан любому другому игроку просто путем копирования папки с плагином из каталога /plugins/ вашего клиента в этот же каталог на компьютере игрока. Так следует делать в том случае, если вы не планируете делиться вашими работами с другими игроками.

   Однако если вы все же хотите поделиться ими с другими игроками, то для этого плагин нужно опубликовать в каталоге плагинов на нашем сайте. Подробнее об этой не сложной процедуре читайте в статье Публикация плагина.
BB-code статьи для вставки
Всего комментариев: 0
(комментарии к статье еще не добавлены)
Комментарий
...