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

	<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=241</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=241"/>
				<updated>2017-11-22T19:04:05Z</updated>
		
		<summary type="html">&lt;p&gt;95.153.135.230: &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;
&lt;br /&gt;
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction(&amp;quot;строковый id предмета&amp;quot;, функция использования) и Item.registerUseFunctionForID(числовой 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>95.153.135.230</name></author>	</entry>

	</feed>