0

0

Fabric Mod开发:在1.19.3+版本中添加自定义物品并管理物品组

花韻仙語

花韻仙語

发布时间:2025-12-01 18:18:02

|

415人浏览过

|

来源于php中文网

原创

fabric mod开发:在1.19.3+版本中添加自定义物品并管理物品组

本文详细介绍了在Fabric Mod开发中,如何在Minecraft 1.19.3及更高版本中添加自定义物品。针对旧版`FabricItemSettings().group()`方法失效的问题,文章阐述了使用Fabric API提供的`ItemGroupEvents.modifyEntriesEvent`事件来将自定义物品注册到指定物品组的现代实践,并提供了完整的代码示例和注意事项,帮助开发者顺利实现物品的创建与管理。

核心概念:Fabric物品注册

在Fabric Mod开发中,添加自定义物品是基础操作。每个物品都需要通过Minecraft的注册系统进行注册,以便游戏能够识别和加载它。FabricItemSettings类用于定义物品的各种属性,例如最大堆叠数、耐久度、是否可附魔等。物品注册的核心是通过Registry.register方法将物品实例与一个唯一的Identifier关联起来。

Fabric 1.19.3+ 版本的新范式:物品组管理

随着Fabric API的不断演进,某些旧有的API用法已被更新或移除,以提供更灵活和强大的功能。其中一个显著的变化就是物品组(ItemGroup)的添加方式。在Minecraft 1.19.3及更高版本中,FabricItemSettings类中的.group()方法已被移除。这意味着我们不能再通过物品设置直接指定其所属的物品组。

取而代之的是,Fabric API引入了事件驱动模型来管理物品组的条目。开发者现在需要利用ItemGroupEvents.modifyEntriesEvent事件,在游戏初始化阶段动态地将自定义物品添加到指定的物品组中。这种新范式提供了更大的灵活性,允许Mod在运行时修改甚至其他Mod的物品组内容。

实现步骤

以下是使用新方法在Fabric 1.19.3+版本中添加自定义物品并将其加入物品组的详细步骤。

步骤一:注册自定义物品

首先,我们需要定义并注册我们的自定义物品。在这一步中,我们只关注物品本身的属性定义和注册,不涉及物品组。

Magic Eraser
Magic Eraser

AI移除图片中不想要的物体

下载
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries; // 注意:在新版本中是Registries
import net.minecraft.registry.Registry;   // 注意:在新版本中是Registry
import net.minecraft.util.Identifier;

public class MyModItems {

    // 定义并注册自定义物品
    // "tutorial" 是你的mod ID,"custom_item" 是物品的唯一ID
    public static final Item CUSTOM_ITEM = Registry.register(
            Registries.ITEM, // 使用Registries.ITEM来注册物品
            new Identifier("tutorial", "custom_item"),
            new Item(new FabricItemSettings()) // 物品设置,不包含group()方法
    );

    // 可以在这里添加其他自定义物品的注册
    public static void registerModItems() {
        // 此方法可以用于在Mod初始化时调用,确保所有物品都被注册
    }
}

在这个阶段,CUSTOM_ITEM已经被注册到游戏中,但它不会出现在任何物品组中,因此在创造模式物品栏中是不可见的。

步骤二:将物品添加到指定物品组

接下来,在你的Mod主类(通常是实现了ModInitializer接口的类)的onInitialize()方法中,使用ItemGroupEvents.modifyEntriesEvent事件将已注册的自定义物品添加到所需的物品组。

import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.ItemGroups; // 导入ItemGroups,包含所有内置物品组常量

public class TutorialMod implements ModInitializer {

