Crafttweaker(1.12.2)入门2:配方的移除与添加
IChixiao
编辑于 2022年11月13日 09:54
收录于文集
共9篇

有了上文的基础后,本文将列出CrT提供的各种移除/添加工作台配方的方法,请根据你对上篇文章的理解大胆尝试一遍这些方法。

移除工作台配方(按从定点打击到aoe打击排序):

代码块
clike
自动换行
复制代码
//按配方名移除配方,name配方名为字符串,regex正则表达式为字符串
recipes.removeByRecipeName(name);
recipes.removeByRegex(regex);

//按输出物品移除配方,output输出物品为物品堆IItemStack
//移除输出该物品的所有有序配方(若只指定output),inputs输入物品为二维材料数组IIngredient[][]且为可选参数
recipes.removeShaped(output,inputs);
//移除输出该物品的所有无序配方(若只指定output),inputs输入物品为一维材料数组IIngredient[]且为可选参数
recipes.removeShapeless(output,inputs);
//移除输出该物品的所有工作台配方,NBTMatch为布尔型(true/false)用于指定是否只移除匹配特定NBT数据的物品的配方,为可选参数(默认为false,毕竟绝大部分情况都不需要匹配)
recipes.remove(output, NBTMatch);

//按模组名移除配方,modid模组ID为字符串
//除了指令ct hand拿到的物品堆可以直接看出modid外,也可游戏内打开mods查看Mod ID
recipes.removeByMod(modid);

//移除所有工作台配方
recipes.removeAll();
复制成功

添加工作台配方(温馨提示:本文将不再展示实例,请自己多动手尝试):

代码块
clike
自动换行
复制代码
/*
重要(╯▔皿▔)╯看这里
把方法的每个参数的含义和类型都写在注释里,显然太长了且看得心累
从此处开始,更为简洁的“类型 含义”式的参数写法将完全替代之前的模式
如果该参数可省略则会带上@Optional的前缀
请学会适应(不妨与之前的“一长串注释+一行方法参数”对比着看,其实是一个意思)
*/

//添加有序配方,详见上篇文章
//name可省略,function与action可一同省略但不可只省略两者之一(即使另外一个直接写为空值null)
recipes.addShaped(String name, IItemStack output, IIngredient[][] inputs, IRecipeFunction function, IRecipeAction action);
//在有序的基础上使其可以镜像合成(如原版弓的配方)
recipes.addShapedMirrored(String name, IItemStack output, IIngredient[][] inputs, IRecipeFunction function, IRecipeAction action);
//在有序的基础上使该配方被隐藏,mirrored用于指定该配方是否为镜像配方,默认为false
recipes.addHiddenShaped(String name, IItemStack output, IIngredient[][] inputs, IRecipeFunction function, IRecipeAction action, @Optional boolean mirrored);

//添加无序配方,注意无序配方的inputs均为一维材料数组IIngredient[],此中原因相信你应该能想到
recipes.addShapeless(String name, IItemStack output, IIngredient[] inputs, IRecipeFunction function, IRecipeAction action);
//隐藏的无序配方,如原版的烟花火箭
recipes.addHiddenShapeless(String name, IItemStack output, IIngredient[] inputs, IRecipeFunction function, IRecipeAction action);
复制成功

移除和添加熔炉配方(其实就是全局关键字recipes换成了furnace)【doge】:

代码块
clike
自动换行
复制代码
//移除熔炉配方
//按配方输出输入物品移除,无input时就把输出所写output的所有配方都移除了
furnace.remove(IIngredient output, @Optional IIngredient input);
//全 部 移 除(●'◡'●)
furnace.removeAll();

//添加熔炉配方
//xp指拿取输出物时给的经验,默认为0
furnace.addRecipe(IItemStack output, IIngredient input, @Optional double xp);

//添加熔炉燃料,也可将burnTime写为0来移除熔炉燃料
//注意burnTime的单位是tick,也就是1/20秒,原版熔炉烧好一个物品用时为200ticks
furnace.setFuel(IIngredient input, int burnTime);
复制成功

众所周知,顺序结构是最简单的程序结构,因此从逻辑上想要改变原有的配方也应当是先移除后添加,请切勿犯“自己加了配方又把它删了”这种低级错误。