Skip to content

指令用法

LyCamp 是一个以阵营对抗为核心的 PVP 插件。玩家加入阵营后,可以在指定 PVP 世界内与敌对阵营玩家战斗,通过击杀获得当前声望和累计声望,并根据累计声望获得称号与阵营属性。

插件使用 /lyzy 作为主命令。项目以 Paper API 1.16.5-R0.1-SNAPSHOT 编译,代码与构建目标使用 Java 8。项目未在 plugin.yml 中声明命令权限,当前指令实现统一要求发送者为 OP。

依赖与兼容

项目说明
Paper API项目编译目标为 1.16.5-R0.1-SNAPSHOT
PlaceholderAPI可选。用于提供 LyCamp 变量,也用于处理部分指令和称号命令中的 PlaceholderAPI 变量。
ProtocolLib可选。安装后启用更底层的玩家攻击拦截;未安装时仍会使用 Bukkit 伤害事件处理 PVP 逻辑。
属性插件可选。支持 AttributePlusSX-Attribute2SX-Attribute3AttributeSystemItemLoreOrigin
LyMySQLCore使用 MySQL 存储时必须安装,并且必须成功连接数据库;否则 MySQL 存储和相关玩家数据功能不会生效。

attribute-plugin 修改后需要重启服务器才能切换属性插件。

指令总览

<> 表示必填参数。玩家名称、阵营名称和世界名称必须使用当前服务器中的实际名称。

指令权限说明
/lyzyOP查看指令帮助。
/lyzy reloadOP重载配置、阵营、PVP 世界和 PlaceholderAPI 变量默认文本,同时重新启动自动保存与每日刷新任务。
/lyzy tp <玩家> <世界名>OP将在线玩家传送到指定 PVP 世界中该玩家所属阵营的重生点。
/lyzy setcamp <玩家> <阵营>OP设置在线玩家的阵营。阵营必须已在 camp 配置中定义。
/lyzy setcamp <玩家> nullOP让玩家退出阵营,并清空当前声望、累计声望、今日声望额度和每日刷新记录。
/lyzy givec <玩家> <值>OP增加玩家的累计声望。
/lyzy takec <玩家> <值>OP扣除玩家的累计声望。
/lyzy setc <玩家> <值>OP设置玩家的累计声望。
/lyzy given <玩家> <值>OP增加玩家的当前声望,同时增加累计声望并扣除今日可获得额度。
/lyzy taken <玩家> <值>OP扣除玩家的当前声望,不返还今日可获得额度,也不会扣除累计声望。
/lyzy setn <玩家> <值>OP设置玩家的当前声望。增加时会受到今日额度、当前声望上限和累计声望上限限制。

所有涉及玩家的指令都要求目标玩家在线,并且玩家数据已经加载完成。

基础指令

查看帮助

text
/lyzy

只有 OP 执行时会显示帮助内容。未验证完成时,插件客户端部分仅显示重载提示;验证通过后由核心模块注册完整指令处理逻辑。

重载配置

text
/lyzy reload

重载内容包括:

  • config.yml
  • camp 阵营配置;
  • pvp-world PVP 世界配置;
  • PlaceholderAPI 变量默认文本;
  • 自动保存任务;
  • 每日声望额度刷新任务。

如果修改了 attribute-plugin,不能只执行重载,需要重启服务器。

设置阵营

text
/lyzy setcamp <玩家> <阵营>
/lyzy setcamp <玩家> null

加入已配置阵营时,玩家会收到加入阵营提示,并开始使用该阵营的数据。

退出阵营时,插件会清空以下数据:

  • 当前声望;
  • 累计声望;
  • 今日可获得声望额度;
  • 每日刷新时间记录。

退出阵营不会删除阵营配置,也不会影响其他玩家。

传送到 PVP 世界

text
/lyzy tp <玩家> <世界名>

该指令会检查:

  1. 玩家在线且数据已加载;
  2. 玩家拥有阵营;
  3. 世界已经配置在 pvp-world 中;
  4. 该 PVP 世界存在玩家所属阵营的重生点。

