API

Виды блоков

Блок может быть одним из видов блоков игры: лестницей, которая соединяется на углах, дверью высотой в два блока, забором, который соединяется с соседями, сундуком, табличкой, посевом, рудой. Укажи kind, и блок создастся как игровой блок этого вида, с его формой, состояниями и поведением, но с твоей текстурой.

Виды и материалы

content/jade.craftCraftScript
block "jade_bricks" { hardness: 2, tool: "pickaxe" }

block "jade_stairs" { kind: "stairs", base: "jade_bricks", texture: "mymod:block/jade_bricks" }
block "jade_slab" { kind: "slab", texture: "mymod:block/jade_bricks" }
block "jade_wall" { kind: "wall", texture: "mymod:block/jade_bricks" }

block "willow_log" { kind: "pillar", material: "wood", sound: "wood" }
block "willow_door" { kind: "door", material: "wood", sound: "wood" }
block "jade_door" { kind: "door", material: "metal" }
block "willow_fence" { kind: "fence", material: "wood", texture: "mymod:block/willow_planks" }
Вид Что это
cube обычный блок (по умолчанию)
pillar бревно или колонна: лежит вдоль оси, по которой её поставили
slab, stairs, wall, fence, fence_gate строительные блоки, которые соединяются с соседями, как игровые. Лестница берёт блок, из которого она сделана, из base
door, trapdoor, button, pressure_plate двери высотой в два блока; нажимная плита либо включена, либо выключена
leaves, lantern, vine, ladder, carpet, bars, chain решётки и панели тонкие и соединяются с соседями; цепь лежит вдоль оси, по которой её поставили
plant, water_plant, crop растения (ниже)
barrel, bookshelf, chiseled_bookshelf, shelf, composter, crafting_table, chest, furnace блоки, которые работают (ниже)
sign, hanging_sign таблички (ниже)
path, ore тропы и руды (ниже)

material — это stone (по умолчанию), wood или metal, для видов, где это важно: деревянная дверь или люк открывается рукой, металлическая только редстоуном. Полублоки, лестницы, заборы, кнопки, плиты и колонны тоже создаются как игровые из этого материала.

Что блок берёт у игрового блока. Без собственных файлов блок вида берёт состояния блока и модели игры с твоей texture (по умолчанию textures/block/<id>.png), его предмет, его дроп и его теги: заборы соединяются с заборами, брёвна считаются брёвнами, дверь выдаёт один предмет. Если игровой блок использует несколько текстур, берётся твоя текстура с тем же окончанием, когда она есть в моде: <id>_top.png и <id>_bottom.png для двери, <id>_top.png для колонны, <id>_front.png и <id>_front_on.png для печи. Если у блока есть собственные модели, добыча или теги, используются они. hardness, sound, light и другие свойства со страницы Блоки, предметы и рецепты работают как у любого блока.

Растения и посевы

content/plants.craftCraftScript
block "glow_grass" { kind: "plant", hardness: 0, grows_on: ["#minecraft:dirt", "mymod:glow_moss"] }

block "reed" { kind: "water_plant", hardness: 0 }

block "rice" { kind: "crop", hardness: 0 }
  • plant: рисуется как два скрещённых изображения, как трава, цветок, гриб или саженец. Ничто с ним не сталкивается, и ему нужна земля.
  • water_plant: растение, которое растёт под водой, как морская трава.
  • crop: растёт по возрастам от 0 до 3 само и от костной муки. Его состояние age можно прочитать через block.state("age"), а <id>_stage0.png … <id>_stage3.png — его текстуры в каждом возрасте.

grows_on перечисляет блоки, на которых оно стоит: id или теги, например #minecraft:dirt. Без него растение растёт там, где растёт игровое растение того же вида (посев — на грядке). Растение, у которого пропала земля, ломается.

Блоки, которые работают

content/workshop.craftCraftScript
block "willow_barrel" { kind: "barrel", sound: "wood" }
block "willow_chest" { kind: "chest", sound: "wood" }
block "willow_bookshelf" { kind: "bookshelf", sound: "wood" }
block "jade_furnace" { kind: "furnace", hardness: 3.5, tool: "pickaxe" }

Они хранят свои предметы, открывают свой экран и работают как игровые: бочка вмещает 27 стаков, резной книжный шкаф — 6 книг, полка — 3 предмета, компостер наполняется, верстак крафтит, печь плавит и горит, пока работает.

chest рисуется с textures/entity/chest/<id>.png, а два сундука рядом образуют двойной сундук, который рисуется с <id>_left.png и <id>_right.png в той же папке. Они устроены так же, как текстуры игровых сундуков.

Таблички

content/signs.craftCraftScript
block "willow_sign" { kind: "sign", sound: "wood" }

block "willow_hanging_sign" { kind: "hanging_sign", sound: "wood" }

Игроки пишут на них, как на игровых. Объявляя табличку, ты объявляешь и её настенную форму, блок, который её предмет ставит на стену: к jade_sign прилагается jade_wall_sign, а к jade_hanging_sign — jade_wall_hanging_sign. Через wall этот id задаёшь ты сам. Настенная форма выдаёт табличку. Подвесная табличка висит под блоком, а её настенная форма — сбоку от блока.

