Skip to content

更新日志

0.7.1

  • 编辑器设置现已支持持久化保存
  • 编辑器设置新增 FLOAT(数值)类型控件
  • 新增「吸附阈值」设置(范围 1–50,默认 10):用于调整拖拽节点时的自动吸附灵敏度。
  • 编辑器设置新增「未保存时保存按钮高亮」开关:可开启或关闭保存按钮在未保存时的绿色脉冲高亮提示(默认开启)。
  • 修复了因 Architectury 重构导致的节点丢失问题,恢复了以下事件节点:
    • 蓝图被调用(on_blueprint_called):作为被调用蓝图的入口事件,接收调用者传递的参数
    • 玩家离开(on_player_leave):当玩家离开游戏时触发
    • 玩家移动(on_player_move):当玩家移动时触发,输出精确坐标和移动速度
    • 左键点击方块(on_left_click_block):当玩家左键点击方块时触发
    • 拾取物品(on_item_pickup):当玩家拾取物品时触发(仅NeoForge版本支持)
  • 为以下节点加入了节点描述(在编辑器中悬浮节点时的显示说明):
    • 加法 (+)(add_float):返回两个数字 A 与 B 相加的结果。
    • 减法 (-)(sub_float):返回 A 减去 B 的差。
    • 乘法 (*)(mul_float):返回 A 与 B 相乘的积。
    • 除法 (/)(div_float):返回 A 除以 B 的商;当 B 为 0 时返回 0 以避免除零错误。
    • 取模 (%)(mod_float):返回 A 除以 B 的余数;当 B 为 0 时返回 0。
    • 幂运算 (A^B)(pow_float):返回 A 的 B 次方(A^B)。
    • 表达式计算(eval_expr):计算字符串中的算术表达式,支持 +、-、*、/、%、^ 以及括号;出错时返回 0。
    • 绝对值(abs_float):返回输入数字的绝对值(非负值)。
    • 最小值 (Min)(min_float):返回 A 与 B 中较小的值。
    • 最大值 (Max)(max_float):返回 A 与 B 中较大的值。
    • 区间限定 (Clamp)(clamp_float):将数值限制在最小值与最大值之间(包含边界)。
    • 四舍五入(round_float):将数字四舍五入为最接近的整数(以浮点数返回)。
    • 向下取整 (Floor)(floor_float):返回不大于该值的最大整数。
    • 向上取整 (Ceil)(ceil_float):返回不小于该值的最小整数。
    • 随机浮点数(random_float):返回介于 min(含)到 max(不含)之间的随机浮点数。
    • 随机整数(random_int):返回介于 min 到 max(均含)之间的随机整数。
    • 随机布尔值 (概率)(random_bool):以指定概率(0–1)返回 true,否则返回 false。
    • 向量加法(vector_add):返回两个向量 A 与 B 按各分量(x、y、z 分别)相加的结果。若任一输入不是向量则返回零向量(各分量均为 0 的向量)。
    • 向量减法(vector_sub):返回向量 A 减去 B 的结果。若任一输入不是向量则返回零向量(各分量均为 0 的向量)。
    • 向量乘法 (标量)(vector_mul):将向量 A 的每个分量乘以普通数值 B(标量),返回缩放后的向量。
    • 向量除法 (标量)(vector_div):将向量 A 的每个分量除以普通数值 B(标量)。当 B 为 0 时返回零向量(各分量均为 0 的向量)以避免除零。
    • 向量归一化(vector_normalize):将向量 A 归一化(缩放到长度正好为 1)为单位向量(长度为 1 的向量)。若为零向量(各分量均为 0)则返回零向量。
    • 向量长度(vector_length):返回向量 A 的长度(即模/大小),以普通数值(标量)表示。
    • 向量点积(vector_dot):返回向量 A 与 B 的点积(也称内积),以普通数值(标量)表示。
    • 向量叉积(vector_cross):返回向量 A 与 B 的叉积(也称外积)。
    • 向量距离(vector_distance):返回向量 A 与 B 之间的直线距离(欧几里得距离),以标量表示。
    • 播放声音(play_sound):在指定坐标处播放一段声音,可调节音量与音高。
    • 获取时间(get_time):返回当前世界的游戏内时间(整数,单位为 tick,一游戏日 = 24000 tick)。
    • 设置时间(set_time):将当前世界的游戏内时间设置为指定值(整数,单位为 tick,一游戏日 = 24000 tick)。
    • 获取天气(get_weather):返回当前天气,结果为 clear(晴朗)、rain(下雨)或 thunder(雷暴)之一。
    • 设置天气(set_weather):将当前天气设为指定类型(clear 晴朗 / rain 下雨 / thunder 雷暴),并可设置持续时间(单位为 tick)。
    • 浮点数(float):输入一个数字(可带小数)作为固定数值并输出,供其他节点使用。
    • 整数(int):输入一个整数(不带小数)作为固定数值并输出,供其他节点使用。
    • 布尔值(boolean):设置一个“是/否”(真/假)开关并输出,供其他节点使用。
    • 字符串(string):输入一段文字(文本)作为固定内容并输出,供其他节点使用。
    • 获取变量(get_variable):根据变量名(名称)读取当前蓝图中已保存的变量数值并输出。
    • 设置变量(set_variable):把某个数值保存到指定名称的变量中(仅当前蓝图运行期间有效),并继续向下执行。
    • 获取全局变量(get_global_variable):根据变量名读取全局变量数值并输出,该数值会永久保存在存档中。
    • 设置全局变量(set_global_variable):把数值保存到全局变量(永久保存在存档中),并继续向下执行。
    • 获取实体变量(get_entity_variable):读取绑定到某个生物/实体身上的数值并输出,该数值随该实体保存在存档中。
    • 设置实体变量(set_entity_variable):把数值保存到指定实体身上(随该实体保存在存档中),并继续向下执行。
    • 正弦(sin):返回输入角度的正弦值。输入应为弧度(角度需先用“转弧度”节点转换)。
    • 余弦(cos):返回输入角度的余弦值。输入应为弧度。
    • 正切(tan):返回输入角度的正切值(正弦除以余弦)。输入应为弧度。
    • 反正弦(asin):返回反正弦(已知正弦值求角度),结果以弧度表示,范围在 -π/2 到 π/2 之间。
    • 反余弦(acos):返回反余弦(已知余弦值求角度),结果以弧度表示,范围在 0 到 π 之间。
    • 反正切(atan):返回反正切(已知正切值求角度),结果以弧度表示,范围在 -π/2 到 π/2 之间。
    • 反正切2(atan2):根据坐标 (y, x) 返回反正切,结果以弧度表示,范围在 -π 到 π 之间,并能正确判断所在象限。
    • 转弧度(to_radians):将角度从角度制(度)转换为弧度(弧度制),供三角函数使用。
    • 转角度(to_degrees):将角度从弧度(弧度制)转换为角度制(度)。
    • 字符串拼接(string_concat):将两段文字(字符串 A 与 B)首尾相接合并为一段文字并输出。
    • 多字符串组合(string_combine):把多个输入端口的文本按从上到下的顺序合并为一段文字(可点击按钮添加更多输入端口)。
    • 字符串长度(string_length):返回文字(字符串)中包含的字符个数,以整数表示。
    • 字符串包含(string_contains):判断一段文字中是否包含另一段子文字(子串)。
    • 替换字符串(string_replace):把文字中所有的某段内容(旧文本)替换为另一段内容(新文本),输出替换后的整段文字。
    • 截取子字符串(string_substring):从文字中截取从第 start 到第 end 个字符(索引)之间的一段,输出该子文字。
    • 大小写转换/修剪(string_case):转换文字的大小写或去除首尾空格:UPPER 转大写、LOWER 转小写、TRIM 去除两端空白。
    • 分割字符串(string_split):以指定的分隔符(如逗号)把一段文字切分成多段,输出为文本列表(字符串列表)。
    • 射线检测(raycast):从起点沿某个方向射出一条看不见的射线(直线),检测最先碰到的方块或生物。可设置最大距离、是否在方块或生物处停下,并输出命中类型(MISS 未命中 / BLOCK 方块 / ENTITY 生物)、命中点坐标、命中实体、命中方块坐标,以及沿途经过的点位列表。
    • 等于(compare_eq):判断两个数字 A 与 B 是否相等。
    • 不等于(compare_neq):判断两个数字 A 与 B 是否不相等。
    • 相等(任意类型)(compare_any):判断两个值是否相等,提供三种比对方式:忽略类型(只比内容)、宽松类型(自动转换数字/文本后比较)、严格类型(类型和值都必须一致)。
    • 大于(compare_gt):判断数字 A 是否大于数字 B。
    • 大于等于(compare_gte):判断数字 A 是否大于或等于数字 B。
    • 小于(compare_lt):判断数字 A 是否小于数字 B。
    • 小于等于(compare_lte):判断数字 A 是否小于或等于数字 B。
    • 逻辑与(logic_and):逻辑与(并且):只有当 A 和 B 都成立时,结果才为真。
    • 逻辑或(logic_or):逻辑或(或者):只要 A 和 B 中有一个成立,结果就为真。
    • 逻辑非(logic_not):逻辑非(取反):把成立变为不成立,把不成立变为成立。
    • 逻辑异或(logic_xor):逻辑异或(互斥):A 和 B 中恰好一个成立时为真,两个相同时为假。
    • 获取列表项(get_list_item):从列表中按索引(从 0 开始)取出对应位置的元素并输出。
    • 添加到列表(list_add):把一个元素追加到列表末尾,输出添加后的新列表。
    • 从列表删除(list_remove):按索引删除列表中对应位置的元素,输出删除后的新列表。
    • 获取列表长度(list_length):返回列表中元素的个数(以整数表示)。
    • 列表包含(list_contains):判断列表中是否含有某个元素。
    • 设置列表项(list_set_item):把列表中指定位置的元素替换为新值;若索引正好是列表长度,则追加到末尾,输出修改后的列表。
    • 合并列表(list_join):用指定的分隔符(默认逗号)把列表中的元素连接成一段文字并输出。
    • 从列表中随机抽取(random_list_item):从列表中随机取出一个元素并输出。
    • 给予物品(give_item):给指定玩家发放指定物品(可设置数量与 NBT),随后继续执行。
    • 清除物品(clear_item):清除指定玩家背包中的指定物品,可设置清除的数量(数量为 0 时清除全部)。
    • 获取物品数量(get_item_count):返回指定玩家背包中某种物品的总数量(以整数表示)。
    • 拥有物品(has_item):判断指定玩家的背包中是否含有某种物品。
    • 获取物品信息(get_item_info):根据物品 ID 查询该物品的属性(最大堆叠数、最大耐久、是否为食物、是否为方块类物品),并分别输出。
    • 获取物品栏物品(get_inventory_item):按索引(从 0 开始)读取指定玩家背包中某个格子的物品,输出其物品 ID、数量与 NBT。
    • 通过 UUID 获取实体信息(get_entity_info_byuuid):通过 UUID 在世界中查找对应的生物/实体,输出其 UUID、名称、类型、注册名、坐标、生命值、最大生命值,以及是否为存活实体、是否为玩家、是否在线和权限等级。
    • 通过实体获取实体信息(get_entity_info_byentity):直接以实体作为输入,输出其 UUID、名称、类型、注册名、坐标、生命值、最大生命值,以及是否为存活实体、是否为玩家、是否在线和权限等级。
    • 通过 UUID 获取实体(get_entity_by_uuid):通过 UUID 在世界中查找对应的实体并输出该实体对象(找不到时输出空)。
    • Self(获取当前挂载目标)(self):输出当前触发蓝图所挂载的实体(及其实体 UUID),常用于在蓝图内部引用自身。
    • 获取范围内实体(get_entities_in_range):以某坐标为中心、在指定半径范围内查找所有实体,可按类型(注册名)筛选,输出实体列表。
    • 获取实体朝向(get_entity_look_direction):获取指定实体当前朝向(视线方向)的单位向量并输出。
    • 类型转换(cast):将一个值转换为指定的目标类型(在节点上选择类型)并输出。
    • 浮点数转整数(to_int):把一个数值(浮点数)转换为整数并输出。
    • XYZ 分解(break_xyz):把一个 XYZ 坐标(向量)拆分成 x、y、z 三个数值并分别输出。
    • 创建 XYZ(make_xyz):把三个数值(x、y、z)组合成一个 XYZ 坐标(向量)并输出。
    • 分支(branch):根据条件是否成立,走「真」或「假」分支并继续对应方向的逻辑。
    • 多分支(switch):根据输入的控制值匹配对应分支并跳转执行;不匹配时走默认分支。
    • 有限循环(for_loop):从起始值到结束值循环执行循环体,每轮输出当前索引,可用「跳出循环」提前结束,全部完成后走「循环完成」分支。
    • 等待 (刻)(wait_tick):暂停执行指定的游戏刻数后再继续(基于游戏刻计时)。
    • 等待 (秒)(wait_s):暂停执行指定的秒数后再继续(按 1 秒 = 20 刻换算)。
    • 计时器开始(timer_start):开始计时(按计时器 ID),若已在计时则不影响;随后继续执行。
    • 计时器停止(timer_stop):停止计时(按计时器 ID)并累计已经过的时间;随后继续执行。
    • 计时器重置(timer_reset):清零并重置指定计时器(按计时器 ID);随后继续执行。
    • 计时器(timer_get):读取指定计时器(按计时器 ID)已累计的刻数、秒数与是否正在计时,并分别输出。
    • 跳出循环(break_loop):请求中断当前所在的循环,使其提前结束。
    • 调用本存档其他蓝图(call_blueprint):调用本存档中的另一个蓝图并传入参数列表,执行结束后输出结果列表并继续。
    • 返回列表到调用蓝图(return_to_caller):把结果列表返回给调用当前蓝图的蓝图(在被调用蓝图内使用,需与「当其他蓝图调用时」配合使用)。
    • 获取方块(get_block):获取指定坐标处的方块 ID(如 minecraft:stone)。
    • 设置方块(set_block):在指定坐标放置一个方块。
    • 破坏方块(break_block):破坏指定坐标处的方块(可选择是否掉落物品)。
    • 填充区域(fill_area):在两点构成的长方体区域内填充指定方块。
    • 打印到聊天栏(print_chat):向触发玩家发送一条聊天消息(无触发玩家时广播给全服玩家)。
    • 打印到控制台(print_log):将消息输出到控制台、日志文件与 /mgmc log 缓存。
    • 以玩家身份运行命令(run_command_as_player):以指定玩家(或触发玩家)的身份执行一条命令。
    • 以服务器身份运行命令(run_command_as_server):以服务器(控制台)身份执行一条命令。
    • 播放粒子效果(play_effect):在指定坐标播放一次粒子特效。
    • 爆炸(explosion):在指定坐标引发一次爆炸(力度由半径决定)。
    • 传送实体(teleport_entity):将实体传送到指定坐标。
    • 添加药水效果(add_potion_effect):为生物添加指定药水效果(含时长、等级与粒子显示)。
    • 杀死实体(kill_entity):立即杀死实体。
    • 伤害实体(damage_entity):对实体造成指定数值的伤害。
    • 治疗实体(heal_entity):为生物恢复指定数值的生命值。
    • 设置实体着火(set_entity_on_fire):让实体燃烧指定的秒数。
    • 施加推力(apply_impulse):给实体设置一个瞬时速度(推力)。
    • 清除所有药水效果(clear_potion_effects):清除实体身上的全部药水效果。
    • 显示客户端 Toast 提示(client_show_toast):在客户端屏幕上显示一个 Toast 提示(含标题与内容)。
    • 打开网页(client_open_url):在客户端默认浏览器中打开一个网页链接。
    • 蓝图被调用(on_blueprint_called):作为被调用蓝图的入口事件,接收调用者传递的参数。
    • 玩家离开(on_player_leave):当玩家离开游戏时触发。
    • 玩家移动(on_player_move):当玩家移动时触发,输出精确坐标和移动速度。
    • 左键点击方块(on_left_click_block):当玩家左键点击方块时触发。
    • 拾取物品(on_item_pickup):当玩家拾取物品时触发(仅NeoForge版本支持)。
    • 运行 /mgrun(on_mgrun):当执行 /mgrun 命令时触发,输出命令名、参数列表、触发实体、触发者名称与坐标。
    • 破坏方块(on_break_block):当玩家破坏方块时触发,输出方块坐标、方块 ID 与玩家实体。
    • 放置方块(on_place_block):当玩家放置方块时触发,输出方块坐标、方块 ID 与玩家实体。
    • 交互方块(on_interact_block):当玩家右键交互方块时触发,输出方块坐标、方块 ID 与玩家实体。
    • 玩家加入(on_player_join):当玩家加入游戏时触发,输出玩家实体与名称。
    • 玩家死亡(on_player_death):当玩家死亡时触发,输出死亡坐标、玩家实体与造成伤害的实体。
    • 玩家重生(on_player_respawn):当玩家重生时触发,输出重生坐标与玩家实体。
    • 玩家受伤害(on_player_hurt):当玩家受到伤害时触发,输出伤害数值、玩家实体与伤害来源实体。
    • 使用物品(on_use_item):当玩家使用物品时触发,输出物品 ID 与玩家实体。
    • 玩家攻击(on_player_attack):当玩家攻击其他实体时触发,输出被攻击的实体与玩家实体。
    • 生物死亡(on_entity_death):当任意实体死亡时触发,输出死亡坐标、实体与造成伤害的实体。
    • 生物受伤害(on_entity_hurt):当任意实体受到伤害时触发,输出伤害数值、实体与伤害来源实体。
    • 生物生成(on_entity_spawn):当任意实体生成(出生)时触发,输出生成坐标与实体。

0.7.0

  • 新增 timer 秒表节点,支持多种控制操作:
    • START (启动): 开始计时,重置累计时间为 0
    • PAUSE (暂停): 暂停计时,保存已用时间
    • RESUME (继续): 继续计时
    • STOP (停止): 停止计时
    • RESET (重置): 重置所有状态
  • 新增 /mgmc openui 服务器命令
  • 新增节点悬停提示
  • 修复屏幕空间 UI 元素被节点和区域遮挡的问题
  • 其他已知问题

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 构建