接缝与针脚

接缝与针脚

本模组为《我的世界》增加了缝纫功能!以一种交互式的方式实现。

缝线与针脚

概述

本模组为《我的世界》增添了互动缝纫玩法。它引入了一个裁缝台,玩家可以通过一个迷你游戏,沿着缝线路径进行缝制来制作物品。在时间窗口内击中更多针脚,就能制作出品质更高的物品。掌握一个缝纫图案后,会解锁快速制作功能,让你在重复制作时跳过迷你游戏。每种配方所需的掌握次数(完成迷你游戏的次数)均可独立配置。

使用裁缝台需要针和剪刀。两者均可合成。


品质等级

每次完成制作后,会根据击中针脚的比例和时机的精确度进行评级:

等级 说明文字 行为
劣质 "由 粗制滥造" 最低通过门槛 — 以最低加成值产出物品
良好 (无) 基础结果 — 不添加说明文字
专家 "由 精心制作" 命中率达到专家阈值
大师 "由 完美打造" 所有针脚均在完美窗口内命中

如果击中的针脚数低于 poor 阈值,制作将完全失败,不会产出任何物品。

品质等级可以授予在 quality_bonuses 中定义的、按属性区分的加成。每个等级的属性值会被显式设置,替换该物品默认的原版属性值。


使用说明

1. 文件夹结构

要添加自定义缝纫配方,请将它们放置在你的整合包或数据包的以下路径中:

modpack_name/
└── data/
    └── seamsandstitches/
        └── recipe/

2. JSON 配方结构

每个自定义配方必须是独立的 JSON 文件,文件名可以任意。

顶层字段:

键 描述
type 必须为 "seamsandstitches:sewing_pattern"
texture 用作缝纫画布的物品纹理路径(例如 "minecraft:textures/item/leather_helmet.png")
output 包含 id("mod_id:item_name")和 count 的对象
ingredients 原料对象列表({ "item": "mod_id:item_name" }),无序且不依赖顺序
seams 缝线定义列表(见下方)
requires_pattern (可选) 玩家必须先解锁此配方 ID,该配方才会出现在裁缝台中
quality_breakpoints (可选) 针对配方的品质阈值(见下方)。若未定义,则回退到全局配置 poorThreshold 值
quality_bonuses (可选) 按品质等级应用的属性加成列表(见下方)
deferred_ingredients (可选) 基于 0 的原料索引列表,这些原料在制作开始时不会被消耗。这些物品在迷你游戏期间会保留在裁缝台中,仅在成功完成时被消耗。如果制作被取消,它们会被返还。
transfer_contents (可选,默认为 false) 当为 true 时,第一个延迟原料(deferred ingredient)的库存内容会被复制到组装的输出物品上,同时保留输出物品自身的组件配置(例如配方输出中设置的 toolbelt:belt_size 值)。暴露了 IItemHandler 的物品会逐个槽位复制;使用 minecraft:container 或 minecraft:bundle_contents 的物品只会转移这些组件。即使没有此标志,当这两个组件类型非空时也会被自动检测;当源容器可能为空时,或者对于仅限 IItemHandler 的模组容器,请显式设置此标志。
crafts_to_master (可选,默认为 1) 在为此配方解锁“快速制作”之前,需要成功完成的迷你游戏次数。当进度低于阈值时,预览面板会显示 X/N,其中 X 是当前计数。
display_name (可选) 覆盖图案选择器下拉菜单和选择按钮中显示的名称。接受纯字符串或完整的 Minecraft 文本组件(例如 { "translate": "my.key" })。如果省略,则回退到输出物品的悬停名称。

缝线字段:

键 描述
id 此缝线段的唯一名称(例如 "collar"、"left_sleeve")
path 像素坐标 [x, y] 数组(对于 16x16 纹理为 0–15),用于描绘缝线路径
speed 浮点数 — 每秒钟在路径索引单位上的移动速度(例如 2.0)

品质阈值字段(quality_breakpoints):

