Saltar para o conteúdo principal

API do EternalTD para programadores

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

O EternalTD disponibiliza eventos Bukkit personalizados em com.magmaguy.eternaltd.api, aos quais outros plugins podem responder para integrar funcionalidades.

Eventos de torres​

Estes eventos são disparados quando um jogador interage com torres durante uma sessão de nível.

EventoCancelávelDados disponíveis
TowerPlaceEventSimTower tower
TowerSellEventSimTower tower
TowerUpgradeEventSimTower tower

Cancelar um evento de torre impede a conclusão da ação.

TowerPlaceEvent ocorre depois de atribuir a célula à torre, mas antes de gerar a entidade, cobrar o custo ou adicionar a torre ao conjunto da sessão. Não assuma que getLivingEntity() está disponível nesse callback. Os eventos de melhoria e venda ocorrem antes da alteração da moeda e da torre.

Eventos das fases das vagas​

Estes eventos assinalam transições do ciclo de vida das vagas. Nenhum pode ser cancelado.

EventoDados disponíveis
WaveConstructionPhaseStartEventLevelSession levelSession
WaveStartingPhaseStartEventLevelSession levelSession
WaveDefensivePhaseEventLevelSession levelSession
WaveEndingPhaseEventLevelSession levelSession

WaveStartingPhaseStartEvent é disparado quando a sessão entra no estado inicial de espera pelo início. WaveConstructionPhaseStartEvent ocorre entre vagas. WaveDefensivePhaseEvent é disparado antes de incrementar o número da vaga, pelo que consultar esse número no callback devolve o valor anterior. Apesar do nome, WaveEndingPhaseEvent ocorre ao terminar a sessão, e não após cada vaga concluída.

Durante o evento inicial, a sessão já está em LevelSession.getSessions(), mas ainda não está marcada como jogável, e o jogador continua fora do mundo do nível e sem os itens da partida; o teletransporte de entrada acontece no tick seguinte. Durante o evento final, a vaga atual já foi encerrada e qualquer novo recorde já foi registado, mas a sessão continua registada e as torres, o estado do próprio jogador e o mundo da instância ainda não foram limpos. Quando a partida termina porque o jogador se desligou, o jogador já saiu: o seu estado foi restaurado e a sessão já não está em LevelSession.getSessions().

Eventos das entidades das vagas​

Estes eventos são disparados quando as entidades das vagas recebem dano ou morrem.

EventoCancelávelDados disponíveis
WaveEntityDamageEventNãoTower tower, WaveEntity waveEntity, boolean directDamage
WaveEntityDeathEventNãoWaveEntity waveEntity

WaveEntityDamageEvent é uma notificação e não permite editar o dano: não tem um setter para a quantidade. Um impacto direto de área dispara-o para iniciar o dano de área, sem aplicar um impacto direto adicional. No dano normal, impactos não letais disparam o evento depois de alterar a vida; os letais disparam WaveEntityDeathEvent em vez disso, depois de remover a entidade. Dano direto totalmente absorvido pela armadura não dispara nenhum dos dois imediatamente; dano ao longo do tempo agendado separadamente pode disparar eventos posteriores.

Exemplo de utilização​

import com.magmaguy.eternaltd.api.TowerPlaceEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class MyETDIntegration implements Listener {
@EventHandler
public void onTowerPlace(TowerPlaceEvent event) {
// React to tower placement
}
}

Observações​

  • Todos são eventos Bukkit síncronos normais.
  • Tower e WaveEntity são tipos internos EternalTD. Use os getters públicos para consultar os dados.
  • LevelSession disponibiliza o número da vaga, as torres e a configuração através de getters. Aceda ao jogador com getMatchPlayer().getPlayer().
  • LevelSession estende a classe Match do MagmaCore. O EternalTD inclui o MagmaCore por shading em com.magmaguy.eternaltd.magmacore, por isso, no jar do plugin, essa classe é com.magmaguy.eternaltd.magmacore.match.Match.