KubeJS 删除 Ex Deorum 压缩筛配方(compressed_sieve)为什么删不掉

kubejs / 1.20.1

用 KubeJS 的 event.remove() 想删掉 Ex Deorum 的压缩筛配方时,如果过滤器写成下面这样,是删不掉的:

event.remove({
    type: "exdeorum:compressed_sieve",
    input: "exdeorum:compressed_gravel",
    mod: "exdeorum"
})

进游戏用 JEI 一看,原版配方还在,等于没删。

原因

有两个关键点:

  • Ex Deorum 的压缩筛配方里,输入字段名是 ingredient,不是 input。KubeJS 的 remove 过滤器要求键名和配方 JSON 里的原始字段完全一致,用 input 匹配不到。
  • 删除筛子类配方时,还需要通过 sieve_mesh 指定筛网类型。sieve_mesh 是 Ex Deorum 专门为 KubeJS 扩展的属性,用来按筛网筛选配方,不是 KubeJS 原生字段。

解决方法

把 input 换成 ingredient,并补上 sieve_mesh:

ServerEvents.recipes(event => {
    event.remove({
        type: "exdeorum:compressed_sieve",
        ingredient: { item: "exdeorum:compressed_gravel" },
        sieve_mesh: "exdeorum:string_mesh",
        mod: "exdeorum"
    })

    let compSieve = (result, chance) => event.custom({
        type: "exdeorum:compressed_sieve",
        ingredient: { item: "exdeorum:compressed_gravel" },
        mesh: "exdeorum:string_mesh",
        result: result,
        result_amount: { type: "minecraft:binomial", n: 7, p: chance }
    })

    compSieve("exdeorum:stone_pebble", 0.7)
    compSieve("minecraft:flint", 0.2)
    compSieve("minecraft:coal", 0.1)
    compSieve("exdeorum:iron_ore_chunk", 0.1)
    compSieve("exdeorum:copper_ore_chunk", 0.15)
})

补充

  • 如果只想清空所有压缩筛配方,可以直接写 event.remove({ type: "exdeorum:compressed_sieve" }),不区分筛网。
  • 注意字段名是 sieve_mesh,别写成 sieve_mech 或 mesh。
  • 普通筛子(exdeorum:sieve)的删除示例里用的是 input,和压缩筛不一致,别照搬。