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)
}