锁制工艺

锁制工艺

一个模组的子游戏类型,锁定已制作过一次的每个合成配方。

CraftLock

一次合成,唯一机会。

一个 Fabric 模组,将每次合成视为一次性的机会。一旦你合成了某个物品,就再也无法再次合成它——贯穿这个世界的整个生命周期。

Minecraft Fabric Java License


概述

CraftLock 是一个为内容创作者和喜欢自我挑战的玩家打造的硬核挑战模组。其核心理念简单而残酷:

游戏中的每一个合成配方只能被合成一次。之后,它就永远消失了。

当你第一次合成橡木木板、木棍、熔炉、钻石镐、末影之眼时——该配方即被锁定。下一次你在合成台放入相同材料时,结果栏将保持空白。模组会播放拒绝音效,在动作栏显示消息 "已合成过橡木木板",然后你的挑战继续,但你的装备库中永久少了一个工具。

它涵盖了工作台、2x2 物品栏合成、熔炉、高炉、烟熏炉、营火、锻造台、切石机和酿造台。默认情况下,两个配方被豁免——烈焰粉和末影之眼——因为没有它们,你无法通关游戏。


特性

锁定机制

  • 全面覆盖 — 工作台、物品栏 2x2、熔炉系列、锻造、切石、酿造
  • 配方级别粒度 — 从原木合成的橡木木板与从去皮原木合成的橡木木板分开锁定
  • 重启后持续 — 锁定列表保存在世界存档中,跨游戏会话持久有效
  • 豁免列表 — 你选择的配方保持无限使用(默认:blaze_powder、ender_eye)

直播优化体验

  • 黄色聊天广播 每次首次合成时显示:Chompii 合成了:铁锭
  • 铃铛提示音 当新配方被锁定时向所有玩家播放
  • 动作栏警告 + 村民拒绝音效 当尝试被阻止的合成时显示
  • 工具提示标签 — 已锁定的物品显示红色斜体 已锁定 行,并附有来源信息:by Chompii · 第7天
  • 配方书覆盖 — 配方书中已锁定的配方以红色高亮显示
  • 动画标题 通过 /craftlock start 播放(浅蓝色斜体 CraftLock 带副标题,以及平静的紫水晶音效)

工具

  • 为管理员/主播提供完整的命令套件(见下文)
  • config/craftlock.json 的 JSON 配置文件,用于调整音效、豁免列表和品牌文字
  • 通过 assets/craftlock/lang/en_us.json 支持翻译
  • 在 craftlock 命名空间下的 SLF4J 日志记录器

安装

要求

组件 版本
Minecraft 1.21.11
Fabric Loader >= 0.19.2
Fabric API 0.141.4+1.21.11
Java 21

