- 插件中文名称
- CombatX
- 插件英文名称
- CombatX
- 支持的核心
- Bukkit
- Spigot
- Paper
- 资源语言
- 简体中文
- 适配版本
- 1.8
- 1.9
- 1.10
- 1.11
- 1.12
- 1.13
- 1.14
- 1.15
- 1.16
- 1.17
- 1.18
- 1.19
- 1.20
CombatX
亲自测试过的版本: 1.13, 1.18.2
理论上支持: 1.8.9 - 1.20.4
CombatX会使你的战斗管理更加简便。 我们增加了对玩家PVP的各种监控,例如:玩家进入战斗状态、战斗状态持续时间、玩家脱离战斗状态、玩家攻击玩家事件、玩家在战斗中退出事件、玩家死亡事件等。
这个插件的大部分功能都为开发者用作API前置,但部分功能也可以作为功能性插件使用。
关于 配置文件
该插件作为功能性插件的使用方法大部分在config.yml中介绍。
本插件最初在SpigotMC上发布,因此配置文件为英文,你可以使用下面的中文版。
YAML:
#
# 请不要动这个
# 除非控制台中有消息提示你升级config.yml的版本
#
config-version: 1
#
# 我们是否应该在启动插件时检查更新(1.0不起作用)
#
update-checker: true
combat:
#
# 我们应该如何计算战斗状态持续时间?
# - OVERLAY - 这个规则会在玩家当前的战斗状态持续时间上每次攻击时增加2秒,基础值为10秒。
# - STABLE - 固定战斗状态持续时间为10秒。
#
# 你也可以使用API来扩展你想要的规则。
#
combat-duration-calculation-rule: OVERLAY
#
# 在事件触发时执行的操作
# - [message] - 向玩家发送消息,例如 "[message] Hello!"
# - [command-console] - 以控制台身份执行命令,例如 "[command-console] say I'm console!"
# - [command-player] - 以玩家身份执行命令,例如 "[command-player] say I'm fighting!"
# 不需要在命令前加 "/"
# 占位符:
# - {player} - 触发事件的玩家。
#
trigger-combat-status:
action:
- "[message] &c你现在正在战斗状态,请不要离开!"
out-of-combat-status:
action:
- "[message] &a你现在不在战斗状态了。"
combat-status-quit:
action:
- "[command-console] clear {player}"
获得支持
在报告错误之前,请检查你的插件是否是最新的,因为你想要报告的问题可能已在最新版本中修复。
不要忘记留下五星好评awa!
关于API
因为一些原因,我还没有把API上传至中央仓库,所以目前你可以将本体作为本地依赖导入项目。
首先,你可以在根目录创建"libs"文件夹
然后在pom.xml中添加
XML:
<dependencies>
<dependency>
<groupId>net.sparkomc</groupId>
<artifactId>combatx</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/libs/[file name]</systemPath>
</dependency>
</dependencies>
API用法
PlayerCombatStatusEvent - 玩家进入战斗状态事件
PlayerOutOfCombatStatusEvent - 玩家离开战斗状态事件
PlayerCombatQuitEvent - 玩家在战斗状态中退出游戏事件
PlayerDiedEvent - 玩家死亡时触发。
Java:
@EventHandler
public void onDied(PlayerDiedEvent e) {
Player player = e.getPlayer();
DamageRecorder recorder = e.getRecorder();
// 如果玩家距离最后一次受到玩家伤害超过10秒或者玩家非自然死亡,则killer将为null
Player killer = e.getKiller();
}
PlayerDamageByPlayerEvent - 玩家受到其他玩家伤害的事件。 支持玩家发射的抛掷物(箭,雪球等)。
Java:
@EventHandler
public void onPlayerDamageByPlayer(PlayerDamageByPlayerEvent e) {
Player suspect = e.getSuspect();
Player victim = e.getPlayer();
}
关于 DamageRecorder
DamageRecorder用于记录玩家受到的伤害来源和数值、时间、是否死亡等。
示例方法:
Java:
public void testMethod() {
Player player = ...;
DamageRecorder recorder = ...;
// 对玩家造成指定伤害(不是物理伤害,只是记录)
recorder.damage(player, 1.5);
// 获取玩家的killer。
// 如果玩家没有死,则会抛出 IllegalStateException
// 如果没有人对其造成伤害,则返回 null
Player killer = recorder.getKiller();
// 击杀该玩家的助攻(不包括killer)
// 如果玩家没有死,则会抛出 IllegalStateException
// 如果除了killer或没有人对其造成伤害,则返回null
List<Player> assists = recorder.getAssists();
// 获得玩家受到的总伤害数
double totalDamage = recorder.getTotalDamage();
// 获得指定玩家对该玩家造成的伤害
double damage = recorder.getTotalDamage(killer);
// 让玩家死亡(不是物理死亡,只是记录)
recorder.die();
// 获得玩家是否死亡
boolean died = recorder.isDied();
// 获得玩家最后一次受到伤害的时间戳
long lastDamageTime = recorder.getLastDamageTime();
}
关于 DamageCalculator
要扩展你自己的战斗状态持续时间计算逻辑,你可以:
Java:
public class YourCustomDurationCalculator implements DurationCalculator {
@Override
public int calculate(Player suspect) {
int duration = Your calculation logic...;
return duration;
}
}
Java:
CombatManager.setDurationCalculator(new YourCustomDurationCalculator());
关于 CombatManager
Java:
public void testMethod() {
Player player = ...;
// 检查玩家是否处于战斗状态
boolean combat = CombatManager.isInCombat(player);
// 重置玩家的战斗记录
CombatManager.resetCombat(player);
// 获得玩家的CombatInfo
CombatInfo info = CombatManager.getCombatInfo(player);
}
关于 CombatInfo
Java:
public void testMethod() {
Player player = ...;
// 获得玩家的CombatInfo
CombatInfo info = CombatManager.getCombatInfo(player);
// 获得玩家的伤害记录器
DamageRecorder recorder = info.getRecorder();
// 攻击玩家(不是物理攻击,只是记录)
info.attack(VICTIM, 2);
}
感谢使用CombatX!