Skip to content

更新日志

0.6.1

  • 新增
    • 节点
      • 幂运算(n 次方)节点
      • 任意类型相等判断节点(忽略类型 / 严格类型 / 最宽松)
      • 表达式解析节点(字符串数学表达式 -> 浮点数)
    • 语法糖
      • 字符串输入支持变量插值:$bp('name')$g('name')
        • $bp('name'):读取蓝图变量 name,并自动转为字符串
        • $g('name'):读取全局变量 name,并自动转为字符串
      • \$\n\\ 转义
    • 蓝图列表右键“复制蓝图”
  • 修复
    • gui.mgmc.blueprint_editor.region.color_title 缺失的问题
    • 重命名/复制弹窗无法输入非数字的问题
    • 重复创建蓝图异常处理
  • 更改
    • Tick
      • TickScheduler 改为基于游戏时间触发,避免计数扣减误差
      • 使用全局 Server Tick 驱动,修复多维度导致等待加速的问题
      • 停服/卸载世界时清理 Tick 任务,避免内存泄漏与幽灵任务
      • Tick 任务调度改为最小堆,减少高负载时的遍历成本
      • Tick 相关日志降为 debug,降低日志噪声

0.6.0

  • 修复了一些异常的事件
  • 新增:get_inventory_item 节点:获取玩家物品栏中指定槽位的物品信息。

0.5.5

  • 更改:区域右键判定从整个区域改为仅判定标题栏。
  • 新增:编辑器设置菜单。
    • 现在的部分编辑器策略可在编辑器设置中调整。
  • 新增:智能吸附辅助线。
    • 智能吸附辅助线可用于对齐节点,使节点位置更加美观。
    • 可在编辑器设置中开启或关闭智能吸附辅助线。
  • 修复:可能的缓存失效问题。
  • 更改:更改了错误处理策略。
  • 新增 42 个节点:
    • clear_item:清除玩家背包中的指定物品或清空背包。
    • give_item:给予指定玩家物品。
    • get_item_count:获取玩家背包中某物品的数量。
    • has_item:判断玩家是否持有某物品。
    • get_entities_in_range:获取指定坐标周围一定半径内的实体列表。
    • get_entity_look_direction:获取指定实体的视线方向向量。
    • raycast:向指定方向发射一条射线,检测是否碰撞到方块或实体。
    • dismount_entity:让实体停止骑乘。
    • ride_entity:让实体骑乘另一个实体。
    • set_equipment:设置实体的装备。
    • spawn_entity:在指定坐标处生成实体。
    • break_block:破坏指定坐标处的方块。
    • fill_area:填充指定区域内的方块。
    • play_sound:播放指定音效。
    • set_block:设置指定坐标处的方块。
    • set_time:设置当前世界时间(Ticks)。
    • set_weather:设置当前世界的天气状态。
    • get_item_info:获取物品的信息。
    • acos:计算反余弦值。
    • asin:计算反正弦值。
    • atan:计算反正切值。
    • atan2:计算反正切值。
    • cos:计算余弦值。
    • sin:计算正弦值。
    • tan:计算正切值。
    • to_degrees:将弧度转换为角度。
    • to_radians:将角度转换为弧度。
    • vector_add:将两个向量相加。
    • vector_cross:计算两个向量的叉积。
    • vector_distance:计算两个向量之间的距离。
    • vector_div:将向量除以标量。
    • vector_dot:计算两个向量的点积。
    • vector_length:计算向量的长度。
    • vector_mul:将向量乘以标量。
    • vector_normalize:将向量归一化。
    • vector_sub:将两个向量相减。
    • get_equipment:获取实体的装备。
    • get_eye_position:获取实体的眼睛位置。
    • get_look_vector:获取实体的视线方向向量。
    • get_block:获取指定坐标处的方块。
    • get_time:获取当前世界时间。
    • get_weather:获取当前世界的天气状态。

