Developer API
++ Integrate ReanimateMC into your plugins +
+ +API Overview
++ ReanimateMC provides a comprehensive API for developers to integrate the KO system into their plugins. + You can listen to events, access the KO manager, and programmatically control the KO state of players. +
+Getting Started
+ +Adding ReanimateMC as a Dependency
+ +plugin.yml
+name: YourPlugin
+version: 1.0.0
+depend: [ReanimateMC]
+# or for optional dependency
+# softdepend: [ReanimateMC]
+
+ Maven (pom.xml)
+<dependencies>
+ <dependency>
+ <groupId>fr.jachou</groupId>
+ <artifactId>ReanimateMC</artifactId>
+ <version>1.2.02</version>
+ <scope>provided</scope>
+ </dependency>
+</dependencies>
+
+ Gradle (build.gradle)
+dependencies {
+ compileOnly 'fr.jachou:ReanimateMC:1.2.02'
+}
+ Basic Plugin Setup
+import fr.jachou.reanimatemc.ReanimateMC;
+import fr.jachou.reanimatemc.managers.KOManager;
+
+public class YourPlugin extends JavaPlugin {
+ private ReanimateMC reanimateMC;
+ private KOManager koManager;
+
+ @Override
+ public void onEnable() {
+ // Get ReanimateMC instance
+ reanimateMC = (ReanimateMC) getServer()
+ .getPluginManager().getPlugin("ReanimateMC");
+
+ if (reanimateMC == null) {
+ getLogger().warning("ReanimateMC not found!");
+ return;
+ }
+
+ // Get KO Manager
+ koManager = reanimateMC.getKoManager();
+
+ // Register event listeners
+ getServer().getPluginManager()
+ .registerEvents(new YourEventListener(), this);
+ }
+}
+ Events API
+ +PlayerKOEvent
+Fired when a player enters the KO state.
+ +Methods:
+| Method | +Return Type | +Description | +
|---|---|---|
getPlayer() |
+ Player | +The player entering KO state | +
getDuration() |
+ int | +KO duration in seconds | +
isCancelled() |
+ boolean | +Check if event is cancelled | +
setCancelled(boolean) |
+ void | +Cancel the KO event | +
Example Usage:
+@EventHandler
+public void onPlayerKO(PlayerKOEvent event) {
+ Player player = event.getPlayer();
+ int duration = event.getDuration();
+
+ // Custom logic when player enters KO
+ if (player.hasPermission("server.vip")) {
+ // VIP players get longer KO duration
+ // Note: Cannot modify duration directly
+ getLogger().info(player.getName() + " is VIP, extending KO");
+ }
+
+ // Cancel KO for staff members
+ if (player.hasPermission("server.staff")) {
+ event.setCancelled(true);
+ player.sendMessage("Staff bypass: KO cancelled");
+ }
+
+ // Notify team members
+ notifyTeam(player, duration);
+}
+ PlayerReanimatedEvent
+Fired when a player is revived from KO state.
+ +Methods:
+| Method | +Return Type | +Description | +
|---|---|---|
getPlayer() |
+ Player | +The player being revived | +
getReanimator() |
+ Player | +Player performing revival (can be null) | +
isSuccessful() |
+ boolean | +Whether revival was successful | +
getTimestamp() |
+ long | +Timestamp of revival attempt | +
getPlayerName() |
+ String | +Name of revived player | +
getReanimatorName() |
+ String | +Name of reanimator (or "Unknown") | +
Example Usage:
+@EventHandler
+public void onPlayerRevived(PlayerReanimatedEvent event) {
+ Player patient = event.getPlayer();
+ Player medic = event.getReanimator();
+ boolean successful = event.isSuccessful();
+
+ if (!successful) return;
+
+ // Reward the medic
+ if (medic != null) {
+ // Give XP
+ medic.giveExp(50);
+
+ // Economy reward (if you have Vault)
+ economy.depositPlayer(medic, 100.0);
+
+ // Send message
+ medic.sendMessage(ChatColor.GREEN +
+ "You saved " + patient.getName() + "!");
+
+ // Add to statistics
+ addToStats(medic, "revivals_performed");
+ }
+
+ // Log the revival
+ logRevival(patient, medic, event.getTimestamp());
+}
+ KOManager API
+ +Manager Methods
+The KOManager provides methods to interact with the KO system programmatically.
+ +| Method | +Description | +
|---|---|
isKO(Player player) |
+ Check if player is currently in KO state | +
getKOData(Player player) |
+ Get KOData object for player (can be null) | +
setKO(Player player) |
+ Set player to KO state (default duration) | +
setKO(Player player, int seconds) |
+ Set player to KO for specific duration | +
revive(Player target, Player reviver) |
+ Revive a KO'd player | +
execute(Player player) |
+ Execute a KO'd player (permanent death) | +
toggleCrawl(Player player) |
+ Toggle crawling mode for KO'd player | +
sendDistress(Player player) |
+ Send distress signal for KO'd player | +
handleLogout(Player player) |
+ Handle player logout while KO'd | +
pullOfflineKO(UUID uuid) |
+ Get remaining KO time for offline player | +
Example Usage:
+// Check if player is KO'd
+if (koManager.isKO(player)) {
+ player.sendMessage("You are currently KO'd!");
+}
+
+// Force KO a player
+koManager.setKO(player, 30); // 30 seconds
+
+// Revive a player
+if (koManager.isKO(target)) {
+ koManager.revive(target, reviverPlayer);
+}
+
+// Execute a KO'd player
+if (koManager.isKO(target)) {
+ koManager.execute(target);
+}
+
+// Get KO data
+KOData koData = koManager.getKOData(player);
+if (koData != null && koData.isKo()) {
+ // Player is KO'd, access KO-specific data
+ long endTime = koData.getEndTimestamp();
+ boolean crawling = koData.isCrawling();
+}
+ Integration Examples
+ +Economy Integration
+@EventHandler
+public void onRevive(PlayerReanimatedEvent e) {
+ if (e.isSuccessful() && e.getReanimator() != null) {
+ Player medic = e.getReanimator();
+ economy.depositPlayer(medic, 100.0);
+ medic.sendMessage("§a+$100 for revival!");
+ }
+}
+ Team System
+@EventHandler
+public void onRevive(PlayerReanimatedEvent e) {
+ Player patient = e.getPlayer();
+ Player medic = e.getReanimator();
+
+ if (medic == null) return;
+
+ String patientTeam = getTeam(patient);
+ String medicTeam = getTeam(medic);
+
+ if (!patientTeam.equals(medicTeam)) {
+ medic.sendMessage("§cNot your team!");
+ // Note: Event isn't cancellable
+ }
+}
+ Achievement System
+@EventHandler
+public void onRevive(PlayerReanimatedEvent e) {
+ if (e.isSuccessful() && e.getReanimator() != null) {
+ Player medic = e.getReanimator();
+ int revivals = incrementStat(medic, "revivals");
+
+ if (revivals == 10) {
+ giveAchievement(medic, "First Aid");
+ } else if (revivals == 100) {
+ giveAchievement(medic, "Guardian Angel");
+ }
+ }
+}
+ Best Practices
+ +Recommended Practices
+-
+
- Null checks: Always check if
getReanimator()returns null
+ - KO verification: Use
isKO()before KO operations
+ - Event priorities: Use appropriate priorities for event handlers +
- Cache managers: Store manager references instead of fetching repeatedly +
- Soft dependencies: Use softdepend if ReanimateMC is optional +
Common Pitfalls
+-
+
- Missing null check:
getReanimator()can return null (command usage, NPC revival)
+ - Wrong event priority: Use HIGH/HIGHEST if you need to cancel before other plugins +
- Direct field access: Always use getter methods, don't access fields directly +
- Forgetting soft dependency: Declare in plugin.yml to avoid load order issues +