满足条件后,玩家会被传送到对应阵营的重生点。该指令使用配置中的重生点,不是普通世界出生点。

声望指令

LyCamp 保存三类与声望相关的数据:累计声望、当前声望和今日可获得额度。

累计声望

累计声望用于判断累计声望区间、称号、称号属性和称号首次达成指令。累计声望上限取当前阵营 prestige 配置区间中的最大值。

指令处理方式
/lyzy givec <玩家> <值>增加累计声望,不能通过负数减少;超过阵营上限时按上限处理。
/lyzy takec <玩家> <值>扣除累计声望,最低为 0
/lyzy setc <玩家> <值>直接设置累计声望,低于 0 时按 0 处理,超过阵营上限时按上限处理。

累计声望增加并跨过某个 prestige 区间的起始值时,会执行该区间的 command。降低累计声望不会重复执行称号指令。

当前声望

当前声望是玩家当前可使用的阵营声望。当前声望的增加会同步增加累计声望,并消耗今日可获得额度;当前声望的扣除只影响当前声望。

指令处理方式
/lyzy given <玩家> <值>增加当前声望,同时增加累计声望并消耗今日可获得额度。
/lyzy taken <玩家> <值>扣除当前声望,最低为 0
/lyzy setn <玩家> <值>设置当前声望。目标值高于当前值时按增加处理,低于当前值时按扣除处理。

增加当前声望时同时受到以下限制:

  • 今日剩余额度不能为 0
  • 当前声望不能超过阵营累计声望区间的最大值;
  • 累计声望不能超过阵营上限;
  • 实际增加值可能小于指令中的目标值或增加值。

今日额度按服务器默认时区的每日 0 点刷新。阵营可以通过 every-day-max-get-prestage-value 为默认值或拥有指定权限的玩家配置不同额度。

PVP 世界机制

pvp-world 中配置的世界会启用 LyCamp 的 PVP 世界规则。

阵营对战

攻击发生在已配置的 PVP 世界时,插件会检查:

  • 攻击者和目标的玩家数据是否已加载;
  • 攻击者是否拥有有效阵营;
  • 目标是否拥有有效阵营;
  • 目标阵营是否属于攻击者阵营的 hostiles
  • 当前时间是否处于该世界的 PVP 时间段。

未通过检查时,攻击会被取消。无阵营玩家不能在该 PVP 世界内正常攻击或受到阵营 PVP 伤害。

PVP 时间段

pvp-start-timepvp-end-time 使用 Quartz 六字段 Cron 表达式:

yaml
pvp-start-time: '0 0 9 * * ?'
pvp-end-time: '0 0 18 * * ?'

示例配置表示每天 09:0018:00 之间开放阵营 PVP。非开放时间攻击玩家会被取消,并发送 not-pvp-message 中配置的消息。

进入与离开世界

must-have-camp-to-teleporttrue 时,没有阵营或没有对应重生点的玩家不能传送进入该 PVP 世界。

从 PVP 世界传送到其他世界时,非 OP 玩家会被阻止。配置注释中说明,玩家在 PVP 世界内通常不能自行传出;需要由 OP 使用指令强制传送。

PVP 世界内的指令限制

非 OP 玩家在 PVP 世界内默认不能使用指令。只有以 allow-command 中配置的字符串开头的指令可以使用。

yaml
allow-command:
  - '/say'

该配置按指令前缀匹配,不是权限列表。OP 不受此限制。

击杀、死亡与掉落

声望变化

在 PVP 时间内于配置的 PVP 世界击杀敌对阵营玩家时:

  • 击杀者增加 kill-give-prestige 配置值的当前声望;
  • 增加当前声望时同步增加累计声望,并消耗今日额度;
  • 被击杀者扣除 dead-take-prestige 配置值的当前声望;
  • 击杀者当天第一次击杀敌对阵营玩家时,执行所属阵营的 every-day-first-kill-run-command
  • 击杀记录按服务器默认时区的日期判断。

