--- title: Основы layout: default root: ../.. idx: 1.1 description: Как создать проект мода, включая init.lua, mod.conf и прочее. redirect_from: - /ru/chapters/folders.html - /ru/basics/folders.html --- ## Введение При создании модов очень важно понимать структуру проекта мода. В этой главе вы узнаете как работает моддинг в Minetest и создадите свой первый мод. - [Что такое Игры и что такое Моды?](#what-are-games-and-mods) - [Где хранятся моды?](#where-are-mods-stored) - [Создание первого мода](#creating-your-first-mod) - [Директория](#mod-directory) - [mod.conf](#modconf) - [init.lua](#initlua) - [Итого](#summary) - [Зависимости](#dependencies) - [Модпаки](#mod-packs) ## Что такое Игры и что такое Моды? Сила Minetest — в возможности легко создавать игры без необходимости создания собственной воксельной графики, воксельных алгоритмов или крутого сетевого кода. В Minetest Игра — это набор модулей, работающих вместе и создающих контент и игровую механику. Модуль (или мод) — это набор скриптов и материалов. Конечно, можно создать игру только из одного мода, но такое встречается редко, ведь так труднее настраивать и заменять отдельные элементы игры, не затрагивая всё остальное. Кроме того, вы можете распространять свой мод без привязки к конкретной игре. В этом случае он также будет называться *модом* в традиционном смысле — модификация. Такие моды изменяют или добавляют различные элементы игры. Как моды в составе игры, так и просто сторонние моды используют один и тот же API. В этой книге описаны основы Minetest API, и она подходит как для разработчиков игр, так и для моддеров. ## Где хранятся моды? У каждого мода есть своя директория, в которой лежат Lua-код, текстуры, модели и звуки. Minetest ищет моды в нескольких определённых папках. В документации эти папки обозначаются как *mod load paths*. Для каждой созданной карты или сохранённой игры Minetest ищет моды в трёх местах в следующем порядке: 1. Моды Игры: Эти моды являются неотъемлимой частью Игры. Папки: `minetest/games/minetest_game/mods/`, `/usr/share/minetest/games/minetest/` 2. Глобальные моды: место куда почти всегда устанавливаются моды. Если не уверены, кладите их сюда. Папка: `minetest/mods/` 3. Моды Мира: эти моды относятся к конкретной созданной карте. Папка: `minetest/worlds/world/worldmods/` `minetest` — это директория для пользовательских фалов. Чтобы её найти, запустите Minetest и нажмите "Папка данных пользователя" на вкладке "Подробней". Во время загрузки модов Minetest проверяет по порядку каждое из перечисленных расположений. Если он обнаружит несколько модов с одинаковым именем, то мод, найденный позже, заменит собой предыдущий. Таким образом можно подменять моды игры, помещая мод с таким же названием в папку Глобальных модов. ## Создание первого мода ### Директория Перейдите в глобальную папку модов (Подробней > Папка данных пользователя > mods) и создайте новую папку под названием "mymod". `mymod` — это имя мода. У каждого мода должно быть уникальное *имя*, технический идентификатор (id), по которому можно ссылаться на этот мод. Имя мода может состоять из букв, цифр и подчёркиваний. Хорошее имя даёт представление о том, что делает мод. Директория, в которой лежат компоненты мода, должна иметь такое же имя. Моды можно искать по их имени на сайте [content.minetest.net](https://content.minetest.net). mymod ├── textures │   └── mymod_node.png ├── init.lua └── mod.conf Обязательным является только файл init.lua. Тем не менее, рекомендуется добавлять файл mod.conf и другие компоненты в зависимости от функционала мода. ### mod.conf Создайте файл mod.conf следующего содержания: ``` name = mymod description = Adds foo, bar, and bo. depends = default ``` Этот файл содержит мета-данные мода, такие как имя, описание и прочее. ### init.lua Создайте файл init.lua следующего содержания: ```lua print("This file will be run at load time!") core.register_node("mymod:node", { description = "This is a node", tiles = {"mymod_node.png"}, groups = {cracky = 1} }) core.register_craft({ type = "shapeless", output = "mymod:node 3", recipe = { "default:dirt", "default:stone" }, }) ``` Файл init.lua запускается при загрузке мода. ### Итого Этот мод носит имя "mymod". Он содержит два текстовых файла: init.lua и mod.conf. Скрипт выводит сообщение, а затем регистрирует новый рецепт крафта (об этом будет написано дальше). У этого мода указана единственная зависимость от [мода default](https://content.minetest.net/metapackages/default/), который, обычно, является частью Minetest Game. Также есть текстура для блока в папке textures/. ## Зависимости Зависимости указываются, если перед загрузкой нода необходимо загрузить другой мод. Моду могут потребоваться код, предметы или ещё что-нибудь из другого мода. Существует два типа зависимостей: жёсткие и необязательные. В обоих случаях требуемый мод загружается первым. Если требуемый мод недоступен, жёсткая зависимость не позволит загрузить мод, в то время как при необязательной зависимости мод всего лишь потеряет часть функций. Необязательные зависимости полезны в случаях, когда вы хотите добавить поддержку другого мода: например, вы можете добавлять дополнительный контент, если пользователь решит задействовать оба мода одновременно. Несколько зависимостей перечисляются через запятую в файле mod.conf. depends = modone, modtwo optional_depends = modthree ## Модпаки Несколько модов могут быть собраны в модпак, который позволяет распространять эти моды вместе. Модпак позволяет загрузить и установить несколько модов за раз, без необходимости скачивать их по одному. modpack1 ├── modpack.conf (обязательный) — обозначает, что это модпак ├── mod1 │   └── ... файлы мода └── mymod (optional)    └── ... файлы мода Не нужно путать модпак и *Игру*. У Игры есть собственная структура, которая будет описана в главе Игры.