跳到主要内容

EliteMobs Java API

生成的 Java 参考提供可搜索的类、方法和签名,并记录各模块的源码版本与提交。

本指南介绍 EliteMobs 10.9 API。本次更新检查到的公开 Maven 版本为 com.magmaguy:EliteMobs:10.9.1。使用 providedcompileOnly,并声明 depend: [EliteMobs]。依赖版本应与已安装插件匹配;当前源码为 10.9.5。开发者索引包含 Maven 与 Gradle 配置。

入口

包或类型用途
com.magmaguy.elitemobs.api战斗、任务、NPC、传送、地牢与初始化的 Bukkit 事件
com.magmaguy.elitemobs.api.instanced实例对局生命周期事件
com.magmaguy.elitemobs.api.utils.EliteItemManager精英物品识别、等级、伤害与防御工具
com.magmaguy.elitemobs.entitytracker.EntityTracker将 Bukkit 实体解析为被跟踪的 EliteMobs 实体
com.magmaguy.elitemobs.api.power.EliteLuaPowerService通过 EliteMobs 运行时注册和附加 Lua 技能

EliteEntityCustomBossEntityRegionalBossEntity 表示由插件拥有的活动角色。它们公开的实现细节比事件接口更多。只在角色存在期间保留引用,不要直接修改跟踪器集合。

监听技能 XP 奖励

以下完整插件类会取消具有集成插件权限 example.blockskillxp 的玩家所获战斗技能 XP。将该类的完全限定名写入你自己的 plugin.ymlmain

SkillXpIntegration.java
package example;

import com.magmaguy.elitemobs.api.EliteSkillXpGainEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public final class SkillXpIntegration extends JavaPlugin implements Listener {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}

@EventHandler(ignoreCancelled = true)
public void onSkillXp(EliteSkillXpGainEvent event) {
if (event.getPlayer().hasPermission("example.blockskillxp")) {
event.setCancelled(true);
}
}
}

EliteSkillXpGainEvent 在战斗资格检查及原生、权限倍率应用后同步触发。getOriginalXp() 是事件创建时的数值;getXp() 包含较早监听器所作的更改。setXp(long) 拒绝负值。取消事件或最终值为零时,不发放奖励,也不显示获得反馈。

EliteMobs 负责提交接受的数值、持久化及升级效果。不要在该监听器中另行写入玩家 XP。管理员修改 XP 和职业 XP 使用其他路径,不属于该事件表示的战斗技能奖励。

其他事件各有自己的约定。特别是,取消 EliteMobSpawnEvent 会阻止构建并移除底层活体实体,而不是留下普通生物。EliteMobDeathEventEliteMobRemoveEvent 描述不同的生命周期变化。将所有移除都视为击杀或奖励之前,请检查事件及其触发代码。

获取受跟踪实体

Lookup inside your integration
EliteEntity elite = EntityTracker.getEliteMobEntity(bukkitEntity);
if (elite == null) {
return;
}

导入 com.magmaguy.elitemobs.entitytracker.EntityTrackercom.magmaguy.elitemobs.mobconstructor.EliteEntity。查询可能返回 null;Bukkit 实体不一定是当前受跟踪的 EliteMob。传入现存、非 null 的 Bukkit 实体,并在服务器线程中查询。

对于装备,先使用 EliteItemManager.isEliteMobsItem(itemStack),再调用所需数值对应的工具,例如 getItemLevelgetEliteDefensegetTotalDPS。这些数值不同;物品等级不等于最终伤害。请检查各方法如何处理 null,不要假定所有工具都接受空物品。

初始化与重载

EliteMobs 先异步初始化,再在服务器线程初始化。整个流程成功后触发 EliteMobsInitializedEvent,对应的重载初始化也会触发。请足够早地注册监听器,以接收该事件。事件之后才启用的集成还必须处理插件已经初始化的情况。

重载期间,实体引用、附加对象和缓存服务可能失效。初始化完成后重新获取集成所需对象。不要代替 EliteMobs 调用 onEnableonDisable 或 MagmaCore 的关闭方法。

Lua 技能集成

EliteMobs 初始化后,通过 Bukkit 获取服务:

Service lookup
EliteLuaPowerService powers = Bukkit.getServicesManager()
.load(EliteLuaPowerService.class);
if (powers == null) {
return;
}

导入 org.bukkit.Bukkitcom.magmaguy.elitemobs.api.power.EliteLuaPowerService。服务不存在时应视为不可用,不要自行构造实现。

registerLuaPower(owner, key, revision, source) 注册由你的插件拥有的程序。setPowers(owner, eliteEntity, orderedPowerKeys) 将角色的整个技能集合替换为按指定顺序创建的新运行时。每个键必须属于该所有者,重复键会被拒绝。此操作不是向 Boss 现有技能追加内容。

inspectPowers 按附加顺序返回服务管理的程序。inspectPowerActivity 提供运行活动信息。unregisterOwner(owner) 删除该所有者的目录条目,并从活动角色上移除其运行时;在服务仍可用时,于集成插件停用时调用。

所有修改操作都在服务器线程执行。该服务特意避免跨插件类加载器公开 MagmaCore 脚本类型。请传递 EliteMobs API 类型,而不是私有 shade 版 MagmaCore 的对象。

Lua 钩子与内容编写见共享脚本参考。Java 服务协调附加与所有权;技能生命周期仍由 EliteMobs 管理。