updated patrickfreed's custom event system

Patrick's Custom Event System Changes:
----------------------------------------
  * FPlayerLeaveEvent now fires for all faction players in cmdDisband()
  * FPlayerLeaveEvent removed from cmdJoin()
  * FPlayerJoinEvent now only fires when the faction is different in cmdLeade
  * Added FactionRenameEvent, firing on cmdTag()
  * Added FactionRelationEvent, firing on FRelationCommand extensions
  * Fixed FPlayerJoinEvent to fire after tag is set in cmdCreate()
  * Added getFactionId() to FactionCreateEvent

TODO:
-------
  * cmdLeader() might need a FPlayerLeaveEvent for the same reason it needs
    a FPlayerJoinEvent?

On branch CustomFactionEvents

	modified:   src/com/massivecraft/factions/cmd/CmdCreate.java
	modified:   src/com/massivecraft/factions/cmd/CmdDisband.java
	modified:   src/com/massivecraft/factions/cmd/CmdJoin.java
	modified:   src/com/massivecraft/factions/cmd/CmdKick.java
	modified:   src/com/massivecraft/factions/cmd/CmdLeader.java
	modified:   src/com/massivecraft/factions/cmd/CmdTag.java
	modified:   src/com/massivecraft/factions/cmd/FRelationCommand.java
	modified:   src/com/massivecraft/factions/event/FPlayerLeaveEvent.java
	modified:   src/com/massivecraft/factions/event/FactionCreateEvent.java
	new file:   src/com/massivecraft/factions/event/FactionRelationEvent.java
	new file:   src/com/massivecraft/factions/event/FactionRenameEvent.java
	modified:   src/com/massivecraft/factions/event/LandClaimEvent.java
This commit is contained in:
donington 2012-03-09 17:09:33 -05:00
parent 021bf52c62
commit 6329fd0eaf
12 changed files with 287 additions and 123 deletions

View File

@ -57,10 +57,10 @@ public class CmdCreate extends FCommand
sendMessage(tagValidationErrors); sendMessage(tagValidationErrors);
return; return;
} }
FactionCreateEvent createEvent = new FactionCreateEvent(tag, me);
Bukkit.getServer().getPluginManager().callEvent(createEvent);
// trigger the faction creation event (cancellable)
FactionCreateEvent createEvent = new FactionCreateEvent(me, tag);
Bukkit.getServer().getPluginManager().callEvent(createEvent);
if(createEvent.isCancelled()) return; if(createEvent.isCancelled()) return;
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
@ -75,10 +75,15 @@ public class CmdCreate extends FCommand
return; return;
} }
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.i.get(me),faction,FPlayerJoinEvent.PlayerJoinReason.CREATE); // finish setting up the Faction
Bukkit.getServer().getPluginManager().callEvent(joinEvent); faction.setTag(tag);
faction.setTag(tag); // trigger the faction join event for the creator
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.i.get(me),faction,FPlayerJoinEvent.PlayerJoinReason.CREATE);
Bukkit.getServer().getPluginManager().callEvent(joinEvent);
// join event cannot be cancelled or you'll have an empty faction
// finish setting up the FPlayer
fme.setRole(Rel.LEADER); fme.setRole(Rel.LEADER);
fme.setFaction(faction); fme.setFaction(faction);

View File

