跳到正文

KubeJS Create Automation

作者:vomiter

一款轻量级自动化扩展模组,将机械动力机器与 KubeJS 连接起来,让整合包作者能够通过脚本拦截并自定义自动化操作。

收藏

介绍

介绍由机器翻译自 Modrinth 原页面,仅供参考。

KubeJS 的机械动力自动化钩子

KJSCAuto 允许 KubeJS 脚本修改机械动力中的关键自动化行为。

此模组将机械动力中的多种操作开放为脚本事件,整合包作者可以拦截并修改这些操作,而无需编写 Java 模组。

此模组有意不包含配方修改功能,因为 KubeJS Create 已提供该功能。

目前支持的钩子包括:

  • 部署器使用物品或工具
  • 盆的配方操作
  • 钻头和锯子破坏方块
  • 装置拆解

这些事件允许脚本:

  • 调整部署器的工具耐久消耗
  • 修改盆配方的输入和输出
  • 拦截或替换机器或装置破坏方块时掉落的物品

选择这些钩子,是为了解决我在 KubeJS 社区中经常看到的几种常见自动化控制问题。

如果你觉得机械动力还有其他行为适合添加脚本钩子,欢迎在讨论论坛中提出建议。

1.21.1 版本引入了几项破坏性更改,因此以下示例在该版本中可能无法正常运行。请查看wiki中的 1.21.1 示例。

脚本示例:(全部放入服务端脚本中。)

部署器使用工具时不消耗耐久。

将一个钻石块放在传送带或置物台下方后,部署器会获得特殊效果:_砂纸不再损失耐久,打磨结果会变成钻石。_

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
})

混合羊毛和红色染料,但不消耗染料

这可以用于实现某些“催化剂”配方。

技术说明:_在机械动力的盆中,输出物品与输入/材料库存分开存放,因此作为输出返回的物品不会被视为下一次操作的材料。_

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

让钻头有条件地获得精准采集效果

满足特定条件时,钻头可以获得类似精准采集的效果。如果在矿石下方放置紫水晶块,钻头就会直接掉落矿石方块,而不是通常的掉落物。

//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()))

})

装置的地面保护

放置在灵魂土上的方块无法被移动装置破坏。

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
})

取消拆卸

如果拆卸范围内有海晶灯,则阻止移动装置拆卸。

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

支持

如果你想支持我的模组开发工作,包括维护、更新和兼容性适配,可在此通过 Patreon 支持我:https://patreon.com/vomiter\_scp

常见问题

KubeJS Create Automation 支持哪些 Minecraft 版本?

KubeJS Create Automation 支持 Minecraft Java 版 1.20.1–1.21.1,共 2 个版本,可用的加载器:Forge / NeoForge。下载时注意选择和你游戏版本一致的文件。

KubeJS Create Automation 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Forge / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:客户端和服务端都要装。

评论

登录后评论和评分

vomiter 的其他作品

查看全部 →