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