前言

本篇主要是讲解如何添加自己的物品

踩了不少坑,浪费了不少时间:(

正文

要想添加一个新物品,首先需要在src/main/java目录下新建一个包

包名推荐采用作者id+modid的格式,全小写字符

接下来在包下再创建一个名为item的子包

在子包内创建一个名为ItemRegistryHandler的类

同时添加@Mod.EventBusSubscriber注解,使得它成为监听注册事件的类

@Mod.EventBusSubscriber(modid = "urmod")
public final class ItemRegistryHandler 
{

    public static Item TEST_ITEM;

    @SubscribeEvent
    public static void registerItem(RegistryEvent.Register<Item> event)
{

        event.getRegistry().registerAll(
            TEST_ITEM = new Item()
                        .setRegistryName("urmod:test_item")
                        .setCreativeTab(TEST_TAB)
                        .setUnlocalizedName(urmod.MODID + "testItem")
                        .setMaxStackSize(64),
        );
    }
 public static final CreativeTabs TEST_TAB = new CreativeTabs("test_tab")
    {
        @Override
        public ItemStack getTabIconItem()
        {
            return new ItemStack(Items.DIAMOND);
        }
    };
}

接下来讲解上面提到的代码

第五行到第十八行,创建了一个注册名为test_item的物品

.setRegistryName用处为定义物品的唯一标识符

.setCreativeTab意为该物品属于创造模式中的TEST_TAB物品栏,创造该物品栏的代码为第十九行到第二十六行(return new ItemStack(Items.DIAMOND);意为该物品栏的标志是钻石)

.setUnlocalizedName(urmod.MODID + "testItem")它的作用为标识物品较为可读的名称,可以配合语言文件实现翻译

.setMaxStackSize(64)定义了该物品的最大堆叠数量

进行到这里,你便已经成功的创建了你的第一个物品,但它现在既没有一个自己的名字,也没有属于自己的材质

接下来再次在item包下新建一个ModelMapper类

@Mod.EventBusSubscriber(value = Side.CLIENT,modid = "urmod")
public final class ModelMapper
{
    @SubscribeEvent
    public static void onModelReg(ModelRegistryEvent event)
    {
        ModelLoader.setCustomModelResourceLocation(ItemRegistryHandler.TEST_ITEM,0,
                new ModelResourceLocation(ItemRegistryHandler.TEST_ITEM.getRegistryName(),"inventory"));      
    }
}

这样,通过监听ModelMapper并且调用ModelLoader类中的setCustomModelResourceLocation方法成功注册了物品材质,该方法三个参数第一个决定物品本身,第二个是物品的meta值,就像橡木与深色橡木的区别就是在meta值,第三个则将物品的模型定义文件指向了java/resources/asset/urmod/models/item/test_item.json

在上述目录创建名为test_item.json的文件

{
  "parent": "item/generated",
  "textures": {
    "layer0": "urmod:items/test_item"
  }
}

意为采用原版默认模型item/generated,并指定它唯一一层材质位于asset/urmod/textures/items

只需要预先将png格式的材质文件命名为test_item.png并放置在此文件夹下就好了

(16*16与32*32像素都是可行的)

最后,为了让你的物品存在一个自己的名字

在asset/urmod/lang文件夹下创建两个文件en_us.lang与zh_cn.lang

en_us.lang

item.urmod.testItem.name=Test Item

zh_cn.lang

item.urmod.testItem.name=测试物品

做完这些之后,重启游戏,你便能在你的创造模式物品栏中发现你所添加的物品:)

后记

最好的后记就是没有后记