@ -1,91 +1,96 @@
package com.massivecraft.factions.cmd; package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import com.massivecraft.factions.Conf; import com.massivecraft.factions.Conf;
import com.massivecraft.factions.event.FPlayerLeaveEvent; import com.massivecraft.factions.event.FPlayerLeaveEvent;
import com.massivecraft.factions.event.FactionDisbandEvent; import com.massivecraft.factions.event.FactionDisbandEvent;
import com.massivecraft.factions.integration.Econ; import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.FPlayers; import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction; import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P; import com.massivecraft.factions.P;
import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.FFlag; import com.massivecraft.factions.struct.FFlag;
import com.massivecraft.factions.struct.FPerm; import com.massivecraft.factions.struct.FPerm;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
public class CmdDisband extends FCommand public class CmdDisband extends FCommand
{ {
public CmdDisband() public CmdDisband()
{ {
super(); super();
this.aliases.add("disband"); this.aliases.add("disband");
//this.requiredArgs.add(""); //this.requiredArgs.add("");
this.optionalArgs.put("faction", "your"); this.optionalArgs.put("faction", "your");
this.permission = Permission.DISBAND.node; this.permission = Permission.DISBAND.node;
this.disableOnLock = true; this.disableOnLock = true;
senderMustBePlayer = false; senderMustBePlayer = false;
senderMustBeMember = false; senderMustBeMember = false;
senderMustBeOfficer = false; senderMustBeOfficer = false;
senderMustBeLeader = false; senderMustBeLeader = false;
} }
@Override @Override
public void perform() public void perform()
{ {
// The faction, default to your own.. but null if console sender. // The faction, default to your own.. but null if console sender.
Faction faction = this.argAsFaction(0, fme == null ? null : myFaction); Faction faction = this.argAsFaction(0, fme == null ? null : myFaction);
if (faction == null) return; if (faction == null) return;
if ( ! FPerm.DISBAND.has(sender, faction, true)) return; if ( ! FPerm.DISBAND.has(sender, faction, true)) return;
if (faction.getFlag(FFlag.PERMANENT)) if (faction.getFlag(FFlag.PERMANENT))
{ {
msg("<i>This faction is designated as permanent, so you cannot disband it."); msg("<i>This faction is designated as permanent, so you cannot disband it.");
return; return;
} }
FactionDisbandEvent disbandEvent = new FactionDisbandEvent(me, faction.getId()); FactionDisbandEvent disbandEvent = new FactionDisbandEvent(me, faction.getId());
Bukkit.getServer().getPluginManager().callEvent(disbandEvent); Bukkit.getServer().getPluginManager().callEvent(disbandEvent);
if(disbandEvent.isCancelled()) return; if(disbandEvent.isCancelled()) return;
// Inform all players // Send FPlayerLeaveEvent for each player in the faction
for (FPlayer fplayer : FPlayers.i.getOnline()) for ( FPlayer fplayer : faction.getFPlayers() )
{ {
String who = senderIsConsole ? "A server admin" : fme.describeTo(fplayer); Bukkit.getServer().getPluginManager().callEvent(new FPlayerLeaveEvent(fplayer, faction, FPlayerLeaveEvent.PlayerLeaveReason.DISBAND));
if (fplayer.getFaction() == faction) }
{
Bukkit.getServer().getPluginManager().callEvent(new FPlayerLeaveEvent(fplayer,faction, FPlayerLeaveEvent.PlayerLeaveReason.DISBAND)); // Inform all players
fplayer.msg("<h>%s<i> disbanded your faction.", who); for (FPlayer fplayer : FPlayers.i.getOnline())
} {
else String who = senderIsConsole ? "A server admin" : fme.describeTo(fplayer);
{ if (fplayer.getFaction() == faction)
fplayer.msg("<h>%s<i> disbanded the faction %s.", who, faction.getTag(fplayer)); {
} fplayer.msg("<h>%s<i> disbanded your faction.", who);
} }
if (Conf.logFactionDisband) else
P.p.log("The faction "+faction.getTag()+" ("+faction.getId()+") was disbanded by "+(senderIsConsole ? "console command" : fme.getName())+"."); {
fplayer.msg("<h>%s<i> disbanded the faction %s.", who, faction.getTag(fplayer));
if (Econ.shouldBeUsed() && ! senderIsConsole) }
{ }
//Give all the faction's money to the disbander if (Conf.logFactionDisband)
double amount = Econ.getBalance(faction.getAccountId()); P.p.log("The faction "+faction.getTag()+" ("+faction.getId()+") was disbanded by "+(senderIsConsole ? "console command" : fme.getName())+".");
Econ.transferMoney(fme, faction, fme, amount, false);
if (Econ.shouldBeUsed() && ! senderIsConsole)
if (amount > 0.0) {
{ //Give all the faction's money to the disbander
String amountString = Econ.moneyString(amount); double amount = Econ.getBalance(faction.getAccountId());
msg("<i>You have been given the disbanded faction's bank, totaling %s.", amountString); Econ.transferMoney(fme, faction, fme, amount, false);
P.p.log(fme.getName() + " has been given bank holdings of "+amountString+" from disbanding "+faction.getTag()+".");
} if (amount > 0.0)
} {
String amountString = Econ.moneyString(amount);
faction.detach(); msg("<i>You have been given the disbanded faction's bank, totaling %s.", amountString);
P.p.log(fme.getName() + " has been given bank holdings of "+amountString+" from disbanding "+faction.getTag()+".");
SpoutFeatures.updateAppearances(); }
} }
}
faction.detach();
SpoutFeatures.updateAppearances();
}
}

