Forge 1.20.1模组开发:实现给鸡挤奶与混沌碎片合成

发布时间:2026/11/5 12:07:25

Forge 1.20.1模组开发:实现给鸡挤奶与混沌碎片合成 在一档名为《石头世界》的系列内容第 4 季第 14 集里“给鸡挤奶还要制作成混沌碎片”听起来像一句整活台词。但把它当成玩法需求交给 Minecraft 模组开发者时这句话包含的信息量并不小玩家要和鸡交互、交互结果要产出一种特殊物品、这个物品还要进入合成链变成“混沌碎片”。这里不讨论剧情只把标题当作需求输入实现一个可运行的 Forge 1.20.1 模组原型并通过这次开发把实体交互、物品注册、事件监听、NBT 冷却、配方 JSON 和配置外置的完整链路串起来。这类需求最大的特征是原始描述很短可执行细节几乎为零。开发者的任务不是照着标题写代码而是先确定一套合理假设再让假设变成可验证的流程。本文使用的假设是玩家手持玻璃瓶右键鸡消耗一个玻璃瓶后获得“鸡奶瓶”鸡奶瓶和一块普通石头在工作台里合成“混沌碎片”。1. 先把“给鸡挤奶做成混沌碎片”拆解成可执行需求任何一个看似荒诞的需求落到代码里都要先拆成可执行动作。标题里的“给鸡挤奶”是行为层“制作成混沌碎片”是结果层。中间还有一个隐含状态挤出来的奶要先变成一种中间物品否则“制作”没有材料来源。1.1 标题里其实有两套玩法如果只看“给鸡挤奶”首先要回答四个问题玩家用什么物品触发这个交互。交互是否消耗物品。交互是否有次数限制或冷却。这个交互是否只对鸡生效还是对一类动物生效。再看“还要制作成混沌碎片”又要回答另外几个问题混沌碎片是一个物品、一个方块还是一种特殊货币。碎片是挤奶时直接掉落还是需要二次合成。如果二次合成使用的配方是什么。合成之后鸡奶瓶是否消耗。原版 Minecraft 里鸡只负责下蛋不存在“挤奶”这个行为。右键鸡时原版逻辑不会给出任何奶类结果。所以这个需求必须通过事件系统拦截实体交互在玩家手持指定物品右键鸡时取消原版逻辑并执行自定义逻辑。这里采用一种最小闭环把鸡奶瓶设计为普通物品而不是真正的流体桶。普通 Item 足够验证行为链路真正的流体桶需要额外实现 Fluid、桶物品和流体渲染会让原型复杂很多。1.2 需求拆成四个模块为了让开发过程不混乱可以把整个需求拆成四个模块。实体交互模块负责判断“玩家手持玻璃瓶右键鸡”这个动作是否成立以及是否处于冷却状态。物品模块负责注册鸡奶瓶和混沌碎片并设置堆叠数量、物品 ID、显示名称等属性。合成模块负责定义“鸡奶瓶 石头 混沌碎片”的配方让碎片能通过工作台制作。状态与配置模块负责记录玩家上次挤奶的时间并把冷却时间、产出数量等参数放到配置文件里避免每次调整都要重新编译。这四个模块不是并列关系而是依赖关系事件模块产生鸡奶瓶物品模块提供鸡奶瓶合成模块消费鸡奶瓶配置模块约束事件模块的触发频率。1.3 先定技术路线数据包、Forge 还是 Fabric| 方案 | 能实现什么 | 不能实现什么 | 适合场景 || --- | --- | --- | --- | | 纯数据包 | 物品标签、配方、进度、部分战利品 | 新增自定义物品、拦截实体交互、写入玩家 NBT | 已经存在基础物品只是调整配方 | | Fabric | 自定义物品、事件监听、服务端逻辑 | 需要掌握 Fabric Loader 和对应 API | 团队已经使用 Fabric 生态 | | Forge | 自定义物品、事件监听、NBT 操作、配置系统 | 需要处理较重的 MDK 结构 | 社区资料多适合教学和快速验证 |这里选择 Forge 1.20.1原因是它的PlayerInteractEvent、DeferredRegister、ForgeConfigSpec都属于比较稳定的 API网上资料也多。对于“给鸡挤奶”这种需要新增交互逻辑的需求纯数据包做不了因为数据包没有办法在玩家右键鸡时执行自定义逻辑。1.4 先想清楚物品是普通 Item 还是流体容器标题里提到“奶”容易让人下意识去实现流体。但一个最小原型不应该一上来就做流体。合理做法是先把“鸡奶”建模成一个普通物品名叫“鸡奶瓶”堆叠数量设为 16。它只是一个中间材料不参与真正桶装液体的倾倒、放置和填充逻辑。这样做的取舍是视觉上不够真实鸡奶瓶不能倒出来换来的是开发链路短能快速验证“交互、产出、合成”这个主干。后续需要真实流体时再基于这个结构扩展 Fluid 和 BucketItem。2. 环境准备与项目骨架先锁版本再写事件2.1 需要准备的环境模组开发中大多数问题都出在版本不匹配。写代码之前先确认 JDK、Minecraft、Forge 和 Gradle 的版本关系。环境项推荐值说明JDK17Minecraft 1.20.1 使用 Java 17 编译和运行开发 IDEIntelliJ IDEA方便导入 Gradle 项目Minecraft1.20.1社区模组兼容性较高Forge MDK47.x以 Forge 官网或 Maven 列表为准GradleMDK 自带 wrapper不需要单独安装下载 Forge MDK 后先不要急着写代码。打开gradle.properties把版本号固定下来再启动gradlew导入项目。如果原始材料没有给出明确版本落地前要先确认依赖版本。不同 Minecraft 主版本对应不同 Forge API代码风格也会不同尤其是事件注册和配置系统的写法。2.2 Gradle 配置要点在gradle.properties中写入以下内容minecraft_version1.20.1 forge_version47.1.0 mappings_channelofficial mappings_version1.20.1其中mappings_channelofficial表示使用 Mojang 官方映射。对新手来说官方映射名称和代码里看到的Chicken、Item、Player一致阅读和调试都比较直观。build.gradle关键段落如下plugins { id net.minecraftforge.gradle version [6.0,6.2) } dependencies { implementation fg.deobf(net.minecraftforge:forge:${minecraft_version}-${forge_version}) }fg.deobf会自动处理 Minecraft 和 Forge 的反混淆依赖开发者不需要手动管理运行时库。2.3 项目目录结构一个最简单的 Forge 模组项目结构如下stoneworld-mod/ ├── build.gradle ├── gradle.properties └── src/main/ ├── java/com/stoneworld/ │ ├── StoneWorldMod.java │ ├── item/ModItems.java │ ├── event/ChickenMilkHandler.java │ └── config/StoneWorldConfig.java └── resources/ ├── META-INF/mods.toml ├── assets/stoneworld/ │ ├── lang/zh_cn.json │ └── textures/item/ └── data/stoneworld/ └── recipes/资源文件的路径非常关键。配方文件必须放在data/stoneworld/recipes/下语言文件必须放在assets/stoneworld/lang/zh_cn.json下。路径一旦写错不会直接报编译错误而是运行时配方便静默失效这是模组开发中最容易浪费时间的坑之一。3. 实现核心交互给鸡挤奶并产出一瓶鸡奶3.1 先把两个物品注册进去使用 Forge 的DeferredRegister注册物品这是当前推荐写法。它会在模组加载阶段统一注册物品同时保证物品 ID 不会冲突。public class ModItems { public static final DeferredRegisterItem ITEMS DeferredRegister.create(ForgeRegistries.ITEMS, StoneWorldMod.MOD_ID); public static final RegistryObjectItem CHICKEN_MILK_BOTTLE ITEMS.register(chicken_milk_bottle, () - new Item(new Item.Properties().stacksTo(16))); public static final RegistryObjectItem CHAOS_FRAGMENT ITEMS.register(chaos_fragment, () - new Item(new Item.Properties().stacksTo(64))); public static void register(IEventBus bus) { ITEMS.register(bus); } }stacksTo(16)是因为这瓶奶被定位为中间材料数量太多会显得不合理混沌碎片作为最终合成材料堆叠到 64 比较顺手。如果后续想让物品拥有特殊提示文字或稀有度再单独继承Item类并重写方法。StoneWorldMod里的注册代码如下Mod(StoneWorldMod.MOD_ID) public class StoneWorldMod { public static final String MOD_ID stoneworld; public StoneWorldMod() { IEventBus bus FMLJavaModLoadingContext.get().getModEventBus(); ModItems.register(bus); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, StoneWorldConfig.SPEC); } }3.2 监听玩家与鸡的交互Forge 提供 Player
延伸阅读