0.5.4

  • 修复:了在蓝图编辑器中通过模态框输入数值或文本时,输入框有时无法响应键盘输入的问题。
  • 新增:快捷键 2 项
    • Ctrl + S 保存蓝图
    • Ctrl + A 全选节点
  • 新增:区域
    • 区域是蓝图中的一个矩形区域,用于组织和管理节点。
    • 新建区域
      • 使用ctrl + 鼠标右键点击来新建区域。
    • 移动区域
      • 可以通过拖动鼠标来移动区域,移动区域时,区域内的节点也会相应地移动。
      • 如果不想移动区域内的节点,只需要按住ctrl键移动即可。
  • 更改:InputModalScreen
    • 现在的 InputModalScreen 的选择改成了列表,需要双击。
  • 更改:整理节点
    • 现在的整理节点将会参考区域为因素
    • 区域右键新增单独的整理节点,点击后单独整理区域内的节点。
  • 更改:UI
    • 如果可以保存,那么保存按钮将会高亮,并且带有循环的动画加强提示
  • NeoForge 版本现在最低为 21.1.218
  • 现在搜索标记功能支持了搜索区域

0.5.3

  • 修复了 /mgrun <蓝图名> <event> 命令触发时,on_mgrun 节点名称输出不正确的问题(之前错误输出为 mgmc:on_mgrun,现已修正为输出正确的 <event> 参数内容)。
  • “类型转换”节点:移除了原有的“转换为类型”手动选择接口,改为自动判断转换。该节点现在采用单输入单输出设计,输出端口类型为 Any,会自动尝试将输入(如字符串)转换为最匹配的数据类型(Boolean, Float, XYZ 等)。

0.5.2

修复

  • 修复了 BlueprintSelectionScreen、BlueprintMappingScreen 右键菜单失效的问题
  • 更正了 删除蓝图 确认弹窗的 I18N

0.5.1

INT 类型

本版本正式引入了 INT (整数) 类型,并对现有节点进行了逻辑优化,将所有在逻辑上应为整数的端口从 FLOAT 切换到了 INT

受影响的节点

以下节点的特定端口已更新为 INT 类型:

  • 变量
    • int (整数):提供 INT 类型常量的基础节点。
  • 流程控制
    • for_loop (有限循环):循环起始值、终止值、当前索引。
    • wait_tick (等待刻):等待的游戏刻数。
  • 列表操作
    • get_list_item (获取列表项):索引端口。
    • list_remove (从列表删除):索引端口。
    • list_set_item (设置列表项):索引端口。
    • list_length (获取列表长度):长度输出端口。
  • 字符串操作
    • string_length (字符串长度):长度输出端口。
    • string_substring (截取子字符串):起始索引、结束索引。
  • 数学逻辑
    • random_int (随机整数):最小值、最大值输入以及结果输出。
    • to_int (转换为整数):新增节点,用于将浮点数或其他类型显式转换为 INT
  • 动作执行
    • set_entity_on_fire (设置实体着火):持续秒数。
    • add_potion_effect (添加药水效果):持续时间、效果等级。

蓝图编辑器帮助

本版本在蓝图编辑器顶部工具栏新增了 帮助按钮 (?),点击可进入全新的交互式帮助界面:

  • 快捷键指南:详细列出了编辑器支持的所有核心快捷键(如 Ctrl+C/V 复制粘贴、Ctrl+Z/Y 撤销重做、Ctrl+P 快速搜索等)

客户端节点

新增了 客户端节点 概念,包含以下内容:

  • 界面与提示
    • client_show_toast (显示客户端 Toast 提示):在客户端显示短暂的文本提示。
  • 系统工具
    • client_open_url (打开网页):在客户端打开指定的 URL。

其余更改

更改了以下内容

  • 将右键菜单的根目录从 node_category.mgmc 改为 node_category

修复

修复了 InputModalScreen.java 难以辨认内容的问题。(提出者:@load-ing_(BiliBili))

0.5.0

重构了项目,使用 Architectury API