键 默认值 描述
poor 0.25 产出任何物品所需的最小命中比例。低于此值则制作失败
well 0.5 达到良好品质所需的最小命中比例
expert 0.75 达到专家品质所需的最小命中比例
master 1.0 必须完美命中(在目标的绿色环内)的针脚比例,才能达到大师品质

品质加成字段(quality_bonuses 是这些字段的列表):

键 描述
attribute 要修改的属性(例如 "minecraft:generic.armor")
slot (可选) 装备槽组:"head"、"chest"、"legs"、"feet"、"main_hand"、"off_hand"、"armor"、"any"
poor 劣质品质时应用的属性值
well 良好品质时应用的属性值
expert 专家品质时应用的属性值
master 大师品质时应用的属性值

品质加成会替换该物品该属性的原版默认值,而不是累加。

支持的属性:

通用

属性 ResourceLocation
护甲值 minecraft:generic.armor
护甲韧性 minecraft:generic.armor_toughness
攻击伤害 minecraft:generic.attack_damage
攻击击退 minecraft:generic.attack_knockback
攻击速度 minecraft:generic.attack_speed
燃烧时间 minecraft:generic.burning_time
爆炸击退抗性 minecraft:generic.explosion_knockback_resistance
摔落伤害倍率 minecraft:generic.fall_damage_multiplier
飞行速度 minecraft:generic.flying_speed
追踪范围 minecraft:generic.follow_range
重力 minecraft:generic.gravity
跳跃强度 minecraft:generic.jump_strength
击退抗性 minecraft:generic.knockback_resistance
幸运值 minecraft:generic.luck
最大吸收值 minecraft:generic.max_absorption
最大生命值 minecraft:generic.max_health
移动效率 minecraft:generic.movement_efficiency
移动速度 minecraft:generic.movement_speed
氧气加成 minecraft:generic.oxygen_bonus
安全摔落距离 minecraft:generic.safe_fall_distance
体型 minecraft:generic.scale
步长 minecraft:generic.step_height
水中移动效率 minecraft:generic.water_movement_efficiency

玩家

属性 ResourceLocation
方块破坏速度 minecraft:player.block_break_speed
方块交互范围 minecraft:player.block_interaction_range
实体交互范围 minecraft:player.entity_interaction_range
挖掘效率 minecraft:player.mining_efficiency
潜行速度 minecraft:player.sneaking_speed
浸没时挖掘速度 minecraft:player.submerged_mining_speed
横扫伤害比例 minecraft:player.sweeping_damage_ratio

3. 示例配方

{
  "type": "seamsandstitches:sewing_pattern",
  "texture": "minecraft:textures/item/leather_helmet.png",
  "output": {
    "id": "minecraft:leather_helmet",
    "count": 1
  },
  "ingredients": [
    { "item": "minecraft:leather" },
    { "item": "minecraft:leather" },
    { "item": "minecraft:leather" },
    { "item": "minecraft:leather" },
    { "item": "minecraft:leather" }
  ],
  "seams": [
    {
      "id": "crown",
      "path": [[4,11],[3,10],[3,9],[3,8],[3,7],[3,6],[3,5],[4,4],[5,3],[6,3],[7,3],[8,3],[9,3],[10,3],[11,4],[12,5],[12,6],[12,7],[12,8],[12,9],[12,10],[11,11]],
      "speed": 2
    },
    {
      "id": "left_strap",
      "path": [[6,4],[6,5],[6,6],[7,7],[6,7],[5,8],[5,9],[5,10],[5,11]],
      "speed": 2
    }
  ],
  "quality_breakpoints": {
    "poor": 0.25,
    "well": 0.5,
    "expert": 0.75,
    "master": 1.0
  },
  "quality_bonuses": [
    {
      "attribute": "minecraft:generic.armor",
      "slot": "head",
      "poor": 0,
      "well": 1,
      "expert": 2,
      "master": 3
    }
  ]
}

4. 升级配方(容器内容转移)

