API

ブロックの形

ブロックは立方体である必要はありません。形を 1 つ以上のボックスで記述すると、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 がブロック 1 つ分)です。ブロックはそのボックスで描画され、すべての面にそのテクスチャが貼られ、ボックスと衝突します。プレイヤーはボックスの上に立て、選択枠もボックスに沿います。

モデル:独自の見た目

content/lamp.craftCraftScript
block "lamp" {
    model: "block/lamp"
    shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
    light: 15
}
プロパティ 値 デフォルト
shape ピクセル単位(0〜16)のボックス [x1, y1, z1, x2, y2, z2] の一覧 完全な立方体
model Mod のブロックモデルのパス:block/lamp は Mod の models/block/lamp.json shape から描画、なければ立方体

モデルは JSON の標準的なブロックモデルで、モデルエディターが書き出すものと同じです。参照するテクスチャは <mod id>:block/<name> と書きます。shape も指定した場合、ブロックが衝突するのは shape のほうです。指定しない場合は、完全な立方体として衝突します。

ファイルの置き場所

Mod 場所
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) を呼ぶたびにボックスが 1 つ追加されます。model は CraftScript と同じパスです。boxWhen(state, value, x1, y1, z1, x2, y2, z2) は、1 つのステートのためのボックスを追加します:

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