0.4.0:调用蓝图更新

  • 新增
    • 调用蓝图 (call_blueprint):允许在当前蓝图中同步执行另一个蓝图,并传递参数列表,同时可以获取执行后的返回值。
    • 蓝图被调用时 (on_blueprint_called):作为被调用蓝图的入口事件,负责接收调用者传递的参数。
    • 返回到调用者 (return_to_caller):用于在被调用的蓝图中设置返回给调用者的结果列表。
  • 优化与修复
    • 类型转换增强:增强了 TypeConverter 的数组转换能力,支持将 Java 基础类型数组(String[], int[] 等)自动转换为蓝图列表。

0.3.6

  • 新增
    • 导出到 .mgmcbp:现在可以右键点击蓝图列表项,将其导出为 .mgmcbp 文件。导出的文件内置了该蓝图的所有 ID 映射(Mapping)设定与逻辑数据。
    • 导入 .mgmcbp:新增导入功能,支持从 .mgmcbp 文件导入蓝图。
  • 其他
    • 导出的文件将自动保存至 mgmc_blueprints/exports/ 目录。
    • 导入前只需将文件放入 mgmc_blueprints/imports/ 目录即可在 UI 中选择并导入。

0.3.5

  • 新增
    • 加入了“按住 [W] 打开文档”功能:当选中节点时,按住W键会打开文档。
    • 为每个节点编写了文档,并将URL注册到了节点中的property web_url中
  • 更改
    • 将节点mgmc:set_entity_velocity(设置实体速度 / Set Entity Velocity)重命名为mgmc:apply_impulse(施加推力 / Apply Impulse),并将端口id从velocity改为impulse
  • 修复
    • 修复了搜索时因NULL值导致的空指针异常。
    • 修复了添加药水效果将秒错误标注成刻的问题。

v0.3.4

  • 新增:

    • 跨存档全局蓝图: 支持将蓝图存储在全局目录中,使其在所有单机存档间通用。
  • 修复:

    • 映射泄露问题: 修复了保存存档映射时会将全局映射错误地固化到存档文件中的 Bug,现在仅保存存档特有的增量映射。

v0.3.3

  • 优化:
    • 重构自动布局算法: 引入 Sugiyama 算法实现动态间距与智能排序,解决节点重叠问题并大幅减少连线交叉。
    • 交互安全增强: 为顶部栏“自动布局”与“重置视角”添加 1s 长按确认逻辑,并实时显示进度反馈,防止误触。
    • 视觉动画提升:
      • 为“重置视角”添加平滑过渡动画,使视角切换更加自然。
      • 为“自动布局”添加节点位移插值动画,实时演示节点从杂乱到有序的排列过程。
    • 连线交互: 支持从端口拖出连线并在空白处释放时自动弹出节点列表。
    • 输入限制解除: 将节点配置输入、标记节点文本的最大字符限制大幅提升(最高支持 32,767 字符)。

v0.3.2

  • 新增:

    • 持久化变量系统: 引入了全新的变量持久化方案,数据将跨蓝图执行、跨服务器重启自动保存。
    • 全局持久化变量:
      • 新增 获取全局变量 节点。
      • 新增 设置全局变量 节点。
      • 数据统一存储在世界存档目录下的 mgmc_variables.json 中。
    • 实体持久化变量:
      • 新增 获取实体变量 节点,支持通过实体对象或 UUID 绑定数据。
      • 新增 设置实体变量 节点,实现针对特定实体的持久化状态跟踪(如等级、属性等)。
      • 数据统一存储在世界存档目录下的 mgmc_entity_variables.json 中。
    • 蓝图编辑器增强:
      • 未知节点处理: 现在无法识别的节点将渲染为“未知节点”,并保留其原始端口和连线。
  • 调整:

    • 官网域名变更: 将模组内所有官网链接及文档链接后缀由 opens.ltd 统一变更为 nb6.ltd
  • 修复:

    • 蓝图失效问题: 修复了在退出并重新进入世界后,原本的或新创建的蓝图会失效的 Bug。该问题是由于服务器停止时过度清理了全局事件节点定义导致的。本问题发现者:MCMOD.CN 東方華燈宴 (11楼)BILIBILI.COM 郫克清YrxyLiss13
    • 复制、删除、重命名失效: 修复了蓝图管理器右键菜单复制、删除、重命名失效的 Bug。该问题是由于错误发送了内部name导致的。本问题发现者:BILIBILI.COM 郫克清YrxyLiss13

