耐心

耐心

为你的工作站增加制作时间,将瞬间完成的物品转变为一个需要投入时间的过程。

游戏机制

NeoForge Forge Fabric Quilt Modrinth CurseForge GitHub Discord

为你的工作台添加制作时间——点击输出槽位会启动一个计时进程,而不是立即完成制作。进度以视觉覆盖层显示,并伴有音效和反馈。完全由服务端权威控制:配置在玩家加入时同步到所有客户端,并支持重载。

⚙️ 特性

制作延迟 — 基础时间随材料数量缩放,并受到一系列乘数修正(全局、按容器、按材料、按产物、按配方)。移动时会阻止制作。创造模式完全绕过延迟。

经验缩放 — 制作速度通过自定义的 patience:crafting_speed 属性随经验等级提升。该属性暴露给其他模组以便集成。

进度衰减 — 启用时,制作过程中移动会导致进度流失,而不是直接取消。被打断的制作所剩余的进度也会随时间衰减。当衰减被禁用时,任何移动都会立即取消制作并重置进度。

小游戏 — 一个可选的技能检定,可在制作中途触发。进度覆盖层的随机一段被指定为成功区域。当进度到达该区域时,覆盖层变为黄色——此时点击输出槽位可立即完成制作。未命中则会施加时间惩罚。在没有小游戏区域激活时提前点击输出槽位也会施加惩罚。绿色表示成功,红色表示失败。

饥饿 — 每次完成制作都会增加疲劳。当饥饿值低于阈值时,制作速度会受到惩罚。

音效 — 每个工作台都有独特的循环制作音效和完成音效。音效可在三个层级上覆盖:按容器、按物品或按标签。

屏幕震动 — 制作过程中可选的镜头震动。默认禁用。

🔨 支持的容器

内置对 17 个工作台的预配置支持。所有工作台均可通过配置禁用、自定义或扩展。

容器
原版 玩家背包(2×2)、工作台、锻造台、铁砧、砂轮、切石机、制图台、织布机
模组 Curios、Inventorio、Sawmill、Woodworks、Easel Does It、Galosphere、Clayworks、Cold Sweat、Hexerei

🛠️ 配置

配置存储在游戏配置目录下的 patience.json 中。安装 Cloth Config 后可使用 GUI 界面(Fabric/Quilt 通过 Mod Menu,NeoForge/Forge 通过模组界面)。GUI 涵盖通用设置——乘数映射和容器定义仅支持 JSON。

通用
设置 默认值 描述
debug false 将槽位点击、界面名称、制作状态变更和移动检测记录到控制台
enable_sounds true 播放制作和完成音效
default_crafting_sound patience:crafting 制作过程中播放的音效
default_finish_sound patience:finish 完成时播放的音效
default_penalty_sound patience:penalty 惩罚点击时播放的音效
default_success_sound patience:success 小游戏成功时播放的音效
global_time_multiplier 1.0 应用于所有制作时间的乘数(0.0 - 100.0)
经验

速度公式:(attributeValue × baseSpeed) + (speedPerLevel × min(xpLevel, maxLevelCap))

设置 默认值 描述
enabled true 启用基于经验等级的制作速度缩放
multiplier 1.0 整体制作速度乘数(0.0 - 100.0)
base_speed 1.0 经验加成前的基础速度(0.01 - 100.0)
speed_per_level 0.02 每经验等级的额外速度(0.0 - 10.0)
max_level_cap 200 超过此等级的部分被忽略(0 - 30000)
衰减
设置 默认值 描述
enabled true 移动时流失进度,而不是取消制作
rate 2.0 移动或闲置时每 tick 损失的进度(0.0 - 100.0)
屏幕震动
设置 默认值 描述
enabled false 制作过程中的镜头震动
intensity 0.5 震动强度(0.0 - 5.0)
饥饿
设置 默认值 描述
enabled true 启用饥饿疲劳和速度惩罚
exhaustion_cost 0.1 每次完成制作增加的疲劳值(0.0 - 40.0)
penalty.enabled true 低饥饿时减慢制作速度
penalty.threshold 6 触发惩罚的饥饿值(0 - 20)
penalty.multiplier 0.5 低于阈值时的速度乘数(0.0 - 10.0)
小游戏
设置 默认值 描述
enabled true 启用技能检定小游戏
chance 0.5 每次制作触发的概率(0.0 - 1.0)
window_width 0.15 成功区域大小占总进度的比例(0.01 - 0.5)
penalty_percent 0.25 失败时损失的进度占剩余进度的比例(0.0 - 1.0)
penalty_cancels_craft true 当惩罚点击将进度减至零时取消制作
乘数

乘数映射允许对制作时间进行精细控制。所有映射在 JSON 中均为 Map<String, Float>。标签键使用 # 前缀(例如 "#minecraft:planks": 1.5)。

  • by_mod — 按模组命名空间缩放时间(例如 "minecraft": 1.0)
  • by_item — 按物品 ID 缩放时间(例如 "minecraft:stick": 0.5)
  • by_tag — 按物品标签缩放时间(例如 "#minecraft:planks": 1.5)
  • by_type — 按配方类型缩放时间(例如 "minecraft:crafting": 2.0)
  • by_recipe — 按特定配方 ID 缩放时间

这些在 JSON 中分组于 ingredient_multipliers、output_multipliers 和 recipe_multipliers 对象下。材料和产物乘数支持 by_mod、by_item、by_tag。配方乘数支持 by_type、by_recipe。

物品音效

item_sounds 是一个 Map<String, String>,用于按物品或标签覆盖制作音效(例如 "minecraft:stick": "patience:crafting"、"#minecraft:planks": "patience:sawmill")。

容器

containers 数组保存每个工作台的配置。每个条目支持:

字段 类型 描述
enabled boolean 切换此容器的制作时间
screen_class string 容器界面的完整 Java 类路径(例如 net.minecraft.client.gui.screens.inventory.CraftingScreen)
recipe_type string 用于配方乘数查找的配方类型 ID(例如 minecraft:crafting)。若省略,则从菜单类型推断
time_multiplier float 容器特定的时间乘数
output_slot int 玩家点击以开始制作的槽位索引(输出预览出现的位置)
result_slot int 完成后成品放置的槽位索引(-1 = 第一个可用的背包槽位)
ingredient_slots string 定义扫描材料的槽位范围——例如 "1-9"、"0,2,4"、"0-2,4,6-8"
ingredient_mode string 材料如何影响制作时间:"slot" 每个被占用的槽位计一次,"stack" 乘以堆叠数量,"custom" 使用硬编码的模组特定兼容逻辑
show_overlay boolean 渲染进度条
overlay_texture string 覆盖层的纹理路径
overlay_direction string 填充方向:"right"、"left"、"up"、"down"
overlay_x / overlay_y int 覆盖层位置偏移
overlay_width / overlay_height int 覆盖层尺寸
crafting_sound string 覆盖此容器的制作音效
finish_sound string 覆盖此容器的完成音效

💬 命令

命令 权限 描述
/patience reload Op(等级 2) 从磁盘重新加载配置并同步到所有已连接的玩家