用 KubeJS 的 event.remove() 想删掉 Ex Deorum 的压缩筛配方时,如果过滤器写成下面这样,是删不掉的:
event.remove({
type: "exdeorum:compressed_sieve",
input: "exdeorum:compressed_gravel",
mod: "exdeorum"
})
进游戏用 JEI 一看,原版配方还在,等于没删。
有两个关键点:
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,和压缩筛不一致,别照搬。