RU ‐ 1.21.1 Create your own Addons for Dragon Survival - DragonSurvivalTeam/DragonSurvival GitHub Wiki

● Примеры и полезные ссылки



● Вступление.

■ Прежде чем продолжить чтение очень советую ознакомиться с двумя предыдущими статьями, чтобы вас не пугала терминология и вы знали базовые вещи о том как это работает. Статья 1 и Статья 2. Я прекрасно понимаю насколько сложной кажется эта тема, но полученные тут знания могут пригодиться вам не только в Minecraft, но в повседневной жизни, а может вообще станут вашим источником дохода в будущем. Готовы страдать во имя обучения? Тогда поехали!

■ Данная статья будет разделена на несколько уровней, чтобы вы постепенно погружались в эту тему.

● Level 0 - Базовые знания и знакомство с аддонами/датапаками

Аддоны это модификации для других модов на Java Minecraft (не путать с Бедрок!), которые улучшают или расширяют их контент и не могут работать без основного мода. Мод, в котором просто есть совместимость с другим модом (например, добавление своих предметов в рецепты других модов) не является аддоном. Но если этот мод добавляет совместимость для двух других модов, то это вполне может считаться аддоном для двух модов.

■ Чтобы было проще понять о чём идёт речь просто посмотрите как выглядят другие аддоны. Например, тут. На скриншоте вы можете видеть 2 аддона к моду JEI, которые добавляют дополнительную информацию такую как лут и спавн мобов или информацию о профессиях жителей и их сделках.



■ Работают аддоны по-разному и могут быть в разных форматах: текстурпак (.zip), ресурспак (.zip), датапак (.zip), мод-аддон (.jar). Все они накладывают свой контент по определённым путям как если бы вы взяли одну группу папок и переместили её в другую группу папок. Папки с одинаковыми именами бы объединились, а файлы с одинаковыми названиями заменились. Сложные моды-аддоны с кастомным кодом могут работать гораздо глубже и гибче, но пока что не думайте о них. Основной акцент будет сделан на датапаках и том как они работают. Краткий смысл любого датапака можно поместить в это изображение:



■ Изменения могут быть внесены внутрь самого файла мода, но если вы делаете что-то хоть немного серьёзное и планируете использовать это больше одного раза, я бы не советовала так делать. При любом обновлении мода, вам придётся делать всё заново, а сам jar формат не любит когда внутри файла что-то меняют и может вести себя непредсказуемо. Например, не применить ваши изменения или удалиться. Проблемой будет также то что вы не сможете нормально поделиться вашими изменениями с другими и не сможете опубликовать это (мало кто из разработчиков разработчиков разрешит такое и вы не пройдёте модерацию).

■ Большинство датапаков работают только на сервере и не требуют установки на клиенте, но если вы будете делать сложносоставные датапаки для Dragon Survival, вам потребуется также устанавливать это на клиенте.

■ Некоторые датапаки требуют создания нового мира и применить их на старый мир не всегда возможно. Если вы будете создавать сложные аддоны для DS, то почти всегда вам потребуется создавать новый мир, если вы хотите на 100% корректного применения всех изменений. Чтобы применить это на старый мир придётся проделать кучу танцев с бубном, а я вам этого не советую. Если вам важно сохранить постройки, читайте предыдущие статьи.

■ Прежде чем попробовать сделать свой датапак, попробуйте установить уже существующий датапак. Это облегчит вашу работу в дальнейшем, если вы ни разу раньше этим не занимались. Скачайте любой датапак из любого источника. Он должен быть в виде папки или архива .zip. Например, отсюда: пример 1, пример 2, пример 3. Прочтите описание этого датапака если оно есть. В большинстве случаев ничего не требуется, но лучше перепроверить. Автор может указать версию игры или требуемые дополнительные моды. Есть два основных способа установить датапак в формате .zip:

