- 博客(257)
- 问答 (1)
- 收藏
- 关注
原创 事件(2)
是 NeoForge 提供的便利注解,用于自动注册类中所有带有的静态方法到事件总线。通过value指定物理端,避免跨端加载问题。通过modid关联到具体模组,支持多模组 JAR 包。总线选择已自动化:根据事件是否继承决定注册到模组总线还是主总线。弃用的bus属性提醒开发者迁移到新机制,保持代码向前兼容。这一注解体现了 NeoForge 在设计上对开发者体验的优化,让模组开发更加高效、不易出错。在 NeoForge 模组开发中,和这两个注解配合使用,可以自动注册事件监听器。
2026-03-09 20:22:51
22
原创 反编译和混淆
游戏代码混淆与反编译差异分析 核心概念 代码混淆:商业游戏常用的保护手段,通过替换有意义的名称(如类名、方法名)为无意义短名称(如class_1234),使代码难以阅读 映射表:将混淆代码还原为可读形式的"词典",分为: 官方映射表(如Mojang提供的) 社区映射表(如MCP项目维护的) 差异成因 使用不同映射表反编译同一游戏会产生差异,原因包括: 命名规范不同(官方vs社区习惯) 反编译器算法差异 二次加工(如NeoForge对原代码的修改) 应用场景 常见游戏:几乎所有商业游戏(如
2026-03-06 16:39:36
42
原创 事件(1)
体系是 NeoForge 为 Minecraft 生物行为提供的灵活扩展点,覆盖了从跳跃到可见性计算的多种场景。是一个简单的通知事件,用于响应生物跳跃。是一个可修改数据的事件,允许模组动态调整生物的可见度,实现隐身、伪装等复杂机制。设计意义:通过事件系统,NeoForge 避免了修改游戏核心代码,同时赋予了模组开发者强大的控制力,符合“开闭原则”。这些事件与 GUI 渲染虽无直接关联,但模组可以利用它们更新 HUD 或屏幕上的信息(例如,当玩家隐身时显示特殊图标),从而间接影响界面表现。
2026-03-06 14:46:26
29
原创 按键(1)
KeyMapping位于包,仅存在于客户端(它维护了游戏中所有可配置的按键映射,每个按键绑定都有一个唯一的名称、默认按键、所属类别以及当前状态。当用户按下或释放按键时,系统会更新对应KeyMapping的状态,其他模块(如 GUI 渲染)可以通过isDown()或查询状态,从而决定是否执行相应操作。许多模组会注册自己的按键,用于打开自定义 GUI 屏幕。在模组的事件监听中,通常会在或输入事件中检查按键的这里的MY_KEY就是通过KeyMapping注册的。打开后的屏幕(如Screen子类)会使用。
2026-03-06 13:05:36
16
原创 绘画(3)
RenderType是Minecraft渲染系统的核心类,负责定义不同类型的渲染状态和管线配置。它主要管理着色器程序、顶点格式、混合模式等渲染参数,为各种图形元素(如实体、方块、GUI等)提供不同的渲染方式。相比GuiGraphics专注于2D界面渲染,RenderType更偏向底层渲染管线的控制,支持3D场景和复杂效果的渲染优化。
2026-01-21 17:04:05
62
原创 绘画(2)
Minecraft原版GUI系统与NeoForge图层系统对比分析显示,原版Gui类采用双重渲染架构,同时维护旧版LayeredDraw和新版GuiLayerManager。系统采用三层架构组织,包含主HUD、健康组件和顶层UI管理器,通过VanillaGuiLayers定义所有原版图层。与NeoForge系统的继承关系表明,GuiLayerManager是LayeredDraw的扩展,为模组集成提供接口。这种设计保留了向后兼容性,同时为模组开发者提供了更灵活的图层管理方式。
2026-01-21 14:27:45
63
1
原创 绘画(1)
这是一个来自NeoForge(Minecraft模组加载器)的GUI图层管理系统,用于管理游戏界面的分层渲染。该系统相比原版Minecraft的LayeredDraw类提供了更强大的功能: 核心特点: 命名图层管理 - 每个图层都有唯一的ResourceLocation标识符 事件驱动架构 - 提供多种渲染事件(Pre/Post)和注册事件 条件渲染 - 支持根据条件动态显示/隐藏UI元素 模块化扩展 - 通过事件系统允许其他模组安全地添加UI元素 图层堆叠 - 使用Z轴平移(200.0F间隔)确保正确渲染
2026-01-20 00:11:39
57
原创 ByteBuf(1)
ByteBuf是Netty提供的核心字节容器,相比Java NIO的ByteBuffer具有显著优势。它采用分离的读写索引(readerIndex和writerIndex),支持动态扩容和引用计数管理,提供随机访问和顺序读写能力。ByteBuf包含容量管理、索引控制、数据类型读写等方法,并支持零拷贝操作。作为Netty数据传输的基础,它广泛应用于编解码器和ChannelHandler中,提供堆内存、直接内存和复合缓冲区等多种实现。相比ByteBuffer,ByteBuf功能更强大,使用更便捷,特别适合高性能
2026-01-19 22:52:29
660
1
原创 我的世界neoforge1.21.1——方块(2)
机械动力模组中的SchematicannonBlock(蓝图炮方块)通过简洁高效的设计实现了核心功能。其关键点在于: 交互机制: 仅重写useWithoutItem方法,利用Minecraft引擎默认行为自动处理手持物品的交互 通过IBE<T>接口建立类型安全桥梁,将交互委托给SmartBlockEntity处理 实现完整的菜单系统,包括权限检查和数据同步 物理特性: 自定义VoxelShape定义炮台形状(底部主体+顶部平台) 精确控制碰撞箱和视觉效果 生命周期管理: 包含放置初始化等完整方块
2026-01-19 17:20:18
105
原创 我的世界neoforge1.21.1模组开发——方块(1)
BlockBehaviour 是 Minecraft 中所有方块行为的基础抽象类,定义了方块的物理特性、交互逻辑和渲染方式等核心功能。它包含以下关键特性: 物理属性管理(碰撞体积、爆炸抗性、摩擦系数等) 交互系统(空手交互useWithoutItem和手持物品交互useItemOn) 状态更新机制(随机刻、计划刻和形状更新) 渲染与形状系统(视觉形状、碰撞形状和渲染类型) 数据驱动设计(战利品表、序列化支持和特性标志) 该类采用建造者模式(Properties)配置方块属性,通过缓存机制优化性能,并支持事件
2026-01-19 16:37:20
493
原创 我的世界neoforge1.21.1模组开发——工具
Minecraft工具系统解析 摘要:本文详细解析了Minecraft中的工具层级系统,重点介绍了Tier接口和Tool组件。Tier接口定义了工具的核心属性,包括耐久度、挖掘速度、攻击伤害加成、无法正确挖掘的方块标签、附魔能力和修复材料。通过createToolProperties()方法可生成对应的Tool组件,该组件控制工具与方块的交互行为。文章还展示了钻石工具的实现示例,说明如何创建新工具。这套系统提供了灵活的工具属性定义方式,支持轻松扩展新材质层级,同时保持与现有系统的兼容性。 (150字)
2026-01-19 00:55:13
506
原创 1.21.1neoforge模组开发——食物
摘要 FoodProperties 是 Minecraft 1.21+ 中定义食物属性的记录类,包含6个核心字段:营养值、饱和度、是否可随时食用、食用时间、转换物品和效果列表。类提供了编解码器用于JSON序列化和网络传输,包含实用方法如eatDurationTicks()将秒转换为游戏刻,并重写了精确的equals方法。采用建造者模式构建实例,通过Builder类链式设置各属性。该类全面定义了食物的各种行为特性,是Minecraft食物系统的核心数据结构。
2026-01-18 00:42:32
89
原创 Itemstack物品堆栈(1)
旧版方法新版方法说明获取CustomData组件获取内部的设置CustomData任意 NBT 键值结构化数据组件推荐使用专门的数据组件是存储任意 NBT 数据的新位置需要手动创建和设置,不像那样自动数据组件系统更安全、性能更好,但需要一些适应对于简单的自定义数据,可以使用CustomData;对于复杂数据,应该创建自己的这样设计虽然增加了一些复杂性,但提供了更好的类型安全和代码可维护性。CustomDataCustomData是一个不可变(immutable)的包装器,用于封装。
2026-01-17 22:32:35
86
原创 neoforge1.21.1模组开发教程——抛射物(1)
Projectile类是Minecraft中所有抛射物的抽象基类,继承自Entity并实现TraceableEntity接口。它定义了抛射物的核心机制,包括所有者追踪、发射运动、碰撞处理和偏转系统。关键特性包括:通过ownerUUID和cachedOwner追踪发射者;使用leftOwner标志防止自伤;提供shoot()方法设置初始运动;实现完整的偏转机制(ProjectileDeflection枚举);通过onHit()方法处理命中事件。子类需重写onHitEntity()和onHitBlock()实现
2026-01-12 18:31:27
321
原创 Entity类和Vec3类
性能优化增量位置同步:使用减少网络流量优化的碰撞检测:更高效的台阶处理和碰撞计算批量流体处理:同时处理多种流体类型扩展性增强附件系统:类型安全、易于序列化的数据存储流体类型系统:支持任意数量的自定义流体事件驱动:全面的NeoForge事件系统集成代码质量提升类型安全:泛型广泛使用,减少类型转换模块化设计:各系统职责清晰分离向后兼容:保留旧API的同时提供新功能开发者体验改善更简单的数据存储:Attachment系统比Capabilities更直观更好的调试支持。
2026-01-12 17:42:23
50
原创 HolderLookup
Minecraft注册表系统的核心组件包括ResourceKey、Holder和HolderLookup,三者分工明确又紧密配合。ResourceKey作为轻量级标识符,仅包含名称信息;Holder作为智能包装器,管理对注册表项的实际引用;而HolderLookup则提供查找服务。这种设计实现了关注点分离,支持类型安全、延迟加载和数据驱动架构,使系统既能保证编译时类型检查,又能灵活处理动态内容加载。三者共同构成了Minecraft现代化、可扩展的注册表基础设施,为数据包和模组开发提供了坚实基础。
2026-01-12 14:32:13
175
原创 JetBrains扩展注解:并发、国际化与值域约束
预防性:在问题发生前预防,而不是发生后修复文档性:明确代码的线程安全契约工具支持:集成到开发工具链中,自动化检查团队规范:建立统一的并发编程标准就像代码注释一样没有注释,代码也能运行但有注释的代码更易维护、更少出错在团队中,注释(注解)是必要的沟通工具最后的重要观点好的工程实践不是为了解决"代码能不能运行"的问题,而是为了解决"代码能不能长期可靠、高效、安全地运行"的问题。注解是工程卓越的体现,而不是功能实现的要求。它代表了从"能工作的代码"到"高质量的代码"的转变。空值安全性。
2026-01-12 00:03:12
946
原创 Java空值安全性注解系统
本文摘要: Java空值安全性注解系统是解决空指针异常的重要机制。核心注解包括: @NotNull - 明确表示值不能为null @Nullable - 表示值可能为null @UnknownNullability - 重点介绍,表示空值状态不确定,不做出任何保证 文章详细对比了@UnknownNullability与无注解的区别,阐述了其使用场景和优势。同时介绍了主流静态分析工具(如IntelliJ IDEA、Checker Framework)如何处理这些注解,以及注解冲突时的解决策略。最后提供了实战应
2026-01-11 23:14:24
949
原创 机械动力的build.gradle(1.21.1)
这篇文章摘要描述了基于NeoForge的Minecraft模组开发配置,主要包含以下内容: 使用了多个Gradle插件,包括Blossom、Silk、NeoForge ModDev等,用于模组开发和发布。 配置了开发环境变量、版本号生成规则和Git哈希检测。 设置了NeoForge相关配置,包括访问转换器、Parchment映射支持,以及客户端/服务器/数据生成等运行配置。 声明了多个Maven仓库依赖,包括Create Mod、JEI、Curios API等常用模组API。 定义了核心依赖项,如Regis
2026-01-11 20:26:11
639
原创 匠魂——修饰符
Modifier 类核心解析 Modifier 类是匠魂工具系统的核心基类,实现所有工具修饰符和材料特性的功能: ID系统:每个修饰符有唯一标识符(如tconstruct:reinforced) 钩子系统:采用策略模式+装饰器模式,通过ModuleHookMap实现功能模块化扩展 显示系统: 自动生成翻译键(modifier.{命名空间}.{路径}) 支持带等级和工具状态的动态名称显示 提供多级描述文本(风味文本+详细说明) 优先级控制:通过getPriority()决定修饰符执行顺序 实用工具: 安全获取
2025-12-28 17:11:14
76
原创 匠魂——数据生成(2)
匠魂材料统计数据生成器 AbstractMaterialStatsDataProvider是匠魂模组中用于生成材料属性数据的核心类,主要负责: 数据存储:维护一个Map<MaterialId,List<IMaterialStats>>结构,存储所有材料的属性数据 数据验证:与AbstractMaterialDataProvider协作,确保每个已注册材料都有对应的属性配置 数据生成:将材料属性转换为JSON格式并输出到tconstruct/material_stats/目录 该类提供
2025-12-28 15:09:11
53
原创 匠魂——数据生成
摘要(149字): AbstractMaterialDataProvider是匠魂模组的核心数据生成器,负责自动创建材料定义JSON文件。该抽象类继承自GenericDataProvider,提供材料属性定义(等级、排序、可合成性)、条件注册和重定向功能。通过常量定义材料分类(通用/采集/武器/特殊),使用DataMaterial结构存储材料数据。核心流程包括:确保材料添加方法执行、转换数据为JSON格式并保存至指定路径。支持条件系统(标签存在检查)和重定向机制,为模组兼容性提供便捷方法。开发者通过继承并实
2025-12-28 12:09:10
242
原创 匠魂——注册(1)
匠魂材料锭和矿石注册机制 TinkerMaterials类是匠魂模组用于注册自身材料锭和矿石的核心类,继承自TinkerModule模块基类。其采用模块化设计,通过BLOCKS.registerMetal()方法一次性注册金属块、锭、粒三种物品,并自动生成相关Forge标签。 匠魂材料定义分为四个步骤:Java代码注册物品、JSON定义材料属性、材料统计数据和合成配方。对于Forge模组开发者,若使用已有MOD的锭只需JSON定义;创建全新材料则需同时完成Java注册和JSON配置。关键区别在于Java注册
2025-12-28 11:51:21
52
原创 匠魂——材料(2)
MaterialRegistry是Tinkers' Construct模组的核心材料管理系统,主要负责材料定义、属性和特性的统一注册与管理。该系统采用单例模式设计,包含MaterialManager(材料基础信息)、MaterialStatsManager(材料属性)和MaterialTraitsManager(材料特性)三个核心组件。通过静态常量定义了武器(MELEE_HARVEST)、远程(RANGED)、护甲(ARMOR)和弹药(AMMO)等专用材料分类ID,并利用网络数据包实现服务端与客户端的材料数
2025-12-27 23:59:22
117
原创 匠魂篇——材料(1)
IMaterialItem接口摘要 该接口定义了Tinkers' Construct模组中包含材料的物品基础功能,用于工具部件的材料系统。核心功能包括: 通过NBT标签存储材料ID 提供材料验证机制(canUseMaterial) 支持为物品赋予不同材料(withMaterial) 生成所有材料变体(addVariants)用于创造模式标签页 包含静态工具方法处理材料物品栈 该接口实现了材料与物品的解耦,使同一物品可以呈现不同材料特性,是模组工具制作系统的关键组件。
2025-12-27 23:05:05
316
原创 生物行为——路径寻找
分层解耦AI层(Goal):决定“要做什么”导航层(PathNavigation):决定“怎么走过去”算法层(PathFinder):决定“哪条路最好”数据层(Path):存储“路是什么”✅ 当前代码的优点。
2025-12-26 14:41:46
74
原创 实体状态和动画的同步
SynchedEntityData 核心机制解析 SynchedEntityData 是 Minecraft 中实现服务器与客户端实体状态同步的核心系统。该系统采用多线程安全设计,通过定义数据访问器、维护脏数据标记和高效的网络序列化机制,确保实体状态变化能够精确同步到客户端。 关键设计特点: 分层ID池系统:每个实体类拥有独立ID序列(0-254),子类继承父类ID范围 读写锁机制:使用 ReentrantReadWriteLock 保证多线程安全 脏数据优化:仅同步实际变化的数据,通过值比较避免不必要网络
2025-12-15 22:43:10
102
原创 巡逻怪物研究
Minecraft巡逻怪物机制解析 巡逻怪物是Minecraft中具有特殊行为的敌对生物,主要包括掠夺者和灾厄村民。与普通怪物相比,它们具备以下核心特性: 巡逻系统:拥有预设巡逻路线和目标位置,通过PatrolTarget属性记录目标坐标,按路径行进而非随机移动 队伍机制: 可形成最多5个成员的巡逻队 队长佩戴灾厄旗帜(6%生成概率) 队员会跟随队长的巡逻目标 特殊AI: 采用LongDistancePatrolGoal实现路径计算 到达目标后,队长会重新计算500格范围内的新目标 路径规划采用90度偏移算
2025-12-15 21:53:10
181
原创 匠魂的熔炼注册
所有熔炉相关的方块(加热块、焦黑块、各种功能方块)熔炼相关的物品(模具、铸件等)方块实体类型配方序列化器GUI容器创造模式标签页合金系统定义:主要包含(合金炉方块)、(合金炉方块实体)、(GUI容器)和(合金配方)注册机制使用系统延迟注册同时注册方块和方块物品注册普通物品注册方块实体类型使用包装注册结果,保证线程安全架构特点模块化设计:继承自静态工厂方法:使用 builder 模式创建方块属性枚举驱动的注册:处理多种变体(如不同容量的储罐)事件驱动的初始化。
2025-12-14 19:25:44
66
原创 铁砧附魔逻辑
/ 主物品槽// 辅助物品槽// 结果槽是 Minecraft 客户端-服务端同步系统的核心组件,提供了灵活的数据同步机制。而AnvilMenu是使用这个机制的具体实现,专注于铁砧的业务逻辑。DataSlot的设计体现了很好的关注点分离原则:同步机制和业务逻辑解耦,使得代码更加模块化和可维护。铁砧附魔的核心机制位于触发:输入槽位变化 →→读取:获取两个物品的现有附魔映射合并:按照等级合并规则(相同等级升级,不同等级取高值)验证:检查附魔兼容性和物品类型计算:基于附魔稀有度和等级计算经验成本。
2025-12-13 12:34:56
100
原创 java学习——枚举类
文章摘要(150字) Java的Enum类是枚举类型的基础抽象类,位于java.lang包。它通过泛型<E extends Enum<E>>确保类型安全,实现Comparable和Serializable接口。核心特性包括:final的name和ordinal字段记录枚举常量名称和序号;受保护的构造方法限制实例化;equals()使用引用相等保证单例;compareTo()基于序号比较;特殊序列化机制防止破坏单例。与int/Integer的包装关系不同,枚举类型直接继承Enum类,编
2025-12-11 21:30:49
970
原创 我的世界模组开发教程——装备槽位
SetAttributesFunction 类详细解释 类整体作用 这是一个战利品函数(Loot Function),用于在生成战利品时为物品添加属性修饰符(Attribute Modifiers),例如给装备添加+5攻击力、+10%暴击率等。 核心功能 动态属性添加:在战利品生成阶段修改物品属性 多属性支持:可同时添加多个不同属性修饰符 条件触发:可配置触发条件(如特定生物死亡时) 关键代码解析 // 1. 修饰符定义(内部类) public static record Modifier( Attribu
2025-12-10 22:40:03
225
原创 基于物品技能的按键绑定(2)
基于物品的按键技能系统实现方案 核心设计 这个物品按键技能系统通过以下方式实现: 注册机制: 使用REGISTRY列表存储物品条件、按键映射和动作的三元组 通过PENDING_KEYBINDS临时存储待注册的按键绑定 客户端上下文: 提供获取主手物品、副手物品和使用状态的Supplier 便于在客户端执行按键检测时获取必要信息 两种注册方式: 通用注册:接受任意物品谓词条件 特定物品注册:专门为SkillSwordItem类型物品设计 与传统方式的对比 特性 传统方式 本系统 物品关联 无直接关联 直接绑定
2025-12-10 08:00:00
83
原创 深入了解mc源码——使用mixin增加按键绑定
Minecraft右键物品使用流程分析(摘要): 本文详细解析了Minecraft中右键使用物品的完整调用链,从玩家输入到最终执行。流程起始于Minecraft.tick()中的按键检测,当满足右键按下、冷却结束且未使用物品时,触发startUseItem()方法。系统会优先处理实体/方块交互,失败后调用gameMode.useItem(),通过ItemStack.use()最终执行Item.use()逻辑。对于食物类物品,会启动使用动画并消耗物品。整个过程涉及客户端预测、冷却系统、优先级判断和数据包同步机
2025-12-09 13:24:40
264
1
原创 关于注册物品时遇到的错误总结
摘要:研究发现物品注册失败的原因是遗漏了关键代码REGISTRATE.registerEventListeners(modEventBus)。在Create的Registrate系统中,物品注册分为两步:首先通过静态字段初始化将注册任务排队,然后需要调用上述方法让Registrate监听注册事件来执行排队任务。分析表明,虽然ModItems.register()触发了类加载和任务排队,但缺少事件监听器注册导致任务从未被执行。修复方案是在主类构造器中添加缺失的事件监听注册代码。该问题揭示了Registrate
2025-12-09 01:51:52
57
原创 机械动力的Wiki
Create Wiki 方块信息提供器摘要 该数据提供器为Create模组自动生成方块Wiki信息,主要功能包括: 数据收集:通过Catnip跨平台服务获取所有Create方块的注册信息 属性提取:收集方块关键属性如: 堆叠数量(通过对应物品获取) 爆炸抗性和硬度值 发光属性(光照等级>0) 可含水状态(检查SimpleWaterloggedBlock接口) 易燃性(通过FireBlock检查) JSON格式化:将收集的数据转换为结构化JSON格式,包含: 方块ID 各项物理属性值 特殊行为标记 输出
2025-12-08 12:40:40
182
原创 配方——机械动力的配方(1)
本文介绍了Create模组中的CreateRecipeProvider类,它是用于生成各种处理配方的核心类。该类继承自RecipeProvider,主要功能包括: 通过GENERATORS列表管理13种不同类型的配方生成器(如粉碎、研磨、切割、清洗等) 提供了registerAllProcessing方法注册所有配方生成器到数据生成系统 包含大量静态辅助方法(I类中)用于获取常见物品和标签引用(如红石、木板、金属材料等) 作为数据生成的一部分,只在服务器数据生成时运行 该类为Create模组提供了集中的配方
2025-12-08 12:30:42
365
原创 动画流体存储(1)
TankAnimated(capacity, this); #### 关键交互点 1. **回调通知**: ```java // TankBlockEntity 实现 IFluidTankUpdater @Override public void onTankContentsChanged() { // 触发方块更新和渲染刷新 this.level.sendBlockUpdated(this.worldPosition, getBlockState(), getBlockState(), 3); } 数据同
2025-12-07 20:29:47
42
原创 流体存储物品(2)
本文对比分析了TankItemFluidHandler与CopperCanItem两类流体容器实现方式的核心差异。TankItemFluidHandler采用标准Forge接口设计,通过FluidTank抽象层管理流体数据,支持动态容量计算(单个容量×堆叠数)和自动化交互;而CopperCanItem采用直接NBT操作,具有固定容量(90mb)和简单实现的特点。两种方案在存储机制、容量计算、兼容性等方面存在显著差异,分别适用于不同场景的模组开发需求。(149字)
2025-12-07 20:07:49
187
原创 实体谓词和序列化
本文介绍了Minecraft中的实体条件检查系统,重点解析了PlayerPredicate类和EntitySubPredicate接口。PlayerPredicate是一个记录类,用于检查玩家是否符合特定条件(如等级、游戏模式、进度等),实现了复杂的多层级验证逻辑。EntitySubPredicate是更通用的接口,定义了实体条件检查的标准方法,支持多种实体类型(玩家、生物、闪电等)的条件验证。两者通过类型系统关联,PlayerPredicate作为EntitySubPredicate的具体实现之一。该系统
2025-11-29 13:51:49
51
java项目实战开发-弹球游戏
2025-07-07
我的世界1.18人工智能插件
2022-08-30
为什么一调试我的世界插件就自动打开ZipFile.java文件
2021-08-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