渐进阶段

渐进阶段

完全可定制的Minecraft渐进阶段,集成FTB Quests/KubeJS/JEI。

ProgressiveStages 3.0

🧭 通过游戏内编辑器构建完整的 Minecraft 进度系统——然后让 ProgressiveStages 在所有地方强制执行它们。

Minecraft NeoForge CurseForge Modrinth Discord

✨ 在游戏内创建你的进度

运行 /pstages editor 打开 ProgressiveStages 编辑器 GUI。

无需手动构建每个 TOML 文件,即可创建、编辑、组织和配置你的阶段。设计整合包所需的进度,连接其依赖关系,配置其锁定与解锁条件,自定义其外观,然后在游戏内进行测试。

ProgressiveStages 不只是一个物品锁定模组。它是一个完整的进度创作平台,让整合包作者决定玩家可以使用什么、可以去哪里旅行、必须完成什么、进度如何共享、阶段获得或失去时会发生什么,以及整个旅程如何在游戏内呈现。

每个阶段都定义在一个可读的 TOML 文件中。一个阶段几乎可以代表任何事物:一个时代、章节、技能、职业、研究课题、任务里程碑、Boss 层级、维度、科技分支、魔法学派、服务器事件、临时祝福、惩罚或可购买的升级。

🌟 构建几乎任何类型的进度

  • 一个简单的 石器时代 → 铁器时代 → 钻石时代 进度。
  • 多个独立的科技、探索、农业和魔法分支。
  • 一个包含数百个相互关联里程碑的大型任务驱动整合包。
  • 具有成本、前置条件、属性、奖励和退款的 RPG 风格技能树。
  • 使用 FTB Teams 的团队进度或全服服务器里程碑。
  • 在玩家发现其前置条件之前保持隐藏的秘密路径。
  • 会过期、死亡时消失或需要维持经验值的临时挑战阶段。
  • 使用 KubeJS 和 Java API 完全脚本化的进度。

ProgressiveStages 本身不需要任务模组、配方查看器、团队模组、脚本模组或叠加层模组。每个集成都的可选的,仅在其相关模组安装时才会激活。

🛡️ 服务器权威: 服务器拥有阶段进度、授予、撤销、依赖、成本和强制执行。修改过的客户端无法给自己授予阶段、伪造购买或绕过进度规则。


🌳 进度可以是什么样子

进度可以是线性的:

🪨 Stone Age
   └── 🔩 Iron Age
       └── 💎 Diamond Age
           └── ⚔️ Netherite Age

它可以分支为不同的玩法风格,之后再汇合:

🌱 Survival Basics
└── 🔩 Iron Age
    ├── ⚙️ Engineering ──────┐
    │   └── 🏭 Advanced Tech │
    ├── 🔮 Arcane Studies ───┼──▶ 👑 Endgame
    │   └── 🪄 Master Sorcery│
    └── 🧭 Exploration ──────┘
        └── 🌌 Outer Realms

依赖关系支持 all、any 和计数满足。这意味着一个终局阶段可以要求所有分支、任意一个专精,或可配置数量的路径。

🎯 Choose a Specialization
├── ⚙️ Technology ─┐
├── 🔮 Magic ──────┼──▶ 🏆 Mastery (complete any 2 paths)
└── ⚔️ Combat ─────┘

阶段也可以完全独立。一个服务器可以同时拥有主故事树、可选技能树、临时事件和隐藏秘密。


🗺️ 玩家进度地图

使用 /stage、/stages、/ps、/stage gui 或可配置的按键绑定打开地图。

