Saltar 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 atual é com.magmaguy:EliteMobs:10.9.13. Use o âmbito provided ou compileOnly e declare depend: [EliteMobs]. Escolha a dependência correspondente ao plugin instalado. 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
com.magmaguy.elitemobs.api.mind.EliteMindServiceRegista programas Mind em Lua e gera entidades que os executam

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. O despacho de eventos executa os poderes por ordem crescente de executionPriority() e usa a ordem indicada apenas para desempatar.

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.

Programas Mind em Lua​

com.magmaguy.elitemobs.api.mind.EliteMindService executa IA escrita em Lua em entidades do EliteMobs. Obtenha-o através do gestor de serviços do Bukkit após EliteMobsInitializedEvent, tal como o serviço de poderes. O EliteMobs só o regista quando o adaptador NMS do servidor consegue alojar minds nativas; caso contrário, a consulta devolve null.

Registe os módulos com registerLuaModule(owner, key, revision, source) antes dos programas que os usam e depois registe os programas com registerLuaProgram. O espaço de nomes de cada chave tem de pertencer ao seu plugin, e o id e a revisão da definição Lua têm de corresponder à chave e à revisão indicadas. O ID de um programa não pode ser o ID de um dos seus módulos. Repetir um registo idêntico não tem efeito. Um código-fonte alterado exige uma revisão superior. O formato Lua, incluindo o settings dos módulos, que o EliteMobs não lê, está descrito em Programas de comportamento.

spawn(EliteMindSpawnRequest) cria uma entidade num corpo Mind nativo que executa o programa pedido, com um nível igual ou superior a 1. setProgram troca o programa de uma entidade que já tenha um corpo Mind; não converte elites normais. setPaused interrompe e retoma os ticks da Mind e as callbacks de poderes da entidade, inspect devolve o estado atual e clearProgram remove a entidade. registerNaturalSpawnProvider permite ao seu plugin manter, suprimir ou substituir os aparecimentos naturais de elites antes da conversão aleatória do próprio EliteMobs. unregisterOwner(owner) remove os seus módulos, programas e fornecedores, bem como as entidades que ainda executam os seus programas.

As ações da Mind chegam aos poderes associados à entidade através de on_mind_action. As integrações Java também podem tratar uma ação para um dos seus poderes com EliteLuaPowerService.registerActionHandler; os hooks Lua têm a primeira oportunidade de a aceitar. Consulte o contexto de programas Mind para o lado Lua.

Compilar a partir do código-fonte​

O repositório do EliteMobs compila-se com o Gradle 9.1.0 e uma toolchain JDK 21. Inclui o wrapper Gradle para Windows. A partir da raiz do repositório, execute:

Windows
.\gradlew.bat shadowJar

O repositório não tem um script gradlew para Unix. Noutros sistemas, instale a versão do Gradle indicada em gradle/wrapper/gradle-wrapper.properties e execute gradle shadowJar.

O plugin implementável é build/libs/EliteMobs.jar. build/libs/EliteMobs-min.jar contém apenas as classes do EliteMobs e não é um plugin funcional. Se a variável de ambiente MC_DIST_DIR ou a propriedade Gradle mcDistDir estiver definida, a compilação copia também EliteMobs.jar para essa pasta.

O jar inclui por shading o MagmaCore, o bStats e o commons-io. O MagmaCore, o seu runtime Lua, a sua biblioteca de reflexão e o easyminecraftgoals são realocados para com.magmaguy.elitemobs, pelo que o EliteMobs traz a sua própria cópia, separada de outros plugins que incluam o MagmaCore. O bStats é realocado para com.magmaguy.shaded.bstats. A compilação resolve com.magmaguy:MagmaCore:2.2.0-SNAPSHOT a partir do Maven Local antes do repositório Maven do MagmaGuy; -PmagmacoreVersion=<version> seleciona outra versão publicada do MagmaCore. Quando o código-fonte precisa de alterações ao MagmaCore mais recentes do que a compilação publicada, publique primeiro o MagmaCore no Maven Local, como descrito em Compilar um plugin após alterações à biblioteca. O mesmo se aplica a um FreeMinecraftModels alterado localmente, contra o qual a compilação é feita como versão 2.12.2.

A tarefa test compila e executa os testes numa toolchain JDK 25, porque a API de testes do Paper precisa do Java 25. O plugin em si tem como alvo o Java 21.