EliteMobs Java API
生成的 Java 参考提供可搜索的类、方法和签名,并记录各模块的源码版本与提交。
本指南介绍 EliteMobs 10.9 API。本次更新检查到的公开 Maven 版本为 com.magmaguy:EliteMobs:10.9.1。使用 provided 或 compileOnly,并声明 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 技能 |
EliteEntity、CustomBossEntity 和 RegionalBossEntity 表示由插件拥有的活动角色。它们公开的实现细节比事件接口更多。只在角色存在期间保留引用,不要直接修改跟踪器集合。
监听技能 XP 奖励
以下完整插件类会取消具有集成插件权限 example.blockskillxp 的玩家所获战斗技能 XP。将该类的完全限定名写入你自己的 plugin.yml 的 main。
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 会阻止构建并移除底层活体实体,而不是留下普通生物。EliteMobDeathEvent 与 EliteMobRemoveEvent 描述不同的生命周期变化。将所有移除都视为击杀或奖励之前,请检查事件及其触发代码。
获取受跟踪实体
EliteEntity elite = EntityTracker.getEliteMobEntity(bukkitEntity);
if (elite == null) {
return;
}
导入 com.magmaguy.elitemobs.entitytracker.EntityTracker 与 com.magmaguy.elitemobs.mobconstructor.EliteEntity。查询可能返回 null;Bukkit 实体不一定是当前受跟踪的 EliteMob。传入现存、非 null 的 Bukkit 实体,并在服务器线程中查询。
对于装备,先使用 EliteItemManager.isEliteMobsItem(itemStack),再调用所需数值对应的工具,例如 getItemLevel、getEliteDefense 或 getTotalDPS。这些数值不同;物品等级不等于最终伤害。请检查各方法如何处理 null,不要假定所有工具都接受空物品。
初始化与重载
EliteMobs 先异步初始化,再在服务器线程初始化。整个流程成功后触发 EliteMobsInitializedEvent,对应的重载初始化也会触发。请足够早地注册监听器,以接收该事件。事件之后才启用的集成还必须处理插件已经初始化的情况。
重载期间,实体引用、附加对象和缓存服务可能失效。初始化完成后重新获取集成所需对象。不要代替 EliteMobs 调用 onEnable、onDisable 或 MagmaCore 的关闭方法。
Lua 技能集成
EliteMobs 初始化后,通过 Bukkit 获取服务:
EliteLuaPowerService powers = Bukkit.getServicesManager()
.load(EliteLuaPowerService.class);
if (powers == null) {
return;
}
导入 org.bukkit.Bukkit 和 com.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 管理。