LyCamp
LyCamp 是一款阵营 PVP 插件,用于配置阵营关系、阵营战场、开放时间、声望成长、称号属性和死亡掉落规则。
玩家加入阵营后,可以在指定 PVP 世界与敌对阵营战斗。插件会根据世界开放时间决定是否允许造成伤害,并在击杀、死亡、异常死亡或战场内退出时处理声望与物品掉落。
MySQL 前置要求
启用 MySQL 存储时,必须安装 LyMySQLCore,并确认它已成功连接数据库。否则玩家数据的读取、保存、同步及相关记录不会生效,服务器也会阻止玩家进入。
插件信息
| 项目 | 内容 |
|---|---|
| 插件名 | LyCamp |
| 插件版本 | 1.0.1 |
| 作者 | 离渊 |
| 主命令 | /lyzy |
| Java 版本 | Java 8 |
| 开发使用的服务端 API | Paper 1.16.5 |
| 数据存储 | 本地 YAML 或 MySQL |
| 插件声明的软依赖 | PlaceholderAPI、ProtocolLib、AttributePlus、SX-Attribute |
| 可选属性插件 | AttributePlus、SX-Attribute2、SX-Attribute3、AttributeSystem、ItemLoreOrigin |
支持版本说明
项目使用 Paper 1.16.5 API 编译。代码包含旧版与新版材质兼容处理,但没有提供完整的服务端版本支持列表,因此不能据此确认其他 Minecraft 版本一定可用。
玩法规则
- 管理员在配置中创建阵营,并设置各阵营的敌对关系。
- 管理员将世界加入
pvp-world,配置开放时间和各阵营的重生点。 - 玩家加入阵营后,通过插件指令传送到所属阵营在目标世界的重生点。
- PVP 世界内只允许攻击敌对阵营玩家;无阵营、同阵营或非敌对阵营之间的伤害会被阻止。
- 击杀敌对玩家会增加当前声望和累计声望,被击杀或异常死亡会扣除当前声望。
- 累计声望进入配置区间后,会显示对应称号并加载该区间的属性。
- 战场内死亡或退出时,符合 Lore 条件的背包物品可能随机掉落或必定掉落。
依赖与功能关系
| 插件 | 类型 | 用途 |
|---|---|---|
PlaceholderAPI | 可选依赖 | 注册 %lyzy_...% 变量,并解析称号奖励、首杀奖励等配置指令中的 PAPI 变量 |
ProtocolLib | 可选依赖 | 监听客户端攻击实体数据包,补充接管 PVP 世界中的玩家攻击行为 |
LyMySQLCore | MySQL 模式必需 | 在 MySQL 模式下提供安全的玩家加载与保存事件;必须正常加载并连接数据库 |
AttributePlus | 可选属性插件 | 加载阵营基础属性与声望称号属性 |
SX-Attribute2 | 可选属性插件 | 加载阵营基础属性与声望称号属性 |
SX-Attribute3 | 可选属性插件 | 加载阵营基础属性与声望称号属性 |
AttributeSystem | 可选属性插件 | 加载阵营基础属性与声望称号属性 |
ItemLoreOrigin | 可选属性插件 | 通过虚拟物品 Lore 加载阵营基础属性与声望称号属性 |
PlaceholderAPI 和 ProtocolLib 未安装时,插件会在控制台提示对应前置未启动。属性功能只会写入 attribute-plugin 指定的属性插件。
核心功能
| 功能 | 说明 |
|---|---|
| 多阵营配置 | 可创建多个阵营,并为每个阵营设置基础属性、敌对阵营、称号区间和奖励指令 |
| 敌对关系 | 攻击者所属阵营的 hostiles 必须包含目标阵营,否则无法造成伤害 |
| PVP 世界接管 | 只有配置在 pvp-world 下的世界会应用阵营伤害、传送、指令限制、声望和掉落规则 |
| 定时开放 | 每个 PVP 世界使用开始与结束 Cron 表达式控制战斗开放时间,并支持跨天时间段 |
| 阵营出生点 | 每个 PVP 世界可为不同阵营设置独立的进入点和死亡重生点 |
| 进出限制 | 可阻止无阵营或没有对应重生点的玩家进入 PVP 世界;非 OP 玩家不能从 PVP 世界跨世界传送离开 |
| 指令限制 | 非 OP 玩家在 PVP 世界只能使用配置的指令前缀,其他指令会被拦截 |
| 当前声望 | 击杀时增加、死亡时扣除,可通过管理指令给予、扣除或直接设置 |
| 累计声望 | 只随声望增加而增长,用于称号区间、属性和奖励判断,也可通过管理指令调整 |
| 声望上限 | 当前声望和累计声望最高不会超过阵营已配置称号区间中的最大值 |
| 每日获取额度 | 每个阵营可配置默认额度和权限额度;匹配多个额度时使用数值最高的一项 |
| 每日刷新 | 按服务器默认时区判断跨日,并刷新玩家当天剩余可获取声望 |
| 每日首杀 | 玩家每天首次击杀敌对玩家时,执行所属阵营配置的首杀指令 |
| 称号奖励 | 累计声望首次达到称号区间起点时,可执行该区间的配置指令 |
| 阵营属性 | 玩家可同时获得所属阵营的基础属性和当前称号区间的附加属性 |
| 随机死亡掉落 | 从背包前 36 个槽位中筛选包含指定 Lore 的物品,再按世界配置随机掉落指定数量的格子 |
| 必定死亡掉落 | 包含独立必掉 Lore 的物品不受世界随机掉落数量限制,会直接掉落 |
| 异常死亡处理 | 在开放时间内自然死亡、环境死亡等无击杀者死亡同样会扣除当前声望并处理掉落 |
| 战场退出掉落 | 玩家在开放时间内从 PVP 世界退出服务器时,会执行无击杀者掉落处理 |
| 本地数据保护 | YAML 数据保存时使用临时文件替换和 .bak 备份;主文件损坏时会尝试从备份恢复 |
| 自动保存 | 玩家数据发生变化后,由异步任务保存;退出、被踢出和插件关闭时也会保存数据 |
| MySQL 存储 | 可使用 HikariCP 连接 MySQL,并在以插件名命名的数据表中保存玩家数据 |
| PAPI 变量 | 可显示阵营、称号、当前声望、累计声望、每日额度和首杀状态 |
战斗判定
在配置的 PVP 世界内,玩家攻击会依次检查以下条件:
- 攻击者与目标玩家的数据已经加载。
- 攻击者已经加入有效阵营。
- 目标玩家已经加入有效阵营。
- 攻击者阵营的敌对列表包含目标阵营。
- 当前时间位于该世界配置的 PVP 开放时间内。
任一条件不满足时,本次玩家伤害会被取消。无阵营和非开放时间的提示可以在 config.yml 中修改。
声望与称号
插件分别保存两种声望:
| 类型 | 用途 | 变化规则 |
|---|---|---|
| 当前声望 | 记录玩家当前可用的阵营声望 | 击杀敌对玩家时增加,死亡时扣除 |
| 累计声望 | 判断称号、属性和累计进度 | 当前声望增加时同步增加,普通死亡扣分不会减少累计声望 |
称号区间支持范围值和固定值:
1-1000表示累计声望处于 1 至 1000 时匹配。1000表示只有累计声望等于 1000 时匹配。- 阵营累计声望上限取所有已配置区间中的最大结束值。
- 玩家首次从区间起点以下提升到区间起点或以上时,执行该称号的
command。 - 称号指令支持
{tag}、PlaceholderAPI 变量以及[op]、[console]执行前缀。
退出阵营时,当前声望、累计声望、每日额度和刷新时间会被清空。
死亡掉落
掉落系统只在配置的 PVP 世界且处于 PVP 开放时间时生效。
| 掉落类型 | 匹配配置 | 处理方式 |
|---|---|---|
| 随机掉落 | force-drop-item-lore | 从匹配物品的背包格子中随机选择,数量由世界的 force-drop-item-amount 决定 |
| 独立必掉 | independent-of-the-world-force-drop-item-lore | 所有匹配物品直接掉落,不受世界随机掉落数量影响 |
Lore 使用包含匹配,而不是要求整行完全相同。随机掉落按背包格子计算,一个格子中的整组物品会一起掉落。插件会向死亡玩家显示掉落物名称与数量;被玩家击杀时还可显示击杀者和击杀者阵营。
指令
主命令为 /lyzy。代码没有定义独立权限节点,所有管理子命令均通过 OP 状态判断,目标玩家必须在线且玩家数据已经加载。
| 指令 | 作用 | 使用条件 |
|---|---|---|
/lyzy | 查看管理指令帮助 | OP |
/lyzy reload | 重载配置、阵营、PVP 世界、变量默认文本和自动保存任务 | OP |
/lyzy tp 玩家 世界名 | 将指定玩家传送到目标 PVP 世界中所属阵营的重生点 | OP;玩家在线、有阵营,世界和阵营重生点均已配置 |
/lyzy setcamp 玩家 阵营 | 设置指定玩家的阵营 | OP;玩家在线,阵营必须存在 |
/lyzy setcamp 玩家 null | 强制指定玩家退出阵营并清空声望数据 | OP;玩家在线 |
/lyzy givec 玩家 数值 | 增加指定玩家的累计声望 | OP;数值必须为整数 |
/lyzy takec 玩家 数值 | 扣除指定玩家的累计声望 | OP;数值必须为整数 |
/lyzy setc 玩家 数值 | 设置指定玩家的累计声望 | OP;数值必须为整数 |
/lyzy given 玩家 数值 | 增加指定玩家的当前声望,并应用每日额度与声望上限 | OP;数值必须为整数 |
/lyzy taken 玩家 数值 | 扣除指定玩家的当前声望,最低为 0 | OP;数值必须为整数 |
/lyzy setn 玩家 数值 | 设置指定玩家的当前声望,并应用每日额度与声望上限 | OP;数值必须为整数 |
提示
插件没有提供玩家自行加入或退出阵营的命令。可以使用菜单插件封装后台指令 /lyzy setcamp 玩家 阵营 与 /lyzy setcamp 玩家 null。
PlaceholderAPI 变量
安装 PlaceholderAPI 后,可使用以下变量:
| 变量 | 返回内容 |
|---|---|
%lyzy_camp% | 玩家当前阵营;无阵营时返回 placeholder.no-camp |
%lyzy_tag% | 当前累计声望匹配的称号;未匹配时返回 placeholder.no-tag |
%lyzy_max_cumulative_prestige% | 所属阵营的累计声望上限 |
%lyzy_cumulative_prestige% | 当前累计声望 |
%lyzy_now_prestige% | 当前声望 |
%lyzy_today_prestige% | 当天剩余可获取声望 |
%lyzy_max_today_prestige% | 根据玩家权限计算出的每日声望上限 |
%lyzy_first_kill% | 当天首杀是否尚未完成 |
变量返回文本、默认值和更多说明见插件变量。
主要配置范围
插件的主要设置位于 plugins/LyCamp/config.yml。
| 配置分组 | 作用 |
|---|---|
placeholder | 设置无阵营、无称号和首杀状态的变量文本 |
attribute-plugin | 选择属性插件;修改后需要重启服务器 |
message | 设置加入、退出、声望、传送和战斗限制提示 |
mysql | 设置 MySQL 开关和连接信息;切换存储模式需要重启服务器 |
force-drop-item-lore | 设置参与世界随机掉落的物品 Lore |
independent-of-the-world-force-drop-item-lore | 设置不受随机掉落数量限制的必掉物品 Lore |
pvp-world | 设置 PVP 世界、开放时间、重生点、声望、掉落和允许指令 |
camp | 设置阵营属性、敌对关系、称号区间、每日额度和首杀指令 |
完整配置键、默认行为和 YAML 结构见配置说明。
数据存储
本地 YAML
mysql.enable 为 false 时,玩家数据保存在:
text
plugins/LyCamp/data/玩家UUID.yml每个玩家文件包含阵营、累计声望、当前声望、当天剩余额度、上次每日刷新时间和上次击杀时间。保存时会保留 .bak 备份,并在主文件损坏时尝试恢复。
MySQL
mysql.enable 为 true 时,插件连接配置的 MySQL 数据库,并创建名为 LyCamp 的数据表。玩家名称用于查询记录,玩家数据以 YAML 字符串形式保存在 data 字段中。
危险
MySQL 模式不能只填写数据库地址。必须同时安装 LyMySQLCore,确保该插件已经连接数据库,并确认 LyCamp 自身数据库连接成功。数据库未连接完成时,LyCamp 会阻止玩家登录。
配置生效方式
| 改动 | 生效方式 |
|---|---|
| 阵营、敌对关系、称号、世界、时间、提示和掉落规则 | 执行 /lyzy reload |
attribute-plugin | 重启服务器 |
mysql.enable | 重启服务器 |
| MySQL 连接信息 | 建议重启服务器并确认数据库连接成功 |
执行 /lyzy reload 时,插件会重新加载阵营和 PVP 世界,重新读取变量文本,并重启自动保存与每日检查任务。重载不会重新注册启动阶段才选择的数据监听器,因此不应通过重载切换 YAML 与 MySQL 存储模式。
页面导航
| 页面 | 内容 |
|---|---|
| 配置说明 | config.yml 全部配置分组、配置键和 YAML 结构 |
| 玩法机制 | 战斗判定、声望、首杀、掉落、传送、刷新和保存机制 |
| 指令用法 | /lyzy 管理指令、参数要求和限制 |
| 插件变量 | PlaceholderAPI 变量、返回值和默认文本 |
| 常见问题 | PVP 伤害、世界进出、属性、数据与数据库排查 |
| 更新日志 | 插件与文档更新记录 |