
其他舞台
完整的基于阶段的进度系统,可在满足特定条件之前阻止Minecraft内容,并配有自动配置工具和高级优化功能。
查看大图OtherStages
OtherStages 是一个为 Minecraft Forge 1.20.1 设计的、可配置的、基于阶段(Stage)的进度系统。
它允许你将游戏内容锁定在自定义阶段之后,并通过可配置的进度规则来解锁这些阶段。相同的阶段元数据还驱动着游戏内解锁界面、物品提示和多个警告系统。
模组支持的功能
- 阻止特定物品、物品命名空间、物品标签和 NBT 敏感的物品变体。
- 对物品的使用、放置、攻击、挖掘、玩家合成产物、锻造/铁砧操作、切石机、熔炉类手动配方输入、战利品掉落和可直接使用的装备槽位应用物品限制。
- 阻止生物、结构、维度和村民交易等级。
- 使用每个阶段的
display_name、description、icon和color显示阶段解锁覆盖界面。 - 在被阻止的物品上显示提示信息。
- 警告玩家远离限制维度,并可选择将其传送离开。
- 实时检测被阻止的结构,并阻止在其内部进行交互、破坏、放置和攻击。
- 在安装了 JEI 或 REI 模组时,隐藏被阻止的物品。
- 通过进度、物品计数、经验值、维度、击杀计数、合成计数、FTB Quests 以及嵌套的
AND/OR逻辑解锁阶段。 - 使用
otherstages:stage_analyzer物品从存储方块生成 JSON 片段。
重要行为
- 阶段文件夹名称是内部的阶段 ID。它可以是任何内容,例如
machine_age、arcane_tier或chapter_03。 - 每个阶段都需要
stage_info.json文件。其他 JSON 文件是可选的。 - 阶段的
order(顺序)很重要。如果玩家拥有order值较高的阶段,则该玩家也满足order值较低的阶段的限制条件。 - 如果你想要一个清晰的线性进度,请保持
order值唯一且递增。 - 首次启动时会自动创建示例阶段文件夹。它们只是示例;你可以重命名或删除它们。
文件夹结构
首次启动时,模组会在以下路径创建配置文件:
config/
otherstages-server.toml
otherstages/
stages/
<stage_name>/
stage_info.json
blocked_items.json
blocked_mobs.json
blocked_structures.json
blocked_dimensions.json
blocked_villager_trades.json
progression.json
generated/
config/otherstages/generated/ 目录由阶段分析器(Stage Analyzer)物品使用。
stage_info.json
此文件定义了阶段的标识以及向玩家展示的元数据。
支持的字段
| 字段 | 必需 | 类型 | 说明 |
|---|---|---|---|
display_name |
否 | string | 在命令、消息和解锁界面中显示。如果未提供,则会回退为文件夹名称的格式化版本。 |
description |
否 | string | 可选的副标题/描述,由解锁界面和阶段信息输出使用。 |
color |
否 | string | #RRGGBB 格式的十六进制颜色码。用于为解锁界面着色。 |
icon |
否 | string | 物品 ID,例如 minecraft:diamond_pickaxe。在解锁界面中使用。 |
order |
否 | integer | 控制进度层级。较高的 order 值表示更高级的阶段。 |
支持翻译的字符串
如果 display_name 或 description 以 otherstages. 开头,则它将被视为翻译键。否则,它将作为纯文本显示。
示例
{
"display_name": "机器时代",
"description": "基础自动化现已可用。",
"color": "#4FC3F7",
"icon": "minecraft:observer",
"order": 3
}
可选的每阶段文件
blocked_items.json
用于阻止特定的物品 ID、物品命名空间、NBT 变体、标签、基于菜单的访问规则,以及与同一阶段关联的交互驱动的方块目标。
支持的键:
blocked_itemsblocked_namespacesblocked_tagstagList(作为blocked_tags的旧版别名)blocked_recipesblocked_menu_classesblocked_menu_packagesblocked_menu_typesblocked_block_idsblocked_block_classesblocked_block_entity_classesblocked_block_entity_packages
每个 blocked_items 条目支持:
item- 可选的
nbt - 可选的
exact_match
示例:
{
"blocked_items": [
{ "item": "minecraft:diamond_pickaxe" },
{
"item": "minecraft:potion",
"nbt": { "Potion": "minecraft:strong_healing" },
"exact_match": false
}
],
"blocked_namespaces": [
"create"
],
"blocked_tags": [
"forge:tools/netherite"
],
"blocked_recipes": [
"minecraft:iron_pickaxe",
"minecraft:netherite_upgrade_smithing"
],
"blocked_menu_packages": [
"appeng",
"com.refinedmods.refinedstorage"
],
"blocked_menu_types": [
"minecraft:anvil",
"minecraft:smithing"
],
"blocked_block_ids": [
"create:mechanical_crafter"
],
"blocked_block_entity_packages": [
"com.simibubi.create.content.kinetics.crafter"
]
}
命名空间匹配是精确的。create 会阻止 create:*,但不会阻止 createaddition:*。
blocked_recipes 匹配配方 ID,目前对玩家合成网格、工作台、锻造台菜单、切石机以及向熔炉类菜单手动添加配方材料实施限制。
blocked_menu_classes 匹配精确的菜单类名。blocked_menu_packages 匹配任何完全限定名称以配置的前缀开头的菜单类。blocked_menu_types 在存在已注册的 MenuType ID 时进行匹配。
blocked_block_ids 匹配放置的方块本身的 ID,例如 create:mechanical_crafter。blocked_block_classes 匹配运行时方块类。blocked_block_entity_classes 和 blocked_block_entity_packages 用于那些暴露了方块实体但不显示普通菜单的、由交互驱动的机器。
被阻止的物品规则在游戏中的生效效果:
- 阻止直接使用该物品。
- 阻止放置被阻止的方块以及使用被阻止的工具或武器。
- 清除玩家合成网格和工作台中被阻止的合成产物。
- 阻止在玩家合成网格、工作台、锻造台菜单、切石机以及向熔炉类菜单手动添加配方材料时使用配置的配方 ID。
- 阻止手动将受限制的物品放入非玩家菜单槽位,包括许多模组的合成台和终端。
- 当没有所需阶段的玩家打开某些配置好的被阻止的菜单时,自动关闭该菜单。
- 拒绝与配置好的、由交互驱动的方块进行交互,例如
create:mechanical_crafter,即使它们不打开普通菜单。 - 阻止在锻造或铁砧操作中使用被阻止的输入。
- 阻止在被阻止的输出被移动到可直接使用的玩家槽位之前,将其从结果类的菜单槽位中取出。
- 通过将被阻止的物品移动到主物品栏,或在主物品栏满时将其丢弃,将其从快捷栏、副手、护甲和受支持的 Curios 槽位中移除。
- 阻止被阻止的物品在停留在玩家主物品栏时,执行常规的物品栏 Tick 更新。
- 在为该玩家生成的战利品中过滤掉被阻止的物品。
OtherStages 保持基于玩家的机制。来自其他模组的自动化仍然可以产生被阻止的物品,但被阻止的玩家无法将其保留在可直接使用的槽位中,无法手动使用它们,也无法手动将受限制的配方材料放入许多由菜单驱动的机器界面。
blocked_mobs.json
阻止列出实体的自然生成以及附近的生成尝试。
{
"blocked_mobs": [
"minecraft:enderman",
"minecraft:warden"
]
}
blocked_structures.json
阻止进入以及在列出的结构内部进行交互。
{
"blocked_structures": [
"minecraft:stronghold",
"minecraft:ancient_city"
]
}
Minecraft 1.20.1 为许多村庄变体使用不同的 ID,因此请包含你需要阻止的每个变体。
blocked_dimensions.json
阻止传送到列出的维度。
{
"blocked_dimensions": [
"minecraft:the_nether",
"minecraft:the_end"
]
}
如果在 otherstages-server.toml 中启用了 teleportOnInvalidDimension,那么在登录时发现玩家处于受限制维度内,可能会将其传送回安全位置。
如果玩家的重生点设置在受限制的维度内,重生目标将被重置为主世界。
blocked_villager_trades.json
根据职业和等级阻止村民交易。
每个条目支持的字段:
profession(职业)level(等级)min_level(最小等级)max_level(最大等级)
profession 接受:
- 一个职业 ID,例如
minecraft:librarian *any- 空值 / null
示例:
{
"blocked_villager_trades": [
{
"profession": "*",
"min_level": 2,
"max_level": 5
},
{
"profession": "minecraft:cleric",
"level": 1
}
]
}
如果村民同时拥有允许和阻止的交易,则交易界面将仅显示可访问的选项。如果没有任何可访问的交易,玩家将收到一条警告信息。
progression.json
定义玩家如何解锁该阶段。
支持的条件类型:
advancement(进度)item_count(物品计数)experience(经验值)dimension(维度)kill_count(击杀计数)craft_count(合成计数)ftb_quest(FTB Quests)and(与)or(或)
示例:
{
"unlock_conditions": {
"type": "AND",
"conditions": [
{ "type": "advancement", "advancement": "minecraft:story/enter_the_nether" },
{ "type": "item_count", "item": "minecraft:blaze_rod", "count": 8, "consume": true },
{ "type": "dimension", "dimension": "minecraft:the_nether" }
]
},
"next_stage": "end_access"
}
next_stage 是可选的。它对于记录你自己的阶段链可能很有用,但实际的解锁逻辑是由 unlock_conditions 驱动的。
进度检查如何运行
此模组会在发生有用事件时自动重新评估进度,这些事件包括:
- 玩家登录
- 带冷却时间的玩家 Tick
- 进度完成
- 交互
- 击杀
- 合成
- 拾取物品
- 维度变更
你也可以使用以下命令强制重新检查:
/otherstages check <player>
命令
所有命令都在 /otherstages 下,并且需要权限等级 2。
阶段检查
/otherstages stage list
/otherstages stage <stage_name> info
/otherstages player <target> info
阶段管理
/otherstages player <target> add <stage>
/otherstages player <target> remove <stage>
/otherstages player <target> clear
/otherstages player <target> reset
reset 命令现在使用 config/otherstages-server.toml 中的 defaultStartingStage 值。
进度更新与重载
/otherstages check <player>
/otherstages reload
/otherstages cache clear
/otherstages cache info
cache info 命令会打印当前物品缓存条目、追踪的玩家、命中数、未命中数、失效数和命中率。
调试辅助
/otherstages debug item
/otherstages debug menu
/otherstages debug block
/otherstages debug stages
/otherstages dimension check <player> <dimension>
/otherstages dimension list <player>
debug menu 会在当前有打开的菜单时打印该菜单的信息,或者在你关闭菜单后打印最后记住的非玩家菜单。它会显示类、包、已注册的菜单类型、当前玩家是否被其阻止、如果需要则显示所需的阶段,以及可直接用于复制的 blocked_menu_* 片段。它还会建议哪个键通常是当前界面最合适的。
debug block 检查你正在看向的方块。它对于像 Create 这样交互由方块驱动而不是菜单驱动的系统非常有用。现在它会打印可直接用于复制的 blocked_block_* 片段,并建议使用最稳定的键。如果该方块看起来不是基于菜单的,那么 blocked_menu_* 可能不是正确的解决方案。
客户端行为
解锁界面
当授予一个阶段时,客户端会收到一个阶段解锁通知,其中使用:
display_namedescriptioniconcolor
这是当前通用的覆盖界面格式。它不依赖于像 stone_age、iron_age 或 diamond_age 这样的阶段名称。
工具提示
被阻止的物品会添加一行工具提示,告诉玩家需要哪个阶段。
JEI / REI
如果安装了 JEI 或 REI,则根据每个玩家已解锁的阶段,为其隐藏被阻止的物品。
维度和结构警告
- 受限制的维度会使用警告覆盖界面和可选的安全传送。
- 受限制的结构会使用警告覆盖界面以及强制的交互阻止。
服务器配置
服务器主配置文件:
config/otherstages-server.toml
重要选项:
enableStageModeenableTooltipsenableWarningswarningDurationteleportOnInvalidDimensiondefaultStartingStageenableDebugLoggingcacheSize
defaultStartingStage 目前由 /otherstages player <target> reset 命令使用。在当前的代码路径中,它不会在首次登录时自动授予每个新玩家。
阶段分析器
该模组包含 otherstages:stage_analyzer 物品。
使用方法:
- 给自己这个物品。
- 潜行 + 右键点击一个存储方块。
- 模组将扫描容器内容,并将 JSON 行写入
config/otherstages/generated/目录。 - 将生成的行复制到你的
blocked_items.json文件中。
分析器支持原版容器以及许多模组存储系统,这是通过直接支持或反射回退实现的。
如果点击的方块不是支持的容器,分析器将回退为使用方块 ID 和状态属性进行方块检查输出。
说明和当前范围
- 本 README 记录了在当前代码路径中活动的、由加载器支持的阶段文件。
- 存在一些用于某些未来限制类型的内部框架,但本 README 仅记录当前在游戏中生效的功能。
- 每个阶段都需要
stage_info.json文件。 - 文件夹名称是内部的阶段 ID。
- 更高的
order值表示更高级的进度层级。 - 如果一个阶段应作为更后期的层级,请给它一个更大的
order值。 - 编辑 JSON 文件后,使用
/otherstages reload命令重载。
链接
正在加载版本记录…






正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。