Pular para o conteúdo principal

API Java do EliteMobs

A referência Java gerada permite pesquisar classes, métodos e assinaturas, com a versão e o commit do código registados para cada módulo.

Este guia abrange a API do EliteMobs 10.9. A versão Maven pública verificada nesta atualização é com.magmaguy:EliteMobs:10.9.1. Use o âmbito provided ou compileOnly e declare depend: [EliteMobs]. Escolha a dependência correspondente ao plugin instalado; o código atual está na versão 10.9.5. O índice para programadores contém a configuração Maven e Gradle.

Pontos de entrada

Pacote ou tipoFunção
com.magmaguy.elitemobs.apiEventos Bukkit de combate, missões, NPCs, teletransportes, masmorras e inicialização
com.magmaguy.elitemobs.api.instancedEventos do ciclo de vida de partidas instanciadas
com.magmaguy.elitemobs.api.utils.EliteItemManagerUtilitários de identificação, nível, dano e defesa de itens Elite
com.magmaguy.elitemobs.entitytracker.EntityTrackerObtém a entidade EliteMobs acompanhada que corresponde a uma entidade Bukkit
com.magmaguy.elitemobs.api.power.EliteLuaPowerServiceRegista e associa poderes Lua através do sistema de execução do EliteMobs

EliteEntity, CustomBossEntity e RegionalBossEntity representam entidades ativas geridas pelo plugin. Expõem mais detalhes de implementação do que os contratos dos eventos. Conserve referências apenas enquanto a entidade existir e evite alterar diretamente as coleções de acompanhamento.

Escutar atribuições de XP de competências

Esta classe completa de plugin cancela atribuições de XP de competências de combate a jogadores com a permissão example.blockskillxp da integração. Defina o nome completo da classe como main no seu 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 é executado de forma síncrona após as verificações de elegibilidade de combate e os multiplicadores nativos e de permissões. getOriginalXp() devolve a quantidade na criação do evento; getXp() inclui alterações feitas por listeners anteriores. setXp(long) rejeita valores negativos. O cancelamento ou um valor final de zero impede a atribuição e a respetiva indicação visual de ganho.

O EliteMobs aplica a quantidade aceite, trata da persistência e executa os efeitos da subida de nível. Não escreva o XP do jogador separadamente neste listener. As alterações administrativas de XP e o XP de classe usam caminhos distintos e não correspondem à atribuição de XP de competências de combate deste evento.

Os restantes eventos têm contratos próprios. Em particular, cancelar EliteMobSpawnEvent impede a construção e remove a entidade viva subjacente. Não deixa um mob normal no seu lugar. EliteMobDeathEvent e EliteMobRemoveEvent representam transições diferentes do ciclo de vida. Verifique o evento e o código que o emite antes de tratar todas as remoções como mortes ou recompensas.

Obter uma entidade acompanhada

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

Importe com.magmaguy.elitemobs.entitytracker.EntityTracker e com.magmaguy.elitemobs.mobconstructor.EliteEntity. A consulta pode devolver null, pois uma entidade Bukkit não é necessariamente um EliteMob atualmente acompanhado. Passe uma entidade Bukkit existente e não nula, e execute a consulta na thread do servidor.

Para equipamento, comece por EliteItemManager.isEliteMobsItem(itemStack) e pelo método correspondente à quantidade de que precisa, como getItemLevel, getEliteDefense ou getTotalDPS. Estas grandezas são diferentes. O nível de um item não é o seu dano final. Verifique como cada método trata valores nulos, em vez de assumir que todos aceitam um item vazio.

Inicialização e recarregamentos

O EliteMobs executa uma inicialização assíncrona seguida de uma fase na thread do servidor. EliteMobsInitializedEvent é emitido quando a sequência termina com sucesso, incluindo a inicialização correspondente a um recarregamento. Registe os listeners a tempo de o receber. Integrações ativadas após esse evento também têm de contemplar o caso de o plugin já estar inicializado.

Referências a entidades, associações e serviços em cache podem deixar de ser válidas durante um recarregamento. Obtenha novamente o que a integração precisa quando a inicialização terminar. Não chame onEnable, onDisable nem o encerramento do MagmaCore em nome do EliteMobs.

Integração de poderes Lua

Obtenha o serviço através do Bukkit após a inicialização do EliteMobs:

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

Importe org.bukkit.Bukkit e com.magmaguy.elitemobs.api.power.EliteLuaPowerService. Se o serviço não existir, trate-o como indisponível em vez de construir a implementação diretamente.

registerLuaPower(owner, key, revision, source) regista um programa pertencente ao seu plugin. setPowers(owner, eliteEntity, orderedPowerKeys) substitui toda a coleção de poderes da entidade por novas instâncias de execução, na ordem indicada. Todas as chaves têm de pertencer a esse proprietário e chaves duplicadas são rejeitadas. A operação não acrescenta poderes à coleção existente do boss.

inspectPowers devolve os programas geridos pelo serviço pela ordem de associação. inspectPowerActivity apresenta a sua atividade em execução. unregisterOwner(owner) remove as entradas do catálogo desse proprietário e desassocia as suas instâncias das entidades ativas. Use-o quando a integração for desativada e o serviço estiver disponível.

Todas as alterações são executadas na thread do servidor. O serviço evita deliberadamente expor tipos de scripting do MagmaCore entre classloaders de plugins. Passe os tipos da API do EliteMobs, em vez de objetos de uma cópia privada do MagmaCore incluída por shading.

Para criar hooks Lua e conteúdo, consulte a referência partilhada de scripts. O serviço Java coordena as associações e os proprietários; o EliteMobs continua a gerir o ciclo de vida dos poderes.