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

(创建页面,内容为“为模组添加新物品可以说是Modder最常见也是最简单的需求了。对于没有什么额外行为的物品,直接用Item类即可;如果需要有额外的逻辑,则需要先继承Item类,并覆写相应的方法。读者可以自行翻阅Item和IItemExtension的源码。 Item的构造方法接受一个Item.Properties,这个对象指定了物品的一些基本属性,如最大堆叠数、耐久值等等。 注册物品当然是用延…”)
 
 
(未显示同一用户的9个中间版本)
第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"
}
    }
  }
  }


第39行: 第39行:


将准备好的纹理PNG文件放入指定的位置,runClient打开游戏,你应该能看到你的新物品不是紫黑块了。
将准备好的纹理PNG文件放入指定的位置,runClient打开游戏,你应该能看到你的新物品不是紫黑块了。
=== 数据生成 ===
物品模型的对应的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生成(虽然也确实可以)。


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


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


第53行: 第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

个编辑