基本信息
我的世界Java版本
1.21.3
1.21–1.21.1
1.20.1–1.20.2
1.19.2
1.18.2
平台
Fabric
运行环境
搬运团队
搬运资源声明
对于可进行 JAR 文件搬运的许可证,我们提供站内下载服务;其他资源会跳转到原帖下载。资源更新可能不及时,建议前往资源内提供的原帖链接下载最新版本。
详情信息
许可证 MIT
发布于 2025-01-03
更新于 2026-04-15
更新日志
Easy NPC 更新日志 (1.20.1)
注意
此更新日志包含的是变更摘要。 如需查看完整更新日志,请前往 GitHub 历史记录。
注意:更新到新版本前,请务必备份你的世界 / NPC! 更多信息请查看升级指南。
6.11.0
- 修复了 #703:新的自定义图层系统与手部渲染导致的渲染问题。
- 修复了 #701:为无效交易提供添加了额外的保护措施和日志记录。
- 修复了智能动画在头部位置被修改后无法正常工作的问题。
- 修复了头部追踪:将玩家检测移回仅服务端执行。
- 修复了
CustomLookAtPlayerGoal,以更好地处理边缘情况并减少抖动。 - 修复了 Doppler NPC 会保留其手部容器物品的问题。
- 改进了 PoseManager 的日志消息。
- 更新了全新设计的 Logo。
6.10.0
- 修复了 #695:切换到
DEFAULT原版姿势时会清除模型部件的旋转/位置。 - 修复了 #695:仅在 NPC 空闲时应用旋转锁定和姿势动画。
- 修复了 #695:将根部旋转轴点改为使用实际碰撞箱高度,而不是 0.5f。
- 修复了多个目标注册问题,包括反向的
isTargetedPlayer检查、leave-handler 中错误的 UUID、玩家加入/离开时缺失的目标刷新,以及对离线目标的重试。 - 修复了目标被取消注册后仍保留目标引用的问题。
- 移除了加载姿势时对 ROOT 旋转的自动锁定;根部锁定现由用户控制。
- 在高级和自定义姿势配置界面中添加了旋转锁定复选框。
- 在
ConfigurationMenuHandler中为默认姿势界面添加了基于模型的姿势键过滤。 - 为
CustomPosition、CustomRotation、CustomScale、ModelPose、ModelAnimationBehavior和ModelAnimationData添加了单元测试。 - 添加了
NPCDataIsolationTestHelper以及适用于 Fabric 和 Forge 的游戏测试。 - 将头部最大偏航范围从 60° 提高到 65°。
6.9.0
- 修复了 #692、#666:添加缓存与保护措施,防止 NPC 实体数据更新被重复触发。
- 修复了 #651、#617:为所有受支持的 NPC 类型添加了基础自定义姿势。
- 修复了 #597:添加了更多逃跑目标,用于躲避玩家、村民、敌对生物等。
- 修复了姿势加载逻辑:直接从模组资源中读取,而不是将文件复制到磁盘。
- 修复了实体加入时重复调用
saveNPC的问题:现会先检查现有注册表条目。 - 添加了
despawn和spawn命令,可通过 UUID 移除并重新生成 NPC,且支持可配置的移除原因。 - 添加了
ModelPoseAPI和EasyNPCEntityHandler公共 API 类,用于控制 NPC 姿势以及供外部模组以编程方式管理 NPC。 - 为所有受支持的 NPC 类型添加了姿势数据文件。
- 在基础姿势配置界面中添加了旋转锁定复选框。
- 添加了
MoveToPositionGoal,使 NPC 在执行回调动作前先移动到指定位置。 - 添加了
EasyNPCLookControl和EasyNPCBodyRotationControl,以遵循已锁定的根部旋转。 - 将同步后的所有者变更和维度变更添加到 NPC 实体数据索引中。
- 在多个实体渲染器中添加了 EasyNPCItemAttachmentLayer。
- 添加了专用的
Flee Objective配置标签页,包含逃离苦力怕、敌对生物、生物、玩家、村民和阳光的目标。 - 在跟随目标标签页中添加了
FOLLOW_ITEM目标,使 NPC 可以按资源位置跟随物品实体(例如minecraft:apple)。 - 添加了
LookAtEntityByUUIDGoal,并在观察目标界面中启用了按 UUID 观察实体和观察所有者的目标。 - 为
SynchedDataIndex添加了persistent标志,使临时索引(如弩蓄力、模型动画)不再触发脏保存标记。 - 为 API 使用者在
SlimeBase中添加了可配置的customParticlesEnabled标志。 - 添加了
SoundType.PET,并将CAT_PURR映射给猫 NPC,以丰富驯服状态下的环境音效果。 - 将周期性 NPC 保存操作的日志详细级别从 INFO 降低为 DEBUG。
6.8.3
- 修复了 #680:通过升级网络协议版本强制处理版本不匹配。
- 修复了 #679:重置命名牌的位置、旋转和大小。
- 修复了 #665:为根部旋转添加多状态滑动。
- 修复了 #664:添加禁用跟随鼠标光标的选项,以便更容易摆姿势。
- 修复了 #663:改进了对根部 X 和 Z 旋转的支持。
- 修复了 #661:添加快捷旋转功能,使用 Npc 魔杖并潜行对着 NPC 可将其根部旋转为朝向玩家。
- 修复了移动工具错误触发交互的问题:在交互处理器中加入了对移动工具的检查。
- 修复了预设物品错误触发交互的问题:在交互处理器中加入了对预设物品的检查。
- 通过调整碰撞箱和视线高度计算,修复了史莱姆和恶魂的碰撞箱及命名牌位置问题。
- 通过调整偏移值,修复了史莱姆和恶魂的 GUI 位置。
6.8.2
- 修复了 #677:为
SafeMerchantData扩展notifyTrade以避免崩溃。 - 添加了进度数据支持,可根据玩家交互和动作让 NPC 升级。
- 添加了全局 NPC 追踪系统,以便更好地管理和调试世界中的 NPC。
- 添加了
OriginalModelConfig.withVariantTexture()选项,允许原始模型使用变体纹理。
6.8.1
- 修复了 #676:改用现有的预设辅助方法,而不是自定义方法。
6.8.0(添加 API 支持)
- 修复了 #667:为无效网络数据包添加警告消息和额外检查。
- 修复了马刷怪蛋模型。
- 修复了悦灵、鸡、苦力怕、狐狸、恶魂、马、卫道士、铁傀儡、史莱姆和恼鬼的姿势支持。
- 添加了 NPC 基础类,以提供更好的 API 支持。
- 添加了 NPC 原始类,以提供高级 API 支持。
- 添加了史莱姆和恶魂 NPC 类型。
- 添加了自定义模型 API,以便更轻松地与其他模组和自定义模型集成。
- 重构了内部数据处理和注册逻辑,以提高可维护性并为未来改进做好准备。
6.7.1
- 修复了 #657 和 #656:为原版漏洞添加了额外的客户端检查。
6.7.0
- 修复了 #650:在 setupAnim 方法中实现了狼腿动画。
- 修复了 #648:修正了 canBeHitByProjectiles 的翻译。
- 修复了 #645:添加了
allowBypassInvulnerability配置选项,用于允许/禁止绕过 NPC 的无敌状态。 - 修复了删除按钮在宽度较小时仍显示标签的问题。
- 修复了上下按钮在某些情况下位置不正确的问题。
- 修复了命名牌会显示在对话和配置 UI 上的问题。
- 修复了距离动作问题:多个动作无法被正确触发。
- 修复了 NPC 预设相关问题。
- 修复了猫 NPC 和狼 NPC 的所有者数据无法正确同步的问题。
- 添加了预设浏览器,方便选择常用的 NPC 预设。
- 添加了预设 .snbt(文本)导出和导入功能,以便分享 NPC 预设。
- 重构了现有 NPC 预设,使其使用新的 .snbt 格式。
- 重构了刷怪笼系统,使其使用新的预设格式,以提高可维护性并为未来改进做好准备。
6.6.2
- 修复了 #643:重做缩放系统。
- 修复了重启/重载后缩放无法正确更新碰撞箱和命名牌位置的问题。
- 添加了 MID 和 MOUSE_OVER 命名牌可见模式,以更细致地控制 NPC 名称显示。
- 添加了基于队伍的命名牌可见性支持,并遵循原版 Team 规则。
6.6.1
- 修复了 #638:重构了显示属性的内部数据处理。
6.6.0
- 修复了 #634:使用专用线程池实现异步材质加载。
- 修复了材质加载阻塞渲染线程导致游戏卡死的问题。
- 修复了材质重载保护中的竞争条件,改用原子操作。
- 修复了远程材质下载期间 HTTP 连接的资源泄漏问题。
- 修复了 URL 验证刷屏问题,此前会允许对同一材质同时进行多个下载。
- 修复了远程图像验证的异常处理,防止无效 URL 导致崩溃。
- 修复了 NPC 加载期间出现的
defineId called for:警告消息。 - 重构了材质加载架构,加入多层防护和速率限制。
- 重构了实体数据注册逻辑,以提高可维护性。
- 将数据类转换为现代 Java records,以提高不可变性和线程安全性。
- 添加了基于 ConcurrentHashMap 的线程安全会话服务器刷屏保护。
- 添加了完整的错误恢复机制,在失败时自动重置冷却。
- 改进了材质加载:使用 2 线程池和 500ms 速率限制。
- 改进了异常处理:为 IIOException 和 FileNotFoundException 使用更具体的 catch 块。
6.5.2
- 修复了村民职业和工作皮肤问题。
- 通过为 gradle 依赖添加缓存,改进了 GitHub 工作流。
- 改进了 Gradle 构建时间和清理任务。
6.5.1
- 修复了 #632:实现了 ON_KILL 动作类型和事件。
- 修复了 #629:改进了材质处理性能、缓存和内存占用。
- 修复了 kill 命令对 NPC 无效的问题。
- 修复了材质重载保护导致缓存清除后无法重新加载的问题。
- 修复了远程图像验证器中的 WebP 验证漏洞(缺少 return 语句)。
- 重构了材质处理逻辑,以提高可维护性并为未来改进做好准备。
- 添加了基于时间的重载保护(60 秒),以替代永久阻止机制。
- 为材质处理添加了额外的单元测试。
- 改进了 gradle 构建任务。
6.5.0
- ⚠️ 移除了 jar-in-jar 打包方案,以获得更好的模组兼容性和 API 能力。
- 修复了 #627:改进剪刀实现,以更好地兼容其他模组。
- 修复了 #625:使用已旋转或移动的模型部件时,生动动画出现的问题。
- 修复了使用已缩放模型部件时默认动画会被取消的问题。
- 添加了更好的姿势动画控制,提供 smart、default 和 none 选项。
6.4.1
- 修复了 #626:改进了不同 NPC UUID 的界面切换逻辑,感谢
Spawnblade提供的详细调查和修复建议。
6.4.0
- 修复了 #626:改进了对话数据验证和错误处理。
- 修复了 #623:重构了渲染数据和渲染处理逻辑。
- 修复了 #622:确保自定义数据能够被正确保存和加载。
- 修复了打开对话动作类型,使其可以打开其他 NPC 的对话。
- 修复了哈希相关问题:为 ConditionDataSet 和 ActionDataSet 添加缺失的 equals 和 hashCode 方法。
- 为 #622 添加了自定义数据测试物品,以便更轻松地测试自定义数据。
- 改进了 records,并修复了数据缺失时的潜在问题。
6.3.0
- 重构了配置 UI 专用组件,并将其从核心模组中移除。
- 修复了对话数据:发送到客户端前会先过滤对话数据。
- 修复了对话编辑器布局问题并改进了易用性。
- 修复了部分对话数据字段缺少默认值的问题。
- 添加了对话优先级支持,用于控制对话执行顺序。
- 为对话和计分板动作添加了条件支持。
- 为对话添加了频率支持,以限制对话显示的频率。
- 添加了新的 NPC 预设,用于支持计分板和条件功能。
- 通过移除冗余字段,改进了对话按钮数据格式。
6.2.0
- 修复了对话中的字符串注入问题。
- 修复了动作类型缺少翻译的问题。
- 添加了计分板动作类型,可增加、减少、设置计分板数值。
- 添加了
@score(...)NPC 宏,用于在对话中显示计分板数值。 - 添加了额外的单元测试。
- 改进了旋转按钮,加入指示器并提升易用性。
6.1.2
- 修复了容器和菜单同步问题,补上了缺失的关闭容器数据包。
- 修复了关闭按钮在某些情况下无效的问题。
- 修复了界面切换时鼠标光标跳动的问题。
- 修复了翻译文件,并移除了重复和已弃用条目。
- 将 Easy NPC 魔杖移至现有核心物品选项卡,而不是新建一个。
- 为猫的不同模型部件添加了姿势支持(尾巴除外)。
- 通过在不需要时禁用发光效果,提升了 EasyNPCWand 发光效果的性能。
- 通过排除显示实体、标记实体、投掷物和刷怪笼等非生物实体,改进了自定义实体检测。
- 改进了猫变种处理。
6.1.1
- 修复了 #612:重新验证实体类型。
- 修复了 #610:为特定模型强制同步帽子层和头部层。
- 修复了兽人皮纹理。
- 通过将相关逻辑移至仅客户端,改进了自定义模型支持和性能。
- 改进了玩家皮肤的玩家到 UUID 映射缓存。
- 将更改模型命令和逻辑限制为仅对 Doppler NPC 生效。
6.1.0 ✨
这是一个重大版本。更新前请备份你的世界和 NPC 数据。 此版本包含大量改进、优化和内部变更, 与早期版本并不完全兼容。
⚠️ 破坏性变更
- 6.1.0 之前版本中的现有 NPC 及其配置数据可能无法正确加载,或者需要手动调整。
- 内部数据格式和部分行为已被重构,以支持新的使用场景。
🧩 全新的模块化结构
Easy NPC 现已拆分为三个独立模组:
- Easy NPC – 同时包含 Core 和 Configuration UI 的整合包,提供开箱即用的体验。
- Easy NPC: Core – 轻量级的 NPC 运行时与逻辑模块,依赖最少。适用于服务器、整合包和开发者。
- Easy NPC: Configuration UI – 独立的配置界面,用于创建和编辑 NPC。可安装在需要该 UI 的客户端上。
🎯 为什么要这样改?
- 允许服务器和整合包仅在服务端提供 Core 模组,从而获得更精简的配置。
- 在并非所有地方都需要 UI 时,可减少内存占用和加载时间。
- 通过分离 UI 与核心逻辑,让开发和测试更高效。



