eternalcombat
5 min read
API for Developers
Developer guide for integrating with EternalCombat's API
Developer guide for integrating with EternalCombat's API
This page documents the EternalCombat API for plugin developers who want to integrate with EternalCombat.
This page is intended for developers creating plugins that integrate with EternalCombat. If you're a server administrator, you don't need to read this.
Add the EternalCode repository to your build configuration:
repositories {
maven("https://repo.eternalcode.pl/releases")
}
The latest API version is 2.4.0-SNAPSHOT. Check GitHub releases for the most recent version.
dependencies {
compileOnly("com.eternalcode:eternalcombat-api:2.4.0-SNAPSHOT")
}
Declare EternalCombat as a dependency in your plugin's configuration:
name: YourPlugin
version: 1.0.0
main: com.example.YourPlugin
depend:
- EternalCombat
Get the API instance in your plugin's onEnable:
import com.eternalcode.combat.EternalCombatApi;
import com.eternalcode.combat.EternalCombatProvider;
public class YourPlugin extends JavaPlugin {
private EternalCombatApi combatApi;
@Override
public void onEnable() {
this.combatApi = EternalCombatProvider.provide();
}
}
The API provides access to several services:
| Service | Method | Description |
|---|---|---|
| FightManager | getFightManager() | Core combat state management |
| RegionProvider | getRegionProvider() | Region-based features |
| FightPearlService | getFightPearlService() | Ender pearl mechanics |
| FightTagOutService | getFightTagOutService() | Combat tag-out system |
| FightEffectService | getFightEffectService() | Combat potion effects |
| DropService | getDropService() | Item drop management |
| DropKeepInventoryService | getDropKeepInventoryService() | Keep inventory handling |
public class CombatChecker {
private final FightManager fightManager;
public CombatChecker(EternalCombatApi api) {
this.fightManager = api.getFightManager();
}
public boolean isPlayerInCombat(UUID playerId) {
return fightManager.isInCombat(playerId);
}
public Optional<Instant> getCombatEndTime(UUID playerId) {
return fightManager.getEndOfCombatTime(playerId);
}
}
import com.eternalcode.combat.fight.CauseOfTag;
public class CombatTagger {
private final FightManager fightManager;
public CombatTagger(EternalCombatApi api) {
this.fightManager = api.getFightManager();
}
public void tagPlayer(UUID playerId, Duration duration) {
fightManager.tag(playerId, duration, CauseOfTag.COMMAND);
}
public void tagTwoPlayers(UUID attacker, UUID victim, Duration duration) {
fightManager.tag(attacker, victim, duration, CauseOfTag.PLAYER);
}
}
import com.eternalcode.combat.fight.CauseOfUnTag;
public class CombatRemover {
private final FightManager fightManager;
public CombatRemover(EternalCombatApi api) {
this.fightManager = api.getFightManager();
}
public void untagPlayer(UUID playerId) {
fightManager.untag(playerId, CauseOfUnTag.COMMAND);
}
}
EternalCombat provides events you can listen to for combat state changes.
Fired when a player enters combat:
import com.eternalcode.combat.event.FightTagEvent;
import com.eternalcode.combat.fight.CauseOfTag;
import java.time.Duration;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class CombatListener implements Listener {
@EventHandler
public void onCombatStart(FightTagEvent event) {
UUID playerId = event.getPlayer();
CauseOfTag cause = event.getCause();
Duration duration = event.getDuration();
Player player = Bukkit.getPlayer(playerId);
if (player != null) {
player.sendMessage("Combat started! Cause: " + cause);
}
}
}
Fired when a player leaves combat:
import com.eternalcode.combat.event.FightUntagEvent;
import com.eternalcode.combat.fight.CauseOfUnTag;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class CombatEndListener implements Listener {
@EventHandler
public void onCombatEnd(FightUntagEvent event) {
UUID playerId = event.getPlayer();
CauseOfUnTag cause = event.getCause();
Player player = Bukkit.getPlayer(playerId);
if (player != null) {
switch (cause) {
case TIMER_EXPIRED -> player.sendMessage("Combat ended - timer expired");
case DEATH -> player.sendMessage("Combat ended - you died");
case COMMAND -> player.sendMessage("Combat ended - admin command");
case LOGOUT -> player.sendMessage("Combat ended - logout");
}
}
}
}
Both events can be cancelled to prevent the action:
@EventHandler
public void onCombatStart(FightTagEvent event) {
Player player = Bukkit.getPlayer(event.getPlayer());
// Prevent VIP players from entering combat
if (player != null && player.hasPermission("yourplugin.vip")) {
event.setCancelled(true);
}
}
| Cause | Description |
|---|---|
| PLAYER | Combat started by another player |
| COMMAND | Combat started by admin command |
| CRYSTAL | Combat from end crystal explosion |
| RESPAWN_ANCHOR | Combat from respawn anchor explosion |
| DAMAGE_CAUSE | Combat from environmental damage |
| Cause | Description |
|---|---|
| TIMER_EXPIRED | Combat timer ran out |
| DEATH | Player died |
| COMMAND | Admin removed player's combat using command |
| LOGOUT | Player logged out |
| WORLD_CHANGE | Player changed world |
public class YourPlugin extends JavaPlugin {
private EternalCombatApi combatApi;
private boolean eternalCombatEnabled;
@Override
public void onEnable() {
if (getServer().getPluginManager().getPlugin("EternalCombat") != null) {
this.combatApi = EternalCombatProvider.provide();
this.eternalCombatEnabled = true;
getLogger().info("EternalCombat integration enabled!");
} else {
this.eternalCombatEnabled = false;
getLogger().info("EternalCombat not found, integration disabled.");
}
}
public boolean isPlayerInCombat(UUID playerId) {
if (!eternalCombatEnabled) {
return false;
}
return combatApi.getFightManager().isInCombat(playerId);
}
}