当升级一个容器物品(例如钱包或潜影盒)时,使用 deferred_ingredients 将源物品保留在裁缝台中直到制作完成,并使用 transfer_contents 将其存储的内容转移到新物品上。

延迟原料的索引指向它在 ingredients 数组中的位置(基于 0)。在下面的示例中,索引 0 是铜钱包。

{
  "type": "seamsandstitches:sewing_pattern",
  "texture": "lightmanscurrency:textures/item/wallet/wallet_copper.png",
  "output": {
    "id": "lightmanscurrency:wallet_iron",
    "count": 1
  },
  "ingredients": [
    { "item": "lightmanscurrency:wallet_copper" },
    { "item": "minecraft:iron_ingot" },
    { "item": "minecraft:iron_ingot" }
  ],
  "deferred_ingredients": [0],
  "transfer_contents": true,
  "seams": [
    {
      "id": "stitching",
      "path": [[4,4],[5,4],[6,4],[7,4],[8,4],[9,4],[10,4],[11,4],[11,5],[11,6],[11,7],[11,8],[10,9],[9,9],[8,9],[7,9],[6,9],[5,9],[4,9],[4,8],[4,7],[4,6],[4,5]],
      "speed": 2.0
    }
  ]
}

工作原理:

  • 当迷你游戏开始时,铜钱包(索引 0)会留在裁缝台中。如果玩家取消制作,钱包会被返还。
  • 成功完成后,钱包中存储的物品会被复制到铁钱包输出中——仅转移库存;输出物品保留其自身的组件配置。
  • 其余原料(铁锭)在制作开始时会像往常一样立即被消耗。

5. 自定义原料类型

seamsandstitches:item_variation

只有当物品上存在(或不存在)特定的数据标记时,才匹配基础原料。适用于区分共享同一个物品 ID 但内部状态不同的物品——例如,不同槽位容量但都是 toolbelt:belt 的工具腰带。

字段:

键 描述
base 基础原料 — { "item": "..." } 或 { "tag": "..." } — 物品必须首先满足此条件
component_key 要检查的标记。使用纯标签名称(例如 "my_tag")来检查物品的 minecraft:custom_data 复合标签,或使用带命名空间的资源位置(例如 "toolbelt:belt_size")来查找已注册的数据组件类型
component_value (可选) 预期值,以纯字符串形式表示。整型和字符串组件值都会序列化为其自然的字符串形式("4"、"small" 等)。如果省略,则原料匹配那些该组件或标签完全不存在的物品

缺失匹配 — 省略 component_value 允许你定位到“默认”状态的物品(该物品只有在升级后才会获得某个组件):

{
  "type": "seamsandstitches:item_variation",
  "base": { "item": "toolbelt:belt" },
  "component_key": "toolbelt:belt_size"
}

匹配任何没有 belt_size 组件的 toolbelt:belt(即基础、未升级的腰带)。

值匹配 — 指定 component_value 以要求特定值:

{
  "type": "seamsandstitches:item_variation",
  "base": { "item": "toolbelt:belt" },
  "component_key": "toolbelt:belt_size",
  "component_value": "3"
}

仅匹配 belt_size 组件序列化为 "3" 的腰带。belt_size: 4 或完全没有该组件的腰带将被拒绝。

与 deferred_ingredients 和 transfer_contents 结合使用,可以构建完整的升级链:

{
  "type": "seamsandstitches:sewing_pattern",
  "transfer_contents": true,
  "deferred_ingredients": [0],
  "display_name": "铁工具腰带(4 槽位)",
  "output": {
    "id": "toolbelt:belt",
    "count": 1,
    "components": { "toolbelt:belt_size": 4 }
  },
  "ingredients": [
    {
      "type": "seamsandstitches:item_variation",
      "base": { "item": "toolbelt:belt" },
      "component_key": "toolbelt:belt_size",
      "component_value": "3"
    },
    { "item": "toolbelt:pouch" },
    { "item": "materialistic:red_string" },
    { "item": "materialistic:red_string" },
    { "item": "materialistic:iron_emblem" },
    { "tag": "c:ingots/iron" }
  ],
  "seams": [ "..." ]
}

