CombatX - 为开发者提供的简单API

免费 原创 前置/API CombatX - 为开发者提供的简单API 1.0

插件中文名称
CombatX
插件英文名称
CombatX
支持的核心
  1. Bukkit
  2. Spigot
  3. Paper
资源语言
  1. 简体中文
适配版本
  1. 1.8
  2. 1.9
  3. 1.10
  4. 1.11
  5. 1.12
  6. 1.13
  7. 1.14
  8. 1.15
  9. 1.16
  10. 1.17
  11. 1.18
  12. 1.19
  13. 1.20
页面 1.webp

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>
请将[file name]替换为你下载的jar名称

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!
作者
Arocentry
下载
84
查看
150
首次发布
最后更新

评论

0.00 星 0 星