了解妖怪们的归家中料理台的配方结构

所需模组:probejs-6.0.1,kubejs-2001.6.5-build16,妖怪们的归家-2.4.13及以上

在此感谢mc百科用户@宅际与@lcy0x1在代码上的帮助

配方文件位置与查看

注意:无许可解压模组是不道德的行为,即便解压,也请不要随便外传任何一个原模组的文件。

一般来说,模组的配方文件会在以下路径中:ModId/data/ModId/recipes,因此,我们可以从中得到以下内容:

妖怪们的归家 中,农夫乐事模组鳕鱼寿司在料理台的配方json

{
  "type": "youkaishomecoming:cuisine_ordered",
  "base": "youkaishomecoming:sushi",
  "input": [
    {
      "tag": "forge:raw_fishes/cod"
    }
  ],
  "result": {
    "count": 2,
    "item": "farmersdelight:cod_roll"
  }
}

而在找到了配方文件后,使用kubejs模仿其注册新的料理台魔改配方时,我们通常有两个选择,其一是使用kubejs自带的方法去编写:

ServerEvents.recipes(event=>{
    event.custom({
        type:"youkaishomecoming:cuisine_ordered",
        base:"youkaishomecoming:sushi",
        input:[
            {tag:"forge:raw_fishes/circus_fish"},
            {item:"minecraft:dried_kelp"}
        ],
        result:{
            count:2,
            item:"kubejs:circus_fish_sushi"
        }
    })
})

又或者,我们可以使用一个比较一劳永逸的办法——schema。

使用schema注册快捷的配方魔改方式

注意:以下是个人使用schema的经历总结出来的内容,可能会存在错误,还请见谅

在使用schema之前,我们需要做两件事:

第一,loadclass,之后进入游戏进行一次/probejs dump

第二,参照原模组的配方文件编写schema

代码如下:

const $RecipeSchema = Java.loadClass('dev.latvian.mods.kubejs.recipe.schema.RecipeSchema');
const $RecipeComponentBuilder = Java.loadClass('dev.latvian.mods.kubejs.recipe.component.RecipeComponentBuilder');

StartupEvents.recipeSchemaRegistry(event => {
    const { components } = event
    
    event.register(
        'youkaishomecoming:cuisine_ordered',
        new $RecipeSchema(
            components.get('outputItem')().key('result'),
            components.get('nonBlankString')().key('base').defaultOptional(),
            components.get('inputItemArray')().key('input').defaultOptional()
        )
    );

    event.register(
        'youkaishomecoming:cuisine_mixed',
        new $RecipeSchema(
            components.get('outputItem')().key('result'),
            components.get('nonBlankString')().key('base').defaultOptional(),
            components.get('inputItem')().key('first').defaultOptional(),
            components.get('inputItemArray')().key('second').defaultOptional()
        )
    );

这时,你会发现,在上述代码中,我注册了两次,这是因为在原模组的料理台中,存在两种配方type,即制作寿司、军舰、寿司卷(细卷)的youkaishomecoming:cuisine_ordered,与制作太卷、加州卷的youkaishomecoming:cuisine_mixed,本次教程仅涉及寿司部分,所以实际使用时可以只看cuisine_ordered部分;

到此,就可以进行快捷的配方注册了,但这个时候,vscode中并不会出现对应的补全,若想出现补全,仍需要再进行一次/probejs dump。

ServerEvents.recipes(event=>{
    const{youkaishomecoming:{cuisine_ordered, cuisine_mixed}}=event.recipes;
    
    cuisine_ordered(
    '2x kubejs:aero_mono_sushi' ,
    "youkaishomecoming:sushi", 
    ['#forge:raw_fishes/aero_mono', 'minecraft:dried_kelp']
    );
})

而在完成配方注册,欢天喜地的/reload过后,JEI中如愿出现了你注册的配方,但真的到料理台上制作的时候,就会发现一个新的问题:

使用kubejs对妖怪们的归家模组中料理台配方的魔改及渲染-第1张图片空气寿司说是

而为了解决这个问题,我们需要再进行一次loadclass。

料理台上建模的渲染

前置准备

再次注意:以下是个人的经历总结出来的内容,可能会存在错误,还请见谅

首先,仍需要loadclass并进行一次/probejs dump

let $TableItemManager = Java.loadClass('dev.xkmc.youkaishomecoming.content.pot.table.item.TableItemManager');
let $YHTagGen = Java.loadClass("dev.xkmc.youkaishomecoming.init.data.YHTagGen");

在做完这一切后,

首先,我们需要绘制贴图,贴图可以参照原模组,以寿司举例,贴图位置在youkaishomecoming/assets/youkaishomecoming/textures/block/table/sushi/top/xxx下,其中,以鳕鱼举例,xxx即为cod,在实际书写中,xxx可以是你需要的tag内容,比方说,#forge:raw_fishes/circus_fish,那么xxx就可以是circus_fish;

接着,是渲染json,同样的,可以参照原模组,仍以寿司举例,json位置在youkaishomecoming/assets/youkaishomecoming/models/cuisine/sushi/top/xxx下,根据原模组,放置在此处的json命名通常为“0”;

{
  "parent": "youkaishomecoming:table/sushi/top_0",
  "render_type": "minecraft:cutout",
  "textures": {
    "top": "youkaishomecoming:block/table/sushi/top/cod"
  }
}

稳妥起见,上述贴图与json的文件位置,本人是放置在了kubejs/assets/youkaishomecoming下。

完成渲染

很简单,只需要写两三行代码:

StartupEvents.init(event=>{
    $TableItemManager.SUSHI_TOP['addMapping(java.lang.String,net.minecraft.tags.TagKey)']
    ("circus_fish", $YHTagGen.forgeItem("raw_fishes/circus_fish"));
})

大功告成

使用kubejs对妖怪们的归家模组中料理台配方的魔改及渲染-第2张图片

不得不说,妖归更新的料理台真的很适合把所有农夫乐事附属有的寿司、寿司卷啥的都放上来制作,很有感觉