发布时间:2026/9/3 19:55:00
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/9/3 19:55:00

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

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

2026/9/3 19:55:00

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

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

2026/9/3 19:49:56

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

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

2026/9/3 20:45:05

Kubernetes 资源限制与健康检查配置指南

LimitRange kubernetes创建pod时,默认不指定资源请求和限制。如果namespace设置了配额,那么创建不指定资源请求和资源限制的pod是不允许的。为了在设定配额的namespace中使用pod,namespace还需要为pod资源请求设定默认范围。 LimitRange 资…

2026/9/3 20:45:05

MiniMax H3本地部署全攻略:从多模态原理到ComfyUI实战

1. 多模态模型的“本地化”焦虑,终于轮到视频了过去一年多,本地部署几乎成了大模型玩家的“成人礼”。LLaMA 系列让 7B、13B 参数的语言模型真正跑进了个人工作站,Stable Diffusion 和 ComfyUI 生态则让图像生成变成了显卡玩家的标配玩具。但…

2026/9/3 20:45:05

洞穴建图实战:ROS1与ROS2下的传感器配置与Cartographer建图

如果你在露天园区用 2D 激光雷达建一张地图,一般十几分钟就能出一张能用的栅格图;可一旦把同样一套 ROS 建图流程搬到洞穴、地下矿道或隧道里,情况会很快失控——地图漂移、回环闭合失败、点云撕裂,甚至跑着跑着系统直接报“找不到…

2026/9/3 20:45:05

办公自动化一步到位:OpenClaw 双系统部署教程,3 分钟跑通

📌 说明 本文基于 OpenClaw 3.1.0 版本进行讲解,整套流程采用图形可视化交互模式,整合包内置全部运行依赖,普通使用者即可完整复现整套部署操作。 ✨核心亮点: 全程可视化图形交互界面,自动补齐全部运行依…

2026/9/3 20:40:05

PowerBuilder调用DLL:EN32T.H头文件翻译与C封装实战

简介:面向PowerBuilder开发者的实用排错资源,针对将PB工程编译为DLL格式时出现“Error opening file c:\windows\system32\cgen\en32t.h”报错而整理。压缩包内包含编译所需的两个核心头文件,以及配套的pch预编译头文件,共4个文件…

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/3 0:02:06

零基础装 OpenClaw 小龙虾 AI:Windows 一键部署教程与避坑要点

Windows 部署 OpenClaw 完整教程|本地 AI 智能体 5 分钟落地,环境配置一次搞定 版本说明:Windows 3.1.0 / Mac 2.7.9 写在前面 近两年开源 AI 领域有一款被称作「数字员工」的工具持续走热,它就是 OpenClaw,圈内人更习…

2026/9/3 0:02:06

Hermes Agent 本地部署新方案:Windows 整合包减少依赖报错

Windows 本地部署 Hermes 太麻烦?这版一键包 5 分钟快速跑通 很多人想体验 Hermes Agent,但真正开始部署时,往往会卡在环境配置这一步。 需要安装各类依赖、调试运行环境、处理路径问题,还容易遇到命令行报错、系统拦截、文件缺…

2026/9/3 0:02:06

实测 OpenClaw 一键包,5 分钟完成本地自动化环境搭建

OpenClaw 本地 AI 自动化工具部署指南|使用一键包规避环境配置难题 痛点:部署 AI 自动化工具常常要处理 Python、Node.js 各类依赖,版本冲突、环境配置耗费大量时间,OpenClaw 提供一键安装包,降低部署门槛。 适配系统&…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…