Продвинутое создание блоков и предметов — различия между версиями

 
(не показано 13 промежуточных версий 5 участников)
Строка 1: Строка 1:
<div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent">
+
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent">
 
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.
 
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.
 
+
<div class="mw-parser-output"><div class="mw-parser-output">
&nbsp;
+
<div class="mw-parser-output">
 
 
 
=== Специальные типы блоков ===
 
=== Специальные типы блоков ===
  
Чтобы создать блок с параметрами, которые отличаются от стандартных (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции Block.createSpecialType(объект характеристик) - функция принимает объект характеристик, которые нужно изменить и отдает специальный тип блока с этими характеристиками.
+
Характеристики блока указывается в методах&nbsp;Block.createBlock и Block.createBlockWithRotation третьим параметром.&nbsp;Чтобы не повторять их для каждого блока, можно зарегистрировать специальный тип методом&nbsp;Block.createSpecialType(название, объект характеристик) и использовать название спец. типа.
 
 
&nbsp;
 
 
 
Специальный тип, созданный этой функцией передается в функцию Block.createBlock и Block.createBlockWithRotation третим параметром, чтобы блок был создан для данного специального типа. На 1 специальном типе может быть создано суммарно до 16 вариаций различных блоков.
 
 
 
&nbsp;
 
 
 
Все характеристики, их значения по-умолчанию и разъяснение:
 
<pre>{
 
 
 
    base: 20, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал
 
 
 
    opaque: false, // непрозрачность, если true, то внутри блока мобы будут получать урон, а так же места соприкосновения этого блока с другими не будут отрисованы
 
 
 
    rendertype: 0, // тип модели, не работает в 0.15.7 и выше
 
 
 
    renderlayer: 4, // тип рендера, 4 означает, что прозрачные части будут отрисованы прозрачными, а не черными
 
 
 
    destroytime: 1, // не работает в 0.15.0 и выше, время ломания блока
 
 
 
    redstoneconsumer: true, // будет ли происходить событие изменения редстоун-сигнала для этого блока
 
 
 
    lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен
 
 
 
    lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение
 
 
 
    explosionres: 2, // взрывоустойчивость
 
 
 
    color: [0xFFFFFF] // цвет для каждой стороны в формате 0xRRGGBB, если в массиве 1 элемент, то цвет будет установлен для всего блока
 
  
 +
Все характеристики, их значения по умолчанию и разъяснение:
 +
<syntaxhighlight lang="Javascript">{
 +
     base: 0, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал
 +
     solid: false, // является ли блок твёрдым
 +
     rendertype: 0, // тип модели
 +
     renderlayer: 4, // тип рендера, 1: прозрачный, 2: непрозрачный, 4: прозрачный, но исчезает вдали
 +
     destroytime: 1, // время ломания блока, время уничтожения зависит от используемого инструмента, -1: неразрушимый.
 +
    explosionres: 3, // взрывоустойчивость
 +
     friction: 0.6, // коэффициент скольжения
 +
     lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен
 +
     lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение
 +
    translucency: 1, // полупрозрачность, число от 0 до 1, влияет на наложение теней на блок. 0 - нормальные тени, 1 - нет теней и блок выглядит ярче остальных.
 +
     renderallfaces: true, // отрисовывает все стороны прозрачных блоков,
 +
     mapcolor: 0, // цвет блока на карте
 +
     sound: "default" // тип звука для блока
 
}
 
}
 +
</syntaxhighlight>
  
</pre>
+
==== Пример: ====
  
 
Пример создания специального типа блока и самого блока:
 
Пример создания специального типа блока и самого блока:
 
+
<syntaxhighlight lang="Javascript">Block.createSpecialType("weak_light", { // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться
&nbsp;
+
     lightlevel: 11,
<pre>var BLOCK_TYPE_LOW_LIGHT = Block.createSpecialType({ // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться
+
     lightopacity: 0
 
 
    lightlevel: 11,
 
 
 
    lightopacity: 0
 
 
 
 
});
 
});
 
+
IDRegistry.genBlockID("testBlock"); // регистрация id
 
 
IDRegistry.genBlockID("testBlock"); // регистрациа id
 
 
 
 
 
 
Block.createBlock("testBlock", [
 
Block.createBlock("testBlock", [
 
+
     {name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}
    {name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}
+
], "weak_light"); // создаем блок на данном специальном типе</syntaxhighlight>
 
+
</div>
], BLOCK_TYPE_LOW_LIGHT); // создаем блок на данном специальном типе
 
 
 
</pre>
 
 
 
&nbsp;
 
 
 
&nbsp;
 
  
 
=== Функция дропа (ломания) ===
 
=== Функция дропа (ломания) ===
  
 
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)
 
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)
 
&nbsp;
 
  
 
Функция дропа имеет такой формат:
 
