自定义动态NPC

自定义动态NPC

一个完整的NPC系统和可自定义的敌对生物,包含Blockbench模型、程序化动画、所见即所得的视觉编辑器及生成区域管理——所有功能均可通过服务器完全控制。

怪物

自定义动态NPC

Minecraft 1.20.1 · Fabric · 服务端权威

一个完整的动态NPC和可自定义敌对生物系统,支持Blockbench模型、程序化动画、所见即所得可视化编辑器以及生成区域管理——所有功能均由服务端完全控制。


✨ 主要特性

🧑‍🤝‍🧑 动态NPC系统

  • 服务端权威:所有逻辑在服务端运行;客户端仅负责渲染。
  • 状态:空闲、对话、行走、动画、工作、睡眠、自定义。
  • 可配置AI大脑(NpcBrain):自动状态转换、计时器、漫游。
  • 自定义皮肤:为每个NPC分配任意皮肤。
  • Blockbench模型(.bbmodel):直接在游戏中上传自定义3D模型。
  • 可配置碰撞箱:为每个NPC调整碰撞宽度和高度。
  • 模型旋转:将NPC模型旋转到任意角度。
  • 默认无敌:NPC不会被伤害(可配置)。
  • 路径系统:定义路径点,使NPC可以循环行走。
  • 完全持久化:所有NPC自动保存,重启后仍存在。

⚔️ 基于区域的敌对生物系统

  • 生成区域(MobZone):定义矩形区域,敌对生物自动在其中生成。
  • 可配置变体:每个区域可以有多个生物变体,包含:
    • 📛 自定义名称
    • ⚔️ 伤害、⚡ 速度、❤️ 生命值、🎯 追踪范围
    • 🧱 碰撞箱(宽度×高度)
    • 🎨 皮肤和模型(玩家模型、Blockbench或原版生物)
    • 🚶 行走动画:无、上下晃动、左右摇摆、弹跳
    • 👊 攻击动画:无、前倾、脉冲、震动
  • 可配置掉落物:定义死亡战利品,包含最小/最大数量和概率。
  • 可控生成:生成延迟、最大存活生物数量、每个区域的启用/禁用。
  • 多维度支持:每个区域会记住其所在维度。
  • 三重渲染系统:
    • 🟣 Blockbench模型,支持导入纹理和程序化动画。
    • 🟢 原版生物代理(例如 minecraft:turtle、minecraft:zombie):渲染原生外观和动画。
    • 🔵 玩家模型作为后备。

🎬 程序化动画(Blockbench模型)

导入的Blockbench模型支持自动动画,无需单独的动画文件:

类型 名称 效果
🚶 行走 上下晃动 行走时平滑上下弹动
🚶 行走 左右摇摆 行走时左右摇摆
🚶 行走 弹跳 脉冲式的挤压与拉伸
👊 攻击 前倾 攻击时身体前倾
👊 攻击 脉冲 攻击时短暂的缩放脉冲
👊 攻击 震动 攻击时快速震动

动画会根据实体实际移动、挥击/受伤状态触发。


🖥️ 完整可视化GUI

📋 管理面板(/dnpc panel)

针对操作员的主要控制面板:

  • NPC列表,支持搜索和选择。
  • 3D预览所选NPC,包含模型和皮肤。
  • 模型库,带可滚动卡片和3D预览。
  • .bbmodel上传,直接从本地文件上传。
  • 可视化碰撞箱控制,带滑块。
  • 内联编辑名称、皮肤、模型、状态、漫游。

🎨 所见即所得GUI编辑器(GuiNodeEditorScreen)

拖放式可视化编辑器,用于创建NPC界面:

  • 可调整大小的网格画布。
  • 可拖动的节点:按钮、面板、标签、分隔符、图片、物品。
  • 属性面板,包含选项卡:预设、样式、动作、高级。
  • 可用动作:运行命令、关闭GUI、打开网址、发送消息、播放音效、改变状态、打开预设、给予物品、打开对话、传送玩家、显示标题、NPC动画、设置分数、打开背包、消耗物品、检查背包。
  • 条件:拥有权限、NPC状态、拥有物品、分数大于等于。
  • 可保存的预设:商店、对话、自定义JSON。

🗺️ 区域面板(/dnpc zone panel)

