- 版权类型
- 原创
- 插件中文名称
- PVP竞技场高版本
- 插件英文名称
- pvp
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- Purpur
- 语言支持
- 中文(简体)
- 前置组件
- multiverse-core https://modrinth.com/plugin/multiverse-core
- 适配版本(Java)
- 26.x
- 1.21
[MD]
# PVP 插件
适用于 **Paper 1.21+ 服务端**(含 1.26.x)的竞技场 / 决斗插件。基于 **Multiverse-Core v5** 动态克隆地图世界,支持装备模板、击杀排行榜、K/D 统计、连杀公告、观战系统。
> 当前版本:**v1.6.1**
---
## ✨ 功能特性
### ⚔️ 竞技场模式(Arena)
- `/pvp create` 保存创建者当前**全部装备**(物品栏 + 盔甲 + **副手** + 末影箱)作为该竞技场的装备模板
- `/pvp join` 自动通过 MV 克隆地图世界 → 传送 → 发放模板装备
- **每 2 名玩家共用一个克隆世界**,第三名玩家自动开启新世界槽
- 双方都离开后自动删除克隆世界(异步 + 重试 + 强制清理,不卡服、不留残骸)
### 🤺 决斗模式(Duel)
- `/duel <玩家> <竞技场>` 发起邀请,**被邀请方可见对方选择的竞技场(模式)**
- 邀请 **1 分钟自动过期**,同一时间可持有/接受**多条邀请**(非 PVP 时)
- 任一方 `/pvp leave` 即结束决斗 → 删除世界 → 恢复双方原背包
### 🏆 排行榜与战绩
- 击杀榜 **TOP3**(🥇🥈🥉)显示在屏幕**右侧计分板**
- 左侧计分板显示个人战绩:累计击杀 / 累计死亡(仅 PVP 内)/ **K/D 比值** / 当前连杀
- 计分板每 3 秒自动刷新,防止被其他插件覆盖
### 🔥 连杀机制
- 连续 **5 杀及 5 的倍数**(5/10/15…)时**全服公告** + 物品栏上方 ActionBar 提示
- 死亡一次连杀归零
### 👁 观战系统(Spectator)
- `/pg <玩家名>` 旁观任意正在 PVP 的玩家(强制旁观模式,无法干扰对局)
- `/pg leave` 返回大厅;被观战者离开/死亡时观战者自动退出
### 🛡 战斗规则(PVP 世界内)
- 进入 PVP 自动:**清空所有药水效果**、满血、满饱食度、灭火、游戏模式锁定生存
- PVP 期间**禁止使用除 `/pvp leave` 外的任何指令**(无 OP 豁免)
- **世界边界 ±50 格**,越界自动拉回
- **随机 A/B 出生点**:两名玩家分处对角,距离 50 格、面朝对方,且始终在边界内
- 彻底屏蔽怪物/动物生成(生成事件三层拦截 + 克隆后清场 + 生成上限归零)
- 玩家战斗实体正常放行:投掷物(雪球/末影珍珠/箭…)、点燃 TNT、末影水晶、矿车、船、掉落物
---
## 📦 依赖
| 依赖 | 说明 |
|------|------|
| **Paper 1.21+** | 服务端(Spigot 亦可,推荐 Paper) |
| **Multiverse-Core v5** | 世界克隆(主类 `org.mvplugins.multiverse.core.MultiverseCore`)。未安装时自动降级为文件系统复制(不推荐) |
---
## 🚀 安装
```bash
# 1. 构建(需要 JDK 21 + Maven)
cd pvp-plugin
mvn clean package -DskipTests
# 产物:target/PVP-<版本>.jar
# 2. 将 jar 放入服务端 plugins/ 目录
# 3. 重启服务端
```
**首次配置:**
```bash
# 创建地图模板世界(Multiverse)
/mv create <地图名> NORMAL
/mv load <地图名>
# 设置大厅世界(/pvp leave 的传送目标,默认 LLL)
/pvp setlobby <世界名>
# 创建竞技场(保存你当前装备作为模板)
/pvp create <竞技场名> <地图名>
```
---
## 📖 命令大全
### /pvp
| 命令 | 权限 | 说明 |
|------|------|------|
| `/pvp create <名字> <地图名>` | **OP** | 创建竞技场,保存当前装备(含副手)为模板;地图名必须是 MV 已加载的世界 |
| `/pvp join <名字>` | 玩家 | 加入竞技场:克隆世界 → 传送 → 发放模板装备 |
| `/pvp leave` | 玩家 | 离开竞技场/结束决斗:恢复背包 → 传送至大厅 → 双方离开后删除克隆世界 |
| `/pvp setlobby <世界名>` | **OP** | 设置离开时传送的大厅世界(持久化,默认 `LLL`) |
| `/pvp settings 装备 <竞技场名>` | **OP** | 用当前装备(含副手)更新指定竞技场的装备模板 |
| `/pvp settings 地图 <竞技场名> <世界名>` | **OP** | 更换指定竞技场的 PVP 地图(MV 世界) |
| `/pvp delete <名字>` | **OP** | 删除竞技场(同时清理其所有克隆世界) |
### /duel
| 命令 | 权限 | 说明 |
|------|------|------|
| `/duel <玩家名> <竞技场名>` | 玩家 | 向在线玩家发起决斗邀请(邀请中显示竞技场/模式) |
| `/duel accept <玩家名>` | 玩家 | 接受指定玩家的邀请(1 分钟内有效,可同时持有多条) |
### /pg(观战)
| 命令 | 权限 | 说明 |
|------|------|------|
| `/pg <玩家名>` | 玩家 | 旁观该玩家的 PVP 对局 |
| `/pg leave` | 玩家 | 离开旁观,返回大厅 |
---
## 🔑 权限
| 权限节点 | 默认 | 说明 |
|---------|------|------|
| `pvp.use` | ✅ true | 所有玩家:`join` / `leave` / `duel` / `pg` |
| `pvp.admin` | OP | 管理命令:`create` / `setlobby` / `settings` / `delete`(同时校验 OP) |
---
## 🗂 数据文件
| 文件 | 说明 |
|------|------|
| `plugins/PVP/arenas.yml` | 竞技场数据:模板世界、装备模板(含副手)、大厅世界、活动世界槽位 |
| `plugins/PVP/stats.yml` | 玩家战绩:累计击杀 / 累计死亡 / K/D / 最高连杀 |
---
## ⚙️ 工作机制详解
### 世界克隆与清理
1. `join`/决斗时调用 MV:`mv clone <模板世界> <新世界名>`(主线程执行,10 秒超时兜底手动 `createWorld`)
2. 新世界命名:竞技场模式 `<竞技场名>_<时间戳>`;决斗模式 `duel_<发起者>_<接受者>_<时间戳>`
3. 克隆完成后:清空所有生物 → 关闭刷怪 → 设置边界 ±50 → 登记为 PVP 世界
4. 双方离开后删除:`unload` 世界 → `mv remove -f` 注销 → 延迟 2 秒 → 异步删文件夹(失败重试 6 次)→ 仍失败则强制清理(跳过被占用的 session.lock 等锁文件)
5. 服务器重启时自动清理上一轮残留的克隆世界(`cleanupLeftoverWorlds`)
### 出生点分配
- 竞技场模式:按世界槽位加入顺序,第 1 人 → A 点,第 2 人 → B 点
- 决斗模式:发起者 → A 点,接受者 → B 点
- A/B 方向每局随机(由世界种子决定,同局稳定),两点相距 50 格、面朝对方、不越界
### 装备模板
- 保存范围:物品栏 36 格 + 盔甲 4 格 + **副手** + 末影箱
- 进入 PVP:备份玩家原背包 → 清空 → 发放模板装备
- 离开 PVP:清空竞技场装备 → 完整归还玩家原背包与末影箱
### 命令封锁
- `PlayerCommandPreprocessEvent` 最低优先级拦截:PVP 中除 `/pvp leave` 外一切指令禁止,**OP 也不例外**
## ❓ 常见问题
**Q:世界创建失败?**
确保 Multiverse-Core v5 已安装且模板世界已加载(`/mv load <地图名>`);插件在 10 秒内轮询世界加载,超时会尝试手动 `createWorld` 兜底。
**Q:克隆世界删不掉?**
v1.6.1 起采用"延迟 + 异步 + 重试 6 次 + 强制清理"策略;若日志仍出现 `无法删除文件: xxx`,通常是被系统进程占用,重启服务端后会自动清理残留世界。
**Q:为什么 PVP 里看不到怪物?**
这是设计行为:PVP 世界禁刷怪、克隆后清场,确保公平对决。
**Q:`/duel accept` 提示没有邀请?**
邀请 1 分钟过期且发起者离线会失效;请确认在有效期内、且输入的是发起者玩家名。
---
## 📌 版本历史
| 版本 | 内容 |
|------|------|
| 1.6.1 | 修复克隆世界删除不彻底(延迟+重试+强制清理) |
| 1.6.0 | 决斗邀请显示模式、1 分钟过期、支持多条邀请 |
| 1.5.x | 放行玩家实体(TNT/末影水晶/矿车/船)、A/B 出生点边界修复、副手保存、生物彻底拦截 |
| 1.2.0 | 装备/地图 settings、击杀榜 TOP3、K/D 计分板、连杀公告 |
| 1.1.0 | 决斗系统、setlobby、命令封锁、进入 PVP 清效果 |
| 1.0.0 | 基础竞技场:create/join/leave、世界克隆与自动清理 |
本插件使用GNU GPL v3.0协议
[/MD]