常见问题
玩家互相无法造成伤害怎么办?
按以下顺序检查:
- 攻击者所在世界必须配置在
pvp-world下,LyCamp 不会接管其它世界的玩家伤害。 - 双方玩家必须已经完成数据加载并加入有效阵营。
- 攻击者阵营的
hostiles必须包含目标玩家的阵营名称。 - 当前时间必须位于该世界的
pvp-start-time与pvp-end-time之间。
hostiles 是单向判断。例如潜伏者配置保卫者为敌对阵营,不代表保卫者会自动将潜伏者视为敌对阵营。需要双向交战时,应在双方阵营中分别配置。
同阵营玩家或未配置为敌对关系的玩家无法互相造成伤害,这是正常规则。
非 PVP 时间为什么打不了人?
每个 PVP 世界都有独立的开放时间。当前时间不在 pvp-start-time 和 pvp-end-time 定义的范围内时,玩家伤害会被取消,并向攻击者发送该世界的 not-pvp-message。
时间使用六段 Quartz Cron 表达式,字段顺序为:
text
秒 分 时 日 月 周默认示例中的以下配置表示每天 09:00 至 18:00 开放:
yaml
pvp-start-time: '0 0 9 * * ?'
pvp-end-time: '0 0 18 * * ?'时间判断使用服务器时间和服务器默认时区,并支持开始时间晚于结束时间的跨天时间段。
玩家进不了 PVP 世界怎么办?
如果该世界设置了 must-have-camp-to-teleport: true,玩家必须同时满足以下条件:
- 玩家数据已经加载。
- 玩家已经加入有效阵营。
respawn-location下存在与玩家阵营同名的传送点。
例如玩家阵营为 潜伏者,则必须存在:
yaml
respawn-location:
潜伏者: '100,100,100,0,0'坐标格式固定为 x,y,z,yaw,pitch。
世界还必须在加载配置时已经由服务器加载。插件只会为已加载世界解析阵营传送点;如果世界当时不存在或尚未加载,对应 respawn-location 不会生成有效位置。加载世界后可重载插件配置。
/lyzy tp 提示没有阵营重生点怎么办?
/lyzy tp 玩家 世界名 会检查以下内容:
- 目标玩家必须在线,并且数据已经加载。
- 目标玩家必须已经加入阵营。
- 世界必须存在于
pvp-world配置中。 - 该世界必须存在目标阵营对应的
respawn-location。
阵营名称、camp 下的配置节点和 respawn-location 下的节点必须完全一致。
玩家为什么无法离开 PVP 世界?
非 OP 玩家只要从已配置的 PVP 世界传送到另一个世界,传送事件就会被取消。该限制不区分传送来源,因此普通传送指令、菜单传送或其它插件发起的跨世界传送都可能被阻止。
需要让玩家离开时,可以让管理逻辑以 OP 身份完成传送,或使用支持 [op] 前缀的配置指令执行传送。不要直接给普通玩家提供会被该规则拦截的跨世界传送方式。
PVP 世界内为什么不能使用指令?
非 OP 玩家在 PVP 世界内只能使用该世界 allow-command 列表中允许的指令前缀。未匹配的指令会被取消。
例如:
yaml
allow-command:
- '/say'匹配方式是检查完整输入是否以配置内容开头,不是严格比较完整指令。配置 /say 时,以 /say 开头的输入都会被视为允许,因此应避免使用过短或可能与其它指令重叠的前缀。
PVP 世界的禁止指令提示无法修改怎么办?
当前代码读取的消息键是 message.allow-message,但默认配置提供的是 message.allow-command。因此只修改默认的 message.allow-command 不会影响实际提示。
需要自定义该消息时,可在 message 下补充:
yaml
message:
allow-message: '&7PVP地图内禁止使用该指令'如果未配置 message.allow-message,插件会使用代码中的默认提示。
玩家死亡后为什么没有在阵营点重生?
玩家死亡时,插件只会在玩家当前所在世界属于 pvp-world 时尝试修改重生点。
还需要确保:
- 玩家已经加入阵营。
- 当前 PVP 世界存在该阵营对应的
respawn-location。 - 配置加载时对应世界已经加载。
重生点修改不要求当前处于 PVP 开放时间,但声望扣除和物品掉落需要处于 PVP 开放时间。
击杀后为什么没有获得声望?
击杀声望只会在以下条件全部满足时处理:
- 被击杀玩家位于已配置的 PVP 世界。
- 当前处于该世界的 PVP 开放时间。
- 击杀者和被击杀者的数据都已加载。
- Bukkit 能够识别直接击杀者为玩家。
- 击杀者已经加入有效阵营。
- 击杀者仍有今日可获得声望额度。
- 当前声望和累计声望尚未达到阵营配置的最大值。
实际增加值来自该世界的 kill-give-prestige。增加当前声望时,会同步增加累计声望,并扣减今日剩余额度。
死亡后为什么没有扣除声望?
玩家在 PVP 世界内死亡时,只有当前处于 PVP 开放时间才会扣除当前声望,扣除值来自 dead-take-prestige。
以下两类死亡都会扣除:
- 被玩家击杀。
- 没有玩家击杀者的异常死亡。
当前声望最低为 0,不会扣成负数。玩家直接退出服务器时会处理强制掉落,但退出事件本身不会扣除 dead-take-prestige。
每日声望额度没有刷新怎么办?
每日额度在玩家数据加载时检查是否已经跨日,判断依据是服务器默认时区的当天零点。
检查以下内容:
- 玩家是否重新进入服务器并完成数据加载。
- 服务器系统时间和时区是否正确。
- 玩家所属阵营是否仍存在于
camp配置中。 every-day-max-get-prestage-value是否配置正确。
未找到更高的有效额度时,代码使用 1000 作为基础值。权限节点中的下划线会在加载时转换为点,例如:
yaml
every-day-max-get-prestage-value:
default: 1000
vip_1: 2000其中 vip_1 实际检查的权限是 vip.1。玩家同时匹配多个额度时,使用数值最高的一项。
每日首杀奖励没有执行怎么办?
每日首杀只在玩家于 PVP 开放时间内击杀另一名玩家后检查。奖励指令来自击杀者所属阵营的 every-day-first-kill-run-command。
检查以下内容:
- 击杀发生在已配置的 PVP 世界内。
- 当前处于 PVP 开放时间。
- 击杀者已经加入有效阵营。
- 当天此前没有完成过一次有效玩家击杀。
- 指令内容本身可以正常执行。
首杀日期按服务器默认时区的零点划分。指令支持 [op]、[console] 前缀,并会先处理 PlaceholderAPI 变量。
声望称号没有变化怎么办?
称号根据累计声望匹配 camp.阵营.prestige 下的数值或范围节点。例如:
yaml
prestige:
1-1000:
tag: '&6阵营新人'
1001-10000:
tag: '&6阵营精英'检查累计声望是否正好落在某个区间内。区间之间存在空档时,空档内不会匹配任何称号。
阵营最大累计声望取所有声望档位中最大的上限。当前声望和累计声望都不能超过该值,因此最后一个档位的上限也决定了玩家可持有的最大声望。
声望档位指令什么时候执行?
prestige 档位中的 command 会在累计声望从低于档位最小值变为达到或超过最小值时执行。
例如档位为 1001-10000,玩家累计声望从 1000 增加到 1001 时会执行该档位指令。直接使用管理指令设置或增加累计声望,也会进行相同的跨档检查。
代码没有单独保存“已经领取过该档位奖励”的记录。如果累计声望先被扣到档位以下,之后再次提升并跨过该档位最小值,对应指令可能再次执行。不要把该指令用于无法重复发放的重要奖励,除非另有插件负责限制。
当前声望和累计声望有什么区别?
- 当前声望是可被死亡扣除的声望,管理指令使用
given、taken、setn调整。 - 累计声望用于匹配称号和档位属性,管理指令使用
givec、takec、setc调整。 - 正常增加当前声望时,会同时增加累计声望。
- 扣除当前声望时,不会减少累计声望。
- 直接调整累计声望时,不会同步调整当前声望和每日剩余额度。
退出阵营会清空什么?
执行 /lyzy setcamp 玩家 null 后,会清空以下数据:
| 数据 | 处理结果 |
|---|---|
| 当前声望 | 清零 |
| 累计声望 | 清零 |
| 今日声望额度数据 | 清零 |
| 上次每日刷新时间 | 清零 |
| 上次击杀时间 | 不会清零 |
玩家下次加载数据并执行每日检查时,会根据新阵营重新计算当日额度。
如果只是临时阻止玩家进入 PVP 世界,不建议通过退出阵营处理,因为当前声望和累计声望都会丢失。
直接切换阵营会清空原阵营声望吗?
不会。将玩家从一个非空阵营直接设置为另一个非空阵营时,代码只替换阵营名称,不会清空当前声望、累计声望、今日额度和刷新时间。
如果需要玩家更换阵营时重置数据,应先执行:
text
/lyzy setcamp 玩家 null再设置新阵营。执行前应确认确实需要清空玩家数据。
属性没有生效怎么办?
先检查 attribute-plugin 是否使用受支持的准确名称:
| 配置值 | 对应属性插件 |
|---|---|
AttributePlus | AttributePlus |
SX-Attribute2 | SX-Attribute 2 |
SX-Attribute3 | SX-Attribute 3 |
AttributeSystem | AttributeSystem |
ItemLoreOrigin | ItemLoreOrigin |
还需要确认对应属性插件已经正常安装和加载。attribute-plugin 修改后需要重启服务器。
LyCamp 会组合以下属性:
- 玩家当前阵营的基础
attribute。 - 玩家累计声望所在档位的
prestige.档位.attribute。
关闭背包界面时会重新计算属性。玩家数据加载流程也包含属性刷新,但如果上线后未立即显示,可关闭一次背包界面触发刷新。
使用 ItemLoreOrigin 时,属性由异步任务定期写入,显示可能存在短暂延迟。
死亡没有掉落指定物品怎么办?
掉落处理需要满足以下条件:
- 玩家位于
pvp-world中配置的世界。 - 当前处于该世界的 PVP 开放时间。
- 物品位于玩家背包前 36 格。
- 物品拥有 lore。
- lore 中包含配置的掉落文本,颜色代码也必须能够匹配。
插件只扫描背包前 36 格,不扫描盔甲栏、副手或其它额外物品栏。
随机掉落和必定掉落有什么区别?
| 类型 | 配置项 | 规则 |
|---|---|---|
| 随机掉落 | force-drop-item-lore | 从匹配物品所在的格子中随机选择 |
| 必定掉落 | independent-of-the-world-force-drop-item-lore | 所有匹配物品都会掉落 |
随机掉落数量由当前世界的 force-drop-item-amount 控制,单位是背包格数,不是单个物品数量。一个被选中的格子会整组掉落。
必定掉落不受 force-drop-item-amount 限制。匹配必定掉落 lore 的物品会直接从背包移除并掉落到玩家当前位置。
玩家异常死亡或退出时会掉落物品吗?
会。在 PVP 世界的开放时间内:
- 被玩家击杀时,使用
drop-item-message,支持{killer}和{camp}。 - 无玩家击杀者的死亡使用
abnormal-death-drop-item-message。 - 玩家直接退出服务器时,也会执行异常掉落流程。
只有实际掉落了至少一件物品时,插件才会发送掉落提示和物品列表。
物品 lore 明明存在,为什么仍未匹配?
匹配规则是检查物品 lore 的每一行是否包含配置文本,不要求整行完全相同。
配置中的 & 会转换为 Minecraft 颜色符号后再匹配,因此颜色、格式代码和文字内容都可能影响结果。建议确保物品实际 lore 与配置文本使用相同的颜色代码顺序。
如果同一物品同时匹配随机掉落和必定掉落规则,它可能先被随机掉落流程移除;后续必定掉落扫描只会处理仍在背包中的物品。
本地玩家数据文件损坏怎么办?
未使用可用的 MySQL 连接时,玩家数据保存在:
text
plugins/LyCamp/data/玩家UUID.yml保存时会先写入唯一的临时文件,并将上一份稳定主文件保留为 .bak 备份。读取主文件失败时,插件会尝试读取对应备份并恢复主文件。
如果主文件和备份都无法解析,插件会删除损坏文件并以空数据继续加载。出现恢复警告后,应立即检查控制台并备份整个 plugins/LyCamp/data 目录。
数据文件使用 UTF-8 读取和写入,并兼容带 UTF-8 BOM 的历史文件。包含 NUL 字符的文件会被判定为损坏。
MySQL 开启后数据读写失败怎么办?
使用 MySQL 存储时,必须安装 LyMySQLCore,并确保 LyMySQLCore 已成功连接数据库,否则依赖其玩家安全加载和保存事件的相关功能不会正常生效。
同时检查 mysql 下的配置:
| 配置项 | 说明 |
|---|---|
mysql.enable | 是否启用 MySQL,修改后需要重启 |
mysql.ip | 数据库地址 |
mysql.port | 数据库端口 |
mysql.databasename | 数据库名称 |
mysql.username | 数据库账号 |
mysql.password | 数据库密码 |
LyCamp 会以插件名称创建数据表,并按玩家名称保存序列化后的玩家数据。控制台应出现数据库连接成功和数据表初始化成功的消息。
如果连接未建立,实际读写流程会回退到本地 YAML 分支。切换存储方式前应先备份原有数据;项目代码中未提供自动迁移本地 YAML 与 MySQL 数据的功能。
修改配置后使用 /lyzy reload 就能全部生效吗?
阵营、PVP 世界等运行配置可以通过 /lyzy reload 重载。
以下配置明确需要重启服务器:
attribute-pluginmysql.enable以及 MySQL 连接配置
重载 PVP 世界配置前,还应确保目标世界已经加载,否则该世界的阵营重生点可能无法解析。
管理指令没有反应怎么办?
现有 /lyzy 管理指令都要求命令发送者拥有 OP 身份。操作玩家数据的指令还要求目标玩家在线,并且其数据已经加载。
数值参数必须是整数。玩家没有有效阵营时,声望设置、增加或扣除方法不会执行。
setcamp 中的退出参数必须使用小写的 null。代码对该参数使用区分大小写的比较,NULL 或 Null 不会被识别为退出阵营,而会被当作阵营名称查找。