跳至主要內容

创建第一个物品

我的世界fabric我的世界fabric大约 1 分钟约 441 字全民制作人ikun

创建第一个物品

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

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
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
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
image-20240611125129324
上次编辑于:
贡献者: yunfeidog