# [Гайд] Создание первой модификации для Hytale: от идеи до добавления предметов и блоков
В отличие от серверных плагинов, которые управляют системной логикой и сетевыми событиями, **модификации (моды)** в Hytale отвечают за наполнение игры новым контентом: кастомными предметами, блоками, мобами, рецептами крафта, 3D-моделями и текстурами.
Hytale использует **data-driven архитектуру**: большая часть игровых сущностей объявляется через декларативные конфигурации (JSON) и связывается с ассетами моделей и текстур.
В этом руководстве мы разберем базовую структуру мода, напишем манифест, создадим кастомный предмет и блок с рецептом крафта.
---
### Необходимые инструменты
1. **Редактор кода / текста:** [VS Code](https://code.visualstudio.com/) (рекомендуется с расширениями *JSON Language Features* и *Even Better TOML*) или любая IDE от JetBrains.
2. **Инструмент для 3D-моделирования:** **Hytale Model Maker (HMM)** (встроен в экосистему Hytale) или [Blockbench](https://www.blockbench.net/) для создания воксельных моделей и анимаций.
3. **Графический редактор:** Aseprite, Photoshop, Paint.NET или GIMP для отрисовки текстур и иконок.
---
### Шаг 1. Анатомия и структура каталогов мода
Каждая модификация Hytale представляет собой отдельный каталог (или zip-архив), содержащий манифест, директории данных и мультимедиа-ресурсов.
Создайте папку для вашего мода (например, `RubyExpansion`) со следующей иерархией:
```text
RubyExpansion/
├── mod.json # Манифест с метаданными мода
├── assets/ # Графика, модели, аудио
│ ├── models/ # Файлы 3D-моделей (.bbmodel / .hytale)
│ │ └── items/
│ │ └── ruby_sword.geo.json
│ ├── textures/ # Растровые текстуры
│ │ ├── items/
│ │ │ ├── ruby_gem.png
│ │ │ └── ruby_sword.png
│ │ └── blocks/
│ │ └── ruby_ore.png
│ └── sounds/ # Кастомные звуковые эффекты
└── data/ # Логика и свойства игровых объектов (JSON)
├── items/ # Определение предметов
│ ├── ruby_gem.json
│ └── ruby_sword.json
├── blocks/ # Определение блоков
│ └── ruby_ore.json
└── recipes/ # Рецепты крафта и плавки
└── ruby_sword_craft.json
Шаг 2. Создание манифеста (mod.json)
В корне мода создайте файл mod.json. Игра считывает этот файл при инициализации для разрешения зависимостей и версионности:
JSON
{
"id": "hytalify:ruby_expansion",
"name": "Ruby Expansion",
"version": "1.0.0",
"description": "Добавляет в игру рубиновую руду, самоцветы и рубиновое оружие.",
"authors": [
"ВашНик"
],
"website": "[https://hytalify.online](https://hytalify.online)",
"minEngineVersion": "1.0.0",
"dependencies": []
}
-
id— уникальный идентификатор мода в форматеnamespace:mod_id(используйте строчные буквы и знак подчеркивания). -
minEngineVersion— минимально совместимая версия клиента/сервера игры.
Шаг 3. Создание кастомного предмета (data/items/ruby_sword.json)
Создадим файл data/items/ruby_sword.json, описывающий боевой меч:
JSON
{
"id": "hytalify:ruby_sword",
"name": "Рубиновый меч",
"category": "weapon",
"rarity": "rare",
"max_stack": 1,
"durability": 750,
"render": {
"model": "hytalify:models/items/ruby_sword",
"texture": "hytalify:textures/items/ruby_sword",
"icon": "hytalify:textures/items/ruby_sword"
},
"combat": {
"damage_type": "slashing",
"base_damage": 32.0,
"attack_speed": 1.4,
"crit_chance": 0.15,
"crit_multiplier": 1.5
},
"behavior": {
"swing_animation": "two_handed_slash",
"can_block": true,
"block_reduction": 0.6
}
}
Совет по путям: всегда используйте пространство имен (namespace) вашего мода в ссылках на ассеты (
hytalify:textures/...), чтобы избежать конфликтов с другими модификациями.
Шаг 4. Создание кастомного блока (data/blocks/ruby_ore.json)
Теперь создадим рубиновую руду, которая будет добываться в подземных пещерах:
JSON
{
"id": "hytalify:ruby_ore",
"name": "Рубиновая руда",
"material": "stone",
"hardness": 4.5,
"resistance": 6.0,
"required_tool": "pickaxe",
"min_tool_tier": "iron",
"textures": {
"all": "hytalify:textures/blocks/ruby_ore"
},
"drops": [
{
"item": "hytalify:ruby_gem",
"count": {
"min": 1,
"max": 3
},
"chance": 1.0
}
],
"light_emission": 2
}
Здесь мы указали, что блок требует железную кирку или выше, имеет легкое свечение в темноте (light_emission: 2) и при разрушении с вероятностью 100% дропает от 1 до 3 рубинов (hytalify:ruby_gem).
Шаг 5. Регистрация рецепта крафта (data/recipes/ruby_sword_craft.json)
Чтобы игроки могли выковать меч на верстаке:
JSON
{
"type": "crafting_table",
"result": {
"item": "hytalify:ruby_sword",
"count": 1
},
"pattern": [
" R ",
" R ",
" S "
],
"ingredients": {
"R": {
"item": "hytalify:ruby_gem"
},
"S": {
"item": "base:stick"
}
}
}
Шаг 6. Создание и привязка 3D-модели
-
Откройте Blockbench или Hytale Model Maker.
-
Создайте геометрию меча, используя низкополигональные воксели (кубы).
-
Нанесите текстуру разрешением 32x32 или 64x64 пикселя.
-
Экспортируйте файл геометрии в папку
assets/models/items/ruby_sword.geo.json, а сохраненную текстуру — вassets/textures/items/ruby_sword.png.
Шаг 7. Установка и проверка в игре
-
Перенесите всю папку
RubyExpansion(или запакованный.zip) в каталог:-
Клиент:
%appdata%/Hytale/mods/(Windows) или~/.local/share/Hytale/mods/(Linux). -
Выделенный сервер: в директорию
mods/в корне сервера.
-
-
Запустите игру или сервер.
-
Откройте чат или консоль и выдайте себе предмет командой:
Plaintext
/give @s hytalify:ruby_sword 1 -
Если предмет появился в инвентаре, отображает правильную 3D-модель и наносит урон — ваша модификация работает штатно.
Есть вопросы по синтаксису или моделям?
Если игра не видит текстуры или выдает ошибку парсинга JSON — прикрепляйте фрагмент конфига и лог в комментариях, поможем разобраться!