Any command can restrict from usage in MBs, fixes #490.

This commit is contained in:
UnknownShadow200 2017-09-06 13:42:33 +10:00
parent 2c35b13d31
commit 8c309a0656
15 changed files with 29 additions and 12 deletions

View File

@ -75,7 +75,8 @@ namespace MCGalaxy.Blocks.Extended {
Command.Search(ref alias, ref cmdArgs); Command.Search(ref alias, ref cmdArgs);
foreach (Command cmd in Command.all.commands) { foreach (Command cmd in Command.all.commands) {
if (p.group.CanExecute(cmd) && (allCmds || !cmd.type.Contains("mod"))) continue; bool mbUseable = !cmd.MessageBlockRestricted && !cmd.type.Contains("mod");
if (p.group.CanExecute(cmd) && (allCmds || mbUseable)) continue;
if (IsCommand(message, cmd.name) || IsCommand(alias, cmd.name)) { if (IsCommand(message, cmd.name) || IsCommand(alias, cmd.name)) {
Player.Message(p, "You cannot use %T/{0} %Sin a messageblock.", cmd.name); return false; Player.Message(p, "You cannot use %T/{0} %Sin a messageblock.", cmd.name); return false;

View File

@ -48,6 +48,9 @@ namespace MCGalaxy {
public virtual CommandAlias[] Aliases { get { return null; } } public virtual CommandAlias[] Aliases { get { return null; } }
/// <summary> Whether this command can be used by 'super' players. (Console and IRC controllers). </summary> /// <summary> Whether this command can be used by 'super' players. (Console and IRC controllers). </summary>
public virtual bool SuperUseable { get { return true; } } public virtual bool SuperUseable { get { return true; } }
/// <summary> Whether this command is restricted in usage in message blocks.
/// Restricted commands require the player to have the extra permission for /mb to be able to be placed in message blocks. </summary>
public virtual bool MessageBlockRestricted { get { return false; } }
public static CommandList all = new CommandList(); public static CommandList all = new CommandList();
public static CommandList core = new CommandList(); public static CommandList core = new CommandList();

View File

@ -27,6 +27,7 @@ namespace MCGalaxy.Commands.Maintenance {
get { return new [] { new CommandAlias("ClearBlockChanges", "clear"), get { return new [] { new CommandAlias("ClearBlockChanges", "clear"),
new CommandAlias("cbc", "clear") }; } new CommandAlias("cbc", "clear") }; }
} }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
string[] args = message.SplitSpaces(); string[] args = message.SplitSpaces();

View File

@ -25,6 +25,7 @@ namespace MCGalaxy.Commands.Scripting {
public override string type { get { return CommandTypes.Other; } } public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } } public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (message.Length == 0) { Help(p); return; } if (message.Length == 0) { Help(p); return; }

View File

@ -24,6 +24,7 @@ namespace MCGalaxy.Commands.Scripting {
public override string type { get { return CommandTypes.Other; } } public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } } public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (!Formatter.ValidName(p, message, "command")) return; if (!Formatter.ValidName(p, message, "command")) return;

View File

@ -21,6 +21,7 @@ namespace MCGalaxy.Commands.Scripting {
public override string type { get { return CommandTypes.Other; } } public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } } public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (message.Length == 0) { Help(p); return; } if (message.Length == 0) { Help(p); return; }

View File

@ -25,6 +25,7 @@ namespace MCGalaxy.Commands.Scripting {
public override string type { get { return CommandTypes.Other; } } public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } } public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (message.Length == 0) { Help(p); return; } if (message.Length == 0) { Help(p); return; }

View File

@ -22,6 +22,7 @@ namespace MCGalaxy.Commands.Scripting {
public override string type { get { return CommandTypes.Other; } } public override string type { get { return CommandTypes.Other; } }
public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } } public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
string[] args = message.SplitSpaces(); string[] args = message.SplitSpaces();

View File

@ -28,6 +28,7 @@ namespace MCGalaxy.Commands.Scripting {
get { return new[] { new CommandAlias("PCreate", "pcreate"), get { return new[] { new CommandAlias("PCreate", "pcreate"),
new CommandAlias("PLoad", "pload"), new CommandAlias("PUnload", "punload") }; } new CommandAlias("PLoad", "pload"), new CommandAlias("PUnload", "punload") }; }
} }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
string[] parts = message.SplitSpaces(2); string[] parts = message.SplitSpaces(2);

View File

@ -29,6 +29,7 @@ namespace MCGalaxy.Commands.World {
public override CommandAlias[] Aliases { public override CommandAlias[] Aliases {
get { return new[] { new CommandAlias("WCopy"), new CommandAlias("WorldCopy") }; } get { return new[] { new CommandAlias("WCopy"), new CommandAlias("WorldCopy") }; }
} }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (message.Length == 0) { Help(p); return; } if (message.Length == 0) { Help(p); return; }

View File

@ -28,6 +28,7 @@ namespace MCGalaxy.Commands.World {
public override CommandAlias[] Aliases { public override CommandAlias[] Aliases {
get { return new[] { new CommandAlias("WDelete"), new CommandAlias("WorldDelete"), new CommandAlias("WRemove") }; } get { return new[] { new CommandAlias("WDelete"), new CommandAlias("WorldDelete"), new CommandAlias("WRemove") }; }
} }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (message.Length == 0 || message.SplitSpaces().Length > 1) { Help(p); return; } if (message.Length == 0 || message.SplitSpaces().Length > 1) { Help(p); return; }

View File

@ -27,6 +27,7 @@ namespace MCGalaxy.Commands.World {
public override CommandAlias[] Aliases { public override CommandAlias[] Aliases {
get { return new[] { new CommandAlias("WRename"), new CommandAlias("WorldRename") }; } get { return new[] { new CommandAlias("WRename"), new CommandAlias("WorldRename") }; }
} }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
string[] args = message.SplitSpaces(); string[] args = message.SplitSpaces();

View File

@ -28,6 +28,7 @@ namespace MCGalaxy.Commands.World {
public override CommandAlias[] Aliases { public override CommandAlias[] Aliases {
get { return new[] { new CommandAlias("WResize"), new CommandAlias("WorldResize") }; } get { return new[] { new CommandAlias("WResize"), new CommandAlias("WorldResize") }; }
} }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
string[] args = message.SplitSpaces(); string[] args = message.SplitSpaces();

View File

@ -25,6 +25,7 @@ namespace MCGalaxy.Commands.World {
public override string type { get { return CommandTypes.World; } } public override string type { get { return CommandTypes.World; } }
public override bool museumUsable { get { return false; } } public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } } public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (message.Length == 0) { OutputBackups(p); return; } if (message.Length == 0) { OutputBackups(p); return; }

View File

@ -21,10 +21,11 @@ namespace MCGalaxy.Commands.Building {
public sealed class CmdCmdBind : Command { public sealed class CmdCmdBind : Command {
public override string name { get { return "CmdBind"; } } public override string name { get { return "CmdBind"; } }
public override string shortcut { get { return "cb"; } } public override string shortcut { get { return "cb"; } }
public override string type { get { return CommandTypes.Moderation; } } public override string type { get { return CommandTypes.Building; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Builder; } } public override LevelPermission defaultRank { get { return LevelPermission.Builder; } }
public override bool SuperUseable { get { return false; } } public override bool SuperUseable { get { return false; } }
public override bool MessageBlockRestricted { get { return true; } }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (message.Length == 0) { if (message.Length == 0) {