输出物品的 belt_size: 4 组件会被目标内容转移保留——只有工具清单会从 3 槽位腰带继承过来。


配置

配置文件:config/seamsandstitches-common.toml


默认配方

输出 原料 品质加成
书 3x 纸,1x 皮革 —
画 1x 白色羊毛,8x 木棍 —
皮革头盔 5x 皮革 护甲值(头部):劣质 0 / 良好 1 / 专家 2 / 大师 3
皮革胸甲 8x 皮革 护甲值(胸部):劣质 0 / 良好 1 / 专家 2 / 大师 3
皮革护腿 7x 皮革 护甲值(腿部):劣质 0 / 良好 1 / 专家 2 / 大师 3
皮革靴子 3x 皮革,1x 线 护甲值(脚部):劣质 0 / 良好 1 / 专家 2 / 大师 3
皮革马铠 12x 皮革 —

配方覆写

当启用时,指定的物品将无法再在工作台上制作,而必须在裁缝台处制作。

选项 默认值 描述
enableRecipeOverrides true 全局启用或禁用所有裁缝台配方覆写
override_<recipe_id> true 针对单个配方的开关(仅在全局启用覆写时有效)

可覆写的配方 ID:

  • 护甲:leather_helmet、leather_chestplate、leather_leggings、leather_boots、leather_horse_armor
  • 物品:book、painting

染料盆覆写

默认情况下,染料盆是给物品染色的唯一途径。配置提供了按类别控制以下两方面的能力:原版工作台配方是否被禁用,以及染料盆配方本身是否启用。

主开关

选项 默认值 描述
disableShapelessDyeRecipes true 当为 true(默认)时,原版无序染料配方被禁用,染料盆是给物品重新染色的主要方式。设置为 false 以恢复所有原版染料配方,忽略按类别的设置

[dye_basin_overrides.vanilla] — 重新启用单个原版无序染料配方

仅在 disableShapelessDyeRecipes 为 true 时有效。将一个条目设置为 true 以恢复该特定原版配方,同时保持其他所有配方禁用。

选项 默认值 当为 true 时恢复的原版配方
enable_shapeless_armor_dyeing false 皮革盔甲染色(特殊合成)
enable_shapeless_wool_dyeing false {color}_wool 无序染料配方
enable_shapeless_bed_dyeing false {color}_bed 无序染料配方
enable_shapeless_carpet_dyeing false {color}_carpet 无序染料配方
enable_shapeless_terracotta_dyeing false {color}_terracotta 无序染料配方
enable_shapeless_candle_dyeing false {color}_candle 无序染料配方
enable_shapeless_stained_glass_dyeing false {color}_stained_glass 工作台配方
enable_shapeless_shulker_box_dyeing false 潜影盒染色(特殊合成)
enable_shapeless_concrete_powder_dyeing false {color}_concrete_powder 无序染料配方

[dye_basin_overrides.basin] — 启用/禁用单个染料盆配方

设置为 false 以完全移除某个染料盆配方(如果另一个模组处理该物品系列,则此选项很有用)。

选项 默认值
enable_dyeable true
enable_wool true
enable_carpet true
enable_terracotta true
enable_banner true
enable_candle true
enable_bed true
enable_stained_glass true
enable_stained_glass_pane true
enable_shulker_box true
enable_glazed_terracotta true
enable_concrete_powder true
enable_concrete true
enable_sophisticated_backpacks true

所有选项都需要重启游戏或执行 /reload 才能生效。


皮革鞣制

选项 默认值 描述
animalsDropHides true 当为 true(默认值)时,掉落皮革的动物(牛、哞菇、马、驴、骡、羊驼、疣猪兽)会掉落生皮而不是原版皮革,需要使用鞣革架将其转化回来。设置为 false 以恢复原版皮革掉落

通用选项

