<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://wiki.mineprogramming.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=145.255.22.57&amp;*</id>
		<title>mineprogramming wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.mineprogramming.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=145.255.22.57&amp;*"/>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/145.255.22.57"/>
		<updated>2026-09-11T21:47:46Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B9_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BC%D0%BE%D0%B4%D0%BE%D0%B2&amp;diff=341</id>
		<title>InnerCore/Стандартный шаблон модов</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B9_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BC%D0%BE%D0%B4%D0%BE%D0%B2&amp;diff=341"/>
				<updated>2018-02-05T15:56:00Z</updated>
		
		<summary type="html">&lt;p&gt;145.255.22.57: /* Заключение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
В большинстве случаев вам не потребуется импровизировать со структурой мода. Для этого тут описан шаблонный файл построения и то, какую структуру должен иметь мод с таким построением.&lt;br /&gt;
&lt;br /&gt;
Здесь приведено содержимое файла build.config:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;{ &lt;br /&gt;
    &amp;quot;defaultConfig&amp;quot;:{ &lt;br /&gt;
        &amp;quot;buildType&amp;quot;:&amp;quot;develop&amp;quot;, &lt;br /&gt;
        &amp;quot;api&amp;quot;:&amp;quot;CoreEngine&amp;quot;, &lt;br /&gt;
        &amp;quot;libraryDir&amp;quot;:&amp;quot;lib/&amp;quot; &lt;br /&gt;
    }, &lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;resources&amp;quot;:[ &lt;br /&gt;
        { &lt;br /&gt;
            &amp;quot;path&amp;quot;:&amp;quot;res/&amp;quot;, &lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;resource&amp;quot; &lt;br /&gt;
        }, &lt;br /&gt;
        { &lt;br /&gt;
            &amp;quot;path&amp;quot;:&amp;quot;gui/&amp;quot;, &lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;gui&amp;quot; &lt;br /&gt;
        } &lt;br /&gt;
    ], &lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;buildDirs&amp;quot;:[ &lt;br /&gt;
        { &lt;br /&gt;
            &amp;quot;targetSource&amp;quot;:&amp;quot;main.js&amp;quot;, &lt;br /&gt;
            &amp;quot;dir&amp;quot;:&amp;quot;dev/&amp;quot; &lt;br /&gt;
        } &lt;br /&gt;
    ], &lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;compile&amp;quot;:[ &lt;br /&gt;
        { &lt;br /&gt;
            &amp;quot;path&amp;quot;:&amp;quot;main.js&amp;quot;, &lt;br /&gt;
            &amp;quot;sourceType&amp;quot;:&amp;quot;mod&amp;quot; &lt;br /&gt;
        }, &lt;br /&gt;
        { &lt;br /&gt;
            &amp;quot;path&amp;quot;:&amp;quot;launcher.js&amp;quot;, &lt;br /&gt;
            &amp;quot;sourceType&amp;quot;:&amp;quot;launcher&amp;quot; &lt;br /&gt;
        } &lt;br /&gt;
    ] &lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Структура мода ==&lt;br /&gt;
&lt;br /&gt;
Начнем с API, он един для всего мода - это Core Engine. Основная часть дальнейшей документации будет как раз по нему, т.к. это самый распространенный и удобный вид API в большинстве случаев.&lt;br /&gt;
&lt;br /&gt;
Если вам нужно подключить какие то библиотеки, вы можете создать директорию lib в директории мода и копировать их туда, после чего их можно будет подключить из любых исполняемых файлов мода.&lt;br /&gt;
&lt;br /&gt;
Все ресурсы мода должны находиться в директории res, если их нет, она должна быть пустой. Аналогично для текстур интерфейса, только они должны находиться в директории gui. Как конкретно работают ресурсы вы сможете прочитать [[InnerCore/Ресурсы|здесь]].&lt;br /&gt;
&lt;br /&gt;
В директории мода должен присутствовать файл launcher.js, который по-умолчанию должен содержать только команду Launch(); Более подробная работа с лаунчером мода будет описана в другой главе.&lt;br /&gt;
&lt;br /&gt;
== Исходный код мода ==&lt;br /&gt;
&lt;br /&gt;
Так же в моде обязана присутствовать директория построения dev, в которой должен быть файл построения .includes, в нем прописаны все локальные пути файлов, которые участвуют в построении в нужном порядке, так же он может содержать комментарии (// или #) и пустые строки&lt;br /&gt;
&lt;br /&gt;
Пример содержимого .includes:&lt;br /&gt;
&amp;lt;pre&amp;gt;// Предположим, что .includes находится в директории dev/ в моде&lt;br /&gt;
&lt;br /&gt;
// Этот файл должен находиться на пути dev/header.js&lt;br /&gt;
header.js&lt;br /&gt;
&lt;br /&gt;
// Эти файлы соответсвенно должны находиться в dev/source/&lt;br /&gt;
source/blocks.js&lt;br /&gt;
source/items.js&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все эти файлы будут собраны в файл main.js и запущены, как основной код мода.&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
&lt;br /&gt;
Как говорилось в начале данная структура подходит для большинства модов и если вам не нужно ничего особенного, то оптимально использовать именно её.&lt;/div&gt;</summary>
		<author><name>145.255.22.57</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_ModAPI&amp;diff=340</id>
		<title>InnerCore/Модуль ModAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_ModAPI&amp;diff=340"/>
				<updated>2018-02-05T15:52:48Z</updated>
		
		<summary type="html">&lt;p&gt;145.255.22.57: /* Другие методы ModAPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Core Engine имеет модуль для обмена объектами API между различными модами - ModAPI, обмен API осуществляется с помощью методов регистрации и публикации API и с помощью методов его получения.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Чтобы сделать объект API доступным для других модов используется метод ModAPI.registerAPI(&amp;quot;имя API&amp;quot;, объект API) - после вызова этого метода, остальные моды смогут получить объект API по данному имени.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Чтобы получить объект API нужно добавить специальное событие на имя объекта API, который требуется получить. Событие используется потому, что моды загружаются в произвольном порядке и неизвестно, зарегистрирован ли данный API на момент загрузки мода, который в нем нуждается, даже если мод, который регистрирует, присутсвует.&lt;br /&gt;
&lt;br /&gt;
Для этого используется такой метод:&lt;br /&gt;
&amp;lt;pre&amp;gt;ModAPI.addAPICallback(&amp;quot;имя API&amp;quot;, function(api){&lt;br /&gt;
&lt;br /&gt;
     // api является объектом api, зарегистрированным под данным именем&lt;br /&gt;
&lt;br /&gt;
})&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Это событие произойдет 1 раз после добавления, при этом если API уже зарегистрирован, то событие произойдет сразу после добавления, иначе оно будет ожидать регистрации.&lt;br /&gt;
&lt;br /&gt;
В этом событии вы можете произвести какие-то действия, связанные с работой с данным API, например при получении ThaumAPI (api таумкрафта), добавить предметам вашего мода аспекты. Если событие не произойдет, значит таумкрафт не установлен и аспекты регистрировать не надо.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Использование событий в скрипте-лаунчере ===&lt;br /&gt;
&lt;br /&gt;
Если мод не может работать без какого-то объекта API (например это дополнение к какому-то моду), то разумно будет сделать так, что мод запускается по событию регистрации данного API и сразу передать ему объект API.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
К примеру вот код лаунчера мода, который является дополнением к таумкрафту и которому обязателен ThaumAPI:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;ModAPI.addAPICallback(&amp;quot;ThaumAPI&amp;quot;, function(api){&lt;br /&gt;
&lt;br /&gt;
     // по событию регистрации ThaumAPI запустить основной мод&lt;br /&gt;
&lt;br /&gt;
     Launch({&lt;br /&gt;
&lt;br /&gt;
          ThaumAPI: api // в качестве дополнительного значения при запуске под именем ThaumAPI передать полученный объект api&lt;br /&gt;
&lt;br /&gt;
     });&lt;br /&gt;
&lt;br /&gt;
});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Другие методы ModAPI ===&lt;br /&gt;
&lt;br /&gt;
*ModAPI.requireAPI(&amp;quot;имя API&amp;quot;) - отдает объект API по данному имени, если он зарегистрирован. Несовершенен, потому что порядок загрузки неизвестен. Лучше используйте ModAPI.addAPICallback. &lt;br /&gt;
*ModAPI.getModByName(&amp;quot;имя мода&amp;quot;) - отдает объект мода, отвечающий за его файлы и загрузку, если мод загружен. Несовершенен, потому что порядок загрузки неизвестен. Лучше используйте ModAPI.addModCallback. &lt;br /&gt;
*ModAPI.addModCallback(&amp;quot;имя мода&amp;quot;, function(mod){ &amp;amp;nbsp;&amp;lt;br/&amp;gt; &amp;amp;nbsp; // mod является объектом мода&amp;lt;br/&amp;gt; }) - добавляет событие, которое произойдет при загрузке мода под данным именем, которому будет передан объект мода. Аналогичен по действию ModAPI.addAPICallback, только для модов. &lt;br /&gt;
*ModAPI.isModLoaded(&amp;quot;имя мода&amp;quot;) - проверяет, загружен ли мод с этим именем. Актуальна в событиях PostLoaded и ModsLoaded, которые происходят после загрузки всех модов. &lt;br /&gt;
*ModAPI.requireGlobal(&amp;quot;имя переменной или исполняемая строка&amp;quot;) - возвращает переменную с данным именем из самого Core Engine, если передана исполняемая строка, выполняет ее в пространстве имен Core Engine и возвращает результат, при возникновении ошибки возвращает null и пишет ошибку в лог. Может быть использована для получения скрытых модулей или значений ModPE (они могут работать некорректно).&lt;/div&gt;</summary>
		<author><name>145.255.22.57</name></author>	</entry>

	</feed>