v0.3.1

  • 新增:
    • 当服务端蓝图运行报错时,直接打印带有 ID 的错误提示。
    • 蓝图运行日志指令: 新增 /mgmc log 命令,打印前100条日志
    • Self 节点: 新增 Self 节点,用于在蓝图逻辑中动态获取当前执行上下文的挂载目标(触发实体)。
  • 优化:
    • 修复移动检测 Bug: 修复了由于 Minecraft 原生 xo/zo 字段在服务器端处理玩家移动包时被提前同步,导致无法检测到水平(X/Z轴)位移的问题。
    • 移动检测灵敏度提升: 将“当玩家移动”节点的位移检测阈值从 0.01 格(平方 0.0001)优化为 0.001 格(平方 1E-6)
    • 并发安全加固: 重构了 BlueprintRouter.java 的路由表更新逻辑。
  • 其他
    • 现在 /mgmc 命令都统一要求管理权限。

v0.3.0

  • 新特性:
    • 蓝图绑定系统: 引入蓝图绑定机制,支持将特定蓝图脚本绑定至物品。
    • 蓝图工作台: 专为蓝图管理设计的图形化界面,支持对手持物品进行蓝图绑定与解绑,并内置蓝图库预览。
    • 附属支持架构:
      • 通用事件上下文机制: 引入了 EventContextProviderContextProviders 注册表。第三方模组现在可以注册自定义事件,并提供自己的 Level/Player 提取逻辑,而无需修改核心代码。
    • 变量节点的类型改为 ANY
  • 优化:
    • 架构重构:
      • 事件分发器解耦: 完全移除了 EventDispatcher 中硬编码的 instanceof 检查。分发逻辑现在完全由元数据和提供者驱动,显著提升了可扩展性和可维护性。
      • 注册表健壮性: 增强了 NodeHelper,增加了重载的 registerEvent 方法,支持在节点注册期间无缝绑定自定义上下文提供者。
  • 修复:
    • 类型安全: 修复了 EventMetadataNetworkService 中与泛型类型推断相关的潜在编译问题。
    • 初始化流程: 确保 EventDispatcherNodeInitializer 遵循更可靠的初始化顺序,以防止模组加载期间的注册表冻结问题。
    • 蓝图编辑器: 修复了撤销/重做功能因组件初始化顺序及引用缓存导致的失效问题,增强了状态回滚时的引用一致性;同时解决了节点重叠时的点击穿透问题,统一了基于 Z-Order 的交互判定逻辑。
    • 蓝图系统: 修复了蓝图映射(mappings.json)在更新后由于服务端缓存未清理导致无法立即生效的问题,实现了路由变更后的级联缓存刷新机制。

v0.2.7

  • 新增:
    • 蓝图管理器:
      • 右键菜单新增“复制”功能,支持快速克隆现有蓝图文件。
    • 安全节点控制:
      • 新增配置项 allow_server_run_command_node,用于控制是否允许保存含有 run_command_as_server 节点的蓝图,提升服务器安全性。
  • 修复:
    • 蓝图版本提示:
      • 修复了多人模式下,点击版本冲突提示中的“复制并打开”按钮失效的问题。
    • 国际化:
      • 补全了部分配置项缺失的 Tooltip 翻译。
  • 优化:
    • 架构重构:
      • 上帝对象解耦: 将视图动画、历史管理和自动布局功能从 BlueprintState 中提取到独立的 ViewManagerHistoryManagerLayoutManager 类中。
      • 网络层解耦: 建立了独立的 NetworkService,由 UI 调用业务接口而非直接构造网络包,提升了代码的可维护性。
    • 性能与安全:
      • 内存溢出防御: 将 ByteBufCodecs.STRING_UTF8 替换为带长度限制的 stringUtf8(1048576),防止潜在的内存溢出问题。
      • 逻辑归位: 优化了客户端/服务端逻辑分配(CE),将原本在客户端执行的服务器逻辑移动到了服务端。
    • 日志清理:
      • 将蓝图执行相关的日志级别从 INFO 降为 DEBUG

