Любые операции тулчейна руководствуются файлами конфигураций для сборки проекта, осуществления его создания и заданием базовых свойств шаблонов.
Существует несколько типов конфигураций, описание свойств каждой из которых описано далее. Если существует значение по умолчанию, оно также указано.
Выборки путей могут содержать /**/ для выбора папок и всех подпапок, а также /* для выбора всех файлов, /*.js или /*.jar для выбора всех файлов с нужным разрешением.
Свойства, отмеченные * могут иметь абсолютные пути к файлам.
.
├─ info: {} // основная информация о проекте, задается на этапе его создания
│ ├─ name: "Mod"
│ ├─ version: "1.0"
│ ├─ author: "ICMods"
│ ├─ description: ""
│ ├─ clientOnly: false
│ └─ *icon: "mod_icon.png"
├─ api: "CoreEngine" // "CoreEngine", "AdaptedScript", "Preloader", "PrefsWinAPI", "Instant"
├─ optimizationLevel: -1 // значение между -1..9, служит для выгрузки скриптов из памяти
├─ setupScript: null // путь до скрипта, срабатывающего при распаковке архива проекта в мод браузере
│
├─ sources: [] // директории для компиляции скриптов, например основного скрипта для запуска или main.js
│ └─ {}
│ ├─ type // "main", "launcher", "preloader", "instant", "custom", "library"
│ ├─ source // относительный путь до скрипта или папки, поддерживается формат /* для включения подпапок в папке
│ ├─ language: "javascript" // либо "typescript"
│ ├─ target: basename(this.source) + ".js" // имя файла скрипта для выходной компиляции
│ ├─ sourceName: null // экслюзивно для "custom" типов сборки, однако имя скрипта также отображается, например, и при ошибках
│ ├─ includes: ".includes" // файл для сборки скриптов, в одной папке их может быть несколько
│ ├─ api: api // "CoreEngine", "AdaptedScript", "Preloader", "PrefsWinAPI"
│ └─ optimizationLevel: optimizationLevel // значение между -1..9, служит для выгрузки скриптов из памяти
│
├─ compile: [] // директории для компиляции C++ и Java кода, это конечно, не означает что вы можете просто взять исходный код с Forge, однако это не менее интересная вещь
│ └─ {}
│ ├─ type // "native", "java"
│ ├─ source // относительный путь до папки, поддерживается формат /* для включения подпапок в папке
│ └─ rules: {} // экслюзивно для нативного моддинга
│ ├─ keepSources: false // оставлять ли исходники в проекте после компиляции
│ ├─ keepIncludes: true // оставлять ли заголовки (инклюды, хедеры) в проекте после компиляции
│ └─ link: [] // дополнительная слинковка лишь для этого исходника
│
├─ resources: [] // директории для сборки ресурсов, например текстур предметов или интерфейса
│ └─ {}
│ ├─ type // "resource_directory", "gui", "minecraft_resource_pack", "minecraft_behavior_pack"
│ ├─ path // относительный путь до папки с ресурсами
│ └─ target: basename(this.path) // путь в проекте после сборки
│
├─ additional: [] // дополнительные директории, которые необходимо включить в проект после сборки
│ └─ {}
│ ├─ sources // относительный путь до папки, поддерживается формат /* для включения подпапок в папке
│ └─ pushTo // выходной путь в проекте после сборки
├─ excludeFromRelease: [] // относительные пути до папок, исключаемых из проекта при сборке в релиз, поддерживается формат /* для включения подпапок в папке
│
├─ gradle: {} // эксклюзивно для жабного моддинга
│ ├─ keepLibraries: true // оставлять ли библиотеки в проекте после компиляции
│ ├─ keepSources: false // оставлять ли исходники в проекте после компиляции
│ └─ classpath: [] // дополнительные пути для включения в системные библиотеки, они не будут включены в сам архив
├─ linkNative: [] // пути, которые будут слинкованы для всех нативных исходников
│
└─ target: {} // пути для выходной сборки по умолчанию
├─ source: "source" // все скрипты кроме библиотек
├─ library: "library" // только библиотеки скриптов
├─ native: "native" // нативный моддинг
├─ java: "java" // жабный моддинг
├─ resource_directory: "resources" // ресурсы текстур блоков, предметов и различных атласов
├─ gui: "gui" // встроенный интерфейс Inner Core
├─ minecraft_resource_pack: "minecraft_packs/resource" // ресурспаки, включаемые в игру после входа в мир
└─ minecraft_behavior_pack: "minecraft_packs/behavior" // аддоны, включаемые в игру после входа в мирОсновная конфигурация для проектов. Каждое из свойств, не заданное здесь, может быть также получено из основной конфигурации как значение по умолчанию.
Свойства, отмеченные * могут иметь абсолютные пути к файлам.
.
├─ *projectLocations: [] // относительные или абсолютные пути до проектов, сканируется вся папка на наличие конфигураций make.json и template.json
├─ *workspaceFile: "../toolchain.code-workspace" // путь до файла среды, эксклюзивно для Visual Studio Code, в него добавляются все открытые и созданные проекты
│
├─ ^template: {} // свойство info из make.json, значения автоматически заполняются при создании проекта, перезаписывает свойства из шаблона если они заданы и там
│ └─ ^skipDescription: false // пропускает страницу описания при создании проекта из шаблона, т.е. будет достаточно лишь ввести имя, остальные свойства будут взяты из шаблона или перезаписаны свойствами
├─ *defaultTemplate: "../toolchain-mod" // шаблон, выбранный по умолчанию при создании проекта, может быть относительным или абсолютным путем до него
│
├─ denyJavaScript: true // использует компилятор tsc даже в том случае, если в проекте используется исключительно JavaScript
├─ *debugIncludesExclude: [] // выборка деклараций, исключаемых tsc при компиляции во время разработки, помогает сократить ее время; если путь не найден, будет совершена повторная попытка уже с абсолютным вариантом
│
├─ ^*ndkPath: null // может быть указан если у вас уже установлен NDK для компиляции нативного кода, рекомендуется использовать версию r16b; по умолчанию поиск компилятора будет осуществлен в PATH или установлен самим тулчейном
├─ abis: [] // "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
├─ debugAbi: "armeabi-v7" // основная архитектура для компиляции нативного кода во время разработки
│
├─ pushTo // основная выходная папка модпака на устройстве, выбирается при любом подключении; путь в тулчейне до модпака, в мейке до самого мода
├─ adb: {} // дополнительные настройки моста отладки устройств
│ ├─ pushAnyLocation: false // по умолчанию если свойство pushTo не указывает на установку пака Inner Core, будет выдано предупреждение на отправку в странную локацию; эта настройка отключает его
│ ├─ pushUnchangedFiles: true // нужно ли отправлять все файлы на устройство, либо же только измененные
│ └─ doNothingIfDisconnected: false // вместо предложения настройки устройства в консоли просто завершает процесс сборки если ни одного устройства не подключено
├─ ^devices: [] // список сохраненных устройств, изменяемый при подключении во время настройки ADB; здесь содержится приватная информация, поэтому его изменение невозможно из make.json
│
├─ ^componentInstallationWithoutCommit: false // нужны ли пометки .commit в установленных компонентах; если не нужны, обновления не смогут быть установлены, а компонент будет считаться установленным если существует папка с ним
└─ ^updateAcceptReplaceConfiguration: true // нужно ли заменять файлы конфигураций в основной папке тулчейна, такие как .vscode/tasks.json и прочие; в противном случае ваши изменения останутся неизменными даже с обновлениямиМожет быть создан лишь один раз в основной директории тулчейна, некоторые из свойств отмеченные ^ не могут быть изменены из make.json для сборки.
Наследуется напрямую от make.json для сборки проекта, свойство
infoперезаписывается при создании проекта. Помимо этого, свойства изinfoбудут применены как значения по умолчанию при использовании шаблона.
Если этот файл существует в директории и проект может быть найден, впоследствии он будет использован как шаблон при создании проекта. Может быть использован совместно с make.json для сборки проекта.