2.2 配方的添加,修改和移除

关于ProbeJS提示

带有🔎符号的段落代表该段内容ProbeJS中有语言文档,或使用ProbeJS编写较为简便。


一、配方事件

要修改配方,你需要在ServerEvents.recipes事件下注册一个“事件监听器”,并在该事件下完成所有修改,例如:

ServerEvents.recipes(event => {
  // 该部分为回调函数
  // 本节中的示例脚本将只包括此部分内容
  console.info('ServerEvents.recipes触发')
})

以下为配方事件支持的部分方法:

方法
描述
返回值

forEachRecipe(RecipeFilter 过滤器, Consumer consumer)

对所有满足过滤器的配方进行修改

void

countRecipes(RecipeFilter 过滤器)

返回满足过滤器的配方个数

整形

containsRecipe(RecipeFilter 过滤器)

返回是否存在满足给定过滤器的配方

布尔值

remove(RecipeFilter 过滤器)

移除满足给定过滤器的配方,并返回移除个数

整形

replaceInput(RecipeFilter 过滤器, IngredientMatch 被替换物品, Ingredient 替换物品)

对所有满足过滤器的配方进行修改:替换输入物品,并返回操作个数

整形

replaceOutput(RecipeFilter 过滤器, IngredientMatch 被替换物品, ItemStack 替换物品)

对所有满足过滤器的配方进行修改:替换输出物品,并返回操作个数

整形

二、配方添加

🔎 event.recipes可以获取所有存在的配方类型(DocumentedRecipes),其属性为命名空间。你可以通过这种情况修改所有支持的配方,例如:

以下为一些简写方法:

1、有序配方添加

语句:event.shaped(输出物品 , 形状 , 输入物品)

例子:用 4个海绵 和 4个钻石 合成 3个石头

2、无序配方添加

语句:event.shapeless(输出物品 , 输入物品)

例子:用 1个海绵 和 1个带有木板标签的物品 合成2个石头

3、锻造台配方

语句:event.smithing(输出物品, 目标物品, 消耗物品)

例子:苹果 + 金锭 -> 金苹果

4、熔炉配方

语句:event.smelting(输出物品, 输入物品)

例子:1个金苹果 经熔炉烧炼得到 32个胡萝卜

5、烟熏炉配方

语句:event.smoking(输出物品, 输入物品)

例子:玻璃经烟熏炉烧炼得到遮光玻璃

注:燃料需要在烧炼事件中进行更改

6、营火配方

语句:event.campfireCooking(输出物品, 输入物品)

例子:木棍经过营火烧炼得到火把

7、切石机

语句:event.stonecutting(输出物品, 输入物品)

例子:1个带有木板标签的物品合成3个木棍

8、高炉

语句:event.blasting(输出物品, 输入物品)

例子:金苹果经过高炉烧炼得到3个苹果

三、配方过滤器及配方的修改和移除

1、配方过滤器

配方过滤器可在配方修改或移除中用于匹配符合条件的配方,其包括以下类型

写法
描述
示例

{output:'物品'}

匹配输出物品

{output: '#minecraft:wool'}

{input:'物品'}

匹配输入物品

{input: '#forge:dusts/redstone'}

{mod:'模组ID'}

匹配模组ID

{mod: 'kubejstutorial'}

{recipe:'配方ID'}

匹配配方ID

{mod: 'xplusmodpack'}

{type: '配方类型'}

匹配配方类型

{type: 'minecraft:campfire_cooking'}

{条件1:"值",条件2:"值"}

组合过滤器(与)

{output: 'minecraft:cooked_chicken', type: 'minecraft:campfire_cooking'}

[{条件1:"值"}, {条件2:"值"}]

组合过滤器(或)

[{type:'minecraft:smelting'}, {type:'minecraft:blasting'}]

{not:{条件:"值"}}

组合过滤器(非)

{not:{type:"minecraft:smelting"}}

上表中组合过滤器依旧可以多层叠加,从而实现更复杂的条件判断,详见下方示例。

2、配方修改

语句
描述

event.replaceInput(配方过滤器, 被替换物品, 替换物品)

修改输入物品

event.replaceOutput(配方过滤器, 被替换物品, 替换物品)

修改输出物品

例子:在输出物品为minecraft:ladder的配方中,将输入物品中的木棍替换为树苗

例子:在所有配方中,将输出物品中的minecraft:stick替换为minecraft:oak_sapling

例子:在所有无序配方中,将minecraft:iron_nugget替换为minecraft:gold_nugget

3、配方移除

语句:event.remove()

另请参阅:RecipesEventJS

四、配方ID

mc中所有的配方都有一个随机的ID,但以下配方被指定了一个唯一的静态ID,可用于编写Patchouli手册或覆盖已存在配方等。

你可以通过JEI/REI来便捷地查询配方的ID。

Last updated