
击杀助攻
在游戏中增加了助攻显示功能,可以查看是谁导致你倒下!包含百分比设置和供其他模组调用的API。
查看大图描述
想看看是谁参与了玩家的死亡?这个模组就是为你准备的。
它会追踪在一场战斗中对玩家造成伤害的所有实体,并在死亡界面和击杀信息中显示它们的名字。该模组还包含一个 API,允许其他模组访问这些数据。例如,PvP 模组可以在玩家击杀另一名玩家时给予其经验值。
击杀助攻有两个主要的配置模式:最后一击和最高伤害。
- 最后一击:击杀归属于最后击中受害者的玩家。
- 最高伤害:击杀归属于造成最高伤害的玩家,可以防止抢人头。
该模组(及其 API!)也能提供伤害百分比,让你看到每个参与者造成了多少伤害。模组开发者可以利用这些数据,例如,根据造成的伤害来按比例分配经验值。
包含面向模组开发者的完整集成文档!
与 Hydowned Revival! 兼容!
面向服主/模组拥有者的用户和API文档
KillAssists — 文档
第 1 部分:配置
作为服务器所有者,你需要配置模组的一切。无需写代码。
配置文件
首次启动时,会在 mods/KillAssists/config.json(相对于服务器工作目录)创建一个配置文件。编辑它并重启服务器,或者使用游戏内命令实时更改设置。
{
"_comment_assistWindowMs": "时间窗口(毫秒)。在此窗口内对死亡前造成的任何伤害都算作助攻。范围:1000-120000",
"assistWindowMs": 10000,
"_comment_maxAssistsDisplayed": "在击杀信息和死亡界面中显示的最大助攻名称数量。范围:1-10",
"maxAssistsDisplayed": 3,
"_comment_trackMobDamage": "如果为 true,则怪物/NPC 造成的伤害会被追踪为助攻。如果为 false,则只计算玩家伤害。",
"trackMobDamage": true,
"_comment_killAttribution": "在 API 中(发送给其他模组的数据),谁被视为击杀者。'last_hit' = 造成最后一击的实体。'top_damage' = 造成总伤害最高的实体。**不**影响游戏内显示。",
"killAttribution": "last_hit",
"_comment_displayMode": "在击杀信息和死亡界面中显示谁为击杀者。'last_hit' = 最后一击者。'top_damage' = 最高伤害者(用 % 标记)。独立于 killAttribution。",
"displayMode": "last_hit",
"_comment_showPercentages": "如果为 true,则在击杀信息和死亡界面中每个人名旁边显示伤害百分比。例:'PlayerA (62%) [+PlayerB (25%), Mob (13%)]'。与两种 displayMode 值都兼容。",
"showPercentages": false
}
设置说明
assistWindowMs
时间窗口(毫秒)。当一名玩家死亡时,模组会回溯这么长的时间来寻找所有造成伤害的实体。默认值:10000(10 秒)。范围:1000–120000。
maxAssistsDisplayed
在击杀信息和死亡界面中显示的最大助攻名称数量。如果超过这个数量,其余的会显示为 +N。默认值:3。范围:1–10。
trackMobDamage
如果为 true,怪物和 NPC 造成的伤害算作助攻。如果为 false,则只追踪玩家造成的伤害。默认值:true。
killAttribution
在 API 中(发送给其他模组(如 PvP 统计追踪器)的 KillEvent),谁被视为“击杀者”。不会改变玩家在游戏内看到的内容。
| 值 | 行为 |
|---|---|
last_hit |
造成最后一击的实体获得击杀计数(默认) |
top_damage |
在时间窗口内造成总伤害最高的实体获得击杀计数 |
displayMode
在游戏内(击杀信息标记和死亡界面),谁被显示为击杀者。独立于 killAttribution。
| 值 | 行为 |
|---|---|
last_hit |
最后一击者被显示为击杀者(默认) |
top_damage |
最高伤害者被显示为击杀者,并用 % 符号标记 |
你可以混合搭配——例如,killAttribution: "top_damage"(API 将击杀归属于最高伤害者)+ displayMode: "last_hit"(玩家看到经典的最后一击显示)。
showPercentages
如果为 true,则在击杀信息和死亡界面中,每个人名旁边会显示伤害百分比。
| showPercentages | displayMode | 击杀信息示例 |
|---|---|---|
false |
last_hit |
PlayerB [+PlayerA, Mob1] |
true |
last_hit |
PlayerB (10%) [+PlayerA (62%), Mob1 (28%)] |
false |
top_damage |
PlayerA% [+Mob1, PlayerB] |
true |
top_damage |
PlayerA% (62%) [+Mob1 (28%), PlayerB (10%)] |
游戏内命令
/killassists [设置项] [值]
| 设置项 | 值 | 描述 |
|---|---|---|
window |
1000–120000 (毫秒) |
追踪伤害的时间窗口 |
maxdisplay |
1–10 |
击杀信息/死亡界面中显示的最大助攻数 |
trackmobs |
true / false |
将怪物伤害追踪为助攻 |
killmode |
last_hit / top_damage |
击杀归属模式 (API) |
display |
last_hit / top_damage |
显示模式 (UI) |
showpct |
true / false |
在游戏中显示伤害百分比 |
不带参数:显示当前配置。所有更改都会立即保存到配置文件中。
第 2 部分:面向模组开发者的 API
从另一个模组连接 KillAssists 所需的一切。
依赖项
在你的 manifest.json 中将 KillAssists 添加为依赖项:
{
"dependencies": ["KillAssists"]
}
公共类位于 com.killassists.api 包中。
监听击杀事件
每次玩家死亡都会触发一个 KillEvent,无论是否有助攻。无论配置如何,该事件始终包含每个参与实体的伤害百分比。在你的插件的 setup() 中注册一个监听器:
import com.killassists.api.KillAssistsAPI;
import com.killassists.api.KillEvent;
@Override
public void setup() {
KillAssistsAPI.addKillListener(event -> {
String victim = event.getVictimName(); // "Steve"
UUID victimUuid = event.getVictimUuid();
String killer = event.getKillerName(); // "Alex"
float killerPct = event.getKillerDamagePercent(); // e.g. 35.0
String mode = event.getAttributionMode(); // "last_hit" or "top_damage"
for (KillEvent.AssistEntry assist : event.getAssists()) {
assist.getDisplayName(); // "Skeleton Fighter", "PlayerX"
assist.getTotalDamage(); // raw damage dealt
assist.getDamagePercent(); // percentage of total damage (e.g. 45.2)
assist.isPlayer(); // true if player
assist.getPlayerUuid(); // player UUID (null if mob)
}
});
}
移除监听器:
KillAssistsAPI.removeKillListener(myListener);
KillEvent
每次玩家死亡时接收。所有列表都是不可变的。
| 方法 | 返回类型 | 描述 |
|---|---|---|
getVictimUuid() |
UUID |
死亡玩家的 UUID |
getVictimName() |
String |
死亡玩家的用户名 |
getKillerKey() |
String |
内部击杀者键("player:<uuid>" 或 "mob:<hash>") |
getKillerName() |
String |
击杀者的显示名称 |
getKillerDamagePercent() |
float |
击杀者造成的总伤害百分比 (0-100) |
isKillerPlayer() |
boolean |
如果击杀者是玩家,则为 true |
getKillerUuid() |
UUID |
如果击杀者是玩家,则为击杀者 UUID;如果是怪物,则为 null |
getAssists() |
List<AssistEntry> |
助攻者列表,按伤害降序排列(可以为空) |
hasAssists() |
boolean |
如果至少有一个助攻,则为 true |
getAttributionMode() |
String |
"last_hit" 或 "top_damage"——哪种模式决定了击杀者 |
AssistEntry
在时间窗口内造成伤害的每个实体(玩家或怪物),不包括击杀者。
| 方法 | 返回类型 | 描述 |
|---|---|---|
getSourceKey() |
String |
内部键("player:<uuid>" 或 "mob:<hash>") |
getDisplayName() |
String |
显示名称 |
getTotalDamage() |
float |
该实体造成的总伤害 |
getDamagePercent() |
float |
总伤害百分比 (0-100) |
isPlayer() |
boolean |
如果是玩家,则为 true |
getPlayerUuid() |
UUID |
如果是玩家,则为 UUID;如果是怪物,则为 null |
API 中的击杀归属
killAttribution 配置设置控制谁在 KillEvent 中被标记为“击杀者” vs “助攻者”。displayMode 和 showPercentages 设置对 API 没有影响——它们只改变游戏内显示。
// 示例:PlayerA 造成 90% 伤害,PlayerB 拿到最后一击
// killAttribution = last_hit: killer = PlayerB (10%), assists = [PlayerA (90%)]
// killAttribution = top_damage: killer = PlayerA (90%), assists = [PlayerB (10%)]
在所有模式下,KillEvent 始终包含每个实体的完整伤害百分比。
在运行时读取/修改配置
允许另一个模组以编程方式调整 KillAssists 设置。所有更改会立即保存到 mods/KillAssists/config.json 并在重启后持久化。
// 读取
long window = KillAssistsAPI.getAssistWindowMs(); // default: 10000
int maxDisplay = KillAssistsAPI.getMaxAssistsDisplayed(); // default: 3
boolean trackMobs = KillAssistsAPI.isTrackMobDamage(); // default: true
String attribution = KillAssistsAPI.getKillAttribution(); // default: "last_hit"
boolean isTopAttr = KillAssistsAPI.isTopDamageAttribution(); // default: false
String display = KillAssistsAPI.getDisplayMode(); // default: "last_hit"
boolean isTopDisp = KillAssistsAPI.isTopDamageDisplay(); // default: false
boolean showPct = KillAssistsAPI.isShowPercentages(); // default: false
// 修改
KillAssistsAPI.setAssistWindowMs(15000); // 15 seconds
KillAssistsAPI.setMaxAssistsDisplayed(5); // max 5 assists displayed
KillAssistsAPI.setTrackMobDamage(false); // ignore mob damage
KillAssistsAPI.setKillAttribution("top_damage"); // API: top damage = killer
KillAssistsAPI.setDisplayMode("top_damage"); // UI: top damage = killer
KillAssistsAPI.setShowPercentages(true); // UI: show damage %
完整示例:PvP 统计模组
public class PvPStatsPlugin extends JavaPlugin {
public PvPStatsPlugin(JavaPluginInit init) { super(init); }
@Override
public void setup() {
KillAssistsAPI.addKillListener(event -> {
if (!event.isKillerPlayer()) return;
UUID killerUuid = event.getKillerUuid();
UUID victimUuid = event.getVictimUuid();
// 记录击杀及其伤害占比
addKill(killerUuid, event.getKillerDamagePercent());
addDeath(victimUuid);
// 记录所有玩家助攻及其伤害贡献
for (KillEvent.AssistEntry assist : event.getAssists()) {
if (assist.isPlayer()) {
addAssist(assist.getPlayerUuid(),
assist.getTotalDamage(),
assist.getDamagePercent());
}
}
});
}
}
注意事项
- 该事件在服务端的 ECS 系统内触发,在处理死亡事件期间。
- 监听器是线程安全的(使用
CopyOnWriteArrayList)。 - 监听器中的异常会被静默吞掉,以避免影响其他监听器或游戏本身。
KillEvent中的助攻列表包含所有助攻者(不受maxAssistsDisplayed限制——该限制仅适用于游戏内显示)。- 无论
killAttribution、displayMode或showPercentages设置如何,伤害百分比始终会被计算并包含在KillEvent中。 killAttribution和displayMode是独立的:你可以让 API 将击杀归于最高伤害者,而 UI 显示最后一击者,反之亦然。
正在加载版本记录…

正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。