Skip to main content

Custom Blocks

 

This is a startup script.

onEvent('block.registry', event => {
  event.create('test_block')
  	   .material('glass')
       .hardness(0.5)
       .displayName('Test Block') // No longer required in 1.18.2+
       .tagBlock('minecraft:mineable/shovel') // Make it mine faster using a shovel in 1.18.2+
  
  // Block with custom type (see below for list of types)
  event.create('test_block_slab', 'slab').material('glass').hardness(0.5)
})


The texture for this block has to be placed in kubejs/assets/kubejs/textures/block/test_block.png.
If you want a custom block model, you can create one in Blockbench and put it in kubejs/assets/kubejs/models/block/test_block.json.

 

List of available materials - to change break/walk sounds and to change some properties.

Materials (1.18.2)
air
wood
stone
metal
grass

dirt

water
lava
leaves
plant
sponge
wool
sand
glass
explosive
ice
snow
clay
vegetable
dragon_egg
portal
cake
web
slime
honey
berry_bush
lantern

 

Other methods block builder supports: 

  • displayName('name') //
    • Not required for 1.18.2+
material('material') //
  • See list above
type('basic') //
  • See available types below.
  • Do not use for 1.18.2, use the syntax in the second example above
hardness(float) //
  • >= 0.0
resistance(float) //
  • >= 0.0
unbreakable()  //
  • Sets the resistance to MAX_VALUE and hardness to -1, like bedrock
lightLevel(int)  //
  • 0.0 - 1.0
harvestTool('tool', level)  //
  • Available tools: pickaxe, axe, hoe, shovel,shovel
  • level >= 0
  • Not used in 1.18.2+, see tag in example above
opaque(boolean) fullBlock(boolean) requiresTool(boolean) renderType('type') //
    Available types: solid, cutout, translucent,translucent cutout required for blocks with texture like glass,glass translucent required for blocks like stained glass color(tintindex, color) textureAll('texturepath') texture('side', 'texturepath') model('modelpath') noItem() box(x0, y0, z0, x1, y1, z1, true)  //
    • 0.0 - 16.0,0
    • default is (0,0,0,16,16,16, true)
    box(x0, y0, z0, x1, y1, z1, false) //
    • Same as above, but in 0.0 - 1.0 scale,scale
    • default is (0,0,0,1,1,1, false)
    noCollision() notSolid() waterlogged() noDrops() slipperiness(float) //  speedFactor(float) jumpFactor(float) randomTick(randomTickEvent => {}) //
    • see below
    item(itemBuilder => {}) setLootTableJson(json) setBlockstateJson(json) setModelJson(json) noValidSpawns(boolean) suffocating(boolean) viewBlocking(boolean) redstoneConductor(boolean) transparent(boolean) defaultCutout() //
    • batches a bunch of methods to make blocks such as glass
    defaultTranslucent() //
    • similar to defaultCutout() but using translucent layer instead
    tagBlock('forge:something') //
    • adds a block tag
    tagItem('forge:something_better') //
    • adds an item tag
    tagBoth('forge:something') //
    • adds both block and item tag
    Event callbacks:

    RandomTickEvent:

    • BlockContainerJS block
    • Random random
    • LevelJS getLevel()
    • ServerJS getServer()
    Types
    • basic
    • detector 
    • slab
    • stairs
    • fence
    • fence_gate
    • wall
    • wooden_pressure_plate
    • stone_pressure_plate
    • wooden_button
    • stone_button
    • falling
    • crop