From 544fd91de91c3a25898a872d81e3d771fff5d752 Mon Sep 17 00:00:00 2001 From: garbagemule Date: Thu, 8 Aug 2013 06:09:07 +0200 Subject: [PATCH] Introduce "last player standing" to death event. It is now possible to check if an arena player who died was the last player alive in the arena. Useful for special rewards and stuff. --- resources/plugin.yml | 2 +- src/com/garbagemule/MobArena/ArenaImpl.java | 17 ++++++++++++++--- .../MobArena/events/ArenaPlayerDeathEvent.java | 10 ++++++++-- .../garbagemule/MobArena/framework/Arena.java | 2 ++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/resources/plugin.yml b/resources/plugin.yml index 3586766..cff6975 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,7 +1,7 @@ name: MobArena author: garbagemule main: com.garbagemule.MobArena.MobArena -version: 0.95.5.11 +version: 0.95.5.12 softdepend: [Spout,Towny,Heroes,MagicSpells,Vault] commands: ma: diff --git a/src/com/garbagemule/MobArena/ArenaImpl.java b/src/com/garbagemule/MobArena/ArenaImpl.java index 65e8d86..0c52b4c 100644 --- a/src/com/garbagemule/MobArena/ArenaImpl.java +++ b/src/com/garbagemule/MobArena/ArenaImpl.java @@ -98,6 +98,9 @@ public class ArenaImpl implements Arena // Scoreboards private ScoreboardManager scoreboard; + + // Last player standing + private Player lastStanding; /** * Primary constructor. Requires a name and a world. @@ -484,6 +487,9 @@ public class ArenaImpl implements Arena if (event.isCancelled()) { return false; } + + // Reset last standing + lastStanding = null; // Set the running boolean and disable arena if not disabled. boolean en = enabled; @@ -652,9 +658,9 @@ public class ArenaImpl implements Arena public void playerDeath(Player p) { // Fire the event - ArenaPlayerDeathEvent event = new ArenaPlayerDeathEvent(p, this); + ArenaPlayerDeathEvent event = new ArenaPlayerDeathEvent(p, this, arenaPlayers.size() == 1); plugin.getServer().getPluginManager().callEvent(event); - + arenaPlayers.remove(p); if (!settings.getBoolean("auto-respawn", true)) { @@ -1053,7 +1059,7 @@ public class ArenaImpl implements Arena private void replacePermissions(Player p, PermissionAttachment rep) { PermissionAttachment old = attachments.get(p); if (old != null) { - p.removeAttachment(old); + old.remove(); p.recalculatePermissions(); } if (rep != null) { @@ -1403,6 +1409,11 @@ public class ArenaImpl implements Arena public boolean hasIsolatedChat() { return isolatedChat; } + + @Override + public Player getLastPlayerStanding() { + return lastStanding; + } /** * The "perfect equals method" cf. "Object-Oriented Design and Patterns" diff --git a/src/com/garbagemule/MobArena/events/ArenaPlayerDeathEvent.java b/src/com/garbagemule/MobArena/events/ArenaPlayerDeathEvent.java index aedde08..e8c8bc1 100644 --- a/src/com/garbagemule/MobArena/events/ArenaPlayerDeathEvent.java +++ b/src/com/garbagemule/MobArena/events/ArenaPlayerDeathEvent.java @@ -11,10 +11,12 @@ public class ArenaPlayerDeathEvent extends Event private static final HandlerList handlers = new HandlerList(); private Player player; private Arena arena; + private boolean last; - public ArenaPlayerDeathEvent(Player player, Arena arena) { + public ArenaPlayerDeathEvent(Player player, Arena arena, boolean last) { this.player = player; - this.arena = arena; + this.arena = arena; + this.last = last; } public Player getPlayer() { @@ -24,6 +26,10 @@ public class ArenaPlayerDeathEvent extends Event public Arena getArena() { return arena; } + + public boolean wasLastPlayerStanding() { + return last; + } public HandlerList getHandlers() { return handlers; diff --git a/src/com/garbagemule/MobArena/framework/Arena.java b/src/com/garbagemule/MobArena/framework/Arena.java index 23a42a4..90071df 100644 --- a/src/com/garbagemule/MobArena/framework/Arena.java +++ b/src/com/garbagemule/MobArena/framework/Arena.java @@ -239,4 +239,6 @@ public interface Arena public boolean canSpec(Player p); public boolean hasIsolatedChat(); + + public Player getLastPlayerStanding(); }