diff --git a/SpigotCore_Main/build.gradle b/SpigotCore_Main/build.gradle
index 3184be9..bae5536 100644
--- a/SpigotCore_Main/build.gradle
+++ b/SpigotCore_Main/build.gradle
@@ -40,16 +40,6 @@ sourceSets {
exclude '**/*.java', '**/*.kt'
}
}
-
- test {
- java {
- srcDirs = ['testsrc']
- }
- resources {
- srcDirs = ['testsrc']
- exclude '**/*.java', '**/*.kt'
- }
- }
}
dependencies {
@@ -68,6 +58,8 @@ dependencies {
testImplementation files("${project.rootDir}/lib/Spigot-1.15.jar")
testImplementation files("${project.rootDir}/lib/WorldEdit-1.12.jar")
+ compileOnly project(":CommonCore")
+
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.hamcrest:hamcrest:2.2'
}
diff --git a/SpigotCore_Main/src/de/steamwar/command/CommandFrameworkException.java b/SpigotCore_Main/src/de/steamwar/command/CommandFrameworkException.java
deleted file mode 100644
index 74db6d3..0000000
--- a/SpigotCore_Main/src/de/steamwar/command/CommandFrameworkException.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.lang.reflect.InvocationTargetException;
-
-public class CommandFrameworkException extends RuntimeException {
-
- private InvocationTargetException invocationTargetException;
- private String alias;
- private String[] args;
-
- private String message;
-
- CommandFrameworkException(InvocationTargetException invocationTargetException, String alias, String[] args) {
- super(invocationTargetException);
- this.invocationTargetException = invocationTargetException;
- this.alias = alias;
- this.args = args;
- }
-
- public synchronized String getBuildStackTrace() {
- if (message != null) {
- return message;
- }
- StackTraceElement[] stackTraceElements = invocationTargetException.getCause().getStackTrace();
- StringBuilder st = new StringBuilder();
- st.append(invocationTargetException.getCause().getClass().getTypeName());
- if (invocationTargetException.getCause().getMessage() != null) {
- st.append(": ").append(invocationTargetException.getCause().getMessage());
- }
- st.append("\n");
- if (alias != null && !alias.isEmpty()) {
- st.append("Performed command: ").append(alias).append(" ").append(String.join(" ", args)).append("\n");
- }
- for (int i = 0; i < stackTraceElements.length - invocationTargetException.getStackTrace().length; i++) {
- st.append("\tat ").append(stackTraceElements[i].toString()).append("\n");
- }
- message = st.toString();
- return message;
- }
-
- @Override
- public void printStackTrace() {
- printStackTrace(System.err);
- }
-
- @Override
- public void printStackTrace(PrintStream s) {
- s.print(getBuildStackTrace());
- }
-
- @Override
- public void printStackTrace(PrintWriter s) {
- s.print(getBuildStackTrace());
- }
-}
diff --git a/SpigotCore_Main/src/de/steamwar/command/CommandNoHelpException.java b/SpigotCore_Main/src/de/steamwar/command/CommandNoHelpException.java
deleted file mode 100644
index e3d476a..0000000
--- a/SpigotCore_Main/src/de/steamwar/command/CommandNoHelpException.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-class CommandNoHelpException extends RuntimeException {
-
- CommandNoHelpException() {}
-}
diff --git a/SpigotCore_Main/src/de/steamwar/command/CommandParseException.java b/SpigotCore_Main/src/de/steamwar/command/CommandParseException.java
deleted file mode 100644
index 3d81ea6..0000000
--- a/SpigotCore_Main/src/de/steamwar/command/CommandParseException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-public class CommandParseException extends RuntimeException {
-
- public CommandParseException() {
- }
-}
diff --git a/SpigotCore_Main/src/de/steamwar/command/CommandPart.java b/SpigotCore_Main/src/de/steamwar/command/CommandPart.java
deleted file mode 100644
index d0e7fb7..0000000
--- a/SpigotCore_Main/src/de/steamwar/command/CommandPart.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-import lombok.AllArgsConstructor;
-import lombok.Setter;
-import lombok.ToString;
-import org.bukkit.command.CommandSender;
-
-import java.lang.reflect.Array;
-import java.util.Arrays;
-import java.util.List;
-
-@ToString
-public class CommandPart {
- private static final String[] EMPTY_ARRAY = new String[0];
-
- @AllArgsConstructor
- private static class CheckArgumentResult {
- private final boolean success;
- private final Object value;
- }
-
- private TypeMapper> typeMapper;
- private GuardChecker guard;
- private Class> varArgType;
- private String optional;
- private GuardCheckType guardCheckType;
-
- private CommandPart next = null;
-
- @Setter
- private boolean ignoreAsArgument = false;
-
- public CommandPart(TypeMapper> typeMapper, GuardChecker guard, Class> varArgType, String optional, GuardCheckType guardCheckType) {
- this.typeMapper = typeMapper;
- this.guard = guard;
- this.varArgType = varArgType;
- this.optional = optional;
- this.guardCheckType = guardCheckType;
-
- validatePart();
- }
-
- public void setNext(CommandPart next) {
- if (varArgType != null) {
- throw new IllegalArgumentException("There can't be a next part if this is a vararg part!");
- }
- this.next = next;
- }
-
- private void validatePart() {
- if (guardCheckType == GuardCheckType.TAB_COMPLETE) {
- throw new IllegalArgumentException("Tab complete is not allowed as a guard check type!");
- }
- if (optional != null && varArgType != null) {
- throw new IllegalArgumentException("A vararg part can't have an optional part!");
- }
-
- if (optional != null) {
- try {
- typeMapper.map(null, EMPTY_ARRAY, optional);
- } catch (Exception e) {
- throw new IllegalArgumentException("The optional part is not valid!");
- }
- }
- }
-
- public void generateArgumentArray(List current, CommandSender commandSender, String[] args, int startIndex) {
- if (varArgType != null) {
- Object array = Array.newInstance(varArgType, args.length - startIndex);
- for (int i = startIndex; i < args.length; i++) {
- CheckArgumentResult validArgument = checkArgument(null, commandSender, args, i);
- if (!validArgument.success) {
- throw new CommandParseException();
- }
- Array.set(array, i - startIndex, validArgument.value);
- }
- current.add(array);
- return;
- }
-
- CheckArgumentResult validArgument = checkArgument(null, commandSender, args, startIndex);
- if (!validArgument.success && optional == null) {
- throw new CommandParseException();
- }
- if (!validArgument.success) {
- if (!ignoreAsArgument) {
- current.add(typeMapper.map(commandSender, EMPTY_ARRAY, optional));
- }
- if (next != null) {
- next.generateArgumentArray(current, commandSender, args, startIndex);
- }
- return;
- }
- if (!ignoreAsArgument) {
- current.add(validArgument.value);
- }
- if (next != null) {
- next.generateArgumentArray(current, commandSender, args, startIndex + 1);
- }
- }
-
- public boolean guardCheck(CommandSender commandSender, String[] args, int startIndex) {
- if (varArgType != null) {
- for (int i = startIndex; i < args.length; i++) {
- GuardResult guardResult = checkGuard(guardCheckType, commandSender, args, i);
- if (guardResult == GuardResult.DENIED) {
- throw new CommandNoHelpException();
- }
- if (guardResult == GuardResult.DENIED_WITH_HELP) {
- return false;
- }
- }
- return true;
- }
-
- GuardResult guardResult = checkGuard(guardCheckType, commandSender, args, startIndex);
- if (guardResult == GuardResult.DENIED) {
- if (optional != null && next != null) {
- return next.guardCheck(commandSender, args, startIndex);
- }
- throw new CommandNoHelpException();
- }
- if (guardResult == GuardResult.DENIED_WITH_HELP) {
- if (optional != null && next != null) {
- return next.guardCheck(commandSender, args, startIndex);
- }
- return false;
- }
- if (next != null) {
- return next.guardCheck(commandSender, args, startIndex + 1);
- }
- return true;
- }
-
- public void generateTabComplete(List current, CommandSender commandSender, String[] args, int startIndex) {
- if (varArgType != null) {
- for (int i = startIndex; i < args.length - 1; i++) {
- CheckArgumentResult validArgument = checkArgument(null, commandSender, args, i);
- if (!validArgument.success) {
- return;
- }
- }
- List strings = typeMapper.tabCompletes(commandSender, Arrays.copyOf(args, args.length - 1), args[args.length - 1]);
- if (strings != null) {
- current.addAll(strings);
- }
- return;
- }
-
- if (args.length - 1 > startIndex) {
- CheckArgumentResult checkArgumentResult = checkArgument(GuardCheckType.TAB_COMPLETE, commandSender, args, startIndex);
- if (checkArgumentResult.success && next != null) {
- next.generateTabComplete(current, commandSender, args, startIndex + 1);
- return;
- }
- if (optional != null && next != null) {
- next.generateTabComplete(current, commandSender, args, startIndex);
- }
- return;
- }
-
- List strings = typeMapper.tabCompletes(commandSender, Arrays.copyOf(args, startIndex), args[startIndex]);
- if (strings != null) {
- current.addAll(strings);
- }
- if (optional != null && next != null) {
- next.generateTabComplete(current, commandSender, args, startIndex);
- }
- }
-
- private CheckArgumentResult checkArgument(GuardCheckType guardCheckType, CommandSender commandSender, String[] args, int index) {
- try {
- Object value = typeMapper.map(commandSender, Arrays.copyOf(args, index), args[index]);
- if (value == null) {
- return new CheckArgumentResult(false, null);
- }
- GuardResult guardResult = checkGuard(guardCheckType, commandSender, args, index);
- switch (guardResult) {
- case ALLOWED:
- return new CheckArgumentResult(true, value);
- case DENIED:
- throw new CommandNoHelpException();
- case DENIED_WITH_HELP:
- default:
- return new CheckArgumentResult(false, null);
- }
- } catch (Exception e) {
- return new CheckArgumentResult(false, null);
- }
- }
-
- private GuardResult checkGuard(GuardCheckType guardCheckType, CommandSender commandSender, String[] args, int index) {
- if (guard != null && guardCheckType != null) {
- return guard.guard(commandSender, guardCheckType, Arrays.copyOf(args, index), args[index]);
- }
- return GuardResult.ALLOWED;
- }
-}
diff --git a/SpigotCore_Main/src/de/steamwar/command/GuardCheckType.java b/SpigotCore_Main/src/de/steamwar/command/GuardCheckType.java
deleted file mode 100644
index 0f023b8..0000000
--- a/SpigotCore_Main/src/de/steamwar/command/GuardCheckType.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-public enum GuardCheckType {
- COMMAND,
- HELP_COMMAND,
- TAB_COMPLETE
-}
diff --git a/SpigotCore_Main/src/de/steamwar/command/GuardChecker.java b/SpigotCore_Main/src/de/steamwar/command/GuardChecker.java
index e8f3a1f..531031c 100644
--- a/SpigotCore_Main/src/de/steamwar/command/GuardChecker.java
+++ b/SpigotCore_Main/src/de/steamwar/command/GuardChecker.java
@@ -22,7 +22,7 @@ package de.steamwar.command;
import org.bukkit.command.CommandSender;
@FunctionalInterface
-public interface GuardChecker {
+public interface GuardChecker extends AbstractGuardChecker {
/**
* While guarding the first parameter of the command the parameter s of this method is {@code null}
*/
diff --git a/SpigotCore_Main/src/de/steamwar/command/GuardResult.java b/SpigotCore_Main/src/de/steamwar/command/GuardResult.java
deleted file mode 100644
index 9ffbf77..0000000
--- a/SpigotCore_Main/src/de/steamwar/command/GuardResult.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-public enum GuardResult {
- ALLOWED,
- DENIED_WITH_HELP,
- DENIED
-}
diff --git a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java
index d530736..e74f9b1 100644
--- a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java
+++ b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java
@@ -28,58 +28,35 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-import java.lang.annotation.*;
-import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.BiConsumer;
-import java.util.function.IntPredicate;
+import java.util.function.Supplier;
import java.util.logging.Level;
-import java.util.stream.Collectors;
-public abstract class SWCommand {
+public class SWCommand extends AbstractSWCommand {
- private boolean initialized = false;
- private final Command command;
- private final List commandList = new ArrayList<>();
- private final List commandHelpList = new ArrayList<>();
- private final Map> localTypeMapper = new HashMap<>();
- private final Map localGuardChecker = new HashMap<>();
+ static {
+ TypeUtils.init();
+ }
+
+ private Command command;
@Setter
private Message message = null;
private List defaultHelpMessages = new ArrayList<>();
protected SWCommand(String command) {
- this(command, new String[0]);
+ super(CommandSender.class, command);
}
protected SWCommand(String command, String... aliases) {
- this.command = new Command(command, "", "/" + command, Arrays.asList(aliases)) {
- @Override
- public boolean execute(CommandSender sender, String alias, String[] args) {
- if (!initialized) {
- createMapping();
- }
- SWCommand.this.execute(sender, alias, args);
- return false;
- }
-
- @Override
- public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
- if (!initialized) {
- createMapping();
- }
- return SWCommand.this.tabComplete(sender, alias, args);
- }
- };
- unregister();
- register();
+ super(CommandSender.class, command, aliases);
}
- // This is used for the tests!
- SWCommand(boolean noRegister, String command, String... aliases) {
+ @Override
+ protected void createAndSafeCommand(String command, String[] aliases) {
this.command = new Command(command, "", "/" + command, Arrays.asList(aliases)) {
@Override
public boolean execute(CommandSender sender, String alias, String[] args) {
@@ -92,171 +69,33 @@ public abstract class SWCommand {
return SWCommand.this.tabComplete(sender, alias, args);
}
};
- createMapping();
}
- void execute(CommandSender sender, String alias, String[] args) {
- try {
- if (!commandList.stream().anyMatch(s -> s.invoke(sender, alias, args))) {
- commandHelpList.stream().anyMatch(s -> s.invoke(sender, alias, args));
- }
- } catch (CommandNoHelpException e) {
- // Ignored
- } catch (CommandFrameworkException e) {
- if (Bukkit.getServer() != null) {
- Bukkit.getLogger().log(Level.SEVERE, "", e);
- Core.MESSAGE.sendPrefixless("COMMAND_SYSTEM_ERROR", sender);
- }
- throw e;
- }
+ @Override
+ public void unregister() {
+ CommandRegistering.unregister(this.command);
}
- List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
- String string = args[args.length - 1].toLowerCase();
- return commandList.stream()
- .filter(s -> !s.noTabComplete)
- .map(s -> s.tabComplete(sender, args))
- .filter(Objects::nonNull)
- .flatMap(Collection::stream)
- .filter(s -> !s.isEmpty())
- .filter(s -> s.toLowerCase().startsWith(string))
- .collect(Collectors.toList());
+ @Override
+ public void register() {
+ CommandRegistering.register(this.command);
}
- private synchronized void createMapping() {
- List methods = methods();
- for (Method method : methods) {
- addMapper(Mapper.class, method, i -> i == 0, false, TypeMapper.class, (anno, typeMapper) -> {
- (anno.local() ? localTypeMapper : SWCommandUtils.MAPPER_FUNCTIONS).putIfAbsent(anno.value(), typeMapper);
- });
- addMapper(ClassMapper.class, method, i -> i == 0, false, TypeMapper.class, (anno, typeMapper) -> {
- (anno.local() ? localTypeMapper : SWCommandUtils.MAPPER_FUNCTIONS).putIfAbsent(anno.value().getTypeName(), typeMapper);
- });
- addGuard(Guard.class, method, i -> i == 0, false, GuardChecker.class, (anno, guardChecker) -> {
- (anno.local() ? localGuardChecker : SWCommandUtils.GUARD_FUNCTIONS).putIfAbsent(anno.value(), guardChecker);
- });
- addGuard(ClassGuard.class, method, i -> i == 0, false, GuardChecker.class, (anno, guardChecker) -> {
- (anno.local() ? localGuardChecker : SWCommandUtils.GUARD_FUNCTIONS).putIfAbsent(anno.value().getTypeName(), guardChecker);
- });
-
- add(Register.class, method, i -> i > 0, true, null, (anno, parameters) -> {
- if (!anno.help()) return;
- if (parameters.length != 2) {
- Bukkit.getLogger().log(Level.WARNING, () -> "The method '" + method.toString() + "' is lacking parameters or has too many");
- }
- if (!parameters[parameters.length - 1].isVarArgs()) {
- Bukkit.getLogger().log(Level.WARNING, () -> "The method '" + method.toString() + "' is lacking the varArgs parameters as last Argument");
- }
- if (parameters[parameters.length - 1].getType().getComponentType() != String.class) {
- Bukkit.getLogger().log(Level.WARNING, () -> "The method '" + method.toString() + "' is lacking the varArgs parameters of type '" + String.class.getTypeName() + "' as last Argument");
- return;
- }
- commandHelpList.add(new SubCommand(this, method, anno.value(), new HashMap<>(), localGuardChecker, true, null, anno.noTabComplete()));
- });
- }
- for (Method method : methods) {
- add(Register.class, method, i -> i > 0, true, null, (anno, parameters) -> {
- if (anno.help()) return;
- for (int i = 1; i < parameters.length; i++) {
- Parameter parameter = parameters[i];
- Class> clazz = parameter.getType();
- if (parameter.isVarArgs() && i == parameters.length - 1) {
- clazz = parameter.getType().getComponentType();
- }
- Mapper mapper = parameter.getAnnotation(Mapper.class);
- if (clazz.isEnum() && mapper == null && !SWCommandUtils.MAPPER_FUNCTIONS.containsKey(clazz.getTypeName())) {
- continue;
- }
- String name = mapper != null ? mapper.value() : clazz.getTypeName();
- if (!SWCommandUtils.MAPPER_FUNCTIONS.containsKey(name) && !localTypeMapper.containsKey(name)) {
- Bukkit.getLogger().log(Level.WARNING, () -> "The parameter '" + parameter.toString() + "' is using an unsupported Mapper of type '" + name + "'");
- return;
- }
- }
- commandList.add(new SubCommand(this, method, anno.value(), localTypeMapper, localGuardChecker, false, anno.description(), anno.noTabComplete()));
- });
-
- this.commandList.sort((o1, o2) -> {
- int compare = Integer.compare(-o1.subCommand.length, -o2.subCommand.length);
- if (compare != 0) {
- return compare;
- } else {
- return Integer.compare(o1.comparableValue, o2.comparableValue);
- }
- });
- commandHelpList.sort((o1, o2) -> {
- int compare = Integer.compare(-o1.subCommand.length, -o2.subCommand.length);
- if (compare != 0) {
- return compare;
- } else {
- return Integer.compare(o1.method.getDeclaringClass() == SWCommand.class ? 1 : 0,
- o2.method.getDeclaringClass() == SWCommand.class ? 1 : 0);
- }
- });
- }
- initialized = true;
+ @Override
+ protected void commandSystemError(CommandSender sender, CommandFrameworkException e) {
+ Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
+ Core.MESSAGE.sendPrefixless("COMMAND_SYSTEM_ERROR", sender);
}
- private void add(Class annotation, Method method, IntPredicate parameterTester, boolean firstParameter, Class> returnType, BiConsumer consumer) {
- T[] anno = SWCommandUtils.getAnnotation(method, annotation);
- if (anno == null || anno.length == 0) return;
-
- Parameter[] parameters = method.getParameters();
- if (!parameterTester.test(parameters.length)) {
- Bukkit.getLogger().log(Level.WARNING, () -> "The method '" + method.toString() + "' is lacking parameters or has too many");
- return;
- }
- if (firstParameter && !CommandSender.class.isAssignableFrom(parameters[0].getType())) {
- Bukkit.getLogger().log(Level.WARNING, () -> "The method '" + method.toString() + "' is lacking the first parameter of type '" + CommandSender.class.getTypeName() + "'");
- return;
- }
- if (returnType != null && method.getReturnType() != returnType) {
- Bukkit.getLogger().log(Level.WARNING, () -> "The method '" + method.toString() + "' is lacking the desired return type '" + returnType.getTypeName() + "'");
- return;
- }
- Arrays.stream(anno).forEach(t -> consumer.accept(t, parameters));
- }
-
- private void addMapper(Class annotation, Method method, IntPredicate parameterTester, boolean firstParameter, Class> returnType, BiConsumer> consumer) {
- add(annotation, method, parameterTester, firstParameter, returnType, (anno, parameters) -> {
- try {
- method.setAccessible(true);
- consumer.accept(anno, (TypeMapper>) method.invoke(this));
- } catch (Exception e) {
- throw new SecurityException(e.getMessage(), e);
- }
- });
- }
-
- private void addGuard(Class annotation, Method method, IntPredicate parameterTester, boolean firstParameter, Class> returnType, BiConsumer consumer) {
- add(annotation, method, parameterTester, firstParameter, returnType, (anno, parameters) -> {
- try {
- method.setAccessible(true);
- consumer.accept(anno, (GuardChecker) method.invoke(this));
- } catch (Exception e) {
- throw new SecurityException(e.getMessage(), e);
- }
- });
+ @Override
+ protected void commandSystemWarning(Supplier message) {
+ Bukkit.getLogger().log(Level.WARNING, message);
}
public void addDefaultHelpMessage(String message) {
defaultHelpMessages.add(message);
}
- private List methods() {
- List methods = new ArrayList<>(Arrays.asList(getClass().getDeclaredMethods()));
- methods.addAll(Arrays.asList(SWCommand.class.getDeclaredMethods()));
- return methods;
- }
-
- public void unregister() {
- CommandRegistering.unregister(command);
- }
-
- public void register() {
- CommandRegistering.register(command);
- }
-
@Register(help = true)
private void internalHelp(Player p, String... args) {
if (message == null) {
@@ -295,7 +134,7 @@ public abstract class SWCommand {
}
}
- private void send(Player p, SubCommand subCommand) {
+ private void send(Player p, SubCommand subCommand) {
try {
for (String s : subCommand.description) {
String hover = "§8/§e" + command.getName() + " " + String.join(" ", subCommand.subCommand);
@@ -306,80 +145,4 @@ public abstract class SWCommand {
Bukkit.getLogger().log(Level.WARNING, "Failed to send description of registered method '" + subCommand.method + "' with description '" + subCommand.description + "'", e);
}
}
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.METHOD})
- @Repeatable(Register.Registeres.class)
- protected @interface Register {
- String[] value() default {};
-
- boolean help() default false;
-
- String[] description() default {};
-
- boolean noTabComplete() default false;
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.METHOD})
- @interface Registeres {
- Register[] value();
- }
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.PARAMETER, ElementType.METHOD})
- protected @interface Mapper {
- String value();
-
- boolean local() default false;
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.METHOD})
- protected @interface ClassMapper {
- Class> value();
-
- boolean local() default false;
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.PARAMETER, ElementType.METHOD})
- protected @interface Guard {
- String value() default "";
-
- boolean local() default false;
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.METHOD})
- protected @interface ClassGuard {
- Class> value();
-
- boolean local() default false;
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.PARAMETER})
- protected @interface StaticValue {
- String[] value();
-
- /**
- * This is the short form for 'allowImplicitSwitchExpressions'
- * and can be set to true if you want to allow int as well as boolean as annotated parameter types.
- * The value array needs to be at least 2 long for this flag to be considered.
- * While using an int, the value will represent the index into the value array.
- * While using a boolean, the value array must only be 2 long and the value will be {@code false}
- * for the first index and {@code true} for the second index.
- */
- boolean allowISE() default false;
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.PARAMETER})
- protected @interface OptionalValue {
- /**
- * Will pe parsed against the TypeMapper specified by the parameter or annotation.
- */
- String value();
- }
}
diff --git a/SpigotCore_Main/src/de/steamwar/command/SWCommandUtils.java b/SpigotCore_Main/src/de/steamwar/command/SWCommandUtils.java
deleted file mode 100644
index 3af5b37..0000000
--- a/SpigotCore_Main/src/de/steamwar/command/SWCommandUtils.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-import de.steamwar.sql.BauweltMember;
-import de.steamwar.sql.SchematicNode;
-import de.steamwar.sql.SteamwarUser;
-import org.bukkit.Bukkit;
-import org.bukkit.GameMode;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
-import java.util.*;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-public class SWCommandUtils {
-
- private SWCommandUtils() {
- throw new IllegalStateException("Utility Class");
- }
-
- static final Map> MAPPER_FUNCTIONS = new HashMap<>();
- static final Map GUARD_FUNCTIONS = new HashMap<>();
-
- static {
- addMapper(boolean.class, Boolean.class, createMapper(Boolean::parseBoolean, s -> Arrays.asList("true", "false")));
- addMapper(float.class, Float.class, createMapper(numberMapper(Float::parseFloat), numberCompleter(Float::parseFloat)));
- addMapper(double.class, Double.class, createMapper(numberMapper(Double::parseDouble), numberCompleter(Double::parseDouble)));
- addMapper(int.class, Integer.class, createMapper(numberMapper(Integer::parseInt), numberCompleter(Integer::parseInt)));
- addMapper(long.class, Long.class, createMapper(numberMapper(Long::parseLong), numberCompleter(Long::parseLong)));
- MAPPER_FUNCTIONS.put(String.class.getTypeName(), createMapper(s -> s, Collections::singletonList));
- MAPPER_FUNCTIONS.put(Player.class.getTypeName(), createMapper(Bukkit::getPlayer, s -> Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList())));
- MAPPER_FUNCTIONS.put(GameMode.class.getTypeName(), createMapper(s -> {
- s = s.toLowerCase();
- if (s.equals("s") || s.equals("survival") || s.equals("0")) return GameMode.SURVIVAL;
- if (s.equals("c") || s.equals("creative") || s.equals("1")) return GameMode.CREATIVE;
- if (s.equals("sp") || s.equals("spectator") || s.equals("3")) return GameMode.SPECTATOR;
- if (s.equals("a") || s.equals("adventure") || s.equals("2")) return GameMode.ADVENTURE;
- return null;
- }, s -> Arrays.asList("s", "survival", "0", "c", "creative", "1", "sp", "spectator", "3", "a", "adventure", "2")));
- MAPPER_FUNCTIONS.put(SteamwarUser.class.getTypeName(), createMapper(SteamwarUser::get, s -> Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList())));
- MAPPER_FUNCTIONS.put(SchematicNode.class.getTypeName(), new TypeMapper() {
- @Override
- public SchematicNode map(CommandSender commandSender, String[] previousArguments, String s) {
- return SchematicNode.getNodeFromPath(SteamwarUser.get(((Player) commandSender).getUniqueId()), s);
- }
-
- @Override
- public List tabCompletes(CommandSender commandSender, String[] strings, String s) {
- return SchematicNode.getNodeTabcomplete(SteamwarUser.get(((Player) commandSender).getUniqueId()), s);
- }
- });
- MAPPER_FUNCTIONS.put(BauweltMember.class.getTypeName(), new TypeMapper() {
- @Override
- public BauweltMember map(CommandSender commandSender, String[] previousArguments, String s) {
- if (!(commandSender instanceof Player)) {
- return null;
- }
- Player player = (Player) commandSender;
- return BauweltMember.getMembers(player.getUniqueId())
- .stream()
- .filter(member -> SteamwarUser.get(member.getMemberID()).getUserName().equalsIgnoreCase(s))
- .findAny()
- .orElse(null);
- }
-
- @Override
- public List tabCompletes(CommandSender commandSender, String[] previousArguments, String s) {
- if (!(commandSender instanceof Player)) {
- return new ArrayList<>();
- }
- Player player = (Player) commandSender;
- return BauweltMember.getMembers(player.getUniqueId())
- .stream()
- .map(m -> SteamwarUser.get(m.getMemberID()).getUserName())
- .collect(Collectors.toList());
- }
- });
- }
-
- private static void addMapper(Class> clazz, Class> alternativeClazz, TypeMapper> mapper) {
- MAPPER_FUNCTIONS.put(clazz.getTypeName(), mapper);
- MAPPER_FUNCTIONS.put(alternativeClazz.getTypeName(), mapper);
- }
-
- static CommandPart generateCommandPart(boolean help, String[] subCommand, Parameter[] parameters, Map> localTypeMapper, Map localGuardChecker) {
- CommandPart first = null;
- CommandPart current = null;
- for (String s : subCommand) {
- CommandPart commandPart = new CommandPart(createMapper(s), null, null, null, help ? GuardCheckType.HELP_COMMAND : GuardCheckType.COMMAND);
- commandPart.setIgnoreAsArgument(true);
- if (current != null) {
- current.setNext(commandPart);
- }
- current = commandPart;
- if (first == null) {
- first = current;
- }
- }
- for (int i = 1; i < parameters.length; i++) {
- Parameter parameter = parameters[i];
- TypeMapper> typeMapper = getTypeMapper(parameter, localTypeMapper);
- GuardChecker guardChecker = getGuardChecker(parameter, localGuardChecker);
- Class> varArgType = parameter.isVarArgs() ? parameter.getType().getComponentType() : null;
- SWCommand.OptionalValue optionalValue = parameter.getAnnotation(SWCommand.OptionalValue.class);
-
- CommandPart commandPart = new CommandPart(typeMapper, guardChecker, varArgType, optionalValue != null ? optionalValue.value() : null, help ? GuardCheckType.HELP_COMMAND : GuardCheckType.COMMAND);
- if (current != null) {
- current.setNext(commandPart);
- }
- current = commandPart;
- if (first == null) {
- first = current;
- }
- }
- return first;
- }
-
- static TypeMapper> getTypeMapper(Parameter parameter, Map> localTypeMapper) {
- Class> clazz = parameter.getType();
- if (parameter.isVarArgs()) {
- clazz = clazz.getComponentType();
- }
-
- SWCommand.ClassMapper classMapper = parameter.getAnnotation(SWCommand.ClassMapper.class);
- SWCommand.Mapper mapper = parameter.getAnnotation(SWCommand.Mapper.class);
- if (clazz.isEnum() && classMapper == null && mapper == null && !MAPPER_FUNCTIONS.containsKey(clazz.getTypeName()) && !localTypeMapper.containsKey(clazz.getTypeName())) {
- return createEnumMapper((Class>) clazz);
- }
-
- String name = clazz.getTypeName();
- if (classMapper != null) {
- name = classMapper.value().getTypeName();
- } else if (mapper != null) {
- name = mapper.value();
- } else {
- SWCommand.StaticValue staticValue = parameter.getAnnotation(SWCommand.StaticValue.class);
- if (staticValue != null) {
- if (parameter.getType() == String.class) {
- return createMapper(staticValue.value());
- }
- if (staticValue.allowISE()) {
- if ((parameter.getType() == boolean.class || parameter.getType() == Boolean.class) && staticValue.value().length == 2) {
- List tabCompletes = new ArrayList<>(Arrays.asList(staticValue.value()));
- return createMapper(s -> {
- int index = tabCompletes.indexOf(s);
- return index == -1 ? null : index != 0;
- }, (commandSender, s) -> tabCompletes);
- }
- if ((parameter.getType() == int.class || parameter.getType() == Integer.class) && staticValue.value().length >= 2) {
- List tabCompletes = new ArrayList<>(Arrays.asList(staticValue.value()));
- return createMapper(s -> {
- int index = tabCompletes.indexOf(s);
- return index == -1 ? null : index;
- }, (commandSender, s) -> tabCompletes);
- }
- if ((parameter.getType() == long.class || parameter.getType() == Long.class) && staticValue.value().length >= 2) {
- List tabCompletes = new ArrayList<>(Arrays.asList(staticValue.value()));
- return createMapper(s -> {
- long index = tabCompletes.indexOf(s);
- return index == -1 ? null : index;
- }, (commandSender, s) -> tabCompletes);
- }
- }
- }
- }
- TypeMapper> typeMapper = localTypeMapper.getOrDefault(name, MAPPER_FUNCTIONS.getOrDefault(name, null));
- if (typeMapper == null) {
- throw new IllegalArgumentException("No mapper found for " + name);
- }
- return typeMapper;
- }
-
- static GuardChecker getGuardChecker(Parameter parameter, Map localGuardChecker) {
- Class> clazz = parameter.getType();
- if (parameter.isVarArgs()) {
- clazz = clazz.getComponentType();
- }
-
- SWCommand.ClassGuard classGuard = parameter.getAnnotation(SWCommand.ClassGuard.class);
- if (classGuard != null) {
- if (classGuard.value() != null) {
- return getGuardChecker(classGuard.value().getTypeName(), localGuardChecker);
- }
- return getGuardChecker(clazz.getTypeName(), localGuardChecker);
- }
-
- SWCommand.Guard guard = parameter.getAnnotation(SWCommand.Guard.class);
- if (guard != null) {
- if (guard.value() != null && !guard.value().isEmpty()) {
- return getGuardChecker(guard.value(), localGuardChecker);
- }
- return getGuardChecker(clazz.getTypeName(), localGuardChecker);
- }
- return null;
- }
-
- private static GuardChecker getGuardChecker(String s, Map localGuardChecker) {
- GuardChecker guardChecker = localGuardChecker.getOrDefault(s, GUARD_FUNCTIONS.getOrDefault(s, null));
- if (guardChecker == null) {
- throw new IllegalArgumentException("No guard found for " + s);
- }
- return guardChecker;
- }
-
- public static void addMapper(Class clazz, TypeMapper mapper) {
- addMapper(clazz.getTypeName(), mapper);
- }
-
- public static void addMapper(String name, TypeMapper> mapper) {
- MAPPER_FUNCTIONS.putIfAbsent(name, mapper);
- }
-
- public static void addGuard(Class> clazz, GuardChecker guardChecker) {
- addGuard(clazz.getTypeName(), guardChecker);
- }
-
- public static void addGuard(String name, GuardChecker guardChecker) {
- GUARD_FUNCTIONS.putIfAbsent(name, guardChecker);
- }
-
- public static TypeMapper createMapper(String... values) {
- List strings = Arrays.asList(values);
- return createMapper((s) -> strings.contains(s) ? s : null, s -> strings);
- }
-
- public static TypeMapper createMapper(Function mapper, Function> tabCompleter) {
- return createMapper(mapper, (commandSender, s) -> tabCompleter.apply(s));
- }
-
- public static TypeMapper createMapper(Function mapper, BiFunction> tabCompleter) {
- return new TypeMapper() {
- @Override
- public T map(CommandSender commandSender, String[] previousArguments, String s) {
- return mapper.apply(s);
- }
-
- @Override
- public List tabCompletes(CommandSender commandSender, String[] previous, String s) {
- return tabCompleter.apply(commandSender, s);
- }
- };
- }
-
- public static TypeMapper> createEnumMapper(Class> enumClass) {
- Enum>[] enums = enumClass.getEnumConstants();
- List strings = Arrays.stream(enums).map(Enum::name).map(String::toLowerCase).collect(Collectors.toList());
- return new TypeMapper>() {
- @Override
- public Enum> map(CommandSender commandSender, String[] previousArguments, String s) {
- for (Enum> e : enums) {
- if (e.name().equalsIgnoreCase(s)) return e;
- }
- return null;
- }
-
- @Override
- public List tabCompletes(CommandSender commandSender, String[] previousArguments, String s) {
- return strings;
- }
- };
- }
-
- private static Function numberMapper(Function mapper) {
- return s -> {
- if (s.equalsIgnoreCase("nan")) return null;
- try {
- return mapper.apply(s);
- } catch (NumberFormatException e) {
- // Ignored
- }
- try {
- return mapper.apply(s.replace(',', '.'));
- } catch (NumberFormatException e) {
- return null;
- }
- };
- }
-
- private static Function> numberCompleter(Function mapper) {
- return s -> numberMapper(mapper).apply(s) != null
- ? Collections.singletonList(s)
- : Collections.emptyList();
- }
-
- static T[] getAnnotation(Method method, Class annotation) {
- if (method.getAnnotations().length != 1) return null;
- return method.getDeclaredAnnotationsByType(annotation);
- }
-}
diff --git a/SpigotCore_Main/src/de/steamwar/command/SubCommand.java b/SpigotCore_Main/src/de/steamwar/command/SubCommand.java
deleted file mode 100644
index 3254ade..0000000
--- a/SpigotCore_Main/src/de/steamwar/command/SubCommand.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-import org.bukkit.command.CommandSender;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-import java.util.function.Predicate;
-
-class SubCommand {
-
- private SWCommand swCommand;
- Method method;
- String[] description;
- String[] subCommand;
- private Predicate commandSenderPredicate;
- private Function commandSenderFunction;
- GuardChecker guardChecker;
- boolean noTabComplete;
- int comparableValue;
-
- private CommandPart commandPart;
-
- SubCommand(SWCommand swCommand, Method method, String[] subCommand, Map> localTypeMapper, Map localGuardChecker, boolean help, String[] description, boolean noTabComplete) {
- this.swCommand = swCommand;
- this.method = method;
- this.description = description;
- this.noTabComplete = noTabComplete;
- this.subCommand = subCommand;
-
- Parameter[] parameters = method.getParameters();
- comparableValue = parameters[parameters.length - 1].isVarArgs() ? Integer.MAX_VALUE : -parameters.length;
-
- guardChecker = SWCommandUtils.getGuardChecker(parameters[0], localGuardChecker);
-
- commandPart = SWCommandUtils.generateCommandPart(help, subCommand, parameters, localTypeMapper, localGuardChecker);
- commandSenderPredicate = sender -> parameters[0].getType().isAssignableFrom(sender.getClass());
- commandSenderFunction = sender -> parameters[0].getType().cast(sender);
- }
-
- boolean invoke(CommandSender commandSender, String alias, String[] args) {
- try {
- if (!commandSenderPredicate.test(commandSender)) {
- return false;
- }
-
- if (commandPart == null) {
- if (args.length != 0) {
- return false;
- }
- method.setAccessible(true);
- method.invoke(swCommand, commandSenderFunction.apply(commandSender));
- } else {
- List objects = new ArrayList<>();
- commandPart.generateArgumentArray(objects, commandSender, args, 0);
- if (guardChecker != null) {
- GuardResult guardResult = guardChecker.guard(commandSender, GuardCheckType.COMMAND, new String[0], null);
- switch (guardResult) {
- case ALLOWED:
- break;
- case DENIED:
- throw new CommandNoHelpException();
- case DENIED_WITH_HELP:
- default:
- return true;
- }
- }
- commandPart.guardCheck(commandSender, args, 0);
- objects.add(0, commandSenderFunction.apply(commandSender));
- method.setAccessible(true);
- method.invoke(swCommand, objects.toArray());
- }
- } catch (CommandNoHelpException e) {
- throw e;
- } catch (CommandParseException e) {
- return false;
- } catch (InvocationTargetException e) {
- throw new CommandFrameworkException(e, alias, args);
- } catch (IllegalAccessException | RuntimeException e) {
- throw new SecurityException(e.getMessage(), e);
- }
- return true;
- }
-
- List tabComplete(CommandSender commandSender, String[] args) {
- if (guardChecker != null && guardChecker.guard(commandSender, GuardCheckType.TAB_COMPLETE, new String[0], null) != GuardResult.ALLOWED) {
- return null;
- }
- if (commandPart == null) {
- return null;
- }
- List list = new ArrayList<>();
- commandPart.generateTabComplete(list, commandSender, args, 0);
- return list;
- }
-}
diff --git a/SpigotCore_Main/src/de/steamwar/command/TypeMapper.java b/SpigotCore_Main/src/de/steamwar/command/TypeMapper.java
index bc794fb..08c99cd 100644
--- a/SpigotCore_Main/src/de/steamwar/command/TypeMapper.java
+++ b/SpigotCore_Main/src/de/steamwar/command/TypeMapper.java
@@ -23,7 +23,7 @@ import org.bukkit.command.CommandSender;
import java.util.List;
-public interface TypeMapper {
+public interface TypeMapper extends AbstractTypeMapper {
/**
* The CommandSender can be null!
*/
@@ -37,6 +37,4 @@ public interface TypeMapper {
default T map(String[] previousArguments, String s) {
throw new SecurityException();
}
-
- List tabCompletes(CommandSender commandSender, String[] previousArguments, String s);
}
diff --git a/SpigotCore_Main/src/de/steamwar/command/TypeUtils.java b/SpigotCore_Main/src/de/steamwar/command/TypeUtils.java
new file mode 100644
index 0000000..f4db4f9
--- /dev/null
+++ b/SpigotCore_Main/src/de/steamwar/command/TypeUtils.java
@@ -0,0 +1,88 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2022 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.command;
+
+import de.steamwar.sql.BauweltMember;
+import de.steamwar.sql.SchematicNode;
+import de.steamwar.sql.SteamwarUser;
+import lombok.experimental.UtilityClass;
+import org.bukkit.Bukkit;
+import org.bukkit.GameMode;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+@UtilityClass
+public class TypeUtils {
+
+ static void init() {
+ SWCommandUtils.addMapper(Player.class, SWCommandUtils.createMapper(Bukkit::getPlayer, s -> Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList())));
+ SWCommandUtils.addMapper(GameMode.class, SWCommandUtils.createMapper(s -> {
+ s = s.toLowerCase();
+ if (s.equals("s") || s.equals("survival") || s.equals("0")) return GameMode.SURVIVAL;
+ if (s.equals("c") || s.equals("creative") || s.equals("1")) return GameMode.CREATIVE;
+ if (s.equals("sp") || s.equals("spectator") || s.equals("3")) return GameMode.SPECTATOR;
+ if (s.equals("a") || s.equals("adventure") || s.equals("2")) return GameMode.ADVENTURE;
+ return null;
+ }, s -> Arrays.asList("s", "survival", "0", "c", "creative", "1", "sp", "spectator", "3", "a", "adventure", "2")));
+ SWCommandUtils.addMapper(SteamwarUser.class, SWCommandUtils.createMapper(SteamwarUser::get, s -> Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList())));
+ SWCommandUtils.addMapper(SchematicNode.class, new TypeMapper() {
+ @Override
+ public SchematicNode map(CommandSender commandSender, String[] previousArguments, String s) {
+ return SchematicNode.getNodeFromPath(SteamwarUser.get(((Player) commandSender).getUniqueId()), s);
+ }
+
+ @Override
+ public Collection tabCompletes(CommandSender sender, String[] previousArguments, String s) {
+ return SchematicNode.getNodeTabcomplete(SteamwarUser.get(((Player) sender).getUniqueId()), s);
+ }
+ });
+ SWCommandUtils.addMapper(BauweltMember.class, new TypeMapper() {
+ @Override
+ public BauweltMember map(CommandSender commandSender, String[] previousArguments, String s) {
+ if (!(commandSender instanceof Player)) {
+ return null;
+ }
+ Player player = (Player) commandSender;
+ return BauweltMember.getMembers(player.getUniqueId())
+ .stream()
+ .filter(member -> SteamwarUser.get(member.getMemberID()).getUserName().equalsIgnoreCase(s))
+ .findAny()
+ .orElse(null);
+ }
+
+ @Override
+ public Collection tabCompletes(CommandSender sender, String[] previousArguments, String s) {
+ if (!(sender instanceof Player)) {
+ return new ArrayList<>();
+ }
+ Player player = (Player) sender;
+ return BauweltMember.getMembers(player.getUniqueId())
+ .stream()
+ .map(m -> SteamwarUser.get(m.getMemberID()).getUserName())
+ .collect(Collectors.toList());
+ }
+ });
+ }
+}
diff --git a/SpigotCore_Main/testsrc/de/steamwar/TestCommandSender.java b/SpigotCore_Main/testsrc/de/steamwar/TestCommandSender.java
deleted file mode 100644
index 02760e4..0000000
--- a/SpigotCore_Main/testsrc/de/steamwar/TestCommandSender.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar;
-
-import org.bukkit.Server;
-import org.bukkit.command.CommandSender;
-import org.bukkit.permissions.Permission;
-import org.bukkit.permissions.PermissionAttachment;
-import org.bukkit.permissions.PermissionAttachmentInfo;
-import org.bukkit.plugin.Plugin;
-
-import java.util.Set;
-
-public class TestCommandSender implements CommandSender {
-
- @Override
- public void sendMessage(String s) {
-
- }
-
- @Override
- public void sendMessage(String[] strings) {
-
- }
-
- @Override
- public Server getServer() {
- return null;
- }
-
- @Override
- public String getName() {
- return null;
- }
-
- @Override
- public Spigot spigot() {
- return null;
- }
-
- @Override
- public boolean isPermissionSet(String s) {
- return false;
- }
-
- @Override
- public boolean isPermissionSet(Permission permission) {
- return false;
- }
-
- @Override
- public boolean hasPermission(String s) {
- return false;
- }
-
- @Override
- public boolean hasPermission(Permission permission) {
- return false;
- }
-
- @Override
- public PermissionAttachment addAttachment(Plugin plugin, String s, boolean b) {
- return null;
- }
-
- @Override
- public PermissionAttachment addAttachment(Plugin plugin) {
- return null;
- }
-
- @Override
- public PermissionAttachment addAttachment(Plugin plugin, String s, boolean b, int i) {
- return null;
- }
-
- @Override
- public PermissionAttachment addAttachment(Plugin plugin, int i) {
- return null;
- }
-
- @Override
- public void removeAttachment(PermissionAttachment permissionAttachment) {
-
- }
-
- @Override
- public void recalculatePermissions() {
-
- }
-
- @Override
- public Set getEffectivePermissions() {
- return null;
- }
-
- @Override
- public boolean isOp() {
- return false;
- }
-
- @Override
- public void setOp(boolean b) {
-
- }
-}
diff --git a/SpigotCore_Main/testsrc/de/steamwar/command/ExecutionIdentifier.java b/SpigotCore_Main/testsrc/de/steamwar/command/ExecutionIdentifier.java
deleted file mode 100644
index e4ed591..0000000
--- a/SpigotCore_Main/testsrc/de/steamwar/command/ExecutionIdentifier.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-public class ExecutionIdentifier extends RuntimeException {
- public ExecutionIdentifier() {
- }
-
- public ExecutionIdentifier(String message) {
- super(message);
- }
-
- public ExecutionIdentifier(String message, Throwable cause) {
- super(message, cause);
- }
-
- public ExecutionIdentifier(Throwable cause) {
- super(cause);
- }
-
- public ExecutionIdentifier(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-}
diff --git a/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommand.java b/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommand.java
deleted file mode 100644
index 79f2844..0000000
--- a/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommand.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-import org.bukkit.command.CommandSender;
-
-public class SimpleCommand extends SWCommand {
-
- public SimpleCommand() {
- super(true, "simple");
- }
-
- @Register
- public void execute(CommandSender sender) {
- throw new ExecutionIdentifier("Simple execute without any parameters");
- }
-}
diff --git a/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommandPartTest.java b/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommandPartTest.java
deleted file mode 100644
index 08dccf7..0000000
--- a/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommandPartTest.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-import de.steamwar.TestCommandSender;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.*;
-
-public class SimpleCommandPartTest {
-
- private CommandPart stringCommandPart;
- private CommandPart intCommandPart;
- private CommandPart chainedCommandPart;
- private CommandPart varArgCommandPart;
-
- private CommandPart simpleGuardPart;
-
- private CommandPart optionalCommandPart;
-
- private CommandPart optionalCommandPartMultipleNext;
-
- @Before
- public void setUp() throws Exception {
- stringCommandPart = new CommandPart(SWCommandUtils.createMapper("hello", "world"), null, null, null, GuardCheckType.COMMAND);
- intCommandPart = new CommandPart(SWCommandUtils.MAPPER_FUNCTIONS.get("int"), null, null, null, GuardCheckType.COMMAND);
-
- chainedCommandPart = new CommandPart(SWCommandUtils.createMapper("hello", "world"), null, null, null, GuardCheckType.COMMAND);
- chainedCommandPart.setNext(new CommandPart(SWCommandUtils.MAPPER_FUNCTIONS.get("int"), null, null, null, GuardCheckType.COMMAND));
-
- varArgCommandPart = new CommandPart(SWCommandUtils.createMapper("hello", "world"), null, String.class, null, GuardCheckType.COMMAND);
-
- simpleGuardPart = new CommandPart(SWCommandUtils.createMapper("hello", "world"), (commandSender, guardCheckType, previousArguments, s) -> s.equals("hello") ? GuardResult.DENIED : GuardResult.ALLOWED, null, null, GuardCheckType.COMMAND);
-
- optionalCommandPart = new CommandPart(SWCommandUtils.createMapper("hello", "world"), null, null, "hello", GuardCheckType.COMMAND);
- optionalCommandPart.setNext(new CommandPart(SWCommandUtils.createMapper("hello2", "world2"), null, null, null, GuardCheckType.COMMAND));
-
- optionalCommandPartMultipleNext = new CommandPart(SWCommandUtils.createMapper("hello", "world"), null, null, "hello", GuardCheckType.COMMAND);
- CommandPart next = new CommandPart(SWCommandUtils.createMapper("hello2", "world2"), null, null, null, GuardCheckType.COMMAND);
- next.setNext(new CommandPart(SWCommandUtils.createMapper("hello3", "world3"), null, null, null, GuardCheckType.COMMAND));
- optionalCommandPartMultipleNext.setNext(next);
- }
-
- @Test
- public void testCommandPartTabCompleteNoArguments() {
- List tabComplete = new ArrayList<>();
- stringCommandPart.generateTabComplete(tabComplete, new TestCommandSender(), new String[]{""}, 0);
- assertThat(tabComplete.size(), is(2));
- assertThat(tabComplete.get(0), is("hello"));
- assertThat(tabComplete.get(1), is("world"));
- }
-
- @Test(expected = CommandParseException.class)
- public void testCommandExecuteInvalidArgument() {
- stringCommandPart.generateArgumentArray(new ArrayList<>(), new TestCommandSender(), new String[]{""}, 0);
- }
-
- @Test
- public void testCommandExecuteValidArgument() {
- List argumentArray = new ArrayList<>();
- stringCommandPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"hello"}, 0);
- assertThat(argumentArray.size(), is(1));
- assertThat(argumentArray.get(0), instanceOf(String.class));
- assertThat(argumentArray.get(0), is("hello"));
- }
-
- @Test
- public void testCommandExecuteValidOtherArgument() {
- List argumentArray = new ArrayList<>();
- stringCommandPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"world"}, 0);
- assertThat(argumentArray.size(), is(1));
- assertThat(argumentArray.get(0), instanceOf(String.class));
- assertThat(argumentArray.get(0), is("world"));
- }
-
- @Test(expected = CommandParseException.class)
- public void testCommandExecuteNonNumberArgument() {
- intCommandPart.generateArgumentArray(new ArrayList<>(), new TestCommandSender(), new String[]{"world"}, 0);
- }
-
- @Test
- public void testCommandExecuteValidNumberArgument() {
- List argumentArray = new ArrayList<>();
- intCommandPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"0"}, 0);
- assertThat(argumentArray.size(), is(1));
- assertThat(argumentArray.get(0), instanceOf(int.class));
- assertThat(argumentArray.get(0), is(0));
- }
-
- @Test
- public void testChainedCommandExecuteValidArgument() {
- List argumentArray = new ArrayList<>();
- chainedCommandPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"hello", "0"}, 0);
- assertThat(argumentArray.size(), is(2));
- assertThat(argumentArray.get(0), instanceOf(String.class));
- assertThat(argumentArray.get(0), is("hello"));
- assertThat(argumentArray.get(1), instanceOf(int.class));
- assertThat(argumentArray.get(1), is(0));
- }
-
- @Test
- public void testChainedCommandTabComplete() {
- List tabCompletes = new ArrayList<>();
- chainedCommandPart.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{""}, 0);
- assertThat(tabCompletes.size(), is(2));
- assertThat(tabCompletes.get(0), is("hello"));
- assertThat(tabCompletes.get(1), is("world"));
- }
-
- @Test
- public void testChainedCommandTabCompleteOther() {
- List tabCompletes = new ArrayList<>();
- chainedCommandPart.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{"hello", ""}, 0);
- assertThat(tabCompletes.size(), is(0));
- }
-
- @Test
- public void testVarArgsCommandTabComplete() {
- List tabCompletes = new ArrayList<>();
- varArgCommandPart.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{"hello"}, 0);
- assertThat(tabCompletes.size(), is(2));
- assertThat(tabCompletes.get(0), is("hello"));
- assertThat(tabCompletes.get(1), is("world"));
- }
-
- @Test
- public void testVarArgsCommandTabCompleteDeeper() {
- List tabCompletes = new ArrayList<>();
- varArgCommandPart.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{"hello", "world", "hello", "world"}, 0);
- System.out.println(tabCompletes);
- assertThat(tabCompletes.size(), is(2));
- assertThat(tabCompletes.get(0), is("hello"));
- assertThat(tabCompletes.get(1), is("world"));
- }
-
- @Test
- public void testVarArgsCommandArgumentParsing() {
- List argumentArray = new ArrayList<>();
- varArgCommandPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"hello"}, 0);
- assertThat(argumentArray.size(), is(1));
- assertThat(argumentArray.get(0), instanceOf(String[].class));
- assertThat((String[]) argumentArray.get(0), arrayWithSize(1));
- assertThat((String[]) argumentArray.get(0), is(new String[]{"hello"}));
- }
-
- @Test
- public void testVarArgsCommandArgumentParsingDeeper() {
- List argumentArray = new ArrayList<>();
- varArgCommandPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"hello", "world", "hello", "world"}, 0);
- assertThat(argumentArray.size(), is(1));
- assertThat(argumentArray.get(0), instanceOf(String[].class));
- assertThat((String[]) argumentArray.get(0), arrayWithSize(4));
- assertThat((String[]) argumentArray.get(0), is(new String[]{"hello", "world", "hello", "world"}));
- }
-
- @Test
- public void testGuardCommandExecute() {
- List argumentArray = new ArrayList<>();
- simpleGuardPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"hello"}, 0);
- assertThat(argumentArray.size(), is(1));
- }
-
- @Test(expected = CommandNoHelpException.class)
- public void testGuardGuardCheck() {
- simpleGuardPart.guardCheck(new TestCommandSender(), new String[]{"hello"}, 0);
- }
-
- @Test
- public void testGuardCommandExecuteValid() {
- List argumentArray = new ArrayList<>();
- simpleGuardPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"world"}, 0);
- assertThat(argumentArray.size(), is(1));
- }
-
- @Test
- public void testGuardGuardCheckValid() {
- boolean guardResult = simpleGuardPart.guardCheck(new TestCommandSender(), new String[]{"world"}, 0);
- assertThat(guardResult, is(true));
- }
-
- @Test
- public void testOptionalCommandPartTabComplete() {
- List tabCompletes = new ArrayList<>();
- optionalCommandPart.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{""}, 0);
- assertThat(tabCompletes.size(), is(4));
- assertThat(tabCompletes.get(0), is("hello"));
- assertThat(tabCompletes.get(1), is("world"));
- assertThat(tabCompletes.get(2), is("hello2"));
- assertThat(tabCompletes.get(3), is("world2"));
- }
-
- @Test
- public void testOptionalCommandPartTabCompleteSecond() {
- List tabCompletes = new ArrayList<>();
- optionalCommandPart.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{"hello", ""}, 0);
- assertThat(tabCompletes.size(), is(2));
- assertThat(tabCompletes.get(0), is("hello2"));
- assertThat(tabCompletes.get(1), is("world2"));
- }
-
- @Test(expected = CommandParseException.class)
- public void testOptionalCommandPartExecution() {
- optionalCommandPart.generateArgumentArray(new ArrayList<>(), new TestCommandSender(), new String[]{""}, 0);
- }
-
- @Test
- public void testOptionalCommandPartExecutionValid() {
- List argumentArray = new ArrayList<>();
- optionalCommandPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"hello2"}, 0);
- assertThat(argumentArray.size(), is(2));
- assertThat(argumentArray.get(0), is("hello"));
- assertThat(argumentArray.get(1), is("hello2"));
- }
-
- @Test(expected = CommandParseException.class)
- public void testOptionalCommandPartExecutionInvalid() {
- optionalCommandPart.generateArgumentArray(new ArrayList<>(), new TestCommandSender(), new String[]{"hello"}, 0);
- }
-
- @Test
- public void testOptionalCommandPartExecutionFullyValid() {
- List argumentArray = new ArrayList<>();
- optionalCommandPart.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"world", "hello2"}, 0);
- assertThat(argumentArray.size(), is(2));
- assertThat(argumentArray.get(0), is("world"));
- assertThat(argumentArray.get(1), is("hello2"));
- }
-
- @Test
- public void testOptionalCommandPartExecutionMultipleNext() {
- List argumentArray = new ArrayList<>();
- optionalCommandPartMultipleNext.generateArgumentArray(argumentArray, new TestCommandSender(), new String[]{"world", "hello2", "hello3"}, 0);
- assertThat(argumentArray.size(), is(3));
- assertThat(argumentArray.get(0), is("world"));
- assertThat(argumentArray.get(1), is("hello2"));
- assertThat(argumentArray.get(2), is("hello3"));
- }
-
- @Test
- public void testOptionalCommandPartExecutionMultipleTabComplete() {
- List tabCompletes = new ArrayList<>();
- optionalCommandPartMultipleNext.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{""}, 0);
- assertThat(tabCompletes.size(), is(4));
- assertThat(tabCompletes.get(0), is("hello"));
- assertThat(tabCompletes.get(1), is("world"));
- assertThat(tabCompletes.get(2), is("hello2"));
- assertThat(tabCompletes.get(3), is("world2"));
-
- tabCompletes = new ArrayList<>();
- optionalCommandPartMultipleNext.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{"hello", ""}, 0);
- assertThat(tabCompletes.size(), is(2));
- assertThat(tabCompletes.get(0), is("hello2"));
- assertThat(tabCompletes.get(1), is("world2"));
-
- tabCompletes = new ArrayList<>();
- optionalCommandPartMultipleNext.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{"hello", "world2", ""}, 0);
- assertThat(tabCompletes.size(), is(2));
- assertThat(tabCompletes.get(0), is("hello3"));
- assertThat(tabCompletes.get(1), is("world3"));
-
- tabCompletes = new ArrayList<>();
- optionalCommandPartMultipleNext.generateTabComplete(tabCompletes, new TestCommandSender(), new String[]{"world2", ""}, 0);
- assertThat(tabCompletes.size(), is(2));
- assertThat(tabCompletes.get(0), is("hello3"));
- assertThat(tabCompletes.get(1), is("world3"));
- }
-}
diff --git a/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommandTest.java b/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommandTest.java
deleted file mode 100644
index c18728e..0000000
--- a/SpigotCore_Main/testsrc/de/steamwar/command/SimpleCommandTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2020 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.command;
-
-import de.steamwar.TestCommandSender;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-
-public class SimpleCommandTest {
-
- private SimpleCommand simpleCommand;
-
- @Before
- public void setUp() throws Exception {
- simpleCommand = new SimpleCommand();
- }
-
- @Test
- public void testCommandParsing() {
- try {
- simpleCommand.execute(new TestCommandSender(), "", new String[]{});
- } catch (CommandFrameworkException commandFrameworkException) {
- if (commandFrameworkException.getCause().getCause() instanceof ExecutionIdentifier) {
- ExecutionIdentifier executionIdentifier = (ExecutionIdentifier) commandFrameworkException.getCause().getCause();
- assertThat(executionIdentifier.getMessage(), is("Simple execute without any parameters"));
- return;
- }
- }
- assert false;
- }
-
- @Test
- public void testUnknownCommandParsing() {
- try {
- simpleCommand.execute(new TestCommandSender(), "", new String[]{"unknown"});
- } catch (SecurityException securityException) {
- securityException.printStackTrace();
- assert false;
- }
- }
-}