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

API для разработчиков EternalTD

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

EternalTD предоставляет пользовательские события Bukkit в пакете com.magmaguy.eternaltd.api, которые другие плагины могут прослушивать для интеграции.

События башен​

Эти события срабатывают, когда игрок взаимодействует с башнями во время игровой сессии.

СобытиеОтменяемоеДоступные данные
TowerPlaceEventДаTower tower
TowerSellEventДаTower tower
TowerUpgradeEventДаTower tower

Отмена события башни предотвращает выполнение действия.

TowerPlaceEvent вызывается после назначения ячейки башне, но до создания её сущности, списания стоимости и добавления в набор башен сессии. Не рассчитывайте на доступный getLivingEntity() в этом обработчике. События улучшения и продажи тоже вызываются до изменения валюты и самой башни.

События фаз волн​

Эти события срабатывают при переходах жизненного цикла волн. Ни одно из них не является отменяемым.

СобытиеДоступные данные
WaveConstructionPhaseStartEventLevelSession levelSession
WaveStartingPhaseStartEventLevelSession levelSession
WaveDefensivePhaseEventLevelSession levelSession
WaveEndingPhaseEventLevelSession levelSession

WaveStartingPhaseStartEvent вызывается при переходе в начальное ожидание запуска, а WaveConstructionPhaseStartEvent — между волнами. WaveDefensivePhaseEvent вызывается до увеличения номера волны, поэтому обработчик видит предыдущий номер. Несмотря на название, WaveEndingPhaseEvent вызывается при завершении сессии, а не после каждой волны.

При стартовом событии сессия уже находится в LevelSession.getSessions(), но ещё не отмечена как пригодная для игры, а игрок пока находится вне мира уровня и без предметов матча; телепортация в уровень происходит на следующем тике. При завершающем событии текущая волна уже остановлена и новый рекорд, если он есть, записан, но сессия ещё зарегистрирована, а её башни, собственное состояние игрока и мир инстанса ещё не очищены. Если забег завершается из-за отключения игрока, игрок уже вышел: его состояние восстановлено, а сессии больше нет в LevelSession.getSessions().

События сущностей волн​

Эти события срабатывают, когда сущности волн получают урон или погибают.

СобытиеОтменяемоеДоступные данные
WaveEntityDamageEventНетTower tower, WaveEntity waveEntity, boolean directDamage
WaveEntityDeathEventНетWaveEntity waveEntity

WaveEntityDamageEvent служит уведомлением: у него нет сеттера величины урона. Прямое попадание AOE вызывает его для обработки урона по площади, не нанося дополнительного прямого удара. Обычный несмертельный урон вызывает событие после изменения здоровья; смертельный вместо него вызывает WaveEntityDeathEvent после удаления сущности. Прямой урон, полностью поглощённый бронёй, не вызывает ни одного события немедленно, но отдельно запланированный периодический урон может вызвать их позже.

Пример использования​

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
}
}

Примечания​

  • Все события являются стандартными синхронными событиями Bukkit.
  • Tower и WaveEntity — это внутренние типы EternalTD. Для доступа к данным используйте их публичные геттеры.
  • Геттеры LevelSession предоставляют номер волны, башни и конфигурацию. Игрок доступен через getMatchPlayer().getPlayer().
  • LevelSession наследует класс Match из MagmaCore. EternalTD встраивает (shade) MagmaCore в пакет com.magmaguy.eternaltd.magmacore, поэтому в jar-файле плагина этот класс называется com.magmaguy.eternaltd.magmacore.match.Match.