随机食谱

随机食谱

基于种子的合成配方随机化 — 每个世界,都是一个新谜题。

游戏机制

随机合成

确定性合成配方面纱器(Fabric 版)——每个世界,新的谜题。

进入一个世界后,所有工作台合成配方会使用世界种子作为随机源进行洗牌。相同种子 = 永远相同的配方。 不同种子 = 完全不同的配方。非常适合 SMP(多人生存服)——同一世界的所有玩家看到的洗牌后配方完全相同。

功能特性

  • 种子确定性洗牌 — 使用 Java 的 Random 实现可复现性,一个世界种子控制所有随机化
  • 三层配方转换:
    1. 对原料位置进行 Fisher-Yates 洗牌(仅限非空槽位)
    2. 每个配方进行 1 到 2 次原料添加、移除(仅限无序配方)或替换操作
    3. 洗牌后自动检测重复配方并解决冲突
  • 全局物品池 — 单材料配方(剪刀、铁粒、压力板等)从所有出现在合成配方中的物品中抽取候选物品,避免“铁换铁”的无变化情况
  • 三种受保护默认物品 — 木镐、石镐和铁镐始终保持不变,确保游戏可玩性
  • 配置文件扩展 — 通过 config/random-recipes.json 可按物品 ID 或特定配方 ID 保护额外物品
  • 跨模组兼容 — 自动处理其他模组注册的合成配方
  • 支持 /reload — 编辑配置文件后运行 /reload;更改立即生效,无需重启

工作原理

步骤 具体操作
1. 扫描 服务器启动时收集所有类型为 RecipeType.CRAFTING 的配方
2. 过滤 跳过受保护物品(三种镐子 + 配置项)
3. 构建池 将出现在任何合成配方中的所有物品收集到全局池中
4. 洗牌 每个未受保护的配方先对其原料进行洗牌,然后修改 1-2 次
5. 去重 检查最终列表中的(输出 + 原料组)对是否重复;自动解决冲突

安装方法

  1. 安装 Fabric Loader ≥ 0.15
  2. 安装 Fabric API
  3. 将 jar 文件放入 .minecraft/mods/ 目录
  4. 启动 Minecraft 1.20.1

配置说明

首次运行时自动在 config/random-recipes.json 生成:

{
  "protected_output_items": [
    "minecraft:wooden_pickaxe",
    "minecraft:stone_pickaxe",
    "minecraft:iron_pickaxe"
  ],
  "protected_recipe_ids": []
}
字段 用途 示例
protected_output_items 保护所有产出特定物品的配方 "minecraft:diamond_sword"
protected_recipe_ids 通过命名空间 ID 保护特定配方 "mymod:special_item"

从源码构建

git clone https://github.com/Annieif/random-recipes.git
cd random-recipes
./gradlew build

构建产物位于 build/libs/random-recipes-*.jar。

截图

洗牌后的铁斧配方 受保护铁镐(未更改) 洗牌后的橡木台阶配方

相关链接

许可证

MIT