开发接口
提示
开发接口可在售后群下载,如果你是开发者,欢迎联系作者 15568820 进行交流咨询
API
kotlin
package me.yeezhi.combatview.api
object CombatAPI {
/**
* 伤害特效接口
*/
lateinit var DamageFxAPI: IDamageFxAPI
/**
* 战斗信息接口
*/
lateinit var CombatStatsAPI: ICombatStatsAPI
/**
* 字体接口
*/
lateinit var FontAPI: IFontAPI
/**
* 弹幕消息接口
*/
lateinit var DanmakuAPI: IDanmakuAPI
/**
* 拾取HUD接口
*/
lateinit var PickupAPI: IPickupAPI
/**
* 组队接口
*/
lateinit var CombatTeamAPI: ICombatTeamAPI
/**
* 临时属性接口
*/
lateinit var TempAttributeAPI: ITempAttributeAPI
}kotlin
package me.yeezhi.combatview.api
import me.yeezhi.combatview.api.combatstats.CombatStats
import org.bukkit.entity.Entity
import org.bukkit.entity.Player
interface ICombatStatsAPI {
/**
* 记录一次攻击并更新统计
*/
fun recordAttack(attacker: Player, victim: Entity, damage: Double)
/**
* 获取玩家当前统计
*/
fun getStats(player: Player): CombatStats
/**
* 累加自定义字段数值
*/
fun addCustomStat(player: Player, key: String, delta: Double)
/**
* 获取自定义字段数值
*/
fun getCustomStat(player: Player, key: String): Double
/**
* 设置自定义字段数值
*/
fun setCustomStat(player: Player, key: String, value: Double)
/**
* 更新玩家战斗信息
*/
fun Player.updateCombatStatsData()
/**
* 更新玩家队伍战斗信息,一般不用手动调用
*/
fun Player.updateTeamStatsData()
fun Player.sendEmptyTeamStatsData()
/**
* 清除玩家战斗统计
*/
fun clearStats(player: Player)
}kotlin
package me.yeezhi.combatview.api
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
interface IPickupAPI {
/**
* 发送拾取 HUD
*
* @param player 玩家
* @param itemStack 物品
* @param amount 数量
* @param source 来源
*/
fun sendPickup(
player: Player, itemStack: ItemStack, amount: Int, source: String
)
}kotlin
package me.yeezhi.combatview.api
import org.bukkit.entity.Entity
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Player
interface IDamageFxAPI {
/**
* 发送伤害特效
* @param damager 攻击者
* @param entity 实体
* @param damage 伤害
*
*/
fun sendDamageFx(damager: Entity, entity: Entity, damage: Double)
/**
* 发送伤害特效
* @param damager 攻击者
* @param entity 实体
* @param text 内容
*/
fun sendDamageFx(damager: Entity, entity: Entity, text: String)
/**
* 发送伤害特效
* @param damager 攻击者
* @param entity 实体
* @param type 类型
* @param damage 伤害
*/
fun sendDamageFx(damager: Entity, entity: Entity, type: String, damage: Double)
/**
* 发送伤害特效
* @param damager 攻击者
* @param entity 实体
* @param text 内容
*/
fun sendDamageFx(damager: Entity, entity: Entity, type: String, text: String)
/**
* 是否隐藏其他玩家的伤害显示
*/
fun Player.isHideOtherDamage(): Boolean
/**
* 设置隐藏其他玩家的伤害显示
*/
fun Player.setHideOtherDamage(enable: Boolean)
}kotlin
package me.yeezhi.combatview.api
import org.bukkit.entity.Player
/**
* 战斗队伍适配接口
*/
interface ICombatTeamAPI {
fun getMembers(player: Player): List<Player>
}kotlin
package me.yeezhi.combatview.api
import me.yeezhi.combatview.api.entity.config.FontConfig
import org.bukkit.entity.Entity
import org.bukkit.entity.Player
interface IFontAPI {
/**
* 获取默认字体
*/
fun getDefaultFontConfig(): FontConfig
/**
* 获取玩家当前字体配置
*/
fun Entity.getFontConfig(): FontConfig
/**
* 获取玩家字体穿戴后属性
*/
fun Player.getFontWearAttribute(): MutableList<String>
/**
* 获取玩家字体获取后属性
*/
fun Player.getFontObtainAttribute(): MutableList<String>
/**
* 玩家切换字体
*/
fun Player.changeFont(fontId: String): FontConfig
/**
* 切换玩家字体开关
*/
fun Player.setFontEnabled(enable: Boolean): FontConfig
/**
* 获取玩家已拥有的字体列表(包含默认字体)
*/
fun Player.getFonts(): MutableSet<String>
/**
* 获取玩家字体开关状态
*/
fun Player.isFontEnabled(): Boolean
/**
* 给予玩家字体时效(毫秒)
* @return 到期时间戳
*/
fun Player.giveFontTimed(fontId: String, durationMillis: Long): Long
/**
* 根据类型与数值,返回映射后的伤害文本
*/
fun formatDamageText(fontConfig: FontConfig, type: String, damage: Double): String
}kotlin
package me.yeezhi.combatview.api
import org.bukkit.entity.Player
interface ITempAttributeAPI {
/**
* 设置临时属性(秒)
*/
fun setTempAttribute(player: Player, nodeId: String, attributes: List<String>, seconds: Long)
/**
* 设置临时属性(自动节点)
*/
fun setTempAttribute(player: Player, attributes: List<String>, seconds: Long): String
/**
* 获取节点属性
*/
fun getTempAttribute(player: Player, nodeId: String): List<String>
/**
* 获取剩余时间(毫秒)
*/
fun getRemainingMillis(player: Player, nodeId: String): Long
/**
* 获取全部生效属性
*/
fun getAllAttribute(player: Player): List<String>
/**
* 清空节点属性
*/
fun clearTempAttribute(player: Player, nodeId: String)
}kotlin
package me.yeezhi.combatview.api
import org.bukkit.entity.Player
interface IDanmakuAPI {
/**
* 发送弹幕消息
*/
fun sendDanmaku(player: Player, message: String)
}脚本调用
以 AttributePlus 脚本为例,展示如何调用战斗视图相关接口
yaml
#格式为 [占位符: 类] 如果不懂,请不要自己修改
scriptTools:
"Utils": "org.serverct.ersha.script.AttrScriptUtils"
"AttributeAPI": "org.serverct.ersha.api.AttributeAPI"
"Bukkit": "org.bukkit.Bukkit"
"EntityType": "org.bukkit.entity.EntityType"
"Arrays": "java.util.Arrays"
"Data": "org.serverct.ersha.manager.data.Data"
# 战斗视图接口
CombatAPI: "me.yeezhi.combatview.api.CombatAPI"javascript
var priority = 999;
var combatPower = 5.0;
var attributeName = "重写暴击";
var attributeType = "ATTACK";
var placeholder = "cxbj";
function onLoad(attr) {
Utils.registerOtherAttribute("暴击几率", 1.0, "critchance");
Utils.registerOtherAttribute("暴击伤害", 1.0, "critdamage_attack");
Utils.registerOtherAttribute("暴击抵抗", 1.0, "critdamage_defense");
Utils.registerOtherAttribute("暴击躲避", 1.0, "critchance_defense");
Utils.registerOtherAttribute("吸血几率", 1.0, "vampire_chance");
Utils.registerOtherAttribute("吸血倍率", 1.0, "vampire_attack");
Utils.registerOtherAttribute("吸血躲避", 1.0, "vampirechance_defense");
Utils.registerOtherAttribute("吸血抵抗", 1.0, "vampiredamage_defense");
attr.setAsync(true)
attr.setSkipFilter(true)
return attr;
}
var RATE_DEFAULT = 100;
function runAttack(attr, attacker, entity, handle) {
var baseDamage = attr.getDamage(attacker, handle);
if (baseDamage <= 0) return false;
var critChanceAttacker = attr.getRandomValue(attacker, "暴击几率", handle);
var critChanceDefender = attr.getRandomValue(entity, "暴击躲避", handle);
var critDamageAttacker = attr.getRandomValue(attacker, "暴击伤害", handle);
var critResistDefender = attr.getRandomValue(entity, "暴击抵抗", handle);
var vampChanceAttacker = attr.getRandomValue(attacker, "吸血几率", handle);
var vampChanceDefender = attr.getRandomValue(entity, "吸血躲避", handle);
var vampDamageAttacker = attr.getRandomValue(attacker, "吸血倍率", handle);
var vampResistDefender = attr.getRandomValue(entity, "吸血抵抗", handle);
var critTriggered = attr.chance(critChanceAttacker - critChanceDefender);
if (critTriggered) {
var effectiveCritPercent = Math.max(0, critDamageAttacker - critResistDefender);
var critExtraDamage = Math.floor(baseDamage * effectiveCritPercent * 0.01);
if (critExtraDamage > 0) {
attr.addDamage(attacker, critExtraDamage, handle);
var critExtraDisplay = Math.round(critExtraDamage * 10) / 10;
// 攻击者提示 + 特效 + 统计
if (attacker instanceof org.bukkit.entity.Player) {
attacker.sendMessage("§7[§c战斗§7] §f触发 §c暴击! §f对目标额外造成 §b" + critExtraDisplay + " §f点伤害!");
// 显示自定义字体贴图
//CombatAPI.DamageFxAPI.sendDamageFx(attacker, entity, "other", "曖");
// 记录暴击数值,插件检测到自动显示暴击数值特效
attr.storageValue("crit", critExtraDamage, true, handle);
// 统计自定义字段数值
// 龙核组件:方法.取变量('combatview_自定义字段')
//CombatAPI.CombatStatsAPI.addCustomStat(attacker, "自定义字段", critExtraDamage);
}
if (entity instanceof org.bukkit.entity.Player) {
entity.sendMessage("§7[§c战斗§7] §f你受到 §e" + attacker.getName() + " §f的 §c暴击§f,额外受到 §b" + critExtraDisplay + " §f点伤害!");
}
} else if (attacker instanceof org.bukkit.entity.Player) {
attacker.sendMessage("§7[§c战斗§7] §f触发 §c暴击! §f但对方暴击抵抗过高,无额外伤害!");
}
}
var vampTriggered = attr.chance(vampChanceAttacker - vampChanceDefender);
if (vampTriggered && attacker instanceof org.bukkit.entity.LivingEntity) {
var vampireMultiplier = (RATE_DEFAULT + vampDamageAttacker - vampResistDefender) / RATE_DEFAULT;
var vampHeal = Math.floor(baseDamage * vampireMultiplier);
var currentHealth = attacker.getHealth();
var maxHealth = attacker.getMaxHealth();
var healAmount = Math.floor(Math.min(vampHeal, maxHealth - currentHealth));
if (healAmount > 0) {
attacker.setHealth(currentHealth + healAmount);
attacker.sendMessage("§7[§c战斗§7] §f触发 §4吸血! §f恢复 §c" + healAmount + " §f点生命!");
// 显示自定义字体贴图
CombatAPI.DamageFxAPI.sendDamageFx(attacker, entity, "other", "軋");
}
}
return false;
}Event
提示
由于 YeePlugins 在 onEnable 阶段执行云端加载,若需注册监听,请在插件加载完成后通过循环检测再进行注册
暂无