Skip to content

1.20 Server Script Examples

vomiter edited this page Aug 19, 2026 · 2 revisions

Several breaking changes are introduced in 1.21.1, so the following example would not work well in that version. Check the wiki for 1.21.1 example.

Example Script: (All goes into server script.)

Deploying tool without consuming durability.

When a diamond block is placed beneath the belt/depot, the Deployer gains a special effect: sandpaper no longer loses durability, and the sanding result turns into a diamond.

KJSCAutoEvents.deployerUse(event => {
    var {block, outputs, heldItem} = event
    if(heldItem != "create:sand_paper") return //only works for sand paper
    if(!block.offset(0, -3, 0).blockState.is(Blocks.DIAMOND_BLOCK)) return; //only works when the belt/deposit (y = -2) has a diamond block below.
    event.setDamage(0) //set the durability usage to 0
    while(outputs.length > 0) outputs.remove(0) //remove all original outputs
    outputs.add(0, Item.of("diamond")) //add diamond
})

Mixing wool and red dye while not consuming the dye

This is to enable some "catalyst" recipe.

Technical note: In Create’s Basin, outputs are kept separate from the input/ingredient inventory, so an item returned as an output will not be treated as an ingredient for the next operation.

KJSCAutoEvents.basinOperation(event => {
    var {basin, block, fluidOutputs, heatLevel, outputs, recipe} = event;
    if(recipe.getId().toString() == "minecraft:dye_red_wool"){
        event.addInput("red_dye")
    }
})

Conditional Silk Touch for Drills

Drills can gain a Silk Touch-like effect when a certain condition is met. If an amethyst block is placed beneath the ore, the drill will drop the ore block itself instead of the normal drops.

//This works for stationary drill.
KJSCAutoEvents.blockDestroy(event => {
    const { level, targetPos, targetBlock } = event
    const below = level.getBlockState(targetPos.below())
    if (!below.is("minecraft:amethyst_block")) return
    if (!(targetBlock.blockState.is("minecraft:diamond_ore") || targetBlock.blockState.is("minecraft:emerald_ore")))return
    targetBlock.popItem(targetBlock.blockState.block.asItem())
    level.destroyBlock(targetPos, false)
    event.cancel()
})

//This works for drill on contraption.
ContraptionEvents.afterBlockDestroy(event => {
    const { level, targetPos, targetBlock, drops } = event
    const below = level.getBlockState(targetPos.below())
    if (!below.is("minecraft:amethyst_block")) return
    if (!(targetBlock.blockState.is("minecraft:diamond_ore") || targetBlock.blockState.is("minecraft:emerald_ore")))return
    while(drops.length > 0) { drops.remove(0) }
    drops.add(Item.of(targetBlock.blockState.block.asItem()))

})

Protective Ground for Contraptions

Blocks placed on soul soil cannot be broken contraption machines.

ContraptionEvents.beforeBlockDestroy(event => {
    const { level, targetPos } = event
    const below = level.getBlockState(targetPos.below())

    if (!below.is("minecraft:soul_soil")) return

    event.cancel() // prevent the contraption from breaking the block
})

Cancel Disassembly

Prevent contraption disassembly when a sea lantern is in the disassembly range.

ContraptionEvents.beforeDisassemble(event => {
    console.log("disassemble")
    let shouldCancel = event.testTargetBlock(block => {
        return block == "minecraft:sea_lantern"
    })
    if(shouldCancel) event.cancel()
})