Перейти к основному содержимому

Java API EliteMobs

Сгенерированный справочник Java содержит классы, методы и сигнатуры с поиском, а также версию исходников и коммит каждого модуля.

Руководство описывает API EliteMobs 10.9. Публичная Maven-версия, проверенная при этом обновлении, — com.magmaguy:EliteMobs:10.9.1. Используйте область provided или compileOnly и объявите depend: [EliteMobs]. Версия зависимости должна соответствовать установленному плагину; текущие исходники имеют версию 10.9.5. Настройка Maven и Gradle приведена в указателе для разработчиков.

Точки входа

Пакет или типНазначение
com.magmaguy.elitemobs.apiСобытия Bukkit для боя, заданий, NPC, телепортации, подземелий и инициализации
com.magmaguy.elitemobs.api.instancedСобытия жизненного цикла матчей в экземплярах
com.magmaguy.elitemobs.api.utils.EliteItemManagerОпределение элитных предметов, их уровня, урона и защиты
com.magmaguy.elitemobs.entitytracker.EntityTrackerПолучение отслеживаемой сущности EliteMobs по сущности Bukkit
com.magmaguy.elitemobs.api.power.EliteLuaPowerServiceРегистрация и назначение Lua-способностей через среду EliteMobs

EliteEntity, CustomBossEntity и RegionalBossEntity представляют действующих персонажей, которыми владеет плагин. Они раскрывают больше деталей реализации, чем события. Храните ссылки только пока персонаж существует и не изменяйте коллекции трекера напрямую.

Прослушивание награды XP навыка

Этот полный класс плагина отменяет выдачу боевого XP навыков игрокам с правом вашей интеграции example.blockskillxp. Укажите полное имя класса в поле main собственного plugin.yml.

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 предотвращает создание и удаляет исходную живую сущность, а не оставляет обычного моба. EliteMobDeathEvent и EliteMobRemoveEvent описывают разные переходы жизненного цикла. Прежде чем считать любое удаление убийством или наградой, изучите событие и вызывающий его код.

Получение отслеживаемой сущности

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

Импортируйте com.magmaguy.elitemobs.entitytracker.EntityTracker и com.magmaguy.elitemobs.mobconstructor.EliteEntity. Поиск может вернуть null: сущность Bukkit не обязательно является отслеживаемым сейчас EliteMob. Передавайте существующую сущность Bukkit, отличную от null, и выполняйте поиск в серверном потоке.

Для снаряжения начните с EliteItemManager.isEliteMobsItem(itemStack) и метода для нужной величины, например getItemLevel, getEliteDefense или getTotalDPS. Это разные величины; уровень предмета не равен окончательному урону. Проверяйте обработку null каждым методом, не предполагая, что все методы принимают пустой предмет.

Инициализация и перезагрузка

EliteMobs сначала выполняет асинхронную инициализацию, затем инициализацию в серверном потоке. После успешной последовательности вызывается EliteMobsInitializedEvent, в том числе при соответствующей перезагрузке. Регистрируйте слушатели достаточно рано, чтобы получить событие. Интеграции, включённые после него, должны также учитывать уже завершённую инициализацию.

Ссылки на сущности, назначения и сохранённые сервисы могут устареть при перезагрузке. Получайте нужные объекты заново после завершения инициализации. Не вызывайте onEnable, onDisable или остановку MagmaCore от имени EliteMobs.

Интеграция Lua-способностей

После инициализации EliteMobs получите сервис через Bukkit:

Service lookup
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) заменяет весь набор способностей персонажа новыми средами выполнения в указанном порядке. Каждый ключ должен принадлежать этому владельцу; повторяющиеся ключи отклоняются. Операция не дополняет существующие способности босса.

inspectPowers возвращает управляемые сервисом программы в порядке назначения. inspectPowerActivity показывает их текущую активность. unregisterOwner(owner) удаляет записи владельца из каталога и отсоединяет его среды выполнения от активных персонажей. Вызывайте его при отключении интеграции, пока сервис доступен.

Все изменения выполняются в серверном потоке. Сервис намеренно не передаёт типы скриптов MagmaCore между загрузчиками классов плагинов. Передавайте типы API EliteMobs, а не объекты из собственной встроенной копии MagmaCore.

Описание Lua-хуков и контента находится в общем справочнике скриптов. Java-сервис координирует назначение и владение, а жизненным циклом способностей по-прежнему управляет EliteMobs.