From 7d6908d146df12b968c933997b48545adb6636e9 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 22:54:04 +0200 Subject: [PATCH 01/17] Simplify and document --- .../volmit/iris/util/decree/DecreeNode.java | 36 +++++--- .../iris/util/decree/DecreeParameter.java | 27 ++++-- .../util/decree/DecreeParameterHandler.java | 88 +++++++++++++------ .../volmit/iris/util/decree/DecreeSystem.java | 6 +- .../com/volmit/iris/util/decree/EXAMPLE.java | 12 +-- .../util/decree/{ => annotations}/Decree.java | 17 +++- .../util/decree/{ => annotations}/Param.java | 16 +++- .../DecreeParsingException.java | 2 +- .../DecreeWhichException.java | 4 +- .../util/decree/handlers/ByteHandler.java | 3 +- .../util/decree/handlers/DoubleHandler.java | 3 +- .../util/decree/handlers/FloatHandler.java | 3 +- .../util/decree/handlers/IntegerHandler.java | 4 +- .../util/decree/handlers/LongHandler.java | 3 +- .../util/decree/handlers/PlayerHandler.java | 8 +- .../util/decree/handlers/ShortHandler.java | 3 +- .../util/decree/handlers/StringHandler.java | 3 +- .../util/decree/handlers/WorldHandler.java | 19 ++-- 18 files changed, 167 insertions(+), 90 deletions(-) rename src/main/java/com/volmit/iris/util/decree/{ => annotations}/Decree.java (71%) rename src/main/java/com/volmit/iris/util/decree/{ => annotations}/Param.java (76%) rename src/main/java/com/volmit/iris/util/decree/{ => exceptions}/DecreeParsingException.java (94%) rename src/main/java/com/volmit/iris/util/decree/{ => exceptions}/DecreeWhichException.java (88%) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeNode.java b/src/main/java/com/volmit/iris/util/decree/DecreeNode.java index 02b1b440a..bcddd94dd 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeNode.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeNode.java @@ -19,9 +19,12 @@ package com.volmit.iris.util.decree; import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.decree.annotations.Decree; +import com.volmit.iris.util.decree.annotations.Param; import java.lang.reflect.Method; import java.lang.reflect.Parameter; +import java.util.Arrays; public class DecreeNode { private final Method method; @@ -31,13 +34,21 @@ public class DecreeNode { this.method = method; } + /** + * Get the parameters of this decree node + * @return The list of parameters if ALL are annotated by @{@link Param}, else null + */ public KList getParameters() { KList p = new KList<>(); for(Parameter i : method.getParameters()) { - p.add(new DecreeParameter(i)); + if (i.getDeclaredAnnotation(Param.class) != null) { + p.add(new DecreeParameter(i)); + } else { + return null; + } } return p; @@ -46,7 +57,7 @@ public class DecreeNode { public String getName() { Decree p = method.getDeclaredAnnotation(Decree.class); - return p == null || p.name().equals("methodName") ? method.getName() : p.name(); + return p == null || p.name().equals(Decree.METHOD_NAME) ? method.getName() : p.name(); } public DecreeOrigin getOrigin() @@ -58,7 +69,7 @@ public class DecreeNode { public String getDescription() { Decree p = method.getDeclaredAnnotation(Decree.class); - return p != null ? p.description() : "No Description Provided"; + return p != null ? p.description() : Decree.DEFAULT_DESCRIPTION; } public KList getAliases() @@ -66,17 +77,18 @@ public class DecreeNode { Decree p = method.getDeclaredAnnotation(Decree.class); KList d = new KList<>(); - if(p != null) - { - for(String i : p.aliases()) - { - if(i.isEmpty()) - { - continue; - } + if (p == null || Arrays.equals(p.aliases(), new String[]{Decree.NO_ALIASES})){ + return d; + } - d.add(i); + for(String i : p.aliases()) + { + if(i.isEmpty()) + { + continue; } + + d.add(i); } return d; diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java index 47dffbd2d..29717b477 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java @@ -19,8 +19,10 @@ package com.volmit.iris.util.decree; import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.decree.annotations.Param; import java.lang.reflect.Parameter; +import java.util.Arrays; public class DecreeParameter { private final Parameter parameter; @@ -52,22 +54,29 @@ public class DecreeParameter { return p.name().isEmpty() ? parameter.getName() : p.name(); } + public boolean isRequired() + { + Param p = parameter.getDeclaredAnnotation(Param.class); + return p == null || p.value().equals(Param.REQUIRED); + } + public KList getAliases() { Param p = parameter.getDeclaredAnnotation(Param.class); - KList d= new KList<>(); + KList d = new KList<>(); - if(p != null) + if (p == null || Arrays.equals(p.aliases(), new String[]{Param.NO_ALIAS})){ + return d; + } + + for(String i : p.aliases()) { - for(String i : p.aliases()) + if(i.isEmpty()) { - if(i.isEmpty()) - { - continue; - } - - d.add(i); + continue; } + + d.add(i); } return d; diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameterHandler.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameterHandler.java index e7f789254..7929f0163 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameterHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameterHandler.java @@ -19,52 +19,84 @@ package com.volmit.iris.util.decree; import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.collection.KSet; - -import java.util.Locale; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeWhichException; +import org.jetbrains.annotations.NotNull; public interface DecreeParameterHandler { + /** + * Should return the possible values for this type + * @return Possibilities for this type. + */ KList getPossibilities(); + /** + * Converting the type back to a string (inverse of the {@link #parse(String) parse} method) + * @param t The input of the designated type to convert to a String + * @return The resulting string + */ String toString(T t); + /** + * Should parse a String into the designated type + * @param in The string to parse + * @return The value extracted from the string, of the designated type + * @throws DecreeParsingException Thrown when the parsing fails (ex: "oop" translated to an integer throws this) + * @throws DecreeWhichException Thrown when multiple results are possible + */ T parse(String in) throws DecreeParsingException, DecreeWhichException; - boolean supports(Class type); + /** + * Returns whether a certain type is supported by this handler
+ * By default, this checks if the {@link #parse(String) parse} method returns the corresponding type. + * Hence, this should only be overwritten if multiple types, outside the designated one, are supported. + * @param type The type to check + * @return True if supported, false if not + */ + default boolean supports(Class type){ + try { + if (this.getClass().getMethod("parse", String.class).getReturnType().equals(type)){ + return true; + } + } catch (NoSuchMethodException ignored){} + return false; + } + /** + * The possible entries for the inputted string (support for autocomplete on partial entries) + * @param input The inputted string to check against + * @return A {@link KList} of possibilities + */ default KList getPossibilities(String input) { - KList p = getPossibilities(); - KList m = new KList<>(); + input = input.trim(); + KList possible = getPossibilities(); + KList matches = new KList<>(); - if(p != null) + if (possible == null || possible.isEmpty()){ + return matches; + } + + if (input.isEmpty()) { - if(input.trim().isEmpty()) - { - return getPossibilities(); - } + return getPossibilities(); + } - KList f = p.convert(this::toString); + KList converted = possible.convert(v -> toString(v).trim()); - for(int i = 0; i < f.size(); i++) + for(int i = 0; i < converted.size(); i++) + { + String g = converted.get(i); + // if + // G == I or + // I in G or + // G in I + if(g.equalsIgnoreCase(input) || g.toLowerCase().contains(input.toLowerCase()) || input.toLowerCase().contains(g.toLowerCase())) { - String g = f.get(i); - if(g.equalsIgnoreCase(input)) - { - m.add(p.get(i)); - } - } - - for(int i = 0; i < f.size(); i++) - { - String g = f.get(i); - if(g.toLowerCase().contains(input.toLowerCase()) || input.toLowerCase().contains(g.toLowerCase())) - { - m.addIfMissing(p.get(i)); - } + matches.add(possible.get(i)); } } - return m; + return matches; } } diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java b/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java index 35b141865..75732f025 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java @@ -24,6 +24,11 @@ import com.volmit.iris.util.collection.KList; public class DecreeSystem { private static final KList> handlers = Iris.initialize("com.volmit.iris.util.decree.handlers", null).convert((i) -> (DecreeParameterHandler) i); + /** + * Get the handler for the specified type + * @param type The type to handle + * @return The corresponding {@link DecreeParameterHandler}, or null + */ public static DecreeParameterHandler handle(Class type) { for(DecreeParameterHandler i : handlers) @@ -33,7 +38,6 @@ public class DecreeSystem { return i; } } - return null; } } diff --git a/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java b/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java index bd65c3919..a06e00a91 100644 --- a/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java +++ b/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java @@ -18,6 +18,8 @@ package com.volmit.iris.util.decree; +import com.volmit.iris.util.decree.annotations.Decree; +import com.volmit.iris.util.decree.annotations.Param; import org.bukkit.entity.Player; public class EXAMPLE @@ -26,18 +28,10 @@ public class EXAMPLE public void kick( @Param(name = "player", description = "The Player to kick from the server", aliases = "p") Player player, - @Param(name = "reason", description = "A reason to kick the player for", aliases = "r") + @Param(name = "reason", description = "A reason to kick the player for", value = "No reason!", aliases = "r") String reason) { player.kickPlayer(reason); DecreeContext.get().sendMessage("Kicked " + player.getName()); } - - @Decree - public void kick( - @Param(name = "player", description = "The Player to kick from the server", aliases = "p") - Player player) - { - kick(player, "No Reason!"); - } } diff --git a/src/main/java/com/volmit/iris/util/decree/Decree.java b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java similarity index 71% rename from src/main/java/com/volmit/iris/util/decree/Decree.java rename to src/main/java/com/volmit/iris/util/decree/annotations/Decree.java index 2b6a73ccb..de68e7fa4 100644 --- a/src/main/java/com/volmit/iris/util/decree/Decree.java +++ b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java @@ -16,18 +16,27 @@ * along with this program. If not, see . */ -package com.volmit.iris.util.decree; +package com.volmit.iris.util.decree.annotations; + +import com.volmit.iris.util.decree.DecreeOrigin; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Decree { - String name() default "methodName"; - String description() default "No Description Provided"; + String METHOD_NAME = "Default Method Name"; + + String DEFAULT_DESCRIPTION = "No Description Provided"; + + String NO_ALIASES = "No Aliases"; + + String name() default METHOD_NAME; + + String description() default DEFAULT_DESCRIPTION; DecreeOrigin origin() default DecreeOrigin.BOTH; - String[] aliases() default ""; + String[] aliases() default {NO_ALIASES}; } diff --git a/src/main/java/com/volmit/iris/util/decree/Param.java b/src/main/java/com/volmit/iris/util/decree/annotations/Param.java similarity index 76% rename from src/main/java/com/volmit/iris/util/decree/Param.java rename to src/main/java/com/volmit/iris/util/decree/annotations/Param.java index 9b3b5f532..3e481618e 100644 --- a/src/main/java/com/volmit/iris/util/decree/Param.java +++ b/src/main/java/com/volmit/iris/util/decree/annotations/Param.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package com.volmit.iris.util.decree; +package com.volmit.iris.util.decree.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -26,7 +26,17 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) public @interface Param { + String REQUIRED = "REQUIRED"; + + String NO_ALIAS = "No Aliases Provided"; + + String DEFAULT_DESCRIPTION = "No Description Provided"; + String name(); - String description() default "No Description Provided"; - String[] aliases() default ""; + + String description() default DEFAULT_DESCRIPTION; + + String value() default REQUIRED; + + String[] aliases() default {NO_ALIAS}; } diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParsingException.java b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeParsingException.java similarity index 94% rename from src/main/java/com/volmit/iris/util/decree/DecreeParsingException.java rename to src/main/java/com/volmit/iris/util/decree/exceptions/DecreeParsingException.java index 4971809b4..279f2cd77 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParsingException.java +++ b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeParsingException.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package com.volmit.iris.util.decree; +package com.volmit.iris.util.decree.exceptions; public class DecreeParsingException extends Exception{ public DecreeParsingException(String message) { diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeWhichException.java b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeWhichException.java similarity index 88% rename from src/main/java/com/volmit/iris/util/decree/DecreeWhichException.java rename to src/main/java/com/volmit/iris/util/decree/exceptions/DecreeWhichException.java index 9ec282769..d20f8d5e2 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeWhichException.java +++ b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeWhichException.java @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -package com.volmit.iris.util.decree; +package com.volmit.iris.util.decree.exceptions; public class DecreeWhichException extends Exception{ public DecreeWhichException() { - super(); + super("More than one option for the entered input"); } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java index 448f0c603..04d70e4ef 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java @@ -20,7 +20,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import org.jetbrains.annotations.NotNull; public class ByteHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java index 947482fc0..5896230cc 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java @@ -20,7 +20,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import org.jetbrains.annotations.NotNull; public class DoubleHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java index 93d21ea19..92f2f2ef6 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java @@ -20,7 +20,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import org.jetbrains.annotations.NotNull; public class FloatHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java index c5329b4ba..dc314ffa1 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java @@ -20,8 +20,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; -import net.kyori.adventure.text.minimessage.parser.ParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import org.jetbrains.annotations.NotNull; public class IntegerHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java index 0efc70992..fda30fe4f 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java @@ -20,7 +20,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import org.jetbrains.annotations.NotNull; public class LongHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java index be3f34d51..df59ee495 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java @@ -20,13 +20,13 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; -import com.volmit.iris.util.decree.DecreeWhichException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeWhichException; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.stream.Collectors; public class PlayerHandler implements DecreeParameterHandler { @Override @@ -60,7 +60,7 @@ public class PlayerHandler implements DecreeParameterHandler { catch(Throwable e) { - throw new DecreeParsingException("Unable to find Player \"" + in + "\""); + throw new DecreeParsingException("Unable to find Player \"" + in + "\" because of an uncaught exception: " + e); } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java index de364981d..464ce7aaf 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java @@ -20,7 +20,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import org.jetbrains.annotations.NotNull; public class ShortHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java index 6c481dd1d..781de5a23 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java @@ -20,7 +20,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import org.jetbrains.annotations.NotNull; /** * Abstraction can sometimes breed stupidity diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java index 0b26f4e45..ecab5bfd2 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java @@ -20,22 +20,21 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; -import com.volmit.iris.util.decree.DecreeParsingException; -import com.volmit.iris.util.decree.DecreeWhichException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeWhichException; import org.bukkit.Bukkit; import org.bukkit.World; - -import java.util.ArrayList; +import org.jetbrains.annotations.NotNull; public class WorldHandler implements DecreeParameterHandler { @Override public KList getPossibilities() { - return new KList<>(new ArrayList<>(Bukkit.getWorlds())); + return new KList<>(Bukkit.getWorlds()); } @Override - public String toString(World player) { - return player.getName(); + public String toString(World world) { + return world.getName(); } @Override @@ -56,10 +55,12 @@ public class WorldHandler implements DecreeParameterHandler { return options.get(0); } - + catch(DecreeParsingException e){ + throw e; + } catch(Throwable e) { - throw new DecreeParsingException("Unable to find World \"" + in + "\""); + throw new DecreeParsingException("Unable to find World \"" + in + "\" because of an uncaught exception: " + e); } } From 19d1c552febe569f2479110e2e436b9c7adc4f3b Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:16:04 +0200 Subject: [PATCH 02/17] Remove unused imports --- .../java/com/volmit/iris/util/decree/handlers/ByteHandler.java | 1 - .../java/com/volmit/iris/util/decree/handlers/DoubleHandler.java | 1 - .../java/com/volmit/iris/util/decree/handlers/FloatHandler.java | 1 - .../com/volmit/iris/util/decree/handlers/IntegerHandler.java | 1 - .../java/com/volmit/iris/util/decree/handlers/LongHandler.java | 1 - .../java/com/volmit/iris/util/decree/handlers/PlayerHandler.java | 1 - .../java/com/volmit/iris/util/decree/handlers/ShortHandler.java | 1 - .../java/com/volmit/iris/util/decree/handlers/StringHandler.java | 1 - .../java/com/volmit/iris/util/decree/handlers/WorldHandler.java | 1 - 9 files changed, 9 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java index 04d70e4ef..d61e368a4 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; -import org.jetbrains.annotations.NotNull; public class ByteHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java index 5896230cc..43db64528 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; -import org.jetbrains.annotations.NotNull; public class DoubleHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java index 92f2f2ef6..ef107f3d0 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; -import org.jetbrains.annotations.NotNull; public class FloatHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java index dc314ffa1..09a1a86b3 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; -import org.jetbrains.annotations.NotNull; public class IntegerHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java index fda30fe4f..69ff82222 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; -import org.jetbrains.annotations.NotNull; public class LongHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java index df59ee495..5045ea822 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java @@ -24,7 +24,6 @@ import com.volmit.iris.util.decree.exceptions.DecreeParsingException; import com.volmit.iris.util.decree.exceptions.DecreeWhichException; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; import java.util.ArrayList; diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java index 464ce7aaf..ad7714bfe 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; -import org.jetbrains.annotations.NotNull; public class ShortHandler implements DecreeParameterHandler { @Override diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java index 781de5a23..27e7ee567 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; -import org.jetbrains.annotations.NotNull; /** * Abstraction can sometimes breed stupidity diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java index ecab5bfd2..b3f437799 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java @@ -24,7 +24,6 @@ import com.volmit.iris.util.decree.exceptions.DecreeParsingException; import com.volmit.iris.util.decree.exceptions.DecreeWhichException; import org.bukkit.Bukkit; import org.bukkit.World; -import org.jetbrains.annotations.NotNull; public class WorldHandler implements DecreeParameterHandler { @Override From 305017d5234b92d5d2676ae99b3336ed6e6b50ac Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:16:51 +0200 Subject: [PATCH 03/17] Annotate @Param & @Decree & update example --- .../com/volmit/iris/util/decree/EXAMPLE.java | 4 ++-- .../iris/util/decree/annotations/Decree.java | 17 ++++++++++++++++ .../iris/util/decree/annotations/Param.java | 20 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java b/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java index a06e00a91..4e0b52747 100644 --- a/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java +++ b/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java @@ -24,11 +24,11 @@ import org.bukkit.entity.Player; public class EXAMPLE { - @Decree + @Decree() public void kick( @Param(name = "player", description = "The Player to kick from the server", aliases = "p") Player player, - @Param(name = "reason", description = "A reason to kick the player for", value = "No reason!", aliases = "r") + @Param(name = "reason", description = "A reason to kick the player for", value = "No reason!", aliases = "k") String reason) { player.kickPlayer(reason); diff --git a/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java index de68e7fa4..926b0fbc6 100644 --- a/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java +++ b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java @@ -32,11 +32,28 @@ public @interface Decree { String NO_ALIASES = "No Aliases"; + /** + * The name of this method, which is the actual Method's name by default + */ String name() default METHOD_NAME; + /** + * The description of this command.
+ * Is {@link #DEFAULT_DESCRIPTION} by default + */ String description() default DEFAULT_DESCRIPTION; + /** + * The origin this command must come from.
+ * Must be elements of the {@link DecreeOrigin} enum
+ * By default, is {@link DecreeOrigin#BOTH}, meaning both console & player can send the command + */ DecreeOrigin origin() default DecreeOrigin.BOTH; + /** + * The aliases of this parameter (instead of just the {@link #name() name} (if specified) or Method Name (name of method))
+ * Can be initialized as just a string (ex. "alias") or as an array (ex. {"alias1", "alias2"})
+ * If someone uses /plugin foo and you specify alias="f" here, /plugin f will do the exact same. + */ String[] aliases() default {NO_ALIASES}; } diff --git a/src/main/java/com/volmit/iris/util/decree/annotations/Param.java b/src/main/java/com/volmit/iris/util/decree/annotations/Param.java index 3e481618e..54ca2d67f 100644 --- a/src/main/java/com/volmit/iris/util/decree/annotations/Param.java +++ b/src/main/java/com/volmit/iris/util/decree/annotations/Param.java @@ -32,11 +32,31 @@ public @interface Param { String DEFAULT_DESCRIPTION = "No Description Provided"; + /** + * The main name of this command.
+ * Required parameter.
+ * This is what is used in game, alongside any (if specified) {@link #aliases() aliases} + */ String name(); + /** + * The description of this parameter, used in help-popups in game.
+ * The default value is {@link #DEFAULT_DESCRIPTION} + */ String description() default DEFAULT_DESCRIPTION; + /** + * The default value for this argument.
+ * The entered string is parsed to the value similarly to how commandline-text would be.
+ * Default is {@link #REQUIRED}, which indicates the variable MUST be defined. + * If you define this, the variable automatically becomes non-required. + */ String value() default REQUIRED; + /** + * The aliases of this parameter (instead of just the {@link #name() name} (if specified) or Method Name (name of method))
+ * Can be initialized as just a string (ex. "alias") or as an array (ex. {"alias1", "alias2"})
+ * If someone uses /plugin foo bar=baz and you specify alias="b" here, /plugin foo b=baz will do the exact same. + */ String[] aliases() default {NO_ALIAS}; } From ac4c37ba48b30ab0cbdedad6a315a66a56e038e0 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:17:26 +0200 Subject: [PATCH 04/17] Extends --- src/main/java/com/volmit/iris/util/decree/EXAMPLE.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java b/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java index 4e0b52747..8a155404c 100644 --- a/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java +++ b/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java @@ -22,7 +22,7 @@ import com.volmit.iris.util.decree.annotations.Decree; import com.volmit.iris.util.decree.annotations.Param; import org.bukkit.entity.Player; -public class EXAMPLE +public class EXAMPLE extends DecreeCommand { @Decree() public void kick( From 326bf39bed9cd90264e6a7ecaa91110d82ea0ba3 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:19:24 +0200 Subject: [PATCH 05/17] Refactor --- src/main/java/com/volmit/iris/util/decree/DecreeParameter.java | 2 +- src/main/java/com/volmit/iris/util/decree/DecreeSystem.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java index 29717b477..f54a88882 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java @@ -34,7 +34,7 @@ public class DecreeParameter { public DecreeParameterHandler getHandler() { - return DecreeSystem.handle(getType()); + return DecreeSystem.getHandler(getType()); } public Class getType() diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java b/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java index 75732f025..2eb987ab5 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java @@ -29,7 +29,7 @@ public class DecreeSystem { * @param type The type to handle * @return The corresponding {@link DecreeParameterHandler}, or null */ - public static DecreeParameterHandler handle(Class type) + public static DecreeParameterHandler getHandler(Class type) { for(DecreeParameterHandler i : handlers) { From b64a9b7a44ffcc8501a2e1973aae50ab6428c8c9 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:25:12 +0200 Subject: [PATCH 06/17] Instantiate DecreeParameter with @param stored + exception when not decl --- .../volmit/iris/util/decree/DecreeNode.java | 5 ++-- .../iris/util/decree/DecreeParameter.java | 24 ++++++++++--------- .../exceptions/DecreeInstanceException.java | 7 ++++++ 3 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/volmit/iris/util/decree/exceptions/DecreeInstanceException.java diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeNode.java b/src/main/java/com/volmit/iris/util/decree/DecreeNode.java index bcddd94dd..7100c095f 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeNode.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeNode.java @@ -21,6 +21,7 @@ package com.volmit.iris.util.decree; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.annotations.Decree; import com.volmit.iris.util.decree.annotations.Param; +import com.volmit.iris.util.decree.exceptions.DecreeInstanceException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; @@ -44,9 +45,9 @@ public class DecreeNode { for(Parameter i : method.getParameters()) { - if (i.getDeclaredAnnotation(Param.class) != null) { + try { p.add(new DecreeParameter(i)); - } else { + } catch (DecreeInstanceException ignored) { return null; } } diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java index f54a88882..0c4efc3e1 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java @@ -20,16 +20,22 @@ package com.volmit.iris.util.decree; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.annotations.Param; +import com.volmit.iris.util.decree.exceptions.DecreeInstanceException; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; import java.lang.reflect.Parameter; import java.util.Arrays; public class DecreeParameter { private final Parameter parameter; + private final Param param; - public DecreeParameter(Parameter parameter) - { + public DecreeParameter(Parameter parameter) throws DecreeInstanceException { this.parameter = parameter; + this.param = parameter.getDeclaredAnnotation(Param.class); + if (param == null){ + throw new DecreeInstanceException("Cannot instantiate DecreeParameter on parameter not annotated by @Param"); + } } public DecreeParameterHandler getHandler() @@ -44,32 +50,28 @@ public class DecreeParameter { public String getName() { - Param p = parameter.getDeclaredAnnotation(Param.class); - return p == null ? parameter.getName() : p.name().isEmpty() ? parameter.getName() : p.name(); + return param.name().isEmpty() ? parameter.getName() : param.name(); } public String getDescription() { - Param p = parameter.getDeclaredAnnotation(Param.class); - return p.name().isEmpty() ? parameter.getName() : p.name(); + return param.description().isEmpty() ? Param.DEFAULT_DESCRIPTION : param.description(); } public boolean isRequired() { - Param p = parameter.getDeclaredAnnotation(Param.class); - return p == null || p.value().equals(Param.REQUIRED); + return param.value().equals(Param.REQUIRED); } public KList getAliases() { - Param p = parameter.getDeclaredAnnotation(Param.class); KList d = new KList<>(); - if (p == null || Arrays.equals(p.aliases(), new String[]{Param.NO_ALIAS})){ + if (Arrays.equals(param.aliases(), new String[]{Param.NO_ALIAS})){ return d; } - for(String i : p.aliases()) + for(String i : param.aliases()) { if(i.isEmpty()) { diff --git a/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeInstanceException.java b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeInstanceException.java new file mode 100644 index 000000000..11bf3f1e7 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeInstanceException.java @@ -0,0 +1,7 @@ +package com.volmit.iris.util.decree.exceptions; + +public class DecreeInstanceException extends Exception { + public DecreeInstanceException(String message){ + super(message); + } +} From c6fa0ddde31165c7e4d187492bfe7589502824de Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:26:46 +0200 Subject: [PATCH 07/17] pff --- .../iris/util/decree/DecreeParameter.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java index 0c4efc3e1..a124489e4 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java @@ -38,33 +38,27 @@ public class DecreeParameter { } } - public DecreeParameterHandler getHandler() - { + public DecreeParameterHandler getHandler() { return DecreeSystem.getHandler(getType()); } - public Class getType() - { + public Class getType() { return parameter.getType(); } - public String getName() - { + public String getName() { return param.name().isEmpty() ? parameter.getName() : param.name(); } - public String getDescription() - { + public String getDescription() { return param.description().isEmpty() ? Param.DEFAULT_DESCRIPTION : param.description(); } - public boolean isRequired() - { + public boolean isRequired() { return param.value().equals(Param.REQUIRED); } - public KList getAliases() - { + public KList getAliases() { KList d = new KList<>(); if (Arrays.equals(param.aliases(), new String[]{Param.NO_ALIAS})){ From 0cd25be408c3c1c2f68cc64898ce9c770b96369c Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:30:02 +0200 Subject: [PATCH 08/17] Instantiate decreeNode with Decree --- .../volmit/iris/util/decree/DecreeNode.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeNode.java b/src/main/java/com/volmit/iris/util/decree/DecreeNode.java index 7100c095f..f9711b9dd 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeNode.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeNode.java @@ -29,10 +29,14 @@ import java.util.Arrays; public class DecreeNode { private final Method method; + private final Decree decree; - public DecreeNode(Method method) - { + public DecreeNode(Method method) throws DecreeInstanceException { this.method = method; + this.decree = method.getDeclaredAnnotation(Decree.class); + if (decree == null){ + throw new DecreeInstanceException("Cannot instantiate DecreeNode on method not annotated by @Decree"); + } } /** @@ -57,32 +61,28 @@ public class DecreeNode { public String getName() { - Decree p = method.getDeclaredAnnotation(Decree.class); - return p == null || p.name().equals(Decree.METHOD_NAME) ? method.getName() : p.name(); + return decree.name().equals(Decree.METHOD_NAME) ? method.getName() : decree.name(); } public DecreeOrigin getOrigin() { - Decree p = method.getDeclaredAnnotation(Decree.class); - return p == null ? DecreeOrigin.BOTH : p.origin(); + return decree.origin(); } public String getDescription() { - Decree p = method.getDeclaredAnnotation(Decree.class); - return p != null ? p.description() : Decree.DEFAULT_DESCRIPTION; + return decree.description().isEmpty() ? Decree.DEFAULT_DESCRIPTION : decree.description(); } public KList getAliases() { - Decree p = method.getDeclaredAnnotation(Decree.class); KList d = new KList<>(); - if (p == null || Arrays.equals(p.aliases(), new String[]{Decree.NO_ALIASES})){ + if (Arrays.equals(decree.aliases(), new String[]{Decree.NO_ALIASES})){ return d; } - for(String i : p.aliases()) + for(String i : decree.aliases()) { if(i.isEmpty()) { From ba0a95ed263f0760546c58e45ff1a8575842e0e9 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:31:02 +0200 Subject: [PATCH 09/17] Pff + docs --- .../com/volmit/iris/util/decree/DecreeNode.java | 15 +++++---------- .../com/volmit/iris/util/decree/DecreeOrigin.java | 3 +++ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeNode.java b/src/main/java/com/volmit/iris/util/decree/DecreeNode.java index f9711b9dd..6e11a33c2 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeNode.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeNode.java @@ -43,8 +43,7 @@ public class DecreeNode { * Get the parameters of this decree node * @return The list of parameters if ALL are annotated by @{@link Param}, else null */ - public KList getParameters() - { + public KList getParameters() { KList p = new KList<>(); for(Parameter i : method.getParameters()) @@ -59,23 +58,19 @@ public class DecreeNode { return p; } - public String getName() - { + public String getName() { return decree.name().equals(Decree.METHOD_NAME) ? method.getName() : decree.name(); } - public DecreeOrigin getOrigin() - { + public DecreeOrigin getOrigin() { return decree.origin(); } - public String getDescription() - { + public String getDescription() { return decree.description().isEmpty() ? Decree.DEFAULT_DESCRIPTION : decree.description(); } - public KList getAliases() - { + public KList getAliases() { KList d = new KList<>(); if (Arrays.equals(decree.aliases(), new String[]{Decree.NO_ALIASES})){ diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeOrigin.java b/src/main/java/com/volmit/iris/util/decree/DecreeOrigin.java index e9e5a688c..531399d5b 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeOrigin.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeOrigin.java @@ -21,5 +21,8 @@ package com.volmit.iris.util.decree; public enum DecreeOrigin { PLAYER, CONSOLE, + /** + * Both the player and the console + */ BOTH } From 4f7e25038c042a9ab016f4b4d33e2621579df8a1 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:33:08 +0200 Subject: [PATCH 10/17] util function --- .../volmit/iris/util/decree/DecreeOrigin.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeOrigin.java b/src/main/java/com/volmit/iris/util/decree/DecreeOrigin.java index 531399d5b..eae213916 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeOrigin.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeOrigin.java @@ -18,11 +18,26 @@ package com.volmit.iris.util.decree; +import com.volmit.iris.util.plugin.VolmitSender; + public enum DecreeOrigin { PLAYER, CONSOLE, /** * Both the player and the console */ - BOTH + BOTH; + + /** + * Check if the origin is valid for a sender + * @param sender The sender to check + * @return True if valid for origin + */ + public boolean validFor(VolmitSender sender){ + if (sender.isPlayer()){ + return this.equals(PLAYER) || this.equals(BOTH); + } else { + return this.equals(CONSOLE) || this.equals(BOTH); + } + } } From 3d68caed6b578bca43848e2f95ce2102dacd25cc Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:35:11 +0200 Subject: [PATCH 11/17] Move decreeSystem into decreeCommand Why the extra class? --- .../iris/util/decree/DecreeCommand.java | 21 +++++++++ .../iris/util/decree/DecreeParameter.java | 2 +- .../volmit/iris/util/decree/DecreeSystem.java | 43 ------------------- 3 files changed, 22 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/com/volmit/iris/util/decree/DecreeSystem.java diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/DecreeCommand.java index 255190726..58486e367 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeCommand.java @@ -18,5 +18,26 @@ package com.volmit.iris.util.decree; +import com.volmit.iris.Iris; +import com.volmit.iris.util.collection.KList; + public class DecreeCommand { + private static final KList> handlers = Iris.initialize("com.volmit.iris.util.decree.handlers", null).convert((i) -> (DecreeParameterHandler) i); + + /** + * Get the handler for the specified type + * @param type The type to handle + * @return The corresponding {@link DecreeParameterHandler}, or null + */ + public static DecreeParameterHandler getHandler(Class type) + { + for(DecreeParameterHandler i : handlers) + { + if(i.supports(type)) + { + return i; + } + } + return null; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java index a124489e4..576ea8a30 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java @@ -39,7 +39,7 @@ public class DecreeParameter { } public DecreeParameterHandler getHandler() { - return DecreeSystem.getHandler(getType()); + return DecreeCommand.getHandler(getType()); } public Class getType() { diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java b/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java deleted file mode 100644 index 2eb987ab5..000000000 --- a/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2021 Arcane Arts (Volmit Software) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.volmit.iris.util.decree; - -import com.volmit.iris.Iris; -import com.volmit.iris.util.collection.KList; - -public class DecreeSystem { - private static final KList> handlers = Iris.initialize("com.volmit.iris.util.decree.handlers", null).convert((i) -> (DecreeParameterHandler) i); - - /** - * Get the handler for the specified type - * @param type The type to handle - * @return The corresponding {@link DecreeParameterHandler}, or null - */ - public static DecreeParameterHandler getHandler(Class type) - { - for(DecreeParameterHandler i : handlers) - { - if(i.supports(type)) - { - return i; - } - } - return null; - } -} From 636427ac6b5c34f45b96129a41a235f3bd6c1b24 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:37:17 +0200 Subject: [PATCH 12/17] Exception annotation --- .../iris/util/decree/exceptions/DecreeInstanceException.java | 3 +++ .../iris/util/decree/exceptions/DecreeParsingException.java | 3 +++ .../iris/util/decree/exceptions/DecreeWhichException.java | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeInstanceException.java b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeInstanceException.java index 11bf3f1e7..f15bd3720 100644 --- a/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeInstanceException.java +++ b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeInstanceException.java @@ -1,5 +1,8 @@ package com.volmit.iris.util.decree.exceptions; +/** + * Thrown when classes are instantiated that fail because of a missing or faulty decree component + */ public class DecreeInstanceException extends Exception { public DecreeInstanceException(String message){ super(message); diff --git a/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeParsingException.java b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeParsingException.java index 279f2cd77..42dcf7a67 100644 --- a/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeParsingException.java +++ b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeParsingException.java @@ -18,6 +18,9 @@ package com.volmit.iris.util.decree.exceptions; +/** + * Thrown when a decree parameter is parsed, but parsing fails + */ public class DecreeParsingException extends Exception{ public DecreeParsingException(String message) { super(message); diff --git a/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeWhichException.java b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeWhichException.java index d20f8d5e2..3401fdd9a 100644 --- a/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeWhichException.java +++ b/src/main/java/com/volmit/iris/util/decree/exceptions/DecreeWhichException.java @@ -18,6 +18,10 @@ package com.volmit.iris.util.decree.exceptions; +/** + * Thrown when more than one option is available for a singular mapping
+ * Like having a hashmap where one input maps to two outputs. + */ public class DecreeWhichException extends Exception{ public DecreeWhichException() { super("More than one option for the entered input"); From 864ca81d1dbb9be4a19eee4d3bae5916967a9464 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:38:27 +0200 Subject: [PATCH 13/17] VolmitSender no longer saved, class never instantiated (rem unsd impt) --- src/main/java/com/volmit/iris/util/decree/DecreeContext.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeContext.java b/src/main/java/com/volmit/iris/util/decree/DecreeContext.java index 16380897f..8f9a427e7 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeContext.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeContext.java @@ -18,11 +18,7 @@ package com.volmit.iris.util.decree; -import com.volmit.iris.core.project.loader.IrisData; -import com.volmit.iris.engine.IrisComplex; -import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.context.IrisContext; import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.ChronoLatch; import lombok.AllArgsConstructor; @@ -33,7 +29,6 @@ import lombok.Data; public class DecreeContext { private static ChronoLatch cl = new ChronoLatch(60000); private static final KMap context = new KMap<>(); - private final VolmitSender sender; public static VolmitSender get() { return context.get(Thread.currentThread()); From c8907232daee7063b2b128128f6f750f97e71c58 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:41:27 +0200 Subject: [PATCH 14/17] patch doc --- src/main/java/com/volmit/iris/util/decree/DecreeParameter.java | 1 - .../java/com/volmit/iris/util/decree/annotations/Decree.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java index 576ea8a30..7e2a6dfca 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.annotations.Param; import com.volmit.iris.util.decree.exceptions.DecreeInstanceException; -import com.volmit.iris.util.decree.exceptions.DecreeParsingException; import java.lang.reflect.Parameter; import java.util.Arrays; diff --git a/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java index 926b0fbc6..5a8156afa 100644 --- a/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java +++ b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java @@ -33,7 +33,7 @@ public @interface Decree { String NO_ALIASES = "No Aliases"; /** - * The name of this method, which is the actual Method's name by default + * The name of this command, which is the Method's name by default */ String name() default METHOD_NAME; From f476f1447c56940a49a6510b817f014f425a37c8 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 13 Aug 2021 10:13:59 +0200 Subject: [PATCH 15/17] Docs --- .../java/com/volmit/iris/util/decree/annotations/Param.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/annotations/Param.java b/src/main/java/com/volmit/iris/util/decree/annotations/Param.java index 54ca2d67f..79b682a7c 100644 --- a/src/main/java/com/volmit/iris/util/decree/annotations/Param.java +++ b/src/main/java/com/volmit/iris/util/decree/annotations/Param.java @@ -48,8 +48,8 @@ public @interface Param { /** * The default value for this argument.
* The entered string is parsed to the value similarly to how commandline-text would be.
- * Default is {@link #REQUIRED}, which indicates the variable MUST be defined. - * If you define this, the variable automatically becomes non-required. + * Default is {@link #REQUIRED}, which indicates the variable MUST be defined by the person running the command.
+ * If you define this, the variable automatically becomes non-required, but can still be set. */ String value() default REQUIRED; From b0677bb66d6fd942b195f3a0b43402f85aec0fff Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 12 Aug 2021 23:35:11 +0200 Subject: [PATCH 16/17] Revert "Move decreeSystem into decreeCommand" This reverts commit 3d68caed6b578bca43848e2f95ce2102dacd25cc. --- .../iris/util/decree/DecreeCommand.java | 21 --------- .../iris/util/decree/DecreeParameter.java | 2 +- .../volmit/iris/util/decree/DecreeSystem.java | 43 +++++++++++++++++++ 3 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/volmit/iris/util/decree/DecreeSystem.java diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/DecreeCommand.java index 58486e367..255190726 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeCommand.java @@ -18,26 +18,5 @@ package com.volmit.iris.util.decree; -import com.volmit.iris.Iris; -import com.volmit.iris.util.collection.KList; - public class DecreeCommand { - private static final KList> handlers = Iris.initialize("com.volmit.iris.util.decree.handlers", null).convert((i) -> (DecreeParameterHandler) i); - - /** - * Get the handler for the specified type - * @param type The type to handle - * @return The corresponding {@link DecreeParameterHandler}, or null - */ - public static DecreeParameterHandler getHandler(Class type) - { - for(DecreeParameterHandler i : handlers) - { - if(i.supports(type)) - { - return i; - } - } - return null; - } } diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java index 7e2a6dfca..de55ba881 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java @@ -38,7 +38,7 @@ public class DecreeParameter { } public DecreeParameterHandler getHandler() { - return DecreeCommand.getHandler(getType()); + return DecreeSystem.getHandler(getType()); } public Class getType() { diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java b/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java new file mode 100644 index 000000000..2eb987ab5 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/decree/DecreeSystem.java @@ -0,0 +1,43 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.decree; + +import com.volmit.iris.Iris; +import com.volmit.iris.util.collection.KList; + +public class DecreeSystem { + private static final KList> handlers = Iris.initialize("com.volmit.iris.util.decree.handlers", null).convert((i) -> (DecreeParameterHandler) i); + + /** + * Get the handler for the specified type + * @param type The type to handle + * @return The corresponding {@link DecreeParameterHandler}, or null + */ + public static DecreeParameterHandler getHandler(Class type) + { + for(DecreeParameterHandler i : handlers) + { + if(i.supports(type)) + { + return i; + } + } + return null; + } +} From 0befa2eb39b56a24f0cb88fdb21f522355f4374d Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 13 Aug 2021 11:06:44 +0200 Subject: [PATCH 17/17] target > elementtype --- src/main/java/com/volmit/iris/util/decree/EXAMPLE.java | 5 ++--- .../java/com/volmit/iris/util/decree/annotations/Decree.java | 3 +++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java b/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java index 8a155404c..13df0f1f1 100644 --- a/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java +++ b/src/main/java/com/volmit/iris/util/decree/EXAMPLE.java @@ -22,9 +22,8 @@ import com.volmit.iris.util.decree.annotations.Decree; import com.volmit.iris.util.decree.annotations.Param; import org.bukkit.entity.Player; -public class EXAMPLE extends DecreeCommand -{ - @Decree() +public class EXAMPLE extends DecreeCommand { + @Decree public void kick( @Param(name = "player", description = "The Player to kick from the server", aliases = "p") Player player, diff --git a/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java index 5a8156afa..8825e1f82 100644 --- a/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java +++ b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java @@ -20,10 +20,13 @@ package com.volmit.iris.util.decree.annotations; import com.volmit.iris.util.decree.DecreeOrigin; +import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.FIELD}) public @interface Decree { String METHOD_NAME = "Default Method Name";