3.0 地图以 Minecraft 的进度屏幕为蓝本,同时保持完全由整合包作者控制:

  • 熟悉的原版任务、目标和挑战框架。
  • 可拖动、滚轮滚动的依赖关系图。
  • 省略坐标时自动进行图形布局。
  • 偏好手工布局时可精确设置 x 和 y 位置。
  • 依赖连接线,使分支和汇合易于理解。
  • 悬停卡片,包含描述、依赖、触发器进度和解锁预览。
  • 点击固定详情面板,查看更长的信息。
  • 按名称、ID、描述、类别或锁定物品搜索。
  • 切换隐藏玩家已拥有的阶段。
  • 每个阶段的图标、颜色、类别、背景、边框和排序顺序。
  • 直接从地图购买经服务器验证的阶段。
  • 自动触发条件的实时进度。
  • 未知图标、隐藏名称和防剧透描述。

作者通过 [display].reveal 决定节点何时可见:

显示模式 行为
always 阶段始终可见。
dependencies 当前置路径变得相关时,阶段出现。
unlocked 阶段在拥有之前保持隐藏。

设置 [stage].hidden = true 可将阶段从地图中完全省略,同时在内部仍然使用它。

显示配置示例:

[stage]
id = "diamond_age"
display_name = "Diamond Age"
description = "Master diamond tools and unlock advanced machinery."
icon = "minecraft:diamond"
color = "#55FFFF"
category = "Main Progression"
tags = ["main", "tier3", "technology"]

[display]
frame = "challenge"
background = "minecraft:block/deepslate_tiles"
reveal = "dependencies"
sort_order = 30

# Optional manual map placement. Omit both for automatic layout.
x = 168
y = 0

客户端只显示同步的数据。服务器仍然是权威的: 修改过的客户端无法授予阶段、绕过依赖、伪造触发器进度,或在不支付已验证成本的情况下购买阶段。


🔒 ProgressiveStages 可以门控的一切

每个类别都是可选的。全局强制执行设置提供整合包范围的默认值,而阶段的 [enforcement] 部分可以自定义其自身锁定的行为。

🎒 物品和库存

门控单个物品、标签、整个模组或 ID 模式。根据配置,ProgressiveStages 可以阻止:

  • 使用锁定物品。
  • 拾取它。
  • 用鼠标移动它。
  • 将其保留在快捷栏或库存中。
  • 放置其方块形式。
  • 在铁砧中修复、重命名或合并它。
  • 在配方查看器中隐藏或遮蔽它。
  • 将其装备到支持的 Curios 槽位中。

锁定叠加层会渲染在普通库存、箱子、快捷栏、背包、铁砧和其他基于槽位的菜单中。

🧱 方块和交互

门控方块放置、破坏和右键交互。细粒度规则可以区分:

  • 空手右键点击方块。
  • 对特定方块使用特定物品。
  • 对实体使用特定物品。
  • 打开方块菜单。
  • 打开手持物品菜单(如背包)。

🛠️ 配方和合成

锁定确切的配方 ID 或所有产出为锁定物品的配方。强制执行同时保护配方发现和实际合成产出,因此在 JEI 或 EMI 中隐藏配方从来都不是唯一的防御手段。

💧 流体

门控流体拾取、桶放置、世界放置、流动、玩家浸没和配方查看器可见性。

🌾 作物和农业

门控种植、自然生长、骨粉、收获和作物掉落。这允许农业分支在不同时间解锁种子、成熟作物、自动化或整个农业模组。

🌌 维度和传送

阻止传送门旅行和命令/模组传送到锁定的维度。旅行后的安全检查会捕获绕过正常传送门事件的集成。

✨ 附魔

ProgressiveStages 可以:

  • 完全锁定一个附魔。
  • 使其无法通过附魔台、铁砧和交易获得。
  • 从现有装备中移除非法附魔。
  • 将附魔限制在临时的最高等级。

当多个缺失阶段限制同一个附魔时,最严格的剩余限制生效。

[enchants]
locked = ["minecraft:mending"]
max_levels = [
    "minecraft:sharpness:3",
    "minecraft:protection:2"
]

⚔️ 实体、战斗和交互

门控攻击或与特定实体、注册表标签、ID 模式或整个模组交互。一个战斗分支可以要求一个阶段来对抗亡灵,另一个阶段来挑战 Boss。