v0.2.6

  • 新增:
    • 以服务器身份运行命令 (Run Command as Server):
      • 新增节点,允许以服务器控制台权限(OP 4)执行 Minecraft 命令。
  • 修复
    • 修复了无法注册附属模组的节点问题
    • 修复了意外显示“node_category.mgmc.action.entity”的问题

v0.2.5

  • 新增:
    • 标记 (Marker):
      • 节点: 新增“标记”节点,用于标注。
      • 编辑: 支持点击文本直接进入编辑模式,Enter确定、ESC取消。
      • Ctrl+P:
        • 标记点搜索
        • 输入内容自动匹配对应的标记
        • 按下 ENTER 自动将视角移向对应标记
    • 编辑器小地图: 在编辑器右下角新增小地图功能,直观展示全图结构及当前视野范围。
      • 在编辑器中按下 M 键可快速显示或隐藏小地图。
  • 优化:
    • 连线渲染: 根据连线长度与缩放级别动态计算分段数

v0.2.4

  • 新增:
    • XYZ 数据类型,专门用于存储三维空间坐标 (x, y, z)。
    • ENTITY 数据类型,支持更直接、类型安全的实体对象操作。
    • 新增“浮点数到XYZ”与“XYZ到浮点数”转换节点。
    • 更多实体动作: 新增“杀死实体”、“伤害实体”、“治疗实体”、“设置实体着火”、“设置实体速度”、“添加药水效果”、“清除所有药水效果”等节点。
    • 实体信息获取: 新增“通过实体获取实体信息”节点,支持直接从实体对象提取数据,无需经过 UUID。
    • 连线管理: 支持在蓝图编辑器中右键点击单条连线进行断开。
  • 重构:
    • 蓝图数据格式版本从 4 升级至 5
    • 移除了所有节点中分散的 X / Y / Z 浮点数端口,统一替换为单个 XYZ 类型的端口。
    • 实体引用现代化: 将大量节点中原有的 UUID 字符串端口替换为 ENTITY 对象端口,提升了执行效率和开发体验。
    • 兼容性增强: 增强了 BlueprintEngine 对旧版 UUID 数据的自动解析能力,确保 /mgrun 等通过 UUID 触发的命令依然能够自动匹配到实体对象。
    • 注意: 以上变更会导致旧版蓝图(v4及以下)中的部分端口连接失效,建议重新连接。
    • 受影响的节点包括:“当运行 mgrun 命令时”、“当破坏方块时”、“当放置方块时”、“当点击方块时”、“当玩家移动时”、“当玩家死亡时”、“当玩家复活时”、“播放粒子效果”、“爆炸”、“获取实体信息”以及所有涉及实体的动作节点。
  • 优化:
    • TypeConverter 现在支持 XYZEntity 类型与字符串/对象之间的智能转换。
    • NodeContext 现在自动为所有事件提供 triggerXYZtriggerEntity 数据,极大简化了节点逻辑编写。

v0.2.3

  • 新增: 撤销 (Undo) 和 重做 (Redo) 功能.
    • 支持 Ctrl+Z (撤销) 和 Ctrl+Y / Ctrl+Shift+Z (重做)。
    • 支持最多 50 步操作历史,包括节点移动、连线、删除、粘贴、值修改等。
  • 修复: 解决了 EXEC 端口在相同节点间可以重复连线的问题,现在重复连接会自动覆盖旧线段。
  • 优化: 将“获取实体信息”、“以玩家身份运行命令”等节点的 UUID 输入端口类型从 STRING 更改为更直觉的 UUID 类型。
  • 适配: 蓝图搜索系统现已适配 Just Enough Characters (JECh) 模组。

