<?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=93.124.107.25&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=93.124.107.25&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/93.124.107.25"/>
		<updated>2026-08-19T15:24:19Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_GameObject&amp;diff=165</id>
		<title>InnerCore/Модуль GameObject</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_GameObject&amp;diff=165"/>
				<updated>2017-07-07T21:15:14Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot;&amp;lt;div&amp;gt;Игровые объекты - расширение к Updatable Objects. В отличии от обновляемые объектов, игровые полность...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div&amp;gt;Игровые объекты - расширение к Updatable Objects. В отличии от обновляемые объектов, игровые полностью сохраняются, могут создавать свои экземпляры и отвечать на сигналы-события.&amp;lt;/div&amp;gt; &lt;br /&gt;
=== &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt; Классы игровых объектов ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; Чтобы игровой обьект появился в мире, нужно обьявить его класс.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var goblin = new GameObject(&amp;quot;goblin&amp;quot;, {&lt;br /&gt;
//здесь нужно прописать все обработчики событий&lt;br /&gt;
});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; Конструктор GameObject создает новый класс игрового объекта.&amp;lt;br/&amp;gt; Первый аргумент - имя класса, под которым он будет доступен в некоторых обьектах.&amp;lt;br/&amp;gt; Второй аргумент - прототип класса, содержит свойства экземпляра и обработчики его событий.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br/&amp;gt; Обработчики событий ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt; Обработчик события - обычная функция в классе игрового обьекта. Однако самостоятельно запускаться могут только три:&lt;br /&gt;
&lt;br /&gt;
#init - вызывается при deploy со всеми его аргументами, здесь можно задать начальные значения для игрового объекта. &lt;br /&gt;
#loaded - вызывается при загрузке сохранения, необязателен. &lt;br /&gt;
#update - вызывается каждый тик, содержит логику игрового объекта, обязателен. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; Чтобы ваш обработчик работал, нужно вызывать его при каком-то событии:&lt;br /&gt;
&lt;br /&gt;
*GameObject.callOfType(тип, событие, параметры...) &lt;br /&gt;
*Тип - название класса игрового объекта. &lt;br /&gt;
*Событие - название нужного обработчика в кавычках. &lt;br /&gt;
*Параметры - параметры для обработчика, может быть до 10 значений.&amp;lt;br/&amp;gt; Также существует безопасный вариант callOfTypeSafe, стопроцентно гарантирующий, что событие будет обработано всеми экземплярами этого класса, даже если в следующий тик часть будет уничтожена. &lt;br /&gt;
*GameObject.destroy - уничтожает экземпляр. &lt;br /&gt;
*GameObject.getAllByType(class) - обработывает все экземпляры класса. Возвращает список всех экземпляров. &lt;br /&gt;
*GameObject.deployGameObject(object, параметры для init) -&amp;amp;nbsp; превращает произвольный объект в игровой. В объекте должны быть методы init и update. &lt;br /&gt;
*GameObject.registerClass(object) - превращает произвольный объект в класс игровых.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=CoreEngine/%D0%A4%D0%B0%D0%B9%D0%BB_%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=164</id>
		<title>CoreEngine/Файл конфигурации</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=CoreEngine/%D0%A4%D0%B0%D0%B9%D0%BB_%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=164"/>
				<updated>2017-07-07T21:06:29Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Для взаимодействия с конфигом в Core Engine существует модуль __config__.  *__config__.get() - возвращает объект к...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Для взаимодействия с конфигом в Core Engine существует модуль __config__.&lt;br /&gt;
&lt;br /&gt;
*__config__.get() - возвращает объект конфига. &lt;br /&gt;
*__config__.load() - загружает конфиг из файла, если он еще не загружен, в противном случае ничего не делает. &lt;br /&gt;
*__config__.access(ключ) - возвращает значение переданного ключа конфига. &lt;br /&gt;
*__config__.save() - сохраняет конфиг в файл. &lt;br /&gt;
*__config__.clear() - очищает загруженный конфиг. &lt;br /&gt;
*__config__.config - объект загруженного конфига, можно использовать для его изменения.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=163</id>
		<title>InnerCore/Анимации</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=163"/>
				<updated>2017-07-07T21:04:12Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; В Core Engine возможно создавать анимации текста, моделей, предметов в мире.  &amp;amp;nbsp;  === Базовая анимация...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