👾 生物生成和替换

取消锁定生物的生成,或将其替换为不同的实体。这可以将后期敌人挡在早期区域之外,或在获得相关阶段之前将它们转变为更安全的替代品。

🐺 宠物和坐骑

门控驯服、繁殖、命令、交互或骑乘宠物和其他受支持实体。

🎁 战利品

从以下内容中过滤锁定内容:

  • 箱子和生成的容器。
  • 钓鱼。
  • 考古。
  • 生物掉落。
  • 方块掉落。
  • Lootr 的每位玩家独立战利品抽取。

战利品过滤是服务器端的,防止玩家仅仅因为内容出现在生成的战利品表中就获得它。

🖥️ 屏幕和菜单

阻止特定的方块菜单或手持物品菜单。当物品本身可以携带,但其配置或存储界面应稍后解锁时,这很有用。

🧑‍🌾 村民、交易和职业

使用 [trades] 根据结果隐藏单个报价,或使用 [professions] 阻止打开整个职业的交易屏幕。流浪商人没有职业,可以通过交易规则进行管理。

🏆 进度

锁定的进度可以完全从客户端扣留。它们不仅会显示为灰色——而是在拥有所需阶段之前保持隐藏,然后在无需重新登录的情况下刷新。

🏰 结构

门控进入结构,并独立控制:

  • 容器访问。
  • 方块破坏。
  • 方块放置。
  • 爆炸。
  • 生物生成。

闯入锁定结构的玩家可以被返回到他们最后的安全位置,并具有可配置的进入内边距以使其远离边界。

📍 区域

定义手工编写的三维区域,具有自己的限制、消息、规则标志和减益效果。区域对于服务器中心、地牢、竞技场、城镇、故事地点或未由已注册 Minecraft 结构表示的区域非常有用。

💍 Curios 装备槽

安装 Curios 后,单个槽位可以要求阶段。锁定的装备可以被弹出,并且普通物品强制执行仍然可作为后备。

⛏️ 矿石和加密方块

锁定的矿石或方块 ID 可以在视觉上替换为另一个方块——默认为石头——直到玩家获得该阶段。区块数据、破坏行为和掉落都受到保护,因此视觉伪装不会成为绕过手段。

[blocks]
locked = ["minecraft:diamond_ore", "minecraft:deepslate_diamond_ore"]

[display]
encrypt_blocks = true
encrypt_as = "minecraft:stone"

🪽 玩家能力

独立门控移动能力:

[abilities]
locked = ["elytra", "sprint", "swim", "climb"]

🧪 信标效果和酿造

按玩家门控单个信标效果,并防止未经授权的玩家或自动化从酿造台中提取锁定的药水产出。

💪 阶段拥有的属性

阶段可以在拥有时应用任何已注册的原版或模组属性,包括生命值、体型、攻击伤害、移动速度或触及距离。修饰符支持加法、基础乘法和总乘法操作,并在阶段被撤销时移除。


🧩 全模组统一的匹配语言

锁定列表在几乎每个类别中都使用相同的可读语法:

条目 含义 示例
id: 一个确切的注册表 ID id:minecraft:diamond
无前缀 id: 的简写 minecraft:diamond
mod: 整个模组命名空间 mod:mekanism
tag: 一个注册表标签 tag:minecraft:logs
# 标签简写 #minecraft:logs
name: 不区分大小写的 ID 子串 name:netherite

广泛的锁定可以包含精确的例外:

[items]
locked = ["mod:mekanism"]
always_unlocked = ["mekanism:configurator"]

如果多个阶段门控相同内容,玩家必须拥有所有适用的阶段。白名单或 [unlocks] 条目只影响声明它的阶段;它不会静默覆盖另一个阶段的锁定。


⚡ 自动阶段触发器

触发器位于它们所解锁的阶段内部——没有单独的全局触发器文件。

