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, level >= 0 Not used in 1.18.2+, see example above
  • opaque(boolean)
  • fullBlock(boolean)
  • requiresTool(boolean)
  • renderType('type') // solid, cutout, translucent, cutout required for blocks with texture like glass, translucent required for blocks like stained glass
  • color(tintindex, color)
  • texture('texturepath')
  • texture('side', 'texturepath')
  • model('modelpath')
  • noItem()
  • box(x0, y0, z0, x1, y1, z1, true) // 0.0 - 16.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, 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