diff options
Diffstat (limited to 'dicore3/command/src/main/java')
6 files changed, 46 insertions, 11 deletions
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/Command.java b/dicore3/command/src/main/java/io/dico/dicore/command/Command.java index 868aa95..e7c2e93 100644 --- a/dicore3/command/src/main/java/io/dico/dicore/command/Command.java +++ b/dicore3/command/src/main/java/io/dico/dicore/command/Command.java @@ -111,12 +111,12 @@ public abstract class Command { return Collections.unmodifiableList(contextFilters); } - public boolean removeContextFilter(IContextFilter contextFilter) { + public Command removeContextFilter(IContextFilter contextFilter) { boolean ret = contextFilters.remove(contextFilter); if (ret) { computeContextFilterPostParameterIndex(); } - return ret; + return this; } private void computeContextFilterPostParameterIndex() { diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java b/dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java index 602760c..a34d30d 100644 --- a/dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java +++ b/dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java @@ -2,10 +2,11 @@ package io.dico.dicore.command; import io.dico.dicore.command.parameter.IArgumentPreProcessor; import io.dico.dicore.command.parameter.Parameter; +import io.dico.dicore.command.parameter.type.ParameterType; @SuppressWarnings("unchecked") public abstract class ExtendedCommand<T extends ExtendedCommand<T>> extends Command { - protected final boolean modifiable; + protected boolean modifiable; public ExtendedCommand() { this(true); @@ -25,6 +26,16 @@ public abstract class ExtendedCommand<T extends ExtendedCommand<T>> extends Comm } @Override + public T addContextFilter(IContextFilter contextFilter) { + return modifiable ? (T) super.addContextFilter(contextFilter) : newModifiableInstance().addContextFilter(contextFilter); + } + + @Override + public T removeContextFilter(IContextFilter contextFilter) { + return modifiable ? (T) super.removeContextFilter(contextFilter) : newModifiableInstance().removeContextFilter(contextFilter); + } + + @Override public T requiredParameters(int requiredParameters) { return modifiable ? (T) super.requiredParameters(requiredParameters) : newModifiableInstance().requiredParameters(requiredParameters); } diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/InheritingContextFilter.java b/dicore3/command/src/main/java/io/dico/dicore/command/InheritingContextFilter.java index 2f06ea7..0b4875b 100644 --- a/dicore3/command/src/main/java/io/dico/dicore/command/InheritingContextFilter.java +++ b/dicore3/command/src/main/java/io/dico/dicore/command/InheritingContextFilter.java @@ -7,7 +7,7 @@ public abstract class InheritingContextFilter implements IContextFilter { private static String[] addParent(String[] path, String parent) { String[] out = new String[path.length + 1]; - System.arraycopy(path, 0, out, 0, path.length); + System.arraycopy(path, 0, out, 1, path.length); out[0] = parent; return out; } diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/PermissionContextFilter.java b/dicore3/command/src/main/java/io/dico/dicore/command/PermissionContextFilter.java index 6492677..3ca1131 100644 --- a/dicore3/command/src/main/java/io/dico/dicore/command/PermissionContextFilter.java +++ b/dicore3/command/src/main/java/io/dico/dicore/command/PermissionContextFilter.java @@ -52,7 +52,7 @@ public class PermissionContextFilter implements IContextFilter { doFilter(context, permission); } - private String getInheritedPermission(String[] components) { + public String getInheritedPermission(String[] components) { int insertedAmount = components.length; String[] currentComponents = permissionComponents; int currentAmount = currentComponents.length; @@ -80,7 +80,7 @@ public class PermissionContextFilter implements IContextFilter { @Override public void filterSubContext(ExecutionContext subContext, String... path) throws CommandException { - if (permissionComponents != null) { + if (isInheritable()) { doFilter(subContext, getInheritedPermission(path)); } } @@ -90,4 +90,20 @@ public class PermissionContextFilter implements IContextFilter { return Priority.PERMISSION; } + public boolean isInheritable() { + return permissionComponents != null; + } + + public String getPermission() { + return permission; + } + + public int getComponentInsertionIndex() { + return componentInsertionIndex; + } + + public String getFailMessage() { + return failMessage; + } + } diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java b/dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java index 3d96a7d..6b389e3 100644 --- a/dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java +++ b/dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java @@ -1,22 +1,29 @@ package io.dico.dicore.command.predef; -import io.dico.dicore.command.Command; import io.dico.dicore.command.CommandException; import io.dico.dicore.command.ExecutionContext; +import io.dico.dicore.command.IContextFilter; import org.bukkit.command.CommandSender; -public class DefaultGroupCommand extends Command { - private static final DefaultGroupCommand instance = new DefaultGroupCommand(); +public class DefaultGroupCommand extends PredefinedCommand<DefaultGroupCommand> { + private static final DefaultGroupCommand instance = new DefaultGroupCommand(false); public static DefaultGroupCommand getInstance() { return instance; } - private DefaultGroupCommand() { + private DefaultGroupCommand(boolean modifiable) { + addContextFilter(IContextFilter.INHERIT_PERMISSIONS); + this.modifiable = modifiable; + } + @Override + protected DefaultGroupCommand newModifiableInstance() { + return new DefaultGroupCommand(true); } - @Override public String execute(CommandSender sender, ExecutionContext context) throws CommandException { + @Override + public String execute(CommandSender sender, ExecutionContext context) throws CommandException { context.getAddress().getChatController().sendHelpMessage(sender, context, context.getAddress(), 1); return null; } diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/predef/PredefinedCommand.java b/dicore3/command/src/main/java/io/dico/dicore/command/predef/PredefinedCommand.java index 4e7ba07..4340356 100644 --- a/dicore3/command/src/main/java/io/dico/dicore/command/predef/PredefinedCommand.java +++ b/dicore3/command/src/main/java/io/dico/dicore/command/predef/PredefinedCommand.java @@ -37,6 +37,7 @@ public abstract class PredefinedCommand<T extends PredefinedCommand<T>> extends static { registerPredefinedCommandGenerator("help", HelpCommand::registerAsChild); + //noinspection StaticInitializerReferencesSubClass registerPredefinedCommandGenerator("syntax", SyntaxCommand::registerAsChild); } |