RU ‐ 1.21.1 Create your own Addons for Dragon Survival - DragonSurvivalTeam/DragonSurvival GitHub Wiki
● Примеры и полезные ссылки
- Пример - Отключение кастомной системы еды драконов из модпака Comfort Edition - Comfort_No_Dragon_Food.zip (пещерные драконы не смогут есть свою обугленную еду и будут получать отравление)
- Пример - Отключение всех дебафов драконов и навыков, связанных с этим, из модпака Comfort Edition - Comfort_No_Penalties.zip
- Пример - Удаление разрушительной силы для древней стадии роста - No_crushing_for_ancient.zip
- Пример - Отключение крыльев на старте, чтобы игроку нужно было посетить The End и найти там предмет Wing Grant - Hardcore_No_Wings.zip
- Пример из уровня 1 с изменёнными статами типа тела - Level_1.zip
- Пример из уровня 2 с языковым файлом - en_us.json (скачать)
- Пример из уровня 3 с копией пещерного дракона - test_cave_dragon.zip (скачать)
- Аддон-пример с грифоном - https://legacy.curseforge.com/minecraft/mc-mods/dragon-survival-griffin-addon
- Сайт-генератор - https://dragonsurvivalteam.github.io/partners/
- Список кастомных predicates, которые нужно копировать в другие части генератора - https://dragonsurvivalteam.github.io/dragonsurvival/predicates/
- Статья про создание датапаков в ваниле - https://minecraft.wiki/w/Tutorial:Creating_a_data_pack
- Список тегов Neoforge - https://github.com/neoforged/NeoForge/blob/1.21.x/src/main/java/net/neoforged/neoforge/common/Tags.java
- Список и примеры дополнительных параметров для тегов в Neoforge - https://docs.neoforged.net/docs/resources/server/tags/#tag-file-format
● Вступление.
■ Прежде чем продолжить чтение очень советую ознакомиться с двумя предыдущими статьями, чтобы вас не пугала терминология и вы знали базовые вещи о том как это работает. Статья 1 и Статья 2. Я прекрасно понимаю насколько сложной кажется эта тема, но полученные тут знания могут пригодиться вам не только в Minecraft, но в повседневной жизни, а может вообще станут вашим источником дохода в будущем. Готовы страдать во имя обучения? Тогда поехали!
■ Данная статья будет разделена на несколько уровней, чтобы вы постепенно погружались в эту тему.
● Level 0 - Базовые знания и знакомство с аддонами/датапаками
■ Аддоны это модификации для других модов на Java Minecraft (не путать с Бедрок!), которые улучшают или расширяют их контент и не могут работать без основного мода. Мод, в котором просто есть совместимость с другим модом (например, добавление своих предметов в рецепты других модов) не является аддоном. Но если этот мод добавляет совместимость для двух других модов, то это вполне может считаться аддоном для двух модов.
■ Чтобы было проще понять о чём идёт речь просто посмотрите как выглядят другие аддоны. Например, тут. На скриншоте вы можете видеть 2 аддона к моду JEI, которые добавляют дополнительную информацию такую как лут и спавн мобов или информацию о профессиях жителей и их сделках.
■ Работают аддоны по-разному и могут быть в разных форматах: текстурпак (.zip), ресурспак (.zip), датапак (.zip), мод-аддон (.jar). Все они накладывают свой контент по определённым путям как если бы вы взяли одну группу папок и переместили её в другую группу папок. Папки с одинаковыми именами бы объединились, а файлы с одинаковыми названиями заменились. Сложные моды-аддоны с кастомным кодом могут работать гораздо глубже и гибче, но пока что не думайте о них. Основной акцент будет сделан на датапаках и том как они работают. Краткий смысл любого датапака можно поместить в это изображение:
■ Изменения могут быть внесены внутрь самого файла мода, но если вы делаете что-то хоть немного серьёзное и планируете использовать это больше одного раза, я бы не советовала так делать. При любом обновлении мода, вам придётся делать всё заново, а сам jar формат не любит когда внутри файла что-то меняют и может вести себя непредсказуемо. Например, не применить ваши изменения или удалиться. Проблемой будет также то что вы не сможете нормально поделиться вашими изменениями с другими и не сможете опубликовать это (мало кто из разработчиков разработчиков разрешит такое и вы не пройдёте модерацию).
■ Большинство датапаков работают только на сервере и не требуют установки на клиенте, но если вы будете делать сложносоставные датапаки для Dragon Survival, вам потребуется также устанавливать это на клиенте.
■ Некоторые датапаки требуют создания нового мира и применить их на старый мир не всегда возможно. Если вы будете создавать сложные аддоны для DS, то почти всегда вам потребуется создавать новый мир, если вы хотите на 100% корректного применения всех изменений. Чтобы применить это на старый мир придётся проделать кучу танцев с бубном, а я вам этого не советую. Если вам важно сохранить постройки, читайте предыдущие статьи.
■ Прежде чем попробовать сделать свой датапак, попробуйте установить уже существующий датапак. Это облегчит вашу работу в дальнейшем, если вы ни разу раньше этим не занимались. Скачайте любой датапак из любого источника. Он должен быть в виде папки или архива .zip. Например, отсюда: пример 1, пример 2, пример 3. Прочтите описание этого датапака если оно есть. В большинстве случаев ничего не требуется, но лучше перепроверить. Автор может указать версию игры или требуемые дополнительные моды. Есть два основных способа установить датапак в формате .zip:
■ Способ первый - Ванильный:
- Создайте новый мир на 1.21.1. Зайдите в раздел "More", последняя вкладка. Выберите Датапаки. В более старых версиях игры датапаки находятся на главном экране создания мира, а не в отдельной вкладке.
- Найдите ваши датапаки на компьютере. Если вы скачивали с Curseforge лаунчера, скорее всего такой датапак находился в разделе ресурспаков. В нашем примере это будет два датапака - один на динамичный свет, другой на анимацию спавна мобов. Вы можете установить другой, в данном случае разницы нет.
- Вручную или через кнопку перетащите эти .zip в игру.
- Подтвердите, что вы хотите их добавить.
- Новые датапаки должны появиться в левом столбце (Available). Если не появляются, значит есть проблемы в датапаке. Например, отсутствует/сломана
pack.mcmeta
(текстовый файл). - Вам надо нажать около них на стрелочку, переместить в правый столбец (Selected) и нажать Done. Далее возможны два события:
- Первый: всё хорошо, вы можете создать новый мир и проверить что датапак работает.
- Второй: что-то было сломано внутри jsons этого датапака и он не работает. В таком случае поможет просмотр latest.log для исправления ошибки или сообщение автору о том что его датапак не работает (и обязательно прикладывайте логи, без них ваш багрепорт будет неполным).
- Если всё запускается без ошибок, создайте новый мир и проверьте что всё работает: введите команду
/datapack list
(читы должны быть включены). Также проверьте в самой игре что датапак делает именно то что вы ожидаете от него. Не всегда игра будет выдавать ошибку.
■ Способ второй - Open Loader:
■ Минусом ванильной установки датапаков является то что вам потребуется каждый раз для каждого нового мира делать занудные манипуляции, а чтобы добавить в уже существующий мир придётся проделать дополнительные действия: добавить датапак в папку datapacks, зайти в игру и включить датапак с помощью команды и так далее. Чтобы избежать данных сложностей, проще использовать мод Open Loader. Это будет работать автоматически и в том числе позволит публиковать модпаки на Curseforge без отдельной регистрации модов-библиотек. OpenLoader также поддерживает ресурспаки.
- Как и в прошлый раз скачайте любой датапак + установите Open Loader в свой модпак.
- Запустите Minecraft, но не создавайте новый мир и просто выйдите из игры. Это нужно чтобы конфиг сгенерировался в
CURSEFORGE\Instances\Play as Dragon Comfort Edition\config\openloader\packs
(у вас может быть другой путь). - Всё что вам нужно сделать это поместить архив или папку с аддоном в этот конфиг. После этого вы можете запустить игру и создать новый мир. В некоторых случаях будет достаточно перезайти в мир или нажать F3+T, но иногда может потребоваться новый мир.
- Проверить что датапак работает можно также как в предыдущем способе.
■ Теперь вы знаете как установить 90% всех датапаков, но в некоторых случаях они могут быть более сложносоставными и требовать, например, установки этого же файла в раздел ресурспаков. Обычно такое происходит там где кроме папки Data присутствует папка Assets.
● Level 1 - Изменение существующих данных
■ ПРЕДУПРЕЖДЕНИЕ: не используйте это для воровства чужого контента! В нашем комьюнити это крайне сильно осуждается и вы рискуете лишиться репутации на всю жизнь, а также быть забаненным везде.
■ Чтобы начать вам потребуется программа-архиватор 7-zip и Notepad++. Вы можете использовать встроенные в Windows Блокнот и WinRar, но они не удобные.
■ Готовы для небольшой тренировки? В создании датапаков лучше начинать с простого. Предположим, что вы хотите чтобы северный тип тела из Dragon Survival бегал в два раза быстрее:
-
Скачайте .jar файл мода Dragon Survival и откройте его архиватором.
-
Выберите тут два файла - Data и Assets.
-
Перенесите их в любую пустую папку на вашем рабочем столе.
■ Теперь нужно найти нужный файл. В нашем случае это Новая папка\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. Но лучше конечно, если вы сами добьётесь такого результата в качестве тренировки :)
■ Домашняя работа для закрепления:
- Измените параметры также у каждого другого типа тела, а не только у северного.
- Измените иконку баннера пещерного дракона на лесного, изменив
"altar_banner": "dragonsurvival:textures/gui/custom/altar/cave/altar_icon.png"
на"altar_banner": "dragonsurvival:textures/gui/custom/altar/forest/altar_icon.png"
- [сложное] Измените координаты, на которых спавнится 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 (скачать)
■ Домашняя работа для закрепления:
- Отключить истощение очков опыта после того как мана закончилась. Оставьте пустым
"mana_handling": {}
для каждого вида дракона. Результат. - Измените список навыков для этого тестового пещерного дракона не ломая навыки стандартного пещерного дракона. Добавьте к тестовому дракону навыки
test_function
иtest_heal
. Вам потребуется создать новый тег со списком навыков вашего тестового дракона и изменить тег навыков в json вида. - Добавьте свой кастомный штраф для него, новую диету или диету человека.
- Попробуйте изменить что-то в ванильном майнкрафте, используя ванильную вики. Или просто прочитайте её, чтобы расширить сознание.
■ Подсказка 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
. Пример:
- Стандартные типы тел сделаны ТОЛЬКО с помощью анимаций. Модель у всех используется одинаковая. Это сделано для совместимости со скинами и текстурами. Советую вам делать так же для ваших новых типов тел.
- Система кастомных скинов не работает с кастомными моделями.
- В вашей модели обязательно должны быть кости с названием: 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 и запустите скрипт.
- Вы можете привязать выдачу навыка к предмету с помощью команды:
/give @s stick[dragonsurvival:dragon_abilities={abilities:"#dragonsurvival:cave_dragon", applicable_species:"#dragonsurvival:cave"}]
. В конкретно этом примере у вас как у пещерного ничего не поменяется, но главное суть.
- Ваши текстуры не должны быть больше 512х512, но если вы хотите кастомные, вам нужно указать их ширину и высоту в json типа тела. Подробности смотрите в генераторе или на картинке:
- Фиолетовые текстуры при добавлении новой модели? Настроить привязку текстур в редакторе можно с помощью data_maps.
- Крашится с "Cannot assign field "visible" because "this.uiButton" is null"? Вы забыли добавить части тела в редакторе для каждой строки (assets\dragonsurvival\skin\parts). Если вы не планируете использовать их, просто создайте пустой плейсхолдер и добавляйте его в папки.
- Когда пользуетесь генератором, убедитесь что вы на правильной версии игры (зелёная кнопка справа вверху, выберите 1.21.1).
- Если в генераторе у вас Operation - Expected nothing на некоторых пунктах, попробуйте другие браузеры, которые не на Chromium.
● Level 4 - WIP Написание собственного кода и использование дата-гена
■ Я лично сюда не лезу и если вы не знаете Java на все 5+, то оно вам не надо. Также и гайдов подробный не будет. Вы просто можете посмотреть наш гитхаб и повторить то что написано в коде напрямую. Там огромное количество комментариев, пояснений и в целом контента для шарящих.