
Craftmark:数据驱动的纹理变体
为作者提供的强大实用工具,允许无需编程即可为物品和方块创建无数纹理变体!
查看大图
Craftmark 允许整合包作者根据方块的合成方式为其赋予不同的外观——用黄铜制造的机器外观是黄铜的,用钢铁制造的机器外观是钢铁的,正常制造的机器外观则很正常。按物品实例,而非按方块类型:两个木桶可以并排放置,却穿着不同的外观。
为什么整合包需要这个
你已经整合了跨模组的配方——用机械动力的黄铜制造存储控制器,用热力基本金属制造熔炉。配方讲述了故事,但方块本身没有。资源包做不到这点:它会给每一个方块重新贴图,无论它是怎么获得的。Craftmark 让外观跟随单个合成物品:
- 🎒 在物品栏中 —— 包括快捷栏、鼠标指针和配方书
- ✋ 握在手中 —— 第一人称和第三人称视角
- 🧱 放置在世界上 —— 即时生效,无需重新登录
- ⛏️ 挖掘后重新拾取 —— 外观永久保留
- 🖼️ 掉落物、物品展示框,甚至破坏粒子都会匹配
像引擎一样构建
- 作者无需编写代码。 一个变体 = 一行配方脚本(KubeJS) + 资源包中镜像原始材质路径的 PNG 文件。无需映射文件,无需方块注册。
- 适用于所有方块实体方块 —— 木桶、箱子、熔炉,以及几乎所有模组机器,全自动生效。
- 无 Mixin。完全基于官方 NeoForge 钩子构建——包括 Sodium 系列渲染器所遵循的模型数据路径。从 1.2.0 开始,如果你同时运行机械动力模组,则存在用于动力学渲染的 mixin。如果你没有安装机械动力,1.2.0 不会 mixin 任何内容。26.x 版本则完全不包含任何 mixin。
- 附带一个可用的示例(
craftmark:brass木桶)——一个配方脚本,你可以在两分钟内看到效果。 - 变体物品不会与其普通版本堆叠,以及诊断日志会告诉你包里有多少材质被匹配了。
前置要求:NeoForge,客户端和服务器都需要安装——1.21.1 或 26.1.2–26.2。数据可以通过 KubeJS 或 CraftTweaker 等配方编辑器应用,作为任务奖励发放,或直接通过命令给予。
📦 我需要哪个文件?
craftmark-1.5.0.jar—— 适用于 Minecraft 1.21.1。包含完整功能集,包括机械动力和机械动力航空拓展支持。craftmark-1.5.0+26.x.jar—— 适用于 Minecraft 26.1.2 和 26.2(一个文件同时支持两者)。+26.x的含义正如其字面意思:相同的 1.5.0 版本,为新版本重新构建——没有需要学习的新功能。1.5.0 的所有功能都包含在内,除了机械动力和机械动力航空拓展支持,这些支持将在那些模组更新后恢复。
将现有的 1.21.1 世界迁移到 26.x?你的方块没问题,但已存储在已放置方块上的外观会被重置——重新放置它们,或重新运行应用它们的命令或配方。
可选依赖:
- 机械动力(1.2.0)—— 目前仅限 1.21.1
- Jade(1.4.0)
- JEI 物品管理器(1.4.0)
- Sable & 机械动力航空拓展(1.5.0)—— 目前仅限 1.21.1
可选依赖会添加新功能,但本模组在没有它们的情况下也能完美运行。
权限:
- 你可以将此模组添加到你的整合包中,无需获得许可。
- 你可以制作附加模组,无需获得许可,只要它们将 Craftmark 列为依赖项即可。
- 你绝对不可以将此模组的文件上传到其他网站。
📚 作者文档
变体如何工作
在首次启动时,Craftmark 会在你的 Minecraft 实例目录中创建一个 craftmark_variants/ 文件夹(与 mods/、config/、saves/ 同级),并生成一个可直接编辑的 brass 示例:
craftmark_variants/
└── brass/ ← 一个文件夹 = 一个变体(id: craftmark:brass)
└── assets/minecraft/textures/block/
├── barrel_side.png
├── barrel_top.png
├── barrel_bottom.png
└── barrel_top_open.png
在变体文件夹内,你需要使用与原始材质完全相同的资源包布局。brass/assets/minecraft/textures/block/barrel_side.png 会替换原版精灵图 minecraft:block/barrel_side。规则很简单:将你的 PNG 放在其原始路径下,位于你的变体文件夹内。
快速上手(2分钟——无需 KubeJS,无需制作材质)
brass 文件夹已经存在了。开启作弊模式后,运行:
/give @p minecraft:barrel[craftmark:variant="craftmark:brass"]
放置它——黄铜木桶。它在你的手中、物品栏、地面和物品展示框中都是黄铜外观;破坏它,掉落的物品会保留其外观,并且不会与普通木桶堆叠。编辑 craftmark_variants/brass/ 中的 PNG 文件,然后按 F3+T 即可实时查看更改。
制作你自己的变体
- 在
craftmark_variants/中创建一个文件夹——使用小写字母、数字、_ . -:ruby、steel、diamond…… 其 id 将变为craftmark:<文件夹名>。 - 放入材质,镜像每个原始文件在
assets/下的路径:
(覆盖craftmark_variants/ruby/assets/refinedstorage/textures/block/controller.pngrefinedstorage:block/controller) - 按 F3+T 重新扫描——新文件夹无需重启即可被识别。
- 使用该 id 标记物品:
/give @p refinedstorage:controller[craftmark:variant="craftmark:ruby"]
- 只覆盖你想要的部分——跳过某个面,它就会正常渲染。路径错误则会静默保留原始材质(绝不会出现品红色)。
- 查找原始路径:解压源模组的 jar,在
assets/<ns>/textures/下查找;在你的文件夹内镜像该完整路径。 - 方块形状的物品会自动复用方块材质,平面物品精灵图也以相同方式镜像(
assets/<ns>/textures/item/…)。
当面无法被覆盖时:逐方块覆盖 (1.1.0 新增)
大多数方块使用上述文件夹结构就能完美覆盖——镜像材质路径即可。但少数方块的一个面使用共享的通用材质。一个典型的例子:机器的底部使用 somemod:block/bottom 而非 somemod:block/<那台机器>/bottom。如果你镜像了你预期的路径,什么都不会发生——文件被拼接了,但没有一个面实际使用它,所以那个面仍然是原版外观。
对于这些顽固的面,有一个可选的捷径——只有当一个面拒绝被覆盖时才使用它。无需寻找材质路径,你可以直接指定方块和面:
craftmark_variants/<variant>/by_block/<block-namespace>/<block-path>/<face>.png
例如,要在 brass 变体下覆盖精致存储的存储监视器那顽固的底部:
craftmark_variants/brass/by_block/refinedstorage/storage_monitor/bottom.png
<face> 可以是以下之一:
top.png—— 朝上的面bottom.png—— 朝下的面front.png—— 方块朝向的面(例如熔炉的正面)back.png—— 正面的对面left.png/right.png—— 当你正视正面时的左侧/右侧面side.png—— 所有四个水平面同时应用
四个水平面是相对于方块正面的,因此外观会跟随方块旋转——front.png 始终落在正面。特定的面(例如 front.png)优先于 side.png。
值得了解的是:
- 仅作用于指定的那个方块。它绝不会影响到共享该材质的其他方块——甚至可以让共享一个材质的两个面拥有不同的外观。
- 无需寻找路径。你指定的是面,而不是底层的精灵图,因此共享/通用材质不再是猜谜游戏。
top/bottom对所有方块都有效。front/back/left/right需要方块具有水平朝向——原版方块和通过facing或自定义direction属性旋转的模组(例如精致存储)都适用;对于没有朝向(或放置时朝上/朝下)的方块,请使用side.png。- 它不覆盖非立方体面(内凹面、特殊形状)——那些仍然使用上面的普通文件夹结构。
- F3+T 可以实时重新加载它,与普通文件夹完全相同。
将其整合到配方中(KubeJS)
命令用于测试;在真正的整合包中,你需要标记合成的输出物品,这样玩家才能获得外观。在 kubejs/server_scripts/ 中:
ServerEvents.recipes(event => {
event.shapeless(
Item.of('refinedstorage:controller', '[craftmark:variant="craftmark:ruby"]'),
['refinedstorage:controller', 'mymod:ruby']
).id('mypack:ruby_controller');
});
调试你的变体
每次资源(重新)加载时,都会为每个找到的变体文件夹记录一行:
craftmark: variant craftmark:brass: 4 texture(s) stitched
计数低于预期 = 某个路径未匹配。F3+T 会重新运行扫描并重新读取新文件夹。
未来计划
内容更新已在 1.5.0 结束。Craftmark 现在也支持 26.1.2 和 26.2,接下来将进入维护阶段:错误修复、小的兼容性调整,以及在那些模组更新后将机械动力/机械动力航空拓展支持带回 26.x。
如果你发现错误或对模组有建议,请在 CurseForge 评论或 Discord 服务器中告诉我。对于错误报告,请确保你使用的是最新版本的模组,并给我提供可复现错误的步骤。
正在加载版本记录…



正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。