非击杀方式死亡或在 PVP 世界内退出游戏时,在 PVP 时间内会执行死亡掉落处理,并扣除配置的当前声望。

强制掉落物品

force-drop-item-lore 用于筛选可能被强制掉落的背包物品。插件会检查玩家背包前 36 个格子,只要物品 Lore 中包含配置文本,就会进入候选列表。

随后按照 force-drop-item-amount 随机选择物品掉落。该数量按背包格子计算,选中的格子中的整组物品都会掉落。

yaml
force-drop-item-lore:
  - '&6在PVP地图内死亡可能掉落'

independent-of-the-world-force-drop-item-lore 用于配置必定掉落的物品。匹配到的物品不受 force-drop-item-amount 数量限制,只要符合 Lore 就会掉落。

yaml
independent-of-the-world-force-drop-item-lore:
  - '&6在PVP地图内死亡&c必定&6掉落'

击杀死亡和异常死亡使用不同的掉落提示:

配置键使用场景
drop-item-message玩家被其他玩家击杀。支持 {killer}{camp}
abnormal-death-drop-item-message玩家意外死亡或在 PVP 世界内退出游戏。

掉落物提示中的物品会逐项列出。必定掉落的物品会额外显示“必定掉落”标识。

配置文件

配置文件为 plugins/LyCamp/config.yml。以下配置键均来自项目默认配置或代码读取逻辑。

placeholder

用于配置 PlaceholderAPI 变量在无有效数据时的返回文本。

配置键说明
placeholder.no-camp无阵营时显示的文本。
placeholder.no-tag无称号时显示的文本。
placeholder.has-first-kill今日首杀尚未完成时显示的文本。
placeholder.not-first-kill今日首杀已经完成时显示的文本。

attribute-plugin

用于选择属性接入方式,可填写以下值:

属性插件
AttributePlusAttributePlus。
SX-Attribute2SX-Attribute2。
SX-Attribute3SX-Attribute3。
AttributeSystemAttributeSystem。
ItemLoreOriginItemLoreOrigin。
空字符串不接入上述属性插件。

阵营基础属性和累计声望区间属性会合并后同步到所选属性插件。

message

用于配置加入阵营、声望变化、PVP 限制和传送限制等消息。支持的消息键如下:

配置键说明
message.join-camp加入阵营提示,支持 {camp}
message.quit-camp退出阵营提示,支持 {camp}
message.give-prestige获得当前声望提示,支持 {value}{today_value}
message.take-prestige失去当前声望提示,支持 {value}
message.today-max-prestige今日额度达到上限时提示。
message.cumulative-max-prestige累计声望达到上限时提示,支持 {value}
message.target-not-camp目标没有有效阵营时提示。
message.player-not-camp攻击者没有有效阵营时提示。
message.must-have-camp-to-teleport无法进入 PVP 世界时提示。
message.allow-commandPVP 世界内禁止使用指令时提示。

消息使用 & 颜色代码,发送给玩家时会转换为 Minecraft 颜色代码。

mysql

用于启用 MySQL 玩家数据存储。开启或关闭数据库需要重启服务器。

yaml
mysql:
  enable: false
  databasename: mc2
  username: mc2
  password: mc1234
  port: 3306
  ip: 127.0.0.1
配置键说明
mysql.enable是否启用 MySQL 存储。
mysql.databasename数据库名称。
mysql.username数据库用户名。
mysql.password数据库密码。
mysql.port数据库端口。
mysql.ip数据库地址。

必须安装 LyMySQLCore,并且 LyMySQLCore 成功连接数据库后,MySQL 玩家数据加载与保存才会生效。连接失败时,配置了 MySQL 的服务器会阻止玩家进入。

关闭 MySQL 后,玩家数据会保存到:

text
plugins/LyCamp/data/<玩家UUID>.yml

pvp-world

每个键代表一个 PVP 世界名称。

