介绍
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 的其他作品
查看全部 →
Farmer’s Delight Addon Fixes
修复 My Nether's Delight 1.8 与 Farmer's Delight 1.3+ 的兼容性问题;同时支持 Miners Delight+ 和 Dungeons Delight。
DamageSource Is Not Null Plus
尝试修复“NullPointerException:LivingDeathEvent.getSource() 返回 null”
RangedJS: KubeJS Addon
一个用于制作自定义弓、弩及其他远程武器的 KubeJS 附属模组。
Survivor’s Abilities
为 TFC 添加一些实用属性,方便创建模组和整合包。
评论
登录后评论和评分