В Core Engine возможно создавать анимации текста, моделей, предметов в мире.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Базовая анимация ===&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим базовый тип анимации.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Создать ее можно так:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;var ani = new Animation.Base(x, y, z);&lt;br /&gt;
&lt;br /&gt;
//x, y, z - координаты&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Однако просто анимация без настроек просто бессмыслена. Да и менять анимацию потом очень проблематично.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Создадим обновляемый обьект и анимацию внутри него:&lt;br /&gt;
&amp;lt;pre&amp;gt;//Создаем обьект&lt;br /&gt;
&lt;br /&gt;
var ani_upd = {&lt;br /&gt;
&lt;br /&gt;
     //Задаем его координаты&lt;br /&gt;
&lt;br /&gt;
     x: 0,&lt;br /&gt;
&lt;br /&gt;
     y: 0,&lt;br /&gt;
&lt;br /&gt;
     z: 0,&lt;br /&gt;
&lt;br /&gt;
     //Обьект анимации&lt;br /&gt;
&lt;br /&gt;
     ani: {},&lt;br /&gt;
&lt;br /&gt;
     //Флажок инициализации&lt;br /&gt;
&lt;br /&gt;
     init: false,&lt;br /&gt;
&lt;br /&gt;
     //Функция инициализации анимации&lt;br /&gt;
&lt;br /&gt;
     init_animation: function(){&lt;br /&gt;
&lt;br /&gt;
          //Создаем анимацию&lt;br /&gt;
&lt;br /&gt;
          this.ani = new Animation.Base(this.x, this.y, this.z);&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     //Функция обновления анимации&lt;br /&gt;
&lt;br /&gt;
     update_animation: function(){&lt;br /&gt;
&lt;br /&gt;
          //Устанавливаем позицию анимации&lt;br /&gt;
&lt;br /&gt;
          this.ani.setPos(this.x, this.y, this.z);&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     //Обновление&lt;br /&gt;
&lt;br /&gt;
     update: function(){&lt;br /&gt;
&lt;br /&gt;
          //Если анимация не инициализирована&lt;br /&gt;
&lt;br /&gt;
          if (!this.init){&lt;br /&gt;
&lt;br /&gt;
               //Инициализировать&lt;br /&gt;
&lt;br /&gt;
               this.init_animation();&lt;br /&gt;
&lt;br /&gt;
               //Поднять флажок инициализации&lt;br /&gt;
&lt;br /&gt;
               this.init = true;&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          //Иначе&lt;br /&gt;
&lt;br /&gt;
          else{&lt;br /&gt;
&lt;br /&gt;
               //Обновляем анимацию&lt;br /&gt;
&lt;br /&gt;
               this.update_animation();&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          //Обновляем позицию анимации&lt;br /&gt;
&lt;br /&gt;
          this.x = Player.getPosition().x;&lt;br /&gt;
&lt;br /&gt;
          this.y = Player.getPosition().y+4;&lt;br /&gt;
&lt;br /&gt;
          this.z = Player.getPosition().z;&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//При запуске в мир запускаем анимацию&lt;br /&gt;
&lt;br /&gt;
Callback.addCallback(&amp;quot;LevelLoaded&amp;quot;, function(){&lt;br /&gt;
&lt;br /&gt;
     Updatable.addUpdatable(ani_upd)&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;
Но в таком случае над вашей головой будет висеть кролик.&lt;br /&gt;
&lt;br /&gt;
Чтобы настроить анимацию, нужно применить ее метод describe.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
…&lt;br /&gt;
&lt;br /&gt;
init_animation: function(){&lt;br /&gt;
&lt;br /&gt;
          //Создаем анимацию&lt;br /&gt;
&lt;br /&gt;
          this.ani = new Animation.Base(this.x, this.y, this.z);&lt;br /&gt;
&lt;br /&gt;
          //Настраиваем ее&lt;br /&gt;
&lt;br /&gt;
          this.ani.describe({&lt;br /&gt;
&lt;br /&gt;
               //Здесь могут находиться настройки анимации&lt;br /&gt;
&lt;br /&gt;
               //Можно установить существующий рендер&lt;br /&gt;
&lt;br /&gt;
               // (i) Перед тем, как написать этот код, запишите где-нибудь: var NativeEntityRenderType = ModAPI.requireGlobal(&amp;quot;EntityRenderType&amp;quot;); Это позволит использовать рендеры из ModPE&lt;br /&gt;
&lt;br /&gt;
               render: NativeEntityRenderType.pig,&lt;br /&gt;
&lt;br /&gt;
               //А можно установить и свой собственный&lt;br /&gt;
&lt;br /&gt;
               renderAPI: ваш обьект рендера,&lt;br /&gt;
&lt;br /&gt;
               //Текстура анимации&lt;br /&gt;
&lt;br /&gt;
               skin: &amp;quot;/mob/pig.png&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
               //Остальные свойства ненужны&lt;br /&gt;
&lt;br /&gt;
          });&lt;br /&gt;
&lt;br /&gt;
          //Загружаем анимацию в мир&lt;br /&gt;
&lt;br /&gt;
          this.ani.load();&lt;br /&gt;
&lt;br /&gt;
     }&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;
Теперь мы можем использовать нашу анимацию и отображать ее в мире.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Предметы ===&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Также можно создать изображение в мире предмета.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;var ani_item = new Animation.Item(x, y, z);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
В остальном эта анимация похожа на обычную, только настраивается она методом animation.describeItem&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ani_item.describeItem({&lt;br /&gt;
&lt;br /&gt;
     //Настраиваем характеристики отоюражаемого предмета&lt;br /&gt;
&lt;br /&gt;
     id: 280,&lt;br /&gt;
&lt;br /&gt;
     count: 1,&lt;br /&gt;
&lt;br /&gt;
     data: 0,&lt;br /&gt;
&lt;br /&gt;
     //Рендерим палку&lt;br /&gt;
&lt;br /&gt;
     //Устанавливаем размер&lt;br /&gt;
&lt;br /&gt;
     size: 1,&lt;br /&gt;
&lt;br /&gt;
     //Устанавливаем выравнивание по оси x/y/z&lt;br /&gt;
&lt;br /&gt;
     rotation: &amp;quot;x\y\z&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
     //Убираем неровности, если отрисовывается несколько анимаций&lt;br /&gt;
&lt;br /&gt;
     notRandomize: true&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;
=== Текст ===&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Также в мире можно отображать в мире текст:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;var ani_txt = new Animation.Text(x, y, z);&lt;br /&gt;
&lt;br /&gt;
//Настроим отображаемый текст&lt;br /&gt;
&lt;br /&gt;
ani_txt.setText(text);&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_FileTools&amp;diff=162</id>
		<title>InnerCore/Модуль FileTools</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_FileTools&amp;diff=162"/>
				<updated>2017-07-07T21:01:34Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Хотя Core Engine загружает ресурсы самостоятельно, иногда их нужно загружать из другого места или и...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Хотя Core Engine загружает ресурсы самостоятельно, иногда их нужно загружать из другого места или из интернета, а потом в CE. Здесь пригодится FileTools. Также ручная работа с файлами полезна при создании файлов настроек.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Если в строке с путем не прописан корень файловой системы, то путь будет относительным от FileTools.root&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
*FileTools.mntdir - возвращает путь до хранилища смонтированных папок Linux. &lt;br /&gt;
*FileTools.root - возвращает папку Minecraft PE. &lt;br /&gt;
*FileTools.workdir - возвращает путь до папки Core Engine. &lt;br /&gt;
*FileTools.moddir - возвращает путь до папки с модами. &lt;br /&gt;
*FileTools.mkdir(path) - создает папку по указанному пути. &lt;br /&gt;
*FileTools.mkworkdirs() - создает рабочую папку. &lt;br /&gt;
*FileTools.getFullPath(path) - возвращает абсолютный путь, принимая path. &lt;br /&gt;
*FileTools.isExists(path) - проверяет, существует ли файл или папка на пути path. &lt;br /&gt;
*FileTools.WriteText(path, value, add) - записывает value по пути path, если add равен true, то добавляет value в конец файла. &lt;br /&gt;
*FileTools.ReadText(path) - читает строку по пути path. &lt;br /&gt;
*FileTools.WriteImage(path, image) - записывает изображение по пути path. &lt;br /&gt;
*FileTools.ReadImage(path) - читает изображение по пути path. &lt;br /&gt;
*FileTools.ReadTextAsset(path) - читает текст из текстурпака. &lt;br /&gt;
*FileTools.ReadImageAsset(path) - читает изображение из текстурпака. &lt;br /&gt;
*FileTools.ReadBytesAsset(path) - читает бинарное значение из текстурпака. &lt;br /&gt;
*FileTools.GetListOfDirs(path) - возвращает список папок по данному пути. &lt;br /&gt;
*FileTools.GetListOfFiles(path, [object]) - возвращает список файлов по данному пути. &lt;br /&gt;
*FileTools.ReadJSON(path) - читает файл JSON по данному пути. &lt;br /&gt;
*FileTools.WriteJSON(path, json, beautify) - пишет файл JSON json по данному пути с количеством отступов beautify.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_Updatable&amp;diff=161</id>
		<title>InnerCore/Модуль Updatable</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_Updatable&amp;diff=161"/>
				<updated>2017-07-07T20:59:53Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Модуль обновляемых обьектов, или Updatable - одна из важнейших технологий в CoreEngine наряду с событиям...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Модуль обновляемых обьектов, или Updatable - одна из важнейших технологий в CoreEngine наряду с событиями. На них построены генерация, tile entity, мобы и все остальное.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы создать обновляемый обьект, используйте метод:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
*Updatable.addUpdatable(updatable). &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Обновляемый обьект должен иметь метод update и желательно условие самоуничтожения.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
С помощью управляемых обьектов можно, например, создавать обработчики некоторых событий, не создавая для этого моба или блок.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Важно! Для модификации извне сохраните updatable в переменную, затем укажите ее в создании обновляемого обьекта как аргумент.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
*Updatable.removeUpdatable(updatable) - принудительно уничтожает объект. &lt;br /&gt;
*Updatable.isInUpdate(updatable) - проверяет, обновляется ли updatable. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Пример кода на свинопад с использованием Updatable:&lt;br /&gt;
&amp;lt;pre&amp;gt;var SubRandomHandler = {&lt;br /&gt;
&lt;br /&gt;
     pigfallChance: function(){&lt;br /&gt;
&lt;br /&gt;
          return Math.round(Math.random() * 25))&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     update: function(){&lt;br /&gt;
&lt;br /&gt;
          if (this.pigfallChance() == 0){&lt;br /&gt;
&lt;br /&gt;
               Updatable.addUpdatable(PigfallHandler);&lt;br /&gt;
&lt;br /&gt;
               this.remove = true;&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var PigfallHandler = {&lt;br /&gt;
&lt;br /&gt;
     pigPower: 40,&lt;br /&gt;
&lt;br /&gt;
     pigfallTime: 6000,&lt;br /&gt;
&lt;br /&gt;
     pigDiapason: 200,&lt;br /&gt;
&lt;br /&gt;
     checkSecondPigPosition: function(){&lt;br /&gt;
&lt;br /&gt;
          return {&lt;br /&gt;
&lt;br /&gt;
               x: Math.round(Math.random() * this.pigDiapason) + Player.getPosition().x,&lt;br /&gt;
&lt;br /&gt;
               y: 80 + Math.round(Math.random() * 46),&lt;br /&gt;
&lt;br /&gt;
               z: Math.round(Math.random() * this.pigDiapason + Player.getPosition().z&lt;br /&gt;
&lt;br /&gt;
          };&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     spawnPig: function(){&lt;br /&gt;
&lt;br /&gt;
          let pos = this.checkSecondPigPosition();&lt;br /&gt;
&lt;br /&gt;
          Entity.spawn(12, pos.x, pos.y, pos.z);&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     pigChance: function(){&lt;br /&gt;
&lt;br /&gt;
          if (Math.round(Math.random() * this.pigPower + 1) == 0){&lt;br /&gt;
&lt;br /&gt;
               return true;&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     update: function(){&lt;br /&gt;
&lt;br /&gt;
          if (this.pigChance){&lt;br /&gt;
&lt;br /&gt;
               this.spawnPig();&lt;br /&gt;
&lt;br /&gt;
               this.pigfallTime--;&lt;br /&gt;
&lt;br /&gt;
               this.pigDiapason = this.pigfallTime / this.pigPower;&lt;br /&gt;
&lt;br /&gt;
               if (this.pigfallTime % 120){&lt;br /&gt;
&lt;br /&gt;
                    this.pigPower--;&lt;br /&gt;
&lt;br /&gt;
               };&lt;br /&gt;
&lt;br /&gt;
          };&lt;br /&gt;
&lt;br /&gt;
          if (this.pigfallTime &amp;lt;= 0){&lt;br /&gt;
&lt;br /&gt;
               Updatable.addUpdatable(SubRandomHandler);&lt;br /&gt;
&lt;br /&gt;
               this.remove = true;&lt;br /&gt;
&lt;br /&gt;
          };&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Callback.addCallback(&amp;quot;LevelLoaded&amp;quot;,function(){&lt;br /&gt;
&lt;br /&gt;
     Updatable.addUpdatable(SubRandomHandler)&lt;br /&gt;
&lt;br /&gt;
});&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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=160</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=160"/>
				<updated>2017-07-07T20:57:22Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Core Engine имеет модуль для обмена объектами API между различными модами - ModAPI, обмен API осуществляет...&amp;quot;&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>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81&amp;diff=159</id>
		<title>InnerCore/Динамичный интерфейс</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81&amp;diff=159"/>
				<updated>2017-07-07T20:53:58Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Как упоминалось в уроках ранее, объект описания интерфейса можно изменять, пока интерфейс откр...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Как упоминалось в уроках ранее, объект описания интерфейса можно изменять, пока интерфейс открыт и изменения тут же будут отображаться в интерфейсе. Больше всего это подходит для элементов, которые должны появляться/изменяться/исчезать только в каких-то определенных условиях (например кнопка, которая появляется, только если в слоте есть предмет)&lt;br /&gt;
&lt;br /&gt;
=== &amp;amp;nbsp; ===&lt;br /&gt;
&lt;br /&gt;
=== Получение объекта описания ===&lt;br /&gt;
&lt;br /&gt;
По скольку интерфейс всегда открывается для контейнера, то контейнер имеет метод получения объекта описания интерфейса для динамичного изменения. Этот метод - getGuiContent() - упоминался в прошлой главе и теперь будет разобран подробнее.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Формат объекта описания можно посмотреть в предыущих главах, там же говорится, что динамичными (т.е. изменения которых тут же отобразятся в интерфейсе), являются только части, отвечающие за фон и за элементы - drawing и elements, но не параметры самого интерфейса (заголовок, размер и т.п)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
И так, предположим мы получили объект описания:&lt;br /&gt;
&amp;lt;pre&amp;gt;var content = container.getGuiContent();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Теперь, чтобы изменить в нем фон, мы можем просто присвоить drawing новое значение:&lt;br /&gt;
&amp;lt;pre&amp;gt;content.drawing = [&lt;br /&gt;
&lt;br /&gt;
     {type: &amp;quot;background&amp;quot;, color: android.graphics.Color.RED}&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;
С элементами все несколько иначе, чтобы что-то сделать с элементом, нужно обратиться к нему по его имени: content.elements[&amp;quot;имя элемента&amp;quot;], после чего с ним можно сделать 3 разных действия:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
1. Приравнять новому элементу - если элемент с данным именем уже существовал, то старый будет полностью заменен на новый, если элемента не было, то будет просто создан новый элемент&lt;br /&gt;
&lt;br /&gt;
2. Изменить какое-то значение - элемент&amp;amp;nbsp; с данным именем будет изменен потому что какой то его параметр был изменен.&lt;br /&gt;
&lt;br /&gt;
3. Приравнять null - элемент с данным именем будет удален&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
ПРИМЕР #1: (изменение параметров)&lt;br /&gt;
&amp;lt;pre&amp;gt;// код ниже при старте откроет интерфейс с 1 кнопкой, при нажатии на которую она будет перемещаться вниз&lt;br /&gt;
&lt;br /&gt;
var testUIScreen = new UI.StandartWindow({&lt;br /&gt;
&lt;br /&gt;
     standart: {&lt;br /&gt;
&lt;br /&gt;
          header: {&lt;br /&gt;
&lt;br /&gt;
               text: {&lt;br /&gt;
&lt;br /&gt;
                    text: &amp;quot;TEST UI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
          inventory: {&lt;br /&gt;
&lt;br /&gt;
               standart: true&lt;br /&gt;
&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
          background: {&lt;br /&gt;
&lt;br /&gt;
               standart: true&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     drawing: [],&lt;br /&gt;
&lt;br /&gt;
     elements: {&lt;br /&gt;
&lt;br /&gt;
          &amp;quot;test_button&amp;quot;: {type: &amp;quot;button&amp;quot;, bitmap: &amp;quot;close_button_up&amp;quot;, x: 400, y: 100, scale: 8, clicker: { // самая обычная кнопка с именем test_button&lt;br /&gt;
&lt;br /&gt;
                    onClick: function(container){ // функция короткого нажатия, все параметры кроме первого опущены за ненадобностью&lt;br /&gt;
&lt;br /&gt;
                         var content = container.getGuiContent(); // получаем объект описания, по скольку кнопку можно нажать только с открытым интерфейсом, то он точно определен&lt;br /&gt;
&lt;br /&gt;
                         content.elements[&amp;quot;test_button&amp;quot;].y += 10; // немного сдвигаем кнопку вниз, добавляя 10 к координате y&lt;br /&gt;
&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// открыть интерфейс&lt;br /&gt;
&lt;br /&gt;
UI.testUI(testUIScreen);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
ПРИМЕР #2: (удаление и создание)&lt;br /&gt;
&amp;lt;pre&amp;gt;// после нажатия на кнопку, удаляет ее и создает текст о том, что она удалена&lt;br /&gt;
&lt;br /&gt;
var testUIScreen = new UI.StandartWindow({&lt;br /&gt;
&lt;br /&gt;
     standart: {&lt;br /&gt;
&lt;br /&gt;
          header: {&lt;br /&gt;
&lt;br /&gt;
               text: {&lt;br /&gt;
&lt;br /&gt;
                    text: &amp;quot;TEST UI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
          inventory: {&lt;br /&gt;
&lt;br /&gt;
               standart: true&lt;br /&gt;
&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
          background: {&lt;br /&gt;
&lt;br /&gt;
               standart: true&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     drawing: [],&lt;br /&gt;
&lt;br /&gt;
     elements: {&lt;br /&gt;
&lt;br /&gt;
          &amp;quot;test_button&amp;quot;: {type: &amp;quot;button&amp;quot;, bitmap: &amp;quot;close_button_up&amp;quot;, x: 400, y: 100, scale: 8, clicker: { // самая обычная кнопка с именем test_button&lt;br /&gt;
&lt;br /&gt;
                    onClick: function(container){ // функция короткого нажатия, все параметры кроме первого опущены за ненадобностью&lt;br /&gt;
&lt;br /&gt;
                         var content = container.getGuiContent(); // получаем объект описания, по скольку кнопку можно нажать только с открытым интерфейсом, то он точно определен&lt;br /&gt;
&lt;br /&gt;
                         content.elements[&amp;quot;test_button&amp;quot;] = null; // удаляем кнопку&lt;br /&gt;
&lt;br /&gt;
                         content.elements[&amp;quot;new_element&amp;quot;] = {type: &amp;quot;text&amp;quot;, text: &amp;quot;button removed&amp;quot;, x: 400, y: 50, width: 200, height: 50}; // создаем текст о том, что она удалена&lt;br /&gt;
&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// открыть интерфейс&lt;br /&gt;
&lt;br /&gt;
UI.testUI(testUIScreen);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
ПРИМЕР #3: (полная замена + изменение фона)&lt;br /&gt;
&amp;lt;pre&amp;gt;// после нажатия на кнопку, удаляет ее и создает текст о том, что она удалена, а так же делает фон красным&lt;br /&gt;
&lt;br /&gt;
var testUIScreen = new UI.StandartWindow({&lt;br /&gt;
&lt;br /&gt;
     standart: {&lt;br /&gt;
&lt;br /&gt;
          header: {&lt;br /&gt;
&lt;br /&gt;
               text: {&lt;br /&gt;
&lt;br /&gt;
                    text: &amp;quot;TEST UI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
          inventory: {&lt;br /&gt;
&lt;br /&gt;
               standart: true&lt;br /&gt;
&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
          background: {&lt;br /&gt;
&lt;br /&gt;
               standart: true&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     drawing: [],&lt;br /&gt;
&lt;br /&gt;
     elements: {&lt;br /&gt;
&lt;br /&gt;
          &amp;quot;test_button&amp;quot;: {type: &amp;quot;button&amp;quot;, bitmap: &amp;quot;close_button_up&amp;quot;, x: 400, y: 100, scale: 8, clicker: { // самая обычная кнопка с именем test_button&lt;br /&gt;
&lt;br /&gt;
                    onClick: function(container){ // функция короткого нажатия, все параметры кроме первого опущены за ненадобностью&lt;br /&gt;
&lt;br /&gt;
                         var content = container.getGuiContent(); // получаем объект описания, по скольку кнопку можно нажать только с открытым интерфейсом, то он точно определен&lt;br /&gt;
&lt;br /&gt;
                         content.elements[&amp;quot;test_button&amp;quot;] = {type: &amp;quot;text&amp;quot;, text: &amp;quot;button removed&amp;quot;, x: 400, y: 50, width: 200, height: 50}; // заменяем элемент кнопки на текст о том, что она удалена&lt;br /&gt;
&lt;br /&gt;
                         content.drawing = [&lt;br /&gt;
&lt;br /&gt;
                              {type: &amp;quot;background&amp;quot;, color: android.graphics.Color.RED}&lt;br /&gt;
&lt;br /&gt;
                         ]; // мы удалили все прошлые команды и теперь рисуем просто красный фон&lt;br /&gt;
&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// открыть интерфейс&lt;br /&gt;
&lt;br /&gt;
UI.testUI(testUIScreen);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
ПРИМЕР #4: (tile entity):&lt;br /&gt;
&amp;lt;pre&amp;gt;// добавляет tile entity интерфейс с кнопкой, которая медленно опускается, пока интерфейс открыт&lt;br /&gt;
&lt;br /&gt;
var testUIScreen = new UI.StandartWindow({&lt;br /&gt;
&lt;br /&gt;
     standart: {&lt;br /&gt;
&lt;br /&gt;
          header: {&lt;br /&gt;
&lt;br /&gt;
               text: {&lt;br /&gt;
&lt;br /&gt;
                    text: &amp;quot;TEST UI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
          inventory: {&lt;br /&gt;
&lt;br /&gt;
               standart: true&lt;br /&gt;
&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
          background: {&lt;br /&gt;
&lt;br /&gt;
               standart: true&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     drawing: [],&lt;br /&gt;
&lt;br /&gt;
     elements: {&lt;br /&gt;
&lt;br /&gt;
          &amp;quot;test_button&amp;quot;: {type: &amp;quot;button&amp;quot;, bitmap: &amp;quot;close_button_up&amp;quot;, x: 400, y: 100, scale: 8, clicker: { // самая обычная кнопка с именем test_button&lt;br /&gt;
&lt;br /&gt;
                    onClick: function(container){/* ничего не делаем при клике */}&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Прототип tile entity:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
     // ...&lt;br /&gt;
&lt;br /&gt;
     getGuiScreen: function(){ // функция получения интерфейса - отдаем наш интерфейс&lt;br /&gt;
&lt;br /&gt;
          return testUIScreen;&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     tick: function(){&lt;br /&gt;
&lt;br /&gt;
          var content = this.container.getGuiContent(); // пытаемся получить объект описания&lt;br /&gt;
&lt;br /&gt;
          if (content){ // если получить удалось&lt;br /&gt;
&lt;br /&gt;
               content.elements[&amp;quot;test_button&amp;quot;].y += .3; // медленно сдвигаем кнопку вниз&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     // ...&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D1%8B&amp;diff=158</id>
		<title>InnerCore/Контейнеры</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D1%8B&amp;diff=158"/>
				<updated>2017-07-07T20:50:39Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и т...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и так же обладающий методами для интеграции с любым интерфейсом, который открыт для этого контейнера. Произвольный контейнер может быть открыт как любой интерфейс, при этом он будет привязан ко всем слотам интерфейса.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Каждый объект tile entity в мире по умолчанию обладает контейнером, который автоматически сохраняется и для которого открывается интерфейс, отданый при выполнении события getGuiScreen. Подробнее об этом в уроке по tile entity и ниже.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Все специальные контейнеры, такие как инвентарь игрока или сундука наследуют все методы базового контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Методы ===&lt;br /&gt;
&lt;br /&gt;
Создание нового контейнера:&lt;br /&gt;
&amp;lt;pre&amp;gt;var container = new UI.Container();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Обращение к встроенному контейнеру внутри tile entity: this.container&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Работа со слотами ===&lt;br /&gt;
&lt;br /&gt;
*getSlot(&amp;quot;имя слота&amp;quot;) - возвращает объект слота с данным именем, если такого слота нет, создает пустой слот на этом имени и возвращает его. Слот это объект вида {id: id предмета, count: кол-во предмета, data: data предмета}. К слотам интерфейса привязываются слоты с такими же именами, как и у элементов этих слотов в интерфейсе. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;//интерфейс tile entity задается так:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
     // ...&lt;br /&gt;
&lt;br /&gt;
     elements: {&lt;br /&gt;
&lt;br /&gt;
          // ...&lt;br /&gt;
&lt;br /&gt;
          &amp;quot;test_slot&amp;quot;: {type: &amp;quot;slot&amp;quot;, x: 400, y: 400, size: 100} // самый обычный слот с именем test_slot&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;
А прототип tile entity имеет событие клика предметом по нему:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
&lt;br /&gt;
     // ...&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     click: function(id, count, data, coords){&lt;br /&gt;
&lt;br /&gt;
          var slot = this.container.getSlot(&amp;quot;test_slot&amp;quot;); // получаем объект слота, который привязан к слоту test_slot в интерфейсе&lt;br /&gt;
&lt;br /&gt;
          slot.id = id; slot.count = count; slot.data = data; // устанавливаем в слот тот предмет, которым тапнули по блоку tile entity&lt;br /&gt;
&lt;br /&gt;
          return false;&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;
Таким образом каждый раз, когда мы будем тапать предметом по блоку данного tile entity, то в слоте test_slot будет лежать тот же самый предмет, что и в руке.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
*setSlot(&amp;quot;имя слота&amp;quot;, id, кол-во, data) - устанавливает переданный предмет в слот с данным именем. Краткая запись того, что было показано в примере. &lt;br /&gt;
*clearSlot(&amp;quot;имя слота&amp;quot;) - очищает слот с данным именем &lt;br /&gt;
*validateSlot(&amp;quot;имя слота&amp;quot;) - если кол-во или id предмета нулевое или отрицательное, очищает слот. Быстрое исправление некорректных значений слота (пустой слот с кол-вом больше 0, предмет существует, однако его кол-во 0) &lt;br /&gt;
*validateAll() - вызывает метод validateSlot для всех слотов &lt;br /&gt;
*dropAt(x, y, z) - очищает контейнер и дропает все, что содержалось в нем на данных координатах ввиде предметов &lt;br /&gt;
*refreshSlots() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов обновляет данные о слотах в контейнере &lt;br /&gt;
*applyChanges() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов сохраняет изменения, которые были произведены на контейнере &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;
*openAs(объект интерфейса любого типа) - открывает данный объект интерфейса и привязывается к нему &lt;br /&gt;
*isOpened() - возвращает, открыт ли этот контейнер для какого-то интерфейса &lt;br /&gt;
*close() - если открыт для какого-то интерфейса, закрывает его &lt;br /&gt;
*getGuiContent() - если открыт для какого-то интерфейса, возвращает объект описания данного интерфейса, который можно изменять для динамичного изменения интерфейса. Не работает, если контейнер открыт для группы окон. &lt;br /&gt;
*getGuiScreen()&amp;amp;nbsp; - если открыт для какого-то интерфейса, возвращает объект этого интерфейса. &lt;br /&gt;
*getElement(&amp;quot;имя элемента&amp;quot;) - если в интерфейсе, для которого открыт данный контейнер, есть элемент с данным именем возвращает его. ВНИМАНИЕ! Это не тот объект элемента, который задается в объекте описания! &lt;br /&gt;
*requireElement(&amp;quot;имя элемента&amp;quot;, &amp;quot;тип элемента&amp;quot;) - аналогичен getElement, но если элемент имеет тип, отличающийся от данного, то вернет null. &lt;br /&gt;
*setScale(&amp;quot;имя элемента шкалы&amp;quot;, заполненность 0-1) - если шкала с данным именем существует, устанавливает ее значение на данное, при этом 0 - пустая шкала, 1 - полная &lt;br /&gt;
*setScaleAsLiquid(&amp;quot;имя элемента шкалы&amp;quot;, строковый id жидкости, заполненность 0-1) - если шкала с данным именем существует, устанавливает ее, как шкалу жидкости, меняя текстуру на текстуру жидкости с данным строковым id, при этом размер шкалы не меняется. &lt;br /&gt;
*setText(&amp;quot;имя элемента текста&amp;quot;, строка) - если элемент текста с данным именем существует, меняет его содержание на переданную строку &lt;br /&gt;
*setTextSize(&amp;quot;имя элемента текста&amp;quot;, размер) - если элемент текста с данным именем существует, меняет его размер &lt;br /&gt;
*setTextColor(&amp;quot;имя элемента текста&amp;quot;, цвет) - если элемент текста с данным именем существует, меняет его цвет &lt;br /&gt;
*setTextShadow(&amp;quot;имя элемента текста&amp;quot;, значение тени) - если элемент текста с данным именем существует, меняет его тень&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C&amp;diff=157</id>
		<title>InnerCore/Многопоточность</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C&amp;diff=157"/>
				<updated>2017-07-07T20:49:53Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Для управления потоками существует модуль Threading.  *Threading.initThread(name, func, priority) - создает поток с имен...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Для управления потоками существует модуль Threading.&lt;br /&gt;
&lt;br /&gt;
*Threading.initThread(name, func, priority) - создает поток с именем name, выполняющий функцию name с приоритетом priority. &lt;br /&gt;
*Threading.getThread(name) - возвращает поток с именем name.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_Debug&amp;diff=156</id>
		<title>InnerCore/Модуль Debug</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_Debug&amp;diff=156"/>
				<updated>2017-07-07T20:49:18Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; *Debug.addParticle(x, y, z, id, vx, vy, vz, data) - создает отладочные частицы, аргументы аналогичны Particles.addParticle.  *Debug...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
*Debug.addParticle(x, y, z, id, vx, vy, vz, data) - создает отладочные частицы, аргументы аналогичны Particles.addParticle. &lt;br /&gt;
*Debug.message(message) - пишет отладочное сообщение message в чат. &lt;br /&gt;
*Debug.warning(message) - пишет тревожное сообщение message в чат. &lt;br /&gt;
*Debug.error(message) - пишет сообщение об ошибке message в чат.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_Translation&amp;diff=155</id>
		<title>InnerCore/Модуль Translation</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_Translation&amp;diff=155"/>
				<updated>2017-07-07T20:48:18Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
*Translation.addTranslation(original, lang) - создает перевод lang для строки original. &lt;br /&gt;
*Translation.getLanguage() - возвращает текущий язык игры. &lt;br /&gt;
*Translation.translate(original) - переводит строку, если имеется перевод на текущий язык. &lt;br /&gt;
*Translation.translateItem(name) - переводит название предмета name. &lt;br /&gt;
*Translation.translateAllItems() - переводит названия всех предметов. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Формат обьекта lang:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&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;/div&gt;</summary>
		<author><name>93.124.107.25</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_Translation&amp;diff=154</id>
		<title>InnerCore/Модуль Translation</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_Translation&amp;diff=154"/>
				<updated>2017-07-07T20:47:42Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; *Translation.addTranslation(original, lang) - создает перевод lang для строки original.   &amp;amp;nbsp;  Формат обьекта lang: &amp;lt;pre&amp;gt;{       //пр...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
*Translation.addTranslation(original, lang) - создает перевод lang для строки original. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Формат обьекта lang:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
&lt;br /&gt;
     //префикс языка:переведенная строка&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Translation.getLanguage() - возвращает текущий язык игры. &lt;br /&gt;
*Translation.translate(original) - переводит строку, если имеется перевод на текущий язык. &lt;br /&gt;
*Translation.translateItem(name) - переводит название предмета name. &lt;br /&gt;
*Translation.translateAllItems() - переводит названия всех предметов.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_Logger&amp;diff=152</id>
		<title>InnerCore/Модуль Logger</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_Logger&amp;diff=152"/>
				<updated>2017-07-07T20:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Для взаимодействия с логом существует модуль Logger.  Если log не указан, то используется основной....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Для взаимодействия с логом существует модуль Logger.&lt;br /&gt;
&lt;br /&gt;
Если log не указан, то используется основной.&lt;br /&gt;
&lt;br /&gt;
*Logger.wipe(log) - стирает лог с именем log. &lt;br /&gt;
*Logger.buffer - текущий лог. &lt;br /&gt;
*Logger.message(log, message) - пишет в лог log сообщение message. &lt;br /&gt;
*Logger.flush(log) - пишет текущий лог в log. &lt;br /&gt;
*Logger.formatLog(log) - форматирует лог log. &lt;br /&gt;
*Logger.showAsDialog(title, paragraf) - выводит текущий лог в окно с именем title. &lt;br /&gt;
*Logger.Log(msg, prefix, log) - записывает сообщение msg с префиксом prefix в лог log. &lt;br /&gt;
*Logger.LogError(error, log) - записывает ошибку error в лог log.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_Game&amp;diff=151</id>
		<title>InnerCore/Модуль Game</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_Game&amp;diff=151"/>
				<updated>2017-07-07T20:43:46Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Для взаимодействия с игрой в общем используется модуль Game.  *Game.prevent() - отменяет поведения игры в...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Для взаимодействия с игрой в общем используется модуль Game.&lt;br /&gt;
&lt;br /&gt;
*Game.prevent() - отменяет поведения игры в контексте. &lt;br /&gt;
*Game.message(msg) - пишет сообщение msg в чат. &lt;br /&gt;
*Game.tipMessage(msg) - пишет сообщение msg над инвентарем. &lt;br /&gt;
*Game.dialogMessage(message, title) - пишет сообщение msg в диалог с заголовком title. &lt;br /&gt;
*Game.setDifficulty(difficulty) - устанавливает сложность difficulty. &lt;br /&gt;
*Game.getDifficulty() - возвращает сложность. &lt;br /&gt;
*Game.getMinecraftVersion() - возвращает версию игры. &lt;br /&gt;
*Game.getEngineVersion() - возвращает версию движка. &lt;br /&gt;
*[Game.selectLevel(name)] - запускает уровень level. &lt;br /&gt;
*Game.setCamera(entity) - переключает камеру игрока на существо entity. &lt;br /&gt;
*Game.setTickingSpeed(speed) - устанавливает скорость игры в speed тиков в секунду.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%91%D1%80%D0%BE%D0%BD%D1%8F&amp;diff=150</id>
		<title>InnerCore/Броня</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%91%D1%80%D0%BE%D0%BD%D1%8F&amp;diff=150"/>
				<updated>2017-07-07T20:32:53Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Чтобы создать элемент брони, используется метод: &amp;lt;pre&amp;gt;Item.createArmorItem(uid, name, {name: texture_name}, {type: armor_type, armor:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Чтобы создать элемент брони, используется метод:&lt;br /&gt;
&amp;lt;pre&amp;gt;Item.createArmorItem(uid, name, {name: texture_name}, {type: armor_type, armor: armor_points, durability: damage, texture: texture_armor});&lt;br /&gt;
&lt;br /&gt;
//uid - строковый id предмета&lt;br /&gt;
&lt;br /&gt;
//name - название предмета&lt;br /&gt;
&lt;br /&gt;
//texture_name - текстура предмета&lt;br /&gt;
&lt;br /&gt;
//armor_type - строковой тип брони&lt;br /&gt;
&lt;br /&gt;
//armor_points - количество единиц защиты&lt;br /&gt;
&lt;br /&gt;
//damage - прочность брони&lt;br /&gt;
&lt;br /&gt;
//texture_armor - путь в текстурпаке до текстуры брони на игроке&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
В большинстве случаев этого метода достаточно, но иногда требуется создать особое поведение брони, когда она надета.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Чтобы задать особое поведение элементу брони, используется метод Armor.registerFuncs:&lt;br /&gt;
&lt;br /&gt;
*Armor.registerFuncs(строковый ид, обьект поведения брони) &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Сам обьект поведения брони выглядит так:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
&lt;br /&gt;
     tick: function(slot, inventory, index){&lt;br /&gt;
&lt;br /&gt;
          //slot - слот, в котором надета броня&lt;br /&gt;
&lt;br /&gt;
          //inventory - инвентарь игрока&lt;br /&gt;
&lt;br /&gt;
          //index - номер слота, в котором надета броня&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     //Также здесь могут находиться вспомогательные функции и поля, к которым внутри обьекта нужно обращаться через this&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;
Также можно задать поведение броне при ударе игрока мобом:&lt;br /&gt;
&lt;br /&gt;
*Armor.hurtCallback(&amp;quot;строковый id&amp;quot;, обьект поведения брони)&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_Player&amp;diff=149</id>
		<title>InnerCore/Модуль Player</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_Player&amp;diff=149"/>
				<updated>2017-07-07T20:30:08Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Для взаимодействия с игроком существует модуль Player.  *Player.get() - возвращает игрока как сущность д...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Для взаимодействия с игроком существует модуль Player.&lt;br /&gt;
&lt;br /&gt;
*Player.get() - возвращает игрока как сущность для работы с ним с помощью модуля Entity. &lt;br /&gt;
*Player.getNameForEnt(player) - возвращает имя игрока как сущности player. &lt;br /&gt;
*Player.getName() - возвращает имя игрока. &lt;br /&gt;
*Player.getDimension() - возвращает id измерения, в котором находится игрок. &lt;br /&gt;
*Player.isPlayer(mob) - проверяет, является ли сущность mob игроком. &lt;br /&gt;
*Player.getPointed() - возвращает обьект, на который смотрит игрок. &lt;br /&gt;
*Player.getInventory(mob, [object], [object]) - возвращает инвентарь игрока как сущности mob. &lt;br /&gt;
*Player.getCarriedItem() - возвращает предмет, который держит игрок. &lt;br /&gt;
*Player.setCarriedItem(id, count, data) - заставляет игрока держать предмет с id, count, data. &lt;br /&gt;
*Player.decreaseCarriedItem(count) - удаляет count предметов из руки игрока. &lt;br /&gt;
*Player.setPosition(x, y, z) - ставит игрока на координаты x, y, z. &lt;br /&gt;
*Player.getPosition() - возвращает координаты игрока. &lt;br /&gt;
*Player.addPosition(x, y, z) - смещает игрока на координаты x, y, z. &lt;br /&gt;
*Player.setVelocity(velx, vely, velz) - ставит игроку трехмерное ускорение velx, vely, velz. &lt;br /&gt;
*Player.getVelocity() - возвращает трехмерное ускорение игрока. &lt;br /&gt;
*Player.addVelocity(velx, vely, velz) - добавляет игроку трехмерное ускорение velx, vely, velz. &lt;br /&gt;
*Player.experience() - возвращает состояние опыта игрока. &lt;br /&gt;
*Player.getExperience() - возвращает опыт игрока. &lt;br /&gt;
*Player.setExperience(exp) - устанавливает exp опыта игроку. &lt;br /&gt;
*Player.addExperience(exp) - добавляет exp опыта игроку. &lt;br /&gt;
*Player.level() - возвращает состояние уровня игрока. &lt;br /&gt;
*Player.getLevel() - возвращает уровень игрока. &lt;br /&gt;
*Player.setLevel(lvl) - ставит lvl уровень игроку. &lt;br /&gt;
*Player.addLevel(lvl) - добавляет lvl уровней игроку. &lt;br /&gt;
*Player.flying() - возвращает состояние полета игрока. &lt;br /&gt;
*Player.getFlyingEnabled() - проверяет, может ли летать игрок. &lt;br /&gt;
*Player.setFlyingEnabled(fly?) - устанавливает возможность игрока летать. &lt;br /&gt;
*Player.getFlying() - проверяет, летит ли игрок. &lt;br /&gt;
*Player.setFlying(fly?) - устанавливает состояние полета игрока. &lt;br /&gt;
*Player.exhaustion() - возвращает состояние истощения игрока. &lt;br /&gt;
*Player.getExhaustion() - возвращает истощение игрока. &lt;br /&gt;
*Player.setExhaustion(exh) - задает игроку exh единиц истощения. &lt;br /&gt;
*Player.hunger() - возвращает состояние сытости игрока. &lt;br /&gt;
*Player.getHunger() - возвращает сытость игрока. &lt;br /&gt;
*Player.setHunger(hnr) - задает hnr единиц сытости игрока. &lt;br /&gt;
*Player.saturation() - возвращает состояние насыщения игрока. &lt;br /&gt;
*Player.getSaturation() - возвращает насыщение игрока. &lt;br /&gt;
*Player.setSaturation(sat) - задает sat единиц насыщения игроку. &lt;br /&gt;
*Player.health() - возвращает состояние здоровья игрока. &lt;br /&gt;
*Player.getHealth() - возвращает здоровье игрока. &lt;br /&gt;
*Player.setHealth(hp) - задает hp единиц здоровья игроку. &lt;br /&gt;
*Player.score() - возвращает состояние счета игрока. &lt;br /&gt;
*Player.getScore() - возвращает счет игрока.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_Entity&amp;diff=148</id>
		<title>InnerCore/Модуль Entity</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_Entity&amp;diff=148"/>
				<updated>2017-07-07T20:27:19Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Вся работа с мобами осуществляется через модуль Entity.  &amp;amp;nbsp;  *Entity.getAll() - возвращает Java-массив всех...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Вся работа с мобами осуществляется через модуль Entity.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
*Entity.getAll() - возвращает Java-массив всех мобов в мире. &lt;br /&gt;
*Entity.getAllJS() - возвращает JavaScript-массив всех мобов в мире. &lt;br /&gt;
*Entity.getExtra(mob, propetry) - возвращает значение свойства propetry сущности mob в виде строки. &lt;br /&gt;
*Entity.putExtra(mob, propetry, value) - записывает свойство propetry со значением value в виде строки сущности mob. &lt;br /&gt;
*Entity.getExtraJson(mob, propetry) - возвращает свойство propetry сущности mob в виде JS-обьекта. &lt;br /&gt;
*Entity.putExtraJson(mob, propetry, value) - записывает свойство propetry со значением value в виде JS-обьекта сущности mob. &lt;br /&gt;
*Entity.addEffect(mob, id, duration, level, [boolean], [boolean]) - ставит сущности mob эффект id продолжительностью duration, уровня level. &lt;br /&gt;
*Entity.clearEffect(mob, id) - удаляет у сущности mob эффект id. &lt;br /&gt;
*Entity.clearEffects(mob) - удаляет у сущности mob все эффекты. &lt;br /&gt;
*Entity.damageEntity(mob, hp) -&amp;amp;nbsp; наносит сущности mob урон в hp единиц. &lt;br /&gt;
*Entity.healEntity(mob, hp) - лечит сущность mob на hp единиц. &lt;br /&gt;
*Entity.getType(a) - возвращает числовой тип сущности mob. &lt;br /&gt;
*Entity.setHitbox(mob, width, height) - устанавливает сущности mob хитбокс высотой width и шириной height. &lt;br /&gt;
*Entity.isExist(mob) - проверяет, существует ли сущность mob. &lt;br /&gt;
*Entity.spawn(id, x, y, z, [extra]) - спавнит существо с типом id, координатами x, y, z и назначает ему extra-свойства. &lt;br /&gt;
*Entity.spawnCustom(name, x, y, z, [extra]) - то же, что и Entity.spawn, но спавнит сущностей со строковым ид name, созданных через MobRegistry. &lt;br /&gt;
*Entity.remove(mob) - удаляет сущность mob из мира. &lt;br /&gt;
*Entity.getCustom(mob) - возвращает прототип сущности mob, если она создана через MobRegistry. &lt;br /&gt;
*Entity.getAge(mob) - возвращает возраст сущности mob.Entity.setAge(mob, age) - устанавливает возраст age сущности mob. &lt;br /&gt;
*Entity.getSkin(mob) - возвращает путь в текстурпаке текстуры сущности mob. &lt;br /&gt;
*Entity.setSkin(mob, texture) - ставит текстуру по пути texture сущности mob. &lt;br /&gt;
*Entity.getRender(mob) - возвращает id рендера сущности mob. &lt;br /&gt;
*Entity.setRender(mob, render) - устанавливает рендером с id render сущности mob. &lt;br /&gt;
*Entity.rideAnimal(rider, riding) - сажает сущность rider на сущность riding. &lt;br /&gt;
*Entity.getNameTag(mob) - возвращает имя сущности mob. &lt;br /&gt;
*Entity.setNameTag(mob, name) - устанавливает сущности mob имя name. &lt;br /&gt;
*Entity.getTarget(mob) - возвращает цель сущности mob. &lt;br /&gt;
*Entity.setTarget(attaker, victim) - ставит сущности attacker цель victim. &lt;br /&gt;
*Entity.setMobile(mob, mobile?) - в зависимости от значения mobile? управляет возможностью сущности mob двигаться. &lt;br /&gt;
*Entity.getSneaking(mob) - проверяет, ползет ли сущность mob. &lt;br /&gt;
*Entity.setSneaking(mob, sneak?) - разрешает или запрещает сущности mob ползти. &lt;br /&gt;
*Entity.getRider(mob) - проверяет, всадник ли сущность mob. &lt;br /&gt;
*Entity.getRiding(mob) - проверяет, сидят ли на сущности mob. &lt;br /&gt;
*Entity.setFire(mob, tick) - заставляет сущность mob гореть в течении tick тиков. &lt;br /&gt;
*Entity.getHealth(mob) - возвращает здоровье сущности mob. &lt;br /&gt;
*Entity.setHealth(mob, hp) - устанавливает здоровье в hp единиц сущности mob. &lt;br /&gt;
*Entity.getMaxHealth(mob) - возвращает максимальное количество здоровья сущности mob. &lt;br /&gt;
*Entity.setMaxHealth(mob, maxhp) - устанавливает максимальное здоровье maxhp сущности mob. &lt;br /&gt;
*Entity.setPosition(mob, x, y, z) - устанавливает сущность mob на координаты x, y, z. &lt;br /&gt;
*Entity.getPosition(mob) - возвращает координаты сущности mob.Entity.addPosition(mob, x, y, z) - относительно перемещает сущность mob на координаты x, y, z. &lt;br /&gt;
*Entity.setVelocity(mob, velx, vely, velz) - устанавливает трехмерное ускорение velx, vely, velz сущности mob. &lt;br /&gt;
*Entity.getVelocity(mob) - возвращает трехмерное ускорение сущности mob. &lt;br /&gt;
*Entity.addVelocity(mob, velx, vely, velz) - добавляет трехмерное ускорение velx, vely, velz сущности mob. &lt;br /&gt;
*Entity.getDistanceBetweenCoords(coords1, coords2) - возвращает расстояние между координатами в обьектах coords1 и coords2. &lt;br /&gt;
*Entity.getDistanceToCoords(mob, coords) - возвращает расстояние от сущности mob до координат в обьекте coords. &lt;br /&gt;
*Entity.getDistanceToEntity(a, b) - возвращает расстояние между сущностями mob1 и mob2. &lt;br /&gt;
*Entity.getLookAngle(mob) - возвращает угол обзора сущности mob. &lt;br /&gt;
*Entity.setLookAngle(mob, jaw, pitch) - устанавливает сущности углы обзора jaw и pitch. &lt;br /&gt;
*Entity.getLookVector(mob) - возвращает вектор взгляда сущности mob. &lt;br /&gt;
*Entity.getLookAt(mob, x, y, z) - возвращает угол обзора сущности mob на координаты x, y, z. &lt;br /&gt;
*Entity.lookAt(a, b, c, d) - устанавливает обзор сущности mob на координаты x, y, z. &lt;br /&gt;
*Entity.moveToTarget(mob1, mob2, params) - передвигает сущность mob1 к сущности mob2 с настройками params. &lt;br /&gt;
*Entity.moveToAngle(mob, angle, params) - передвигает сущность mob на угол angle с настройками params. &lt;br /&gt;
*Entity.moveToLook(mob, params) - перемещает сущность mob в направлении взгляда с настройками params. &lt;br /&gt;
*Entity.getMovingVector(mob) - возвращает вектор движения сущности mob. &lt;br /&gt;
*Entity.getMovingAngle(mob) - возвращает угол передвижения сущности mob. &lt;br /&gt;
*Entity.findNearest(x, y, z) - возвращает ближайшую к координатам x, y, z сущность. &lt;br /&gt;
*Entity.getAllInRange(coords, type, maxRange) - возвращает JS-массив сущностей с типом type в сфере с центром coords и радиусом maxRange. &lt;br /&gt;
*Entity.getInventory(mob, [object], [object]) - возвращает инвентарь сущности mob. &lt;br /&gt;
*Entity.getProjectileItem(mob) - проверяет, является ли сущность mob снарядом, если это так, возвращает ее данные как предмета.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_World&amp;diff=147</id>
		<title>InnerCore/Модуль World</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_World&amp;diff=147"/>
				<updated>2017-07-07T20:23:17Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Вся работа с миром осуществляется через модуль World.&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;
&lt;br /&gt;
*World.setBlock(x, y, z, id, metadata) - устанавливает блок с данным ID и metadata на координаты x, y, z &lt;br /&gt;
*World.setFullBlock(x, y, z, fullTile) - принимает объект со значениями id, data, устанавливает блок с данным ID и metadata на координаты x, y, z &lt;br /&gt;
*World.getBlock(x, y, z) - возвращает объект со значениями id, data, которые передают ID и metadata на координатах x, y, z &lt;br /&gt;
*World.getBlockID(x, y, z) - возвращает объект со значениями id, data, которые передают ID и metadata блока на координатах x, y, z &lt;br /&gt;
*World.getBlockID(x, y, z) - возвращает id блока на координатах x, y, z &lt;br /&gt;
*World.getBlockData(x, y, z) - возвращает metadata блока на координатах x, y, z &lt;br /&gt;
*World.destroyBlock(x, y, z, drop) - уничтожает блок на координатах x, y, z, если drop истенен, то дропает его &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Работа с tile entity и контейнерами ===&lt;br /&gt;
&lt;br /&gt;
*World.getTileEntity(x, y, z) - возвращает объект tile entity на координатах x, y, z, или null, если его нет &lt;br /&gt;
*World.addTileEntity(x, y, z) - если блок на координатах x, y, z является блоком tile entity и не активирован, то активирует его и возвращает созданный объект tile entity &lt;br /&gt;
*World.removeTileEntity(x, y, z) - если на координатах x, y, z есть tile entity, уничтожает его. &lt;br /&gt;
*World.getConteiner(x, y, z) - если на координатах x, y, z находится сундук, печь или tile entity, возвращает его контейнер, если это печь или сундук, то контейнер обладает методами refreshSlots()/applyChanges() &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;
*World.getThreadTime() - возвращает номер такта основного потока со входа в мир &lt;br /&gt;
*World.getWorldTime() - возвращает игровое время в тиках &lt;br /&gt;
*World.setWorldTime() - устанавливает игровое время в тиках &lt;br /&gt;
*World.setDayMode(isDay) - заставляет солнце передвигаться в дневную позицию, если isDay истинно, иначе в ночную &lt;br /&gt;
*World.setNightMode(isNight) - заставляет солнце передвигаться в ночную позицию, если isNight истинно, иначе в дневную &lt;br /&gt;
*World.getWeather() - возвращает объект с данными о погоде, rain - уровень дождя, thunder - уровень грозы &lt;br /&gt;
*World.setWeather(weather) - устанавливает погоду по объекту с данными о погоде, rain - уровень дождя, thunder - уровень грозы &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;
*World.drop(x, y, z, id, count, data) - дропает предмет [id, count, data] на координаты x, y, z и возвращает его &lt;br /&gt;
*World.explode(x, y, z, power, fire) - создает взрыв на координатах x, y, z мощности power, если fire истинно, поджигает все в области взрыва &lt;br /&gt;
*World.getBiome(x, z) - отдает числовой ID биома на координатах x, z &lt;br /&gt;
*World.getBiomeName(x, z) - отдает название биома на координатах x, z &lt;br /&gt;
*World.getGrassColor(x, z) - отдает цвет травы на координатах x, z ввиде одного числа &lt;br /&gt;
*World.setGrassColor(x, z, color) - устанавливает цвет травы на координатах x, z ввиде одного числа &lt;br /&gt;
*World.getGrassColorRGB(x, z) - отдает цвет травы на координатах x, z ввиде объекта, содержащего три компоненты цвета r, g, b, каждая от 0 до 255 &lt;br /&gt;
*World.setGrassColorRGB(x, z, rgb) - устанавливает цвет травы на координатах x, z ввиде объекта, содержащего три компоненты цвета r, g, b, каждая от 0 до 255 &lt;br /&gt;
*World.canSeeSky(x, y, z) - отдает true, если из точки x, y, z видно небо, иначе false &lt;br /&gt;
*World.playSound(x, y, z, &amp;quot;name&amp;quot;, volume) - проигрывает стандартный звук &amp;quot;name&amp;quot; на координатах x, y, z с громкостью volume от 0 до 100 &lt;br /&gt;
*World.playSoundAtEntity(entity, &amp;quot;name&amp;quot;, volume) - проигрывает стандартный звук &amp;quot;name&amp;quot; на координатах данного моба entity с громкостью volume от 0 до 100&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_World&amp;diff=146</id>
		<title>InnerCore/Модуль World</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_World&amp;diff=146"/>
				<updated>2017-07-07T20:23:02Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Вся работа с миром осуществляется через модуль World.&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;
*World.setBlock(x, y, z, id, metadata) - устанавливает блок с данным ID и metadata на координаты x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.setFullBlock(x, y, z, fullTile) - принимает объект со значениями id, data, устанавливает блок с данным ID и metadata на координаты x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlock(x, y, z) - возвращает объект со значениями id, data, которые передают ID и metadata на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockID(x, y, z) - возвращает объект со значениями id, data, которые передают ID и metadata блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockID(x, y, z) - возвращает id блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockData(x, y, z) - возвращает metadata блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.destroyBlock(x, y, z, drop) - уничтожает блок на координатах x, y, z, если drop истенен, то дропает его &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;
=== Работа с tile entity и контейнерами ===&lt;br /&gt;
&lt;br /&gt;
*World.getTileEntity(x, y, z) - возвращает объект tile entity на координатах x, y, z, или null, если его нет &lt;br /&gt;
*World.addTileEntity(x, y, z) - если блок на координатах x, y, z является блоком tile entity и не активирован, то активирует его и возвращает созданный объект tile entity &lt;br /&gt;
*World.removeTileEntity(x, y, z) - если на координатах x, y, z есть tile entity, уничтожает его. &lt;br /&gt;
*World.getConteiner(x, y, z) - если на координатах x, y, z находится сундук, печь или tile entity, возвращает его контейнер, если это печь или сундук, то контейнер обладает методами refreshSlots()/applyChanges() &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;
*World.getThreadTime() - возвращает номер такта основного потока со входа в мир &lt;br /&gt;
*World.getWorldTime() - возвращает игровое время в тиках &lt;br /&gt;
*World.setWorldTime() - устанавливает игровое время в тиках &lt;br /&gt;
*World.setDayMode(isDay) - заставляет солнце передвигаться в дневную позицию, если isDay истинно, иначе в ночную &lt;br /&gt;
*World.setNightMode(isNight) - заставляет солнце передвигаться в ночную позицию, если isNight истинно, иначе в дневную &lt;br /&gt;
*World.getWeather() - возвращает объект с данными о погоде, rain - уровень дождя, thunder - уровень грозы &lt;br /&gt;
*World.setWeather(weather) - устанавливает погоду по объекту с данными о погоде, rain - уровень дождя, thunder - уровень грозы &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;
*World.drop(x, y, z, id, count, data) - дропает предмет [id, count, data] на координаты x, y, z и возвращает его &lt;br /&gt;
*World.explode(x, y, z, power, fire) - создает взрыв на координатах x, y, z мощности power, если fire истинно, поджигает все в области взрыва &lt;br /&gt;
*World.getBiome(x, z) - отдает числовой ID биома на координатах x, z &lt;br /&gt;
*World.getBiomeName(x, z) - отдает название биома на координатах x, z &lt;br /&gt;
*World.getGrassColor(x, z) - отдает цвет травы на координатах x, z ввиде одного числа &lt;br /&gt;
*World.setGrassColor(x, z, color) - устанавливает цвет травы на координатах x, z ввиде одного числа &lt;br /&gt;
*World.getGrassColorRGB(x, z) - отдает цвет травы на координатах x, z ввиде объекта, содержащего три компоненты цвета r, g, b, каждая от 0 до 255 &lt;br /&gt;
*World.setGrassColorRGB(x, z, rgb) - устанавливает цвет травы на координатах x, z ввиде объекта, содержащего три компоненты цвета r, g, b, каждая от 0 до 255 &lt;br /&gt;
*World.canSeeSky(x, y, z) - отдает true, если из точки x, y, z видно небо, иначе false &lt;br /&gt;
*World.playSound(x, y, z, &amp;quot;name&amp;quot;, volume) - проигрывает стандартный звук &amp;quot;name&amp;quot; на координатах x, y, z с громкостью volume от 0 до 100 &lt;br /&gt;
*World.playSoundAtEntity(entity, &amp;quot;name&amp;quot;, volume) - проигрывает стандартный звук &amp;quot;name&amp;quot; на координатах данного моба entity с громкостью volume от 0 до 100&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_World&amp;diff=145</id>
		<title>InnerCore/Модуль World</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_World&amp;diff=145"/>
				<updated>2017-07-07T20:22:41Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Вся работа с миром осуществляется через модуль World.&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;
*World.setBlock(x, y, z, id, metadata) - устанавливает блок с данным ID и metadata на координаты x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.setFullBlock(x, y, z, fullTile) - принимает объект со значениями id, data, устанавливает блок с данным ID и metadata на координаты x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlock(x, y, z) - возвращает объект со значениями id, data, которые передают ID и metadata на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockID(x, y, z) - возвращает объект со значениями id, data, которые передают ID и metadata блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockID(x, y, z) - возвращает id блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockData(x, y, z) - возвращает metadata блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.destroyBlock(x, y, z, drop) - уничтожает блок на координатах x, y, z, если drop истенен, то дропает его &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Работа с tile entity и контейнерами ===&lt;br /&gt;
&lt;br /&gt;
*World.getTileEntity(x, y, z) - возвращает объект tile entity на координатах x, y, z, или null, если его нет &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.addTileEntity(x, y, z) - если блок на координатах x, y, z является блоком tile entity и не активирован, то активирует его и возвращает созданный объект tile entity &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.removeTileEntity(x, y, z) - если на координатах x, y, z есть tile entity, уничтожает его. &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getConteiner(x, y, z) - если на координатах x, y, z находится сундук, печь или tile entity, возвращает его контейнер, если это печь или сундук, то контейнер обладает методами refreshSlots()/applyChanges() &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;
*World.getThreadTime() - возвращает номер такта основного потока со входа в мир &lt;br /&gt;
*World.getWorldTime() - возвращает игровое время в тиках &lt;br /&gt;
*World.setWorldTime() - устанавливает игровое время в тиках &lt;br /&gt;
*World.setDayMode(isDay) - заставляет солнце передвигаться в дневную позицию, если isDay истинно, иначе в ночную &lt;br /&gt;
*World.setNightMode(isNight) - заставляет солнце передвигаться в ночную позицию, если isNight истинно, иначе в дневную &lt;br /&gt;
*World.getWeather() - возвращает объект с данными о погоде, rain - уровень дождя, thunder - уровень грозы &lt;br /&gt;
*World.setWeather(weather) - устанавливает погоду по объекту с данными о погоде, rain - уровень дождя, thunder - уровень грозы &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;
*World.drop(x, y, z, id, count, data) - дропает предмет [id, count, data] на координаты x, y, z и возвращает его &lt;br /&gt;
*World.explode(x, y, z, power, fire) - создает взрыв на координатах x, y, z мощности power, если fire истинно, поджигает все в области взрыва &lt;br /&gt;
*World.getBiome(x, z) - отдает числовой ID биома на координатах x, z &lt;br /&gt;
*World.getBiomeName(x, z) - отдает название биома на координатах x, z &lt;br /&gt;
*World.getGrassColor(x, z) - отдает цвет травы на координатах x, z ввиде одного числа &lt;br /&gt;
*World.setGrassColor(x, z, color) - устанавливает цвет травы на координатах x, z ввиде одного числа &lt;br /&gt;
*World.getGrassColorRGB(x, z) - отдает цвет травы на координатах x, z ввиде объекта, содержащего три компоненты цвета r, g, b, каждая от 0 до 255 &lt;br /&gt;
*World.setGrassColorRGB(x, z, rgb) - устанавливает цвет травы на координатах x, z ввиде объекта, содержащего три компоненты цвета r, g, b, каждая от 0 до 255 &lt;br /&gt;
*World.canSeeSky(x, y, z) - отдает true, если из точки x, y, z видно небо, иначе false &lt;br /&gt;
*World.playSound(x, y, z, &amp;quot;name&amp;quot;, volume) - проигрывает стандартный звук &amp;quot;name&amp;quot; на координатах x, y, z с громкостью volume от 0 до 100 &lt;br /&gt;
*World.playSoundAtEntity(entity, &amp;quot;name&amp;quot;, volume) - проигрывает стандартный звук &amp;quot;name&amp;quot; на координатах данного моба entity с громкостью volume от 0 до 100&lt;/div&gt;</summary>
		<author><name>93.124.107.25</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_World&amp;diff=144</id>
		<title>InnerCore/Модуль World</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_World&amp;diff=144"/>
				<updated>2017-07-07T20:21:40Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Вся работа с миром осуществляется через модуль World.  === Работа с блоками ===  *World.setBlock(x, y, z, id, metadata)...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Вся работа с миром осуществляется через модуль World.&lt;br /&gt;
&lt;br /&gt;
=== Работа с блоками ===&lt;br /&gt;
&lt;br /&gt;
*World.setBlock(x, y, z, id, metadata) - устанавливает блок с данным ID и metadata на координаты x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.setFullBlock(x, y, z, fullTile) - принимает объект со значениями id, data, устанавливает блок с данным ID и metadata на координаты x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlock(x, y, z) - возвращает объект со значениями id, data, которые передают ID и metadata на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockID(x, y, z) - возвращает объект со значениями id, data, которые передают ID и metadata блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockID(x, y, z) - возвращает id блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getBlockData(x, y, z) - возвращает metadata блока на координатах x, y, z &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.destroyBlock(x, y, z, drop) - уничтожает блок на координатах x, y, z, если drop истенен, то дропает его &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Работа с tile entity и контейнерами ===&lt;br /&gt;
&lt;br /&gt;
*World.getTileEntity(x, y, z) - возвращает объект tile entity на координатах x, y, z, или null, если его нет &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.addTileEntity(x, y, z) - если блок на координатах x, y, z является блоком tile entity и не активирован, то активирует его и возвращает созданный объект tile entity &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.removeTileEntity(x, y, z) - если на координатах x, y, z есть tile entity, уничтожает его. &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*World.getConteiner(x, y, z) - если на координатах x, y, z находится сундук, печь или tile entity, возвращает его контейнер, если это печь или сундук, то контейнер обладает методами refreshSlots()/applyChanges() &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;
*World.getThreadTime() - возвращает номер такта основного потока со входа в мир &lt;br /&gt;
*World.getWorldTime() - возвращает игровое время в тиках &lt;br /&gt;
*World.setWorldTime() - устанавливает игровое время в тиках &lt;br /&gt;
*World.setDayMode(isDay) - заставляет солнце передвигаться в дневную позицию, если isDay истинно, иначе в ночную &lt;br /&gt;
*World.setNightMode(isNight) - заставляет солнце передвигаться в ночную позицию, если isNight истинно, иначе в дневную &lt;br /&gt;
*World.getWeather() - возвращает объект с данными о погоде, rain - уровень дождя, thunder - уровень грозы &lt;br /&gt;
*World.setWeather(weather) - устанавливает погоду по объекту с данными о погоде, rain - уровень дождя, thunder - уровень грозы &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;
*World.drop(x, y, z, id, count, data) - дропает предмет [id, count, data] на координаты x, y, z и возвращает его &lt;br /&gt;
*World.explode(x, y, z, power, fire) - создает взрыв на координатах x, y, z мощности power, если fire истинно, поджигает все в области взрыва &lt;br /&gt;
*World.getBiome(x, z) - отдает числовой ID биома на координатах x, z &lt;br /&gt;
*World.getBiomeName(x, z) - отдает название биома на координатах x, z &lt;br /&gt;
*World.getGrassColor(x, z) - отдает цвет травы на координатах x, z ввиде одного числа &lt;br /&gt;
*World.setGrassColor(x, z, color) - устанавливает цвет травы на координатах x, z ввиде одного числа &lt;br /&gt;
*World.getGrassColorRGB(x, z) - отдает цвет травы на координатах x, z ввиде объекта, содержащего три компоненты цвета r, g, b, каждая от 0 до 255 &lt;br /&gt;
*World.setGrassColorRGB(x, z, rgb) - устанавливает цвет травы на координатах x, z ввиде объекта, содержащего три компоненты цвета r, g, b, каждая от 0 до 255 &lt;br /&gt;
*World.canSeeSky(x, y, z) - отдает true, если из точки x, y, z видно небо, иначе false &lt;br /&gt;
*World.playSound(x, y, z, &amp;quot;name&amp;quot;, volume) - проигрывает стандартный звук &amp;quot;name&amp;quot; на координатах x, y, z с громкостью volume от 0 до 100 &lt;br /&gt;
*World.playSoundAtEntity(entity, &amp;quot;name&amp;quot;, volume) - проигрывает стандартный звук &amp;quot;name&amp;quot; на координатах данного моба entity с громкостью volume от 0 до 100&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%96%D0%B8%D0%B4%D0%BA%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%BD%D0%B8%D0%BC%D0%B8&amp;diff=143</id>
		<title>InnerCore/Жидкости и работа с ними</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%96%D0%B8%D0%B4%D0%BA%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%BD%D0%B8%D0%BC%D0%B8&amp;diff=143"/>
				<updated>2017-07-07T20:16:29Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot; Жидкости в Core Engine представлены как некоторый материал, который может храниться в tile entity или нап...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Жидкости в Core Engine представлены как некоторый материал, который может храниться в tile entity или наполнять предмет, но при этом не может быть в мире. Т.е. жидкости могут содержаться только в каких нибудь tile entity (например бочка) или предметах (например ведро).&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Core Engine позволяет регистрировать новые жидкости, имеющие название и текстуру, предметы содержащие эти жидкости, а так же дает всем tile entity встроенный объект для хранения и работы с жидкостями, аналогичный контейнеру для хранения предметов и отображения слотов.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Стандартные жидкости - молоко, лава и вода и их текстуры уже зарегистрированы, как и предметы, содержащие их, их строковые id:&lt;br /&gt;
&lt;br /&gt;
*water - вода &lt;br /&gt;
*milk - молоко &lt;br /&gt;
*lava - лава &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;
LiquidRegistry.registerLiquid(&amp;quot;строковый id&amp;quot;, &amp;quot;название&amp;quot;, [массив имен текстур в интерфейсе]) - регистрирует жидкость под данным строковым id и с данным названием и задает ей варианты текстур интерфейса, которые задаются как массив строковых имен текстур. Текстур интерфейса может быть несколько для того, чтобы при использовании их в шкалах различных размеров, Core Engine подбирал лучшее отношение сторон и изменял размер под размер шкалы (жидкость может быть использована другими модами с другим интерфейсом). Если вы хотите задать только одну текстуру для жидоксти, просто напишите [&amp;quot;имя текстуры&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
*LiquidRegistry.isExists(&amp;quot;строковый id&amp;quot;) - проверяет существование жидкости с данным строковым id. &lt;br /&gt;
*LiquidRegistry.getLiquidName(&amp;quot;строковый id&amp;quot;) - отдает имя жидкости по id или null, если такой жидкости нет &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Регистрация предметов ===&lt;br /&gt;
&lt;br /&gt;
*LiquidRegistry.registerItem(&amp;quot;строковый id&amp;quot;, {id: id пустого предмета, data: data пустого предмета}, {id: id полного предмета, data: data полного предмета}) - регистрирует предмет, содержащий жидкость с данным строковым id в 2 состояниях - пустой и полный. После регистрации предмет будет доступен для методов наполнения и опустошения. &lt;br /&gt;
*LiquidRegistry.getEmptyItem(id, data) - принимает на вход id и дату полного предмета, возвращает объект формата {id: id пустого предмета, data: data пустого предмета, liquid: строковый id жидкости, которая содержалась в полном предмете}, если это не предмет, заполненный какой то жидкостью, возвращает null &lt;br /&gt;
*LiquidRegistry.getItemLiquid(id, data) - принимает на вход id и дату полного предмета, возвращает строковый id жидкости, которая в нем содержится, если это не предмет, заполненный какой то жидкостью, возвращает null &lt;br /&gt;
*LiquidRegistry.getFullItem(id, data, &amp;quot;строковый id&amp;quot;) - принимает на вход пустой предмет и строковый id жидкости, возвращает объект формата {id: id полного предмета, data: data полного предмета}, если предмет не является предметом, который может содержать жидкость, или такая жидкость не существует, вернет null &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;
Объект хранилища жидкости позволяет хранить жидкости и оперировать с ними. Каждый объект tile entity по умолчанию имеет объект хранилища жидкости (this.liquidStorage), которые привязаны к нему, так же его можно создать командой new LiquidRegistry.Storage() - новый объект хранилища.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Методы объекта хранилища жидкости:&lt;br /&gt;
&lt;br /&gt;
*updateUiScale(&amp;quot;имя элемента ui&amp;quot;, &amp;quot;строковый id&amp;quot;, контейнер) - устанавливает для данного контейнера шкалу с данным именем, как шкалу жидкости с данным строковым id, изменяя текстуру на текстуру жидкости и значение на ее объем относительно лимита. Если параметр контейнер не передан, а хранилище привязано к tile entity, то будет использован контейнер этого tile entity. &lt;br /&gt;
*hasDataFor(&amp;quot;строковый id&amp;quot;) - проверяет, есть ли в нем данные для данной жидкость &lt;br /&gt;
*setLimit(&amp;quot;строковый id&amp;quot;, лимит в ведрах) - устанавливает конкретной жидкости лимит количества в ведрах, если вместо строкового id передан null, устанавливает данный лимит для всех жидкостей &lt;br /&gt;
*getLimit(&amp;quot;строковый id&amp;quot;) - возвращает лимит данной жидкости в ведрах &lt;br /&gt;
*setAmount(&amp;quot;строковый id&amp;quot;, объем в ведрах) - устанавливает объем данной жидкости в ведрах, без проверки лимита &lt;br /&gt;
*getAmount(&amp;quot;строковый id&amp;quot;) - возвращает кол-во данной жидкости в ведрах &lt;br /&gt;
*getRelativeAmount(&amp;quot;строковый id&amp;quot;) - возвращает кол-во данной жидкости, деленное на лимит для данной жидкости (используется для шкал интерфейса) &lt;br /&gt;
*getLiquidStored(&amp;quot;строковый id&amp;quot;) - возвращает строковый id первой жидкости, которая содержится в данном хранилище и кол-во которой больше 0, подходит для&amp;amp;nbsp; работы с хранилищем, в котором хранится 1 тип жидкости, а так же сочитается с методом getLiquid &lt;br /&gt;
*isFull(&amp;quot;строковый id&amp;quot;) - возвращает true, если кол-во данной жидкости равно ее лимиту (заполнена ли она до предела), если аргумент не передан, проверяет, заполненны ли все жидкости в хранилище до предела. &lt;br /&gt;
*isEmpty(&amp;quot;строковый id&amp;quot;) - возвращает true, если кол-во данной жидкости равно 0 (пустота), если аргумент не передан, проверяет, все ли жидкости в хранилище на 0. &lt;br /&gt;
*addLiquid(&amp;quot;строковый id&amp;quot;, объем в ведрах) - добавляет данный объем данной жидкости в хранилище, возвращает объем лишней жидкости (которая не уместилась в лимит) &lt;br /&gt;
*getLiquid(&amp;quot;строковый id&amp;quot;, объем в ведрах) - забирает данный объем данной жидкости из хранилища, возвращает объем, который удалось забрать (если жидкости меньше требуемого кол-ва, то отдает не переданный объем, а меньше). Если жидкости в хранилище не хватает и хранилище привязано к tile entity будет вызвано событие requireMoreLiquid в tile entity.&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A0%D0%B5%D1%86%D0%B5%D0%BF%D1%82%D1%8B&amp;diff=142</id>
		<title>InnerCore/Рецепты</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A0%D0%B5%D1%86%D0%B5%D0%BF%D1%82%D1%8B&amp;diff=142"/>
				<updated>2017-07-07T20:11:46Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent         m-pageContent__withoutLeft         m-pageContent__withoutRight&amp;quot; i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent&lt;br /&gt;
        m-pageContent__withoutLeft&lt;br /&gt;
        m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
Добавление рецептов крафта и переплавки - то, без чего не обойдется никакой мод. Измененный верстак Core Engine позволяет добавлять рецепты, которые могут работать как угодно, что сильно расширит вохможности в этой области.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Рецепты верстака ===&lt;br /&gt;
&lt;br /&gt;
Рецепты верстака бывают 2х типов: форменные и бесформенные, первый тип требует того, чтобы предмет был выложен на верстаке в какой то определенной форме, второй требует лишь соблюдения присутсвия и кол-ва предметов в сетке крафта, но не требует порядка. Особенностью форменных рецептов является то, что если рецепт занимает область меньше, чем 3х3, то он может быть выложен в любой области верстака для его выполнения.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Для добавления форменных рецептов используется функция Recipes.addShaped({id: id результата, count: кол-во результата, data: data результата}, форма рецепта, определение предметов, функция выполнения, префикс) - в обычном рецепте последние 2 параметра можно и нужно опустить, о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Форма рецепта задается массивом строк, которые соответсвуют строкам в форме рецепта, где каждый символ означает предмет, а пробел - отсутсвие предмета.&lt;br /&gt;
&lt;br /&gt;
Разъяснение предметов это массив, в котором данные идут в порядке ['символ1', id1, data1, 'символ2', id2, data2, ...], и так для всех символов, которые использовались в форме рецепта, кроме пробела. Если data предмета не важна (к примеру вы хотите, чтобы в рецепте использовались доски любого типа), то вместо нее напишите -1.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Пример рецепта:&lt;br /&gt;
&amp;lt;pre&amp;gt;Recipes.addShaped({id: 264, count: 1, data: 0}, [&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;ax&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;xa&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;ax&amp;quot;&lt;br /&gt;
&lt;br /&gt;
], ['x', 265, 0, 'a', 266, 0]);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
добавит рецепт алмаза, который создается из 3 железных и 3 золотых слитков в таком порядке:&lt;br /&gt;
&lt;br /&gt;
ax&lt;br /&gt;
&lt;br /&gt;
xa&lt;br /&gt;
&lt;br /&gt;
ax&lt;br /&gt;
&lt;br /&gt;
x - железо&lt;br /&gt;
&lt;br /&gt;
a - золото&lt;br /&gt;
&lt;br /&gt;
*/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;Плохой пример рецепта:&amp;lt;span id=&amp;quot;cke_bm_157E&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;pre&amp;gt;Recipes.addShaped({id: 264, count: 1, data: 0}, [&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;ax &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;xa &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;ax &amp;quot;&lt;br /&gt;
&lt;br /&gt;
], ['x', 265, 0, 'a', 266, 0]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Как можно заметить, длина строки в данном случае 3, а не 2 и рецепт можно будет создать только, если выложить нужную структуру в левой части верстака, в прошлом же примере ненужные слоты были обрезаны и рецепт был шириной в 2, а не в 3, потому его можно было выложить как в правой части, так и в левой. То же самое касается кол-ва строк, их может быть меньше 3, если столько не нужно.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;Recipes.addShapeless({id: 264, count: 1, data: 0}, [{id: 265, data: 0}, {id: 265, data: 0}, {id: 265, data: 0}, {id: 266, data: 0}, {id: 266, data: 0}, {id: 266, data: 0}]); // добавит рецепт алмаза, который создается из 3 железных и 3 золотых слитков, однако их можно выложить в любом порядке.&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;
*Recipes.deleteRecipe({id: id результата, count: кол-во результата, data: data результата}) - удаляет все рецепты для данного предмета. &lt;br /&gt;
*Recipes.replaceWithShaped({id: id результата, count: кол-во результата, data: data результата}, форма рецепта, определение предметов, функция выполнения, префикс) - аналогична Recipes.addShaped, но удаляет все остальные рецепты для этого предмета. &lt;br /&gt;
*Recipes.replaceWithShapeless({id: id результата, count: кол-во результата, data: data результата}, форма рецепта, определение предметов, функция выполнения, префикс) - аналогична Recipes.addShapeless, но удаляет все остальные рецепты для этого предмета. &lt;br /&gt;
*Recipes.addShapeless({id: id результата, count: кол-во результата, data: data результата}, [{id: id1, data: data1}, {id: id2, data: data2}, ...], функция выполнения, префикс) - добавление бесформенных рецептов. &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;
Для добавления рецепта печи используется метод Recipes.addFurnace(id сырья, id результата, data результата, префикс, блокировка) - для обычного рецепта параметры префикс и блокировка не нужны.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;Recipes.addFurnace(265, 264, 0); // переплавка железа в алмаза&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=141</id>
		<title>InnerCore/Продвинутое создание блоков и предметов</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=141"/>
				<updated>2017-07-07T20:02:09Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Специальные типы блоков ===&lt;br /&gt;
&lt;br /&gt;
Чтобы создать блок с параметрами, которые отличаются от стандартных (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции Block.createSpecialType(объект характеристик) - функция принимает объект характеристик, которые нужно изменить и отдает специальный тип блока с этими характеристиками.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Специальный тип, созданный этой функцией передается в функцию Block.createBlock и Block.createBlockWithRotation третим параметром, чтобы блок был создан для данного специального типа. На 1 специальном типе может быть создано суммарно до 16 вариаций различных блоков.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Все характеристики, их значения по-умолчанию и разъяснение:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
&lt;br /&gt;
     base: 20, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал&lt;br /&gt;
&lt;br /&gt;
     opaque: false, // непрозрачность, если true, то внутри блока мобы будут получать урон, а так же места соприкосновения этого блока с другими не будут отрисованы&lt;br /&gt;
&lt;br /&gt;
     rendertype: 0, // тип модели, не работает в 0.15.7 и выше&lt;br /&gt;
&lt;br /&gt;
     renderlayer: 4, // тип рендера, 4 означает, что прозрачные части будут отрисованы прозрачными, а не черными&lt;br /&gt;
&lt;br /&gt;
     destroytime: 1, // не работает в 0.15.0 и выше, время ломания блока&lt;br /&gt;
&lt;br /&gt;
     redstoneconsumer: true, // будет ли происходить событие изменения редстоун-сигнала для этого блока&lt;br /&gt;
&lt;br /&gt;
     lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен&lt;br /&gt;
&lt;br /&gt;
     lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение&lt;br /&gt;
&lt;br /&gt;
     explosionres: 2, // взрывоустойчивость&lt;br /&gt;
&lt;br /&gt;
     color: [0xFFFFFF] // цвет для каждой стороны в формате 0xRRGGBB, если в массиве 1 элемент, то цвет будет установлен для всего блока&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример создания специального типа блока и самого блока:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;var BLOCK_TYPE_LOW_LIGHT = Block.createSpecialType({ // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться&lt;br /&gt;
&lt;br /&gt;
     lightlevel: 11,&lt;br /&gt;
&lt;br /&gt;
     lightopacity: 0&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;); // регистрациа id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Block.createBlock(&amp;quot;testBlock&amp;quot;, [&lt;br /&gt;
&lt;br /&gt;
     {name: &amp;quot;test block&amp;quot;, texture: [[&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0]]}&lt;br /&gt;
&lt;br /&gt;
], BLOCK_TYPE_LOW_LIGHT); // создаем блок на данном специальном типе&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;
=== Функция дропа (ломания) ===&lt;br /&gt;
&lt;br /&gt;
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction(&amp;quot;строковый id блока&amp;quot;, функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Функция дропа имеет такой формат:&lt;br /&gt;
&amp;lt;pre&amp;gt;function(coords, id, data, diggingLevel, toolLevel){&lt;br /&gt;
&lt;br /&gt;
     // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z&lt;br /&gt;
&lt;br /&gt;
     // id, data - id и data блока, id всегда совпадает с тем, на который была зарегистрирована функция и нужно, если одинаковая функция регистрируется на разные блоки&lt;br /&gt;
&lt;br /&gt;
     // diggingLevel - уровень ломания блока, где рука или инструмент другого типа - 0. Если же инструмент совпадает с материалом блока, то уровень будет равен уровню инструмента&lt;br /&gt;
&lt;br /&gt;
     // toolLevel -  уровень инструмента в руке, не зависит от самого блока&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     // если блок что то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data]&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;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;Block.registerDropFunction(&amp;quot;testBlock&amp;quot;, function(coords, id, data, diggingLevel, toolLevel){&lt;br /&gt;
&lt;br /&gt;
     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Полный аналог предыдущей функции, но с числовым id&lt;br /&gt;
&lt;br /&gt;
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){&lt;br /&gt;
&lt;br /&gt;
     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&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;
=== Функция установки ===&lt;br /&gt;
&lt;br /&gt;
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction(&amp;quot;строковый id блока&amp;quot;, функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Функция установки имеет такой формат:&lt;br /&gt;
&amp;lt;pre&amp;gt;function(coords, item, block){&lt;br /&gt;
&lt;br /&gt;
     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&lt;br /&gt;
&lt;br /&gt;
     // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&lt;br /&gt;
&lt;br /&gt;
     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&lt;br /&gt;
&lt;br /&gt;
     // block - блок, на который было произведено нажатие.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
     // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;Пример:&amp;lt;span id=&amp;quot;cke_bm_170E&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;pre&amp;gt;Block.registerPlaceFunction(&amp;quot;testBlock&amp;quot;, function(coords, item, block){&lt;br /&gt;
&lt;br /&gt;
     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&lt;br /&gt;
&lt;br /&gt;
     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Полный аналог предыдущей функции, но с числовым id&lt;br /&gt;
&lt;br /&gt;
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){&lt;br /&gt;
&lt;br /&gt;
     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&lt;br /&gt;
&lt;br /&gt;
     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&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;
=== Установка формы ===&lt;br /&gt;
&lt;br /&gt;
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Установка свойств предмета ===&lt;br /&gt;
&lt;br /&gt;
Для установки свойств предметов используется функция Item.describeItem(&amp;quot;строковый id&amp;quot;, объект описания).&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Все параметры в объекте описания, их стандартные значения и описание:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
&lt;br /&gt;
     category: 0, // категория в креативе&lt;br /&gt;
&lt;br /&gt;
     enchant: {value: 0, type: 0}, // тип зачарования&lt;br /&gt;
&lt;br /&gt;
     toolRender: false, // рендер в руке, как инструмент&lt;br /&gt;
&lt;br /&gt;
     maxDamage: 0, // максимальный дамаг предмета (шкала прочности)&lt;br /&gt;
&lt;br /&gt;
     stackByData: false, // стакается по data&lt;br /&gt;
&lt;br /&gt;
     properties: {}, // родной объект параметров MCPE&lt;br /&gt;
&lt;br /&gt;
     useAnimation: 0 // анимация использозвания&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;
Функции - аналоги параметров:&lt;br /&gt;
&lt;br /&gt;
*Item.setCategory(id, category) - аналог параметра category &lt;br /&gt;
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant &lt;br /&gt;
*Item.setToolRender(id, enabled) - аналог параметра toolRender &lt;br /&gt;
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage &lt;br /&gt;
*Item.setStackedByData(id, enabled) - аналог параметра stackByData &lt;br /&gt;
*Item.setProperties(id, props) - аналог параметра properties &lt;br /&gt;
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Функции - получение параметров:&lt;br /&gt;
&lt;br /&gt;
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name &lt;br /&gt;
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета &lt;br /&gt;
*Item.getMaxStack(id) - отдает размер стака &lt;br /&gt;
*Item.getUseAnimation(id) - отдает анимацию использования &lt;br /&gt;
*Item.isValid(id, data) - возвращает, существует ли данный предмет &lt;br /&gt;
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов &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;
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerPlaceFunction(&amp;quot;строковый id предмета&amp;quot;, функция использования) и Item.registerPlaceFunctionForID(числовой id предмета, функция использования).&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Функция использования имеет такой формат:&lt;br /&gt;
&amp;lt;pre&amp;gt;function(coords, item, block){&lt;br /&gt;
&lt;br /&gt;
     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&lt;br /&gt;
&lt;br /&gt;
     // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&lt;br /&gt;
&lt;br /&gt;
     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&lt;br /&gt;
&lt;br /&gt;
     // block - блок, на который было произведено нажатие.&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Функция броска предмета ===&lt;br /&gt;
&lt;br /&gt;
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction(&amp;quot;строковый id предмета&amp;quot;, функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Функция разбивания имеет такой формат:&lt;br /&gt;
&amp;lt;pre&amp;gt;function(projectile, item, target){&lt;br /&gt;
&lt;br /&gt;
     // projectile - entity кинутого предмета&lt;br /&gt;
&lt;br /&gt;
     // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity&lt;br /&gt;
&lt;br /&gt;
     // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/TileEntity&amp;diff=140</id>
		<title>InnerCore/TileEntity</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/TileEntity&amp;diff=140"/>
				<updated>2017-07-07T19:54:13Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
Tile entity - технология, добавляемая Core Engine для быстрого создания интерактивных блоков, таких как сундук или печь, модами. Для регистрации tile entity используется модуль TileEntity. Регистрация производится с помощью привязки к какому то ID блока объекта-прототипа, который будет дополнен и клонирован для каждого tile entity в мире.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Регистрация прототипа происходит с помощью метода TileEntity.registerPrototype(id блока, прототип);&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Объект прототипа обладает набором событий, областью для сохраняемых данных и контейнером, если какие то события не нужны данному типу tile entity, то их просто можно не писать. Внутри событий и методов обращения, обращаться к текущему объекту tile entity нужно через ключевое слово this.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Разъяснение всех элементов прототипа:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
&lt;br /&gt;
     defaultValues: {&lt;br /&gt;
&lt;br /&gt;
          // здесь прописаны все сохраняемые поля и их значения по умолчанию, далее они будут скопированы в поле data&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     container: ..., // стандартное для всех tile entity поле, содержит объект контейнера для данного tile entity, подробнее в главе про контейнеры&lt;br /&gt;
&lt;br /&gt;
     liquidStorage: ..., // стандартное для всех tile entity поле, содержит объект хранилища жидкости для данного tile entity, подробнее в главе про жидкости&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     created: function(){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается при создании tile entity&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     init: function(){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается при инициализации (загрузке в мир) tile entity&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     tick: function(){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается каждый тик&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     click: function(id, count, data, coords){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается при нажатии на блок tile entity, если возвращает истинное значение, то предотвращает открытие интерфейса&lt;br /&gt;
&lt;br /&gt;
          return false;&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     destroyBlock: function(coords, player){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается, когда tile entity уничтожается игроком&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     redstone: function(params){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается, когда на tile entity подается сигнал redstone, или же он прекращает подачу, params.power содержит новую мощность сигнала&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     projectileHit: function(coords, projectile){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается, когда кидаемый предмет разбивается о данный tile entity, coords.x, coords.y, coords.z - координаты, coords.side - сторона&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     destroy: function(){&lt;br /&gt;
&lt;br /&gt;
          // вызывается при попытке уничтожить объект tile entity, если возврращает истинное значение, то предотвращает уничтожение объекта (но не блока, если оно было вызвано уничтожением блока)&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     getGuiScreen: function(){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается при попытке открыть интерфейс, если возвращает объект интерфейса, то он открывается для данного tile entity, подробнее в разделе про интерфейс&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     requireMoreLiquid: function(liquid, amount){&lt;br /&gt;
&lt;br /&gt;
          // событие, вызывается, когда из внутреннего хранилища жидкости пытаются выкачать больше жидкости типа liquid, чем там есть, на amount ведер, подробнее в главе про жидкости&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     selfDestroy: function(), // стандартный метод, уничтожает объект tile entity, учтите, что будет вызвано событие destroy&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;
Пример регистрации прототипа:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
&lt;br /&gt;
// создаем блок&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TileEntity.registerPrototype(BlockID.testBlock, {&lt;br /&gt;
&lt;br /&gt;
     defaultValues: {&lt;br /&gt;
&lt;br /&gt;
          someValue: 0 // сохраняемое значение someValue, по умолчанию 0&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     tick: function(){&lt;br /&gt;
&lt;br /&gt;
          // что то сделать каждый тик, к примеру выводим someValue&lt;br /&gt;
&lt;br /&gt;
          Debug.message(this.data.someValue);&lt;br /&gt;
&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     click: function(id, count, data, coords){&lt;br /&gt;
&lt;br /&gt;
          this.data.someValue = 1; // установить значение someValue на 1&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     // остальные события не трогаем&lt;br /&gt;
&lt;br /&gt;
});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/TileEntity&amp;diff=139</id>
		<title>InnerCore/TileEntity</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/TileEntity&amp;diff=139"/>
				<updated>2017-07-07T19:52:13Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Tile entity - технология, добавляемая Core Engine для быстрого создания интерактивных блоков, таких как сундук или печь, модами. Для регистрации tile entity используется модуль TileEntity. Регистрация производится с помощью привязки к какому то ID блока объекта-прототипа, который будет дополнен и клонирован для каждого tile entity в мире.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Регистрация прототипа происходит с помощью метода TileEntity.registerPrototype(id блока, прототип);&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Объект прототипа обладает набором событий, областью для сохраняемых данных и контейнером, если какие то события не нужны данному типу tile entity, то их просто можно не писать. Внутри событий и методов обращения, обращаться к текущему объекту tile entity нужно через ключевое слово this.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Разъяснение всех элементов прототипа:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     defaultValues: {&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // здесь прописаны все сохраняемые поля и их значения по умолчанию, далее они будут скопированы в поле data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     container: ..., // стандартное для всех tile entity поле, содержит объект контейнера для данного tile entity, подробнее в главе про контейнеры&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     liquidStorage: ..., // стандартное для всех tile entity поле, содержит объект хранилища жидкости для данного tile entity, подробнее в главе про жидкости&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     created: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается при создании tile entity&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     init: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается при инициализации (загрузке в мир) tile entity&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     tick: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается каждый тик&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     click: function(id, count, data, coords){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается при нажатии на блок tile entity, если возвращает истинное значение, то предотвращает открытие интерфейса&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          return false;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     destroyBlock: function(coords, player){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается, когда tile entity уничтожается игроком&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     redstone: function(params){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается, когда на tile entity подается сигнал redstone, или же он прекращает подачу, params.power содержит новую мощность сигнала&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     projectileHit: function(coords, projectile){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается, когда кидаемый предмет разбивается о данный tile entity, coords.x, coords.y, coords.z - координаты, coords.side - сторона&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     destroy: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // вызывается при попытке уничтожить объект tile entity, если возврращает истинное значение, то предотвращает уничтожение объекта (но не блока, если оно было вызвано уничтожением блока)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     getGuiScreen: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается при попытке открыть интерфейс, если возвращает объект интерфейса, то он открывается для данного tile entity, подробнее в разделе про интерфейс&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     requireMoreLiquid: function(liquid, amount){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается, когда из внутреннего хранилища жидкости пытаются выкачать больше жидкости типа liquid, чем там есть, на amount ведер, подробнее в главе про жидкости&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     selfDestroy: function(), // стандартный метод, уничтожает объект tile entity, учтите, что будет вызвано событие destroy&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример регистрации прототипа:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// ...&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// создаем блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TileEntity.registerPrototype(BlockID.testBlock, {&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     defaultValues: {&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          someValue: 0 // сохраняемое значение someValue, по умолчанию 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     tick: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // что то сделать каждый тик, к примеру выводим someValue&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          Debug.message(this.data.someValue);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     click: function(id, count, data, coords){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          this.data.someValue = 1; // установить значение someValue на 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // остальные события не трогаем&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/TileEntity&amp;diff=138</id>
		<title>InnerCore/TileEntity</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/TileEntity&amp;diff=138"/>
				<updated>2017-07-07T19:51:33Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent&lt;br /&gt;
        m-pageContent__withoutLeft&lt;br /&gt;
        m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone&lt;br /&gt;
        m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Tile entity - технология, добавляемая Core Engine для быстрого создания интерактивных блоков, таких как сундук или печь, модами. Для регистрации tile entity используется модуль TileEntity. Регистрация производится с помощью привязки к какому то ID блока объекта-прототипа, который будет дополнен и клонирован для каждого tile entity в мире.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Регистрация прототипа происходит с помощью метода TileEntity.registerPrototype(id блока, прототип);&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Объект прототипа обладает набором событий, областью для сохраняемых данных и контейнером, если какие то события не нужны данному типу tile entity, то их просто можно не писать. Внутри событий и методов обращения, обращаться к текущему объекту tile entity нужно через ключевое слово this.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Разъяснение всех элементов прототипа:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; defaultValues: {&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // здесь прописаны все сохраняемые поля и их значения по умолчанию, далее они будут скопированы в поле data&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; container: ..., // стандартное для всех tile entity поле, содержит объект контейнера для данного tile entity, подробнее в главе про контейнеры&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; liquidStorage: ..., // стандартное для всех tile entity поле, содержит объект хранилища жидкости для данного tile entity, подробнее в главе про жидкости&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; created: function(){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается при создании tile entity&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; init: function(){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается при инициализации (загрузке в мир) tile entity&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; tick: function(){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается каждый тик&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; click: function(id, count, data, coords){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается при нажатии на блок tile entity, если возвращает истинное значение, то предотвращает открытие интерфейса&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; return false;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; destroyBlock: function(coords, player){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается, когда tile entity уничтожается игроком&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; redstone: function(params){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается, когда на tile entity подается сигнал redstone, или же он прекращает подачу, params.power содержит новую мощность сигнала&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; projectileHit: function(coords, projectile){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается, когда кидаемый предмет разбивается о данный tile entity, coords.x, coords.y, coords.z - координаты, coords.side - сторона&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; destroy: function(){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // вызывается при попытке уничтожить объект tile entity, если возврращает истинное значение, то предотвращает уничтожение объекта (но не блока, если оно было вызвано уничтожением блока)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; getGuiScreen: function(){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается при попытке открыть интерфейс, если возвращает объект интерфейса, то он открывается для данного tile entity, подробнее в разделе про интерфейс&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; requireMoreLiquid: function(liquid, amount){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // событие, вызывается, когда из внутреннего хранилища жидкости пытаются выкачать больше жидкости типа liquid, чем там есть, на amount ведер, подробнее в главе про жидкости&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; selfDestroy: function(), // стандартный метод, уничтожает объект tile entity, учтите, что будет вызвано событие destroy&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример регистрации прототипа:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;);&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// ...&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// создаем блок&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TileEntity.registerPrototype(BlockID.testBlock, {&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; defaultValues: {&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; someValue: 0 // сохраняемое значение someValue, по умолчанию 0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; tick: function(){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // что то сделать каждый тик, к примеру выводим someValue&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Debug.message(this.data.someValue);&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; },&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; click: function(id, count, data, coords){&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; this.data.someValue = 1; // установить значение someValue на 1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; }&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; // остальные события не трогаем&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/TileEntity&amp;diff=137</id>
		<title>InnerCore/TileEntity</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/TileEntity&amp;diff=137"/>
				<updated>2017-07-07T19:50:10Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent         m-pageContent__withoutLeft         m-pageContent__withoutRight&amp;quot; i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent&lt;br /&gt;
        m-pageContent__withoutLeft&lt;br /&gt;
        m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone&lt;br /&gt;
        m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Tile entity - технология, добавляемая Core Engine для быстрого создания интерактивных блоков, таких как сундук или печь, модами. Для регистрации tile entity используется модуль TileEntity. Регистрация производится с помощью привязки к какому то ID блока объекта-прототипа, который будет дополнен и клонирован для каждого tile entity в мире.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Регистрация прототипа происходит с помощью метода TileEntity.registerPrototype(id блока, прототип);&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Объект прототипа обладает набором событий, областью для сохраняемых данных и контейнером, если какие то события не нужны данному типу tile entity, то их просто можно не писать. Внутри событий и методов обращения, обращаться к текущему объекту tile entity нужно через ключевое слово this.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Разъяснение всех элементов прототипа:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     defaultValues: {&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // здесь прописаны все сохраняемые поля и их значения по умолчанию, далее они будут скопированы в поле data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     container: ..., // стандартное для всех tile entity поле, содержит объект контейнера для данного tile entity, подробнее в главе про контейнеры &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     liquidStorage: ..., // стандартное для всех tile entity поле, содержит объект хранилища жидкости для данного tile entity, подробнее в главе про жидкости&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     created: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается при создании tile entity&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     init: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается при инициализации (загрузке в мир) tile entity&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     tick: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается каждый тик&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     click: function(id, count, data, coords){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается при нажатии на блок tile entity, если возвращает истинное значение, то предотвращает открытие интерфейса&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          return false;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     destroyBlock: function(coords, player){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается, когда tile entity уничтожается игроком&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     redstone: function(params){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается, когда на tile entity подается сигнал redstone, или же он прекращает подачу, params.power содержит новую мощность сигнала&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     projectileHit: function(coords, projectile){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается, когда кидаемый предмет разбивается о данный tile entity, coords.x, coords.y, coords.z - координаты, coords.side - сторона&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     destroy: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // вызывается при попытке уничтожить объект tile entity, если возврращает истинное значение, то предотвращает уничтожение объекта (но не блока, если оно было вызвано уничтожением блока)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     getGuiScreen: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается при попытке открыть интерфейс, если возвращает объект интерфейса, то он открывается для данного tile entity, подробнее в разделе про интерфейс&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     }, &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     requireMoreLiquid: function(liquid, amount){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // событие, вызывается, когда из внутреннего хранилища жидкости пытаются выкачать больше жидкости типа liquid, чем там есть, на amount ведер, подробнее в главе про жидкости&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     selfDestroy: function(), // стандартный метод, уничтожает объект tile entity, учтите, что будет вызвано событие destroy&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример регистрации прототипа:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// ...&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// создаем блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TileEntity.registerPrototype(BlockID.testBlock, {&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     defaultValues: {&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          someValue: 0 // сохраняемое значение someValue, по умолчанию 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     tick: function(){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          // что то сделать каждый тик, к примеру выводим someValue&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          Debug.message(this.data.someValue);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     },&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     click: function(id, count, data, coords){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;          this.data.someValue = 1; // установить значение someValue на 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // остальные события не трогаем&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=136</id>
		<title>InnerCore/Продвинутое создание блоков и предметов</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=136"/>
				<updated>2017-07-07T19:48:05Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Специальные типы блоков ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Чтобы создать блок с параметрами, которые отличаются от стандартных (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции Block.createSpecialType(объект характеристик) - функция принимает объект характеристик, которые нужно изменить и отдает специальный тип блока с этими характеристиками.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Специальный тип, созданный этой функцией передается в функцию Block.createBlock и Block.createBlockWithRotation третим параметром, чтобы блок был создан для данного специального типа. На 1 специальном типе может быть создано суммарно до 16 вариаций различных блоков.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Все характеристики, их значения по-умолчанию и разъяснение:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     base: 20, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     opaque: false, // непрозрачность, если true, то внутри блока мобы будут получать урон, а так же места соприкосновения этого блока с другими не будут отрисованы&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     rendertype: 0, // тип модели, не работает в 0.15.7 и выше&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     renderlayer: 4, // тип рендера, 4 означает, что прозрачные части будут отрисованы прозрачными, а не черными&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     destroytime: 1, // не работает в 0.15.0 и выше, время ломания блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     redstoneconsumer: true, // будет ли происходить событие изменения редстоун-сигнала для этого блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     explosionres: 2, // взрывоустойчивость&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     color: [0xFFFFFF] // цвет для каждой стороны в формате 0xRRGGBB, если в массиве 1 элемент, то цвет будет установлен для всего блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример создания специального типа блока и самого блока:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;var BLOCK_TYPE_LOW_LIGHT = Block.createSpecialType({ // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightlevel: 11,&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightopacity: 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;); // регистрациа id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.createBlock(&amp;quot;testBlock&amp;quot;, [&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     {name: &amp;quot;test block&amp;quot;, texture: [[&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0]]}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;], BLOCK_TYPE_LOW_LIGHT); // создаем блок на данном специальном типе&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Функция дропа (ломания) ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction(&amp;quot;строковый id блока&amp;quot;, функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция дропа имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, id, data, diggingLevel, toolLevel){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // id, data - id и data блока, id всегда совпадает с тем, на который была зарегистрирована функция и нужно, если одинаковая функция регистрируется на разные блоки&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // diggingLevel - уровень ломания блока, где рука или инструмент другого типа - 0. Если же инструмент совпадает с материалом блока, то уровень будет равен уровню инструмента&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // toolLevel -  уровень инструмента в руке, не зависит от самого блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // если блок что то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerDropFunction(&amp;quot;testBlock&amp;quot;, function(coords, id, data, diggingLevel, toolLevel){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// Полный аналог предыдущей функции, но с числовым id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){ &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Функция установки ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction(&amp;quot;строковый id блока&amp;quot;, функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция установки имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // block - блок, на который было произведено нажатие.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerPlaceFunction(&amp;quot;testBlock&amp;quot;, function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// Полный аналог предыдущей функции, но с числовым id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Установка формы ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Установка свойств предметов ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Для установки свойств предметов используется функция Item.describeItem(&amp;quot;строковый id&amp;quot;, объект описания).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Все параметры в объекте описания, их стандартные значения и описание:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&lt;br /&gt;
   category: 0, // категория в креативе&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   enchant: {value: 0, type: 0}, // тип зачарования&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   toolRender: false, // рендер в руке, как инструмент&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   maxDamage: 0, // максимальный дамаг предмета (шкала прочности)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   stackByData: false, // стакается по data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   properties: {}, // родной объект параметров MCPE&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   useAnimation: 0 // анимация использозвания&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функции - аналоги параметров:&amp;lt;/div&amp;gt; &lt;br /&gt;
*Item.setCategory(id, category) - аналог параметра category &lt;br /&gt;
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant &lt;br /&gt;
*Item.setToolRender(id, enabled) - аналог параметра toolRender &lt;br /&gt;
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage &lt;br /&gt;
*Item.setStackedByData(id, enabled) - аналог параметра stackByData &lt;br /&gt;
*Item.setProperties(id, props) - аналог параметра properties &lt;br /&gt;
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation &lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функции - получение параметров:&amp;lt;/div&amp;gt; &lt;br /&gt;
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name &lt;br /&gt;
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета &lt;br /&gt;
*Item.getMaxStack(id) - отдает размер стака &lt;br /&gt;
*Item.getUseAnimation(id) - отдает анимацию использования &lt;br /&gt;
*Item.isValid(id, data) - возвращает, существует ли данный предмет &lt;br /&gt;
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов &lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Функция использования предмета ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerPlaceFunction(&amp;quot;строковый id предмета&amp;quot;, функция использования) и Item.registerPlaceFunctionForID(числовой id предмета, функция использования).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция использования имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // block - блок, на который было произведено нажатие.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Функция броска предмета ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction(&amp;quot;строковый id предмета&amp;quot;, функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция разбивания имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(projectile, item, target){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // projectile - entity кинутого предмета&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=135</id>
		<title>InnerCore/Продвинутое создание блоков и предметов</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=135"/>
				<updated>2017-07-07T19:43:54Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Специальные типы блоков ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Чтобы создать блок с параметрами, которые отличаются от стандартных (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции Block.createSpecialType(объект характеристик) - функция принимает объект характеристик, которые нужно изменить и отдает специальный тип блока с этими характеристиками.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Специальный тип, созданный этой функцией передается в функцию Block.createBlock и Block.createBlockWithRotation третим параметром, чтобы блок был создан для данного специального типа. На 1 специальном типе может быть создано суммарно до 16 вариаций различных блоков.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Все характеристики, их значения по-умолчанию и разъяснение:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     base: 20, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     opaque: false, // непрозрачность, если true, то внутри блока мобы будут получать урон, а так же места соприкосновения этого блока с другими не будут отрисованы&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     rendertype: 0, // тип модели, не работает в 0.15.7 и выше&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     renderlayer: 4, // тип рендера, 4 означает, что прозрачные части будут отрисованы прозрачными, а не черными&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     destroytime: 1, // не работает в 0.15.0 и выше, время ломания блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     redstoneconsumer: true, // будет ли происходить событие изменения редстоун-сигнала для этого блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     explosionres: 2, // взрывоустойчивость&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     color: [0xFFFFFF] // цвет для каждой стороны в формате 0xRRGGBB, если в массиве 1 элемент, то цвет будет установлен для всего блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример создания специального типа блока и самого блока:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;var BLOCK_TYPE_LOW_LIGHT = Block.createSpecialType({ // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightlevel: 11,&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightopacity: 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;); // регистрациа id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.createBlock(&amp;quot;testBlock&amp;quot;, [&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     {name: &amp;quot;test block&amp;quot;, texture: [[&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0]]}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;], BLOCK_TYPE_LOW_LIGHT); // создаем блок на данном специальном типе&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Функция дропа (ломания) ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction(&amp;quot;строковый id блока&amp;quot;, функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция дропа имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, id, data, diggingLevel, toolLevel){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // id, data - id и data блока, id всегда совпадает с тем, на который была зарегистрирована функция и нужно, если одинаковая функция регистрируется на разные блоки&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // diggingLevel - уровень ломания блока, где рука или инструмент другого типа - 0. Если же инструмент совпадает с материалом блока, то уровень будет равен уровню инструмента&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // toolLevel -  уровень инструмента в руке, не зависит от самого блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // если блок что то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerDropFunction(&amp;quot;testBlock&amp;quot;, function(coords, id, data, diggingLevel, toolLevel){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// Полный аналог предыдущей функции, но с числовым id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){ &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Функция установки ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction(&amp;quot;строковый id блока&amp;quot;, функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция установки имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // block - блок, на который было произведено нажатие.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerPlaceFunction(&amp;quot;testBlock&amp;quot;, function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// Полный аналог предыдущей функции, но с числовым id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Установка формы ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Установка свойств предметов ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Для установки свойств предметов используется функция Item.describeItem(&amp;quot;строковый id&amp;quot;, объект описания).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Все параметры в объекте описания, их стандартные значения и описание:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     category: 0, // категория в креативе&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     enchant: {value: 0, type: 0}, // тип зачарования&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     toolRender: false, // рендер в руке, как инструмент&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     maxDamage: 0, // максимальный дамаг предмета (шкала прочности)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     stackByData: false, // стакается по data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     properties: {}, // родной объект параметров MCPE&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     useAnimation: 0 // анимация использозвания&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функции - аналоги параметров:&amp;lt;/div&amp;gt; &lt;br /&gt;
*Item.setCategory(id, category) - аналог параметра category &lt;br /&gt;
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant &lt;br /&gt;
*Item.setToolRender(id, enabled) - аналог параметра toolRender &lt;br /&gt;
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage &lt;br /&gt;
*Item.setStackedByData(id, enabled) - аналог параметра stackByData &lt;br /&gt;
*Item.setProperties(id, props) - аналог параметра properties &lt;br /&gt;
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation &lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функции - получение параметров:&amp;lt;/div&amp;gt; &lt;br /&gt;
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name &lt;br /&gt;
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета &lt;br /&gt;
*Item.getMaxStack(id) - отдает размер стака &lt;br /&gt;
*Item.getUseAnimation(id) - отдает анимацию использования &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*Item.isValid(id, data) - возвращает, существует ли данный предмет &lt;br /&gt;
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов &lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Функция использования предмета ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerPlaceFunction(&amp;quot;строковый id предмета&amp;quot;, функция использования) и Item.registerPlaceFunctionForID(числовой id предмета, функция использования).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция использования имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // block - блок, на который было произведено нажатие.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Функция броска предмета ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction(&amp;quot;строковый id предмета&amp;quot;, функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция разбивания имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(projectile, item, target){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // projectile - entity кинутого предмета&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=134</id>
		<title>InnerCore/Продвинутое создание блоков и предметов</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=134"/>
				<updated>2017-07-07T19:43:02Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Специальные типы блоков ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Чтобы создать блок с параметрами, которые отличаются от стандартных (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции Block.createSpecialType(объект характеристик) - функция принимает объект характеристик, которые нужно изменить и отдает специальный тип блока с этими характеристиками.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Специальный тип, созданный этой функцией передается в функцию Block.createBlock и Block.createBlockWithRotation третим параметром, чтобы блок был создан для данного специального типа. На 1 специальном типе может быть создано суммарно до 16 вариаций различных блоков.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Все характеристики, их значения по-умолчанию и разъяснение:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     base: 20, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     opaque: false, // непрозрачность, если true, то внутри блока мобы будут получать урон, а так же места соприкосновения этого блока с другими не будут отрисованы&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     rendertype: 0, // тип модели, не работает в 0.15.7 и выше&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     renderlayer: 4, // тип рендера, 4 означает, что прозрачные части будут отрисованы прозрачными, а не черными&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     destroytime: 1, // не работает в 0.15.0 и выше, время ломания блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     redstoneconsumer: true, // будет ли происходить событие изменения редстоун-сигнала для этого блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     explosionres: 2, // взрывоустойчивость&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     color: [0xFFFFFF] // цвет для каждой стороны в формате 0xRRGGBB, если в массиве 1 элемент, то цвет будет установлен для всего блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример создания специального типа блока и самого блока:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;var BLOCK_TYPE_LOW_LIGHT = Block.createSpecialType({ // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightlevel: 11,&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightopacity: 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;); // регистрациа id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.createBlock(&amp;quot;testBlock&amp;quot;, [&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     {name: &amp;quot;test block&amp;quot;, texture: [[&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0]]}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;], BLOCK_TYPE_LOW_LIGHT); // создаем блок на данном специальном типе&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Функция дропа (ломания) ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction(&amp;quot;строковый id блока&amp;quot;, функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция дропа имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, id, data, diggingLevel, toolLevel){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // id, data - id и data блока, id всегда совпадает с тем, на который была зарегистрирована функция и нужно, если одинаковая функция регистрируется на разные блоки&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // diggingLevel - уровень ломания блока, где рука или инструмент другого типа - 0. Если же инструмент совпадает с материалом блока, то уровень будет равен уровню инструмента&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // toolLevel -  уровень инструмента в руке, не зависит от самого блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // если блок что то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerDropFunction(&amp;quot;testBlock&amp;quot;, function(coords, id, data, diggingLevel, toolLevel){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// Полный аналог предыдущей функции, но с числовым id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){ &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Функция установки ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction(&amp;quot;строковый id блока&amp;quot;, функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция установки имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // block - блок, на который было произведено нажатие.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerPlaceFunction(&amp;quot;testBlock&amp;quot;, function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// Полный аналог предыдущей функции, но с числовым id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;УСТАНОВКА ФОРМЫ&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&lt;br /&gt;
Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Установка свойств предметов&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Для установки свойств предметов используется функция Item.describeItem(&amp;quot;строковый id&amp;quot;, объект описания).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Все параметры в объекте описания, их стандартные значения и описание:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     category: 0, // категория в креативе&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     enchant: {value: 0, type: 0}, // тип зачарования&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     toolRender: false, // рендер в руке, как инструмент&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     maxDamage: 0, // максимальный дамаг предмета (шкала прочности)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     stackByData: false, // стакается по data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     properties: {}, // родной объект параметров MCPE&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     useAnimation: 0 // анимация использозвания&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функции - аналоги параметров:&amp;lt;/div&amp;gt; &lt;br /&gt;
*Item.setCategory(id, category) - аналог параметра category &lt;br /&gt;
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant &lt;br /&gt;
*Item.setToolRender(id, enabled) - аналог параметра toolRender &lt;br /&gt;
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage &lt;br /&gt;
*Item.setStackedByData(id, enabled) - аналог параметра stackByData &lt;br /&gt;
*Item.setProperties(id, props) - аналог параметра properties &lt;br /&gt;
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation &lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функции - получение параметров:&amp;lt;/div&amp;gt; &lt;br /&gt;
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name &lt;br /&gt;
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета &lt;br /&gt;
*Item.getMaxStack(id) - отдает размер стака &lt;br /&gt;
*Item.getUseAnimation(id) - отдает анимацию использования &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*Item.isValid(id, data) - возвращает, существует ли данный предмет &lt;br /&gt;
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов &lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Функция использования предмета ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerPlaceFunction(&amp;quot;строковый id предмета&amp;quot;, функция использования) и Item.registerPlaceFunctionForID(числовой id предмета, функция использования).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция использования имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // block - блок, на который было произведено нажатие.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Функция броска предмета ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction(&amp;quot;строковый id предмета&amp;quot;, функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция разбивания имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(projectile, item, target){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // projectile - entity кинутого предмета&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=133</id>
		<title>InnerCore/Продвинутое создание блоков и предметов</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&amp;diff=133"/>
				<updated>2017-07-07T19:39:29Z</updated>
		
		<summary type="html">&lt;p&gt;93.124.107.25: Created page with &amp;quot;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Специальные типы блоков ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Чтобы создать блок с параметрами, которые отличаются от стандартных (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции Block.createSpecialType(объект характеристик) - функция принимает объект характеристик, которые нужно изменить и отдает специальный тип блока с этими характеристиками.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Специальный тип, созданный этой функцией передается в функцию Block.createBlock и Block.createBlockWithRotation третим параметром, чтобы блок был создан для данного специального типа. На 1 специальном типе может быть создано суммарно до 16 вариаций различных блоков.&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Все характеристики, их значения по-умолчанию и разъяснение:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     base: 20, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     opaque: false, // непрозрачность, если true, то внутри блока мобы будут получать урон, а так же места соприкосновения этого блока с другими не будут отрисованы&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     rendertype: 0, // тип модели, не работает в 0.15.7 и выше&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     renderlayer: 4, // тип рендера, 4 означает, что прозрачные части будут отрисованы прозрачными, а не черными&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     destroytime: 1, // не работает в 0.15.0 и выше, время ломания блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     redstoneconsumer: true, // будет ли происходить событие изменения редстоун-сигнала для этого блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     explosionres: 2, // взрывоустойчивость&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     color: [0xFFFFFF] // цвет для каждой стороны в формате 0xRRGGBB, если в массиве 1 элемент, то цвет будет установлен для всего блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;b-pageLayout b-pageLayout__xs&amp;quot; data-layout=&amp;quot;xs&amp;quot; id=&amp;quot;pageLayout&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight&amp;quot; id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-pageContent__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side&amp;quot; | &lt;br /&gt;
{| id=&amp;quot;internal_wrapper&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-pageContent__side m-pageContent__side__middle&amp;quot; id=&amp;quot;pageContentMiddle&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone m-workZone__withoutSideNav&amp;quot; id=&amp;quot;workZone&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;b-workZone__layout&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;b-workZone__side m-workZone__side__article&amp;quot; id=&amp;quot;workZone_article&amp;quot; | &amp;lt;div class=&amp;quot;b-workZone__content&amp;quot; id=&amp;quot;workZone_article__content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article&amp;quot; id=&amp;quot;article&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__preWrapper&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__wrapper&amp;quot; style=&amp;quot;height: auto;  min-height: 0px&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b-article__innerWrapper&amp;quot; id=&amp;quot;description_on_page_placeholder&amp;quot; style=&amp;quot;height: auto&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;description_on_page&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример создания специального типа блока и самого блока:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;var BLOCK_TYPE_LOW_LIGHT = Block.createSpecialType({ // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightlevel: 11,&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     lightopacity: 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IDRegistry.genBlockID(&amp;quot;testBlock&amp;quot;); // регистрациа id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.createBlock(&amp;quot;testBlock&amp;quot;, [&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     {name: &amp;quot;test block&amp;quot;, texture: [[&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0], [&amp;quot;obsidian&amp;quot;, 0]]}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;], BLOCK_TYPE_LOW_LIGHT); // создаем блок на данном специальном типе&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Функция дропа (ломания) ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction(&amp;quot;строковый id блока&amp;quot;, функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция дропа имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, id, data, diggingLevel, toolLevel){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // id, data - id и data блока, id всегда совпадает с тем, на который была зарегистрирована функция и нужно, если одинаковая функция регистрируется на разные блоки&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // diggingLevel - уровень ломания блока, где рука или инструмент другого типа - 0. Если же инструмент совпадает с материалом блока, то уровень будет равен уровню инструмента&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // toolLevel -  уровень инструмента в руке, не зависит от самого блока&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // если блок что то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerDropFunction(&amp;quot;testBlock&amp;quot;, function(coords, id, data, diggingLevel, toolLevel){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// Полный аналог предыдущей функции, но с числовым id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){ &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Функция установки ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction(&amp;quot;строковый id блока&amp;quot;, функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция установки имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // block - блок, на который было произведено нажатие.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Пример:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerPlaceFunction(&amp;quot;testBlock&amp;quot;, function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;// Полный аналог предыдущей функции, но с числовым id&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;});&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;УСТАНОВКА ФОРМЫ&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&lt;br /&gt;
Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Установка свойств предметов ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Для установки свойств предметов используется функция Item.describeItem(&amp;quot;строковый id&amp;quot;, объект описания).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Все параметры в объекте описания, их стандартные значения и описание:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     category: 0, // категория в креативе&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     enchant: {value: 0, type: 0}, // тип зачарования&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     toolRender: false, // рендер в руке, как инструмент&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     maxDamage: 0, // максимальный дамаг предмета (шкала прочности)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     stackByData: false, // стакается по data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     properties: {}, // родной объект параметров MCPE&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     useAnimation: 0 // анимация использозвания&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функции - аналоги параметров:&amp;lt;/div&amp;gt; &lt;br /&gt;
*Item.setCategory(id, category) - аналог параметра category &lt;br /&gt;
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant &lt;br /&gt;
*Item.setToolRender(id, enabled) - аналог параметра toolRender &lt;br /&gt;
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage &lt;br /&gt;
*Item.setStackedByData(id, enabled) - аналог параметра stackByData &lt;br /&gt;
*Item.setProperties(id, props) - аналог параметра properties &lt;br /&gt;
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation &lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функции - получение параметров:&amp;lt;/div&amp;gt; &lt;br /&gt;
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name &lt;br /&gt;
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета &lt;br /&gt;
*Item.getMaxStack(id) - отдает размер стака &lt;br /&gt;
*Item.getUseAnimation(id) - отдает анимацию использования &lt;br /&gt;
*&amp;amp;nbsp; &lt;br /&gt;
*Item.isValid(id, data) - возвращает, существует ли данный предмет &lt;br /&gt;
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов &lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;ФУНКЦИЯ ИСПОЛЬЗОВАНИЯ ПРЕДМЕТА&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerPlaceFunction(&amp;quot;строковый id предмета&amp;quot;, функция использования) и Item.registerPlaceFunctionForID(числовой id предмета, функция использования).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция использования имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(coords, item, block){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // block - блок, на который было произведено нажатие.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &lt;br /&gt;
=== Функция броска предмета ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction(&amp;quot;строковый id предмета&amp;quot;, функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;Функция разбивания имеет такой формат:&amp;lt;/div&amp;gt; &amp;lt;pre class=&amp;quot;p&amp;quot; style=&amp;quot;text-align: left;  text-indent: 0px;  margin-left: 0px;  direction: ltr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;function(projectile, item, target){&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // projectile - entity кинутого предмета&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;     // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.124.107.25</name></author>	</entry>

	</feed>