世界任务设置 (World Quest Settings)

基本信息

属性 值
实现类 betterquesting.storage.QuestSettings(单例 INSTANCE)
容器基类 betterquesting.storage.PropertyContainer implements IQuestSettings
装载方法 QuestSettings.setupProps()(QuestSettings.java:37-52)
世界级属性数 12
API 键 ApiReference.SETTINGS(ExpansionLoader.java:38)
与客户端配置的关系 完全独立 —— 客户端配置存 config 文件,本设置存世界存档

功能

QuestSettings 存的是随世界存档走的设置:它们由整合包作者设定、被 /bq_admin 指令修改、随世界 NBT 持久化,而不是每个玩家各存一份。

setupProps() 在两个时机被调用(QuestSettings.java:26-30):

  1. 构造函数(QuestSettings.java:15-17)—— 首次创建时
  2. readFromNBT(NBTTagCompound) 之后 —— 每次读档都会重跑一次

第 2 点的设计意图是版本迁移:setupValue(prop) 的实现是 this.setProperty(prop, this.getProperty(prop, def))(QuestSettings.java:54-56),即「有存档值就用存档值,没有才用默认值」。整合包给某属性新增了更合适的默认值,老存档读档时会补上;而显式存过的值不会被覆盖。

每个 setupValue(prop) 内部走 prop.getDefault()(QuestSettings.java:54-56),所以这 12 项的初始值就是 任务属性 表里列的 NativeProps 默认值。

12 项世界级属性

属性 ID 类型 默认值 作用
betterquesting:pack_name String "" 任务包名称
betterquesting:pack_version Integer 0 任务包版本号
betterquesting:party_enable Boolean true 是否启用队伍系统
betterquesting:editMode Boolean true 是否允许编辑。为真时 观测站 的 updateEntity 整个短路
betterquesting:hardcore Boolean false 硬核模式总开关
betterquesting:livesDef Integer 3 新玩家初始生命数
betterquesting:livesMax Integer 10 生命上限
betterquesting:home_image String "betterquesting:textures/gui/default_title.png" 主界面标题图
betterquesting:home_anchor_x Float 0.5F 标题图锚点 X
betterquesting:home_anchor_y Float 0F 标题图锚点 Y
betterquesting:home_offset_x Integer -128 标题图 X 偏移
betterquesting:home_offset_y Integer 0 标题图 Y 偏移

共 12 项 = 7 项任务包与玩法开关(PACK_NAME、PACK_VER、PARTY_ENABLE、EDIT_MODE、HARDCORE、LIVES_DEF、LIVES_MAX)+ 5 项主界面布局(HOME_IMAGE、HOME_ANC_X、HOME_ANC_Y、HOME_OFF_X、HOME_OFF_Y)。

计数依据:grep -c 'setupValue(NativeProps\.' QuestSettings.java = 12,对应 QuestSettings.java:38-51 的 12 行。本文件内 setupValue 的双参重载没有任何调用点 —— 唯二匹配 setupValue(…, …) 的行是重载体内的委托调用(QuestSettings.java:55)与该重载自身的声明(QuestSettings.java:58)。

编辑权限

QuestSettings.canUserEdit(EntityPlayer) 决定谁能改任务(QuestSettings.java:20-23):

if (player == null) return false;
return this.getProperty(NativeProps.EDIT_MODE) && NameCache.INSTANCE.isOP(QuestingAPI.getQuestingUUID(player));

两个条件都要满足:世界 editMode 为真(默认就是 true),且玩家在 NameCache 缓存中被标记为 OP。NameCache 的 OP 标记来自服务端 server.getConfigurationManager() 的权限表,并以 isOP 布尔写入 NBT(storage/NameCache.java:36-42),读取入口 NameCache.isOP(UUID)(NameCache.java:69-71)。

reset 行为

QuestSettings.reset() 实现为 this.readFromNBT(new NBTTagCompound())(QuestSettings.java:32-35)—— 即「读一个空标签」。因为 readFromNBT 末尾会重跑 setupProps(),而此时所有属性的存档值都不存在,于是全部落回 NativeProps 默认值。这是一条真正的重置路径,不是空操作。

数值

数值名 值
setupValue(NativeProps.*) 调用数 12
setupValue 双参重载的实际调用数 0(唯二文本匹配是重载体内的委托与声明本身)
canUserEdit 要求的条件数 2(EDIT_MODE 为真 且 NameCache.isOP)
reset() 的实现 读空 NBT 触发默认值回填
默认开启的开关 EDIT_MODE = true、PARTY_ENABLE = true
默认关闭的开关 HARDCORE = false

相关条目

  • 任务属性 - 本页 12 个属性的完整定义与全部 52 项的总表
  • 客户端配置 - 存 config 文件的 45 项玩家设置,与本页的 12 项世界设置互不覆盖
  • 生命值与硬核模式 - HARDCORE / LIVES_DEF / LIVES_MAX 的运行时消费
  • 指令 - /bq_admin hardcore、/bq_admin lives、/bq_admin default 修改的正是这 12 项
  • 观测站 (OOS) - EDIT_MODE 为真时其扫描逻辑完全停摆