管理敌对生成区域的可视化面板:

  • 区域列表,显示开/关状态、大小、变体、掉落物、活跃生物数量。
  • 快速创建,自动填充坐标。
  • 每个区域三个选项卡:
    • ⚙️ 设置:可编辑边界(6个坐标)、生成延迟、最大生物数量、状态。
    • ⚔️ 变体:卡片展示属性、模型、动画。按钮打开生物选择器。
    • 💎 掉落物:卡片展示物品、数量、概率。按钮打开物品选择器。
  • 可视化切换(◉ 显示):启用/禁用游戏中区域边界的渲染。

🦎 生物选择器(GuiMobPickerScreen)

用于在创建变体时选择生物/模型的可视化浏览器:

  • 来源列表,按模组命名空间分类(minecraft、模组、⚡ 模型)。
  • 可视化网格,显示刷怪蛋和自定义模型图标。
  • 按名称和ID搜索。
  • 属性字段:名称、伤害、速度、生命值、追踪范围、碰撞箱宽/高。
  • 动画选择器:通过按钮循环选择行走/攻击动画。

🎒 物品选择器(GuiItemPickerScreen)

用于添加掉落物的可视化浏览器:

  • 物品网格,显示真实渲染的图标。
  • 按模组命名空间筛选。
  • 字段:最小数量、最大数量、概率。

🌐 区域边界渲染(ZoneBoundaryRenderer)

  • 线框+半透明填充,用于每个区域,在游戏中可见。
  • 每个区域独特的颜色(红、蓝、绿、黄、紫、橙、青)。
  • 选中区域会高亮显示,带有明亮的脉冲效果和一个显示名称和大小的浮动标签。
  • 从区域面板GUI切换显示。

📡 网络与性能

  • GZIP压缩数据包,以最小化网络使用。
  • 双工通道:10多个专用的S2C和C2S通道。
  • 模型清单同步:加入游戏时,服务器发送模型清单;客户端仅下载所需部分。
  • 客户端模型缓存,包含动态纹理。
  • 代理实体缓存,用于原版渲染(复用虚拟实体)。

📜 命令

所有命令使用 /dnpc(需要OP等级2):

NPC

命令 描述
/dnpc panel 打开管理可视化面板
/dnpc spawn <名称> [坐标] 创建一个NPC
/dnpc remove <名称|UUID|nearest> 移除一个NPC
/dnpc list 列出所有NPC
/dnpc tp <ID> <坐标> 传送一个NPC
/dnpc state <ID> <状态> 更改状态
/dnpc skin <ID> <皮肤> 更改皮肤
/dnpc model <ID> <模型ID> 分配一个Blockbench模型
/dnpc anim <ID> <动画> 播放一个动画
/dnpc wander <ID> <true|false> 启用/禁用漫游
/dnpc rename <ID> <新名称> 重命名一个NPC
/dnpc path add/clear/loop <ID> 路径系统
/dnpc gui open <ID> [玩家] 打开NPC GUI
/dnpc gui set <ID> shop|dialogue|json 分配一个GUI预设
/dnpc models list 列出Blockbench模型
/dnpc models reload 从磁盘重新加载模型
/dnpc reload 重新加载NPC
/dnpc save 保存所有内容

敌对区域

命令 描述
/dnpc zone panel 打开区域可视化面板
/dnpc zone create <ID> <坐标1> <坐标2> 创建一个区域
/dnpc zone remove <ID> 移除一个区域并杀死其中的生物
/dnpc zone list 列出所有区域
/dnpc zone info <ID> 区域详情
/dnpc zone enable/disable <ID> 启用/禁用
/dnpc zone set <ID> delay/maxmobs <值> 配置生成
/dnpc zone variant add/remove/list/set 管理变体
/dnpc zone drop add/remove/list 管理掉落物
/dnpc zone save/reload 保存/重新加载区域

📦 安装

  1. 安装 Fabric Loader ≥ 0.16.9 和 Fabric API ≥ 0.92.2+1.20.1。
  2. 将 customdynamicnpc-1.0.5.jar 放入服务端和客户端的 mods/ 文件夹。
  3. 重启Minecraft。
  4. 使用 /dnpc panel 开始创建NPC,或使用 /dnpc zone panel 管理敌对区域。

🔧 要求

要求 版本
Minecraft 1.20.1
Fabric Loader ≥ 0.16.9
Fabric API ≥ 0.92.2+1.20.1
Java JDK 17+