- 博客(238)
- 问答 (1)
- 收藏
- 关注
原创 匠魂——修饰符
Modifier 类核心解析 Modifier 类是匠魂工具系统的核心基类,实现所有工具修饰符和材料特性的功能: ID系统:每个修饰符有唯一标识符(如tconstruct:reinforced) 钩子系统:采用策略模式+装饰器模式,通过ModuleHookMap实现功能模块化扩展 显示系统: 自动生成翻译键(modifier.{命名空间}.{路径}) 支持带等级和工具状态的动态名称显示 提供多级描述文本(风味文本+详细说明) 优先级控制:通过getPriority()决定修饰符执行顺序 实用工具: 安全获取
2025-12-28 17:11:14
27
原创 匠魂——数据生成(2)
匠魂材料统计数据生成器 AbstractMaterialStatsDataProvider是匠魂模组中用于生成材料属性数据的核心类,主要负责: 数据存储:维护一个Map<MaterialId,List<IMaterialStats>>结构,存储所有材料的属性数据 数据验证:与AbstractMaterialDataProvider协作,确保每个已注册材料都有对应的属性配置 数据生成:将材料属性转换为JSON格式并输出到tconstruct/material_stats/目录 该类提供
2025-12-28 15:09:11
30
原创 匠魂——数据生成
摘要(149字): AbstractMaterialDataProvider是匠魂模组的核心数据生成器,负责自动创建材料定义JSON文件。该抽象类继承自GenericDataProvider,提供材料属性定义(等级、排序、可合成性)、条件注册和重定向功能。通过常量定义材料分类(通用/采集/武器/特殊),使用DataMaterial结构存储材料数据。核心流程包括:确保材料添加方法执行、转换数据为JSON格式并保存至指定路径。支持条件系统(标签存在检查)和重定向机制,为模组兼容性提供便捷方法。开发者通过继承并实
2025-12-28 12:09:10
204
原创 匠魂——注册(1)
匠魂材料锭和矿石注册机制 TinkerMaterials类是匠魂模组用于注册自身材料锭和矿石的核心类,继承自TinkerModule模块基类。其采用模块化设计,通过BLOCKS.registerMetal()方法一次性注册金属块、锭、粒三种物品,并自动生成相关Forge标签。 匠魂材料定义分为四个步骤:Java代码注册物品、JSON定义材料属性、材料统计数据和合成配方。对于Forge模组开发者,若使用已有MOD的锭只需JSON定义;创建全新材料则需同时完成Java注册和JSON配置。关键区别在于Java注册
2025-12-28 11:51:21
31
原创 匠魂——材料(2)
MaterialRegistry是Tinkers' Construct模组的核心材料管理系统,主要负责材料定义、属性和特性的统一注册与管理。该系统采用单例模式设计,包含MaterialManager(材料基础信息)、MaterialStatsManager(材料属性)和MaterialTraitsManager(材料特性)三个核心组件。通过静态常量定义了武器(MELEE_HARVEST)、远程(RANGED)、护甲(ARMOR)和弹药(AMMO)等专用材料分类ID,并利用网络数据包实现服务端与客户端的材料数
2025-12-27 23:59:22
68
原创 匠魂篇——材料(1)
IMaterialItem接口摘要 该接口定义了Tinkers' Construct模组中包含材料的物品基础功能,用于工具部件的材料系统。核心功能包括: 通过NBT标签存储材料ID 提供材料验证机制(canUseMaterial) 支持为物品赋予不同材料(withMaterial) 生成所有材料变体(addVariants)用于创造模式标签页 包含静态工具方法处理材料物品栈 该接口实现了材料与物品的解耦,使同一物品可以呈现不同材料特性,是模组工具制作系统的关键组件。
2025-12-27 23:05:05
266
原创 生物行为——路径寻找
分层解耦AI层(Goal):决定“要做什么”导航层(PathNavigation):决定“怎么走过去”算法层(PathFinder):决定“哪条路最好”数据层(Path):存储“路是什么”✅ 当前代码的优点。
2025-12-26 14:41:46
27
原创 实体状态和动画的同步
SynchedEntityData 核心机制解析 SynchedEntityData 是 Minecraft 中实现服务器与客户端实体状态同步的核心系统。该系统采用多线程安全设计,通过定义数据访问器、维护脏数据标记和高效的网络序列化机制,确保实体状态变化能够精确同步到客户端。 关键设计特点: 分层ID池系统:每个实体类拥有独立ID序列(0-254),子类继承父类ID范围 读写锁机制:使用 ReentrantReadWriteLock 保证多线程安全 脏数据优化:仅同步实际变化的数据,通过值比较避免不必要网络
2025-12-15 22:43:10
71
原创 巡逻怪物研究
Minecraft巡逻怪物机制解析 巡逻怪物是Minecraft中具有特殊行为的敌对生物,主要包括掠夺者和灾厄村民。与普通怪物相比,它们具备以下核心特性: 巡逻系统:拥有预设巡逻路线和目标位置,通过PatrolTarget属性记录目标坐标,按路径行进而非随机移动 队伍机制: 可形成最多5个成员的巡逻队 队长佩戴灾厄旗帜(6%生成概率) 队员会跟随队长的巡逻目标 特殊AI: 采用LongDistancePatrolGoal实现路径计算 到达目标后,队长会重新计算500格范围内的新目标 路径规划采用90度偏移算
2025-12-15 21:53:10
153
原创 匠魂的熔炼注册
所有熔炉相关的方块(加热块、焦黑块、各种功能方块)熔炼相关的物品(模具、铸件等)方块实体类型配方序列化器GUI容器创造模式标签页合金系统定义:主要包含(合金炉方块)、(合金炉方块实体)、(GUI容器)和(合金配方)注册机制使用系统延迟注册同时注册方块和方块物品注册普通物品注册方块实体类型使用包装注册结果,保证线程安全架构特点模块化设计:继承自静态工厂方法:使用 builder 模式创建方块属性枚举驱动的注册:处理多种变体(如不同容量的储罐)事件驱动的初始化。
2025-12-14 19:25:44
31
原创 铁砧附魔逻辑
/ 主物品槽// 辅助物品槽// 结果槽是 Minecraft 客户端-服务端同步系统的核心组件,提供了灵活的数据同步机制。而AnvilMenu是使用这个机制的具体实现,专注于铁砧的业务逻辑。DataSlot的设计体现了很好的关注点分离原则:同步机制和业务逻辑解耦,使得代码更加模块化和可维护。铁砧附魔的核心机制位于触发:输入槽位变化 →→读取:获取两个物品的现有附魔映射合并:按照等级合并规则(相同等级升级,不同等级取高值)验证:检查附魔兼容性和物品类型计算:基于附魔稀有度和等级计算经验成本。
2025-12-13 12:34:56
51
原创 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
936
原创 我的世界模组开发教程——装备槽位
SetAttributesFunction 类详细解释 类整体作用 这是一个战利品函数(Loot Function),用于在生成战利品时为物品添加属性修饰符(Attribute Modifiers),例如给装备添加+5攻击力、+10%暴击率等。 核心功能 动态属性添加:在战利品生成阶段修改物品属性 多属性支持:可同时添加多个不同属性修饰符 条件触发:可配置触发条件(如特定生物死亡时) 关键代码解析 // 1. 修饰符定义(内部类) public static record Modifier( Attribu
2025-12-10 22:40:03
167
原创 基于物品技能的按键绑定(2)
基于物品的按键技能系统实现方案 核心设计 这个物品按键技能系统通过以下方式实现: 注册机制: 使用REGISTRY列表存储物品条件、按键映射和动作的三元组 通过PENDING_KEYBINDS临时存储待注册的按键绑定 客户端上下文: 提供获取主手物品、副手物品和使用状态的Supplier 便于在客户端执行按键检测时获取必要信息 两种注册方式: 通用注册:接受任意物品谓词条件 特定物品注册:专门为SkillSwordItem类型物品设计 与传统方式的对比 特性 传统方式 本系统 物品关联 无直接关联 直接绑定
2025-12-10 08:00:00
43
原创 深入了解mc源码——使用mixin增加按键绑定
Minecraft右键物品使用流程分析(摘要): 本文详细解析了Minecraft中右键使用物品的完整调用链,从玩家输入到最终执行。流程起始于Minecraft.tick()中的按键检测,当满足右键按下、冷却结束且未使用物品时,触发startUseItem()方法。系统会优先处理实体/方块交互,失败后调用gameMode.useItem(),通过ItemStack.use()最终执行Item.use()逻辑。对于食物类物品,会启动使用动画并消耗物品。整个过程涉及客户端预测、冷却系统、优先级判断和数据包同步机
2025-12-09 13:24:40
178
1
原创 关于注册物品时遇到的错误总结
摘要:研究发现物品注册失败的原因是遗漏了关键代码REGISTRATE.registerEventListeners(modEventBus)。在Create的Registrate系统中,物品注册分为两步:首先通过静态字段初始化将注册任务排队,然后需要调用上述方法让Registrate监听注册事件来执行排队任务。分析表明,虽然ModItems.register()触发了类加载和任务排队,但缺少事件监听器注册导致任务从未被执行。修复方案是在主类构造器中添加缺失的事件监听注册代码。该问题揭示了Registrate
2025-12-09 01:51:52
25
原创 机械动力的Wiki
Create Wiki 方块信息提供器摘要 该数据提供器为Create模组自动生成方块Wiki信息,主要功能包括: 数据收集:通过Catnip跨平台服务获取所有Create方块的注册信息 属性提取:收集方块关键属性如: 堆叠数量(通过对应物品获取) 爆炸抗性和硬度值 发光属性(光照等级>0) 可含水状态(检查SimpleWaterloggedBlock接口) 易燃性(通过FireBlock检查) JSON格式化:将收集的数据转换为结构化JSON格式,包含: 方块ID 各项物理属性值 特殊行为标记 输出
2025-12-08 12:40:40
64
原创 配方——机械动力的配方(1)
本文介绍了Create模组中的CreateRecipeProvider类,它是用于生成各种处理配方的核心类。该类继承自RecipeProvider,主要功能包括: 通过GENERATORS列表管理13种不同类型的配方生成器(如粉碎、研磨、切割、清洗等) 提供了registerAllProcessing方法注册所有配方生成器到数据生成系统 包含大量静态辅助方法(I类中)用于获取常见物品和标签引用(如红石、木板、金属材料等) 作为数据生成的一部分,只在服务器数据生成时运行 该类为Create模组提供了集中的配方
2025-12-08 12:30:42
303
原创 动画流体存储(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
27
原创 流体存储物品(2)
本文对比分析了TankItemFluidHandler与CopperCanItem两类流体容器实现方式的核心差异。TankItemFluidHandler采用标准Forge接口设计,通过FluidTank抽象层管理流体数据,支持动态容量计算(单个容量×堆叠数)和自动化交互;而CopperCanItem采用直接NBT操作,具有固定容量(90mb)和简单实现的特点。两种方案在存储机制、容量计算、兼容性等方面存在显著差异,分别适用于不同场景的模组开发需求。(149字)
2025-12-07 20:07:49
152
原创 实体谓词和序列化
本文介绍了Minecraft中的实体条件检查系统,重点解析了PlayerPredicate类和EntitySubPredicate接口。PlayerPredicate是一个记录类,用于检查玩家是否符合特定条件(如等级、游戏模式、进度等),实现了复杂的多层级验证逻辑。EntitySubPredicate是更通用的接口,定义了实体条件检查的标准方法,支持多种实体类型(玩家、生物、闪电等)的条件验证。两者通过类型系统关联,PlayerPredicate作为EntitySubPredicate的具体实现之一。该系统
2025-11-29 13:51:49
39
原创 kubejs(3)——配方
KubeJS的RecipeJS类是配方系统的核心包装类,实现了Minecraft配方与JavaScript之间的转换。它提供类型安全的配方组件访问,支持动态修改和创建配方,并处理输入/输出的替换操作。核心功能包括: 配方标识管理(ID、类型、状态标记) 数据序列化系统(JSON↔对象双向转换) 类型安全的值访问机制 输入输出系统(缓存管理和替换功能) 配方创建流程(包含回调处理和动作执行) 该类通过严格的组件验证和灵活的修改机制,为KubeJS提供了强大的配方操作能力,同时保持与原生配方系统的兼容性。
2025-11-28 22:03:22
170
原创 kubejs(2)——事件
KubeJSPlugin 是 KubeJS 模组的核心插件基类,提供了丰富的扩展点供开发者使用。该抽象类主要包含三类功能:生命周期管理(初始化阶段方法)、脚本系统扩展(类型系统、绑定系统和包装器)以及配方系统扩展。开发者可以通过继承此类实现模组初始化、控制脚本可访问性、添加全局变量、定义类型转换规则,以及注册自定义配方类型和组件。这些扩展点使 KubeJS 能够灵活支持各种模组集成需求,特别是为 Minecraft 提供了强大的脚本化定制能力。
2025-11-28 17:38:43
176
原创 kubejs——方块构建器
KubeJS是一款支持Forge和Fabric的Minecraft脚本扩展模组,通过JavaScript实现游戏深度定制。其核心功能包括:管理游戏内容(物品/方块/配方/世界生成)、处理游戏事件、创建UI/命令,以及与其他模组交互。特色是通过KubeLoader实现模块化脚本打包分发,支持自定义方块构建(BlockBuilder类提供物理属性、渲染、碰撞、事件回调等完整配置)。开发者无需Java编码即可通过脚本实现传统模组功能,极大降低了Minecraft内容创作门槛。
2025-11-28 16:15:52
256
原创 物品篇——液体存储
铜罐物品通过NBT数据存储流体信息,可容纳90mb流体。核心功能包括:通过TAG_FLUID和TAG_FLUID_TAG存储流体ID和附加数据;提供流体操作API(设置/获取/移除流体);支持合成剩余物品返回空罐;显示流体提示信息;创意模式生成所有流体变体。该实现利用Minecraft的NBT系统和Forge流体API,是典型的物品存储流体解决方案。
2025-11-23 20:23:03
59
原创 机械动力——注液器
方块实体(SpoutBlockEntity)实现了流体填充功能,主要包含以下核心特性: 流体处理系统:使用SmartFluidTankBehaviour管理1000mb容量的流体储罐,支持物品和方块的流体填充操作。 传送带交互:通过BeltProcessingBehaviour处理传送带上的物品,包含两个阶段: 物品进入时验证可填充性 物品持有时执行20tick的填充过程 双模式填充: 物品填充:支持多种配方(如巧克力浆果、蜜饯苹果等) 方块填充:通过BlockSpoutingBehaviour实现下方方块
2025-11-23 19:42:56
484
原创 流体操作与储罐群
本文摘要:流体管理系统在工业模组中扮演重要角色。文章分析了流体转移操作的核心接口(IFluidHandler)及其实现方式,比较了两种典型流体管理类:SmartFluidTankBehaviour和FluidTanks。SmartFluidTankBehaviour凭借其行为模式架构、智能同步机制、平滑动画系统、灵活的权限控制以及与机械动力生态系统的深度集成,展现出更优秀的性能、可靠性和用户体验。该设计通过缓存优化、网络同步延迟处理等策略实现了工业级流体管理需求,是构建复杂流体系统的首选方案。
2025-11-21 00:25:22
54
原创 LazyOptional使用方法
LazyOptional vs NonNullSupplier LazyOptional是Minecraft Forge中用于延迟加载和空值管理的工具类,相比NonNullSupplier提供更多功能: 延迟计算 - 值只在首次访问时计算 线程安全 - 内置双重检查锁 失效通知 - 支持添加监听器 链式操作 - 提供map/filter等函数式方法 空值保护 - 自动处理null情况 NonNullSupplier仅是一个简单的值提供者接口,而LazyOptional提供了完整的空值处理机制,更适合模组开发
2025-11-19 23:39:14
1013
4
原创 网络数据包(1)
AutoRequestData类是机械动力模组中的核心数据容器,负责在物品形态的请求器与方块实体间传递配置信息,包含订单数据、目标地址、位置偏移和维度标识等关键字段。文章详细解析了该类的字段结构、序列化逻辑和智能验证机制,重点包括: 数据存储:封装物流订单、目标地址、位置偏移等配置 序列化处理:支持标准NBT和物品特化两种序列化方式 智能验证:检查目标距离(128格内)和维度匹配性 系统集成:与PackageOrderWithCrafts和RedstoneRequesterBlockEntity协同工作 该
2025-11-17 19:17:45
191
6
原创 Minecraft 模组开发进阶:数据同步机制深度解析(2)
第7章 物流订单系统:PackageOrderWithCrafts 摘要 PackageOrderWithCrafts是机械动力模组中物流系统的高级订单表示类,采用Java记录类(Record)特性设计,包含物品订单(PackageOrder)和合成条目列表(List<CraftingEntry>)。其核心功能包括: 设计特性:不可变数据结构,自动生成getter/equals等方法,保证线程安全和值语义。 方法体系: 三种工厂方法对应不同创建场景(空订单、直接物品需求、纯合成需求) 支持NBT
2025-11-17 18:00:34
337
7
原创 Minecraft 模组开发进阶:数据同步机制深度解析(1)
本文深入解析了Minecraft模组开发中的数据同步机制,重点对比了原版系统与机械动力(Create)模组的创新方案。文章首先阐述了数据同步的基本概念及其必要性,随后详细剖析了原版的两种同步方式:基于NBT的全量快照同步(load方法)和针对整数类型的增量流同步(ContainerData接口)。机械动力模组通过事件驱动的智能同步策略,实现了对复杂数据类型的精准控制,其核心创新在于使用clientPacket参数区分磁盘保存与网络同步,有效优化了数据序列化过程。文章最后提供了三种同步方案的技术对比表,为开发
2025-11-17 17:21:03
234
原创 方块实体(3)
ContainerHelper 是 Minecraft 中处理容器物品存储的实用工具类,提供了一系列静态方法: removeItem - 从指定槽位移除指定数量的物品,返回被移除的部分 takeItem - 完全取出指定槽位的物品堆栈 saveAllItems - 将物品列表序列化为NBT格式保存 loadAllItems - 从NBT数据加载物品到容器中 clearOrCountMatchingItems - 清除/计数容器中符合条件的物品 这些方法支持容器物品的精确操作、序列化保存和条件筛选,广泛应用于
2025-11-16 19:02:00
50
原创 配方机制(2)
摘要:RecipeCollection类是Minecraft配方书系统的核心实现,负责管理配方集合及其状态。它通过三个集合缓存配方状态:可合成配方(craftable)、尺寸匹配配方(fitsDimensions)和已知配方(known)。核心功能包括初始化检查配方产出物品、更新配方状态(考虑工作台尺寸/解锁状态/材料充足度),以及查询不同状态的配方列表。该系统使配方书能动态显示适配当前工作台尺寸、材料条件和解锁状态的配方,并支持"仅显示可合成"等筛选功能,为玩家提供智能的配方推荐和状态
2025-11-15 20:11:14
226
原创 配方机制(1)
不是功能限制:未解锁配方仍然可以手动合成只是UI优化:帮助玩家发现和记忆配方服务器无状态:服务器不存储或检查解锁状态基于进度系统:解锁与游戏进度绑定真正的技术实现存储所有配方,匹配时只检查材料RecipeBook存储已知配方,控制UI显示通信:客户端向服务器发送合成请求,服务器验证材料后执行玩家不会因解锁状态而无法合成模组配方可以无缝集成服务器保持简单和权威用户体验得到优化好比一个世界通用的完整配方大全,所有玩家看到的都一样。则是这本大全里某一个具体的菜谱。
2025-11-15 16:40:14
189
原创 mc数学库
Minecraft数学工具类Mth提供了常用的数学计算方法,包括三角函数、随机数生成、取整运算、数值约束等。关键功能有:1)预计算65536个正弦值提升性能;2)提供sin/cos/sqrt等数学函数;3)实现取整方法floor/ceil;4)clamp方法约束数值范围;5)线性插值lerp和模运算positiveModulo。这些方法通过静态调用优化了游戏中的数学计算,确保数值处理的精确性和效率。
2025-11-08 21:21:51
92
原创 NightConfig库
是一个配置接口,扩展了和Config,提供了读写配置值和注释的能力。配置注释:指的是配置文件中给人看的说明文字,不是 Java 代码注释内存配置:可以随时保存到本地文件,也可以从文件加载持久化:通过的读写器实现内存与文件的转换用途:让生成的配置文件包含有用的说明信息,提高可读性这种设计让开发者可以在代码中管理配置文件的注释,确保配置文件的文档完整性。这是 NightConfig 库中的核心Config接口,让我们详细分析它与之前Config是基础配置接口,提供核心的键值对管理功能。
2025-11-07 20:57:17
991
原创 绘画篇(2)
建立在高层次的抽象之上:Minecraft提供了完整的渲染框架通过标准的图形管道:顶点数据 → 着色器 → 光栅化 → 输出利用现代GPU能力:硬件加速的变换、纹理映射、光栅化遵循图形编程范式:虽然隐藏了细节,但遵循标准的渲染流程平台抽象层:通过RenderSystem等类屏蔽底层API差异这就是为什么你没有看到直接的OpenGL调用,但代码仍然能够高效地在GPU上运行的原因。这种设计让模组开发者能够专注于创造内容,而不必担心复杂的图形编程细节。含义:这是一个仅客户端。
2025-11-05 20:14:44
72
原创 匠魂——绘画篇1
GuiTankModule 摘要 GuiTankModule 是 TiC 模组中负责流体罐UI显示的模块化组件,实现流体显示和交互功能。它包含以下核心特性: 双模式显示:支持水平(左→右)和垂直(下→上)两种流体填充方式 智能交互:精确检测鼠标悬停区域(流体部分/空部分) 数据驱动:从IFluidHandler获取实时流体数据 可定制工具提示:支持自定义流体量显示格式 视觉反馈:提供悬停高亮效果,增强用户体验 该模块通过draw()方法实现流体渲染,通过工具提示和点击交互实现信息展示。设计上遵循模块化原则,
2025-11-05 19:42:29
198
原创 匠魂(1)
继承自,是标准的 Minecraft 容器屏幕实现接口,表示这个屏幕包含流体罐显示功能继承- 提供命名功能的方块实体基类实现- 标记接口,表示这个方块实体包含流体罐实时数据流:直接从方块实体获取最新状态模块化架构:每个功能模块独立管理自己的渲染事件驱动更新:自动检测和响应状态变化智能交互:根据当前状态提供上下文相关的反馈性能优化:通过合理的渲染顺序和条件检查保证流畅性这种设计使得 GUI 能够实时反映方块实体的状态变化,提供流畅的用户体验,同时保持代码的可维护性和扩展性。
2025-11-05 19:10:18
482
原创 机械动力——方块实体和能力(2)
CapManipulationBehaviourBase是用于管理方块实体间物品交互的基类,提供对目标方块实体能力的查找和操作。主要功能包括: 通过目标接口查找相邻方块实体的特定能力(如物品栏) 支持过滤和目标选择机制 提供模拟执行和旁路侧面检查功能 自动处理能力失效和重新查找 与过滤行为集成以确定提取数量和模式 关键特性: 使用LazyOptional缓存目标能力 处理邻居方块变化时的能力更新 支持定期和懒加载的能力查找 可配置过滤条件和提取参数 适用于需要与相邻方块实体进行物品交互的场景。
2025-11-04 20:55:57
73
java项目实战开发-弹球游戏
2025-07-07
我的世界1.18人工智能插件
2022-08-30
为什么一调试我的世界插件就自动打开ZipFile.java文件
2021-08-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