一个阶段可以有多个 [[triggers]] 块。每个块都是通往同一阶段的替代路线。在块内,使用:

  • mode = "all_of" 要求每个条件都满足。
  • mode = "any_of" 要求至少满足一个条件。

内置触发条件涵盖:

类别 示例
物品 持有、拾取、使用、丢弃、合成、挖掘或破坏物品/工具。
战斗 击杀实体、击杀 Boss、用特定物品击杀、驯服或繁殖。
玩家状态 等级、经验、效果、统计、游戏时间、睡觉、钓鱼或骑乘。
探索 维度、生物群系、在生物群系中的时间、结构、海拔、距离和进度。
世界状态 天气、天数和世界时间。
进度状态 保持另一个阶段一段时间。
外部进度 由命令、KubeJS、任务或另一个模组控制的命名计数器。
自定义逻辑 KubeJS 谓词和脚本提供的进度。

基于计数器的条件在由原版统计支持时可以是追溯性的。事件索引评估意味着相关游戏事件只重新检查它们可能影响的条件,而可配置的轮询间隔可以安全地处理实时状态条件。

📘 示例:一条必需路线

[[triggers]]
mode = "all_of"
description = "Mine diamonds and complete ten factory quests"

  [[triggers.conditions]]
  type = "mine"
  block = "minecraft:diamond_ore"
  count = 3

  [[triggers.conditions]]
  type = "custom_counter"
  counter = "factory_quests"
  count = 10

🔀 示例:替代路线

# Route 1: defeat the dragon.
[[triggers]]
mode = "all_of"
description = "Defeat the Ender Dragon"

  [[triggers.conditions]]
  type = "kill"
  entity = "minecraft:ender_dragon"
  count = 1

# Route 2: become a master explorer instead.
[[triggers]]
mode = "all_of"
description = "Visit the End and travel 50,000 blocks"

  [[triggers.conditions]]
  type = "dimension"
  dimension = "minecraft:the_end"

  [[triggers.conditions]]
  type = "distance"
  movement = "all"
  count = 50000

正常触发器授予始终尊重依赖关系。进度可能会提前累积,但在满足其前置规则之前,阶段无法自动授予。


🔗 依赖、范围、标签和类别

阶段支持:

  • 线性、分支、汇合、循环验证或独立的图。
  • all、any 和计数依赖要求。
  • 用于单人游戏或 FTB Teams 的团队范围所有权。
  • 用于全服里程碑的服务器范围所有权。
  • 用于组织和呈现的类别。
  • 用于查询和批量操作的标签。
  • 隐藏的内部阶段。
  • 起始阶段。

服务器范围事件示例:

[stage]
id = "dragon_defeated"
display_name = "The Dragon Has Fallen"
description = "The first victory unlocks the End Age for the entire server."
scope = "server"
tags = ["story", "server_event"]

⏳ 阶段可以是临时的或会失去

进度不必是永久的。

  • [stage].duration = "30m" 创建一个临时阶段,在真实时间过后过期,包括离线时间。
  • [revoke].on_death = true 在玩家死亡时移除它。
  • [revoke].xp_below = N 仅在总经验值保持高于阈值时保留它。
  • [revoke].cascade = true 也会移除依赖它的阶段。
[stage]
id = "berserker_blessing"
display_name = "Berserker's Blessing"
duration = "30m"

[revoke]
on_death = true
cascade = true

这支持限时事件、临时职业、挑战模式、维持资格、诅咒、祝福和真正的退化系统。


💎 可购买的技能树节点

[cost] 表将阶段变为可购买的地图节点。

[cost]
xp_levels = 30
items = ["minecraft:diamond:5", "minecraft:emerald:3"]
bypass_requirements = false
cooldown = "5m"
refund_percent = 50
  • 依赖关系仍然会被强制执行。
  • bypass_requirements = true 跳过触发要求,而不是前置阶段。
  • 冷却时间按玩家跟踪。
  • 当购买的阶段被撤销时,退款可以返还一定百分比的物品和经验成本。
  • 每次购买都会在任何成本被移除之前由服务器重新验证。