Функция дропа имеет такой формат:
<pre>function(coords, id, data, diggingLevel, toolLevel){
+
<syntaxhighlight lang="Javascript">function(coords, id, data, toolLevel, enchantData, item, region) {
 
+
     // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z
    // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z
+
     // id, data - id и data блока
 
+
     // toolLevel - уровень инструмента в руке
    // id, data - id и data блока, id всегда совпадает с тем, на который была зарегистрирована функция и нужно, если одинаковая функция регистрируется на разные блоки
+
     // enchantData - зачарования инструмента
 
+
     // item - предмет в руке
    // diggingLevel - уровень ломания блока, где рука или инструмент другого типа - 0. Если же инструмент совпадает с материалом блока, то уровень будет равен уровню инструмента
+
     // если блок что-то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data] или [id, count, data, ExtraData]
 
+
}</syntaxhighlight>
     // toolLevel - уровень инструмента в руке, не зависит от самого блока
 
 
 
   
 
 
 
    // если блок что то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data]
 
 
 
}</pre>
 
 
 
&nbsp;
 
  
 
Пример:
 
Пример:
<pre>Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){
+
<syntaxhighlight lang="Javascript">Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){
 
+
     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз
    return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз
 
 
 
 
});
 
});
 
  
 
// Полный аналог предыдущей функции, но с числовым id
 
// Полный аналог предыдущей функции, но с числовым id
 
 
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){
 
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){
 
+
     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз
    return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз
+
});</syntaxhighlight>
 
 
});</pre>
 
 
 
&nbsp;
 
 
 
&nbsp;
 
  
 
=== Функция установки ===
 
=== Функция установки ===
  
 
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).
 
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).
 
&nbsp;
 
  
 
Функция установки имеет такой формат:
 
Функция установки имеет такой формат:
<pre>function(coords, item, block){
+
<syntaxhighlight lang="Javascript">function(coords, item, block){
 
+
     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z
    // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z
+
     // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z
 
+
     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data
    // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z
+
     // block - блок, на который было произведено нажатие.
 
 
    // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data
 
 
 
    // block - блок, на который было произведено нажатие.
 
 
 
 
 
 
 
    // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }
 
 
 
}</pre>
 
<div>Пример:<span id="cke_bm_170E" style="display: none">&nbsp;</span></div> <pre>Block.registerPlaceFunction("testBlock", function(coords, item, block){
 
 
 
    World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок
 
 
 
    World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок
 
  
 +
     // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }
 +
}</syntaxhighlight>
 +
<div>Пример:<span id="cke_bm_170E" style="display: none">&nbsp;</span></div> <syntaxhighlight lang="Javascript">Block.registerPlaceFunction("testBlock", function(coords, item, block){
 +
     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок
 +
     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок
 
});
 
});
  
 
// Полный аналог предыдущей функции, но с числовым id
 
// Полный аналог предыдущей функции, но с числовым id
 
 
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){
 
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){
 
+
     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок
    World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок
+
     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок
 
+
});</syntaxhighlight>
    World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок
 
 
 
});
 
 
 
</pre>
 
 
 
&nbsp;
 
  
 
=== Установка формы ===
 
=== Установка формы ===
  
 
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)
 
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)
 
+
<syntaxhighlight lang="Javascript">Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба</syntaxhighlight>
&nbsp;
 
<pre>Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба</pre>
 
 
 
&nbsp;
 
  
 
=== Установка свойств предмета ===
 
=== Установка свойств предмета ===
  
Для установки свойств предметов используется функция Item.describeItem("строковый id", объект описания).
+
Для установки свойств предметов используются следующие функции:
 
 
&nbsp;
 
 
 
Все параметры в объекте описания, их стандартные значения и описание:
 
<pre>{
 
 
 
    category: 0, // категория в креативе
 
 
 
    enchant: {value: 0, type: 0}, // тип зачарования
 
 
 
    toolRender: false, // рендер в руке, как инструмент
 
 
 
    maxDamage: 0, // максимальный дамаг предмета (шкала прочности)
 
 
 
    stackByData: false, // стакается по data
 
 
 
    properties: {}, // родной объект параметров MCPE
 
 
 
    useAnimation: 0 // анимация использозвания
 
 
 
}</pre>
 
 
 
&nbsp;
 
 
 
Функции - аналоги параметров:
 
  
 
*Item.setCategory(id, category) - аналог параметра category  
 
*Item.setCategory(id, category) - аналог параметра category  
Строка 202: Строка 102:
 
*Item.setProperties(id, props) - аналог параметра properties  
 
*Item.setProperties(id, props) - аналог параметра properties  
 
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation  
 
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation  
 
&nbsp;
 
  
 
Функции - получение параметров:
 
Функции - получение параметров:
Строка 214: Строка 112:
 
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов  
 
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов  
  
&nbsp;
+
==== Категории предметов (не работают) ====
  
 
&nbsp;
 
&nbsp;
 +
