
接缝与针脚
本模组为《我的世界》增加了缝纫功能!以一种交互式的方式实现。
缝线与针脚
概述
本模组为《我的世界》增添了互动缝纫玩法。它引入了一个裁缝台,玩家可以通过一个迷你游戏,沿着缝线路径进行缝制来制作物品。在时间窗口内击中更多针脚,就能制作出品质更高的物品。掌握一个缝纫图案后,会解锁快速制作功能,让你在重复制作时跳过迷你游戏。每种配方所需的掌握次数(完成迷你游戏的次数)均可独立配置。
使用裁缝台需要针和剪刀。两者均可合成。
品质等级
每次完成制作后,会根据击中针脚的比例和时机的精确度进行评级:
| 等级 | 说明文字 | 行为 |
|---|---|---|
| 劣质 | "由 粗制滥造" | 最低通过门槛 — 以最低加成值产出物品 |
| 良好 | (无) | 基础结果 — 不添加说明文字 |
| 专家 | "由 精心制作" | 命中率达到专家阈值 |
| 大师 | "由 完美打造" | 所有针脚均在完美窗口内命中 |
如果击中的针脚数低于 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)。
使用方法:
- 用水桶填满染料盆。
- 右键点击一个染料物品来加载一种颜色——水会变成相应的颜色。
- 右键点击一个物品,该物品需要有该颜色的已注册
dye_bath配方。物品会放在搓衣板的凸脊上。 - 空手右键点击三次,将物品浸入染料中。
- 第三次浸入后,染色的结果物品会从正面弹出,染料会清除。水会保留下来,供下一个物品使用。
按住 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,每张生皮消耗一个 |
鞣制过程:
- 插入最多 4 张生皮,每个槽位一张。
- 插入碱液。一张生皮开始鞣制时,会消耗一份碱液。
- 碱液由 2 个沙子 + 2 个骨粉以对角线方式合成(2×2 网格)。
- 每个槽位独立完成,并将其中的生皮转化为皮革。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。