机械动力:蓝图补丁

机械动力:蓝图补丁

修复了机械动力模组中原理图物品的一个错误。

优化

本模组已停止维护,不再提供更新或支持。请访问 https://modrinth.com/mod/createschematicchecker 寻找类似模组。

概述

本模组修复了 Minecraft 1.21+ 中 Create 模组的一个严重的设计图(Schematic)物品漏洞。请注意:在服务器上首次使用本模组时(模组版本≥1.1),请执行命令 /schematic-config reload 来初始化模组配置。

原始问题

Create 模组的设计图可以存储带有非法组件的方块/物品,使玩家能够获得生存模式下无法获取的物品。

修复特性

  • 异常检测:实时扫描上传的设计图
  • 数据净化:自动移除非法组件/黑名单方块
  • 警报记录:当玩家上传异常设计图时输出服务器警告
  • 自动归档:备份异常设计图至:/schematics/anomaly/playername/schematic.nbt

适用于模组版本<1.1.3

  • 可配置:通过 schematicsfix-common.toml 进行黑名单管理
  • 高级配置功能:你可以使用 JSON 在 schematicsfix.jsonl 中定义设计图 NBT 检测逻辑。但请注意,此功能仍处于实验阶段。除非你了解自己在做什么,否则不要修改默认的高级配置。

适用于模组版本≥1.1.3

  • 可配置:通过 schematicsfix.yaml 自由定义 NBT 过滤规则

管理员优势

  1. 实时漏洞拦截
  2. 自动证据保留
  3. 可自定义的过滤规则
  4. 合法上传零人工审核

配置文件格式(模组版本≥1.1.3)

配置文件位置:config/schematicsfix.yaml

基本结构:

version: "1.0"
rules:
  - name: "rule_name"
    target_path: "target_path"
    conditions:
      - condition_list
    cleanup_actions:
      - cleanup_action_list

规则字段:

  • name:规则的唯一标识符,用于日志记录和命令显示
  • target_path:在 NBT 数据中搜索的目标路径,支持通配符
  • conditions:条件列表,必须全部满足才能触发清理
  • cleanup_actions:条件满足时执行的清理操作列表

路径语法:

  • 普通路径:使用点分隔,例如 "blocks.nbt.id"
  • 通配符:使用 [* ] 匹配所有数组元素 示例:"blocks[* ].nbt" 匹配所有 blocks 数组中的 nbt 字段 示例:"messages[* ]" 匹配 messages 数组中的所有元素
  • 特定索引:使用 [数字] 匹配特定数组索引 示例:"messages[0]" 匹配 messages 数组中的第一个元素

条件类型:

   field_equals - 字段值等于
   type: "field_equals"
   path: "field_path"
   value: expected_value
   field_not_equals - 字段值不等于
   type: "field_not_equals" 
   path: "field_path"
   value: expected_value
   field_exists - 字段存在
   type: "field_exists"
   path: "field_path"
   string_contains - 字符串包含
   type: "string_contains"
   path: "field_path"
   value: "string_to_find"

清理操作类型:

   conditional_remove - 条件移除
   type: "conditional_remove"
   target_path: "target_field_path"
   condition: removal_condition (可选)
   remove_strategy: "field_only"(仅移除字段值)
   path_remove - 路径移除
   type: "path_remove"
   target_path: "target_path"
   remove_strategy: "entire_object"(移除整个对象)
   nested_string_remove - 嵌套字符串清理
   type: "nested_string_remove"
   target_path: "target_path"
   condition: trigger_condition (可选)
   remove_pattern: "regex_pattern"
   remove_strategy: "regex_replace"

完整示例:

示例 1:清理阀门手柄的特定字段 规则名称:valve_handle_capacity_cleanup 目标路径:blocks[* ].nbt 条件:id 字段等于 "create:valve_handle" 操作1:如果 Network.Capacity 不等于 256.0,移除该字段 操作2:如果 Speed 不等于 32.0,移除该字段

示例 2:清理剪贴板的容器数据 规则名称:clipboard_container_cleanup 目标路径:blocks[* ].nbt 条件:id 字段等于 "create:clipboard" 操作:移除 Item.components.minecraft:container 路径

示例 3:清理告示牌的点击事件 规则名称:sign_clickevent_cleanup 目标路径:blocks[* ].nbt 条件:id 字段等于 "minecraft:sign" 操作:在 front_text.messages[*] 中搜索包含 "clickEvent" 的字符串, 使用正则表达式移除 clickEvent 对象

配置示例代码:

version: "1.0"
rules:
  - name: "valve_handle_capacity_cleanup"
    target_path: "blocks[*].nbt"
    conditions:
      - type: "field_equals"
        path: "id"
        value: "create:valve_handle"
    cleanup_actions:
      - type: "conditional_remove"
        target_path: "Network.Capacity"
        condition:
          type: "field_not_equals"
          path: "Network.Capacity"
          value: 256.0
        remove_strategy: "field_only"
      - type: "conditional_remove"
        target_path: "Speed"
        condition:
          type: "field_not_equals"
          path: "Speed"
          value: 32.0
        remove_strategy: "field_only"

  - name: "clipboard_container_cleanup"
    target_path: "blocks[*].nbt"
    conditions:
      - type: "field_equals"
        path: "id"
        value: "create:clipboard"
    cleanup_actions:
      - type: "path_remove"
        target_path: "Item.components.minecraft:container"
        remove_strategy: "entire_object"

  - name: "sign_clickevent_cleanup"
    target_path: "blocks[*].nbt"
    conditions:
      - type: "field_equals"
        path: "id"
        value: "minecraft:sign"
    cleanup_actions:
      - type: "nested_string_remove"
        target_path: "front_text.messages[*]"
        condition:
          type: "string_contains"
          value: "clickEvent"
        remove_pattern: "\"clickEvent\":\\s*\\{[^}]*\\}"
        remove_strategy: "regex_replace"

重要注意事项:

  1. 修改配置后使用 /schematic-config reload 重新加载配置
  2. 使用 /schematic-config rules 查看已加载的规则
  3. 使用 /schematic-config status 检查模组状态
  4. 所有操作仅支持移除,不具备替换功能
  5. 正则表达式使用 Java 标准语法
  6. 确保 YAML 文件使用正确的缩进(使用空格,而非制表符)