这使得 ProgressiveStages 适用于 RPG 技能、研究系统、声望树、职业升级和服务器商店,而无需单独的 GUI 模组。


🎉 奖励和解锁呈现

[rewards] 控制玩家在真实授予时获得什么:

[rewards]
items = ["minecraft:diamond:5", "minecraft:netherite_scrap:2"]
effects = ["minecraft:strength:120:1", "minecraft:regeneration:60:0"]
commands = [
    "give {player} minecraft:cake 1",
    "say {player} has entered the Diamond Age!"
]
teleport = "minecraft:the_nether 0 70 0"
xp_levels = 5
xp_points = 100

奖励在每次真实所有权变更时运行一次,而不是在登录或同步时。团队进度奖励实际获得或购买该阶段的玩家,而不是将奖励复制给每个团队成员。

[unlock] 控制每时每刻的呈现:

[unlock]
toast = "Diamond Age reached!"
title = "&b&lDIAMOND AGE"
subtitle = "&7A new era begins"
sound = "minecraft:ui.toast.challenge_complete"
particle = "minecraft:totem_of_undying"
progress_nudges = true
hud_bar = true

每个效果都是可选的。整合包可以使用安静的后台阶段、戏剧性的故事里程碑,或介于两者之间的任何内容。


📝 一个完整的入门阶段示例

[stage]
id = "iron_age"
display_name = "Iron Age"
description = "Smelt iron to unlock iron tools, machinery, and the next technology tier."
icon = "minecraft:iron_ingot"
dependency = ["stone_age"]
category = "Main Progression"
tags = ["main", "technology", "tier2"]
color = "#D8D8D8"
scope = "team"

[display]
frame = "goal"
reveal = "dependencies"
sort_order = 20
show_tooltip = true
show_description_on_tooltip = true

[items]
locked = [
    "minecraft:iron_pickaxe",
    "minecraft:iron_axe",
    "minecraft:iron_shovel",
    "minecraft:iron_sword",
    "minecraft:iron_helmet",
    "minecraft:iron_chestplate",
    "minecraft:iron_leggings",
    "minecraft:iron_boots"
]

[blocks]
locked = ["minecraft:anvil", "minecraft:blast_furnace"]

[recipes]
locked_outputs = ["tag:minecraft:iron_tool_materials"]

[[triggers]]
mode = "all_of"
description = "Smelt your first iron ingot"

  [[triggers.conditions]]
  type = "advancement"
  advancement = "minecraft:story/smelt_iron"

[rewards]
items = ["minecraft:iron_ingot:3"]
xp_points = 25

[unlock]
toast = "The Iron Age begins!"
sound = "minecraft:ui.toast.challenge_complete"
particle = "minecraft:happy_villager"

重要设计规则:不要锁定获得自身阶段所需的动作。如果挖掘钻石矿石解锁钻石时代,玩家必须仍然能够在拥有钻石时代之前挖掘矿石;而是锁定有用的钻石装备和高级内容。


⌨️ 命令

👤 玩家和检查命令

  • /stage 或 /stage gui — 打开进度地图。
  • /stage list — 列出已拥有或可用的阶段。
  • /stage check — 检查所有权。
  • /stage info — 检查阶段定义。
  • /stage tree — 检查依赖关系。
  • /stage progress next — 显示可到达阶段的进度。
  • /stage progress all — 显示所有可见进度。
  • /stage progress <stage> — 检查一个阶段的条件。
  • /stage simulate — 试运行可到达阶段和依赖阻塞项。

🛡️ 管理和整合包作者命令

  • /pstages editor — 打开游戏内阶段编辑器 GUI。
  • /stage grant 和 /stage revoke。
  • /stage tag grant、revoke 和 list。
  • /stage category grant、revoke 和 list。
  • /stage bulk grant 和 revoke。
  • /stage counter get、add、set 和 reset。
  • /stage sync 刷新玩家的客户端状态。
  • /stage new <id> 搭建一个新的 TOML 阶段。
  • /stage export 生成 Markdown 进度指南。
  • /progressivestages reload 进行经过验证的实时重载。
  • /progressivestages validate 进行解析、注册表、图和触发器诊断。
  • /progressivestages ftb status 进行 FTB Quests 诊断。

命令建议在适用的情况下从已加载的阶段 ID、标签、类别、玩家和计数器名称生成。


📜 KubeJS 脚本

安装 KubeJS 后,服务器脚本会收到一个全局 ProgressiveStages 对象,玩家会收到一流的 player.stages 桥接。

ProgressiveStages.has(player, 'diamond_age')
ProgressiveStages.grant(player, 'diamond_age')
ProgressiveStages.revoke(player, 'diamond_age')
ProgressiveStages.toggle(player, 'diamond_age')
ProgressiveStages.available(player, 'diamond_age')
ProgressiveStages.percent(player, 'diamond_age')
ProgressiveStages.progress(player, 'diamond_age')
ProgressiveStages.addCounter(player, 'factory_quests', 1)
ProgressiveStages.openGui(player)

该 API 还支持:

  • 在真实引擎变更时触发的授予和撤销回调。
  • 自定义布尔触发条件。
  • 自定义进度提供者。
  • 命名计数器。
  • 立即触发器评估。
  • 依赖和依赖项查询。
  • 标签和类别查询。
  • 批量授予和撤销。
  • 定义快照。
  • 同步。

授予和撤销调用返回所有权是否实际发生变更;批量操作返回有多少阶段发生了变更。

自定义条件示例:

ProgressiveStages.condition('is_rich', player => {
  return player.inventory.count('minecraft:diamond') >= 64
})
[[triggers]]
mode = "all_of"

  [[triggers.conditions]]
  type = "script"
  id = "is_rich"

☕ Java API

ProgressiveStagesAPI 向其他模组公开所有权、定义、依赖、触发器进度、计数器、批量变更和同步。NeoForge 事件报告真实的授予和撤销及其原因,包括命令、触发器、购买、集成和退化。

可选集成被分隔在兼容层和受保护的 mixin 之后,因此核心模组不需要可选类即可加载。


🔌 可选集成

集成 ProgressiveStages 添加的内容
EMI 隐藏锁定条目,添加叠加层/提示,并在阶段变更后立即刷新。
JEI 隐藏锁定的物品/配方,并在解锁时立即恢复它们。
FTB Teams 共享团队范围的阶段,同时保留单人后备。
FTB Quests + FTB Library 必需阶段字段、阶段任务、奖励和实时重新检查。
KubeJS 全局脚本 API、player.stages、回调、自定义条件和计数器。
Jade 在查看锁定方块或实体时显示所需阶段。
WTHIT 在查看锁定方块或实体时显示所需阶段。
Curios 门控装备槽并弹出锁定装备。
Lootr 过滤每位玩家独立的战利品抽取。
Mekanism 处理 NBT 繁重的变体、化学品和相关自动化表面。
Nature's Compass 阻止会绕过锁定维度进度的搜索。
Create 为 Create 驱动的交互和收获路径保留正确的分类。
Visual Workbench 通过替换工作台行为保留方块和合成强制执行。

除非整合包使用相应功能,否则所有集成都是可选的。


📁 配置布局

首次启动后:

