- 版权类型
- 原创
- 插件中文名称
- 战斗防丢物
- 插件英文名称
- CombatProtectPlugin
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- Purpur
- 语言支持
- 多语言
- 前置组件
- 无
- 适配版本(Java)
- 最新版本
- 1.21
- 1.20
================================================================
CombatProtectPlugin —— 战斗防丢物插件 
================================================================
在玩家战斗时,保护手中物品不被误丢;战斗结束 5 秒后自动解除保护。
版本: 1.0.0
兼容: Paper 1.20.1 ~ 1.21.4
作者: yzmtcd
================================================================
为什么需要这个插件
================================================================
PvP 和 PvE 服务器里,玩家在激烈战斗中误按 Q 键丢掉手中武器或
珍稀物品的情况屡见不鲜。一旦物品落地,往往被怪物踢飞、被岩浆
吞没,或者被对手顺手捡走。玩家事后追悔莫及,管理员也频繁收到
申诉。
CombatProtectPlugin 从源头解决这个问题:战斗状态下锁定 Q 键
丢弃,但不影响背包内的正常整理操作。
================================================================
核心功能 
================================================================
[1] 战斗状态检测
----------------------------------------------------------------
插件监听 EntityDamageByEntityEvent 事件,覆盖以下战斗场景:
玩家用近战武器攻击怪物
玩家攻击其他玩家(PvP)
玩家被怪物攻击
弓箭、三叉戟等投射物命中目标
只要玩家作为攻击者或受害者参与以上任何一种伤害事件,即进入
战斗状态。
[2] 智能丢弃拦截
----------------------------------------------------------------
进入战斗状态后:
按 Q 键丢弃主手/副手物品
=> 拦截,动作栏提示"战斗中无法丢弃手中的物品!"
打开背包(E 键)从背包格子拖拽物品到外界丢弃
=> 允许,这是正常的背包整理操作
打开箱子、工作台等容器时操作
=> 不受影响
判断逻辑基于检测玩家光标上是否有物品(getItemOnCursor()),
能准确区分"手中丢弃"与"背包内拖拽"两种行为。
[3] 战斗计时与状态延续
----------------------------------------------------------------
进入战斗后开始计时,默认 5 秒倒计时
如果在 5 秒内再次发生战斗行为,计时器刷新,战斗状态持续
连续战斗场景下,状态不会中途断开
直到 5 秒内无任何战斗发生,才正式解除保护
[4] 屏幕提示
----------------------------------------------------------------
战斗进行中,动作栏实时显示倒计时:
[MD] ⚔ 战斗状态 | 剩余 3 秒 [/MD]
战斗结束时,屏幕中央以 Title 大字提示:
[MD] ✔ 战斗结束 你可以安全地丢弃物品了 [/MD]
[5] 全部文本可自定义
----------------------------------------------------------------
所有提示文字均存放在语言文件中,服务器管理员可直接编辑,无需
修改代码或重新编译:
lang/zh_CN.yml 简体中文(默认)
lang/en_US.yml English
支持自定义语言文件:在 lang/ 目录下新建 xx_YY.yml,然后在
config.yml 中切换即可。
================================================================
安装方法
================================================================
将 CombatProtectPlugin-1.0.0.jar 放入服务器的
plugins/ 文件夹
启动(或重启)服务器
插件自动生成配置文件和语言文件:
plugins/CombatProtectPlugin/config.yml
plugins/CombatProtectPlugin/lang/zh_CN.yml
plugins/CombatProtectPlugin/lang/en_US.yml
根据需要修改配置后,执行 /combatprotect reload 热重载
================================================================
配置文件说明
================================================================
config.yml 内容如下:
[MD] ```yaml # 战斗结束后需要等待的秒数(无战斗行为后才解除战斗状态) combat-timeout: 5 # 语言设置(zh_CN / en_US / 自定义) language: zh_CN # 战斗状态显示方式(actionbar / none) display-mode: actionbar # 战斗结束时是否使用 Title 大字显示 show-combat-end-title: true ``` [/MD]
lang/zh_CN.yml 可自由修改所有文本,内容如下:
[MD] ```yaml combat-status: "&c⚔ 战斗中!请勿丢弃物品!" combat-ended-title: "&a✔ 战斗结束" combat-ended-subtitle:"&7你可以安全地丢弃物品了" drop-denied: "&c⚠ 战斗中无法丢弃手中的物品!" combat-actionbar: "&c⚔ 战斗状态 &7| &f剩余 &e{time}&f 秒" ``` [/MD]
说明:&c &a &7 &f 等是 Minecraft 颜色代码,对应:
&c = 红色
&a = 绿色
&7 = 灰色
&f = 白色
&e = 黄色 修改时保留这些代码即可改变游戏内文字颜色。
================================================================
命令与权限
================================================================
[MD] | 命令 | 权限 | 说明 | |------|------|------| | `/combatprotect reload` | `combatprotect.reload`(OP 默认拥有) | 热重载配置和语言文件 | | `/cp reload` | 同上 | 简写别名 | | `/combatp reload` | 同上 | 简写别名 | [/MD]
================================================================
版本兼容
================================================================
[MD] | 项目 | 说明 | |------|------| | 服务端 | Paper 1.20.1 ~ 1.21.4(兼容 Spigot 派生服务端) | | API 版本 | `api-version: '1.21'` | | Java | 17 及以上(1.21.4 服务端需 Java 21) | [/MD]
插件使用 Adventure API 的 Component 处理消息显示,使用长期稳定
的事件 API(PlayerDropItemEvent、EntityDamageByEntityEvent),
确保在 1.20.1 到 1.21.4 之间无需修改即可运行。主要在 1.21.4
服务器上测试验证。
================================================================
已知行为
================================================================
玩家死亡时,Paper 1.20.2+ 会额外触发 PlayerDropItemEvent,
插件已做安全处理,不会影响死亡掉落逻辑
战斗状态下退出服务器,战斗状态自动清除,不影响下次登录
插件不处理玩家死亡后的物品掉落,仅拦截主动丢弃行为
================================================================
更新日志
================================================================
v1.0.0
----------------------------------------------------------------
首个正式版本
实现战斗状态检测(近战、投射物、PvP、PvE)
实现智能丢弃拦截(允许背包内拖拽,拦截 Q 键丢弃)
实现战斗计时器(5 秒续期机制)
实现动作栏倒计时显示与 Title 战斗结束提示
支持中英双语,语言文件可自由修改
兼容 Paper 1.20.1 ~ 1.21.4
================================================================
文件清单
================================================================
本压缩包包含以下文件:
CombatProtectPlugin-1.0.0.jar 编译后的插件(放入 plugins/)
CombatProtectPlugin-MineBBS.txt 本说明文档
source/ 完整源码目录
源码目录结构:
[MD] ``` source/ ├── pom.xml Maven 构建配置 ├── README.md 源码说明 └── src/main/ ├── java/com/combatprotect/ │ ├── CombatProtectPlugin.java 插件主类 │ ├── CombatManager.java 战斗状态管理器 │ ├── language/ │ │ └── LanguageManager.java 多语言文件管理器 │ └── listeners/ │ └── CombatListener.java 战斗事件监听器 └── resources/ ├── plugin.yml 插件描述文件 ├── config.yml 默认配置文件 └── lang/ ├── zh_CN.yml 简体中文语言文件 └── en_US.yml 英文语言文件 ``` [/MD]
================================================================
================================================================
================================================================
================================================================
PvP 和 PvE 服务器里,玩家在激烈战斗中误按 Q 键丢掉手中武器或
珍稀物品的情况屡见不鲜。一旦物品落地,往往被怪物踢飞、被岩浆
吞没,或者被对手顺手捡走。玩家事后追悔莫及,管理员也频繁收到
申诉。
CombatProtectPlugin 从源头解决这个问题:战斗状态下锁定 Q 键
丢弃,但不影响背包内的正常整理操作。
================================================================
================================================================
----------------------------------------------------------------
插件监听 EntityDamageByEntityEvent 事件,覆盖以下战斗场景:
只要玩家作为攻击者或受害者参与以上任何一种伤害事件,即进入
战斗状态。
----------------------------------------------------------------
进入战斗状态后:
=> 拦截,动作栏提示"战斗中无法丢弃手中的物品!"
=> 允许,这是正常的背包整理操作
=> 不受影响
判断逻辑基于检测玩家光标上是否有物品(getItemOnCursor()),
能准确区分"手中丢弃"与"背包内拖拽"两种行为。
----------------------------------------------------------------
----------------------------------------------------------------
战斗进行中,动作栏实时显示倒计时:
[MD] ⚔ 战斗状态 | 剩余 3 秒 [/MD]
战斗结束时,屏幕中央以 Title 大字提示:
[MD] ✔ 战斗结束 你可以安全地丢弃物品了 [/MD]
----------------------------------------------------------------
所有提示文字均存放在语言文件中,服务器管理员可直接编辑,无需
修改代码或重新编译:
支持自定义语言文件:在 lang/ 目录下新建 xx_YY.yml,然后在
config.yml 中切换即可。
================================================================
================================================================
plugins/ 文件夹
================================================================
================================================================
[MD] ```yaml # 战斗结束后需要等待的秒数(无战斗行为后才解除战斗状态) combat-timeout: 5 # 语言设置(zh_CN / en_US / 自定义) language: zh_CN # 战斗状态显示方式(actionbar / none) display-mode: actionbar # 战斗结束时是否使用 Title 大字显示 show-combat-end-title: true ``` [/MD]
[MD] ```yaml combat-status: "&c⚔ 战斗中!请勿丢弃物品!" combat-ended-title: "&a✔ 战斗结束" combat-ended-subtitle:"&7你可以安全地丢弃物品了" drop-denied: "&c⚠ 战斗中无法丢弃手中的物品!" combat-actionbar: "&c⚔ 战斗状态 &7| &f剩余 &e{time}&f 秒" ``` [/MD]
================================================================
================================================================
[MD] | 命令 | 权限 | 说明 | |------|------|------| | `/combatprotect reload` | `combatprotect.reload`(OP 默认拥有) | 热重载配置和语言文件 | | `/cp reload` | 同上 | 简写别名 | | `/combatp reload` | 同上 | 简写别名 | [/MD]
================================================================
================================================================
[MD] | 项目 | 说明 | |------|------| | 服务端 | Paper 1.20.1 ~ 1.21.4(兼容 Spigot 派生服务端) | | API 版本 | `api-version: '1.21'` | | Java | 17 及以上(1.21.4 服务端需 Java 21) | [/MD]
的事件 API(PlayerDropItemEvent、EntityDamageByEntityEvent),
确保在 1.20.1 到 1.21.4 之间无需修改即可运行。主要在 1.21.4
服务器上测试验证。
================================================================
================================================================
插件已做安全处理,不会影响死亡掉落逻辑
================================================================
================================================================
----------------------------------------------------------------
================================================================
================================================================
本压缩包包含以下文件:
[MD] ``` source/ ├── pom.xml Maven 构建配置 ├── README.md 源码说明 └── src/main/ ├── java/com/combatprotect/ │ ├── CombatProtectPlugin.java 插件主类 │ ├── CombatManager.java 战斗状态管理器 │ ├── language/ │ │ └── LanguageManager.java 多语言文件管理器 │ └── listeners/ │ └── CombatListener.java 战斗事件监听器 └── resources/ ├── plugin.yml 插件描述文件 ├── config.yml 默认配置文件 └── lang/ ├── zh_CN.yml 简体中文语言文件 └── en_US.yml 英文语言文件 ``` [/MD]
================================================================