Тропы и руды

content/ground.craftCraftScript
block "moss_path" { kind: "path", base: "minecraft:moss_block" }

block "jade_ore" { kind: "ore", hardness: 3, tool: "pickaxe", tier: "iron", xp: [1, 4] }

path чуть ниже блока, как игровая тропинка. Лопата делает её из base, если сверху воздух. Она снова становится своим base, когда её накрывает блок, и выдаёт свой base.

ore даёт опыт, когда его ломают без шёлкового касания: xp — число или [min, max]. Чтобы он выпадал сам с шёлковым касанием и давал больше с удачей, смотри «Дроп: инструменты и удача» на странице Блоки, предметы и рецепты.

Прикреплённые блоки

С attached: true блок крепится к блоку, к которому его поставили, и ломается, когда тот пропадает. Эти свойства работают у любого блока, с видом или без.

content/attached.craftCraftScript
block "crystal_shard" {
    attached: true
    states: ["facing_all"]
    model: "block/crystal_shard"
}

block "glow_bulb" {
    attached: true
    floor_state: "standing"
    states: ["standing"]
    light: 12
}
  • С состоянием "facing" или "facing_all" он смотрит от того, что его держит: facing_all смотрит ещё вверх и вниз, так что осколок может стоять на полу, на стене или на потолке (см. «Состояния блока» на странице Блоки, предметы и рецепты).
  • floor_state называет состояние-переключатель, которое включено, когда блок стоит на полу, и выключено, когда он висит на потолке, как у фонаря. Объяви этот переключатель и в states.

Сиденья и блоки высотой в два

content/chairs.craftCraftScript
block "stool" { seat: 9, shape: [[3, 0, 3, 13, 9, 13]] }

block "throne" {
    model: "block/throne"
    seat: 10
    upper: "top"
    states: ["facing", "top"]
}

seat позволяет игрокам садиться на блок кликом пустой рукой, на столько пикселей выше его низа (от 0 до 16; у стула около 10). Если у блока есть on_use, который забирает клик, игрок не садится.

upper делает блок высотой в два блока, как дверь или высокий стул: он называет состояние-переключатель, которое включено в его верхней половине. Когда сверху есть место, при установке ставятся обе половины, при разрушении одной ломаются обе, а выдаёт блок только нижняя половина. На двухблочное сиденье садятся на нижней половине. Объяви этот переключатель и в states. У верхней половины свой облик, как у любого состояния: здесь это models/block/throne_top.json.

Растения в столбик

content/vines.craftCraftScript
block "glow_vine" {
    plant: true
    column: "hanging"
    states: [{ shape: ["top", "middle", "bottom"] }]
}

column заставляет растение расти столбиком, как свисающая лоза. Его состояние shape следует за таким же растением сверху и снизу: bottom, если снизу нет, top, если нет сверху, middle между ними. Объяви его в states как { shape: ["top", "middle", "bottom"] }; текстуры <id>_middle.png и <id>_bottom.png — его облик в этих местах.

  • hanging: свисает с блока сверху, которым может быть такое же растение, листва или блок, твёрдый снизу.
  • standing: стоит на своей земле (grows_on) или на таком же растении.

Без того, что его держит, оно ломается, а растения, которые на нём висят или стоят, пропадают вместе с ним.

Свойства

Свойство Значения По умолчанию
kind один из видов выше cube
material stone, wood, metal stone
base для лестниц и троп: блок, из которого они сделаны, твой или игровой —
grows_on для растений: id блоков и теги земля его вида
wall для табличек: id настенной формы jade_sign → jade_wall_sign
xp для руд: число или [min, max] —
attached крепится к блоку, к которому поставлен false
floor_state вместе с attached: переключатель, который включён, когда блок стоит на полу —
seat пикселей выше низа блока, где сидят игроки (0–16) не сиденье
upper высота в два блока: переключатель, который включён в верхней половине —
column hanging или standing —

На Kotlin

content/Jade.ktKotlin
block("jade_stairs") { kind = BlockKind.STAIRS; base = "jade_bricks"; texture = "mymod:block/jade_bricks" }
block("willow_door") { kind = BlockKind.DOOR; material = BlockMaterial.WOOD; sound = SoundGroup.WOOD }
block("glow_grass") { kind = BlockKind.PLANT; growsOn = listOf("#minecraft:dirt") }
block("jade_ore") { kind = BlockKind.ORE; xp = 1..4 }

block("crystal_shard") { attached = true; facingAll() }

block("throne") {
    seat = 10
    upper = "top"
    facing()
    toggle("top")
}

block("glow_vine") {
    plant = true
    column = Column.HANGING
    choice("shape", "top", "middle", "bottom")
}

Виды находятся в BlockKind, а материалы — в BlockMaterial. У остальных свойств те же имена в camelCase: growsOn, floorState, xp = 1..4, column = Column.HANGING. Состояния объявляют facingAll() и choice(name, …).