Пример создания специального типа блока и самого блока:
<span class="code">var BLOCK_TYPE_LOW_LIGHT = Block.createSpecialType({ // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться</span>
<span class="code"> lightlevel: 11,</span>
<span class="code"> lightopacity: 0</span>
<span class="code">});</span>
<span class="code">IDRegistry.genBlockID("testBlock"); // регистрациа id</span>
<span class="code">Block.createBlock("testBlock", [</span>
<span class="code"> {name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}</span>
<span class="code">], BLOCK_TYPE_LOW_LIGHT); // создаем блок на данном специальном типе</span>
Функция дропа (ломания)
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)
Функция дропа имеет такой формат:
<span class="code">function(coords, id, data, diggingLevel, toolLevel){</span>
<span class="code"> // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z</span>
<span class="code"> // id, data - id и data блока, id всегда совпадает с тем, на который была зарегистрирована функция и нужно, если одинаковая функция регистрируется на разные блоки</span>
<span class="code"> // diggingLevel - уровень ломания блока, где рука или инструмент другого типа - 0. Если же инструмент совпадает с материалом блока, то уровень будет равен уровню инструмента</span>
<span class="code"> // toolLevel - уровень инструмента в руке, не зависит от самого блока</span>
<span class="code"> </span>
<span class="code"> // если блок что то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data]</span>
<span class="code">}</span>
Пример:
<span class="code">Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){</span>
<span class="code"> return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз</span>
<span class="code">});</span>
<span class="code">// Полный аналог предыдущей функции, но с числовым id</span>
<span class="code">Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){ </span>
<span class="code"> return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз</span>
<span class="code">});</span>
Функция установки
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).
Функция установки имеет такой формат:
<span class="code">function(coords, item, block){</span>
<span class="code"> // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z</span>
<span class="code"> // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z</span>
<span class="code"> // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data</span>
<span class="code"> // block - блок, на который было произведено нажатие.</span>
<span class="code"> </span>
<span class="code"> // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }</span>
<span class="code">}</span>
Пример:
<span class="code">Block.registerPlaceFunction("testBlock", function(coords, item, block){</span>
<span class="code"> World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок</span>
<span class="code"> World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок</span>
<span class="code">});</span>
<span class="code">// Полный аналог предыдущей функции, но с числовым id</span>
<span class="code">Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){</span>
<span class="code"> World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок</span>
<span class="code"> World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок</span>
<span class="code">});</span>
Установка формы
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)
Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба
Установка свойств предметов
Для установки свойств предметов используется функция Item.describeItem("строковый id", объект описания).
Все параметры в объекте описания, их стандартные значения и описание:
<span class="code">{</span>
<span class="code"> category: 0, // категория в креативе</span>
<span class="code"> enchant: {value: 0, type: 0}, // тип зачарования</span>
<span class="code"> toolRender: false, // рендер в руке, как инструмент</span>
<span class="code"> maxDamage: 0, // максимальный дамаг предмета (шкала прочности)</span>
<span class="code"> stackByData: false, // стакается по data</span>
<span class="code"> properties: {}, // родной объект параметров MCPE</span>
<span class="code"> useAnimation: 0 // анимация использозвания</span>
<span class="code">}</span>
Функции - аналоги параметров:
- Item.setCategory(id, category) - аналог параметра category
- Item.setEnchantType(id, enchant, value) - аналог параметра enchant
- Item.setToolRender(id, enabled) - аналог параметра toolRender
- Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage
- Item.setStackedByData(id, enabled) - аналог параметра stackByData
- Item.setProperties(id, props) - аналог параметра properties
- Item.setUseAnimation(id, animType) - аналог параметра useAnimation
Функции - получение параметров:
- Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name
- Item.getMaxDamage(id) - отдает максимальный дамаг предмета
- Item.getMaxStack(id) - отдает размер стака
- Item.getUseAnimation(id) - отдает анимацию использования
-
- Item.isValid(id, data) - возвращает, существует ли данный предмет
- Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов
Функция использования предмета
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerPlaceFunction("строковый id предмета", функция использования) и Item.registerPlaceFunctionForID(числовой id предмета, функция использования).
Функция использования имеет такой формат:
<span class="code">function(coords, item, block){</span>
<span class="code"> // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z</span>
<span class="code"> // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z</span>
<span class="code"> // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data</span>
<span class="code"> // block - блок, на который было произведено нажатие.</span>
<span class="code">}</span>
Функция броска предмета
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).
Функция разбивания имеет такой формат:
<span class="code">function(projectile, item, target){</span>
<span class="code"> // projectile - entity кинутого предмета</span>
<span class="code"> // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity</span>
<span class="code"> // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data</span>
<span class="code">}</span>