    @Override
    public void onInitialize() {
        // 首先确保你的物品已经被注册
        MyModItems.registerModItems(); // 调用注册物品的方法

        // 通过事件将自定义物品添加到物品组
        // ItemGroups.MISC 代表杂项物品组,你可以选择其他内置物品组
        ItemGroupEvents.modifyEntriesEvent(ItemGroups.MISC).register(itemGroup -> {
            // 将自定义物品添加到杂项物品组
            itemGroup.add(MyModItems.CUSTOM_ITEM);
        });

        // 可以在此处添加其他初始化逻辑,例如注册方块、实体等
    }
}

通过上述代码,当游戏初始化时,CUSTOM_ITEM将被添加到“杂项”物品组中,从而在创造模式物品栏中可见。

完整代码示例

为了更好地理解,以下是一个包含物品注册和物品组添加的完整Mod类结构示例:

package com.example.tutorialmod; // 请替换为你的实际包名

import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroups; // 导入Minecraft内置物品组常量
import net.minecraft.registry.Registries; // 注册表辅助类
import net.minecraft.registry.Registry;   // 核心注册类
import net.minecraft.util.Identifier;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TutorialMod implements ModInitializer {
    // 确保你的mod ID与fabric.mod.json中的一致
    public static final String MOD_ID = "tutorial";
    public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

    // 定义并注册自定义物品
    public static final Item CUSTOM_ITEM = Registry.register(
            Registries.ITEM,
            new Identifier(MOD_ID, "custom_item"),
            new Item(new FabricItemSettings())
    );

    @Override
    public void onInitialize() {
        LOGGER.info("Initializing TutorialMod!");

        // 在初始化时,通过事件将物品添加到物品组
        // 这里将CUSTOM_ITEM添加到杂项物品组 (ItemGroups.MISC)
        ItemGroupEvents.modifyEntriesEvent(ItemGroups.MISC).register(itemGroup -> {
            itemGroup.add(CUSTOM_ITEM);
            LOGGER.info("Added CUSTOM_ITEM to MISC item group.");
        });

        // 你可以在这里添加其他初始化逻辑,例如注册方块、实体、配方等
    }
}

注意事项

  1. 版本兼容性: 本教程中描述的ItemGroupEvents方法适用于Fabric 1.19.3及更高版本的Minecraft。如果你正在开发旧版本的Mod,可能仍然需要使用FabricItemSettings().group()。
  2. Fabric API依赖: 确保你的build.gradle文件中正确添加了Fabric API的依赖。ItemGroupEvents是Fabric API的一部分。
    dependencies {
        // ... 其他依赖 ...
        modImplementation "net.fabricmc.fabric-api:fabric-api:0.90.0+1.20.1" // 请根据你的Minecraft版本调整Fabric API版本
    }
  3. 物品组选择: ItemGroups.MISC只是一个示例。Minecraft提供了多个内置物品组,如ItemGroups.BUILDING_BLOCKS(建筑方块)、ItemGroups.COMBAT(战斗)等。你可以根据物品的性质选择最合适的物品组。
  4. Mod ID与物品ID: new Identifier("your_mod_id", "your_item_id")中的"your_mod_id"必须与你的fabric.mod.json文件中定义的id字段一致,而"your_item_id"则是该物品在你Mod内部的唯一标识符。
  5. 自定义物品组: 如果内置物品组无法满足需求,Fabric API也支持创建自定义物品组。这通常涉及创建新的FabricItemGroup实例并注册它,然后通过ItemGroupEvents.modifyEntriesEvent向其添加物品。

总结

在Fabric Mod开发中,适应API的变化是常态。对于Minecraft 1.19.3及更高版本,添加自定义物品到物品组的方式已从直接在FabricItemSettings中指定,转变为使用ItemGroupEvents.modifyEntriesEvent进行事件驱动的添加。这种新的方法提供了更大的灵活性和模块化,是当前推荐的最佳实践。理解并正确应用这一机制,将帮助开发者更高效、更稳定地构建Minecraft Mod。建议开发者经常查阅Fabric官方文档和Fabric API示例,以获取最新和最准确的开发指南。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

413

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

75

2025.09.10

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

413

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

75

2025.09.10

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.4万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号