View File

@ -8,9 +8,7 @@ import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.P; import com.massivecraft.factions.P;
import com.massivecraft.factions.event.FPlayerJoinEvent; import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.event.FPlayerLeaveEvent;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.persist.EM;
public class CmdJoin extends FCommand public class CmdJoin extends FCommand
{ {
@ -82,14 +80,8 @@ public class CmdJoin extends FCommand
if (samePlayer && ! payForCommand(Conf.econCostJoin, "to join a faction", "for joining a faction")) return; if (samePlayer && ! payForCommand(Conf.econCostJoin, "to join a faction", "for joining a faction")) return;
fme.msg("<i>%s successfully joined %s.", fplayer.describeTo(fme, true), faction.getTag(fme)); fme.msg("<i>%s successfully joined %s.", fplayer.describeTo(fme, true), faction.getTag(fme));
if(!EM.detached(myFaction)) // trigger the join event (cancellable)
{
FPlayerLeaveEvent leaveEvent = new FPlayerLeaveEvent(FPlayers.i.get(me),faction,FPlayerLeaveEvent.PlayerLeaveReason.JOINOTHER);
Bukkit.getServer().getPluginManager().callEvent(leaveEvent);
if (leaveEvent.isCancelled()) return;
}
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.i.get(me),faction,FPlayerJoinEvent.PlayerJoinReason.COMMAND); FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.i.get(me),faction,FPlayerJoinEvent.PlayerJoinReason.COMMAND);
Bukkit.getServer().getPluginManager().callEvent(joinEvent); Bukkit.getServer().getPluginManager().callEvent(joinEvent);
if (joinEvent.isCancelled()) return; if (joinEvent.isCancelled()) return;

View File

@ -63,6 +63,7 @@ public class CmdKick extends FCommand
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostKick, "to kick someone from the faction", "for kicking someone from the faction")) return; if ( ! payForCommand(Conf.econCostKick, "to kick someone from the faction", "for kicking someone from the faction")) return;
// trigger the leave event (cancellable) [reason:kicked]
FPlayerLeaveEvent event = new FPlayerLeaveEvent(you, you.getFaction(), FPlayerLeaveEvent.PlayerLeaveReason.KICKED); FPlayerLeaveEvent event = new FPlayerLeaveEvent(you, you.getFaction(), FPlayerLeaveEvent.PlayerLeaveReason.KICKED);
Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) return; if (event.isCancelled()) return;

View File

