
渐进阶段
完全可定制的Minecraft渐进阶段,集成FTB Quests/KubeJS/JEI。
ProgressiveStages 3.0
🧭 通过游戏内编辑器构建完整的 Minecraft 进度系统——然后让 ProgressiveStages 在所有地方强制执行它们。
✨ 在游戏内创建你的进度
运行 /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 测试流程:
- 使用最终模组列表和数据包运行
/progressivestages validate。 - 在授予前后测试每个阶段。
- 测试每个依赖分支和汇合点。
- 测试撤销、死亡损失、过期、级联、退款和重新授予。
- 使用不足、恰好和过多的资源测试购买。
- 使用至少两名玩家和独立团队测试专用服务器。
- 测试重新登录、服务器重启、
/reload和/progressivestages reload。 - 测试整合包使用的漏斗、管道、机器、假玩家、背包和其他自动化。
- 测试所有已安装的配方查看器、任务模组、叠加层和 Curios 槽位。
- 确认没有触发器需要同一阶段所阻止的动作。
使用 ProgressiveStages 的整合包的建议发布标签:
| 阶段 | 目的 |
|---|---|
| Internal Alpha | 验证图、文件结构和主进度路线。 |
| Closed Beta | 发现绕过、死胡同、多人游戏问题和平衡问题。 |
| Open Beta | 测试真实玩家行为、替代路线、自动化和性能。 |
| Release Candidate | 冻结阶段 ID 并验证迁移、重启和完整整合包兼容性。 |
| Stable | 仅在每个关键路径和回归案例通过后发布。 |
🚀 性能和多玩家安全
- 强制执行和所有权是服务器权威的。
- 相关事件重新检查索引触发器,而不是持续扫描每个条件。
- 轮询被保留为基于状态条件的可配置安全网。
- 可选类别在未使用时具有快速路径。
- 团队、服务器和单人范围独立存储和评估。
- 运行时状态在重载和服务器停止时被正确清除。
- 阶段变更会将锁定内容、地图状态、实体、方块、流体和配方查看器同步到客户端。
- 购买在花费任何东西之前验证前置条件、触发要求、冷却时间和资源。
📋 要求
- Minecraft 1.21.1。
- NeoForge 21.1 或声明的 Minecraft 范围内兼容的更新 21.1 构建。
- 没有强制性的任务、团队、脚本、配方查看器、装备或叠加层模组。
📦 安装
- 为 Minecraft 1.21.1 安装 NeoForge。
- 将 ProgressiveStages jar 放在客户端和服务器上的
mods/中。 - 安装整合包需要的任何可选集成。
- 启动一次以生成主配置和示例阶段。
- 在
config/progressivestages/stages/下创建或编辑文件。 - 运行
/progressivestages validate。 - 使用
/progressivestages reload应用更改或重启服务器。
📚 文档和支持
❤️ 完整的进度框架
ProgressiveStages 为整合包作者提供了一个单一、深度可定制、服务器安全的系统,用于构建、强制执行、自动化、奖励、脚本化、显示、测试和演进几乎任何类型的 Minecraft 进度。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。