yaml
pvp-world:
  'pvp_world':
    force-drop-item-amount: 2
    drop-item-message:
      - '&7您被 &c{camp} &7阵营的 &c{killer} &7所击杀, 您身上的如下物品已掉落在地:'
    abnormal-death-drop-item-message:
      - '&7您意外死亡或离线, 您身上的如下物品已掉落在地:'
    pvp-start-time: '0 0 9 * * ?'
    pvp-end-time: '0 0 18 * * ?'
    not-pvp-message:
      - '&7不在可PVP时间内,无法造成伤害!'
    respawn-location:
      潜伏者: '100,100,100,0,0'
      保卫者: '-100,100,-100,0,0'
    kill-give-prestige: 1
    dead-take-prestige: 1
    must-have-camp-to-teleport: true
    allow-command:
      - '/say'
配置键说明
pvp-world.<世界名>.force-drop-item-amount被筛选为可能掉落的物品中,随机掉落的背包格子数量。
pvp-world.<世界名>.drop-item-message被玩家击杀时的掉落提示,支持 {killer}{camp}
pvp-world.<世界名>.abnormal-death-drop-item-message非玩家击杀或退出游戏时的掉落提示。
pvp-world.<世界名>.pvp-start-timePVP 开始时间,使用 Quartz 六字段 Cron 表达式。
pvp-world.<世界名>.pvp-end-timePVP 结束时间,使用 Quartz 六字段 Cron 表达式。
pvp-world.<世界名>.not-pvp-message非 PVP 时间攻击玩家时发送的消息列表。
pvp-world.<世界名>.respawn-location.<阵营>阵营重生点,格式为 x,y,z,yaw,pitch
pvp-world.<世界名>.kill-give-prestige击杀敌对阵营玩家时增加的当前声望。
pvp-world.<世界名>.dead-take-prestige死亡时扣除的当前声望。
pvp-world.<世界名>.must-have-camp-to-teleport是否要求玩家拥有阵营和对应重生点才能进入世界。
pvp-world.<世界名>.allow-commandPVP 世界内允许使用的指令前缀列表。

配置注释中使用的 <世界名><阵营> 仅表示配置路径中的替换部分,实际填写时不要保留尖括号。

camp

每个键代表一个阵营名称。

yaml
camp:
  潜伏者:
    attribute:
      - '攻击力+5'
    hostiles:
      - '保卫者'
    prestige:
      1-1000:
        tag: '&6潜伏者新人'
        attribute:
          - '攻击力+10'
        command:
          - '[console]tell %player_name% 你获得了称号: {tag}'
    every-day-max-get-prestage-value:
      default: 1000
      vip_1: 2000
    every-day-first-kill-run-command:
      - '[console]tell %player_name% 你第一次击杀了敌对玩家'
配置键说明
camp.<阵营>.attribute加入阵营后获得的基础属性列表。
camp.<阵营>.hostiles允许在 PVP 世界内攻击的敌对阵营列表。
camp.<阵营>.prestige累计声望区间、称号、区间属性和首次达到区间时执行的指令。
camp.<阵营>.every-day-max-get-prestage-value每日可获得声望额度。
camp.<阵营>.every-day-first-kill-run-command每日首次击杀敌对阵营玩家时执行的指令列表。

prestige 区间

区间键可以使用 最小值-最大值,也可以使用单个数字。区间中的配置键如下:

配置键说明
tag该累计声望区间对应的称号。
attribute处于该累计声望区间时获得的属性列表。
command玩家首次达到该区间时执行的指令列表。

command 支持以下前缀:

前缀执行方式
[op]临时以 OP 身份执行玩家指令。
[console]以控制台身份执行指令。
无前缀以玩家身份执行指令。

指令会先处理 PlaceholderAPI 变量,并支持 {tag} 替换为当前区间称号。

每日额度

every-day-max-get-prestage-value 的默认额度为 1000。除 default 外的键会转换为权限节点:配置键中的下划线 _ 会替换为点号 .

yaml
every-day-max-get-prestage-value:
  default: 1000
  vip_1: 2000