@ -66,11 +66,16 @@ public class CmdLeader extends FCommand
return; return;
} }
} }
FPlayerJoinEvent event = new FPlayerJoinEvent(FPlayers.i.get(me),targetFaction,FPlayerJoinEvent.PlayerJoinReason.LEADER); // only perform a FPlayerJoinEvent when newLeader isn't actually in the faction
Bukkit.getServer().getPluginManager().callEvent(event); // (only possibly triggered by console)
if (event.isCancelled()) return; if (newLeader.getFaction() != targetFaction)
{
FPlayerJoinEvent event = new FPlayerJoinEvent(FPlayers.i.get(me),targetFaction,FPlayerJoinEvent.PlayerJoinReason.LEADER);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) return;
}
// if target player is currently leader, demote and replace him // if target player is currently leader, demote and replace him
if (targetFactionCurrentLeader == newLeader) if (targetFactionCurrentLeader == newLeader)
{ {

View File

@ -2,9 +2,12 @@ package com.massivecraft.factions.cmd;
import java.util.ArrayList; import java.util.ArrayList;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Conf; import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction; import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions; import com.massivecraft.factions.Factions;
import com.massivecraft.factions.event.FactionRenameEvent;
import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.MiscUtil; import com.massivecraft.factions.util.MiscUtil;
@ -39,7 +42,7 @@ public class CmdTag extends FCommand
msg("<b>That tag is already taken"); msg("<b>That tag is already taken");
return; return;
} }
ArrayList<String> errors = new ArrayList<String>(); ArrayList<String> errors = new ArrayList<String>();
errors.addAll(Factions.validateTag(tag)); errors.addAll(Factions.validateTag(tag));
if (errors.size() > 0) if (errors.size() > 0)
@ -48,12 +51,17 @@ public class CmdTag extends FCommand
return; return;
} }
// trigger the faction rename event (cancellable)
FactionRenameEvent renameEvent = new FactionRenameEvent(fme, tag);
Bukkit.getServer().getPluginManager().callEvent(renameEvent);
if(renameEvent.isCancelled()) return;
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostTag, "to change the faction tag", "for changing the faction tag")) return; if ( ! payForCommand(Conf.econCostTag, "to change the faction tag", "for changing the faction tag")) return;
String oldtag = myFaction.getTag(); String oldtag = myFaction.getTag();
myFaction.setTag(tag); myFaction.setTag(tag);
// Inform // Inform
myFaction.msg("%s<i> changed your faction tag to %s", fme.describeTo(myFaction, true), myFaction.getTag(myFaction)); myFaction.msg("%s<i> changed your faction tag to %s", fme.describeTo(myFaction, true), myFaction.getTag(myFaction));
for (Faction faction : Factions.i.get()) for (Faction faction : Factions.i.get())

View File

