跳到主要内容

EternalTD 开发者 API

生成的 Java 参考可搜索类、方法和签名,并记录每个模块的源码版本与提交。

EternalTD 在 com.magmaguy.eternaltd.api 下暴露了自定义 Bukkit 事件,其他插件可以监听这些事件进行集成。

塔防事件​

这些事件在玩家在关卡会话中与防御塔交互时触发。

事件可取消暴露数据
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() 中,但尚未标记为可游玩,玩家也仍在关卡世界之外、尚未拿到对局物品;进入关卡的传送会在下一 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。