步骤

  1. 为 Minecraft 1.21.11 安装 Fabric Loader。
  2. 将 Fabric API 放入你的 mods/ 文件夹。
  3. 将最新的 craftlock-1.0.jar(从 [发布](#)页面获取)一并放入。
  4. 启动游戏。载入世界后模组即会运行——但锁定功能不会开始,直到你执行 /craftlock start。

命令

所有命令需要权限等级 gamemaster(在标准原版中为等级 2——单人游戏主机自动拥有)。

命令 描述
/craftlock start 开始执行锁定。向所有玩家显示 CraftLock 标题。
/craftlock stop 暂停执行锁定,不清除锁定列表。使用 start 恢复。
/craftlock status 打印运行状态、锁定配方数量和豁免配方数量。
/craftlock list 按 ID 列出所有锁定的配方。
/craftlock reset 清除整个锁定列表。不影响 started 标志。
/craftlock lock <recipe> 手动锁定一个配方(用于设置挑战)。
/craftlock unlock <recipe> 手动解锁单个配方。

示例

> /craftlock start
[CraftLock started.]
[标题: CraftLock]
[副标题: Created by Chompii]

> /craftlock list
Locked recipes (3):
  - minecraft:oak_planks
  - minecraft:stick
  - minecraft:crafting_table

> /craftlock unlock minecraft:stick
Unlocked minecraft:stick

配置

首次启动时,模组会使用以下默认值写入 config/craftlock.json。编辑文件后重启世界以应用更改。

{
  "titleText": "CraftLock",
  "subtitleText": "Created by Chompii",
  "exemptRecipes": [
    "minecraft:blaze_powder",
    "minecraft:ender_eye"
  ],
  "craftPingVolume": 0.6,
  "craftPingPitch": 1.5,
  "startSoundVolume": 1.0,
  "startSoundPitch": 1.0,
  "blockedSoundVolume": 1.0,
  "blockedSoundPitch": 1.0
}
字段 类型 说明
titleText string /craftlock start 触发时显示的文字。
subtitleText string 与标题配对的副标题。
exemptRecipes string[] 可以无限次合成的配方 ID。
craftPingVolume / craftPingPitch float 每次首次合成时播放的铃铛音效。
startSoundVolume / startSoundPitch float /craftlock start 时播放的紫水晶叮当声。
blockedSoundVolume / blockedSoundPitch float 合成被阻止时播放的村民“不”音效。

工作原理

CraftLock 基于每个世界的 SavedData 实例构建,该实例存储:

  • 一组锁定的配方 ID
  • 一个元数据映射:{recipe_id -> {crafter, world_day}}
  • 一个 started 标志

Mixin 附加到相应的原版菜单和方块实体:

类 钩子 目的
CraftingMenu slotChangedCraftingGrid (TAIL) 如果匹配的配方已锁定,则清除结果槽 + 发送 ClientboundContainerSetSlotPacket。还会缓存配方,以便 ResultSlot.onTake 在 vanilla 的 shift 点击消耗后仍能看到它。
ResultSlot onTake (HEAD) 记录锁定 + 广播。
AbstractFurnaceBlockEntity canBurn (HEAD) + setRecipeUsed (HEAD) 如果已锁定则阻止熔炼;完成时记录。
CampfireBlockEntity getCookableRecipe (RETURN) + placeFood (RETURN) 如果已锁定则阻止放置;放置时记录。
SmithingMenu createResult (TAIL) + onTake (HEAD) 如果已锁定则清除结果;取出时记录。
StonecutterMenu setupResultSlot (TAIL) + onTake (HEAD) 相同模式。
PotionBrewing mix (RETURN) 如果输出会是一个锁定的药水变种,则返回未混合的输入;成功酿造时锁定。
RecipeButton renderWidget (TAIL) — 仅客户端 在配方书内的锁定配方上绘制红色叠加层。

每当锁定列表发生变化时,状态会通过 craftlock:lock_list 自定义数据包同步到所有连接的客户端,以便工具提示和配方书覆盖实时更新。


给挑战者

典型的运行流程:

  1. 创建一个新世界。 锁定列表按存档持久保存,所以不要重复使用旧存档。
  2. 运行 /craftlock start 开始执行锁定。在此之前,模组仅处于观察模式。
  3. 规划你的路线。 末影之眼和烈焰粉被豁免,因此可以到达末地。其他所有内容——每一种配方——在首次合成时锁定。
  4. 在拍摄间隙使用 /craftlock reset 如果需要重做某个片段。
  5. 使用 /craftlock list 审计你已消耗的配方。

给剪辑师的提示: 黄色聊天广播(Chompii 合成了:...)设计为在压缩的 YouTube 画面中可读,并与铃铛提示音配合,适合“里程碑时刻”剪辑。


从源码构建

git clone <repository-url>
cd CraftLock
./gradlew build

编译好的 jar 包位于 build/libs/。

开发时可以使用:

./gradlew runClient   # 启动一个加载了模组的开发客户端
./gradlew runServer   # 启动一个专用开发服务器
./gradlew genSources  # 反编译 Minecraft 以便 IDE 导航

鸣谢

由 Chompii 制作。

基于 Fabric 模组工具链构建。由 SpongePowered Mixin 和 MixinExtras 提供支持。


许可

根据 CraftLock 许可发布——请参阅 LICENSE 获取完整文本。

简而言之:

  • 你可以使用、修改、分发、复刻、重新打包和嵌入此模组。
  • 你必须在任何对该模组的使用中显著标注 Chompii(如视频描述、整合包鸣谢、衍生模组自述文件等)。
  • 你不得声称自己是 CraftLock 的原作者。
  • 软件按“原样”提供,不附带任何担保。

如果你发布视频,合理使用的鸣谢方式如下:

“包含由 Chompii 制作的 CraftLock — github.com/Chompii/CraftLock”