创建第一个物品
大约 1 分钟约 441 字
创建第一个物品
这里我们新建两个物品:红宝石
public class ModItems {
public static final Item RUBY = registerItem("ruby", new Item(new Item.Settings()));
public static final Item RAW_RUBY = registerItem("raw_ruby", new Item(new Item.Settings()));
public static void registerModItems() {
DemoMod1.LOGGER.info("Registering items");
ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS)
.register(ModItems::addItemsToIngredientTabItemGroup);
}
public static void addItemsToIngredientTabItemGroup(FabricItemGroupEntries entries) {
entries.add(RUBY);
entries.add(RAW_RUBY);
}
public static Item registerItem(String name, Item item) {
DemoMod1.LOGGER.info("Registering item " + name);
Registry.register(Registries.ITEM, new Identifier(DemoMod1.MOD_ID, name), item);
return item;
}
}
在项目启动的时候,调用这个函数进行注册registerModItems:
具体是通过ItemGroupEvents来注册
public class DemoMod1 implements ModInitializer {
public static final String MOD_ID = "demo01";
public static final Logger LOGGER = Logger.getLogger(MOD_ID);
@Override
public void onInitialize() {
LOGGER.info("Hello Fabric world!");
ModItems.registerModItems();
ModItemGroups.registerItemGroups();
}
}
完成之后,我们需要在resources目录下创建一些目录,具体如下:
en_us.json
主要是用来命名
{
"item.demo01.ruby": "Ruby",
"item.demo01.raw_ruby": "Raw Ruby",
"itemgroup.ruby": "Group Ruby"
}
ruby.json
主要是用来说明它的材质包的位置
{
"parent": "item/generated",
"textures": {
"layer0": "demo01:item/ruby"
}
}
而textures
目录下面的item
目录下面放的就是具体的红宝石材质
需要注意的是,材质最好不要太大,否则可能会报错,我这里的大小是16x16
启动之后运行结果
因为我们是把物品设置在ItemGroups.INGREDIENTS
这个原材料组里面,所以在这里出现
我们也可以新建一个物品组,将我们自己写的mod物品都放在这个组里面,可以和原生的物品进行分离
public class ModItemGroups {
public static final ItemGroup RUBY_GROUP = Registry.register(Registries.ITEM_GROUP,
new Identifier(DemoMod1.MOD_ID, "ruby"),
FabricItemGroup.builder().displayName(Text.translatable("itemgroup.ruby"))
.icon(() -> new ItemStack(ModItems.RUBY)).entries((displayContext, entries) -> {
entries.add(ModItems.RUBY);
entries.add(ModItems.RAW_RUBY);
entries.add(Items.DIAMOND);
}).build());
public static void registerItemGroups() {
DemoMod1.LOGGER.info("Registering Item Groups for " + DemoMod1.MOD_ID);
}
}
这里面放了红宝石,红宝石原材料,钻石
运行的结果: