渐进阶段

渐进阶段

适用于Minecraft的完全可自定义渐进阶段,支持FTB任务/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 本身不要求任务模组、配方查看器、团队模组、脚本模组或覆盖层模组。每个集成都是可选的,并且仅在安装了相关模组时激活。

🛡️ 服务器权威: 服务器拥有阶段进度、授予、撤销、依赖关系、花费和执行的完全控制权。修改过的客户端无法自行授予阶段、伪造购买或绕过进度规则。


🌳 进度系统可以是什么样子

进度可以是线性的:

🪨 石器时代
   └── 🔩 铁器时代
       └── 💎 钻石时代
           └── ⚔️ 下界合金时代

它可以分支到不同的游戏风格,之后再次汇合:

🌱 生存基础
└── 🔩 铁器时代
    ├── ⚙️ 工程学 ──────┐
    │   └── 🏭 高级科技 │
    ├── 🔮 奥术研究 ─────┼──▶ 👑 终局
    │   └── 🪄 大师巫术 │
    └── 🧭 探索 ──────┘
        └── 🌌 外层世界

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

🎯 选择专精
├── ⚙️ 科技 ─────┐
├── 🔮 魔法 ──────┼──▶ 🏆 精通(完成任意 2 条路径)
└── ⚔️ 战斗 ─────┘

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


🗺️ 玩家进度地图

使用 /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 = "钻石时代"
description = "掌握钻石工具并解锁高级机械。"
icon = "minecraft:diamond"
color = "#55FFFF"
category = "主线进度"
tags = ["main", "tier3", "technology"]

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

# 可选的手动地图放置。两者都省略则自动布局。
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 = "挖掘钻石并完成十个工厂任务"

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

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

🔀 示例:替代路线

# 路线 1:击败末影龙。
[[triggers]]
mode = "all_of"
description = "击败末影龙"

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

# 路线 2:改为成为大师级探险家。
[[triggers]]
mode = "all_of"
description = "访问末地并旅行 50,000 格"

  [[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 = "巨龙已陨落"
description = "首次胜利为整个服务器解锁末地时代。"
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 = "狂战士的祝福"
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} 已进入钻石时代!"
]
teleport = "minecraft:the_nether 0 70 0"
xp_levels = 5
xp_points = 100

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

[unlock] 控制即时的呈现:

[unlock]
toast = "已到达钻石时代!"
title = "&b&l钻石时代"
subtitle = "&7新时代的开始"
sound = "minecraft:ui.toast.challenge_complete"
particle = "minecraft:totem_of_undying"
progress_nudges = true
hud_bar = true

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


📝 完整的起始阶段示例

[stage]
id = "iron_age"
display_name = "铁器时代"
description = "冶炼铁以解锁铁制工具、机械和下一个科技等级。"
icon = "minecraft:iron_ingot"
dependency = ["stone_age"]
category = "主线进度"
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 = "冶炼你的第一个铁锭"

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

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

[unlock]
toast = "铁器时代开始了!"
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 的整合包的建议发布标签:

阶段 目的
内部 Alpha 验证图形、文件结构和主要进度路线。
封闭 Beta 找到绕过方式、死路、多人游戏问题和平衡性问题。
开放 Beta 测试真实玩家行为、替代路线、自动化和性能。
发布候选 冻结阶段 ID 并验证迁移、重启和全包兼容性。
稳定版 仅在每条关键路径和回归用例通过后发布。

🚀 性能和多玩家安全

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

📋 要求

  • 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 进度。