■ Способ первый - Ванильный:

  1. Создайте новый мир на 1.21.1. Зайдите в раздел "More", последняя вкладка. Выберите Датапаки. В более старых версиях игры датапаки находятся на главном экране создания мира, а не в отдельной вкладке.
  2. Найдите ваши датапаки на компьютере. Если вы скачивали с Curseforge лаунчера, скорее всего такой датапак находился в разделе ресурспаков. В нашем примере это будет два датапака - один на динамичный свет, другой на анимацию спавна мобов. Вы можете установить другой, в данном случае разницы нет.
  3. Вручную или через кнопку перетащите эти .zip в игру.
  4. Подтвердите, что вы хотите их добавить.


  1. Новые датапаки должны появиться в левом столбце (Available). Если не появляются, значит есть проблемы в датапаке. Например, отсутствует/сломана pack.mcmeta (текстовый файл).
  2. Вам надо нажать около них на стрелочку, переместить в правый столбец (Selected) и нажать Done. Далее возможны два события:
  3. Первый: всё хорошо, вы можете создать новый мир и проверить что датапак работает.
  4. Второй: что-то было сломано внутри jsons этого датапака и он не работает. В таком случае поможет просмотр latest.log для исправления ошибки или сообщение автору о том что его датапак не работает (и обязательно прикладывайте логи, без них ваш багрепорт будет неполным).
  5. Если всё запускается без ошибок, создайте новый мир и проверьте что всё работает: введите команду /datapack list (читы должны быть включены). Также проверьте в самой игре что датапак делает именно то что вы ожидаете от него. Не всегда игра будет выдавать ошибку.


■ Способ второй - Open Loader:

■ Минусом ванильной установки датапаков является то что вам потребуется каждый раз для каждого нового мира делать занудные манипуляции, а чтобы добавить в уже существующий мир придётся проделать дополнительные действия: добавить датапак в папку datapacks, зайти в игру и включить датапак с помощью команды и так далее. Чтобы избежать данных сложностей, проще использовать мод Open Loader. Это будет работать автоматически и в том числе позволит публиковать модпаки на Curseforge без отдельной регистрации модов-библиотек. OpenLoader также поддерживает ресурспаки.

  1. Как и в прошлый раз скачайте любой датапак + установите Open Loader в свой модпак.
  2. Запустите Minecraft, но не создавайте новый мир и просто выйдите из игры. Это нужно чтобы конфиг сгенерировался в CURSEFORGE\Instances\Play as Dragon Comfort Edition\config\openloader\packs (у вас может быть другой путь).
  3. Всё что вам нужно сделать это поместить архив или папку с аддоном в этот конфиг. После этого вы можете запустить игру и создать новый мир. В некоторых случаях будет достаточно перезайти в мир или нажать F3+T, но иногда может потребоваться новый мир.
  4. Проверить что датапак работает можно также как в предыдущем способе.


■ Теперь вы знаете как установить 90% всех датапаков, но в некоторых случаях они могут быть более сложносоставными и требовать, например, установки этого же файла в раздел ресурспаков. Обычно такое происходит там где кроме папки Data присутствует папка Assets.



● Level 1 - Изменение существующих данных

ПРЕДУПРЕЖДЕНИЕ: не используйте это для воровства чужого контента! В нашем комьюнити это крайне сильно осуждается и вы рискуете лишиться репутации на всю жизнь, а также быть забаненным везде.

■ Чтобы начать вам потребуется программа-архиватор 7-zip и Notepad++. Вы можете использовать встроенные в Windows Блокнот и WinRar, но они не удобные.

■ Готовы для небольшой тренировки? В создании датапаков лучше начинать с простого. Предположим, что вы хотите чтобы северный тип тела из Dragon Survival бегал в два раза быстрее:

  1. Скачайте .jar файл мода Dragon Survival и откройте его архиватором.

  2. Выберите тут два файла - Data и Assets.

  3. Перенесите их в любую пустую папку на вашем рабочем столе.



