NeoForge-1.20.4Mod开发教程之自定义配方

本篇教程参考为Flandre芙兰NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。

创建数据包

原版的配方是放在数据包内,我们Mod的配方也应该放在我们的自己的数据包内,首先第一步就是创建我们Mod的数据包。请按照下面的结构性在你的resources文件夹下创建目录。

6da9db575020260207160901

 

有序合成

{
   "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
喜欢就支持一下吧
点赞5赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容