@ -1,7 +1,10 @@
package com.massivecraft.factions.cmd; package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Conf; import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction; import com.massivecraft.factions.Faction;
import com.massivecraft.factions.event.FactionRelationEvent;
import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.FFlag; import com.massivecraft.factions.struct.FFlag;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
@ -47,13 +50,22 @@ public abstract class FRelationCommand extends FCommand
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(targetRelation.getRelationCost(), "to change a relation wish", "for changing a relation wish")) return; if ( ! payForCommand(targetRelation.getRelationCost(), "to change a relation wish", "for changing a relation wish")) return;
// try to set the new relation
Rel oldRelation = myFaction.getRelationTo(them, true);
myFaction.setRelationWish(them, targetRelation); myFaction.setRelationWish(them, targetRelation);
Rel currentRelation = myFaction.getRelationTo(them, true); Rel currentRelation = myFaction.getRelationTo(them, true);
// if the relation change was successful
if (targetRelation == currentRelation) if (targetRelation == currentRelation)
{ {
// trigger the faction relation event
FactionRelationEvent relationEvent = new FactionRelationEvent(myFaction, them, oldRelation, currentRelation);
Bukkit.getServer().getPluginManager().callEvent(relationEvent);
them.msg("%s<i> is now %s.", myFaction.describeTo(them, true), targetRelation.getDescFactionOne()); them.msg("%s<i> is now %s.", myFaction.describeTo(them, true), targetRelation.getDescFactionOne());
myFaction.msg("%s<i> is now %s.", them.describeTo(myFaction, true), targetRelation.getDescFactionOne()); myFaction.msg("%s<i> is now %s.", them.describeTo(myFaction, true), targetRelation.getDescFactionOne());
} }
// inform the other faction of your request
else else
{ {
them.msg("%s<i> wishes to be %s.", myFaction.describeTo(them, true), targetRelation.getColor()+targetRelation.getDescFactionOne()); them.msg("%s<i> wishes to be %s.", myFaction.describeTo(them, true), targetRelation.getColor()+targetRelation.getDescFactionOne());
@ -62,6 +74,7 @@ public abstract class FRelationCommand extends FCommand
} }
// TODO: The ally case should work!! // TODO: The ally case should work!!
// * this might have to be bumped up to make that happen, & allow ALLY,NEUTRAL only
if ( targetRelation != Rel.TRUCE && them.getFlag(FFlag.PEACEFUL)) if ( targetRelation != Rel.TRUCE && them.getFlag(FFlag.PEACEFUL))
{ {
them.msg("<i>This will have no effect while your faction is peaceful."); them.msg("<i>This will have no effect while your faction is peaceful.");

View File

@ -15,7 +15,7 @@ public class FPlayerLeaveEvent extends Event implements Cancellable
Faction Faction; Faction Faction;
boolean cancelled = false; boolean cancelled = false;
public enum PlayerLeaveReason public enum PlayerLeaveReason
{ {
KICKED, DISBAND, RESET, JOINOTHER, LEAVE KICKED, DISBAND, RESET, JOINOTHER, LEAVE
} }

View File

@ -7,6 +7,7 @@ import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers; import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Factions;
public class FactionCreateEvent extends Event implements Cancellable public class FactionCreateEvent extends Event implements Cancellable
{ {
@ -16,7 +17,7 @@ public class FactionCreateEvent extends Event implements Cancellable
private Player sender; private Player sender;
private boolean cancelled; private boolean cancelled;
public FactionCreateEvent(String tag, Player sender) public FactionCreateEvent(Player sender, String tag)
{ {
this.factionTag = tag; this.factionTag = tag;
this.sender = sender; this.sender = sender;
@ -28,11 +29,16 @@ public class FactionCreateEvent extends Event implements Cancellable
return FPlayers.i.get(sender); return FPlayers.i.get(sender);
} }
public String getFactionId()
{
return Factions.i.getNextId();
}
public String getFactionTag() public String getFactionTag()
{ {
return factionTag; return factionTag;
} }
public HandlerList getHandlers() public HandlerList getHandlers()
{ {
return handlers; return handlers;

View File

@ -0,0 +1,56 @@
package com.massivecraft.factions.event;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.struct.Rel;
import com.massivecraft.factions.Faction;
public class FactionRelationEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private Faction fsender;
private Faction ftarget;
private Rel foldrel;
private Rel frel;
public FactionRelationEvent(Faction sender, Faction target, Rel oldrel, Rel rel)
{
fsender = sender;
ftarget = target;
foldrel = oldrel;
frel = rel;
}
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
public Rel getOldRelation()
{
return foldrel;
}
public Rel getRelation()
{
return frel;
}
public Faction getFaction()
{
return fsender;
}
public Faction getTargetFaction()
{
return ftarget;
}
}

View File

@ -0,0 +1,73 @@
package com.massivecraft.factions.event;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
public class FactionRenameEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled;
private FPlayer fplayer;
private Faction faction;
private String tag;
public FactionRenameEvent(FPlayer sender, String newTag)
{
fplayer = sender;
faction = sender.getFaction();
tag = newTag;
this.cancelled = false;
}
public Faction getFaction()
{
return(faction);
}
public FPlayer getFPlayer()
{
return(fplayer);
}
public Player getPlayer()
{
return(fplayer.getPlayer());
}
public String getOldFactionTag()
{
return(faction.getTag());
}
public String getFactionTag()
{
return(tag);
}
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
@Override
public boolean isCancelled()
{
return cancelled;
}
@Override
public void setCancelled(boolean c)
{
this.cancelled = c;
}
}

View File

@ -18,12 +18,12 @@ public class LandClaimEvent extends Event implements Cancellable
private FLocation location; private FLocation location;
private String factionId, playerId; private String factionId, playerId;
public LandClaimEvent(FLocation loc, String id, String pid) public LandClaimEvent(FLocation loc, String fid, String pid)
{ {
cancelled = false; cancelled = false;
location = loc; location = loc;
factionId = id; this.factionId = fid;
playerId = pid; this.playerId = pid;
} }
public HandlerList getHandlers() public HandlerList getHandlers()