用户:MashKJo/1.21.1模组开发教程/5.1.第一个物品:修订间差异

 
(未显示同一用户的8个中间版本)
第19行: 第19行:
  //别忘了在你的入口类构造方法中调用它!
  //别忘了在你的入口类构造方法中调用它!
  public static void register(IEventBus bus) {
  public static void register(IEventBus bus) {
ITEMS.register(bus);
    ITEMS.register(bus);
  }
  }


第30行: 第30行:


  {
  {
"parent": "minecraft:item/generated",
    "parent": "minecraft:item/generated",
"textures": {
    "textures": {
"layer0": "tutorialmod:item/one_example_item"
        "layer0": "tutorialmod:item/one_example_item"
}
    }
  }
  }


第41行: 第41行:


=== 数据生成 ===
=== 数据生成 ===
鉴于作者还没研究明白物品/方块模型的数据生成,且复杂的物品/方块模型的数据生成很复杂,一般是在Blockbench中制作,直接导出为JSON,因此作者仍习惯于手写物品/方块模型的JSON,这里就不教数据生成了。
物品模型的对应的DataProvider实现类是ItemModelProvider,其提供了一些辅助方法来简化物品模型的datagen。
 
public class MyItemModelProvider extends ItemModelProvider {
    public MyItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) {
        super(output, TutorialMod.MODID, existingFileHelper);
    }
    @Override
    protected void registerModels() {
        basicItem(ModItems.ONE_EXAMPLE_ITEM.get());
        //最简单的一个物品模型。
        withExistingParent(ModItems.ANOTHER_EXAMPLE_ITEM.getId().toString(), mcLoc("item/generated"))
                .texture("layer0", ResourceLocation.fromNamespaceAndPath(...))
        //通用的datagen代码,可以通过继续调用#texture增加更多层的纹理。
    }
}
 
简单的物品模型可以这样datagen出来。至于复杂的物品模型(如涉及到不同视角的自定义变换),一般是通过Blockbench做出来的,能直接导出为JSON文件,因此一般不通过datagen生成(虽然也确实可以)。


== 语言文件 ==
== 语言文件 ==
第50行: 第67行:


  {
  {
"item.tutorialmod.one_example_item": "One Example Item"
    "item.tutorialmod.one_example_item": "One Example Item"
  }
  }


第56行: 第73行:


  {
  {
"item.tutorialmod.one_example_item": "一个示例物品"
    "item.tutorialmod.one_example_item": "一个示例物品"
  }
  }


好了,现在这个物品看上去真的没什么问题了。
好了,现在这个物品看上去真的没什么问题了。
=== 数据生成 ===
public class ENLanguageProvider extends LanguageProvider {
    public ENLanguageProvider(PackOutput output) {
        super(output, TutorialMod.MODID, "en_us");
        //第二个参数是你的MODID,第三个参数是生成的语言文件的对应语言的代码。
    }
    @Override
    protected void addTranslations() {
        addItem(ModItems.ONE_EXAMPLE_ITEM, "One Example Item");
        //添加某物品的本地化名。
        //还有其他一些辅助方法,如addBlock、addDimension之类的。
        //还可以直接调用add方法,用于自定义本地化键名的本地化。
    }
}
中文语言文件的LanguageProvider类似,这里就不贴代码了。
最后不要忘了在GatherDataEvent监听器中添加你的LanguageProvider!
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,417

个编辑