更新日志
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(启动): 开始计时,重置累计时间为 0PAUSE(暂停): 暂停计时,保存已用时间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,降低日志噪声
- 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),确保所有玩家同步。 - 版本校验系统: 引入蓝图版本号机制,防止多人同时编辑同一蓝图时发生竞态冲突导致数据损坏。