From 1f5dc830be5187bb0864b2152a4404b4de24b884 Mon Sep 17 00:00:00 2001 From: alkarin Date: Mon, 17 Dec 2012 10:10:13 -0600 Subject: [PATCH] Added a new Factions event for power loss named PowerLossEvent. PowerLossEvent happens after each player death --- .../factions/event/PowerLossEvent.java | 78 +++++++++++++++++++ .../listeners/FactionsEntityListener.java | 36 ++++++--- 2 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 src/com/massivecraft/factions/event/PowerLossEvent.java diff --git a/src/com/massivecraft/factions/event/PowerLossEvent.java b/src/com/massivecraft/factions/event/PowerLossEvent.java new file mode 100644 index 00000000..3012beaf --- /dev/null +++ b/src/com/massivecraft/factions/event/PowerLossEvent.java @@ -0,0 +1,78 @@ +package com.massivecraft.factions.event; + +import src.com.massivecraft.factions.FPlayer; +import src.com.massivecraft.factions.Faction; + +public class PowerLossEvent extends Event implements Cancellable +{ + private static final HandlerList handlers = new HandlerList(); + + private boolean cancelled; + private Faction faction; + private FPlayer fplayer; + private String message; + + public PowerLossEvent(Faction f, FPlayer p) + { + cancelled = false; + faction = f; + fplayer = p; + } + + @Override + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public Faction getFaction() + { + return faction; + } + + public String getFactionId() + { + return faction.getId(); + } + + public String getFactionTag() + { + return faction.getTag(); + } + + public FPlayer getFPlayer() + { + return fplayer; + } + + public Player getPlayer() + { + return fplayer.getPlayer(); + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + @Override + public boolean isCancelled() + { + return cancelled; + } + + @Override + public void setCancelled(boolean c) + { + this.cancelled = c; + } + +} diff --git a/src/com/massivecraft/factions/listeners/FactionsEntityListener.java b/src/com/massivecraft/factions/listeners/FactionsEntityListener.java index b506237e..3ff30992 100644 --- a/src/com/massivecraft/factions/listeners/FactionsEntityListener.java +++ b/src/com/massivecraft/factions/listeners/FactionsEntityListener.java @@ -57,6 +57,7 @@ public class FactionsEntityListener implements Listener this.p = p; } + @EventHandler(priority = EventPriority.NORMAL) public void onEntityDeath(EntityDeathEvent event) { @@ -66,21 +67,36 @@ public class FactionsEntityListener implements Listener Player player = (Player) entity; FPlayer fplayer = FPlayers.i.get(player); Faction faction = Board.getFactionAt(new FLocation(player.getLocation())); - + + PowerLossEvent powerLossEvent = new PowerLossEvent(faction,fplayer); + // Check for no power loss conditions if ( ! faction.getFlag(FFlag.POWERLOSS)) { - fplayer.msg("You didn't lose any power since the territory you died in works that way."); - return; + powerLossEvent.setMessage("You didn't lose any power since the territory you died in works that way."); + powerLossEvent.setCancelled(true); } - - if (Conf.worldsNoPowerLoss.contains(player.getWorld().getName())) + else if (Conf.worldsNoPowerLoss.contains(player.getWorld().getName())) { - fplayer.msg("You didn't lose any power due to the world you died in."); - return; + powerLossEvent.setMessage("You didn't lose any power due to the world you died in."); + powerLossEvent.setCancelled(true); + } + else { + powerLossEvent.setMessage("Your power is now "+fplayer.getPowerRounded()+" / "+fplayer.getPowerMaxRounded()); + } + // call Event + Bukkit.getPluginManager().callEvent(powerLossEvent); + + // Send the message from the powerLossEvent + final String msg = powerLossEvent.getMessage(); + if (msg != null && !msg.isEmpty()) + { + fplayer.msg(msg); + } + // Call player onDeath if the event is not cancelled + if(!powerLossEvent.isCancelled()) + { + fplayer.onDeath(); } - - fplayer.onDeath(); - fplayer.msg("Your power is now "+fplayer.getPowerRounded()+" / "+fplayer.getPowerMaxRounded()); } @EventHandler(priority = EventPriority.NORMAL)