Skip to content

01-第一个物品

1. 编写注册方法dddd

新建类:./item/ModItems.java,并定义一个名为 registerItems() 的方法,用户注册物品:

java
Registry.register(Registry<V> registry, Identifier id, T entry)

在本项目中我们编写这样的代码:

java
public class ModItems
{
  private static Item registerItems(String id, Item item)
  {
    return Registry.register(Registries.ITEM,
            Identifier.of(Testmod.MOD_ID, id),
            item);
  }
}

或者是第二种方法:

java
...
return Registry.register(Registries.ITEM,
                RegistryKey.of(Registries.ITEM.getKey(), Identifier.of(Testmod.MOD_ID, id)),
                item);
...

2. 创建物品、初始化

接下来创建物品:

java
public static final Item ICE_ETHER = registerItems("ice_ether", new Item(new Item.Settings()));

再添加一个初始化的方法(目前什么都不用写):

java
public static void registerModItems()
{
  Testmod.LOGGER.info("Registering Items");
}

TIP

初始化的方法,目前仅仅用于激活 ModItems 类,加载我们写过的 ICE_ETHER

最后返回入口类,启动物品:

java
@Override
public void onInitialize()
{
  ModItems.registerModItems();
}

3. 添加资源文件

在项目目录 resouses 下,新建以下目录:

| resources
└─ assets
  └─ testmod
    ├─ lang
    | ├─ en_us.json
    | └─ zh_cn.json
    ├─ models
    | └─item
    |   └─ ice_ether.json
    └─ textures
      └─ item
        └─ ice_ether.png

各文件内容:

json
{
  "item.testmod.ice_ether": "Ice Ether"
}
json
{
  "item.testmod.ice_ether": "冰之以太"
}
json
{
  "parent": "minecraft:item/generated",
  "textures":
  {
    "layer0": "testmod:item/ice_ether"
  }
}
(图片素材)

最后在游戏中通过 give @a testmod:ice_ether 获得自定义的物品。

4. 完整代码

Details
java
package com.nckname.testmod;

import com.nckname.testmod.item.ModItems;
import net.fabricmc.api.ModInitializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Testmod implements ModInitializer
{
    public static final String MOD_ID = "testmod";
    public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

    @Override
    public void onInitialize()
    {
        ModItems.registerModItems();
    }
}
java
package com.nckname.testmod.item;

import com.nckname.testmod.Testmod;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.util.Identifier;

public class ModItems
{
    public static final Item ICE_ETHER = registerItems("ice_ether", new Item(new Item.Settings()));

    private static Item registerItems(String id, Item item)
    {
        return Registry.register(Registries.ITEM,
                Identifier.of(Testmod.MOD_ID, id),
                item);
    }

    public static void registerModItems()
    {
        Testmod.LOGGER.info("Registering Items");
    }
}