上例中,vip_1 对应权限 vip.1。玩家拥有该权限且其额度高于默认值时,使用该额度。

PlaceholderAPI 变量

安装并启用 PlaceholderAPI 后,LyCamp 注册的变量前缀为 lyzy

变量格式如下:

text
%lyzy_<变量名>%
变量返回内容
%lyzy_camp%当前阵营。无阵营时返回 placeholder.no-camp
%lyzy_tag%当前累计声望区间称号。无阵营、阵营不存在或没有匹配区间时返回 placeholder.no-tag
%lyzy_max_cumulative_prestige%当前阵营的累计声望上限。无有效阵营时返回 0
%lyzy_cumulative_prestige%当前累计声望。无有效阵营时返回 0
%lyzy_now_prestige%当前声望。无有效阵营时返回 0
%lyzy_today_prestige%今日剩余可获得声望额度。无有效阵营时返回 0
%lyzy_max_today_prestige%当前玩家每日可获得声望上限。无有效阵营时返回 0
%lyzy_first_kill%今日首杀状态,文本由 placeholder.has-first-killplaceholder.not-first-kill 配置。

玩家数据尚未加载时,变量请求会返回空字符串。

数据保存

未启用 MySQL 时,玩家数据保存为独立 YAML 文件,路径为:

text
plugins/LyCamp/data/<玩家UUID>.yml

保存字段包括:

字段说明
camp玩家阵营。
cumulative-prestige-value累计声望。
now-prestige-value当前声望。
today-prestige-value今日剩余可获得声望额度。
last-refresh-time上次每日额度刷新时间。
last-kill-time上次完成每日首杀的时间。

启用 MySQL 后,数据写入 LyCamp 对应的数据表,表中保存玩家名称和 YAML 序列化数据。玩家加入、退出、被踢出服务器和服务器关闭时会触发保存;数据发生变化后也会由自动保存任务异步保存。

常见问题

玩家无法进入 PVP 世界

检查以下内容:

  • 玩家是否已经加入阵营;
  • PVP 世界是否已配置在 pvp-world 下;
  • 玩家所属阵营是否配置了该世界的 respawn-location
  • must-have-camp-to-teleport 是否为 true
  • 玩家数据是否已经加载完成。

玩家无法攻击目标

检查以下内容:

  • 攻击者和目标是否都有有效阵营;
  • 目标阵营是否位于攻击者阵营的 hostiles 列表;
  • 当前时间是否在 pvp-start-timepvp-end-time 之间;
  • 当前世界名称是否与 pvp-world 下的配置键完全一致。

MySQL 已开启但玩家数据功能不生效

LyCamp 的 MySQL 模式必须同时满足以下条件:

  1. 已安装 LyMySQLCore;
  2. LyMySQLCore 已成功连接数据库;
  3. mysql.enable 已设置为 true
  4. 数据库地址、端口、库名、用户名和密码正确;
  5. 重启服务器使数据库模式生效。

如果数据库未连接成功,LyCamp 会阻止玩家进入服务器,并在控制台输出连接失败信息。

当前声望增加后为什么累计声望也增加

当前声望的增加会同步增加累计声望,并消耗今日可获得额度。这是 givensetn 增加值和 PVP 击杀奖励的统一处理逻辑。

退出阵营后数据是否保留

不保留。执行 /lyzy setcamp <玩家> null 后,当前声望、累计声望、今日额度和每日刷新记录都会清零。

为什么配置了属性但玩家没有获得

检查以下内容:

  • attribute-plugin 是否填写了受支持的值;
  • 对应属性插件是否已安装并启用;
  • 修改 attribute-plugin 后是否重启服务器;
  • 阵营的 attributeprestige.<区间>.attribute 是否填写正确。

PVP 世界内为什么不能使用指令

非 OP 玩家在 PVP 世界内默认禁止使用所有指令。只有指令文本以 allow-command 中某一项开头时才允许执行,例如配置 /say 后允许以 /say 开头的指令。