更多相关文章

2026/11/1 14:24:40

STM32F4驱动SHT30温湿度传感器:I2C通信与CRC校验实战

简介:面向STM32F4嵌入式开发者的SHT30温湿度传感器驱动资源,基于模拟IIC总线协议完成STM32F407与传感器之间的数据交互,覆盖从引脚初始化、时序控制到温湿度值换算的完整链路,适合需要在环境监控、智能家居或工业现场快速接入温湿…

2026/10/31 17:51:18

SHT30温湿度传感器STM32F4驱动实战:I2C读写与CRC校验

简介:面向STM32嵌入式开发者的SHT30温湿度传感器驱动资源,演示如何通过模拟IIC在STM32F407上完成温湿度读取,适合需要掌握IIC时序、传感器寄存器配置的初学者和项目开发者。压缩包共3个文件,包含SHT30.c/H驱动源码与温湿度.pdf说明…

2026/11/1 15:26:11

Android SDK Platform 34/35 安装、适配与避坑指南

简介:Android SDK 平台 34 和 35 是面向 Android 应用开发者的 API 级别组件包,对应 Android 14/15 系统版本,可用于解决应用在特定系统上的编译、调试与兼容性问题。该资源共包含 2000 个文件,以 XML 系统数据与配置说明为主&…

