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。