■ Теперь нужно найти нужный файл. В нашем случае это Новая папка\data\dragonsurvival\dragonsurvival\dragon_body\north.json. Откройте с помощью Notepad++ или Блокнота. Внутри вы увидите это. Чтобы изменить скорость с замедленной на удвоенную, вам нужно около minecraft:generic.movement_speed поменять с -0.3 на 2.0. Сохраните свои изменения.

Подсказка: Обратите внимание на add_multiplied_total. Это означает что данная цифра является множителем (*). По умолчанию базовая скорость 1.0 умножается на -0.3. В других параметрах есть add_value - это просто суммирование (+), а не умножение (*).



■ Удалите все другие файлы и папки, которые нам не нужны, сохранив только data\dragonsurvival\dragonsurvival\dragon_body\north.json. Если оставить их, вы можете поломать какое-то обновление или другой аддон.

■ Теперь у вас есть основа для датапака. Остался последний штрих: добавить pack.mcmeta (текстовый файл) и pack.png (картинка 16х16). Должен получиться такой файл. Можете скачать пример тут - Level_1.zip. Но лучше конечно, если вы сами добьётесь такого результата в качестве тренировки :)

Домашняя работа для закрепления:

  1. Измените параметры также у каждого другого типа тела, а не только у северного.
  2. Измените иконку баннера пещерного дракона на лесного, изменив "altar_banner": "dragonsurvival:textures/gui/custom/altar/cave/altar_icon.png" на "altar_banner": "dragonsurvival:textures/gui/custom/altar/forest/altar_icon.png"
  3. [сложное] Измените координаты, на которых спавнится end_platform.json и посмотрите что будет. Это находится в data_maps.


● Level 2 - Удаление параметров и добавление своих

■ Просто редактировать цифры и true на false это довольно полезно, но вы не сможете добиться многого с этим. Те файлы с которыми вы работали на 1 уровне имеют формат jsons. Это не полноценный язык программирования, а просто формат хранения данных для JavaScript. Вам не нужно забивать голову деталями, это просто для общего развития. Json может быть как одной прямой строкой, так и просто более удобной для чтения лестницей. Пробелы и отступы не имеют никакого значения для этого формата.



■ Для начинающих довольно большой проблемой может быть проверка jsons на валидность - это синтаксис, запятые, [], {} и прочие штуки, связанные с тем как компьютер понимает какие данные относятся к каким пунктам. Вы можете изучить это отдельно в интернете ибо я не хочу расписывать всё это. Просто смотрите как это сделано в других jsons. Что из всего этого вам действительно важно знать:

  • Пишите всё только с маленькой буквы. Никаких dragonsurvival:Dragon_Custom_Species, body_TypeX.json и прочих приколов. Только православный нижний регистр - dragonsurvival:dragon_custom_species и body_typex.json.

  • Не везде вы можете добавлять больше чем один параметр. Для Dragon Survival лучше проверять это через Генератор. Если вы видите что где-то имеется string/list, значит это поддерживает несколько параметров (id предметов, тегов, названий, цифр и так далее). Не забудьте выбрать правильную версию игры на сайте.



  • Если у вас подряд идёт несколько параметров, то они обязаны иметь запятую для разделения. Например:

{"animation": "dragonsurvival:dragon_north", "backpack_offset": { "scale": [ 0.85, 0.85, 0.85 ] }} - Правильно

{"animation": "dragonsurvival:dragon_north" "backpack_offset": { "scale": [ 0.85 0.85 0.85 ] }} - НЕ правильно

  • Если у вас был 1 параметр, а вы хотите добавить несколько, данные нужно поместить в [] скобки.

{"animation": "dragonsurvival:dragon_north", "backpack_offset": { "scale": [ 0.85, 0.85, 0.85 ] }} - Правильно

{"animation": "dragonsurvival:dragon_north", "backpack_offset": { "scale": 0.85, 0.85, 0.85 }} - НЕ правильно

■ Проще всего делать проверку валидности через этот сайт или использовать этот плагин для Notepad++ (но он не всегда говорит правду о валидности).



