API

Формы блоков

Блок не обязан быть кубом. Ты описываешь его форму одним или несколькими параллелепипедами, а Crafting рисует его, делает твёрдым и пропускает свет и грани соседей там, где он не заполнен целиком. Для собственного облика задай ему модель.

Форма: список параллелепипедов

content/shapes.craftCraftScript
block "half" { shape: [[0, 0, 0, 16, 8, 16]] }

block "pedestal" {
    shape: [[2, 0, 2, 14, 2, 14], [5, 2, 5, 11, 12, 11], [3, 12, 3, 13, 14, 13]]
}

Каждый параллелепипед — это [x1, y1, z1, x2, y2, z2] в пикселях, от 0 до 16 (16 — это целый блок). Блок рисуется этими параллелепипедами с его текстурой на каждой грани и сталкивается с ними: игроки стоят на параллелепипедах, а контур выделения следует за ними.

Модель: собственный облик

content/lamp.craftCraftScript
block "lamp" {
    model: "block/lamp"
    shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
    light: 15
}
Свойство Значения По умолчанию
shape список параллелепипедов [x1, y1, z1, x2, y2, z2] в пикселях (0–16) целый куб
model путь к модели блока мода: block/lamp — это models/block/lamp.json мода рисуется по shape или куб

Модель — это стандартная модель блока в формате JSON, такая, какую экспортируют редакторы моделей. Текстуры, на которые она ссылается, записываются как <mod id>:block/<name>. Если задан и shape, блок сталкивается с формой; без него блок сталкивается как целый куб.

Куда класть файлы

Мод Где
CraftScript (папка) mods/lamps/models/block/lamp.json, mods/lamps/textures/block/lamp.png
Kotlin или Java src/main/resources/assets/lamps/models/block/lamp.json

Формы по состояниям

shape_when даёт блоку параллелепипеды, которые у него есть только в некоторых состояниях (см. «Состояния блока» на странице Блоки, предметы и рецепты). Каждый ключ записывается как "state=value"; в каждом состоянии у блока есть параллелепипеды из shape плюс параллелепипеды каждого подходящего ключа.

content/column.craftCraftScript
block "stone_column" {
    states: [{ part: ["single", "bottom", "top"] }]
    shape: [[4, 0, 4, 12, 16, 12]]
    shape_when: {
        "part=single": [[2, 0, 2, 14, 2, 14], [2, 14, 2, 14, 16, 14]],
        "part=bottom": [[2, 0, 2, 14, 2, 14]],
        "part=top": [[2, 14, 2, 14, 16, 14]]
    }
}

Значения пишутся так, как их показывает состояние: true или false для переключателя, число, имя или направление, например north. Параллелепипеды — это то, с чем блок сталкивается и по чему идёт его контур; как он выглядит в каждом состоянии, определяют его текстуры или модели для этого состояния.

Полезно знать

  • Блок не в форме куба сам пропускает свет и грани соседей; помечать его как transparent не нужно.
  • Все остальные свойства блока (hardness, light, tool, loot…) работают так же; смотри Блоки, предметы и рецепты.

На Kotlin

content/Shapes.ktKotlin
block("half") { box(0, 0, 0, 16, 8, 16) }

block("lamp") {
    model = "block/lamp"
    box(7, 0, 7, 9, 12, 9)
    box(5, 12, 5, 11, 16, 11)
    light = 15
}

Каждый box(x1, y1, z1, x2, y2, z2) добавляет параллелепипед; model — тот же путь, что и в CraftScript. boxWhen(state, value, x1, y1, z1, x2, y2, z2) добавляет параллелепипед для одного состояния:

content/Column.ktKotlin
block("stone_column") {
    choice("part", "single", "bottom", "top")
    box(4, 0, 4, 12, 16, 12)
    boxWhen("part", "bottom", 2, 0, 2, 14, 2, 14)
    boxWhen("part", "top", 2, 14, 2, 14, 16, 14)
}