<syntaxhighlight lang="Javascript">  DECORATION = 2;//декоративный предмет(?)
 +
  FOOD = 4;//еда
 +
  INTERNAL = 0;//(?)
 +
  MATERIAL = 1;//материал
 +
  TOOL = 3;//инструмент</syntaxhighlight>
  
 
=== Функция использования предмета ===
 
=== Функция использования предмета ===
  
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerPlaceFunction("строковый id предмета", функция использования) и Item.registerPlaceFunctionForID(числовой id предмета, функция использования).
+
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования).
 
 
&nbsp;
 
  
 
Функция использования имеет такой формат:
 
Функция использования имеет такой формат:
<pre>function(coords, item, block){
+
<syntaxhighlight lang="Javascript">function(coords, item, block){
 
+
     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z
    // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z
+
     // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z
 
+
     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data
    // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z
+
     // block - блок, на который было произведено нажатие.
 
+
}</syntaxhighlight>
    // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data
 
 
 
    // block - блок, на который было произведено нажатие.
 
 
 
}</pre>
 
  
 
=== Функция броска предмета ===
 
=== Функция броска предмета ===
  
 
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).
 
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).
 
&nbsp;
 
  
 
Функция разбивания имеет такой формат:
 
Функция разбивания имеет такой формат:
<pre>function(projectile, item, target){
+
<syntaxhighlight lang="Javascript">function(projectile, item, target){
 
+
     // projectile - entity кинутого предмета
    // projectile - entity кинутого предмета
+
     // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity
 
+
     // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data
    // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity
+
}
 
+
</syntaxhighlight>
    // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data
+
</div> </div> </div> </div> </div> </div> </div>
 
 
}</pre>
 
</div> </div>
 

Текущая версия на 18:33, 27 декабря 2020

Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.

Специальные типы блоков[править]

Характеристики блока указывается в методах Block.createBlock и Block.createBlockWithRotation третьим параметром. Чтобы не повторять их для каждого блока, можно зарегистрировать специальный тип методом Block.createSpecialType(название, объект характеристик) и использовать название спец. типа.

Все характеристики, их значения по умолчанию и разъяснение:

{
     base: 0, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал
     solid: false, // является ли блок твёрдым
     rendertype: 0, // тип модели
     renderlayer: 4, // тип рендера, 1: прозрачный, 2: непрозрачный, 4: прозрачный, но исчезает вдали
     destroytime: 1, // время ломания блока, время уничтожения зависит от используемого инструмента, -1: неразрушимый.
     explosionres: 3, // взрывоустойчивость
     friction: 0.6, // коэффициент скольжения
     lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен
     lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение
     translucency: 1, // полупрозрачность, число от 0 до 1, влияет на наложение теней на блок. 0 - нормальные тени, 1 - нет теней и блок выглядит ярче остальных.
     renderallfaces: true, // отрисовывает все стороны прозрачных блоков,
     mapcolor: 0, // цвет блока на карте
     sound: "default" // тип звука для блока
}

Пример:[править]

Пример создания специального типа блока и самого блока:

Block.createSpecialType("weak_light", { // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться
     lightlevel: 11,
     lightopacity: 0
});
IDRegistry.genBlockID("testBlock"); // регистрация id
Block.createBlock("testBlock", [
     {name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}
], "weak_light"); // создаем блок на данном специальном типе

Функция дропа (ломания)[править]

К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)

Функция дропа имеет такой формат:

function(coords, id, data, toolLevel, enchantData, item, region) {
     // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z
     // id, data - id и data блока
     // toolLevel - уровень инструмента в руке
     // enchantData - зачарования инструмента
     // item - предмет в руке
     // если блок что-то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data] или [id, count, data, ExtraData]
}

Пример:

Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){
     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз
});

// Полный аналог предыдущей функции, но с числовым id
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){
     return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз
});

Функция установки[править]

К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).

Функция установки имеет такой формат:

function(coords, item, block){
     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z
     // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z
     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data
     // block - блок, на который было произведено нажатие.

     // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }
}
Пример:
Block.registerPlaceFunction("testBlock", function(coords, item, block){
     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок
     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок
});

// Полный аналог предыдущей функции, но с числовым id
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){
     World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок
     World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок
});

Установка формы[править]

Блоку с конкретным 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.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, а не из модов

Категории предметов (не работают)[править]

 

  DECORATION = 2;//декоративный предмет(?)
  FOOD = 4;//еда
  INTERNAL = 0;//(?)
  MATERIAL = 1;//материал
  TOOL = 3;//инструмент

Функция использования предмета[править]

К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования).

Функция использования имеет такой формат:

function(coords, item, block){
     // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z
     // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z
     // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data
     // block - блок, на который было произведено нажатие.
}

Функция броска предмета[править]

К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).

Функция разбивания имеет такой формат:

function(projectile, item, target){
     // projectile - entity кинутого предмета
     // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity
     // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data
}