的NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。
创建数据包
原版的配方是放在数据包内,我们Mod的配方也应该放在我们的自己的数据包内,首先第一步就是创建我们Mod的数据包。请按照下面的结构性在你的resources文件夹下创建目录。

有序合成
{
"type": "minecraft:crafting_shaped",
"category": "misc",//配方类别,一般为misc
"key": {//合成材料
"a": {
"item": "examplemod:ruby"
},
"b": {
"item": "minecraft:stick"
}
},
"pattern": [
"aaa",//空格必须
" b ",
" b "
],
"result": {//合成结果
"item": "examplemod:ruby_pickaxe"
}
}
无序合成
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients":[
{"item": "minecraft:iron_ingot"},
{"item": "minecraft:iron_ingot"},
{"item": "minecraft:gold_ingot"}
],
"result": {
"item": "examplemod:magic_ingot"
}
}
熔炉和其他(可在wiki或者B站上查看数据包制作教程,会有各种类型合成表的详细写法)
{
"type":"minecraft:smelting",
"category":"misc",
"cookingtime": 100,//燃烧时间,单位为tick
"experience": 0.3,//获得的经验值
"ingredient":{
"item":"examplemod:ruby_ore"
},
"result":"examplemod:ruby"
}
数据生成
public class ModRecipeProvider extends RecipeProvider {
public ModRecipeProvider(PackOutput output) {
super(output);
}
@Override
protected void buildRecipes(RecipeOutput recipeOutput) {
//有序合成
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.GLASS_JAR.get())
.pattern(" a ").pattern(" b ").pattern(" b ")
.define('a', Blocks.ACACIA_LOG).define('b',Blocks.GLASS)
.unlockedBy("has_glass", has(Blocks.GLASS))
.save(recipeOutput);
//无序合成
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModBlocks.RUBY_FRAME.get(),1)//数字为合成得到的数量
.requires(ModItems.RUBY.get(),2)
.unlockedBy("has_ruby",has(ModItems.RUBY.get()))
.save(recipeOutput);
//冶炼
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.ROTTEN_FLESH),RecipeCategory.MISC,Items.LEATHER,0.3f,100)
.unlockedBy("has_rotten_flesh",has(Items.ROTTEN_FLESH))
.save(recipeOutput);
}
}
其余合成方法可以点到RecipeProvider类中自行查看
最后把生成器添加到ModDataGeneratorHandler中
@Mod.EventBusSubscriber(modid = ExampleMod.MODID,bus = Mod.EventBusSubscriber.Bus.MOD)
public class ModDataGeneratorHandler {
@SubscribeEvent
public static void gatherData(GatherDataEvent event){
ExistingFileHelper efh = event.getExistingFileHelper();
var lp = event.getLookupProvider();
// 语言文件
event.getGenerator().addProvider(
event.includeClient(),
(DataProvider.Factory<ModzhLanguageProvider>) pOutput -> new ModzhLanguageProvider(pOutput,ExampleMod.MODID,"zh_cn")
);
event.getGenerator().addProvider(
event.includeClient(),
(DataProvider.Factory<ModenLanguageProvider>) pOutput -> new ModenLanguageProvider(pOutput,ExampleMod.MODID,"en_us")
);
// 物品模型
event.getGenerator().addProvider(
event.includeClient(),
(DataProvider.Factory<ModItemModelProvider>) pOutput -> new ModItemModelProvider(pOutput,ExampleMod.MODID,efh)
);
// 方块state
event.getGenerator().addProvider(
event.includeClient(),
(DataProvider.Factory<ModBlockStateProvider>) pOutput -> new ModBlockStateProvider(pOutput,ExampleMod.MODID,efh)
);
//合成表
event.getGenerator().addProvider(
event.includeClient(),
(DataProvider.Factory<ModRecipeProvider>) ModRecipeProvider::new
);
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







暂无评论内容