config/
└── progressivestages/
    ├── progressivestages.toml
    └── stages/
        ├── stone_age.toml
        ├── iron_age.toml
        └── diamond_age.toml
  • progressivestages.toml 包含全局默认值、强制执行和性能设置、集成开关、披露设置、视觉行为和可自定义消息。
  • stages/ 包含各个阶段 TOML 文件。
  • 支持嵌套文件夹以组织大型整合包。
  • 生成的 diamond_age.toml 是一个包含大量注释的参考文件,涵盖完整架构。
  • 数据包可以在 data/<namespace>/progressivestages/stages/*.toml 提供默认值。
  • 具有相同 ID 的配置文件夹阶段会覆盖数据包版本。
  • 可以迁移较旧的布局,而不会覆盖现有的 3.0 目标。

✅ 安全重载和验证

/progressivestages reload 不会部分应用损坏的数据。它首先构建并验证完整的候选快照。如果解析失败、阶段 ID 重复、依赖图无效、注册表引用失效或运行时应用失败,则先前的工作快照保持活动。

/progressivestages validate 帮助识别:

  • TOML 解析错误。
  • 重复的阶段 ID。
  • 缺失的依赖。
  • 多节点依赖循环。
  • 传递不可达的阶段。
  • 无效的注册表引用。
  • 失效的触发器目标。
  • 无效的职业 ID。
  • 集成特定的配置问题。

这使得实时迭代对本地整合包开发和运行中的服务器都更加安全。


🧪 Beta 测试和发布准备

ProgressiveStages 3.0 被项目呈现为稳定的 3.0 版本,但大型整合包仍应像整合包特定 beta 一样测试自己的配置。每个整合包都组合了不同的模组、脚本、配方、团队和自动化系统。

推荐的 beta 测试流程:

  1. 使用最终模组列表和数据包运行 /progressivestages validate。
  2. 在授予前后测试每个阶段。
  3. 测试每个依赖分支和汇合点。
  4. 测试撤销、死亡损失、过期、级联、退款和重新授予。
  5. 使用不足、恰好和过多的资源测试购买。
  6. 使用至少两名玩家和独立团队测试专用服务器。
  7. 测试重新登录、服务器重启、/reload 和 /progressivestages reload。
  8. 测试整合包使用的漏斗、管道、机器、假玩家、背包和其他自动化。
  9. 测试所有已安装的配方查看器、任务模组、叠加层和 Curios 槽位。
  10. 确认没有触发器需要同一阶段所阻止的动作。

使用 ProgressiveStages 的整合包的建议发布标签:

阶段 目的
Internal Alpha 验证图、文件结构和主进度路线。
Closed Beta 发现绕过、死胡同、多人游戏问题和平衡问题。
Open Beta 测试真实玩家行为、替代路线、自动化和性能。
Release Candidate 冻结阶段 ID 并验证迁移、重启和完整整合包兼容性。
Stable 仅在每个关键路径和回归案例通过后发布。

🚀 性能和多玩家安全

  • 强制执行和所有权是服务器权威的。
  • 相关事件重新检查索引触发器,而不是持续扫描每个条件。
  • 轮询被保留为基于状态条件的可配置安全网。
  • 可选类别在未使用时具有快速路径。
  • 团队、服务器和单人范围独立存储和评估。
  • 运行时状态在重载和服务器停止时被正确清除。
  • 阶段变更会将锁定内容、地图状态、实体、方块、流体和配方查看器同步到客户端。
  • 购买在花费任何东西之前验证前置条件、触发要求、冷却时间和资源。

📋 要求

  • Minecraft 1.21.1。
  • NeoForge 21.1 或声明的 Minecraft 范围内兼容的更新 21.1 构建。
  • 没有强制性的任务、团队、脚本、配方查看器、装备或叠加层模组。

📦 安装

  1. 为 Minecraft 1.21.1 安装 NeoForge。
  2. 将 ProgressiveStages jar 放在客户端和服务器上的 mods/ 中。
  3. 安装整合包需要的任何可选集成。
  4. 启动一次以生成主配置和示例阶段。
  5. 在 config/progressivestages/stages/ 下创建或编辑文件。
  6. 运行 /progressivestages validate。
  7. 使用 /progressivestages reload 应用更改或重启服务器。

📚 文档和支持


❤️ 完整的进度框架

ProgressiveStages 为整合包作者提供了一个单一、深度可定制、服务器安全的系统,用于构建、强制执行、自动化、奖励、脚本化、显示、测试和演进几乎任何类型的 Minecraft 进度。