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 픽셀 단위(0–16)의 상자 [x1, y1, z1, x2, y2, z2] 목록 꽉 찬 정육면체
model 모드의 블록 모델 경로: block/lamp는 모드의 models/block/lamp.json shape로 그려지며, 없으면 정육면체

모델은 JSON으로 된 표준 블록 모델로, 모델 편집기가 내보내는 것과 같습니다. 모델이 참조하는 텍스처는 <mod id>:block/<name>으로 적습니다. shape도 함께 지정하면 블록이 충돌하는 것은 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)
}