Saber-Factions/src/com/massivecraft/factions/cmd/CmdAdmin.java
Brettflan edcb681210 Server admins can now promote or demote any member of any faction to/from faction admin or moderator using the existing /f admin and /f mod commands, which can now also be used from the server console. Two new permissions are added to allow that. A third permission is also added to allow server admins or moderators to join any faction without the need of /f bypass mode.
Also, a couple more minor bugfixes are included for /f home payment giving the wrong message, player/faction descriptions being wrong for console messages, and potential NPE in new faction admin promotion routine if faction was permanent with no current admin.

New permissions:
factions.admin.any - allows use of /f admin on any player in any faction
factions mod.any - allows use of /f mod on any player in any faction
factions.join.any - allows player to join any faction, bypassing invitation process for closed factions (the same as players with /f bypass enabled can do)
2012-01-18 06:01:29 -06:00

80 lines
2.2 KiB
Java

package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
public class CmdAdmin extends FCommand
{
public CmdAdmin()
{
super();
this.aliases.add("admin");
this.requiredArgs.add("player name");
//this.optionalArgs.put("", "");
this.permission = Permission.ADMIN.node;
this.disableOnLock = true;
senderMustBePlayer = false;
senderMustBeMember = false;
senderMustBeModerator = false;
senderMustBeAdmin = false;
}
@Override
public void perform()
{
FPlayer fyou = this.argAsBestFPlayerMatch(0);
if (fyou == null) return;
boolean permAny = Permission.ADMIN_ANY.has(sender, false);
Faction targetFaction = fyou.getFaction();
if (targetFaction != myFaction && !permAny)
{
msg("%s<i> is not a member in your faction.", fyou.describeTo(fme, true));
return;
}
if (fme != null && fme.getRole() != Role.ADMIN && !permAny)
{
msg("<b>You are not the faction admin.");
return;
}
if (fyou == fme && !permAny)
{
msg("<b>The target player musn't be yourself.");
return;
}
FPlayer admin = targetFaction.getFPlayerAdmin();
// if target player is currently admin, demote and replace him
if (fyou == admin)
{
targetFaction.promoteNewLeader();
msg("<i>You have demoted %s<i> from the position of faction admin.", fyou.describeTo(fme, true));
fyou.msg("<i>You have been demoted from the position of faction admin by %s<i>.", senderIsConsole ? "a server admin" : fme.describeTo(fyou, true));
return;
}
// promote target player, and demote existing admin if one exists
if (admin != null)
admin.setRole(Role.MODERATOR);
fyou.setRole(Role.ADMIN);
msg("<i>You have promoted %s<i> to the position of faction admin.", fyou.describeTo(fme, true));
// Inform all players
for (FPlayer fplayer : FPlayers.i.getOnline())
{
fplayer.msg("%s<i> gave %s<i> the leadership of %s<i>.", senderIsConsole ? "A server admin" : fme.describeTo(fplayer, true), fyou.describeTo(fplayer), targetFaction.describeTo(fplayer));
}
}
}