2026/11/5 12:04:19

下班回消息也算加班:北京法院给隐形加班划线

宝企通云关怀:下班后的关怀别变成打扰图1:北京法院:下班后线上沟通满足条件应认定加班一、热搜里发生了什么据人民网报道,北京多家法院发布劳动争议典型案例,首次以司法判决形式明确:下班后线上沟通、节假日…

2026/11/5 11:39:15

PostgreSQL数据类型选择指南与性能优化实践

1. PostgreSQL数据类型概述PostgreSQL作为一款功能强大的开源关系型数据库,其数据类型系统之丰富远超大多数同类产品。我在实际项目中最常遇到的问题是:面对十几种数字类型、多种字符串类型以及各种特殊类型时,开发团队往往凭直觉选择&#x…

2026/11/5 11:34:12

Simulink S-function执行时序与状态管理原理详解

简介:本资源是面向MATLAB/Simulink初学者与控制系统建模学习者的S-Function入门实践包,聚焦自定义系统函数开发这一核心能力,解决标准库无法覆盖的特定数学运算与动态逻辑建模需求。压缩包共4个文件(2个M文件实现核心算法逻辑&…

2026/11/5 11:34:12

低空经济三维智能感知与实时调度技术解析

1. 低空经济三维空间智能感知与管控体系概述低空经济作为新兴经济形态,正在全球范围内快速发展。根据国际航空运输协会(IATA)预测,到2030年,全球城市空中交通市场规模将达到1.5万亿美元。在这一背景下,《低…

2026/11/5 11:34:12

链表数据结构与PTA解题技巧详解

1. 链表基础与数据结构课程实践 链表作为线性表的链式存储结构,是数据结构课程中承前启后的关键内容。在山东理工大学(SDUT)的数据结构与算法课程体系中,链表章节通常安排在顺序表之后、树结构之前,这种教学顺序设计体…

2026/11/5 11:34:12

Simulink S-Function核心机制与两个经典C示例解析

简介:本资源是面向MATLAB/Simulink初学者与控制系统建模学习者的S-Function入门实践包,聚焦自定义系统函数开发这一核心能力,解决标准库无法覆盖的特定数学运算与动态逻辑建模需求。压缩包共4个文件(2个M文件实现核心算法逻辑&…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