v0.2.2

  • 修复了“当玩家移动”节点在静止状态下依然触发的问题
  • 搜索框集成 Minecraft 原生 EditBox,支持光标导航、IME 输入及文本选择。
    • 附带兼容 IMBlocker 模组
  • 新增低版本蓝图兼容性警告
  • 编辑器增强: 新增框选、多选、复制与粘贴功能
    • 支持通过鼠标拖拽进行区域框选
    • 支持按住 ShiftCtrl 键进行多选/反选
    • 支持 Ctrl+C 复制选中节点及连接,Ctrl+V 粘贴
    • 支持选中多个节点后同步拖拽移动

v0.2.1

  • 引入命名空间机制
  • 增加重复注册校验
  • 引入事件驱动的节点注册机制
  • 规范化颜色与分类定义
  • 执行期状态污染修复
  • 注册表冻结机制
  • 移动了mappings.json的存储位置
  • 事件多态性支持
  • 将节点初始化逻辑移至commonSetup阶段
  • 解决全部Warning
  • 修复了已知的其他问题
  • 优化了蓝图引擎执行效率
  • 引入原子化路由更新机制
  • 增强蓝图管理器的并发安全性
  • 实现全局缓存显式清理机制
  • 更改蓝图版本为4

v0.2.0

  • 引入了mapping机制

v0.1.4

核心系统重构 (Major Refactoring)

  • 节点注册系统标准化:
    • 全面引入 NodeHelper 链式调用 API,规范了所有节点的元数据声明与逻辑注册流程。

蓝图格式升级

  • 蓝图格式版本 (Format 3): 提升了蓝图存储格式版本,以兼容重构后的节点注册逻辑及未来更复杂的属性扩展。

v0.1.3

列表系统彻底重构

  • 移除伪列表逻辑 (Legacy List Cleanup):
    • 彻底删除了所有基于 | 符号拼接的“字符串列表”逻辑。
    • TypeConverter 转换引擎现在完全拥抱原生 Java List 与 Gson JsonArray
    • String Split (字符串分割) 与 On MgRun (事件参数) 节点现在直接输出真实的列表对象。

v0.1.2

核心引擎重构

  • 彻底去字符串化 (De-stringification):
    • 重构了节点输入输出系统,核心计算流程(数学、逻辑、列表、变量)现在直接使用原生 Java 类型(Double, Boolean, List)进行流转。
    • 显著降低了在高频触发场景下的内存抖动与 CPU 转换开销。
  • 蓝图格式版本化 (Format Versioning):
    • 引入 format_version: 2 格式,支持原生 JSON 类型存储。
    • 完美向下兼容旧版蓝图,确保老脚本无需修改即可运行。

安全与稳定性增强

  • 服务端权限校验:
    • 增加了对蓝图保存、删除、重命名等敏感操作的服务端 OP 权限(Level 2)校验。
    • 修复了客户端可以绕过编辑器限制直接操作服务端文件的安全漏洞。
  • 路径穿越防护: 对蓝图文件名进行了严格的正则校验,严禁 .. 或路径分隔符,防止非法文件操作。
  • 死循环保护机制:
    • 引入了 max_node_executions 配置项,限制单个事件触发下的最大节点执行数.
    • 即使编写了逻辑错误的无限循环,也不会导致服务器卡死或崩溃。
  • 异步 IO 处理: 蓝图保存操作现在完全异步化,避免了在大规模蓝图保存时造成的瞬时卡顿。

节点优化

  • 变量系统: Get/Set Variable 现在支持存储任何类型的对象,不再强制转换为字符串.
  • 列表包含节点: 优化了匹配逻辑,现在支持对数值、布尔值及字符串的智能匹配。

v0.1.1

新特性

  • 多人联机支持: 实现了完整的客户端-服务端同步协议,支持在多人服务器中使用蓝图系统。
  • 服务端统一存储: 联机模式下蓝图现在统一存储在服务端存档目录(world/mgmc_blueprints),确保所有玩家同步。
  • 版本校验系统: 引入蓝图版本号机制,防止多人同时编辑同一蓝图时发生竞态冲突导致数据损坏。

最后更新于:

基于 VitePress 构建