TsAssembly

TsAssembly

动态连接的纹理!

性能

TsAssembly — 动态规则方块与连接纹理引擎

TsAssembly 是一个为 NeoForge 设计的轻量级、高性能、客户端动态连接纹理(CTM)与规则方块引擎。它专为实时四边形操作而构建,使用 3x3 复合叠加、47 方块完整连接以及方向性边缘求解器,无缝融合相邻方块、玻璃板与复杂表面,且运行时零垃圾回收开销。


主要特性

  • 零分配四边形重映射: 在区块网格构建期间,利用预计算的 \(O(1)\) 查找表(LUT)和原始顶点变换,消除微卡顿。

  • 3 种灵活连接模式:

  • COMPOSITE(3x3 网格): 动态分层,具有无缝透明角落和边缘叠加。

  • FULL(6x6 网格 / 47 方块 CTM): 完整的经典连接纹理映射,带有内/外角检测。

  • PANE_EDGE: 专用玻璃板连接求解器,移除内部接缝,同时保留外部边框。

  • 智能 3D 几何检测: 精确计算相邻遮挡、对角台阶、楼梯偏移以及反转的四边形绕序。

  • 内置模板导出器: 直接从游戏内方块生成包含切片纹理的完整资源包模板。


游戏内命令

直接在游戏中生成可编辑的资源包和纹理模板:

/tsassembly export <block>
/tsassembly export <block> [composite|full]
/tsassembly export <block> [composite|full] <pack_name>

  • 导出的模板直接保存到 .minecraft/resourcepacks/<pack_name>/。

自定义资源包指南

为 TsAssembly 创建连接纹理包无需任何 Java 代码——只需标准 PNG 纹理和 JSON 规则文件。

1. 文件夹结构

在你的 .minecraft/resourcepacks/ 目录下创建一个资源包文件夹(例如 MyConnectedPack):

MyConnectedPack/
├── pack.mcmeta
├── pack.png                               (可选:64x64 图标)
└── assets/
    └── <namespace>/                       (例如 "tsassembly" 或你的自定义 ID)
        ├── rule_tiles/                    (JSON 规则定义)
        │   ├── glass.json
        │   └── oak_log_sides.json
        └── textures/
            └── block/                     (连接纹理图集)
                ├── glass_composite.png
                └── oak_log_sides_full.png


2. pack.mcmeta

{
  "pack": {
    "pack_format": 34,
    "description": "Custom Connected Textures for TsAssembly"
  }
}


3. 规则方块 JSON 规范

将你的规则定义放在 assets/<namespace>/rule_tiles/<name>.json 中。

示例:glass.json(3x3 COMPOSITE 模式)

{
  "type": "COMPOSITE",
  "faces": ["all"],
  "texture": "tsassembly:block/glass_composite",
  "original_texture": "tsassembly:block/glass_original",
  "target_blocks": [
    "minecraft:glass",
    "minecraft:tinted_glass"
  ]
}

示例:oak_log.json(方向特定 FULL 模式)

{
  "type": "FULL",
  "faces": ["sides"],
  "texture": "tsassembly:block/oak_log_sides_full",
  "match_sprite": "minecraft:block/oak_log",
  "target_blocks": [
    "minecraft:oak_log"
  ]
}


配置属性参考

属性 类型 默认值 描述
type 字符串 "AUTO" "COMPOSITE"(3x3 叠加)、"FULL"(6x6 47 方块)或 "PANE_EDGE"(玻璃板边缘移除)。
faces 数组 ["all"] 目标面:"all"、"sides"、"top"、"bottom"、"north"、"south"、"east"、"west"。
texture 字符串 "" 网格图集纹理的路径(<namespace>:block/<texture_name>)。
original_texture 字符串 "" 当方块被隔离或叠加层空白时使用的回退纹理。
match_sprite 字符串 "" 目标四边形上要匹配的确切精灵位置(防止跨面误用)。
target_blocks 数组 [] 可相互连接的方块注册 ID 列表。

纹理尺寸与图集布局

  • COMPOSITE(3x3 图集):

  • 宽高比必须为 1:1(例如 48x48、96x96、192x192)。

  • 纹理分辨率必须能被 3 整除。

  • 中心方块 (1, 1) 始终渲染;边界方块 (列, 行) 按需叠加。

  • FULL(6x6 图集 / 47 方块):

  • 宽高比必须为 1:1(例如 96x96、192x192、384x384)。

  • 纹理分辨率必须能被 6 整除。

  • 将所有 47 种标准 CTM 边缘、角落和交叉口状态映射到单一的统一四边形替换中。