选项 默认值 描述
poorThreshold 0.25 全局最小命中比例(0.0–1.0),低于此值不产出物品。单个配方可以通过 quality_breakpoints.poor 覆写此值
vanillafyUI false 当为 true 时,裁缝台 UI 使用经典的原版灰色风格,而不是深色 UI

调试选项

选项 默认值 描述
debugOverlay false 启用后,将鼠标悬停在缝纫画布上会显示 [x, y] 像素坐标;点击会将其记录到一个不断增长的数组中;R 键清空数组;C 键将其复制到剪贴板。在设计自定义配方的缝线路径时很有用

染料盆

染料盆是一个用于给物品染色的方块。用任意木板摆成 U 形,中间放一个桶来合成(W_W / WBW / WWW)。

使用方法:

  1. 用水桶填满染料盆。
  2. 右键点击一个染料物品来加载一种颜色——水会变成相应的颜色。
  3. 右键点击一个物品,该物品需要有该颜色的已注册 dye_bath 配方。物品会放在搓衣板的凸脊上。
  4. 空手右键点击三次,将物品浸入染料中。
  5. 第三次浸入后,染色的结果物品会从正面弹出,染料会清除。水会保留下来,供下一个物品使用。

按住 Shift + 空手右键点击 可以取回放置的物品而不染色。

染浴配方结构

将配方 JSON 文件放在与缝纫图案相同的 data/seamsandstitches/recipe/ 文件夹中。

顶层字段:

键 描述
type 必须为 "seamsandstitches:dye_bath"
ingredient 原料对象({ "item": "..." } 或 { "tag": "..." }),匹配要染色的物品
dye (可选) 小写染料颜色名称(例如 "red"、"light_blue")。如果省略,该配方匹配任何染料,并在制作时使用当前活跃的染料
result_pattern (可选) 物品 ID 模板,其中 {color} 会被替换为当前活跃染料的名称(例如 "minecraft:{color}_wool" → "minecraft:red_wool")。当输出物品遵循标准的颜色命名惯例时使用此字段。如果解析出的物品不存在,则会记录警告且不产生输出
result (可选) 静态输出物品({ "id": "...", "count": 1 })。输入物品的数据组件始终会被转移到输出上。当使用 result_pattern 或输出就是重新上色的输入物品时省略此字段
dye_component_selectors (可选) DataComponentType<Integer> ID 列表,用于写入染料的 ARGB 值。适用于将颜色存储在自己整型组件中而非原版 minecraft:dyed_color 的模组物品(例如 "sophisticatedcore:main_color")。请使用 neoforge:mod_loaded 条件来限定这些配方的加载
display_rotation (可选) [x, y, z] 预旋转角度(度),在盆的渲染器将手持物品倾斜到搓衣板上之前应用。完整立方体方块物品(羊毛、混凝土、玻璃块等)会被自动检测,并应用一个使其平放在斜坡上的旋转。仅在需要覆写此自动检测值时指定——例如地毯使用 [-90, 0, 0],因为它是薄方块,不是完整方块
display_translation (可选) 在搓衣板斜坡对齐坐标系中的 [x, y, z] 偏移量,以方块为单位。完整立方体方块会自动获得一个微小的提升,使其坐落在斜坡表面。对于非标准模型,指定此值以微调定位
display_scale (可选) 应用于搓衣板上渲染物品的缩放。接受一个裸浮点数用于统一缩放(0.8),或一个 [x, y, z] 数组用于按轴缩放([1, 1, 0.5])。完整立方体方块会自动应用 Z 轴压缩,以防止它们从染料盆背面突出。指定此值以覆写

颜色输出规则 — 以下条件之一决定了应用何种颜色:

条件 输出物品 应用的颜色
result_pattern 存在 从模板解析出的新物品 无(颜色编码在物品 ID 中)
result 存在 输入的变形副本(保留所有数据组件) 无(输出是静态的)
两者皆无,dye_component_selectors 非空 输入的副本 作为 ARGB 整数写入列出的每个组件
两者皆无,dye_component_selectors 为空 输入的副本 自动写入原版 minecraft:dyed_color 组件

