diff --git a/classes/artifacts/Factions_jar/Factions.jar b/classes/artifacts/Factions_jar/Factions.jar new file mode 100644 index 00000000..1487877f Binary files /dev/null and b/classes/artifacts/Factions_jar/Factions.jar differ diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdBan.java b/src/main/java/com/massivecraft/factions/cmd/CmdBan.java index c899812d..15a78cd5 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdBan.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdBan.java @@ -34,16 +34,12 @@ public class CmdBan extends FCommand { @Override public void perform() { - // Adds bypass to admins and clean permission check - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.BAN); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "ban"); - return; - } + // Simplified for clarity + if (!this.hasAccess(PermissableAction.BAN)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage bans"); + return; } - // Good on permission checks. Now lets just ban the player. FPlayer target = argAsFPlayer(0); if (target == null) { diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdBanlist.java b/src/main/java/com/massivecraft/factions/cmd/CmdBanlist.java index 42d8c7e5..0e1cacb3 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdBanlist.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdBanlist.java @@ -6,6 +6,7 @@ import com.massivecraft.factions.Faction; import com.massivecraft.factions.Factions; import com.massivecraft.factions.struct.BanInfo; import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.fperms.PermissableAction; import com.massivecraft.factions.zcore.util.TL; import java.util.ArrayList; @@ -32,6 +33,10 @@ public class CmdBanlist extends FCommand { @Override public void perform() { + if (!this.hasAccess(PermissableAction.BAN)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage bans"); + return; + } Faction target = myFaction; if (!args.isEmpty()) { target = argAsFaction(0); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdChest.java b/src/main/java/com/massivecraft/factions/cmd/CmdChest.java index 52fa12c5..b0bd3d00 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdChest.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdChest.java @@ -32,12 +32,9 @@ public class CmdChest extends FCommand { return; } // This permission check is way too explicit but it's clean - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.CHEST); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "access chest"); - return; - } + if (!this.hasAccess(PermissableAction.CHEST)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "access chest"); + return; } me.openInventory(fme.getFaction().getChest()); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java b/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java index fe605796..bbdcecd5 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java @@ -37,12 +37,9 @@ public class CmdClaim extends FCommand { int radius = this.argAsInt(0, 1); // Default to 1 final Faction forFaction = this.argAsFaction(1, myFaction); // Default to own - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.TERRITORY); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "change faction territory"); - return; - } + if (!this.hasAccess(PermissableAction.TERRITORY)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "change faction territory"); + return; } diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdDeinvite.java b/src/main/java/com/massivecraft/factions/cmd/CmdDeinvite.java index 540140f0..a0412777 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdDeinvite.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdDeinvite.java @@ -34,12 +34,9 @@ public class CmdDeinvite extends FCommand { @Override public void perform() { FPlayer you = this.argAsBestFPlayerMatch(0); - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.INVITE); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites"); - return; - } + if (!this.hasAccess(PermissableAction.INVITE)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites"); + return; } if (you == null) { FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdDelFWarp.java b/src/main/java/com/massivecraft/factions/cmd/CmdDelFWarp.java index 00583e25..cb3cefc7 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdDelFWarp.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdDelFWarp.java @@ -3,6 +3,7 @@ package com.massivecraft.factions.cmd; import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.P; import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.fperms.PermissableAction; import com.massivecraft.factions.zcore.util.TL; public class CmdDelFWarp extends FCommand { @@ -22,6 +23,10 @@ public class CmdDelFWarp extends FCommand { @Override public void perform() { String warp = argAsString(0); + if (!this.hasAccess(PermissableAction.WARP)){ + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage warps"); + return; + } if (myFaction.isWarp(warp)) { if (!transact(fme)) { return; diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java b/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java index 90177f22..4a18fb13 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java @@ -45,13 +45,6 @@ public class CmdDisband extends FCommand { boolean isMyFaction = fme != null && faction == myFaction; - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.DISBAND); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "disband faction"); - return; - } - } if (!faction.isNormal()) { msg(TL.COMMAND_DISBAND_IMMUTABLE.toString()); return; @@ -60,6 +53,10 @@ public class CmdDisband extends FCommand { msg(TL.COMMAND_DISBAND_MARKEDPERMANENT.toString()); return; } + if (!this.hasAccess(PermissableAction.DISBAND)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "disband faction"); + return; + } // check for tnt before disbanding. diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdFWarp.java b/src/main/java/com/massivecraft/factions/cmd/CmdFWarp.java index 95654ab6..7f6747f6 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdFWarp.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdFWarp.java @@ -31,12 +31,9 @@ public class CmdFWarp extends FCommand { @Override public void perform() { //TODO: check if in combat. - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.WARP); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "use warps"); - return; - } + if (!this.hasAccess(PermissableAction.WARP)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "use warps"); + return; } diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdFly.java b/src/main/java/com/massivecraft/factions/cmd/CmdFly.java index 248cb1cc..fdf529f7 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdFly.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdFly.java @@ -36,6 +36,7 @@ public class CmdFly extends FCommand { this.senderMustBeMember = true; this.senderMustBeModerator = false; } + /// I'll optimize this later today or tomorrow public static void startParticles() { id = Bukkit.getScheduler().scheduleSyncRepeatingTask(P.p, new Runnable() { diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdGetVault.java b/src/main/java/com/massivecraft/factions/cmd/CmdGetVault.java index 5351fcd1..ae59080b 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdGetVault.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdGetVault.java @@ -2,6 +2,7 @@ package com.massivecraft.factions.cmd; import com.massivecraft.factions.P; import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.fperms.PermissableAction; import com.massivecraft.factions.zcore.util.TL; import org.bukkit.Location; import org.bukkit.Material; @@ -33,7 +34,10 @@ public class CmdGetVault extends FCommand { Location vaultLocation = fme.getFaction().getVault(); ItemStack vault = P.p.createItem(Material.CHEST, 1, (short) 0, P.p.color(P.p.getConfig().getString("fvault.Item.Name")), P.p.colorList(P.p.getConfig().getStringList("fvault.Item.Lore"))); - + if (!this.hasAccess(PermissableAction.VAULT)) { + fme.msg(TL.GENERIC_NOPERMISSION, "use vault"); + return; + } //check if vault is set if (vaultLocation != null) { fme.msg(TL.COMMAND_GETVAULT_ALREADYSET); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdHome.java b/src/main/java/com/massivecraft/factions/cmd/CmdHome.java index 04026809..7155b2f0 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdHome.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdHome.java @@ -49,12 +49,9 @@ public class CmdHome extends FCommand { fme.msg(TL.COMMAND_HOME_TELEPORTDISABLED); return; } - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.HOME); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "teleport home"); - return; - } + if (!this.hasAccess(PermissableAction.HOME)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "teleport home"); + return; } diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdInspect.java b/src/main/java/com/massivecraft/factions/cmd/CmdInspect.java index 6b2af666..b4e37355 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdInspect.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdInspect.java @@ -22,6 +22,7 @@ public class CmdInspect extends FCommand { @Override public void perform() { + // Who can inspect? if (fme.isInspectMode()) { fme.setInspectMode(false); msg(TL.COMMAND_INSPECT_DISABLED_MSG); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdInvite.java b/src/main/java/com/massivecraft/factions/cmd/CmdInvite.java index 3e913c51..77198a4c 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdInvite.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdInvite.java @@ -48,12 +48,9 @@ public class CmdInvite extends FCommand { return; } - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.INVITE); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites"); - return; - } + if (!this.hasAccess(PermissableAction.INVITE)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites"); + return; } if (myFaction.isInvited(target)) { diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdKick.java b/src/main/java/com/massivecraft/factions/cmd/CmdKick.java index 13934a30..9da586d4 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdKick.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdKick.java @@ -79,8 +79,7 @@ public class CmdKick extends FCommand { // - Make sure the player is in the faction. // - Make sure the kicked player has lower rank than the kicker. if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.KICK); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { + if (!this.hasAccess(PermissableAction.KICK, false)) { fme.msg(TL.GENERIC_NOPERMISSION, "kick"); return; } diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdLogins.java b/src/main/java/com/massivecraft/factions/cmd/CmdLogins.java index 08900c48..3d8d162b 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdLogins.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdLogins.java @@ -1,6 +1,7 @@ package com.massivecraft.factions.cmd; import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; import com.massivecraft.factions.zcore.util.TL; public class CmdLogins extends FCommand { @@ -18,6 +19,11 @@ public class CmdLogins extends FCommand { @Override public void perform() { + /// Perhaps add a PermissableAction later? + if (!fme.getRole().isAtLeast(Role.MODERATOR)) { + fme.msg(TL.GENERIC_NOPERMISSION, "monitor joins"); + return; + } boolean monitor = fme.isMonitoringJoins(); fme.msg(TL.COMMAND_LOGINS_TOGGLE, String.valueOf(!monitor)); fme.setMonitorJoins(!monitor); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdSetFWarp.java b/src/main/java/com/massivecraft/factions/cmd/CmdSetFWarp.java index c0984d4e..debe3bc2 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdSetFWarp.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdSetFWarp.java @@ -37,12 +37,9 @@ public class CmdSetFWarp extends FCommand { // This statement allows us to check if they've specifically denied it, or default to // the old setting of allowing moderators to set warps. - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.SETWARP); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set warps"); - return; - } + if (!this.hasAccess(PermissableAction.SETWARP)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set warps"); + return; } diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdSethome.java b/src/main/java/com/massivecraft/factions/cmd/CmdSethome.java index 6ad7ecfb..94361748 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdSethome.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdSethome.java @@ -40,12 +40,9 @@ public class CmdSethome extends FCommand { return; } - if (!fme.isAdminBypassing()) { - Access access = myFaction.getAccess(fme, PermissableAction.SETHOME); - if (access != Access.ALLOW && fme.getRole() != Role.ADMIN && !Permission.SETHOME_ANY.has(sender, true)) { - fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set home"); - return; - } + if (!this.hasAccess(PermissableAction.SETHOME) && !Permission.SETHOME_ANY.has(sender, true)) { + fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set home"); + return; } // Can the player set the faction home HERE? diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdShowClaims.java b/src/main/java/com/massivecraft/factions/cmd/CmdShowClaims.java index 22e47e3a..2680ccca 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdShowClaims.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdShowClaims.java @@ -4,6 +4,7 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import com.massivecraft.factions.FLocation; import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.fperms.PermissableAction; import com.massivecraft.factions.zcore.util.TL; public class CmdShowClaims extends FCommand { @@ -25,6 +26,11 @@ public class CmdShowClaims extends FCommand { @Override public void perform() { + // #suggestion + if (!this.hasAccess(PermissableAction.TERRITORY)) { + fme.msg(TL.GENERIC_NOPERMISSION, "manage territory"); + return; + } sendMessage(TL.COMMAND_SHOWCLAIMS_HEADER.toString().replace("{faction}", fme.getFaction().describeTo(fme))); ListMultimap chunkMap = ArrayListMultimap.create(); String format = TL.COMMAND_SHOWCLAIMS_CHUNKSFORMAT.toString(); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdShowInvites.java b/src/main/java/com/massivecraft/factions/cmd/CmdShowInvites.java index 3f8ab4ee..58cff44f 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdShowInvites.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdShowInvites.java @@ -4,6 +4,7 @@ import com.massivecraft.factions.Conf; import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayers; import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.fperms.PermissableAction; import com.massivecraft.factions.zcore.util.TL; import mkremins.fanciful.FancyMessage; import org.bukkit.ChatColor; @@ -21,6 +22,10 @@ public class CmdShowInvites extends FCommand { @Override public void perform() { + if (!this.hasAccess(PermissableAction.INVITE)) { + fme.msg(TL.GENERIC_NOPERMISSION, "manage invites"); + return; + } FancyMessage msg = new FancyMessage(TL.COMMAND_SHOWINVITES_PENDING.toString()).color(ChatColor.GOLD); for (String id : myFaction.getInvites()) { FPlayer fp = FPlayers.getInstance().getById(id); diff --git a/src/main/java/com/massivecraft/factions/cmd/FCommand.java b/src/main/java/com/massivecraft/factions/cmd/FCommand.java index 46e41bd3..d6bbc796 100644 --- a/src/main/java/com/massivecraft/factions/cmd/FCommand.java +++ b/src/main/java/com/massivecraft/factions/cmd/FCommand.java @@ -5,6 +5,8 @@ import com.massivecraft.factions.integration.Econ; import com.massivecraft.factions.struct.Role; import com.massivecraft.factions.util.WarmUpUtil; import com.massivecraft.factions.zcore.MCommand; +import com.massivecraft.factions.zcore.fperms.Access; +import com.massivecraft.factions.zcore.fperms.PermissableAction; import com.massivecraft.factions.zcore.util.TL; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -25,6 +27,7 @@ public abstract class FCommand extends MCommand

{ public boolean senderMustBeModerator; public boolean senderMustBeAdmin; public boolean senderMustBeColeader; + protected PermissableAction actionPermission; public boolean isMoneyCommand; @@ -43,6 +46,47 @@ public abstract class FCommand extends MCommand

{ senderMustBeAdmin = false; } + public boolean hasAccess() { + if (this.permission == null || this.fme == null) return false; + if (!this.fme.isAdminBypassing()) { + Access access = myFaction.getAccess(this.fme, permission); + if (access != Access.ALLOW && this.fme.getRole() != Role.ADMIN) { + return false; + } + } + return true; + } + public boolean hasAccess(boolean checkifAdmin) { + if (this.permission == null || this.fme == null) return false; + if (!this.fme.isAdminBypassing() && checkifAdmin) { + Access access = myFaction.getAccess(this.fme, permission); + if (access != Access.ALLOW && this.fme.getRole() != Role.ADMIN) { + return false; + } + } + return true; + } + public boolean hasAccess(PermissableAction perm) { + if (this.permission == null || this.fme == null) return false; + if (!this.fme.isAdminBypassing()) { + Access access = myFaction.getAccess(this.fme, perm); + if (access != Access.ALLOW && this.fme.getRole() != Role.ADMIN) { + return false; + } + } + return true; + } + public boolean hasAccess(PermissableAction perm, boolean checkifAdmin) { + if (this.permission == null || this.fme == null) return false; + if (!this.fme.isAdminBypassing() && checkifAdmin) { + Access access = myFaction.getAccess(this.fme, perm); + if (access != Access.ALLOW && this.fme.getRole() != Role.ADMIN) { + return false; + } + } + return true; + } + @Override public void execute(CommandSender sender, List args, List> commandChain) { if (sender instanceof Player) {