更新日志
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,降低日志噪声
- Tick
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文件导入蓝图。
- 导出到 .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的路由表更新逻辑。
- 修复移动检测 Bug: 修复了由于 Minecraft 原生
- 其他:
- 现在 /mgmc 命令都统一要求管理权限。
v0.3.0
- 新特性:
- 蓝图绑定系统: 引入蓝图绑定机制,支持将特定蓝图脚本绑定至物品。
- 蓝图工作台: 专为蓝图管理设计的图形化界面,支持对手持物品进行蓝图绑定与解绑,并内置蓝图库预览。
- 附属支持架构:
- 通用事件上下文机制: 引入了
EventContextProvider和ContextProviders注册表。第三方模组现在可以注册自定义事件,并提供自己的Level/Player提取逻辑,而无需修改核心代码。
- 通用事件上下文机制: 引入了
- 变量节点的类型改为 ANY
- 优化:
- 架构重构:
- 事件分发器解耦: 完全移除了
EventDispatcher中硬编码的instanceof检查。分发逻辑现在完全由元数据和提供者驱动,显著提升了可扩展性和可维护性。 - 注册表健壮性: 增强了
NodeHelper,增加了重载的registerEvent方法,支持在节点注册期间无缝绑定自定义上下文提供者。
- 事件分发器解耦: 完全移除了
- 架构重构:
- 修复:
- 类型安全: 修复了
EventMetadata和NetworkService中与泛型类型推断相关的潜在编译问题。 - 初始化流程: 确保
EventDispatcher和NodeInitializer遵循更可靠的初始化顺序,以防止模组加载期间的注册表冻结问题。 - 蓝图编辑器: 修复了撤销/重做功能因组件初始化顺序及引用缓存导致的失效问题,增强了状态回滚时的引用一致性;同时解决了节点重叠时的点击穿透问题,统一了基于 Z-Order 的交互判定逻辑。
- 蓝图系统: 修复了蓝图映射(mappings.json)在更新后由于服务端缓存未清理导致无法立即生效的问题,实现了路由变更后的级联缓存刷新机制。
- 类型安全: 修复了
v0.2.7
- 新增:
- 蓝图管理器:
- 右键菜单新增“复制”功能,支持快速克隆现有蓝图文件。
- 安全节点控制:
- 新增配置项
allow_server_run_command_node,用于控制是否允许保存含有run_command_as_server节点的蓝图,提升服务器安全性。
- 新增配置项
- 蓝图管理器:
- 修复:
- 蓝图版本提示:
- 修复了多人模式下,点击版本冲突提示中的“复制并打开”按钮失效的问题。
- 国际化:
- 补全了部分配置项缺失的 Tooltip 翻译。
- 蓝图版本提示:
- 优化:
- 架构重构:
- 上帝对象解耦: 将视图动画、历史管理和自动布局功能从
BlueprintState中提取到独立的ViewManager、HistoryManager和LayoutManager类中。 - 网络层解耦: 建立了独立的
NetworkService,由 UI 调用业务接口而非直接构造网络包,提升了代码的可维护性。
- 上帝对象解耦: 将视图动画、历史管理和自动布局功能从
- 性能与安全:
- 内存溢出防御: 将
ByteBufCodecs.STRING_UTF8替换为带长度限制的stringUtf8(1048576),防止潜在的内存溢出问题。 - 逻辑归位: 优化了客户端/服务端逻辑分配(CE),将原本在客户端执行的服务器逻辑移动到了服务端。
- 内存溢出防御: 将
- 日志清理:
- 将蓝图执行相关的日志级别从
INFO降为DEBUG。
- 将蓝图执行相关的日志级别从
- 架构重构:
v0.2.6
- 新增:
- 以服务器身份运行命令 (Run Command as Server):
- 新增节点,允许以服务器控制台权限(OP 4)执行 Minecraft 命令。
- 以服务器身份运行命令 (Run Command as Server):
- 修复:
- 修复了无法注册附属模组的节点问题
- 修复了意外显示“node_category.mgmc.action.entity”的问题
v0.2.5
- 新增:
- 标记 (Marker):
- 节点: 新增“标记”节点,用于标注。
- 编辑: 支持点击文本直接进入编辑模式,Enter确定、ESC取消。
- Ctrl+P:
- 标记点搜索
- 输入内容自动匹配对应的标记
- 按下 ENTER 自动将视角移向对应标记
- 编辑器小地图: 在编辑器右下角新增小地图功能,直观展示全图结构及当前视野范围。
- 在编辑器中按下
M键可快速显示或隐藏小地图。
- 在编辑器中按下
- 标记 (Marker):
- 优化:
- 连线渲染: 根据连线长度与缩放级别动态计算分段数
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现在支持XYZ和Entity类型与字符串/对象之间的智能转换。NodeContext现在自动为所有事件提供triggerXYZ和triggerEntity数据,极大简化了节点逻辑编写。
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 模组
- 新增低版本蓝图兼容性警告
- 编辑器增强: 新增框选、多选、复制与粘贴功能
- 支持通过鼠标拖拽进行区域框选
- 支持按住
Shift或Ctrl键进行多选/反选 - 支持
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转换引擎现在完全拥抱原生 JavaList与 GsonJsonArray。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),确保所有玩家同步。 - 版本校验系统: 引入蓝图版本号机制,防止多人同时编辑同一蓝图时发生竞态冲突导致数据损坏。