默认染料盆物品

以下物品开箱即支持。除非另有说明,每个系列都接受所有 16 种染料颜色。对已染色的物品应用新染料会重新染色。

物品系列 原料标签 备注
羊毛 minecraft:wool
地毯 minecraft:wool_carpets
陶瓦 c:terracotta 包括普通(未着色)陶瓦
玻璃 / 染色玻璃 c:glass_blocks 包括普通 minecraft:glass;对其染色会产出染色玻璃
玻璃板 / 染色玻璃板 c:glass_panes 包括普通 minecraft:glass_pane;对其染色会产出染色玻璃板
带釉陶瓦 c:glazed_terracotta
蜡烛 minecraft:candles 包括普通(未着色)蜡烛
床 minecraft:beds
旗帜 minecraft:banners 已应用的旗帜图案在重新染色时会被保留
潜影盒 c:shulker_boxes 包括未染色的潜影盒;库存内容会被保留
混凝土粉末 c:concrete_powder
混凝土 c:concrete
皮革盔甲和狼铠 minecraft:dyeable 使用 minecraft:dyed_color 组件;任何添加到此标签的物品都会自动兼容

任何添加了 minecraft:dyeable 标签的模组物品都会自动与可染色配方兼容。

自定义染色配方

颜色模式染色 — 一个配方即可覆盖羊毛的所有 16 种染料。{color} 在制作时会被替换为当前活跃染料的名称:

{
  "type": "seamsandstitches:dye_bath",
  "ingredient": { "tag": "minecraft:wool" },
  "result_pattern": "minecraft:{color}_wool"
}

原版染色物品 — 一个配方即可覆盖皮革盔甲的所有 16 种染料。省略 result 和 result_pattern 会复制输入物品并自动写入 minecraft:dyed_color:

{
  "type": "seamsandstitches:dye_bath",
  "ingredient": { "tag": "minecraft:dyeable" },
  "display_scale": 0.8
}

模组容器染色 — 对于将颜色存储在自己整型数据组件中而非原版 minecraft:dyed_color 的物品,使用 dye_component_selectors 来命名这些组件。输入物品会被复制,所有数据组件都被保留,然后列出的每个组件都会被写入染料的 ARGB 值:

{
  "neoforge:conditions": [{ "type": "neoforge:mod_loaded", "modid": "examplemod" }],
  "type": "seamsandstitches:dye_bath",
  "ingredient": { "tag": "c:example_dyeable_items" },
  "dye_component_selectors": ["examplemod:primary_color"],
  "display_scale": 0.8
}

跨模组颜色转换 — 当一个模组的有色物品系列没有白色变种时,使用一个指定 dye: "white" 的配方配合静态的 result 来重定向到原版等效物品。再配合一个针对其他 15 种颜色的通用 result_pattern 配方:

{
  "type": "seamsandstitches:dye_bath",
  "ingredient": { "tag": "examplemod:colored_items" },
  "dye": "white",
  "result": { "id": "minecraft:string", "count": 1 }
}

鞣革架

皮革不再直接从动物身上掉落——牛、哞菇、马、驴、骡、羊驼和疣猪兽现在会掉落特定物种的生皮物品。生皮只能通过鞣革架鞣制成皮革。

构建和使用鞣革架

鞣革架是一个 2×2×2 的方块,由 6 个木棍和 3 个木板制成。

槽位:

槽位 用途
4 个生皮槽位 每个槽位可容纳一张生皮(任意物种),在框架上伸展并显示。每个槽位的进度独立计时
1 个碱液槽位 容纳 seamsandstitches:lye,每张生皮消耗一个

鞣制过程:

  1. 插入最多 4 张生皮,每个槽位一张。
  2. 插入碱液。一张生皮开始鞣制时,会消耗一份碱液。
    • 碱液由 2 个沙子 + 2 个骨粉以对角线方式合成(2×2 网格)。
  3. 每个槽位独立完成,并将其中的生皮转化为皮革。