了解妖怪们的归家中料理台的配方结构
所需模组: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中如愿出现了你注册的配方,但真的到料理台上制作的时候,就会发现一个新的问题:
空气寿司说是
而为了解决这个问题,我们需要再进行一次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"));
})
大功告成
不得不说,妖归更新的料理台真的很适合把所有农夫乐事附属有的寿司、寿司卷啥的都放上来制作,很有感觉