战斗日志

战斗日志

一个完全可配置的系统,旨在防止战斗记录作弊,并通过惩罚在战斗中中途断线的玩家来确保公平游戏。

实用

此模组可防止玩家在 Hytale 服务器上通过退出游戏来规避战斗。当玩家受到其他玩家、生物或环境伤害时,会被标记为战斗状态,持续时间可配置。若在标记期间断开连接,玩家将立即被击杀。

Discord

加入服务器以报告错误、建议功能或仅聊天:>> 加入 Discord <<

功能特性

  • 可自定义的战斗计时器 – 设定玩家处于战斗状态的时长。
  • 伤害来源控制 – 选择是否因玩家(PvP)、生物(PvE)或环境伤害(坠落、火焰、溺水等) 触发战斗状态。
  • 完全可自定义的消息 – 变更进入和离开战斗的提示(支持十六进制颜色 #FFAA00 和 Markdown **文字**)。
  • 实时战斗 HUD – 直接在 HUD 上显示当前战斗计时(可通过配置开关)。
  • 断线惩罚 – 若玩家在战斗期间退出,自动将其击杀或执行指令。
  • 指令黑名单 – 在战斗期间禁用特定指令(例如 /tpa/home)。

权限

  • combatlog.bypass – 拥有此权限的玩家将不会被标记为战斗状态。
  • combatlog.admin – 允许使用 /combatlog 及其所有子指令(enabledisablereloadclear)。

指令

  • /combatlog/cl – 显示模组状态和版本。
  • /combatlog enable – 启用模组。
  • /combatlog disable – 禁用模组并清除所有标记。
  • /combatlog reload – 从文件重新加载配置。
  • /combatlog clear – 全局移除所有活跃战斗标记。

Image

Image

支持的语言

  • 英语 (en_US)
  • 巴西葡萄牙语 (pt_BR) - 由 ab3g7ph_39718 翻译

想要添加你的语言?加入 Discord!

配置

所有设置均在 mods/Devify_CombatLog/config.json 文件中配置。

注意: 如果更新后未在配置文件中看到新设置,只需删除旧文件。模组将自动生成包含最新选项的新文件。

欢迎在你的服务器或模组包中使用。

开发者 API

查询方法 (org.combatlog.plugin.api.CombatLogApi) (软失败:若模组不可用,返回安全默认值如 false0 或空信息,而非抛出异常。)

  • isAvailable(): 如果 CombatLog 已加载并激活,返回 true
  • isTagged(UUID playerUuid): 如果玩家处于战斗状态,返回 true
  • getRemainingMillis(UUID playerUuid): 返回战斗剩余时间(毫秒)。
  • getTagInfo(UUID playerUuid): 返回包含详细数据的 CombatTagInfo 对象。

事件 (org.combatlog.plugin.api.event.*)

  • CombatTagStartedEvent
    • 属性:playerUuidcauseattackerNameattackerIsPlayer
    • 原因类型:PVPPVEENVIRONMENTUNKNOWN
  • CombatTagEndedEvent
    • 属性:playerUuidreasonlastCauselastAttackerNamelastAttackerIsPlayer
    • 结束原因:EXPIREDDEATHDISCONNECTCLEAREDMOD_DISABLEDMANUAL

使用示例

import org.combatlog.plugin.api.CombatLogApi;
import org.combatlog.plugin.api.event.CombatTagStartedEvent;
import org.combatlog.plugin.api.event.CombatTagEndedEvent;

// 检查战斗状态
if (CombatLogApi.isAvailable() && CombatLogApi.isTagged(playerUuid)) {
    long remaining = CombatLogApi.getRemainingMillis(playerUuid);
    // 处理被标记的玩家逻辑
}

// 监听事件
getEventRegistry().registerGlobal(CombatTagStartedEvent.class, event -> {
    // 战斗开始逻辑
});

getEventRegistry().registerGlobal(CombatTagEndedEvent.class, event -> {
    // 战斗结束逻辑
});