package com.massivecraft.factions.cmd; import java.util.HashSet; import java.util.List; import java.util.Set; import com.massivecraft.factions.Factions; import com.massivecraft.factions.Perm; import com.massivecraft.factions.cmd.arg.ARMPlayer; import com.massivecraft.factions.entity.MPerm; import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.event.EventFactionsInvitedChange; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.cmd.arg.ARSet; import com.massivecraft.massivecore.cmd.req.ReqHasPerm; public class CmdFactionsInviteRemove extends FactionsCommand { // -------------------------------------------- // // CONSTRUCT // -------------------------------------------- // public CmdFactionsInviteRemove() { // Aliases this.addAliases("r", "remove"); // Args this.addArg(ARSet.get(ARMPlayer.get(), true), "players/all", true); // Requirements this.addRequirements(ReqHasPerm.get(Perm.INVITE_REMOVE.node)); } // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // @Override public void perform() throws MassiveException { Set mplayers = new HashSet(); boolean all = false; // Args if ("all".equalsIgnoreCase(this.argAt(0))) { List invitedPlayers = msenderFaction.getInvitedMPlayers(); // Doesn't show up if list is empty. Test at home if it worked. if (invitedPlayers == null || invitedPlayers.isEmpty()) { msg("Your faction has not invited anyone."); return; } all = true; mplayers.addAll(invitedPlayers); } else { mplayers = this.readArgAt(0); } // MPerm if ( ! MPerm.getPermInvite().has(msender, msenderFaction, true)) return; for (MPlayer mplayer : mplayers) { // Already member? if (mplayer.getFaction() == msenderFaction) { msg("%s is already a member of %s.", mplayer.getName(), msenderFaction.getName()); msg("You might want to: " + Factions.get().getOuterCmdFactions().cmdFactionsKick.getUseageTemplate(false)); continue; } // Already invited? boolean isInvited = msenderFaction.isInvited(mplayer); if (isInvited) { // Event EventFactionsInvitedChange event = new EventFactionsInvitedChange(sender, mplayer, msenderFaction, isInvited); event.run(); if (event.isCancelled()) continue; isInvited = event.isNewInvited(); // Inform Player mplayer.msg("%s revoked your invitation to %s.", msender.describeTo(mplayer, true), msenderFaction.describeTo(mplayer)); // Inform Faction if ( ! all) { msenderFaction.msg("%s revoked %s's invitation.", msender.describeTo(msenderFaction), mplayer.describeTo(msenderFaction)); } // Apply msenderFaction.setInvited(mplayer, false); } else { // Inform msg("%s is not invited to %s.", mplayer.describeTo(msender, true), msenderFaction.describeTo(mplayer)); msg("You might want to: " + Factions.get().getOuterCmdFactions().cmdFactionsInvite.cmdFactionsInviteAdd.getUseageTemplate(false)); } } // Inform Faction if all if (all) { msenderFaction.msg("%s revoked all %s pending invitations from your faction.", msender.describeTo(msenderFaction), mplayers.size()); } } }