
其他阶段
完整的基于阶段的进度系统,可锁定Minecraft游戏内容直至满足特定条件,配备自动配置工具及高级优化功能。
查看大图OtherStages
OtherStages 是一个可配置的、基于阶段的进度系统,适用于 Minecraft Forge 1.20.1。
它允许你将内容锁定在自定义阶段之后,并通过可配置的进度规则来解锁这些阶段。相同的阶段元数据也驱动游戏内的解锁覆盖界面、物品提示文本以及多个警告系统。
模组支持的功能
- 封锁特定的物品、物品命名空间、物品标签以及区分 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值唯一且递增。 - 示例阶段文件夹会在首次启动时自动创建。它们只是示例;你可以重命名或删除它们。
文件夹布局
首次启动时,模组会在以下位置创建配置文件:
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_info.json
此文件定义了阶段的身份标识和向玩家显示的元数据。
支持的字段
| 字段 | 必需 | 类型 | 说明 |
|---|---|---|---|
display_name |
否 | 字符串 | 在命令、消息和解锁覆盖界面中显示。如果未设置,则回退到格式化的文件夹名称。 |
description |
否 | 字符串 | 可选的副标题/描述,用于解锁覆盖界面和阶段信息输出。 |
color |
否 | 字符串 | 十六进制颜色,格式为 #RRGGBB。用于为解锁覆盖界面上色。 |
icon |
否 | 字符串 | 物品 ID,例如 minecraft:diamond_pickaxe。用于解锁覆盖界面。 |
order |
否 | 整数 | 控制进度层级。较高的 order 值意味着更高的阶段。 |
支持翻译的字符串
如果 display_name 或 description 以 otherstages. 开头,则会被视为翻译键。否则,它们将作为纯文本显示。
示例
{
"display_name": "Machine Age",
"description": "Basic automation is now available.",
"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 时匹配该 ID。
blocked_block_ids 匹配已放置方块的 ID 本身,例如 create:mechanical_crafter。blocked_block_classes 匹配运行时的方块类。blocked_block_entity_classes 和 blocked_block_entity_packages 用于那些暴露方块实体但不打开普通菜单的交互驱动型机器。
被封锁物品规则在游戏中的生效效果:
- 阻止直接使用该物品。
- 阻止放置被封锁的方块以及使用被封锁的工具或武器。
- 在玩家合成网格和工作台中清除被封锁的合成结果。
- 在玩家合成网格、工作台、锻造菜单、切石机以及手动将材料插入类似熔炉的菜单时,封锁已配置的配方 ID。
- 阻止手动将被封锁的物品放入非玩家的菜单槽位,包括许多模组化的工作台和终端。
- 当没有所需阶段的玩家打开已配置的被封锁菜单时,自动关闭该菜单。
- 拒绝对已配置的交互驱动型方块(如
create:mechanical_crafter)进行交互,即使它们不打开普通菜单。 - 拒绝使用被封锁输入物的锻造或铁砧操作。
- 阻止从类似结果的菜单槽位中取出被封锁的输出物,防止其被移动到可直接使用的玩家槽位。
- 通过将物品移动到主物品栏或在主物品栏满时丢弃,从快捷栏、副手、护甲栏和支持的 Curios 槽位中移除被封锁的物品。
- 阻止被封锁的物品在玩家主物品栏中运行正常的玩家物品栏更新。
- 过滤掉为该玩家生成的战利品中的被封锁物品。
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
根据职业和等级封锁村民交易。
每个条目支持的字段:
professionlevelmin_levelmax_level
profession 可接受:
- 职业 ID,例如
minecraft:librarian *any- 空值 / null
示例:
{
"blocked_villager_trades": [
{
"profession": "*",
"min_level": 2,
"max_level": 5
},
{
"profession": "minecraft:cleric",
"level": 1
}
]
}
如果某个村民既有允许的交易也有被封锁的交易,则交易界面打开时只会显示可访问的报价。如果没有任何可访问的交易,玩家将收到一条警告信息。
progression.json
定义玩家如何解锁该阶段。
支持的条件类型:
advancementitem_countexperiencedimensionkill_countcraft_countftb_questandor
示例:
{
"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 驱动的。
进度检查的运行方式
模组会在发生有用事件时自动重新评估进度,这些事件包括:
- 玩家登录
- 玩家带有冷却时间的游戏刻更新
- 完成进度
- 交互
- 击杀
- 合成
- 拾取物品
- 维度变化
你也可以使用以下命令强制重新检查:
/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命令重新加载。
正在加载版本记录…






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