API для разработчиков EternalTD
Сгенерированный справочник Java позволяет искать классы, методы и сигнатуры. Для каждого модуля указаны версия исходников и коммит.
EternalTD предоставляет пользовательские события Bukkit в пакете com.magmaguy.eternaltd.api, которые другие плагины могут прослушивать для интеграции.
События башен
Эти события срабатывают, когда игрок взаимодействует с башнями во время игровой сессии.
| Событие | Отменяемое | Доступные данные |
|---|---|---|
TowerPlaceEvent | Да | Tower tower |
TowerSellEvent | Да | Tower tower |
TowerUpgradeEvent | Да | Tower tower |
Отмена события башни предотвращает выполнение действия.
TowerPlaceEvent вызывается после назначения ячейки башне, но до создания её сущности, списания стоимости и добавления в набор башен сессии. Не рассчитывайте на доступный getLivingEntity() в этом обработчике. События улучшения и продажи тоже вызываются до изменения валюты и самой башни.
События фаз волн
Эти события срабатывают при переходах жизненного цикла волн. Ни одно из них не является отменяемым.
| Событие | Доступные данные |
|---|---|
WaveConstructionPhaseStartEvent | LevelSession levelSession |
WaveStartingPhaseStartEvent | LevelSession levelSession |
WaveDefensivePhaseEvent | LevelSession levelSession |
WaveEndingPhaseEvent | LevelSession 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.