EternalTD 開發者 API
產生的 Java 參考可搜尋類別、方法及簽章,並記錄各模組的原始碼版本與提交。
EternalTD 在 com.magmaguy.eternaltd.api 下公開自訂 Bukkit 事件,供其他外掛程式監聽以進行整合。
防禦塔事件
當玩家在關卡期間與防禦塔互動時會觸發這些事件。
| 事件 | 可取消 | 公開資料 |
|---|---|---|
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() 中,但尚未標記為可遊玩,玩家也仍在關卡世界之外,尚未拿到對局物品;進入關卡的傳送會在下一個 tick 發生。結束事件觸發時,目前波次已關閉,若有新的最高分也已記錄,但場次仍註冊著,防禦塔、玩家本身的狀態及實例世界都尚未清理。若對局因玩家斷線而結束,玩家已經離開:其狀態已復原,場次也已不在 LevelSession.getSessions() 中。
波次實體事件
當波次實體受到傷害或死亡時會觸發這些事件。
| 事件 | 可取消 | 公開資料 |
|---|---|---|
WaveEntityDamageEvent | 否 | Tower tower、WaveEntity waveEntity、boolean directDamage |
WaveEntityDeathEvent | 否 | WaveEntity waveEntity |
WaveEntityDamageEvent 僅用於通知,沒有修改傷害量的 setter。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 的內部類型。請使用它們的公開 getter 方法存取資料。LevelSession的 getter 提供波次編號、防禦塔與設定。透過getMatchPlayer().getPlayer()取得玩家。LevelSession繼承 MagmaCore 的Match類別。EternalTD 將 MagmaCore 以 shade 方式打包並重新定位至com.magmaguy.eternaltd.magmacore之下,因此在外掛程式 jar 中,該類別為com.magmaguy.eternaltd.magmacore.match.Match。