三明治站

三明治站

把任何食物变成自定义三明治,具有基于食材的饥饿值、饱和度和效果。

食物

JOIN_OUR_DISCORD

添加一个方块——三明治工作站——任何基底加上最多九种可食用物品都能变成三明治。饥饿值、饱和度和状态效果都取决于你实际放了什么。其背后的每一条规则都是数据包标签或配置项,因此整合包可以添加食材、禁用某种效果,或重新平衡整个系统,而无需重新构建 jar 包。

客户端和服务端都需要安装。 支持单人游戏。

依赖项: Fabric 和 NeoForge 需要 Architectury API。Forge 无需额外依赖。

可自由用于任何整合包——公开或私人都可以,无需授权。

功能

  • 三明治工作站——像工作台一样打开它。它不存储任何东西:剩余物品会在你关闭界面时返还,破坏方块也绝不会吞掉你的食物。
  • 基底 + 馅料——在左侧槽位放入一个基底(面包、纸、烤马铃薯、蜜脾、曲奇,或另一个三明治),并在网格中放入最多九种可食用物品。
  • 三个等级——份数按饥饿值划分:朴素三明治(≤3)、三明治(≤6)、上等三明治(>6)。馅料少则是一个三明治;馅料丰富则是好几个。
  • 三明治包——多份会以一个包的形式产出(右键打开为整组物品)。你也可以在工作台中用两个或更多任意等级的三明治合成一个包。
  • 堆叠——相同馅料的三明治可以堆叠在一起。包永远不能堆叠——每个包都保存着自己的列表。
  • 幽灵提示——空槽位会淡化显示来自数据包标签的示例物品,因此它们始终显示当前整合包实际接受的内容。超过配置食材上限的槽位会变灰。

合成

S K S      S = 平滑石台阶
P B P      K = 剪刀
           P = #minecraft:planks
           B = 木桶

当木桶进入你的物品栏后,会在配方书中解锁。

数值如何计算

饥饿值和饱和度是基底与每种食材的总和,再按配置乘数和损耗进行缩放。总量会被拆分为份数(绝不会出现一个超大号三明治)。效果会从食材中合并,然后经过过滤、缩放、拆分到各份,并受上限限制——不会有任何随机判定。多样性会对不同风味类别(数据包标签)进行计分,并可以增加饱和度 / 延长效果;品质标签:普通 → 混合 → 多样 → 美食。

配置

文件:config/sandwichstation.json(首次启动时创建,每个键上方都有 // 注释)。每当玩家打开工作站时都会重新读取——编辑后再次打开方块即可,无需重启。

主开关

  • stationEnabled(true)——主开关;false 会保留物品注册,但不进行任何组合
  • debugLogging(false)——记录每次组合

营养(nutrition.*)

  • humbleMaxNutrition(3)/ regularMaxNutrition(6)——等级阈值
  • maxServings(16)——一次食材最多产出的三明治数量
  • maxIngredientSlots(9)——可用网格槽位;其余槽位锁定
  • nutritionMultiplier / saturationMultiplier(1.0)——缩放总量
  • wasteFactor(0.0)——被丢弃的比例
  • maxNutritionPerServing(10)/ maxSaturationPerServing(12.0)——每份三明治的上限
  • paperBaseNutrition(0)——本身没有食物价值的基底的食物值
  • allowSandwichAsBase(true)/ allowNonFoodBases(true)

效果(effects.*)

  • enabled(true)· budgetScale(1.0)· maxEffects(3)· maxAmplifier(1)
  • minDurationTicks(20)· maxDurationTicks(6000)
  • divideDurationAcrossServings(true)
  • conflictPolicy(KEEP_STRONGER | DROP_BOTH | KEEP_BOTH)
  • blockedEffectIds([])——永不传递的效果

多样性(diversity.*)

  • enabled(true)· weightPerCategory(1)· weightPerUniqueIngredient(0)
  • saturationBonusPerPoint(0.25)· effectDurationBonusPercentPerPoint(5)

内容(content.*)

  • requireEdibleIngredients(true)
  • extraBaseIds / blockedBaseIds / extraBaseTags
  • extraIngredientIds / blockedIngredientIds / extraIngredientTags / blockedIngredientTags

集成(integration.*)

  • 提示框 / 自动命名 / 合成音效开关(showQualityTooltip、showIngredientTooltip、maxTooltipIngredients、autoNameResults、playCraftSound)

ID 会被规范化(Bread、minecraft:bread、minecraft:bread 都能匹配;缺少命名空间 → minecraft)。

面向整合包作者

层级 位置 重载方式 用途
数据包标签 data/sandwichstation/tags/... /reload 基底、食材、风味类别
配置 config/sandwichstation.json 下次打开工作站时 所有数值、开关、禁用列表
Java API 你的模组 — 只有在运行时才能知道其价值的食物

标签: bases、ingredients、blocked_ingredients,以及 categories/{meat,fish,vegetable,fruit,grain,sweet,fungus,exotic}。

路径——1.19.2 / 1.20.1 使用复数文件夹(tags/items、recipes、advancements、loot_tables);1.21.1+ 使用单数(tags/item、recipe、advancement、loot_table)。

要覆盖工作站配方,请使用相同路径 / ID sandwichstation:sandwich_station。如果你的配方不再使用木桶,也请覆盖解锁进度(它默认检测木桶)。

不重新构建 jar 就无法更改的内容: 固定的物品/方块 ID;组合是排序后食材列表的纯函数;工作站没有方块实体(无法在会话之间保存物品)。

细节

  • 真正的方块,带服务端合成——并非仅客户端。
  • JEI / REI / EMI 会将工作站配方显示为普通的有序合成。组合机制通过物品提示框进行说明(1.0.0 中不是配方查看器类别)。
  • MIT 许可证。

反馈

请在 Discord 上报告任何 bug、错误或功能建议: https://discord.gg/HTkn94BXmA

Nikrecs 的更多模组: Fields · CropGrowthHUD

我推荐的其他模组。