From d71bd15a79cdada001617be523b89ee4ce6044b8 Mon Sep 17 00:00:00 2001 From: Brettflan Date: Sun, 26 Feb 2012 12:29:44 -0600 Subject: [PATCH] Added possibility to specify a player in the /f join command (/f join [player=you]), to make a player other than yourself join the specified faction. The new permission factions.join.others (added to factions.kit.mod and above) is required to be able to specify a different player. Note that the player cannot currently already be in another faction; if they are, you'll need to /f kick them first. Also note that if the faction isn't open (with no invitation required), the player isn't invited, and you don't have the factions.join.any permission or have admin bypass mode on, the attempt will also fail. Also, added new log method which accepts arguments (like the msg method). --- plugin.yml | 3 + .../massivecraft/factions/cmd/CmdJoin.java | 56 +++++++++++-------- .../factions/struct/Permission.java | 1 + .../massivecraft/factions/zcore/MPlugin.java | 12 +++- 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/plugin.yml b/plugin.yml index e646a23f..9846e19f 100644 --- a/plugin.yml +++ b/plugin.yml @@ -27,6 +27,7 @@ permissions: factions.flag.set: true factions.powerboost: true factions.join.any: true + factions.join.others: true factions.leader.any: true factions.officer.any: true factions.kit.halfmod: @@ -109,6 +110,8 @@ permissions: description: join a faction factions.join.any: description: join any faction, bypassing invitation process for closed factions + factions.join.others: + description: specify another player in the join command, to move them to the specified faction factions.kick: description: kick a player from the faction factions.leader: diff --git a/src/com/massivecraft/factions/cmd/CmdJoin.java b/src/com/massivecraft/factions/cmd/CmdJoin.java index 4870c567..4527430e 100644 --- a/src/com/massivecraft/factions/cmd/CmdJoin.java +++ b/src/com/massivecraft/factions/cmd/CmdJoin.java @@ -2,6 +2,7 @@ package com.massivecraft.factions.cmd; import com.massivecraft.factions.Conf; import com.massivecraft.factions.Faction; +import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.P; import com.massivecraft.factions.struct.Permission; @@ -13,7 +14,7 @@ public class CmdJoin extends FCommand this.aliases.add("join"); this.requiredArgs.add("faction"); - //this.optionalArgs.put("", ""); + this.optionalArgs.put("player", "you"); this.permission = Permission.JOIN.node; this.disableOnLock = true; @@ -30,54 +31,65 @@ public class CmdJoin extends FCommand Faction faction = this.argAsFaction(0); if (faction == null) return; - /*if ( ! faction.isNormal()) - { - msg("You may only join normal factions. This is a system faction."); - return; - }*/ + FPlayer fplayer = this.argAsBestFPlayerMatch(1, fme, false); + boolean samePlayer = fplayer == fme; - if (faction == myFaction) + if (!samePlayer && ! Permission.JOIN_OTHERS.has(sender, false)) { - msg("You are already a member of %s", faction.getTag(fme)); + msg("You do not have permission to move other players into a faction."); + return; + } + + if (faction == fplayer.getFaction()) + { + msg("%s %s already a member of %s", fplayer.describeTo(fme, true), (samePlayer ? "are" : "is"), faction.getTag(fme)); return; } if (Conf.factionMemberLimit > 0 && faction.getFPlayers().size() >= Conf.factionMemberLimit) { - msg("The faction %s is at the limit of %d members, so you cannot currently join.", faction.getTag(fme)); + msg("The faction %s is at the limit of %d members, so %s cannot currently join.", faction.getTag(fme), fplayer.describeTo(fme, false)); return; } - if (fme.hasFaction()) + if (fplayer.hasFaction()) { - msg("You must leave your current faction first."); + msg("%s must leave %s current faction first.", fplayer.describeTo(fme, true), (samePlayer ? "your" : "their")); return; } - if (!Conf.canLeaveWithNegativePower && fme.getPower() < 0) + if (!Conf.canLeaveWithNegativePower && fplayer.getPower() < 0) { - msg("You cannot join a faction until your power is positive."); + msg("%s cannot join a faction with a negative power level.", fplayer.describeTo(fme, true)); return; } - if( ! (faction.getOpen() || faction.isInvited(fme) || fme.hasAdminMode() || Permission.JOIN_ANY.has(sender, false))) + if( ! (faction.getOpen() || faction.isInvited(fplayer) || fme.hasAdminMode() || Permission.JOIN_ANY.has(sender, false))) { msg("This faction requires invitation."); - faction.msg("%s tried to join your faction.", fme.describeTo(faction, true)); + if (samePlayer) + faction.msg("%s tried to join your faction.", fplayer.describeTo(faction, true)); return; } // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay - if ( ! 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("You successfully joined %s", faction.getTag(fme)); - faction.msg("%s joined your faction.", fme.describeTo(faction, true)); + fme.msg("%s successfully joined %s.", fplayer.describeTo(fme, true), faction.getTag(fme)); + if (!samePlayer) + fplayer.msg("%s moved you into the faction %s.", fme.describeTo(fplayer, true), faction.getTag(fplayer)); + faction.msg("%s joined your faction.", fplayer.describeTo(faction, true)); - fme.resetFactionData(); - fme.setFaction(faction); - faction.deinvite(fme); + fplayer.resetFactionData(); + fplayer.setFaction(faction); + faction.deinvite(fplayer); if (Conf.logFactionJoin) - P.p.log(fme.getName()+" joined the faction: "+faction.getTag()); + { + if (samePlayer) + P.p.log("%s joined the faction %s.", fplayer.getName(), faction.getTag()); + else + P.p.log("%s moved the player %s into the faction %s.", fme.getName(), fplayer.getName(), faction.getTag()); + } } } diff --git a/src/com/massivecraft/factions/struct/Permission.java b/src/com/massivecraft/factions/struct/Permission.java index 9c31b226..d106ff65 100644 --- a/src/com/massivecraft/factions/struct/Permission.java +++ b/src/com/massivecraft/factions/struct/Permission.java @@ -22,6 +22,7 @@ public enum Permission INVITE("invite"), JOIN("join"), JOIN_ANY("join.any"), + JOIN_OTHERS("join.others"), KICK("kick"), LEADER("leader"), LEADER_ANY("leader.any"), diff --git a/src/com/massivecraft/factions/zcore/MPlugin.java b/src/com/massivecraft/factions/zcore/MPlugin.java index 1fc362cd..b5254da5 100644 --- a/src/com/massivecraft/factions/zcore/MPlugin.java +++ b/src/com/massivecraft/factions/zcore/MPlugin.java @@ -216,7 +216,17 @@ public abstract class MPlugin extends JavaPlugin { log(Level.INFO, msg); } - + + public void log(String str, Object... args) + { + log(Level.INFO, this.txt.parse(str, args)); + } + + public void log(Level level, String str, Object... args) + { + log(level, this.txt.parse(str, args)); + } + public void log(Level level, Object msg) { Logger.getLogger("Minecraft").log(level, "["+this.getDescription().getFullName()+"] "+msg);