Made /f kick command work on any player in any faction, if the person using the command has the admin-level "disband" permission

This commit is contained in:
Brettflan 2011-07-08 22:06:55 -05:00
parent 232ae5dce1
commit 787e6b867a
2 changed files with 37 additions and 22 deletions

View File

@ -581,8 +581,7 @@ public class FPlayer {
public static FPlayer find(String playername) { public static FPlayer find(String playername) {
for (Entry<String, FPlayer> entry : instances.entrySet()) { for (Entry<String, FPlayer> entry : instances.entrySet()) {
// if (entry.getKey().equalsIgnoreCase(playername)) { if (entry.getKey().equalsIgnoreCase(playername) || entry.getKey().startsWith(playername)) {
if (entry.getKey().startsWith(playername)) {
return entry.getValue(); return entry.getValue();
} }
} }

View File

@ -3,6 +3,7 @@ package org.mcteam.factions.commands;
import org.mcteam.factions.Conf; import org.mcteam.factions.Conf;
import org.mcteam.factions.FPlayer; import org.mcteam.factions.FPlayer;
import org.mcteam.factions.Faction; import org.mcteam.factions.Faction;
import org.mcteam.factions.Factions;
public class FCommandKick extends FBaseCommand { public class FCommandKick extends FBaseCommand {
@ -29,34 +30,49 @@ public class FCommandKick extends FBaseCommand {
return; return;
} }
Faction myFaction = me.getFaction();
if (you.getFaction() != myFaction) {
sendMessage(you.getNameAndRelevant(me)+Conf.colorSystem+" is not a member of "+myFaction.getTag(me));
return;
}
if (me == you) { if (me == you) {
sendMessage("You cannot kick yourself."); sendMessage("You cannot kick yourself.");
sendMessage("You might want to: " + new FCommandLeave().getUseageTemplate(false)); sendMessage("You might want to: " + new FCommandLeave().getUseageTemplate(false));
return; return;
} }
if (you.getRole().value >= me.getRole().value) { // TODO add more informative messages. Faction yourFaction = you.getFaction();
sendMessage("Your rank is too low to kick this player."); Faction myFaction = me.getFaction();
return;
// players with admin-level "disband" permission can bypass these requirements
if (!Factions.hasPermDisband(sender)) {
if (yourFaction != myFaction) {
sendMessage(you.getNameAndRelevant(me)+Conf.colorSystem+" is not a member of "+myFaction.getTag(me));
return;
}
if (you.getRole().value >= me.getRole().value) { // TODO add more informative messages.
sendMessage("Your rank is too low to kick this player.");
return;
}
if (!Conf.CanLeaveWithNegativePower && you.getPower() < 0) {
sendMessage("You cannot kick that member until their power is positive.");
return;
}
} }
if (!Conf.CanLeaveWithNegativePower && you.getPower() < 0) { yourFaction.sendMessage(me.getNameAndRelevant(yourFaction)+Conf.colorSystem+" kicked "+you.getNameAndRelevant(yourFaction)+Conf.colorSystem+" from the faction! :O");
sendMessage("You cannot kick that member until their power is positive."); you.sendMessage(me.getNameAndRelevant(you)+Conf.colorSystem+" kicked you from "+yourFaction.getTag(you)+Conf.colorSystem+"! :O");
return; if (yourFaction != myFaction) {
me.sendMessage(Conf.colorSystem+"You kicked "+you.getNameAndRelevant(myFaction)+Conf.colorSystem+" from the faction "+yourFaction.getTag(me)+Conf.colorSystem+"!");
} }
myFaction.deinvite(you); yourFaction.deinvite(you);
you.resetFactionData(); you.resetFactionData();
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" kicked "+you.getNameAndRelevant(myFaction)+Conf.colorSystem+" from the faction! :O"); if (yourFaction.getFPlayers().isEmpty()) {
you.sendMessage(me.getNameAndRelevant(you)+Conf.colorSystem+" kicked you from "+myFaction.getTag(you)+Conf.colorSystem+"! :O"); // Remove this faction
for (FPlayer fplayer : FPlayer.getAllOnline()) {
fplayer.sendMessage("The faction "+yourFaction.getTag(fplayer)+Conf.colorSystem+" was disbanded.");
}
Faction.delete(yourFaction.getId());
}
} }
} }