■ Давайте вернёмся к нашим драконам. Новый квест: сделайте так чтобы центральный тип телосложения имел не только dragonsurvival:flight_speed, но и dragonsurvival:experience (множитель выпадения опыта). В первую очередь что вам потребуется, это узнать какие модификаторы вообще существуют. Ванильные можно посмотреть тут, а из DS тут. Многие крупные моды могут делать свои модификаторы, но спрашивайте где их искать у разработчиков или смотрите сами на их Гитхабе.

■ Так как в коде вы скорее всего ничего не понимаете как и я когда-то, немного подскажу. Чтобы понять ЧТО именно писать вам надо понять откуда это. Если это что-то ванильное то в начале будет minecraft:, если из Dragon Survival то dragonsurvival:. Во вторую часть вставляется ID. В нашем случает это experience.



■ Мы получили информацию, теперь смотрим дальше. Добавляем это в center.json. Не забываем про [] и запятые. Сохраняем, делаем датапак, проверяем в игре. В целом всё. Остальное только собственными экспериментами проверять, тестировать, пробовать.



■ В DS многие параметры являются скрытыми и не используются в стандартных данных. Ищите их в коде или в сайте-генераторе. Например, если строка "bodies" в "your_species_name.json" отсутствует или пуста, то применяются стандартные типы тел (северный, южный и тд). Вот пример того как это работает в аддоне на грифона, где используется кастомная модель и типы тел:



■ Что насчёт попробовать создать своего дракона из уже имеющихся ассетов? В целом, той информации, которая написана выше уже должно быть достаточно, но начнём с простого - попробуйте сделать копию пещерного дракона, но с какими-то своими изменениями. Также это не должно быть заменой стандартного пещерного дракона! Назовём его Тестовый Пещерный Дракон (test_cave_dragon). Опять применяем архиватор на Dragon Survival, достаём папки Data/Assets.

■ Начинаем работу с папки data\dragonsurvival\data_maps. Откроем body_icons.json и готовимся напрягать извилины. Сейчас будет сложная информация, готовьте своё воображение. Некоторые json поддерживают объединение данных. Вот у нас есть стандартный файл в котором есть данные для лесного, пещерного, морского дракона. Вам нужно УДАЛИТЬ их и заменить на test_cave_dragon. Стандартные драконы от этого в моде не пропадут, потому что этот json при запуске игры объединятся и игра будет считать что в этом json есть лесной, пещерный, морской и ваш test_cave_dragon. Получится Pen-Pineapple-Apple как в меме.

■ Конечно, если вы не планируете вообще ни с кем делиться своим творчеством, можете не удалять стандартных драконов и просто добавить свою строчку, но очень не советую этого делать. Лучше сразу учиться всё делать правильно, а не как попало. Такие вещи нужны для чистоты и совместимости с другими аддонами и апдейтами самого Dragon Survival. Мало ли в будущем мы решим сделать в чём-то ребаланс, а наши изменения не будут применяться потому что у вас это было продублировано?



■ Ту же самую процедуру нужно сделать с diet_entries.json (если ничего не добавлять будет диета человека), dragon_beacon_data.json (если ничего не добавлять, ничего не будет происходить с маяком при взаимодействии), end_platforms.json (если ничего не добавлять будет спавниться на платформе человека), stage_resources.json (если ничего не добавлять, будут или фиолетовые текстуры или плейсхолдеры). Удалите данные от стандартных драконов, добавьте такие же данные для test_cave_dragon.

■ В data\dragonsurvival\dragonsurvival оставьте только папку dragon_species, остальные удалите. Также удалите лесного и морского дракона, а cave_dragon.json переименуйте в test_cave_dragon.json. В самом файле ничего трогать не нужно. На это всё. Просто упакуйте это всё в датапак для тестирования. Удалите всё что вы не меняли. Проверьте этот датапак в игре, создайте новый мир. У вас в алтаре должен появиться ваш test_cave_dragon.

