跳到主要内容

2创建第一个物品

创建第一个物品

这里我们新建两个物品:红宝石

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目录下创建一些目录,具体如下:

image-20240611124646605

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这个原材料组里面,所以在这里出现

image-20240611125025235

我们也可以新建一个物品组,将我们自己写的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);
}
}

这里面放了红宝石,红宝石原材料,钻石

运行的结果:

image-20240611125129324