■ Как видите, у него не хватает локализации во многих местах и текстуры куда-то делись, но мы сейчас это исправим! Возвращаемся в самый верх датапака. Видим папку assets, если вы её не удалили. Удаляем там всё, кроме assets\dragonsurvival\lang\en_us.json и assets\dragonsurvival\skin.

■ Открываем en_us.json и смотрим что там - очень много языковых ключей. Вам они не нужны. Просто замените их этими: en_us.json (скачать). Если хотите, можете подредактировать описания и посмотреть как это работает. Больше про локализацию можно прочесть тут.



■ В default_parts удалите лесного, морского, переименуйте папку пещерного в test_cave_dragon. Все файлы внутри откройте и также замените dragonsurvival:cave_dragon на dragonsurvival:test_cave_dragon. Теперь у вашего дракона будет зарегистрированы стандартные текстуры, которые показывают при открытии алтаря.

■ Далее папка parts. Сейчас будет очень рутинно, но заходим в каждый файл пещерного и добавляем нашего тестового дракона в строчке applicable_species. Переименовывать саму папку не нужно! Если читали предыдущие статьи, знаете как сделать переименование внутри всех файлов быстро.

■ Собираем вашего трансформера в датапак и проверяем ещё раз, но теперь важный момент. Если вы НЕ пользуетесь OpenLoader, вам нужно добавить ваш новый датапак не только в папку датапаков, но и в папку ресурсов - resourcepacks+включить их. После этого запускайте майнкрафт как раньше и проверяйте как всё работает. Больше ничего делать не потребуется.

■ Ваш итоговый вариант должен выглядеть так: test_cave_dragon.zip (скачать)



Домашняя работа для закрепления:

  1. Отключить истощение очков опыта после того как мана закончилась. Оставьте пустым "mana_handling": {} для каждого вида дракона. Результат.
  2. Измените список навыков для этого тестового пещерного дракона не ломая навыки стандартного пещерного дракона. Добавьте к тестовому дракону навыки test_function и test_heal. Вам потребуется создать новый тег со списком навыков вашего тестового дракона и изменить тег навыков в json вида.
  3. Добавьте свой кастомный штраф для него, новую диету или диету человека.
  4. Попробуйте изменить что-то в ванильном майнкрафте, используя ванильную вики. Или просто прочитайте её, чтобы расширить сознание.

Подсказка 1: на протяжении всей работы у вас могут быть проблемы. Краши, отсутствие функций и битьё головой об клавиатуру. Не стесняйтесь смотреть в latest.log. Даже если вы не понимаете что там написано (я вот лично не понимаю), очень часто там прямо написано в каком файле проблема. Просто воспользуйтесь поиском ctrl+f в логах. Введите там dragonsurvival, datapack или любые другие сочетания, которые могут быть связаны с вашим датапаком.

Подсказка 2: у датапаков и ресурспаков имеется Иерархия. Если какой-то из датапаков заменяет один и тот же не-комбинируемый файл, то будут применены только параметры самого верхнего в иерархии. Если же файлы являются комбинируемыми удалить из них что-то насильно можно только с помощью "replace:" true. Например, такое можно сделать с тэгами и полностью убирать их благодаря этому. Список функций для тегов можно посмотреть тут.

Подсказка 3: игроки могут хотеть установить не только ваш аддон, но и другие. Чтобы у вас не было проблем с совместимостью, советую вдумчиво подходить к использованию подсказки 2. Например, вы хотите изменить тег навыков пещерного дракона и убрать там contrast_shower. Скорее всего вы воспользуетесь функцией replace, скопируете все пункты и уберёте из него contrast_shower, но правильнее будет воспользоваться функцией remove и убрать только contrast_shower. Тогда если какой-то другой аддон добавляет новые навыки в этот список, ваш аддон не будет конфликтовать с ним.



● Level 3 - WIP Превращение датапака в мод-аддон с помощью Mcreator

■ Не переходите к этому пункту, если серьёзно не закончили со 2 уровнем. Не все идеи можно реализовать только датапаком. Майнкрафт и Dragon Survival позволяют всё делать только в определённых рамках, но они не дадут вам зарегистрировать новый предмет, эффект, новые блоки и сложные функции. Также датапаки даже с OpenLoader намного муторнее устанавливать, чем обычные моды. Если вы хотите делать что-то такое вам нужно писать кастомный код и знать Java программирование, но это уже что-то для 4 уровня. Для уровня 3 лучше воспользоваться программой под названием Mcreator чтобы сгенерировать какие-то простые функции или просто сам .jar.

■ Именно таким способом сделан Аддон на Грифона. На Мкреатор в данном случае было сделано гнездо, предметы еды и кастомная процедура дропа перьев для навыка. Всё остальное (data/assets) сделаны только с помощью предыдущих пунктов. В самом Mcreator датапаки не создаются. Вам нужно будет делать это как сказано в предыдущих пунктах. Вы можете также открыть этот аддон с помощью архиватора и посмотреть как он работает. Этот аддон был сделан специально чтобы показать все возможности новой системы с датапаками.

■ Позже я дополню эту часть, но пока что рандомные подсказки вам:

  • Для большинства assets будет достаточно F3+T, но если вы что-то меняете в data, лучше создавайте новый мир для тестирования.
  • Вы должны сделать весь набор анимаций, который есть у стандартной модели дракона, если хотите кастомную модель. Да, много, но что поделать.
  • Если вы хотите чтобы локализация у эмоций была другая, используйте translation_override. Пример:

image

  • Стандартные типы тел сделаны ТОЛЬКО с помощью анимаций. Модель у всех используется одинаковая. Это сделано для совместимости со скинами и текстурами. Советую вам делать так же для ваших новых типов тел.
  • Система кастомных скинов не работает с кастомными моделями.
  • В вашей модели обязательно должны быть кости с названием: Neck (для скрытия от первого лица), BackpackBone (для корректного отображения рюкзака из мода Sophisticated backpacks), RightItem/LeftItem (место где рендерится предмет), RightItem_jaw/LeftItem_jaw (место рендера предмета для альтернативного конфига), и MountingBone (сейчас не используется, но может использоваться в будущем).
  • С помощью colors.py можно генерировать average_hue автоматически на основе среднего цвета вашей текстуры (для редактора). Это является скриптом на Python. Вам нужно установить IDLE и библиотеку. Из командной строки установите это всё python -m pip install pillow. Потом закиньте colors.py в IDLE и запустите скрипт.

image

  • Вы можете привязать выдачу навыка к предмету с помощью команды: /give @s stick[dragonsurvival:dragon_abilities={abilities:"#dragonsurvival:cave_dragon", applicable_species:"#dragonsurvival:cave"}]. В конкретно этом примере у вас как у пещерного ничего не поменяется, но главное суть.

image

  • Ваши текстуры не должны быть больше 512х512, но если вы хотите кастомные, вам нужно указать их ширину и высоту в json типа тела. Подробности смотрите в генераторе или на картинке:

image

  • Фиолетовые текстуры при добавлении новой модели? Настроить привязку текстур в редакторе можно с помощью data_maps.
  • Крашится с "Cannot assign field "visible" because "this.uiButton" is null"? Вы забыли добавить части тела в редакторе для каждой строки (assets\dragonsurvival\skin\parts). Если вы не планируете использовать их, просто создайте пустой плейсхолдер и добавляйте его в папки.
  • Когда пользуетесь генератором, убедитесь что вы на правильной версии игры (зелёная кнопка справа вверху, выберите 1.21.1).
  • Если в генераторе у вас Operation - Expected nothing на некоторых пунктах, попробуйте другие браузеры, которые не на Chromium.

image

● Level 4 - WIP Написание собственного кода и использование дата-гена

■ Я лично сюда не лезу и если вы не знаете Java на все 5+, то оно вам не надо. Также и гайдов подробный не будет. Вы просто можете посмотреть наш гитхаб и повторить то что написано в коде напрямую. Там огромное количество комментариев, пояснений и в целом контента для шарящих.