From 23725a77d7f91e89dbc82edbd1595d13399aef2c Mon Sep 17 00:00:00 2001 From: Aurium Date: Fri, 12 Mar 2021 13:07:22 -0700 Subject: [PATCH 01/56] temp co mmit --- .idea/jarRepositories.xml | 5 ++ .idea/vcs.xml | 6 ++ core/pom.xml | 1 + .../me/aurium/beetle/branch/CommandBase.java | 5 +- .../me/aurium/beetle/branch/CommandNode.java | 5 ++ .../java/me/aurium/beetle/branch/Context.java | 13 ---- .../aurium/beetle/branch/ContextHandler.java | 8 --- .../aurium/beetle/branch/IndividualNode.java | 7 ++ .../beetle/branch/bases/CommandableBase.java | 47 +++++++------ .../beetle/branch/bases/SimpleBase.java | 10 +-- .../beetle/branch/builders/BaseBuilder.java | 42 ++++++++++++ .../branch/builders/CommandableBuilder.java | 7 ++ .../branch/builders/SplitBuilderFunction.java | 7 ++ .../branch/builders/SplittableBuilder.java | 49 ++++++++++++++ .../beetle/branch/impl/CommonContext.java | 31 --------- .../aurium/beetle/branch/nodes/BaseNode.java | 67 +++++++++++++++++++ .../branch/nodes/BranchingCommandNode.java | 4 +- .../branch/nodes/SingleCommandNode.java | 5 +- 18 files changed, 239 insertions(+), 80 deletions(-) create mode 100644 .idea/vcs.xml delete mode 100644 core/src/main/java/me/aurium/beetle/branch/Context.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/ContextHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/IndividualNode.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/builders/BaseBuilder.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/builders/CommandableBuilder.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/builders/SplitBuilderFunction.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/builders/SplittableBuilder.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/impl/CommonContext.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/BaseNode.java diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 5a6f4b1..348c245 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -21,6 +21,11 @@ diff --git a/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/BranchCommand.java b/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/BranchCommand.java index 678a1a4..177f1f8 100644 --- a/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/BranchCommand.java +++ b/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/BranchCommand.java @@ -2,7 +2,7 @@ import me.aurium.beetle.api.command.Command; import me.aurium.beetle.branch.context.Context; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; public interface BranchCommand extends Command { diff --git a/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBaseCommand.java b/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBaseCommand.java index 9867d17..acec904 100644 --- a/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBaseCommand.java +++ b/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBaseCommand.java @@ -1,7 +1,8 @@ package me.aurium.beetle.branch.converted.launchpoints; import me.aurium.beetle.branch.context.ContextProducer; -import me.aurium.beetle.branch.nodes.base.NodeBase; +import me.aurium.beetle.branch.launchpoints.base.NodeBase; +/* public abstract class AbstractBaseCommand extends AbstractBranchCommand { @@ -11,3 +12,4 @@ protected AbstractBaseCommand(ContextProducer factory) { public abstract NodeBase getBase(); } +*/ diff --git a/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBranchCommand.java b/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBranchCommand.java index ec5fa44..3bfb7fe 100644 --- a/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBranchCommand.java +++ b/beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBranchCommand.java @@ -2,12 +2,12 @@ import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.converted.BranchCommand; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; import me.aurium.beetle.branch.context.NodeContext; import me.aurium.beetle.branch.context.ContextProducer; import me.aurium.beetle.branch.block.CommonBlockPath; -import me.aurium.beetle.branch.nodes.result.GetNodeResult; +/* public abstract class AbstractBranchCommand implements BranchCommand { private final ContextProducer factory; @@ -38,3 +38,4 @@ public boolean execute(T t, String s, String[] strings) { return true; } } +*/ diff --git a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContext.java b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContext.java index a45607d..56c7810 100644 --- a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContext.java +++ b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContext.java @@ -2,20 +2,10 @@ import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.context.AbstractNodeContext; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestContext extends AbstractNodeContext { - private final Logger logger = LoggerFactory.getLogger(TestContext.class); - - protected TestContext(String s, String alias, String[] args, CommandNode executed, CommandNode base, BlockPath executedPath, BlockPath fullPath) { - super(s, alias, args, executed, base, executedPath, fullPath); - } - - @Override - public void messageSender(String string) { - logger.info(string); - } } diff --git a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContextProducer.java b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContextProducer.java index e5755dd..9cc574c 100644 --- a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContextProducer.java +++ b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContextProducer.java @@ -4,7 +4,7 @@ import me.aurium.beetle.branch.context.Context; import me.aurium.beetle.branch.context.ContextProducer; import me.aurium.beetle.branch.context.NodeContext; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; public class TestContextProducer implements ContextProducer { diff --git a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingCommand.java b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingCommand.java index 7748c88..9996e5f 100644 --- a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingCommand.java +++ b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingCommand.java @@ -1,10 +1,10 @@ package me.aurium.beetle.branch.tests.mockups; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; import me.aurium.beetle.branch.context.ContextProducer; import me.aurium.beetle.branch.builders.Base; -import me.aurium.beetle.branch.builders.BranchingBuilder; -import me.aurium.beetle.branch.builders.SingleBuilder; +import me.aurium.beetle.branch.nodes.builders.BranchingBuilder; +import me.aurium.beetle.branch.nodes.builders.SingleBuilder; import me.aurium.beetle.branch.converted.launchpoints.AbstractBranchCommand; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingImproperAnnotatedCommand.java b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingImproperAnnotatedCommand.java index 04b4faf..6f55af5 100644 --- a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingImproperAnnotatedCommand.java +++ b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingImproperAnnotatedCommand.java @@ -1,7 +1,7 @@ package me.aurium.beetle.branch.tests.mockups; import me.aurium.beetle.branch.context.NodeContext; -import me.aurium.beetle.branch.annotate.BranchCommand; +import me.aurium.beetle.branch.annotate.marker.BranchCommand; import me.aurium.beetle.branch.annotate.marker.BranchingNode; import me.aurium.beetle.branch.annotate.marker.SingleNode; diff --git a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/ImproperAnnotatedCommand.java b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/ImproperAnnotatedCommand.java index 7446aac..2a39332 100644 --- a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/ImproperAnnotatedCommand.java +++ b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/ImproperAnnotatedCommand.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.tests.mockups; -import me.aurium.beetle.branch.annotate.BranchCommand; +import me.aurium.beetle.branch.annotate.marker.BranchCommand; import me.aurium.beetle.branch.annotate.marker.SingleNode; @BranchCommand diff --git a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/SingleCommand.java b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/SingleCommand.java index 58b2aaf..0db4b0f 100644 --- a/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/SingleCommand.java +++ b/beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/SingleCommand.java @@ -1,9 +1,9 @@ package me.aurium.beetle.branch.tests.mockups; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; import me.aurium.beetle.branch.context.ContextProducer; import me.aurium.beetle.branch.builders.Base; -import me.aurium.beetle.branch.builders.SingleBuilder; +import me.aurium.beetle.branch.nodes.builders.SingleBuilder; import me.aurium.beetle.branch.converted.launchpoints.AbstractBranchCommand; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java index c39f358..74696db 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.annotate; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; public interface AnnotatedParser { diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/ParsingException.java b/core/src/main/java/me/aurium/beetle/branch/annotate/ParsingException.java new file mode 100644 index 0000000..7ce0cab --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/ParsingException.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.annotate; + +public class ParsingException { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/TypeToken.java b/core/src/main/java/me/aurium/beetle/branch/annotate/TypeToken.java new file mode 100644 index 0000000..3fdb7b3 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/TypeToken.java @@ -0,0 +1,15 @@ +package me.aurium.beetle.branch.annotate; + +public class TypeToken { + + private final Class type; + + public TypeToken(Class type) { + this.type = type; + } + public Class getType() { + return type; + } + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/UncheckedInvocationException.java b/core/src/main/java/me/aurium/beetle/branch/annotate/UncheckedInvocationException.java new file mode 100644 index 0000000..98831f4 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/UncheckedInvocationException.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.annotate; + +public class UncheckedInvocationException extends RuntimeException{ + + public UncheckedInvocationException(Throwable throwable) { + super(throwable); + } + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/BranchCommand.java b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/BranchCommand.java similarity index 84% rename from core/src/main/java/me/aurium/beetle/branch/annotate/BranchCommand.java rename to core/src/main/java/me/aurium/beetle/branch/annotate/marker/BranchCommand.java index c5b1a3d..e9e539b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/BranchCommand.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/BranchCommand.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.annotate; +package me.aurium.beetle.branch.annotate.marker; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/Permission.java b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/Permission.java new file mode 100644 index 0000000..f5a9542 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/Permission.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.annotate.marker.permission; + +public @interface Permission { + + Class getRelativeChecker(); + + String permission(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java new file mode 100644 index 0000000..5f1a22f --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.annotate.marker.permission; + +import me.aurium.beetle.branch.permission.strategies.StringPermission; + +public interface StringPermChecker { + + StringPermission get(String identifierToMakeWith); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/BranchingAnnotatedParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/BranchingAnnotatedParser.java new file mode 100644 index 0000000..d0e7051 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/BranchingAnnotatedParser.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.annotate.parsers; + +public class BranchingAnnotatedParser { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java new file mode 100644 index 0000000..3fe48a9 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java @@ -0,0 +1,34 @@ +package me.aurium.beetle.branch.annotate.parsers; + +import me.aurium.beetle.branch.annotate.marker.permission.Permission; +import me.aurium.beetle.branch.permission.strategies.StringPermission; + +import java.lang.annotation.Annotation; + +//TODO fix all of this bullshit - we need checks - this class only exists to tell me what i need to do in the future. +public class PermissionAnnotationParser { + + + me.aurium.beetle.branch.permission.Permission parse(Annotation annotate) throws IllegalAccessException, InstantiationException { + + if (!annotate.annotationType().equals(Permission.class)) throw new PermissionParsingException("Annotation must be of type Permission"); + + Permission permission = (Permission) annotate; + + //TODO checks + + //TODO fix this shit + StringPermission perm = permission.getRelativeChecker().newInstance().get(permission.permission()); + + + return (me.aurium.beetle.branch.permission.Permission) perm; + } + + public static class PermissionParsingException extends RuntimeException { + public PermissionParsingException(String lol ) { + super(lol); + } + } + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java new file mode 100644 index 0000000..0d4edde --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java @@ -0,0 +1,72 @@ +package me.aurium.beetle.branch.annotate.parsers; + +import me.aurium.beetle.branch.annotate.AnnotatedCommand; +import me.aurium.beetle.branch.annotate.UncheckedInvocationException; +import me.aurium.beetle.branch.annotate.marker.SingleNode; +import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.api.ExecutionHandler; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.lang.reflect.ParameterizedType; +import java.util.ArrayList; +import java.util.List; + +//TODO one of these days refactor, but right now i really don't care. +public class SingleAnnotatedParser { + + private final Class senderClass; + + public SingleAnnotatedParser(Class senderClass) { + this.senderClass = senderClass; + } + + public List> parse(Class command) { + + List> nodes = new ArrayList<>(); + + for (Method method : command.getMethods()) { + if (method.isAnnotationPresent(SingleNode.class)) { + //This method is a SingleNode, verify the argument signature of the command + SingleNode annotate = method.getAnnotation(SingleNode.class); + Parameter[] parameters = method.getParameters(); + + if (!method.getReturnType().equals(Void.TYPE)) throw new SingleNodeParsingException("Annotation return must be void"); + if (parameters.length != 1 || !parameters[0].getType().isAssignableFrom(NodeContext.class)) throw new SingleNodeParsingException("Method signature length must be one argument!"); + + if (parameters[0].getParameterizedType() instanceof ParameterizedType) { + + } + + + if (parameters[0].getType().isAssignableFrom(NodeContext.class)) { + + + ExecutionHandler handler = (context) -> { + try { + method.invoke(command,context); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new UncheckedInvocationException(e); + } + + }; + + } else { + throw new SingleNodeParsingException("The method signature of a single-node must only contain a single NodeContext!"); + } + } + } + + return null; + } + + public static class SingleNodeParsingException extends RuntimeException { + + SingleNodeParsingException(String error) { + super(error); + } + } + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java b/core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java index 97cc5e2..ec38484 100644 --- a/core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java @@ -2,7 +2,8 @@ import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.context.NodeContext; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.nodes.CommandNode; public class DelegatingArgumentContext implements ArgumentContext{ @@ -49,6 +50,16 @@ public BlockPath executedPath() { return delegate.executedPath(); } + @Override + public BlockPath fullPath() { + return delegate.fullPath(); + } + + @Override + public FallbackHandler getFallbackAction() { + return delegate.getFallbackAction(); + } + @Override public Arguments getArgumentContainer() { return arguments; diff --git a/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java b/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java index 0533915..9f297be 100644 --- a/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java +++ b/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java @@ -95,11 +95,11 @@ public BlockPath withoutBase() { return fromIndex(0); } - @Override + @Override //TODO need a logic check here public BlockPath withoutTop() { BlockList clone = new DelegatingBlockList(new ArrayList<>( blocks.getBackingList() - ));; + )); clone.removeLast(); diff --git a/core/src/main/java/me/aurium/beetle/branch/builders/Base.java b/core/src/main/java/me/aurium/beetle/branch/builders/Base.java index 4060ed3..268899c 100644 --- a/core/src/main/java/me/aurium/beetle/branch/builders/Base.java +++ b/core/src/main/java/me/aurium/beetle/branch/builders/Base.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.builders; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; import java.util.function.Consumer; diff --git a/core/src/main/java/me/aurium/beetle/branch/builders/Builder.java b/core/src/main/java/me/aurium/beetle/branch/builders/Builder.java index 73db179..bd87513 100644 --- a/core/src/main/java/me/aurium/beetle/branch/builders/Builder.java +++ b/core/src/main/java/me/aurium/beetle/branch/builders/Builder.java @@ -1,7 +1,7 @@ package me.aurium.beetle.branch.builders; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.nodes.api.IdentifiableNode; +import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.IdentifiableNode; public interface Builder{ diff --git a/core/src/main/java/me/aurium/beetle/branch/context/AbstractNodeContext.java b/core/src/main/java/me/aurium/beetle/branch/context/AbstractNodeContext.java index 6813f62..43c8d15 100644 --- a/core/src/main/java/me/aurium/beetle/branch/context/AbstractNodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/context/AbstractNodeContext.java @@ -1,7 +1,7 @@ package me.aurium.beetle.branch.context; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; public abstract class AbstractNodeContext extends AbstractContext implements NodeContext { diff --git a/core/src/main/java/me/aurium/beetle/branch/context/ContextProducer.java b/core/src/main/java/me/aurium/beetle/branch/context/ContextProducer.java index a130575..eda8bf6 100644 --- a/core/src/main/java/me/aurium/beetle/branch/context/ContextProducer.java +++ b/core/src/main/java/me/aurium/beetle/branch/context/ContextProducer.java @@ -1,7 +1,7 @@ package me.aurium.beetle.branch.context; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; /** * Produces context adapters, like the stock ContextSource for contexts. diff --git a/core/src/main/java/me/aurium/beetle/branch/context/NodeContext.java b/core/src/main/java/me/aurium/beetle/branch/context/NodeContext.java index fe22c0d..0004d07 100644 --- a/core/src/main/java/me/aurium/beetle/branch/context/NodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/context/NodeContext.java @@ -1,7 +1,8 @@ package me.aurium.beetle.branch.context; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.nodes.CommandNode; public interface NodeContext extends Context { @@ -14,6 +15,8 @@ public interface NodeContext extends Context { boolean equals(Object comparison); + FallbackHandler getFallbackAction(); + //TODO add more cool features like the debug message sender, // because NodeContext should be a collection of both context and context-specific actions? /review a248 diff --git a/core/src/main/java/me/aurium/beetle/branch/context/StagedContext.java b/core/src/main/java/me/aurium/beetle/branch/context/StagedContext.java deleted file mode 100644 index 6928fc3..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/context/StagedContext.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.aurium.beetle.branch.context; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; - -/** - * Something like a nodecontext that hasn't been activated yet - */ -public interface StagedContext { - - T getSender(); - String getAlias(); - String[] getArgs(); - - CommandNode getExecutedNode(); - CommandNode getBaseExecutedNode(); - - BlockPath executedPath(); - BlockPath fullPath(); - - boolean equals(Object comparison); - - NodeContext stage(ContextProducer producer); - - FallbackHandler getFallbackAction(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/context/StagedContextImpl.java b/core/src/main/java/me/aurium/beetle/branch/context/StagedContextImpl.java deleted file mode 100644 index 6fa3e71..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/context/StagedContextImpl.java +++ /dev/null @@ -1,73 +0,0 @@ -package me.aurium.beetle.branch.context; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; - -public class StagedContextImpl implements StagedContext { - - private final T sender; - private final String alias; - private final String[] args; - private final CommandNode executedNode; - private final CommandNode baseNode; - private final BlockPath executedPath; - private final BlockPath basePath; - private final FallbackHandler fallbackHandler; - - public StagedContextImpl(T sender, String alias, String[] args, CommandNode executedNode, CommandNode baseNode, BlockPath executedPath, BlockPath basePath, FallbackHandler fallbackHandler) { - this.sender = sender; - this.alias = alias; - this.args = args; - this.executedNode = executedNode; - this.baseNode = baseNode; - this.executedPath = executedPath; - this.basePath = basePath; - this.fallbackHandler = fallbackHandler; - } - - @Override - public T getSender() { - return sender; - } - - @Override - public String getAlias() { - return alias; - } - - @Override - public String[] getArgs() { - return args; - } - - @Override - public CommandNode getExecutedNode() { - return executedNode; - } - - @Override - public CommandNode getBaseExecutedNode() { - return baseNode; - } - - @Override - public BlockPath executedPath() { - return executedPath; - } - - @Override - public BlockPath fullPath() { - return basePath; - } - - @Override - public NodeContext stage(ContextProducer producer) { - return producer.produce(sender,alias,args,executedNode,baseNode,executedPath,basePath); - } - - @Override - public FallbackHandler getFallbackAction() { - return fallbackHandler; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/context/staging/InitialLocatorContext.java b/core/src/main/java/me/aurium/beetle/branch/context/staging/InitialLocatorContext.java new file mode 100644 index 0000000..f129061 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/context/staging/InitialLocatorContext.java @@ -0,0 +1,16 @@ +package me.aurium.beetle.branch.context.staging; + +import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.nodes.CommandNode; + +public class InitialLocatorContext { + + private final CommandNode baseNode; + private final BlockPath basePath; + + + public InitialLocatorContext(CommandNode baseNode, BlockPath basePath) { + this.baseNode = baseNode; + this.basePath = basePath; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/context/staging/MutableLocatorContext.java b/core/src/main/java/me/aurium/beetle/branch/context/staging/MutableLocatorContext.java new file mode 100644 index 0000000..5355b13 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/context/staging/MutableLocatorContext.java @@ -0,0 +1,46 @@ +package me.aurium.beetle.branch.context.staging; + +import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.nodes.CommandNode; + +public class MutableLocatorContext { + + private final CommandNode baseNode; //can't be changed + private final BlockPath basePath; + + //these can be adjusted in staging + private CommandNode mutableTargetNode; + private BlockPath mutableTargetPath; + + public MutableLocatorContext(CommandNode baseNode, BlockPath basePath, CommandNode mutableTargetNode, BlockPath mutableTargetPath) { + this.baseNode = baseNode; + this.basePath = basePath; + this.mutableTargetNode = mutableTargetNode; + this.mutableTargetPath = mutableTargetPath; + } + public CommandNode getBaseNode() { + return baseNode; + } + + public BlockPath getBasePath() { + return basePath; + } + + public CommandNode getMutableTargetNode() { + return mutableTargetNode; + } + + public BlockPath getMutableTargetPath() { + return mutableTargetPath; + } + + //TODO limit access (permissions should not be able to touch these) + public void setMutableTargetNode(CommandNode node) { + this.mutableTargetNode = node; + } + + public void setMutableTargetPath(BlockPath path) { + this.mutableTargetPath = path; + } + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java index 3445b1e..048442e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java @@ -4,6 +4,6 @@ public interface ExecutionHandler { - void handle(NodeContext adapter); + void handle(NodeContext context); } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java index 7db22b2..6bde3cc 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java @@ -1,11 +1,14 @@ package me.aurium.beetle.branch.handlers.api; import me.aurium.beetle.branch.context.Context; +import me.aurium.beetle.branch.context.NodeContext; /** * Represents the fallback handler of a base that manages what happens when everything goes wrong + * + * EDIT THIS IS NO LONGER A FALLBACK HANDLER THIS IS ONLY FOR IF SOMETHIGN GOES HELL WRONG */ -public interface FallbackHandler { +public interface FallbackHandler { void handle(Context context); diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java index 9c26790..ab55126 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java @@ -6,6 +6,6 @@ public interface SuggestionHandler { - List handle(NodeContext adapter); + List handle(NodeContext context); } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java new file mode 100644 index 0000000..54602bc --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java @@ -0,0 +1,14 @@ +package me.aurium.beetle.branch.launchpoints; + +import me.aurium.beetle.branch.launchpoints.base.NodeBase; + +/** + * Represents the utmost base part of a command + * @param the input type, does not need to be of same type as the node bases it utilizes + */ +public interface CentralizedManager { + + CentralizedManagerBinder getBinder(); + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManagerBinder.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManagerBinder.java new file mode 100644 index 0000000..096d7a7 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManagerBinder.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.launchpoints; + +public interface CentralizedManagerBinder { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/base/NodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java similarity index 77% rename from core/src/main/java/me/aurium/beetle/branch/nodes/base/NodeBase.java rename to core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java index 0478c18..3af9eb2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/base/NodeBase.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.nodes.base; +package me.aurium.beetle.branch.launchpoints.base; import java.util.List; diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java new file mode 100644 index 0000000..2d81e69 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java @@ -0,0 +1,7 @@ +package me.aurium.beetle.branch.launchpoints.base; + +public class NodeBaseBuilder { + + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java new file mode 100644 index 0000000..a2273a7 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java @@ -0,0 +1,35 @@ +package me.aurium.beetle.branch.launchpoints.base; + +import me.aurium.beetle.branch.context.ContextProducer; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.permission.strategies.ExecutionFallbackStrategy; + +import java.util.List; + +public class SimpleNodeBase implements NodeBase { + + private final CommandNode baseNode; + private final ContextProducer factory; + + private final FallbackHandler fallbackHandler; + private final ExecutionFallbackStrategy strategy; + + public SimpleNodeBase(CommandNode baseNode, ContextProducer factory, FallbackHandler fallbackHandler, ExecutionFallbackStrategy strategy) { + + this.baseNode = baseNode; + this.factory = factory; + this.fallbackHandler = fallbackHandler; + this.strategy = strategy; + } + + @Override + public void execute(C executor, String alias, String[] args) { + strategy.executeStrategy(executor,alias,args,baseNode, fallbackHandler,factory); + } + + @Override + public List suggest(C c, String alias, String[] args) { + return null; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java index 54e06ec..a3b9d68 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java @@ -2,17 +2,17 @@ import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.nodes.api.IdentifiableNode; import me.aurium.beetle.branch.argument.Argument; -import me.aurium.beetle.branch.nodes.result.GetNodeResult; -import me.aurium.beetle.branch.nodes.result.NullableNodeResult; +import me.aurium.beetle.branch.nodes.result.ExecutionResult; +import me.aurium.beetle.branch.nodes.result.NodeResult; import me.aurium.beetle.branch.permission.Permission; import java.util.List; //kinda like a branching node except it throws forward and not to the sides + +//one of these days ill actually finish this class LMFAO public class ArgumentNode implements IdentifiableNode { private final Block identifier; @@ -36,8 +36,8 @@ public ArgumentNode(Block identifier, List> sequentialValueNodes, Si @Override - public GetNodeResult getSpecificNode(BlockPath path) { - return new NullableNodeResult<>(this,path); + public NodeResult getSpecificNode(BlockPath path) { + return new NodeResult<>(this,path); } /*if (path.isEmpty()) return Optional.of(noArgs); @@ -59,12 +59,10 @@ public GetNodeResult getSpecificNode(BlockPath path) { */ @Override - public ExecutionHandler getExecutionHandler() { - return (context) -> { - BlockPath path = context.executedPath(); - - //sort - }; + public ExecutionResult getExecutionHandler() { + return new ExecutionResult<>((context) -> { + BlockPath executed = context.executedPath(); + }); } @Override diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java index 79fcbf9..999cbdb 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java @@ -2,11 +2,8 @@ import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.nodes.api.IdentifiableNode; -import me.aurium.beetle.branch.nodes.result.GetNodeResult; -import me.aurium.beetle.branch.nodes.result.NullableNodeResult; +import me.aurium.beetle.branch.nodes.result.*; import me.aurium.beetle.branch.permission.Permission; import me.aurium.beetle.branch.util.PreStoredHashSet; @@ -33,24 +30,30 @@ public Block getIdentifier() { } @Override - public GetNodeResult getSpecificNode(BlockPath blockPath) { + public NodeResult getSpecificNode(BlockPath blockPath) { - if (blockPath.isEmpty()) return new NullableNodeResult<>(nodes.getAlreadyStored(),blockPath); + if (blockPath.isEmpty()) return new NodeResult<>(this,blockPath); for (IdentifiableNode node : nodes.getContents()) { BlockPath subPath = blockPath.withoutBase(); //get everything after the index if (blockPath.startsWith(node.getIdentifier())) { - return node.getSpecificNode(blockPath.withoutBase()); + return node.getSpecificNode(subPath); } } - return new NullableNodeResult<>(nodes.getAlreadyStored(), blockPath); + return new NodeResult<>(this, blockPath); } @Override - public ExecutionHandler getExecutionHandler() { - return nodes.getAlreadyStored().getExecutionHandler(); + public ExecutionResult getExecutionHandler() { + + if (nodes.getAlreadyStored().isPresent()) { + return nodes.getAlreadyStored().get().getExecutionHandler(); + } else { + return ExecutionResult.empty(); //FALL BACK SOLDIER + } + } @Override diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/CommandNode.java similarity index 65% rename from core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/CommandNode.java index 1e9a563..b207f40 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/CommandNode.java @@ -1,22 +1,20 @@ -package me.aurium.beetle.branch.nodes.api; +package me.aurium.beetle.branch.nodes; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.nodes.result.GetNodeResult; +import me.aurium.beetle.branch.nodes.result.ExecutionResult; +import me.aurium.beetle.branch.nodes.result.NodeResult; import me.aurium.beetle.branch.permission.Permission; -import java.util.Optional; - /** * Base object * @param fuck */ public interface CommandNode { - GetNodeResult getSpecificNode(BlockPath path); + NodeResult getSpecificNode(BlockPath path); - ExecutionHandler getExecutionHandler(); + ExecutionResult getExecutionHandler(); SuggestionHandler getSuggestionHandler(); /** diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/EndpointNode.java similarity index 84% rename from core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/EndpointNode.java index c15cf37..8df5b5b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/EndpointNode.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.nodes.api; +package me.aurium.beetle.branch.nodes; /** * Marker interface for a node that is alone (so not branching, but not merging either) diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/IdentifiableNode.java similarity index 76% rename from core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/IdentifiableNode.java index ce79bb6..a12b1bd 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/IdentifiableNode.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.nodes.api; +package me.aurium.beetle.branch.nodes; import me.aurium.beetle.branch.block.Block; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java index ea5127a..4616b6b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java @@ -5,9 +5,8 @@ import me.aurium.beetle.branch.handlers.EmptySuggestionHandler; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.nodes.api.EndpointNode; -import me.aurium.beetle.branch.nodes.result.GetNodeResult; -import me.aurium.beetle.branch.nodes.result.NullableNodeResult; +import me.aurium.beetle.branch.nodes.result.ExecutionResult; +import me.aurium.beetle.branch.nodes.result.NodeResult; import me.aurium.beetle.branch.permission.Permission; public class SingleNode implements EndpointNode { @@ -34,13 +33,13 @@ public Block getIdentifier() { } @Override - public GetNodeResult getSpecificNode(BlockPath blockPath) { - return new NullableNodeResult<>(this,blockPath); + public NodeResult getSpecificNode(BlockPath blockPath) { + return new NodeResult<>(this,blockPath); } @Override - public ExecutionHandler getExecutionHandler() { - return executionHandler; + public ExecutionResult getExecutionHandler() { + return new ExecutionResult<>(executionHandler); } @Override diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/base/NodeBaseBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/base/NodeBaseBuilder.java deleted file mode 100644 index 44a804e..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/base/NodeBaseBuilder.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.aurium.beetle.branch.nodes.base; - -public class NodeBaseBuilder { - - - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/base/SimpleNodeBase.java b/core/src/main/java/me/aurium/beetle/branch/nodes/base/SimpleNodeBase.java deleted file mode 100644 index ebcd173..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/base/SimpleNodeBase.java +++ /dev/null @@ -1,49 +0,0 @@ -package me.aurium.beetle.branch.nodes.base; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.block.CommonBlockPath; -import me.aurium.beetle.branch.context.ContextProducer; -import me.aurium.beetle.branch.context.StagedContext; -import me.aurium.beetle.branch.context.StagedContextImpl; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.nodes.result.GetNodeResult; -import me.aurium.beetle.branch.permission.FallbackStrategy; - -import java.util.List; - -public class SimpleNodeBase implements NodeBase { - - private final CommandNode baseNode; - private final ContextProducer factory; - - private final FallbackStrategy strategy; - private final FallbackHandler fallbackHandler; - - public SimpleNodeBase(CommandNode baseNode, ContextProducer factory, FallbackStrategy strategy, FallbackHandler fallbackHandler) { - this.baseNode = baseNode; - this.factory = factory; - this.strategy = strategy; - this.fallbackHandler = fallbackHandler; - } - - @Override - public void execute(T t, String alias, String[] args) { - BlockPath path = CommonBlockPath.of(args); - - GetNodeResult result = baseNode.getSpecificNode(path); - - result.resultingNode().ifPresentOrElse(node -> { //this should always be present, if it isn't that means something went wrong, so fallback! - - StagedContext context = new StagedContextImpl<>(t,alias,args,node,baseNode,path,result.resultingPath(), fallbackHandler); - - strategy.strategy(context).handle(context.stage(factory)); - - }, () -> fallbackHandler.handle(factory.produce(t, alias, args))); - } - - @Override - public List suggest(T t, String alias, String[] args) { - return null; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/builders/BranchingBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java similarity index 92% rename from core/src/main/java/me/aurium/beetle/branch/builders/BranchingBuilder.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java index 8ff48b6..78a524e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/builders/BranchingBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java @@ -1,11 +1,12 @@ -package me.aurium.beetle.branch.builders; +package me.aurium.beetle.branch.nodes.builders; import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.block.EmptyBlock; import me.aurium.beetle.branch.block.StringBlock; +import me.aurium.beetle.branch.builders.Builder; import me.aurium.beetle.branch.nodes.BranchingNode; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.nodes.api.IdentifiableNode; +import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.IdentifiableNode; import me.aurium.beetle.branch.permission.Permission; import me.aurium.beetle.branch.permission.permissions.EmptyPermission; import me.aurium.beetle.branch.util.PreStoredHashSet; diff --git a/core/src/main/java/me/aurium/beetle/branch/builders/SingleBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java similarity index 87% rename from core/src/main/java/me/aurium/beetle/branch/builders/SingleBuilder.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java index 6c2ad5c..799819a 100644 --- a/core/src/main/java/me/aurium/beetle/branch/builders/SingleBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java @@ -1,11 +1,11 @@ -package me.aurium.beetle.branch.builders; +package me.aurium.beetle.branch.nodes.builders; import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.block.EmptyBlock; import me.aurium.beetle.branch.block.StringBlock; +import me.aurium.beetle.branch.builders.AloneBuilder; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.nodes.SingleNode; -import me.aurium.beetle.branch.nodes.api.CommandNode; import me.aurium.beetle.branch.permission.Permission; import me.aurium.beetle.branch.permission.permissions.EmptyPermission; @@ -41,7 +41,7 @@ public SingleNode build() { } @Override - public CommandNode buildWithoutIdentifier() { + public me.aurium.beetle.branch.nodes.CommandNode buildWithoutIdentifier() { Objects.requireNonNull(contextHandler); return new SingleNode<>(EmptyBlock.of(),contextHandler, permission); diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/result/EmptyNodeResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/result/EmptyNodeResult.java deleted file mode 100644 index 775491f..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/result/EmptyNodeResult.java +++ /dev/null @@ -1,25 +0,0 @@ -package me.aurium.beetle.branch.nodes.result; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.api.CommandNode; - -import java.util.Optional; - -public class EmptyNodeResult implements GetNodeResult { - - private final BlockPath path; - - public EmptyNodeResult(BlockPath path) { - this.path = path; - } - - @Override - public Optional> resultingNode() { - return Optional.empty(); - } - - @Override - public BlockPath resultingPath() { - return path; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/result/ExecutionResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/result/ExecutionResult.java new file mode 100644 index 0000000..2e77d8f --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/result/ExecutionResult.java @@ -0,0 +1,22 @@ +package me.aurium.beetle.branch.nodes.result; + +import me.aurium.beetle.branch.handlers.api.ExecutionHandler; + +import java.util.Optional; + +public class ExecutionResult{ + + private final ExecutionHandler executionHandler; + + public ExecutionResult(ExecutionHandler executionHandler) { + this.executionHandler = executionHandler; + } + + public Optional> getExecution() { + return Optional.ofNullable(executionHandler); + } + + public static ExecutionResult empty() { + return new ExecutionResult<>(null); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/result/GetNodeResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/result/GetNodeResult.java deleted file mode 100644 index f78b878..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/result/GetNodeResult.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.aurium.beetle.branch.nodes.result; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.api.CommandNode; - -import java.util.Optional; - -public interface GetNodeResult { - - Optional> resultingNode(); - BlockPath resultingPath(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/result/NullableNodeResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java similarity index 54% rename from core/src/main/java/me/aurium/beetle/branch/nodes/result/NullableNodeResult.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java index 6ae80bd..93b895f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/result/NullableNodeResult.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java @@ -1,26 +1,24 @@ package me.aurium.beetle.branch.nodes.result; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.CommandNode; import java.util.Optional; -public class NullableNodeResult implements GetNodeResult { +public class NodeResult { private final CommandNode calculatedNode; private final BlockPath calculatedPath; - public NullableNodeResult(CommandNode calculatedNode, BlockPath calculatedPath) { + public NodeResult(CommandNode calculatedNode, BlockPath calculatedPath) { this.calculatedNode = calculatedNode; this.calculatedPath = calculatedPath; } - @Override - public Optional> resultingNode() { - return Optional.ofNullable(calculatedNode); + public CommandNode resultingNode() { + return calculatedNode; } - @Override public BlockPath resultingPath() { return calculatedPath; } diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/FallbackStrategy.java b/core/src/main/java/me/aurium/beetle/branch/permission/FallbackStrategy.java deleted file mode 100644 index 03e8546..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/permission/FallbackStrategy.java +++ /dev/null @@ -1,12 +0,0 @@ -package me.aurium.beetle.branch.permission; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.context.StagedContext; -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; - -public interface FallbackStrategy { - - ExecutionHandler strategy(StagedContext stagedContext); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/Permission.java b/core/src/main/java/me/aurium/beetle/branch/permission/Permission.java index e586055..d724110 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/Permission.java +++ b/core/src/main/java/me/aurium/beetle/branch/permission/Permission.java @@ -1,12 +1,10 @@ package me.aurium.beetle.branch.permission; -import me.aurium.beetle.branch.context.StagedContext; - /** * */ public interface Permission { - boolean attempt(StagedContext context); + boolean attempt(T sender, String alias, String[] args); //because fuck you } diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/PredicatePermission.java b/core/src/main/java/me/aurium/beetle/branch/permission/PredicatePermission.java new file mode 100644 index 0000000..1efca9a --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/permission/PredicatePermission.java @@ -0,0 +1,17 @@ +package me.aurium.beetle.branch.permission; + +import java.util.function.Predicate; + +public class PredicatePermission implements Permission { + + private final Predicate predicate; + + public PredicatePermission(Predicate predicate) { + this.predicate = predicate; + } + + @Override + public boolean attempt(T sender, String alias, String[] args) { + return predicate.test(sender); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/permissions/EmptyPermission.java b/core/src/main/java/me/aurium/beetle/branch/permission/permissions/EmptyPermission.java index fc83922..f286bef 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/permissions/EmptyPermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/permission/permissions/EmptyPermission.java @@ -1,11 +1,11 @@ package me.aurium.beetle.branch.permission.permissions; -import me.aurium.beetle.branch.context.StagedContext; import me.aurium.beetle.branch.permission.Permission; public class EmptyPermission implements Permission { + @Override - public boolean attempt(StagedContext context) { + public boolean attempt(T sender, String alias, String[] args) { return true; } } diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/permissions/StringPermission.java b/core/src/main/java/me/aurium/beetle/branch/permission/permissions/StringPermission.java deleted file mode 100644 index 8a7539d..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/permission/permissions/StringPermission.java +++ /dev/null @@ -1,21 +0,0 @@ -package me.aurium.beetle.branch.permission.permissions; - -import me.aurium.beetle.branch.context.StagedContext; -import me.aurium.beetle.branch.permission.Permission; - -/** - * example permission i'm using for testing because i'm so godfucking bored - */ -public class StringPermission implements Permission { - - private final String string; - - public StringPermission(String string) { - this.string = string; - } - - @Override - public boolean attempt(StagedContext context) { - return context.getSender().equals(string); - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/AngryMessageStrategy.java b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/AngryMessageStrategy.java deleted file mode 100644 index aaf0a00..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/AngryMessageStrategy.java +++ /dev/null @@ -1,32 +0,0 @@ -package me.aurium.beetle.branch.permission.strategies; - -import me.aurium.beetle.branch.context.StagedContext; -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.permission.FallbackStrategy; - -/** - * does what it says on the tin (really just an example) - */ -public class AngryMessageStrategy implements FallbackStrategy { - - private final String antiPermissionMessage; //something like "You cannot run that!" or "Unknown command. Type /help for help!" - - public AngryMessageStrategy(String antiPermissionMessage) { - this.antiPermissionMessage = antiPermissionMessage; - } - - @Override - public ExecutionHandler strategy(StagedContext stagedContext) { - CommandNode executedNode = stagedContext.getExecutedNode(); - - if (!executedNode.getPermission().attempt(stagedContext)) { - return (contex) -> { - contex.messageSender(antiPermissionMessage); - }; - } else { - return executedNode.getExecutionHandler(); - } - - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/ExecutionFallbackStrategy.java b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/ExecutionFallbackStrategy.java new file mode 100644 index 0000000..1f083db --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/ExecutionFallbackStrategy.java @@ -0,0 +1,14 @@ +package me.aurium.beetle.branch.permission.strategies; + +import me.aurium.beetle.branch.context.ContextProducer; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.nodes.CommandNode; + +public interface ExecutionFallbackStrategy { + + + void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer); + + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackBaseStrategy.java b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackBaseStrategy.java deleted file mode 100644 index ee9c9aa..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackBaseStrategy.java +++ /dev/null @@ -1,26 +0,0 @@ -package me.aurium.beetle.branch.permission.strategies; - -import me.aurium.beetle.branch.context.StagedContext; -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.permission.FallbackStrategy; - -public class FallbackBaseStrategy implements FallbackStrategy { - - @Override - public ExecutionHandler strategy(StagedContext stagedContext) { - //this strategy should: if base node, fall back to fallback-strategy. If not, fall back to base node's executor. - - CommandNode executed = stagedContext.getExecutedNode(); - CommandNode baseNode = stagedContext.getBaseExecutedNode(); - - if (executed.equals(baseNode)) { - //todo remove this - return (s) -> { - stagedContext.getFallbackAction().handle(s); - }; - } - - return null; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackOneStrategy.java b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackOneStrategy.java deleted file mode 100644 index 0d6c642..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackOneStrategy.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.aurium.beetle.branch.permission.strategies; - -import me.aurium.beetle.branch.context.StagedContext; -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.permission.FallbackStrategy; - -/** - * Falls back to the at-execution-time parent node - */ -public class FallbackOneStrategy implements FallbackStrategy { - - @Override - public ExecutionHandler strategy(StagedContext stagedContext) { - - CommandNode toBeExecuted = stagedContext.getExecutedNode(); - - if (!toBeExecuted.getPermission().attempt(stagedContext)) { - - //NO PERMISSIONS! fall back to the node above it. However, if toBeExecuted is the base node, fall back to the fallbackhandler - - return null; - } else { - //the user is authorized - return toBeExecuted.getExecutionHandler(); - } - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackPermStrategy.java b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackPermStrategy.java new file mode 100644 index 0000000..627867d --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackPermStrategy.java @@ -0,0 +1,69 @@ +package me.aurium.beetle.branch.permission.strategies; + +import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.block.CommonBlockPath; +import me.aurium.beetle.branch.context.Context; +import me.aurium.beetle.branch.context.ContextProducer; +import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.result.NodeResult; + +/** + * Advanced startegy that does things: + * + * Parses a testing blockpath from existing args. It then finds the linked node from that path. There must be one, + * because even incorrect args will link to the base node or to a branching node like the branch node implementation. + * + * It checks the permissions first. If the sender does not have access to that specific node, or the node is missing a handler + * it will go one node up in the map and check it for permission. It will repeat this until it can find a permissible node, + * or until it reaches the base node. + * + * If the user does not have access to run the base node for some reason, it will call the fallback handler. + * + * TODO please check the logic here. + * + * @param + */ +public class FallbackPermStrategy implements ExecutionFallbackStrategy { + + //TODO a248, this is one of the most important classes. in depth logic review because all of this is untested + // and i have no idea if it's gonna work haha. Also if you can think of a way to reduce the boilerplate of the while loops that'd + // be nice but i'm pretty sure theyre essential + + @Override + public void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer) { + + BlockPath pathToTest = CommonBlockPath.of(args); + NodeResult toBeExecuted = baseNode.getSpecificNode(pathToTest); + + Context failed = producer.produce(sender,alias,args); + + //1. Check permissions and access + + while (!toBeExecuted.resultingNode().getPermission().attempt(sender, alias, args) || toBeExecuted.resultingNode().getExecutionHandler().getExecution().isEmpty()) { + //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. + + if (toBeExecuted.resultingNode().equals(baseNode)) { + + fallback.handle(failed); + + return; + + } else { + + pathToTest = pathToTest.withoutTop(); + + toBeExecuted = baseNode.getSpecificNode(pathToTest); //regress backwards a node + } + } + + NodeContext produced = producer.produce(sender,alias,args, toBeExecuted.resultingNode(), baseNode, toBeExecuted.resultingPath(), pathToTest); + + toBeExecuted.resultingNode().getExecutionHandler().getExecution().get().handle(produced); + } + + + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/IgnoredStrategy.java b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/IgnoredStrategy.java deleted file mode 100644 index 23573a3..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/IgnoredStrategy.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.aurium.beetle.branch.permission.strategies; - -import me.aurium.beetle.branch.context.StagedContext; -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; -import me.aurium.beetle.branch.permission.FallbackStrategy; - -public class IgnoredStrategy implements FallbackStrategy { - - @Override - public ExecutionHandler strategy(StagedContext stagedContext) { - return stagedContext.getExecutedNode().getExecutionHandler(); - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/PassthroughStrategy.java b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/PassthroughStrategy.java new file mode 100644 index 0000000..d513fac --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/PassthroughStrategy.java @@ -0,0 +1,26 @@ +package me.aurium.beetle.branch.permission.strategies; + +import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.block.CommonBlockPath; +import me.aurium.beetle.branch.context.ContextProducer; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.result.NodeResult; + +/** + * Ignores everything and tries to execute ignoring permissions or fallbacks. If something goes wrong it delegates to the fallback handler immediately + * @param + */ +public class PassthroughStrategy implements ExecutionFallbackStrategy { + @Override + public void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer) { + BlockPath path = CommonBlockPath.of(args); + + NodeResult result = baseNode.getSpecificNode(path); + + result.resultingNode().getExecutionHandler().getExecution().ifPresentOrElse( + present -> present.handle(producer.produce(sender,alias,args, result.resultingNode(), baseNode, result.resultingPath(), path)), + () -> { fallback.handle(producer.produce(sender,alias,args)); + }); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/StringPermission.java b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/StringPermission.java new file mode 100644 index 0000000..7005d08 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/permission/strategies/StringPermission.java @@ -0,0 +1,13 @@ +package me.aurium.beetle.branch.permission.strategies; + +import me.aurium.beetle.branch.permission.Permission; + +/** + * Represents a permission that is controlled by a string identifier + * @param the string identifier, duh + */ +public interface StringPermission extends Permission { + + String permissionIdentifier(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java b/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java index 1708058..f4e80d9 100644 --- a/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java +++ b/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java @@ -1,6 +1,7 @@ package me.aurium.beetle.branch.util; import java.util.HashSet; +import java.util.Optional; import java.util.Set; /** @@ -55,8 +56,8 @@ public Set getContents() { * get already store thing * @return already stored thing or null */ - public T getAlreadyStored() { - return alreadyStored; + public Optional getAlreadyStored() { + return Optional.ofNullable(alreadyStored); } } diff --git a/pom.xml b/pom.xml index db1d5d2..d5f662a 100644 --- a/pom.xml +++ b/pom.xml @@ -10,6 +10,7 @@ core beetle-impl + spigot-impl diff --git a/spigot-impl/pom.xml b/spigot-impl/pom.xml new file mode 100644 index 0000000..8b60676 --- /dev/null +++ b/spigot-impl/pom.xml @@ -0,0 +1,32 @@ + + + + branch + me.aurium + 0.1.0 + + 4.0.0 + + spigot-impl + + + ${compiler.version} + ${compiler.version} + + + + + me.aurium + beetle-spigot-impl + 0.4.1 + + + org.spigotmc + spigot-api + 1.16.5-R0.1-SNAPSHOT + + + + \ No newline at end of file diff --git a/spigot-impl/spigot-impl.iml b/spigot-impl/spigot-impl.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/spigot-impl/spigot-impl.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file From c98427857e82b29fa43799e430f1c2badffc958e Mon Sep 17 00:00:00 2001 From: Aurium Date: Sat, 27 Mar 2021 12:11:31 -0700 Subject: [PATCH 23/56] finish work on the alpha fallback system --- .idea/compiler.xml | 1 + .idea/encodings.xml | 2 + .../branch/annotate/AnnotatedParser.java | 2 +- .../marker/permission/StringPermChecker.java | 2 +- .../parsers/PermissionAnnotationParser.java | 6 +-- .../parsers/SingleAnnotatedParser.java | 2 +- .../beetle/branch/argument/Argument.java | 2 +- .../branch/argument/ArgumentContext.java | 2 +- .../argument/DelegatingArgumentContext.java | 4 +- .../aurium/beetle/branch/block/BlockPath.java | 2 - .../beetle/branch/block/CommonBlockPath.java | 2 - .../aurium/beetle/branch/builders/Base.java | 20 -------- .../beetle/branch/builders/Builder.java | 11 ----- .../staging/InitialLocatorContext.java | 16 ------- .../staging/MutableLocatorContext.java | 46 ------------------- .../message/BuilderMessageProvider.java | 20 ++++++++ .../message/FallbackMessagePrettier.java | 9 ++++ .../message/FallbackMessageProvider.java | 4 ++ .../impl/DefaultBuilderMessageProvider.java | 41 +++++++++++++++++ .../{ => fallback}/permission/Permission.java | 2 +- .../permission/PredicatePermission.java | 2 +- .../permissions/EmptyPermission.java | 4 +- .../strategies/ExecutionFallbackStrategy.java | 6 +-- .../strategies/FallbackPermStrategy.java | 10 ++-- .../strategies/PassthroughStrategy.java | 6 +-- .../strategies/StringPermission.java | 4 +- .../handlers/EmptyExecutionHandler.java | 2 +- .../handlers/EmptySuggestionHandler.java | 2 +- .../branch/handlers/api/ExecutionHandler.java | 2 +- .../branch/handlers/api/FallbackHandler.java | 3 +- .../handlers/api/SuggestionHandler.java | 2 +- .../context/AbstractContext.java | 2 +- .../context/AbstractNodeContext.java | 4 +- .../{ => handlers}/context/Context.java | 2 +- .../context/ContextProducer.java | 4 +- .../{ => handlers}/context/NodeContext.java | 4 +- .../launchpoints/CentralizedManager.java | 4 +- .../launchpoints/base/NodeBaseBuilder.java | 33 +++++++++++++ .../launchpoints/base/SimpleNodeBase.java | 6 +-- .../beetle/branch/nodes/ArgumentNode.java | 3 +- .../beetle/branch/nodes/BranchingNode.java | 3 +- .../beetle/branch/nodes/SingleNode.java | 3 +- .../branch/nodes/{ => api}/CommandNode.java | 4 +- .../branch/nodes/{ => api}/EndpointNode.java | 2 +- .../nodes/{ => api}/IdentifiableNode.java | 2 +- .../{ => nodes}/builders/AloneBuilder.java | 2 +- .../nodes/builders/BranchingBuilder.java | 26 ++++++++--- .../beetle/branch/nodes/builders/Builder.java | 12 +++++ .../branch/nodes/builders/SingleBuilder.java | 8 ++-- .../branch/nodes/result/NodeResult.java | 4 +- spigot-impl/spigot-impl.iml | 9 +--- .../beetle/branch/spigot/SpigotManager.java | 4 ++ 52 files changed, 208 insertions(+), 172 deletions(-) delete mode 100644 core/src/main/java/me/aurium/beetle/branch/builders/Base.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/builders/Builder.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/context/staging/InitialLocatorContext.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/context/staging/MutableLocatorContext.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/BuilderMessageProvider.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessagePrettier.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessageProvider.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/DefaultBuilderMessageProvider.java rename core/src/main/java/me/aurium/beetle/branch/{ => fallback}/permission/Permission.java (70%) rename core/src/main/java/me/aurium/beetle/branch/{ => fallback}/permission/PredicatePermission.java (87%) rename core/src/main/java/me/aurium/beetle/branch/{ => fallback}/permission/permissions/EmptyPermission.java (57%) rename core/src/main/java/me/aurium/beetle/branch/{ => fallback}/permission/strategies/ExecutionFallbackStrategy.java (59%) rename core/src/main/java/me/aurium/beetle/branch/{ => fallback}/permission/strategies/FallbackPermStrategy.java (89%) rename core/src/main/java/me/aurium/beetle/branch/{ => fallback}/permission/strategies/PassthroughStrategy.java (85%) rename core/src/main/java/me/aurium/beetle/branch/{ => fallback}/permission/strategies/StringPermission.java (63%) rename core/src/main/java/me/aurium/beetle/branch/{ => handlers}/context/AbstractContext.java (91%) rename core/src/main/java/me/aurium/beetle/branch/{ => handlers}/context/AbstractNodeContext.java (90%) rename core/src/main/java/me/aurium/beetle/branch/{ => handlers}/context/Context.java (73%) rename core/src/main/java/me/aurium/beetle/branch/{ => handlers}/context/ContextProducer.java (79%) rename core/src/main/java/me/aurium/beetle/branch/{ => handlers}/context/NodeContext.java (84%) rename core/src/main/java/me/aurium/beetle/branch/nodes/{ => api}/CommandNode.java (87%) rename core/src/main/java/me/aurium/beetle/branch/nodes/{ => api}/EndpointNode.java (84%) rename core/src/main/java/me/aurium/beetle/branch/nodes/{ => api}/IdentifiableNode.java (76%) rename core/src/main/java/me/aurium/beetle/branch/{ => nodes}/builders/AloneBuilder.java (69%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/builders/Builder.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 5263f5f..c4429a4 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,6 +6,7 @@ + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 2748eec..71de4af 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -5,5 +5,7 @@ + + \ No newline at end of file diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java index 74696db..c39f358 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.annotate; -import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.api.CommandNode; public interface AnnotatedParser { diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java index 5f1a22f..a0ff553 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.annotate.marker.permission; -import me.aurium.beetle.branch.permission.strategies.StringPermission; +import me.aurium.beetle.branch.fallback.permission.strategies.StringPermission; public interface StringPermChecker { diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java index 3fe48a9..0ced0f2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java @@ -1,7 +1,7 @@ package me.aurium.beetle.branch.annotate.parsers; import me.aurium.beetle.branch.annotate.marker.permission.Permission; -import me.aurium.beetle.branch.permission.strategies.StringPermission; +import me.aurium.beetle.branch.fallback.permission.strategies.StringPermission; import java.lang.annotation.Annotation; @@ -9,7 +9,7 @@ public class PermissionAnnotationParser { - me.aurium.beetle.branch.permission.Permission parse(Annotation annotate) throws IllegalAccessException, InstantiationException { + me.aurium.beetle.branch.fallback.permission.Permission parse(Annotation annotate) throws IllegalAccessException, InstantiationException { if (!annotate.annotationType().equals(Permission.class)) throw new PermissionParsingException("Annotation must be of type Permission"); @@ -21,7 +21,7 @@ me.aurium.beetle.branch.permission.Permission parse(Annotation annotate) thro StringPermission perm = permission.getRelativeChecker().newInstance().get(permission.permission()); - return (me.aurium.beetle.branch.permission.Permission) perm; + return (me.aurium.beetle.branch.fallback.permission.Permission) perm; } public static class PermissionParsingException extends RuntimeException { diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java index 0d4edde..d615956 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java @@ -3,7 +3,7 @@ import me.aurium.beetle.branch.annotate.AnnotatedCommand; import me.aurium.beetle.branch.annotate.UncheckedInvocationException; import me.aurium.beetle.branch.annotate.marker.SingleNode; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import java.lang.reflect.InvocationTargetException; diff --git a/core/src/main/java/me/aurium/beetle/branch/argument/Argument.java b/core/src/main/java/me/aurium/beetle/branch/argument/Argument.java index 5c77469..67de9e0 100644 --- a/core/src/main/java/me/aurium/beetle/branch/argument/Argument.java +++ b/core/src/main/java/me/aurium/beetle/branch/argument/Argument.java @@ -1,7 +1,7 @@ package me.aurium.beetle.branch.argument; import me.aurium.beetle.branch.block.Block; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.NodeContext; import java.util.List; import java.util.Optional; diff --git a/core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContext.java b/core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContext.java index 433c180..33cd043 100644 --- a/core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContext.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.argument; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.NodeContext; public interface ArgumentContext extends NodeContext { diff --git a/core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java b/core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java index ec38484..134871c 100644 --- a/core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java @@ -1,9 +1,9 @@ package me.aurium.beetle.branch.argument; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.api.CommandNode; public class DelegatingArgumentContext implements ArgumentContext{ diff --git a/core/src/main/java/me/aurium/beetle/branch/block/BlockPath.java b/core/src/main/java/me/aurium/beetle/branch/block/BlockPath.java index d3447df..f023c09 100644 --- a/core/src/main/java/me/aurium/beetle/branch/block/BlockPath.java +++ b/core/src/main/java/me/aurium/beetle/branch/block/BlockPath.java @@ -1,7 +1,5 @@ package me.aurium.beetle.branch.block; -import me.aurium.beetle.branch.context.NodeContext; - public interface BlockPath { boolean isEmpty(); diff --git a/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java b/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java index 9f297be..d928916 100644 --- a/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java +++ b/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java @@ -1,7 +1,5 @@ package me.aurium.beetle.branch.block; -import me.aurium.beetle.branch.context.NodeContext; - import java.util.ArrayList; public class CommonBlockPath implements BlockPath { diff --git a/core/src/main/java/me/aurium/beetle/branch/builders/Base.java b/core/src/main/java/me/aurium/beetle/branch/builders/Base.java deleted file mode 100644 index 268899c..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/builders/Base.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.aurium.beetle.branch.builders; - -import me.aurium.beetle.branch.nodes.CommandNode; - -import java.util.function.Consumer; - -public class Base { - - public static > CommandNode base(C key, Consumer consumer) { - consumer.accept(key); - - return key.buildWithoutIdentifier(); - } - - //TODO a separate base logic to consume a ClassParser and turn it into a command :) - public static CommandNode base() { - return null; - } - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/builders/Builder.java b/core/src/main/java/me/aurium/beetle/branch/builders/Builder.java deleted file mode 100644 index bd87513..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/builders/Builder.java +++ /dev/null @@ -1,11 +0,0 @@ -package me.aurium.beetle.branch.builders; - -import me.aurium.beetle.branch.nodes.CommandNode; -import me.aurium.beetle.branch.nodes.IdentifiableNode; - -public interface Builder{ - - IdentifiableNode build(); - CommandNode buildWithoutIdentifier(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/context/staging/InitialLocatorContext.java b/core/src/main/java/me/aurium/beetle/branch/context/staging/InitialLocatorContext.java deleted file mode 100644 index f129061..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/context/staging/InitialLocatorContext.java +++ /dev/null @@ -1,16 +0,0 @@ -package me.aurium.beetle.branch.context.staging; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.CommandNode; - -public class InitialLocatorContext { - - private final CommandNode baseNode; - private final BlockPath basePath; - - - public InitialLocatorContext(CommandNode baseNode, BlockPath basePath) { - this.baseNode = baseNode; - this.basePath = basePath; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/context/staging/MutableLocatorContext.java b/core/src/main/java/me/aurium/beetle/branch/context/staging/MutableLocatorContext.java deleted file mode 100644 index 5355b13..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/context/staging/MutableLocatorContext.java +++ /dev/null @@ -1,46 +0,0 @@ -package me.aurium.beetle.branch.context.staging; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.CommandNode; - -public class MutableLocatorContext { - - private final CommandNode baseNode; //can't be changed - private final BlockPath basePath; - - //these can be adjusted in staging - private CommandNode mutableTargetNode; - private BlockPath mutableTargetPath; - - public MutableLocatorContext(CommandNode baseNode, BlockPath basePath, CommandNode mutableTargetNode, BlockPath mutableTargetPath) { - this.baseNode = baseNode; - this.basePath = basePath; - this.mutableTargetNode = mutableTargetNode; - this.mutableTargetPath = mutableTargetPath; - } - public CommandNode getBaseNode() { - return baseNode; - } - - public BlockPath getBasePath() { - return basePath; - } - - public CommandNode getMutableTargetNode() { - return mutableTargetNode; - } - - public BlockPath getMutableTargetPath() { - return mutableTargetPath; - } - - //TODO limit access (permissions should not be able to touch these) - public void setMutableTargetNode(CommandNode node) { - this.mutableTargetNode = node; - } - - public void setMutableTargetPath(BlockPath path) { - this.mutableTargetPath = path; - } - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/BuilderMessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/BuilderMessageProvider.java new file mode 100644 index 0000000..5150506 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/BuilderMessageProvider.java @@ -0,0 +1,20 @@ +package me.aurium.beetle.branch.fallback.message; + +import me.aurium.beetle.branch.handlers.context.NodeContext; + +/** + * Might not be the most scalable thing in the world but who the fuck cares + * + * I can't think of any nodes besides single (do an action) branching (do an action or separate out based on top buffer arg) + * and value (do an action or separate action based on buffer from this argument) + * + * so who cares? This will give me fallback messages + * @param + */ +public interface BuilderMessageProvider { + + void handleDefaultSingle(NodeContext context); + void handleDefaultBranching(NodeContext context); + void handleDefaultValue(NodeContext context); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessagePrettier.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessagePrettier.java new file mode 100644 index 0000000..3e136c0 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessagePrettier.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.fallback.message; + +/** + * Makes messages pretty + */ +public interface FallbackMessagePrettier { + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessageProvider.java new file mode 100644 index 0000000..acd1817 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessageProvider.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.fallback.message; + +public interface FallbackMessageProvider { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/DefaultBuilderMessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/DefaultBuilderMessageProvider.java new file mode 100644 index 0000000..d94ed2d --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/DefaultBuilderMessageProvider.java @@ -0,0 +1,41 @@ +package me.aurium.beetle.branch.fallback.message.impl; + +import me.aurium.beetle.branch.fallback.message.BuilderMessageProvider; +import me.aurium.beetle.branch.handlers.context.NodeContext; + +import java.util.ArrayList; +import java.util.List; + +public class DefaultBuilderMessageProvider implements BuilderMessageProvider { + + @Override + public void handleDefaultSingle(NodeContext context) { + + + } + + @Override + public void handleDefaultBranching(NodeContext context) { + + StringBuilder fuk = new StringBuilder("/"); + + context.fullPath().withoutTop().getAllBlocks().getBackingList().forEach(blok -> { + fuk.append(blok).append(" "); + }); + + String finalFuk = fuk.toString(); + + List alternatives = new ArrayList<>(); //TODO make parameter + + for (String string : alternatives) { + context.messageSender(finalFuk + string); + } + + + } + + @Override + public void handleDefaultValue(NodeContext context) { + + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/Permission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/Permission.java similarity index 70% rename from core/src/main/java/me/aurium/beetle/branch/permission/Permission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permission/Permission.java index d724110..f6f48d2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/Permission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/Permission.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.permission; +package me.aurium.beetle.branch.fallback.permission; /** * diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/PredicatePermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/PredicatePermission.java similarity index 87% rename from core/src/main/java/me/aurium/beetle/branch/permission/PredicatePermission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permission/PredicatePermission.java index 1efca9a..b6cc15f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/PredicatePermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/PredicatePermission.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.permission; +package me.aurium.beetle.branch.fallback.permission; import java.util.function.Predicate; diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/permissions/EmptyPermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/permissions/EmptyPermission.java similarity index 57% rename from core/src/main/java/me/aurium/beetle/branch/permission/permissions/EmptyPermission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permission/permissions/EmptyPermission.java index f286bef..b68d78c 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/permissions/EmptyPermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/permissions/EmptyPermission.java @@ -1,6 +1,6 @@ -package me.aurium.beetle.branch.permission.permissions; +package me.aurium.beetle.branch.fallback.permission.permissions; -import me.aurium.beetle.branch.permission.Permission; +import me.aurium.beetle.branch.fallback.permission.Permission; public class EmptyPermission implements Permission { diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/ExecutionFallbackStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java similarity index 59% rename from core/src/main/java/me/aurium/beetle/branch/permission/strategies/ExecutionFallbackStrategy.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java index 1f083db..3055387 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/ExecutionFallbackStrategy.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java @@ -1,8 +1,8 @@ -package me.aurium.beetle.branch.permission.strategies; +package me.aurium.beetle.branch.fallback.permission.strategies; -import me.aurium.beetle.branch.context.ContextProducer; +import me.aurium.beetle.branch.handlers.context.ContextProducer; import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.api.CommandNode; public interface ExecutionFallbackStrategy { diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackPermStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java similarity index 89% rename from core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackPermStrategy.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java index 627867d..d2f8ce2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/FallbackPermStrategy.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java @@ -1,12 +1,12 @@ -package me.aurium.beetle.branch.permission.strategies; +package me.aurium.beetle.branch.fallback.permission.strategies; import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.block.CommonBlockPath; -import me.aurium.beetle.branch.context.Context; -import me.aurium.beetle.branch.context.ContextProducer; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.Context; +import me.aurium.beetle.branch.handlers.context.ContextProducer; +import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.api.CommandNode; import me.aurium.beetle.branch.nodes.result.NodeResult; /** diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/PassthroughStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java similarity index 85% rename from core/src/main/java/me/aurium/beetle/branch/permission/strategies/PassthroughStrategy.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java index d513fac..44efbe8 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/PassthroughStrategy.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java @@ -1,10 +1,10 @@ -package me.aurium.beetle.branch.permission.strategies; +package me.aurium.beetle.branch.fallback.permission.strategies; import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.block.CommonBlockPath; -import me.aurium.beetle.branch.context.ContextProducer; +import me.aurium.beetle.branch.handlers.context.ContextProducer; import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.api.CommandNode; import me.aurium.beetle.branch.nodes.result.NodeResult; /** diff --git a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/StringPermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/StringPermission.java similarity index 63% rename from core/src/main/java/me/aurium/beetle/branch/permission/strategies/StringPermission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/StringPermission.java index 7005d08..2b7674f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/permission/strategies/StringPermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/StringPermission.java @@ -1,6 +1,6 @@ -package me.aurium.beetle.branch.permission.strategies; +package me.aurium.beetle.branch.fallback.permission.strategies; -import me.aurium.beetle.branch.permission.Permission; +import me.aurium.beetle.branch.fallback.permission.Permission; /** * Represents a permission that is controlled by a string identifier diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/EmptyExecutionHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/EmptyExecutionHandler.java index 28ebc8a..6af79d2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/EmptyExecutionHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/EmptyExecutionHandler.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.handlers; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; public class EmptyExecutionHandler implements ExecutionHandler { diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java index e1ff624..6fb5c4d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.handlers; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; import java.util.ArrayList; diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java index 048442e..d32f48e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.handlers.api; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.NodeContext; public interface ExecutionHandler { diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java index 6bde3cc..4f90b4f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java @@ -1,7 +1,6 @@ package me.aurium.beetle.branch.handlers.api; -import me.aurium.beetle.branch.context.Context; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.Context; /** * Represents the fallback handler of a base that manages what happens when everything goes wrong diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java index ab55126..5225a93 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.handlers.api; -import me.aurium.beetle.branch.context.NodeContext; +import me.aurium.beetle.branch.handlers.context.NodeContext; import java.util.List; diff --git a/core/src/main/java/me/aurium/beetle/branch/context/AbstractContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractContext.java similarity index 91% rename from core/src/main/java/me/aurium/beetle/branch/context/AbstractContext.java rename to core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractContext.java index f3b80ac..8636ea4 100644 --- a/core/src/main/java/me/aurium/beetle/branch/context/AbstractContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractContext.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.context; +package me.aurium.beetle.branch.handlers.context; public abstract class AbstractContext implements Context { diff --git a/core/src/main/java/me/aurium/beetle/branch/context/AbstractNodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java similarity index 90% rename from core/src/main/java/me/aurium/beetle/branch/context/AbstractNodeContext.java rename to core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java index 43c8d15..5308ee2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/context/AbstractNodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java @@ -1,7 +1,7 @@ -package me.aurium.beetle.branch.context; +package me.aurium.beetle.branch.handlers.context; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.api.CommandNode; public abstract class AbstractNodeContext extends AbstractContext implements NodeContext { diff --git a/core/src/main/java/me/aurium/beetle/branch/context/Context.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/Context.java similarity index 73% rename from core/src/main/java/me/aurium/beetle/branch/context/Context.java rename to core/src/main/java/me/aurium/beetle/branch/handlers/context/Context.java index f1670ad..efd485b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/context/Context.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/Context.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.context; +package me.aurium.beetle.branch.handlers.context; public interface Context { diff --git a/core/src/main/java/me/aurium/beetle/branch/context/ContextProducer.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java similarity index 79% rename from core/src/main/java/me/aurium/beetle/branch/context/ContextProducer.java rename to core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java index eda8bf6..5d2caf1 100644 --- a/core/src/main/java/me/aurium/beetle/branch/context/ContextProducer.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java @@ -1,7 +1,7 @@ -package me.aurium.beetle.branch.context; +package me.aurium.beetle.branch.handlers.context; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.api.CommandNode; /** * Produces context adapters, like the stock ContextSource for contexts. diff --git a/core/src/main/java/me/aurium/beetle/branch/context/NodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java similarity index 84% rename from core/src/main/java/me/aurium/beetle/branch/context/NodeContext.java rename to core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java index 0004d07..741cd0e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/context/NodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java @@ -1,8 +1,8 @@ -package me.aurium.beetle.branch.context; +package me.aurium.beetle.branch.handlers.context; import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.CommandNode; +import me.aurium.beetle.branch.nodes.api.CommandNode; public interface NodeContext extends Context { diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java index 54602bc..cf7a83e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java @@ -8,7 +8,9 @@ */ public interface CentralizedManager { - CentralizedManagerBinder getBinder(); + CentralizedManagerBinder getBinder(); //think of Beetle's accessors for files, except this time it's for commands? idk + + } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java index 2d81e69..886a4d2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java @@ -1,7 +1,40 @@ package me.aurium.beetle.branch.launchpoints.base; +import me.aurium.beetle.branch.handlers.context.ContextProducer; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.fallback.permission.strategies.ExecutionFallbackStrategy; +import me.aurium.beetle.branch.fallback.permission.strategies.FallbackPermStrategy; + +import java.util.Arrays; + public class NodeBaseBuilder { + private final CommandNode base; + private final ContextProducer producer; + + private FallbackHandler fallbackHandler = (shit) -> shit.messageSender("Error running command with arguments: " + Arrays.toString(shit.getArgs())); + + private ExecutionFallbackStrategy strategy = new FallbackPermStrategy<>(); + + public NodeBaseBuilder(CommandNode base, ContextProducer producer) { + this.base = base; + this.producer = producer; + } + + public NodeBaseBuilder withFallback(FallbackHandler fallback) { + this.fallbackHandler = fallback; + + return this; + } + + public NodeBaseBuilder withStrategy(ExecutionFallbackStrategy strategy) { + this.strategy = strategy; + return this; + } + public NodeBase build() { + return new SimpleNodeBase<>(base,producer,fallbackHandler,strategy); + } } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java index a2273a7..d0bfde4 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java @@ -1,9 +1,9 @@ package me.aurium.beetle.branch.launchpoints.base; -import me.aurium.beetle.branch.context.ContextProducer; +import me.aurium.beetle.branch.handlers.context.ContextProducer; import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.CommandNode; -import me.aurium.beetle.branch.permission.strategies.ExecutionFallbackStrategy; +import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.fallback.permission.strategies.ExecutionFallbackStrategy; import java.util.List; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java index a3b9d68..3190ab2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java @@ -4,9 +4,10 @@ import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; import me.aurium.beetle.branch.argument.Argument; +import me.aurium.beetle.branch.nodes.api.IdentifiableNode; import me.aurium.beetle.branch.nodes.result.ExecutionResult; import me.aurium.beetle.branch.nodes.result.NodeResult; -import me.aurium.beetle.branch.permission.Permission; +import me.aurium.beetle.branch.fallback.permission.Permission; import java.util.List; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java index 999cbdb..6fb2c93 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java @@ -3,8 +3,9 @@ import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; +import me.aurium.beetle.branch.nodes.api.IdentifiableNode; import me.aurium.beetle.branch.nodes.result.*; -import me.aurium.beetle.branch.permission.Permission; +import me.aurium.beetle.branch.fallback.permission.Permission; import me.aurium.beetle.branch.util.PreStoredHashSet; /** diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java index 4616b6b..12d982d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java @@ -5,9 +5,10 @@ import me.aurium.beetle.branch.handlers.EmptySuggestionHandler; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; +import me.aurium.beetle.branch.nodes.api.EndpointNode; import me.aurium.beetle.branch.nodes.result.ExecutionResult; import me.aurium.beetle.branch.nodes.result.NodeResult; -import me.aurium.beetle.branch.permission.Permission; +import me.aurium.beetle.branch.fallback.permission.Permission; public class SingleNode implements EndpointNode { diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/CommandNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java similarity index 87% rename from core/src/main/java/me/aurium/beetle/branch/nodes/CommandNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java index b207f40..2d2ab04 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/CommandNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java @@ -1,10 +1,10 @@ -package me.aurium.beetle.branch.nodes; +package me.aurium.beetle.branch.nodes.api; import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; import me.aurium.beetle.branch.nodes.result.ExecutionResult; import me.aurium.beetle.branch.nodes.result.NodeResult; -import me.aurium.beetle.branch.permission.Permission; +import me.aurium.beetle.branch.fallback.permission.Permission; /** * Base object diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/EndpointNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java similarity index 84% rename from core/src/main/java/me/aurium/beetle/branch/nodes/EndpointNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java index 8df5b5b..c15cf37 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/EndpointNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.nodes; +package me.aurium.beetle.branch.nodes.api; /** * Marker interface for a node that is alone (so not branching, but not merging either) diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/IdentifiableNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java similarity index 76% rename from core/src/main/java/me/aurium/beetle/branch/nodes/IdentifiableNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java index a12b1bd..ce79bb6 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/IdentifiableNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.nodes; +package me.aurium.beetle.branch.nodes.api; import me.aurium.beetle.branch.block.Block; diff --git a/core/src/main/java/me/aurium/beetle/branch/builders/AloneBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/AloneBuilder.java similarity index 69% rename from core/src/main/java/me/aurium/beetle/branch/builders/AloneBuilder.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/builders/AloneBuilder.java index f957f56..3b65261 100644 --- a/core/src/main/java/me/aurium/beetle/branch/builders/AloneBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/AloneBuilder.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.builders; +package me.aurium.beetle.branch.nodes.builders; /** * yet another marker interface diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java index 78a524e..9bc8f6c 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java @@ -3,12 +3,11 @@ import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.block.EmptyBlock; import me.aurium.beetle.branch.block.StringBlock; -import me.aurium.beetle.branch.builders.Builder; +import me.aurium.beetle.branch.fallback.permission.Permission; +import me.aurium.beetle.branch.fallback.permission.permissions.EmptyPermission; import me.aurium.beetle.branch.nodes.BranchingNode; -import me.aurium.beetle.branch.nodes.CommandNode; -import me.aurium.beetle.branch.nodes.IdentifiableNode; -import me.aurium.beetle.branch.permission.Permission; -import me.aurium.beetle.branch.permission.permissions.EmptyPermission; +import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.api.IdentifiableNode; import me.aurium.beetle.branch.util.PreStoredHashSet; import java.util.HashSet; @@ -18,13 +17,23 @@ public class BranchingBuilder implements Builder { - private final Set> commands = new HashSet<>(); + private final Set> commands; private Block block; private IdentifiableNode noArgs; + private boolean linked; - private Permission permission = new EmptyPermission<>(); + private Permission permission; + + public BranchingBuilder() { + this.commands = new HashSet<>(); + +/* this.noArgs = new SingleNode<>(new EmptyBlock(), messageProvider::handleDefaultBranching, new EmptyPermission<>());*/ + this.linked = false; + + this.permission = new EmptyPermission<>(); + } public void withIdentifier(Block block) { this.block = block; @@ -51,6 +60,7 @@ public > void withNoArgs(C key, boolean linked, Consu this.linked = linked; } + @Override public BranchingNode build() { @@ -58,6 +68,8 @@ public BranchingNode build() { PreStoredHashSet> set; + + if (noArgs == null) { if (linked) { throw new IllegalStateException("Attempted link without no-arguments handler!"); diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/Builder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/Builder.java new file mode 100644 index 0000000..2194533 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/Builder.java @@ -0,0 +1,12 @@ +package me.aurium.beetle.branch.nodes.builders; + +import me.aurium.beetle.branch.fallback.message.BuilderMessageProvider; +import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.api.IdentifiableNode; + +public interface Builder{ + + IdentifiableNode build(); + CommandNode buildWithoutIdentifier(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java index 799819a..0af465f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java @@ -3,11 +3,11 @@ import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.block.EmptyBlock; import me.aurium.beetle.branch.block.StringBlock; -import me.aurium.beetle.branch.builders.AloneBuilder; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.nodes.SingleNode; -import me.aurium.beetle.branch.permission.Permission; -import me.aurium.beetle.branch.permission.permissions.EmptyPermission; +import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.fallback.permission.Permission; +import me.aurium.beetle.branch.fallback.permission.permissions.EmptyPermission; import java.util.Objects; @@ -41,7 +41,7 @@ public SingleNode build() { } @Override - public me.aurium.beetle.branch.nodes.CommandNode buildWithoutIdentifier() { + public CommandNode buildWithoutIdentifier() { Objects.requireNonNull(contextHandler); return new SingleNode<>(EmptyBlock.of(),contextHandler, permission); diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java index 93b895f..5a92051 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java @@ -1,9 +1,7 @@ package me.aurium.beetle.branch.nodes.result; import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.CommandNode; - -import java.util.Optional; +import me.aurium.beetle.branch.nodes.api.CommandNode; public class NodeResult { diff --git a/spigot-impl/spigot-impl.iml b/spigot-impl/spigot-impl.iml index d6ebd48..78b2cc5 100644 --- a/spigot-impl/spigot-impl.iml +++ b/spigot-impl/spigot-impl.iml @@ -1,9 +1,2 @@ - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java new file mode 100644 index 0000000..12517cc --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.spigot; + +public class SpigotManager { +} From 6e11469cc81ddadd8d5aa6f446aa6b01326110d3 Mon Sep 17 00:00:00 2001 From: Aurium Date: Sun, 28 Mar 2021 23:22:59 -0700 Subject: [PATCH 24/56] add adapter stuff clumsily --- .../marker/permission/Permission.java | 4 ++ .../marker/permission/StringPermChecker.java | 2 +- .../parsers/PermissionAnnotationParser.java | 2 +- .../beetle/branch/fallback/FallbackPair.java | 9 +++++ .../message/MessageProviderFactory.java | 9 +++++ .../{strategies => }/StringPermission.java | 2 +- .../strategies/AutoFallbackPermStrategy.java | 16 ++++++++ .../strategies/FallbackPermStrategy.java | 13 ++++--- .../strategies/PassthroughStrategy.java | 2 +- .../handlers/context/AbstractNodeContext.java | 19 +++++++--- .../handlers/context/ContextErrorMessage.java | 9 +++++ .../handlers/context/ContextProducer.java | 3 +- .../launchpoints/CentralizedManager.java | 11 ++++-- .../CentralizedManagerBinder.java | 6 +++ .../launchpoints/IllegalSenderException.java | 9 +++++ .../branch/launchpoints/base/NodeBase.java | 2 - .../launchpoints/base/NodeBaseBuilder.java | 17 +++++++-- .../launchpoints/base/SimpleNodeBase.java | 2 +- .../typeadapter/CommonAdapter.java | 21 +++++++++++ .../typeadapter/ManagerAdapter.java | 15 ++++++++ .../beetle/branch/nodes/BranchingNode.java | 4 ++ .../beetle/branch/util/PreStoredHashSet.java | 2 +- spigot-impl/pom.xml | 5 +++ .../beetle/branch/spigot/PlayerAdapter.java | 32 ++++++++++++++++ .../beetle/branch/spigot/SenderAdapter.java | 7 ++++ .../beetle/branch/spigot/SpigotContext.java | 24 ++++++++++++ .../branch/spigot/SpigotContextProducer.java | 37 +++++++++++++++++++ .../beetle/branch/spigot/SpigotManager.java | 28 +++++++++++++- .../branch/spigot/SpigotManagerBinder.java | 18 +++++++++ .../beetle/branch/spigot/ExampleBinding.java | 19 ++++++++++ 30 files changed, 320 insertions(+), 29 deletions(-) create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/FallbackPair.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProviderFactory.java rename core/src/main/java/me/aurium/beetle/branch/fallback/permission/{strategies => }/StringPermission.java (81%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/AutoFallbackPermStrategy.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextErrorMessage.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/IllegalSenderException.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/PlayerAdapter.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SenderAdapter.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManagerBinder.java create mode 100644 spigot-impl/src/test/java/me/aurium/beetle/branch/spigot/ExampleBinding.java diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/Permission.java b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/Permission.java index f5a9542..7dc843c 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/Permission.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/Permission.java @@ -1,5 +1,9 @@ package me.aurium.beetle.branch.annotate.marker.permission; +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD,ElementType.CONSTRUCTOR}) public @interface Permission { Class getRelativeChecker(); diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java index a0ff553..eba19f6 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.annotate.marker.permission; -import me.aurium.beetle.branch.fallback.permission.strategies.StringPermission; +import me.aurium.beetle.branch.fallback.permission.StringPermission; public interface StringPermChecker { diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java index 0ced0f2..5a1882c 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java @@ -1,7 +1,7 @@ package me.aurium.beetle.branch.annotate.parsers; import me.aurium.beetle.branch.annotate.marker.permission.Permission; -import me.aurium.beetle.branch.fallback.permission.strategies.StringPermission; +import me.aurium.beetle.branch.fallback.permission.StringPermission; import java.lang.annotation.Annotation; diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/FallbackPair.java b/core/src/main/java/me/aurium/beetle/branch/fallback/FallbackPair.java new file mode 100644 index 0000000..c205e9f --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/FallbackPair.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.fallback; + +import me.aurium.beetle.branch.handlers.api.FallbackHandler; + +public interface FallbackPair { + + //TODO make this liek have two things: fallback for the base and fallback pre-base (for shit like adapter fails) + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProviderFactory.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProviderFactory.java new file mode 100644 index 0000000..03e47f7 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProviderFactory.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.fallback.message; + +public class MessageProviderFactory { + + public static BuilderMessageProvider getProvider() { + return null; + } + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/StringPermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/StringPermission.java similarity index 81% rename from core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/StringPermission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permission/StringPermission.java index 2b7674f..e53a1a8 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/StringPermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/StringPermission.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.fallback.permission.strategies; +package me.aurium.beetle.branch.fallback.permission; import me.aurium.beetle.branch.fallback.permission.Permission; diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/AutoFallbackPermStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/AutoFallbackPermStrategy.java new file mode 100644 index 0000000..f4b9c74 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/AutoFallbackPermStrategy.java @@ -0,0 +1,16 @@ +package me.aurium.beetle.branch.fallback.permission.strategies; + +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.handlers.context.ContextProducer; +import me.aurium.beetle.branch.nodes.api.CommandNode; + +public class AutoFallbackPermStrategy implements ExecutionFallbackStrategy { + @Override + public void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer) { + + } + + //TODO make this autogenerate messages for failure + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java index d2f8ce2..f11c12b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java @@ -27,13 +27,8 @@ */ public class FallbackPermStrategy implements ExecutionFallbackStrategy { - //TODO a248, this is one of the most important classes. in depth logic review because all of this is untested - // and i have no idea if it's gonna work haha. Also if you can think of a way to reduce the boilerplate of the while loops that'd - // be nice but i'm pretty sure theyre essential - @Override public void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer) { - BlockPath pathToTest = CommonBlockPath.of(args); NodeResult toBeExecuted = baseNode.getSpecificNode(pathToTest); @@ -58,11 +53,17 @@ public void executeStrategy(T sender, String alias, String[] args, CommandNode produced = producer.produce(sender,alias,args, toBeExecuted.resultingNode(), baseNode, toBeExecuted.resultingPath(), pathToTest); + NodeContext produced = producer.produce(sender,alias,args, toBeExecuted.resultingNode(), baseNode, toBeExecuted.resultingPath(), pathToTest, fallback); toBeExecuted.resultingNode().getExecutionHandler().getExecution().get().handle(produced); } + //TODO a248, this is one of the most important classes. in depth logic review because all of this is untested + // and i have no idea if it's gonna work haha. Also if you can think of a way to reduce the boilerplate of the while loops that'd + // be nice but i'm pretty sure theyre essential + + + diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java index 44efbe8..111870d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java @@ -19,7 +19,7 @@ public void executeStrategy(T sender, String alias, String[] args, CommandNode result = baseNode.getSpecificNode(path); result.resultingNode().getExecutionHandler().getExecution().ifPresentOrElse( - present -> present.handle(producer.produce(sender,alias,args, result.resultingNode(), baseNode, result.resultingPath(), path)), + present -> present.handle(producer.produce(sender,alias,args, result.resultingNode(), baseNode, result.resultingPath(), path, fallback)), () -> { fallback.handle(producer.produce(sender,alias,args)); }); } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java index 5308ee2..e0240d2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java @@ -1,6 +1,7 @@ package me.aurium.beetle.branch.handlers.context; import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; import me.aurium.beetle.branch.nodes.api.CommandNode; public abstract class AbstractNodeContext extends AbstractContext implements NodeContext { @@ -9,13 +10,15 @@ public abstract class AbstractNodeContext extends AbstractContext implemen private final CommandNode base; private final BlockPath executedPath; private final BlockPath fullPath; + private final FallbackHandler handler; - protected AbstractNodeContext(T t, String alias, String[] args, CommandNode executed, CommandNode base, BlockPath executedPath, BlockPath fullPath) { - super(t, alias, args); - this.executed = executed; - this.base = base; + protected AbstractNodeContext(T t, String alias, String[] strings, CommandNode executedNode, CommandNode baseNode, BlockPath executedPath, BlockPath basePath, FallbackHandler handler) { + super(t, alias, strings); + this.executed = executedNode; + this.base = baseNode; this.executedPath = executedPath; - this.fullPath = fullPath; + this.fullPath = basePath; + this.handler = handler; } @Override @@ -37,4 +40,10 @@ public BlockPath executedPath() { public BlockPath fullPath() { return fullPath; } + + @Override + public FallbackHandler getFallbackAction() { + return handler; + } + } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextErrorMessage.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextErrorMessage.java new file mode 100644 index 0000000..8da0bf0 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextErrorMessage.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.handlers.context; + +/** + * easy to use interface that lets me give it a title, some strings, and let it be converted + * + * e.g. to prettified chatcolor output or to discord embed on discord-impl. + */ +public interface ContextErrorMessage { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java index 5d2caf1..6c7fc7b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java @@ -1,6 +1,7 @@ package me.aurium.beetle.branch.handlers.context; import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; import me.aurium.beetle.branch.nodes.api.CommandNode; /** @@ -8,7 +9,7 @@ */ public interface ContextProducer { - NodeContext produce(T sender, String alias, String[] strings, CommandNode executedNode, CommandNode baseNode, BlockPath executedPath, BlockPath basePath); + NodeContext produce(T sender, String alias, String[] strings, CommandNode executedNode, CommandNode baseNode, BlockPath executedPath, BlockPath basePath, FallbackHandler handler); Context produce(T sender, String alias, String[] strings); diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java index cf7a83e..22b765d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java @@ -1,16 +1,19 @@ package me.aurium.beetle.branch.launchpoints; -import me.aurium.beetle.branch.launchpoints.base.NodeBase; +import me.aurium.beetle.branch.launchpoints.base.NodeBaseBuilder; +import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; /** * Represents the utmost base part of a command * @param the input type, does not need to be of same type as the node bases it utilizes + * @param the platform, void if there is none (how?) */ -public interface CentralizedManager { - - CentralizedManagerBinder getBinder(); //think of Beetle's accessors for files, except this time it's for commands? idk +public interface CentralizedManager { + CentralizedManagerBinder getBinder(V platform); + NodeBaseBuilder newCommand(); + NodeBaseBuilder newCommand(ManagerAdapter adapter); } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManagerBinder.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManagerBinder.java index 096d7a7..a83c4d1 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManagerBinder.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManagerBinder.java @@ -1,4 +1,10 @@ package me.aurium.beetle.branch.launchpoints; public interface CentralizedManagerBinder { + + /** + * Register all commands to the platform + */ + void bind(); + } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/IllegalSenderException.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/IllegalSenderException.java new file mode 100644 index 0000000..10c29bc --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/IllegalSenderException.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.launchpoints; + +public class IllegalSenderException extends RuntimeException{ + + public IllegalSenderException(String lmao) { + super(lmao); + } + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java index 3af9eb2..edfad8f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java @@ -5,8 +5,6 @@ public interface NodeBase { void execute(T t, String alias, String[] args); - List suggest(T t, String alias, String[] args); - } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java index 886a4d2..722c31e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java @@ -7,21 +7,26 @@ import me.aurium.beetle.branch.fallback.permission.strategies.FallbackPermStrategy; import java.util.Arrays; +import java.util.Objects; public class NodeBaseBuilder { - private final CommandNode base; private final ContextProducer producer; + private CommandNode base; private FallbackHandler fallbackHandler = (shit) -> shit.messageSender("Error running command with arguments: " + Arrays.toString(shit.getArgs())); - private ExecutionFallbackStrategy strategy = new FallbackPermStrategy<>(); - public NodeBaseBuilder(CommandNode base, ContextProducer producer) { - this.base = base; + public NodeBaseBuilder(ContextProducer producer) { this.producer = producer; } + public NodeBaseBuilder withBaseNode(CommandNode node) { + this.base = node; + + return this; + } + public NodeBaseBuilder withFallback(FallbackHandler fallback) { this.fallbackHandler = fallback; @@ -35,6 +40,10 @@ public NodeBaseBuilder withStrategy(ExecutionFallbackStrategy strategy) { } public NodeBase build() { + Objects.requireNonNull(base); + Objects.requireNonNull(fallbackHandler); + Objects.requireNonNull(strategy); + return new SimpleNodeBase<>(base,producer,fallbackHandler,strategy); } } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java index d0bfde4..ff26611 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java @@ -25,7 +25,7 @@ public SimpleNodeBase(CommandNode baseNode, ContextProducer factory, F @Override public void execute(C executor, String alias, String[] args) { - strategy.executeStrategy(executor,alias,args,baseNode, fallbackHandler,factory); + strategy.executeStrategy(executor,alias,args,baseNode, fallbackHandler, factory); } @Override diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java new file mode 100644 index 0000000..715aa33 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java @@ -0,0 +1,21 @@ +package me.aurium.beetle.branch.launchpoints.typeadapter; + +import java.util.function.Consumer; + +public interface CommonAdapter extends ManagerAdapter { + + @Override + default T adapt(T in) { + return in; + } + + @Override + default boolean canAdapt(T t) { + return true; + } + + @Override + default Consumer failedAdaptAction() { + return (i) -> {}; //noops + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java new file mode 100644 index 0000000..4e62cbe --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java @@ -0,0 +1,15 @@ +package me.aurium.beetle.branch.launchpoints.typeadapter; + +import me.aurium.beetle.branch.handlers.context.ContextProducer; + +import java.util.function.Consumer; + +public interface ManagerAdapter { + + OUTPUT adapt(INPUT input); + + boolean canAdapt(INPUT input); + + Consumer failedAdaptAction(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java index 6fb2c93..8cb916d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java @@ -8,6 +8,8 @@ import me.aurium.beetle.branch.fallback.permission.Permission; import me.aurium.beetle.branch.util.PreStoredHashSet; +import java.util.stream.Collectors; + /** * TODO: missing a Node for noargs will cause it to rely on fallback rather than throwning exceptions and being bad * @param @@ -65,6 +67,8 @@ public SuggestionHandler getSuggestionHandler() { //this works because this suggestion handler only gets called if we are on this object lmfao Block matchableBlock = context.executedPath().getAllBlocks().getLast(); + nodes.getContents().stream().map(IdentifiableNode::getIdentifier).collect(Collectors.toList()); + return null; }; } diff --git a/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java b/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java index f4e80d9..33af162 100644 --- a/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java +++ b/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java @@ -9,7 +9,7 @@ */ public class PreStoredHashSet { - private T alreadyStored; + private final T alreadyStored; private final Set otherThingsInTheSet; private final boolean linked; diff --git a/spigot-impl/pom.xml b/spigot-impl/pom.xml index 8b60676..3f1e678 100644 --- a/spigot-impl/pom.xml +++ b/spigot-impl/pom.xml @@ -22,6 +22,11 @@ beetle-spigot-impl 0.4.1 + + me.aurium + branch-core + 0.1.1 + org.spigotmc spigot-api diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/PlayerAdapter.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/PlayerAdapter.java new file mode 100644 index 0000000..4f49a25 --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/PlayerAdapter.java @@ -0,0 +1,32 @@ +package me.aurium.beetle.branch.spigot; + +import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.function.Consumer; + +public class PlayerAdapter implements ManagerAdapter { + + private final Consumer failedOperation; + + public PlayerAdapter(Consumer failedOperation) { + this.failedOperation = failedOperation; + } + + @Override + public Player adapt(CommandSender sender) { + return (Player) sender; + } + + @Override + public boolean canAdapt(CommandSender sender) { + return sender instanceof Player; + } + + @Override + public Consumer failedAdaptAction() { + return failedOperation; + } + +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SenderAdapter.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SenderAdapter.java new file mode 100644 index 0000000..cda8236 --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SenderAdapter.java @@ -0,0 +1,7 @@ +package me.aurium.beetle.branch.spigot; + +import me.aurium.beetle.branch.launchpoints.typeadapter.CommonAdapter; +import org.bukkit.command.CommandSender; + +public class SenderAdapter implements CommonAdapter { +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java new file mode 100644 index 0000000..203ce45 --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java @@ -0,0 +1,24 @@ +package me.aurium.beetle.branch.spigot; + +import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.handlers.context.AbstractNodeContext; +import me.aurium.beetle.branch.nodes.api.CommandNode; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class SpigotContext extends AbstractNodeContext { + + private final T sender; + + public SpigotContext(T sender, String alias, String[] args, CommandNode executed, CommandNode base, BlockPath executedPath, BlockPath fullPath, FallbackHandler handler) { + super(sender, alias, args, executed, base, executedPath, fullPath, handler); + + this.sender = sender; + } + + @Override + public void messageSender(String string) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&',string)); //TODO prettify (or just use ContextErrorMessage LMFAO) + } +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java new file mode 100644 index 0000000..c8fa56e --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java @@ -0,0 +1,37 @@ +package me.aurium.beetle.branch.spigot; + +import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.handlers.context.Context; +import me.aurium.beetle.branch.handlers.context.ContextProducer; +import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.launchpoints.IllegalSenderException; +import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; +import me.aurium.beetle.branch.nodes.api.CommandNode; +import org.bukkit.command.CommandSender; + +public class SpigotContextProducer implements ContextProducer { + + private final ManagerAdapter adapter; + + public SpigotContextProducer(ManagerAdapter adapter) { + this.adapter = adapter; + } + + @Override + public NodeContext produce(C sender, String alias, String[] strings, CommandNode executedNode, CommandNode baseNode, BlockPath executedPath, BlockPath basePath, FallbackHandler handler) { + + if (!adapter.canAdapt(sender)) { + adapter.failedAdaptAction(); + + throw new IllegalSenderException("Sender is not instance of correct type!"); //TODO more fallback bullshit :) + } + + return new SpigotContext<>(adapter.adapt(sender), alias,strings,executedNode,baseNode,executedPath,basePath,handler); + } + + @Override + public Context produce(C sender, String alias, String[] strings) { + return produce(sender, alias, strings,null,null,null,null,null); + } +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java index 12517cc..8df5e86 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java @@ -1,4 +1,30 @@ package me.aurium.beetle.branch.spigot; -public class SpigotManager { +import me.aurium.beetle.branch.launchpoints.CentralizedManager; +import me.aurium.beetle.branch.launchpoints.CentralizedManagerBinder; +import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; +import me.aurium.beetle.branch.launchpoints.base.NodeBaseBuilder; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.java.JavaPlugin; + +public class SpigotManager implements CentralizedManager { + + private final SenderAdapter adapter = new SenderAdapter(); + + @Override + public CentralizedManagerBinder getBinder(JavaPlugin platform) { + return new SpigotManagerBinder(platform); + } + + @Override + public NodeBaseBuilder newCommand() { + return newCommand(adapter); + } + + @Override + public NodeBaseBuilder newCommand(ManagerAdapter adapter) { + return new NodeBaseBuilder<>(new SpigotContextProducer<>(adapter)); + } + + } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManagerBinder.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManagerBinder.java new file mode 100644 index 0000000..4fe2850 --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManagerBinder.java @@ -0,0 +1,18 @@ +package me.aurium.beetle.branch.spigot; + +import me.aurium.beetle.branch.launchpoints.CentralizedManagerBinder; +import org.bukkit.plugin.java.JavaPlugin; + +public class SpigotManagerBinder implements CentralizedManagerBinder { + + private final JavaPlugin plugin; + + public SpigotManagerBinder(JavaPlugin plugin) { + this.plugin = plugin; + } + + @Override + public void bind() { //TODO implement + plugin.getServer().getPluginManager(); + } +} diff --git a/spigot-impl/src/test/java/me/aurium/beetle/branch/spigot/ExampleBinding.java b/spigot-impl/src/test/java/me/aurium/beetle/branch/spigot/ExampleBinding.java new file mode 100644 index 0000000..abe418c --- /dev/null +++ b/spigot-impl/src/test/java/me/aurium/beetle/branch/spigot/ExampleBinding.java @@ -0,0 +1,19 @@ +package me.aurium.beetle.branch.spigot; + +import me.aurium.beetle.branch.nodes.builders.SingleBuilder; +import org.bukkit.plugin.java.JavaPlugin; + +public class ExampleBinding extends JavaPlugin { + + + private static final SpigotManager manager = new SpigotManager(); + + @Override + public void onEnable() { + manager.getBinder(this).bind(); + + + + + } +} From 9b02557f1161d0b113f9dceae6ace6132466777a Mon Sep 17 00:00:00 2001 From: Aurium Date: Mon, 29 Mar 2021 20:26:01 -0700 Subject: [PATCH 25/56] pre-handler save commit --- .../branch/annotate/AnnotatedParser.java | 2 +- .../parsers/SingleAnnotatedParser.java | 2 + .../beetle/branch/argument/Arguments.java | 4 - .../argument/DelegatingArgumentContext.java | 67 ------ .../me/aurium/beetle/branch/block/Block.java | 9 +- .../aurium/beetle/branch/block/BlockList.java | 20 -- .../aurium/beetle/branch/block/BlockPath.java | 48 ----- .../beetle/branch/block/CommonBlockPath.java | 190 ------------------ .../branch/block/DelegatingBlockList.java | 52 ----- .../beetle/branch/block/EmptyBlock.java | 14 +- .../beetle/branch/block/StringBlock.java | 12 +- .../branch/fallback/failure/Failure.java | 13 ++ .../fallback/failure/SendableFailure.java | 30 +++ .../branch/fallback/message/BaseContext.java | 11 + .../message/BuilderMessageProvider.java | 20 -- .../branch/fallback/message/CommonKeys.java | 7 + .../message/FallbackMessagePrettier.java | 9 - .../message/FallbackMessageProvider.java | 4 - .../branch/fallback/message/Message.java | 7 + .../fallback/message/MessageHandler.java | 7 + .../branch/fallback/message/MessageInfo.java | 21 ++ .../branch/fallback/message/MessageKey.java | 16 ++ .../fallback/message/MessageProvider.java | 10 + .../message/MessageProviderFactory.java | 9 - .../fallback/message/MessageRequirement.java | 24 +++ .../message/impl/CommonMessageHandler.java | 27 +++ ...tBuilderMessageProvider.java => Shit.java} | 12 +- .../strategies/AutoFallbackPermStrategy.java | 16 -- .../strategies/CommonFallbackStrategy.java | 78 +++++++ .../strategies/ExecutionFallbackStrategy.java | 10 +- .../strategies/FallbackPermStrategy.java | 70 ------- .../strategies/PassthroughStrategy.java | 26 --- .../handlers/EmptySuggestionHandler.java | 3 +- .../branch/handlers/api/BranchHandler.java | 12 ++ .../handlers/api/SuggestionHandler.java | 3 +- .../handlers/context/AbstractNodeContext.java | 44 ++-- .../handlers/context/ContextProducer.java | 8 +- .../branch/handlers/context/NodeContext.java | 15 +- .../launchpoints/base/NodeBaseBuilder.java | 10 +- .../launchpoints/base/SimpleBaseContext.java | 18 ++ .../launchpoints/base/SimpleNodeBase.java | 16 +- .../typeadapter/ManagerAdapter.java | 1 - .../beetle/branch/nodes/ArgumentNode.java | 31 ++- .../beetle/branch/nodes/BranchingNode.java | 53 +++-- .../beetle/branch/nodes/SingleNode.java | 17 +- .../branch/{ => nodes}/argument/Argument.java | 2 +- .../{ => nodes}/argument/ArgumentContext.java | 2 +- .../argument/ArgumentContextHandler.java | 2 +- .../nodes/argument/ArgumentConvertet.java | 4 + .../branch/nodes/argument/Arguments.java | 4 + .../nodes/builders/BranchingBuilder.java | 14 +- .../beetle/branch/nodes/builders/Builder.java | 5 +- .../branch/nodes/builders/SingleBuilder.java | 2 +- .../nodes/{api => model}/CommandNode.java | 11 +- .../nodes/{api => model}/EndpointNode.java | 2 +- .../{api => model}/IdentifiableNode.java | 2 +- .../branch/nodes/model/ResponseHandler.java | 4 + .../branch/nodes/result/NodeResult.java | 23 --- .../{result => results}/ExecutionResult.java | 2 +- .../branch/nodes/results/SearchInfo.java | 33 +++ .../branch/nodes/results/SearchInput.java | 48 +++++ .../nodes/results/SuggestionResult.java | 4 + .../nodes/results/model/FailingResult.java | 24 +++ .../branch/nodes/results/model/Result.java | 12 ++ .../nodes/results/model/SuccessfulResult.java | 24 +++ .../beetle/branch/spigot/SpigotContext.java | 12 +- .../branch/spigot/SpigotContextProducer.java | 16 +- .../spigot/message/SpigotMessageProvider.java | 22 ++ .../branch/spigot/message/TextMessage.java | 18 ++ .../beetle/branch/spigot/ExampleBinding.java | 1 - spigot-impl/src/test/resources/plugin.yml | 0 71 files changed, 650 insertions(+), 721 deletions(-) delete mode 100644 core/src/main/java/me/aurium/beetle/branch/argument/Arguments.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/argument/DelegatingArgumentContext.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/block/BlockList.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/block/BlockPath.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/block/DelegatingBlockList.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/failure/Failure.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/failure/SendableFailure.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/BaseContext.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/BuilderMessageProvider.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/CommonKeys.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessagePrettier.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessageProvider.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/Message.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageInfo.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageKey.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProvider.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProviderFactory.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageRequirement.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/CommonMessageHandler.java rename core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/{DefaultBuilderMessageProvider.java => Shit.java} (82%) delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/AutoFallbackPermStrategy.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/CommonFallbackStrategy.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleBaseContext.java rename core/src/main/java/me/aurium/beetle/branch/{ => nodes}/argument/Argument.java (91%) rename core/src/main/java/me/aurium/beetle/branch/{ => nodes}/argument/ArgumentContext.java (77%) rename core/src/main/java/me/aurium/beetle/branch/{ => nodes}/argument/ArgumentContextHandler.java (66%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentConvertet.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/argument/Arguments.java rename core/src/main/java/me/aurium/beetle/branch/nodes/{api => model}/CommandNode.java (62%) rename core/src/main/java/me/aurium/beetle/branch/nodes/{api => model}/EndpointNode.java (83%) rename core/src/main/java/me/aurium/beetle/branch/nodes/{api => model}/IdentifiableNode.java (75%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/model/ResponseHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java rename core/src/main/java/me/aurium/beetle/branch/nodes/{result => results}/ExecutionResult.java (91%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/results/SearchInfo.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/results/SearchInput.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/results/SuggestionResult.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java create mode 100644 spigot-impl/src/test/resources/plugin.yml diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java index c39f358..7cd0c4d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/AnnotatedParser.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.annotate; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; public interface AnnotatedParser { diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java index d615956..8b87a8e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/SingleAnnotatedParser.java @@ -40,6 +40,8 @@ public List> parse(Class implements ArgumentContext{ - - private final NodeContext delegate; - private final Arguments arguments; - - public DelegatingArgumentContext(NodeContext delegate, Arguments arguments) { - this.delegate = delegate; - this.arguments = arguments; - } - - @Override - public T getSender() { - return delegate.getSender(); - } - - @Override - public String getAlias() { - return delegate.getAlias(); - } - - @Override - public String[] getArgs() { - return delegate.getArgs(); - } - - @Override - public void messageSender(String string) { - delegate.messageSender(string); - } - - @Override - public CommandNode getExecutedNode() { - return delegate.getExecutedNode(); - } - - @Override - public CommandNode getBaseExecutedNode() { - return delegate.getBaseExecutedNode(); - } - - @Override - public BlockPath executedPath() { - return delegate.executedPath(); - } - - @Override - public BlockPath fullPath() { - return delegate.fullPath(); - } - - @Override - public FallbackHandler getFallbackAction() { - return delegate.getFallbackAction(); - } - - @Override - public Arguments getArgumentContainer() { - return arguments; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/block/Block.java b/core/src/main/java/me/aurium/beetle/branch/block/Block.java index aef4888..e24b841 100644 --- a/core/src/main/java/me/aurium/beetle/branch/block/Block.java +++ b/core/src/main/java/me/aurium/beetle/branch/block/Block.java @@ -3,15 +3,8 @@ public interface Block { String getIdentifier(); - BlockPath asSingleBlockpath(); boolean equals(Object object); - - default void addLast(BlockList list) { - list.addLast(this); - } - default void addFirst(BlockList list) { - list.addFirst(this); - } + boolean isEmpty(); } diff --git a/core/src/main/java/me/aurium/beetle/branch/block/BlockList.java b/core/src/main/java/me/aurium/beetle/branch/block/BlockList.java deleted file mode 100644 index 1fcd238..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/block/BlockList.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.aurium.beetle.branch.block; - -import java.util.List; - -public interface BlockList{ - - void addFirst(Block block); - void addLast(Block block); - - void removeLast(); - - Block getFirst(); - Block getLast(); - - boolean isEmpty(); - int size(); - - List getBackingList(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/block/BlockPath.java b/core/src/main/java/me/aurium/beetle/branch/block/BlockPath.java deleted file mode 100644 index f023c09..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/block/BlockPath.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.aurium.beetle.branch.block; - -public interface BlockPath { - - boolean isEmpty(); - - boolean isSevered(); - boolean endsWith(Block path); - boolean startsWith(Block path); - - - BlockPath getRoot(); - BlockPath getParent(); - - /** - * Adds all the blocks from a path - * @param path the path to add - * @return a cloned path plus all the blocks from that path - */ - BlockPath resolve(BlockPath path); - - /** - * Adds the block to this path - * @param block the block to add - * @return a cloned path plus that block - */ - BlockPath resolve(Block block); - - BlockPath withoutBase(); - BlockPath withoutTop(); - - BlockPath fromIndex(int index); - - int length(); - - /** - * Returns an ordered set of blocks - * @return ordered set of blocks - */ - BlockList getAllBlocks(); - - /** - * DO NOT USE THIS FOR COMPARISONS. THIS IS FOR DEBUGGING ONLY. - * @return - */ - String toString(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java b/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java deleted file mode 100644 index d928916..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/block/CommonBlockPath.java +++ /dev/null @@ -1,190 +0,0 @@ -package me.aurium.beetle.branch.block; - -import java.util.ArrayList; - -public class CommonBlockPath implements BlockPath { - - public final static String COMMON_SPLITTER = "-"; - - private final BlockPath root; - private final BlockPath parent; - private final BlockList blocks; - private final boolean isSevered; - private final String splitter; - - public CommonBlockPath(BlockPath root, BlockPath parent, BlockList blocks, boolean isSevered, String splitter) { - this.root = root; - this.parent = parent; - this.blocks = blocks; - this.isSevered = isSevered; - this.splitter = splitter; - } - - public CommonBlockPath(BlockList list, boolean isSevered, String splitter) { - this.root = this; - this.parent = this; - this.blocks = list; - this.isSevered = isSevered; - this.splitter = splitter; - } - - public CommonBlockPath(String splitter) { - this.root = this; - this.parent = this; - this.blocks = new DelegatingBlockList(new ArrayList<>()); - this.isSevered = true; - this.splitter = splitter; - } - - @Override - public boolean isEmpty() { - return blocks.isEmpty(); - } - - @Override - public boolean isSevered() { - return isSevered; - } - - @Override - public boolean endsWith(Block path) { - return blocks.getLast().equals(path); - } - - @Override - public boolean startsWith(Block path) { - return blocks.getFirst().equals(path); - } - - @Override - public BlockPath getRoot() { - return root; - } - - @Override - public BlockPath getParent() { - return parent; - } - - @Override - public BlockPath resolve(BlockPath path) { - - BlockList pathBlocks = this.blocks; - - for (Block block : path.getAllBlocks().getBackingList()) { - block.addLast(pathBlocks); - } - - return new CommonBlockPath(root,this,pathBlocks,pathBlocks.size() > 1,this.splitter); - } - - @Override - public BlockPath resolve(Block block) { - - BlockList pathBlocks = this.blocks; - - block.addLast(pathBlocks); - - return new CommonBlockPath(root,this,pathBlocks,pathBlocks.size() > 1,this.splitter); - } - - @Override - public BlockPath withoutBase() { - return fromIndex(0); - } - - @Override //TODO need a logic check here - public BlockPath withoutTop() { - BlockList clone = new DelegatingBlockList(new ArrayList<>( - blocks.getBackingList() - )); - - clone.removeLast(); - - return new CommonBlockPath(root,parent.getParent(),clone,clone.size() > 1, splitter); - } - - @Override - public BlockPath fromIndex(int index) { - BlockList clone = new DelegatingBlockList(new ArrayList<>( - blocks.getBackingList().subList(index,blocks.size()) - )); - - return new CommonBlockPath(clone.getBackingList().get(0).asSingleBlockpath(),this.parent,clone,clone.size() > 1,splitter); - } - - @Override - public int length() { - return blocks.size(); - } - - @Override - public BlockList getAllBlocks() { - return this.blocks; - } - - @Override - public String toString() { - - StringBuilder base = new StringBuilder(); - - for (Block block : this.blocks.getBackingList()) { - base.append('{').append(block.getIdentifier()).append('}'); - } - - - //TODO: fix this: - return base.toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CommonBlockPath that = (CommonBlockPath) o; - return blocks.equals(that.blocks); - } - - @Override - public int hashCode() { - return blocks.hashCode(); - } - - public static BlockPath ofEmpty() { - return new CommonBlockPath(COMMON_SPLITTER); - } - - public static BlockPath of(String string, String splitter) { - String[] subparts = string.split(splitter); - - return of(subparts,splitter); - } - - public static BlockPath of(String[] commandArguments, String splitter) { - BlockList blocklist = new DelegatingBlockList(new ArrayList<>()); - - for (String s : commandArguments) { - blocklist.addLast(StringBlock.of(s)); - } - - return new CommonBlockPath(blocklist,commandArguments.length > 1,splitter); - } - - public static BlockPath of(Block block, String splitter) { - BlockList send = new DelegatingBlockList(new ArrayList<>()); - send.addLast(block); - return new CommonBlockPath(send,true,splitter); - } - - public static BlockPath of(String string) { - return of(string,COMMON_SPLITTER); - } - - public static BlockPath of(String[] commandArguments) { - return of(commandArguments,COMMON_SPLITTER); - } - - public static BlockPath of(Block block) { - return of(block,COMMON_SPLITTER); - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/block/DelegatingBlockList.java b/core/src/main/java/me/aurium/beetle/branch/block/DelegatingBlockList.java deleted file mode 100644 index 0422516..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/block/DelegatingBlockList.java +++ /dev/null @@ -1,52 +0,0 @@ -package me.aurium.beetle.branch.block; - -import java.util.List; - -public class DelegatingBlockList implements BlockList{ - - private final List blocks; - - public DelegatingBlockList(List blocks) { - this.blocks = blocks; - } - - @Override - public void addFirst(Block block) { - blocks.add(0,block); - } - - @Override - public void addLast(Block block) { - blocks.add(block); - } - - @Override - public void removeLast() { - blocks.remove(blocks.size()-1); - } - - @Override - public Block getFirst() { - return blocks.get(0); - } - - @Override - public Block getLast() { - return blocks.get(blocks.size()-1); - } - - @Override - public boolean isEmpty() { - return blocks.isEmpty(); - } - - @Override - public int size() { - return blocks.size(); - } - - @Override - public List getBackingList() { - return blocks; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/block/EmptyBlock.java b/core/src/main/java/me/aurium/beetle/branch/block/EmptyBlock.java index 8b5558c..58a704a 100644 --- a/core/src/main/java/me/aurium/beetle/branch/block/EmptyBlock.java +++ b/core/src/main/java/me/aurium/beetle/branch/block/EmptyBlock.java @@ -8,18 +8,8 @@ public String getIdentifier() { } @Override - public BlockPath asSingleBlockpath() { - return CommonBlockPath.ofEmpty(); - } - - @Override - public void addFirst(BlockList list) { - //nooops - } - - @Override - public void addLast(BlockList list) { - //noops + public boolean isEmpty() { + return true; } public static EmptyBlock of() { diff --git a/core/src/main/java/me/aurium/beetle/branch/block/StringBlock.java b/core/src/main/java/me/aurium/beetle/branch/block/StringBlock.java index 1cc122a..6dc4374 100644 --- a/core/src/main/java/me/aurium/beetle/branch/block/StringBlock.java +++ b/core/src/main/java/me/aurium/beetle/branch/block/StringBlock.java @@ -4,7 +4,7 @@ public class StringBlock implements Block { private final String identifier; - StringBlock(String identifier) { + public StringBlock(String identifier) { this.identifier = identifier; } @@ -13,11 +13,6 @@ public String getIdentifier() { return identifier; } - @Override - public BlockPath asSingleBlockpath() { - return CommonBlockPath.of(this); - } - public static Block of(String string) { if (string.contains(" ")) throw new IllegalStateException("Identifier cannot have spaces!"); @@ -32,6 +27,11 @@ public boolean equals(Object o) { return identifier.equalsIgnoreCase(that.identifier); } + @Override + public boolean isEmpty() { + return false; + } + @Override public int hashCode() { return identifier.hashCode(); diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/failure/Failure.java b/core/src/main/java/me/aurium/beetle/branch/fallback/failure/Failure.java new file mode 100644 index 0000000..b2d9495 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/failure/Failure.java @@ -0,0 +1,13 @@ +package me.aurium.beetle.branch.fallback.failure; + +import me.aurium.beetle.branch.fallback.message.MessageKey; +import me.aurium.beetle.branch.fallback.message.MessageRequirement; + +public interface Failure { + + MessageKey getCorrelatedMessage(); + MessageRequirement[] getRequirements(); + + Throwable toThrowable(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/failure/SendableFailure.java b/core/src/main/java/me/aurium/beetle/branch/fallback/failure/SendableFailure.java new file mode 100644 index 0000000..ff624a5 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/failure/SendableFailure.java @@ -0,0 +1,30 @@ +package me.aurium.beetle.branch.fallback.failure; + +import me.aurium.beetle.branch.fallback.message.MessageKey; +import me.aurium.beetle.branch.fallback.message.MessageRequirement; + +public class SendableFailure implements Failure{ + + private final MessageKey key; + private final MessageRequirement[] requirements; + + public SendableFailure(MessageKey key, MessageRequirement... requirements) { + this.key = key; + this.requirements = requirements; + } + + @Override + public MessageKey getCorrelatedMessage() { + return key; + } + + @Override + public MessageRequirement[] getRequirements() { + return requirements; + } + + @Override + public Throwable toThrowable() { + return new IllegalStateException(); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/BaseContext.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/BaseContext.java new file mode 100644 index 0000000..0db1c78 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/BaseContext.java @@ -0,0 +1,11 @@ +package me.aurium.beetle.branch.fallback.message; + +import me.aurium.beetle.branch.handlers.api.FallbackHandler; + +public interface BaseContext { + + FallbackHandler getFallback(); + + //TODO message stuff + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/BuilderMessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/BuilderMessageProvider.java deleted file mode 100644 index 5150506..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/BuilderMessageProvider.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -import me.aurium.beetle.branch.handlers.context.NodeContext; - -/** - * Might not be the most scalable thing in the world but who the fuck cares - * - * I can't think of any nodes besides single (do an action) branching (do an action or separate out based on top buffer arg) - * and value (do an action or separate action based on buffer from this argument) - * - * so who cares? This will give me fallback messages - * @param - */ -public interface BuilderMessageProvider { - - void handleDefaultSingle(NodeContext context); - void handleDefaultBranching(NodeContext context); - void handleDefaultValue(NodeContext context); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/CommonKeys.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/CommonKeys.java new file mode 100644 index 0000000..b0a2054 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/CommonKeys.java @@ -0,0 +1,7 @@ +package me.aurium.beetle.branch.fallback.message; + +public class CommonKeys { + + public static final MessageKey TOO_MANY_ARGS = new MessageKey("TOO_MANY_ARGS"); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessagePrettier.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessagePrettier.java deleted file mode 100644 index 3e136c0..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessagePrettier.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -/** - * Makes messages pretty - */ -public interface FallbackMessagePrettier { - - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessageProvider.java deleted file mode 100644 index acd1817..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/FallbackMessageProvider.java +++ /dev/null @@ -1,4 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -public interface FallbackMessageProvider { -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/Message.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/Message.java new file mode 100644 index 0000000..ecc910c --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/Message.java @@ -0,0 +1,7 @@ +package me.aurium.beetle.branch.fallback.message; + +public interface Message { + + void accept(C c, Object... strings); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageHandler.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageHandler.java new file mode 100644 index 0000000..3f2c7aa --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageHandler.java @@ -0,0 +1,7 @@ +package me.aurium.beetle.branch.fallback.message; + +public interface MessageHandler { + + void sendMessage(T t, MessageInfo key); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageInfo.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageInfo.java new file mode 100644 index 0000000..2100c6b --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageInfo.java @@ -0,0 +1,21 @@ +package me.aurium.beetle.branch.fallback.message; + +public class MessageInfo { + + private final MessageKey key; + private final Object[] args; + + public MessageInfo(MessageKey key, Object[] args) { + this.key = key; + this.args = args; + } + + public MessageKey getKey() { + return key; + } + + public Object[] getStrings() { + return args; + } + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageKey.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageKey.java new file mode 100644 index 0000000..4dd0382 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageKey.java @@ -0,0 +1,16 @@ +package me.aurium.beetle.branch.fallback.message; + +public class MessageKey { + + private final String key; + + public MessageKey(String key) { + this.key = key; + } + + public String getKey() { + return key; + } + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProvider.java new file mode 100644 index 0000000..6b6338d --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProvider.java @@ -0,0 +1,10 @@ +package me.aurium.beetle.branch.fallback.message; + +import java.util.HashMap; +import java.util.Map; + +public interface MessageProvider { + + Map> make(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProviderFactory.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProviderFactory.java deleted file mode 100644 index 03e47f7..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProviderFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -public class MessageProviderFactory { - - public static BuilderMessageProvider getProvider() { - return null; - } - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageRequirement.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageRequirement.java new file mode 100644 index 0000000..933f94e --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageRequirement.java @@ -0,0 +1,24 @@ +package me.aurium.beetle.branch.fallback.message; + +public class MessageRequirement { + + private final String key; + private final String value; + + private MessageRequirement(String key, String value) { + this.key = key; + this.value = value; + } + + public static MessageRequirement of(String key, String value) { + return new MessageRequirement(key, value); + } + + public String getKey() { + return this.key; + } + + public String getValue() { + return this.value; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/CommonMessageHandler.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/CommonMessageHandler.java new file mode 100644 index 0000000..0ec2584 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/CommonMessageHandler.java @@ -0,0 +1,27 @@ +package me.aurium.beetle.branch.fallback.message.impl; + +import me.aurium.beetle.branch.fallback.message.*; + +import java.util.Map; + +public class CommonMessageHandler implements MessageHandler { + + private final Map> messages; + + public CommonMessageHandler(Map> messages) { + this.messages = messages; + } + + public CommonMessageHandler(MessageProvider messages) { + this.messages = messages.make(); + } + + @Override + public void sendMessage(T t, MessageInfo info) { + Message message = messages.get(info.getKey()); + + if (message == null) throw new IllegalArgumentException("No message mapped to key!"); + + message.accept(t); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/DefaultBuilderMessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/Shit.java similarity index 82% rename from core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/DefaultBuilderMessageProvider.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/Shit.java index d94ed2d..c61e2e7 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/DefaultBuilderMessageProvider.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/Shit.java @@ -1,10 +1,7 @@ package me.aurium.beetle.branch.fallback.message.impl; -import me.aurium.beetle.branch.fallback.message.BuilderMessageProvider; import me.aurium.beetle.branch.handlers.context.NodeContext; - -import java.util.ArrayList; -import java.util.List; +/* public class DefaultBuilderMessageProvider implements BuilderMessageProvider { @@ -17,7 +14,8 @@ public void handleDefaultSingle(NodeContext context) { @Override public void handleDefaultBranching(NodeContext context) { - StringBuilder fuk = new StringBuilder("/"); + */ +/*StringBuilder fuk = new StringBuilder("/"); context.fullPath().withoutTop().getAllBlocks().getBackingList().forEach(blok -> { fuk.append(blok).append(" "); @@ -29,7 +27,8 @@ public void handleDefaultBranching(NodeContext context) { for (String string : alternatives) { context.messageSender(finalFuk + string); - } + }*//* + } @@ -39,3 +38,4 @@ public void handleDefaultValue(NodeContext context) { } } +*/ diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/AutoFallbackPermStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/AutoFallbackPermStrategy.java deleted file mode 100644 index f4b9c74..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/AutoFallbackPermStrategy.java +++ /dev/null @@ -1,16 +0,0 @@ -package me.aurium.beetle.branch.fallback.permission.strategies; - -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.handlers.context.ContextProducer; -import me.aurium.beetle.branch.nodes.api.CommandNode; - -public class AutoFallbackPermStrategy implements ExecutionFallbackStrategy { - @Override - public void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer) { - - } - - //TODO make this autogenerate messages for failure - - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/CommonFallbackStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/CommonFallbackStrategy.java new file mode 100644 index 0000000..057a3d4 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/CommonFallbackStrategy.java @@ -0,0 +1,78 @@ +package me.aurium.beetle.branch.fallback.permission.strategies; + +import me.aurium.beetle.branch.fallback.message.BaseContext; +import me.aurium.beetle.branch.handlers.context.ContextProducer; +import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInput; +import me.aurium.beetle.branch.nodes.results.SearchInfo; +import me.aurium.beetle.branch.nodes.results.model.Result; + +import java.util.Optional; + +public class CommonFallbackStrategy implements ExecutionFallbackStrategy { + + @Override + public Optional> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode) { + + SearchInput input = SearchInput.of(args); + + SearchInfo toBeExecuted = baseNode.getSpecificNode(input); + + + //1. Check permissions and access (preprocessing) + + while (!toBeExecuted.resultingNode().getPermission().attempt(sender, alias, args) || toBeExecuted.resultingNode().getExecutionHandler().getExecution().isEmpty()) { + //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. + + if (toBeExecuted.resultingNode().equals(baseNode)) { + return Optional.empty(); + + } else { + toBeExecuted = baseNode.getSpecificNode(input.withoutTop()); //regress backwards a node + } + } + + return Optional.of(toBeExecuted); + } + + + @Override + public void attemptExecution(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result, BaseContext baseContext, ContextProducer producer) { + NodeContext produced = producer.produce(sender,alias,args,baseNode, result, baseContext); + + result.resultingNode().getExecutionHandler().getExecution().orElseThrow().handle(produced); //this should never be null thanks to the preprocess + } + + + //TODO old code - refer to it if you need to + /*SearchInput input = SearchInput.of(args); + + SearchResult toBeExecuted = baseNode.getSpecificNode(input); + + Context failed = producer.produce(sender,alias,args); + + //1. Check permissions and access (preprocessing) + + while (!toBeExecuted.resultingNode().getPermission().attempt(sender, alias, args) || toBeExecuted.resultingNode().getExecutionHandler().getExecution().isEmpty()) { + //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. + + if (toBeExecuted.resultingNode().equals(baseNode)) { + + fallback.handle(failed); + + return Optional.empty(); + + } else { + toBeExecuted = baseNode.getSpecificNode(input.withoutTop()); //regress backwards a node + } + } + + return Optional.of(toBeExecuted); + + //execute and process + + NodeContext produced = producer.produce(sender,alias,args,toBeExecuted.resultingNode(), baseNode, toBeExecuted.reducedPath(), toBeExecuted.initialPath(), fallback); + + toBeExecuted.resultingNode().getExecutionHandler().getExecution().get().handle(produced);*/ +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java index 3055387..c903cef 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java @@ -1,13 +1,17 @@ package me.aurium.beetle.branch.fallback.permission.strategies; +import me.aurium.beetle.branch.fallback.message.BaseContext; import me.aurium.beetle.branch.handlers.context.ContextProducer; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInfo; + +import java.util.Optional; public interface ExecutionFallbackStrategy { - void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer); + Optional> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode); + void attemptExecution(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result, BaseContext baseContext, ContextProducer producer); diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java deleted file mode 100644 index f11c12b..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/FallbackPermStrategy.java +++ /dev/null @@ -1,70 +0,0 @@ -package me.aurium.beetle.branch.fallback.permission.strategies; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.block.CommonBlockPath; -import me.aurium.beetle.branch.handlers.context.Context; -import me.aurium.beetle.branch.handlers.context.ContextProducer; -import me.aurium.beetle.branch.handlers.context.NodeContext; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.nodes.result.NodeResult; - -/** - * Advanced startegy that does things: - * - * Parses a testing blockpath from existing args. It then finds the linked node from that path. There must be one, - * because even incorrect args will link to the base node or to a branching node like the branch node implementation. - * - * It checks the permissions first. If the sender does not have access to that specific node, or the node is missing a handler - * it will go one node up in the map and check it for permission. It will repeat this until it can find a permissible node, - * or until it reaches the base node. - * - * If the user does not have access to run the base node for some reason, it will call the fallback handler. - * - * TODO please check the logic here. - * - * @param - */ -public class FallbackPermStrategy implements ExecutionFallbackStrategy { - - @Override - public void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer) { - BlockPath pathToTest = CommonBlockPath.of(args); - NodeResult toBeExecuted = baseNode.getSpecificNode(pathToTest); - - Context failed = producer.produce(sender,alias,args); - - //1. Check permissions and access - - while (!toBeExecuted.resultingNode().getPermission().attempt(sender, alias, args) || toBeExecuted.resultingNode().getExecutionHandler().getExecution().isEmpty()) { - //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. - - if (toBeExecuted.resultingNode().equals(baseNode)) { - - fallback.handle(failed); - - return; - - } else { - - pathToTest = pathToTest.withoutTop(); - - toBeExecuted = baseNode.getSpecificNode(pathToTest); //regress backwards a node - } - } - - NodeContext produced = producer.produce(sender,alias,args, toBeExecuted.resultingNode(), baseNode, toBeExecuted.resultingPath(), pathToTest, fallback); - - toBeExecuted.resultingNode().getExecutionHandler().getExecution().get().handle(produced); - } - - //TODO a248, this is one of the most important classes. in depth logic review because all of this is untested - // and i have no idea if it's gonna work haha. Also if you can think of a way to reduce the boilerplate of the while loops that'd - // be nice but i'm pretty sure theyre essential - - - - - - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java deleted file mode 100644 index 111870d..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/PassthroughStrategy.java +++ /dev/null @@ -1,26 +0,0 @@ -package me.aurium.beetle.branch.fallback.permission.strategies; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.block.CommonBlockPath; -import me.aurium.beetle.branch.handlers.context.ContextProducer; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.nodes.result.NodeResult; - -/** - * Ignores everything and tries to execute ignoring permissions or fallbacks. If something goes wrong it delegates to the fallback handler immediately - * @param - */ -public class PassthroughStrategy implements ExecutionFallbackStrategy { - @Override - public void executeStrategy(T sender, String alias, String[] args, CommandNode baseNode, FallbackHandler fallback, ContextProducer producer) { - BlockPath path = CommonBlockPath.of(args); - - NodeResult result = baseNode.getSpecificNode(path); - - result.resultingNode().getExecutionHandler().getExecution().ifPresentOrElse( - present -> present.handle(producer.produce(sender,alias,args, result.resultingNode(), baseNode, result.resultingPath(), path, fallback)), - () -> { fallback.handle(producer.produce(sender,alias,args)); - }); - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java index 6fb5c4d..daac0e0 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java @@ -1,5 +1,6 @@ package me.aurium.beetle.branch.handlers; +import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; @@ -11,7 +12,7 @@ public class EmptySuggestionHandler implements SuggestionHandler { private final List emptyList = new ArrayList<>(); @Override - public List handle(NodeContext adapter) { + public List handle(NodeContext adapter) { return List.of(); } } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java new file mode 100644 index 0000000..4d4ac58 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java @@ -0,0 +1,12 @@ +package me.aurium.beetle.branch.handlers.api; + +import me.aurium.beetle.branch.handlers.context.NodeContext; + +import java.util.List; + +public interface BranchHandler { + + void getExecution(NodeContext context); + List getSuggestions(NodeContext context); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java index 5225a93..b96c285 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java @@ -1,11 +1,12 @@ package me.aurium.beetle.branch.handlers.api; +import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.handlers.context.NodeContext; import java.util.List; public interface SuggestionHandler { - List handle(NodeContext context); + List handle(NodeContext context); } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java index e0240d2..bd253c2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java @@ -1,49 +1,35 @@ package me.aurium.beetle.branch.handlers.context; -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.fallback.message.BaseContext; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInfo; public abstract class AbstractNodeContext extends AbstractContext implements NodeContext { - private final CommandNode executed; - private final CommandNode base; - private final BlockPath executedPath; - private final BlockPath fullPath; - private final FallbackHandler handler; + private final CommandNode baseNode; + private final SearchInfo searchInfo; + private final BaseContext baseContext; - protected AbstractNodeContext(T t, String alias, String[] strings, CommandNode executedNode, CommandNode baseNode, BlockPath executedPath, BlockPath basePath, FallbackHandler handler) { + protected AbstractNodeContext(T t, String alias, String[] strings, CommandNode baseNode, SearchInfo result, BaseContext baseContext) { super(t, alias, strings); - this.executed = executedNode; - this.base = baseNode; - this.executedPath = executedPath; - this.fullPath = basePath; - this.handler = handler; - } - @Override - public CommandNode getExecutedNode() { - return executed; + this.baseContext = baseContext; + this.searchInfo = result; + this.baseNode = baseNode; } @Override public CommandNode getBaseExecutedNode() { - return base; - } - - @Override - public BlockPath executedPath() { - return executedPath; + return baseNode; } @Override - public BlockPath fullPath() { - return fullPath; + public SearchInfo getResults() { + return searchInfo; } @Override - public FallbackHandler getFallbackAction() { - return handler; + public BaseContext getBaseContext() { + return baseContext; } - } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java index 6c7fc7b..72f672b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java @@ -1,15 +1,15 @@ package me.aurium.beetle.branch.handlers.context; -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.fallback.message.BaseContext; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInfo; /** * Produces context adapters, like the stock ContextSource for contexts. */ public interface ContextProducer { - NodeContext produce(T sender, String alias, String[] strings, CommandNode executedNode, CommandNode baseNode, BlockPath executedPath, BlockPath basePath, FallbackHandler handler); + NodeContext produce(T sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search, BaseContext baseContext); Context produce(T sender, String alias, String[] strings); diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java index 741cd0e..77924db 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java @@ -1,21 +1,16 @@ package me.aurium.beetle.branch.handlers.context; -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.fallback.message.BaseContext; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInfo; public interface NodeContext extends Context { - CommandNode getExecutedNode(); CommandNode getBaseExecutedNode(); - BlockPath executedPath(); - BlockPath fullPath(); - - boolean equals(Object comparison); - - FallbackHandler getFallbackAction(); + SearchInfo getResults(); + BaseContext getBaseContext(); //TODO add more cool features like the debug message sender, // because NodeContext should be a collection of both context and context-specific actions? /review a248 diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java index 722c31e..7850d1d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java @@ -1,10 +1,10 @@ package me.aurium.beetle.branch.launchpoints.base; +import me.aurium.beetle.branch.fallback.permission.strategies.CommonFallbackStrategy; import me.aurium.beetle.branch.handlers.context.ContextProducer; import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.fallback.permission.strategies.ExecutionFallbackStrategy; -import me.aurium.beetle.branch.fallback.permission.strategies.FallbackPermStrategy; import java.util.Arrays; import java.util.Objects; @@ -15,7 +15,7 @@ public class NodeBaseBuilder { private CommandNode base; private FallbackHandler fallbackHandler = (shit) -> shit.messageSender("Error running command with arguments: " + Arrays.toString(shit.getArgs())); - private ExecutionFallbackStrategy strategy = new FallbackPermStrategy<>(); + private ExecutionFallbackStrategy strategy = new CommonFallbackStrategy<>(); public NodeBaseBuilder(ContextProducer producer) { this.producer = producer; @@ -44,6 +44,8 @@ public NodeBase build() { Objects.requireNonNull(fallbackHandler); Objects.requireNonNull(strategy); - return new SimpleNodeBase<>(base,producer,fallbackHandler,strategy); + return null; + + //return new SimpleNodeBase<>(base,producer,fallbackHandler,strategy); } } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleBaseContext.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleBaseContext.java new file mode 100644 index 0000000..e89eeae --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleBaseContext.java @@ -0,0 +1,18 @@ +package me.aurium.beetle.branch.launchpoints.base; + +import me.aurium.beetle.branch.fallback.message.BaseContext; +import me.aurium.beetle.branch.handlers.api.FallbackHandler; + +public class SimpleBaseContext implements BaseContext { + + private final FallbackHandler handler; + + public SimpleBaseContext(FallbackHandler handler) { + this.handler = handler; + } + + @Override + public FallbackHandler getFallback() { + return handler; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java index ff26611..83ed597 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java @@ -1,8 +1,8 @@ package me.aurium.beetle.branch.launchpoints.base; +import me.aurium.beetle.branch.fallback.message.BaseContext; import me.aurium.beetle.branch.handlers.context.ContextProducer; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.fallback.permission.strategies.ExecutionFallbackStrategy; import java.util.List; @@ -12,20 +12,24 @@ public class SimpleNodeBase implements NodeBase { private final CommandNode baseNode; private final ContextProducer factory; - private final FallbackHandler fallbackHandler; + private final BaseContext baseContext; private final ExecutionFallbackStrategy strategy; - public SimpleNodeBase(CommandNode baseNode, ContextProducer factory, FallbackHandler fallbackHandler, ExecutionFallbackStrategy strategy) { + public SimpleNodeBase(CommandNode baseNode, ContextProducer factory, BaseContext baseContext, ExecutionFallbackStrategy strategy) { this.baseNode = baseNode; this.factory = factory; - this.fallbackHandler = fallbackHandler; + this.baseContext = baseContext; this.strategy = strategy; } @Override public void execute(C executor, String alias, String[] args) { - strategy.executeStrategy(executor,alias,args,baseNode, fallbackHandler, factory); + strategy.attemptPreprocess(executor,alias,args,baseNode).ifPresentOrElse( + result -> strategy.attemptExecution(executor,alias,args,baseNode,result,baseContext,factory), + //else + () -> baseContext.getFallback().handle(factory.produce(executor, alias, args)) + ); } @Override diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java index 4e62cbe..2eb688b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java @@ -7,7 +7,6 @@ public interface ManagerAdapter { OUTPUT adapt(INPUT input); - boolean canAdapt(INPUT input); Consumer failedAdaptAction(); diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java index 3190ab2..5c0114f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/ArgumentNode.java @@ -1,19 +1,9 @@ package me.aurium.beetle.branch.nodes; -import me.aurium.beetle.branch.block.Block; -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.argument.Argument; -import me.aurium.beetle.branch.nodes.api.IdentifiableNode; -import me.aurium.beetle.branch.nodes.result.ExecutionResult; -import me.aurium.beetle.branch.nodes.result.NodeResult; -import me.aurium.beetle.branch.fallback.permission.Permission; - -import java.util.List; - //kinda like a branching node except it throws forward and not to the sides //one of these days ill actually finish this class LMFAO +/* public class ArgumentNode implements IdentifiableNode { private final Block identifier; @@ -37,15 +27,18 @@ public ArgumentNode(Block identifier, List> sequentialValueNodes, Si @Override - public NodeResult getSpecificNode(BlockPath path) { - return new NodeResult<>(this,path); + public SearchResult getSpecificNode(SearchInput input) { + return new SearchResult<>(this, input); } - /*if (path.isEmpty()) return Optional.of(noArgs); + */ +/*if (path.isEmpty()) return Optional.of(noArgs); + + return Optional.of(this);*//* - return Optional.of(this);*/ - /* This was pointless, see below note + */ +/* This was pointless, see below note //we can either do this shit, or we can return **THIS** no matter what and let the context handler be variable, since the context handler delegates //to another adapter anyways @@ -57,12 +50,13 @@ public NodeResult getSpecificNode(BlockPath path) { if (position == size) return Optional.of(sequentialValueNodes.get(size - 1)); return Optional.of(sequentialValueNodes.get(position)); - */ + *//* + @Override public ExecutionResult getExecutionHandler() { return new ExecutionResult<>((context) -> { - BlockPath executed = context.executedPath(); + Deque executed = context.executedPath(); }); } @@ -83,3 +77,4 @@ public Block getIdentifier() { return identifier; } } +*/ diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java index 8cb916d..3c0c42b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java @@ -1,17 +1,25 @@ package me.aurium.beetle.branch.nodes; import me.aurium.beetle.branch.block.Block; -import me.aurium.beetle.branch.block.BlockPath; +import me.aurium.beetle.branch.handlers.api.BranchHandler; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.nodes.api.IdentifiableNode; -import me.aurium.beetle.branch.nodes.result.*; +import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.model.IdentifiableNode; +import me.aurium.beetle.branch.nodes.results.*; import me.aurium.beetle.branch.fallback.permission.Permission; +import me.aurium.beetle.branch.nodes.results.model.FailingResult; +import me.aurium.beetle.branch.nodes.results.model.Result; import me.aurium.beetle.branch.util.PreStoredHashSet; -import java.util.stream.Collectors; +import java.util.Deque; +import java.util.List; /** - * TODO: missing a Node for noargs will cause it to rely on fallback rather than throwning exceptions and being bad + * TODO: missing a Node for noargs will cause it to rely on fallback rather than throwning exceptions and being bad (DONE - ish) + * + * Nodes should always assume that the first block in the blockpath is theirs to consume + * * @param */ public class BranchingNode implements IdentifiableNode { @@ -33,19 +41,19 @@ public Block getIdentifier() { } @Override - public NodeResult getSpecificNode(BlockPath blockPath) { + public SearchInfo getSpecificNode(SearchInput input) { - if (blockPath.isEmpty()) return new NodeResult<>(this,blockPath); + Deque blockPath = input.getReducablePath(); for (IdentifiableNode node : nodes.getContents()) { + if (blockPath.getFirst().equals(node.getIdentifier())) { + blockPath.removeFirst(); //consume - BlockPath subPath = blockPath.withoutBase(); //get everything after the index - - if (blockPath.startsWith(node.getIdentifier())) { - return node.getSpecificNode(subPath); + return node.getSpecificNode(input); } } - return new NodeResult<>(this, blockPath); + + return new SearchInfo<>(this, input); //empty handling is in the strategy } @Override @@ -64,11 +72,8 @@ public SuggestionHandler getSuggestionHandler() { //TODO sort this out return (context) -> { - //this works because this suggestion handler only gets called if we are on this object lmfao - Block matchableBlock = context.executedPath().getAllBlocks().getLast(); - - nodes.getContents().stream().map(IdentifiableNode::getIdentifier).collect(Collectors.toList()); + //this works because this suggestion handler only gets called if we are on this object lmfao return null; }; } @@ -78,5 +83,21 @@ public Permission getPermission() { return permission; } + public static final class BranchingHandler implements BranchHandler { + + private final CommandNode alreadyPresent; + + @Override + public void getExecution(NodeContext context) { + + } + + @Override + public List getSuggestions(NodeContext context) { + return null; + } + + } + } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java index 12d982d..f772c54 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java @@ -1,14 +1,16 @@ package me.aurium.beetle.branch.nodes; import me.aurium.beetle.branch.block.Block; -import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.handlers.EmptySuggestionHandler; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.nodes.api.EndpointNode; -import me.aurium.beetle.branch.nodes.result.ExecutionResult; -import me.aurium.beetle.branch.nodes.result.NodeResult; +import me.aurium.beetle.branch.nodes.model.EndpointNode; +import me.aurium.beetle.branch.nodes.results.ExecutionResult; +import me.aurium.beetle.branch.nodes.results.SearchInput; +import me.aurium.beetle.branch.nodes.results.SearchInfo; import me.aurium.beetle.branch.fallback.permission.Permission; +import me.aurium.beetle.branch.nodes.results.model.Result; +import me.aurium.beetle.branch.nodes.results.model.SuccessfulResult; public class SingleNode implements EndpointNode { @@ -34,10 +36,13 @@ public Block getIdentifier() { } @Override - public NodeResult getSpecificNode(BlockPath blockPath) { - return new NodeResult<>(this,blockPath); + public Result> getSpecificNode(SearchInput input) { + input.getReducablePath().removeFirst(); //consume + + return new SuccessfulResult<>(new SearchInfo<>(this,input)); } + //TODO these maybe need to go somewhere else to a sort of parser @Override public ExecutionResult getExecutionHandler() { return new ExecutionResult<>(executionHandler); diff --git a/core/src/main/java/me/aurium/beetle/branch/argument/Argument.java b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/Argument.java similarity index 91% rename from core/src/main/java/me/aurium/beetle/branch/argument/Argument.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/argument/Argument.java index 67de9e0..40fcee4 100644 --- a/core/src/main/java/me/aurium/beetle/branch/argument/Argument.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/Argument.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.argument; +package me.aurium.beetle.branch.nodes.argument; import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.handlers.context.NodeContext; diff --git a/core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContext.java b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentContext.java similarity index 77% rename from core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContext.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentContext.java index 33cd043..efb6561 100644 --- a/core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentContext.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.argument; +package me.aurium.beetle.branch.nodes.argument; import me.aurium.beetle.branch.handlers.context.NodeContext; diff --git a/core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContextHandler.java b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentContextHandler.java similarity index 66% rename from core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContextHandler.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentContextHandler.java index 0af2801..70dd276 100644 --- a/core/src/main/java/me/aurium/beetle/branch/argument/ArgumentContextHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentContextHandler.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.argument; +package me.aurium.beetle.branch.nodes.argument; public interface ArgumentContextHandler { diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentConvertet.java b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentConvertet.java new file mode 100644 index 0000000..50de57a --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/ArgumentConvertet.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.nodes.argument; + +public interface ArgumentConvertet { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/argument/Arguments.java b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/Arguments.java new file mode 100644 index 0000000..f8b17e0 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/argument/Arguments.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.nodes.argument; + +public class Arguments { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java index 9bc8f6c..c0b580f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java @@ -6,8 +6,8 @@ import me.aurium.beetle.branch.fallback.permission.Permission; import me.aurium.beetle.branch.fallback.permission.permissions.EmptyPermission; import me.aurium.beetle.branch.nodes.BranchingNode; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.nodes.api.IdentifiableNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.model.IdentifiableNode; import me.aurium.beetle.branch.util.PreStoredHashSet; import java.util.HashSet; @@ -47,6 +47,12 @@ public void withPermission(Permission permission) { this.permission = permission; } + public BranchingBuilder addNode(IdentifiableNode node) { + commands.add(node); + + return this; + } + public > void withNode(C key, Consumer consumer) { consumer.accept(key); @@ -100,4 +106,8 @@ public CommandNode buildWithoutIdentifier() { return new BranchingNode<>(set, EmptyBlock.of(), permission); } + + public static BranchingBuilder make() { + return new BranchingBuilder<>(); + } } \ No newline at end of file diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/Builder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/Builder.java index 2194533..eef2d03 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/Builder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/Builder.java @@ -1,8 +1,7 @@ package me.aurium.beetle.branch.nodes.builders; -import me.aurium.beetle.branch.fallback.message.BuilderMessageProvider; -import me.aurium.beetle.branch.nodes.api.CommandNode; -import me.aurium.beetle.branch.nodes.api.IdentifiableNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.model.IdentifiableNode; public interface Builder{ diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java index 0af465f..7b81e72 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java @@ -5,7 +5,7 @@ import me.aurium.beetle.branch.block.StringBlock; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.nodes.SingleNode; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.fallback.permission.Permission; import me.aurium.beetle.branch.fallback.permission.permissions.EmptyPermission; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/model/CommandNode.java similarity index 62% rename from core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/model/CommandNode.java index 2d2ab04..cde6f34 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/api/CommandNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/model/CommandNode.java @@ -1,10 +1,11 @@ -package me.aurium.beetle.branch.nodes.api; +package me.aurium.beetle.branch.nodes.model; -import me.aurium.beetle.branch.block.BlockPath; import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.nodes.result.ExecutionResult; -import me.aurium.beetle.branch.nodes.result.NodeResult; +import me.aurium.beetle.branch.nodes.results.ExecutionResult; +import me.aurium.beetle.branch.nodes.results.SearchInput; +import me.aurium.beetle.branch.nodes.results.SearchInfo; import me.aurium.beetle.branch.fallback.permission.Permission; +import me.aurium.beetle.branch.nodes.results.model.Result; /** * Base object @@ -12,7 +13,7 @@ */ public interface CommandNode { - NodeResult getSpecificNode(BlockPath path); + SearchInfo getSpecificNode(SearchInput path); ExecutionResult getExecutionHandler(); SuggestionHandler getSuggestionHandler(); diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/model/EndpointNode.java similarity index 83% rename from core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/model/EndpointNode.java index c15cf37..ee3358e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/api/EndpointNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/model/EndpointNode.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.nodes.api; +package me.aurium.beetle.branch.nodes.model; /** * Marker interface for a node that is alone (so not branching, but not merging either) diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/model/IdentifiableNode.java similarity index 75% rename from core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/model/IdentifiableNode.java index ce79bb6..f94d74d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/api/IdentifiableNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/model/IdentifiableNode.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.nodes.api; +package me.aurium.beetle.branch.nodes.model; import me.aurium.beetle.branch.block.Block; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/model/ResponseHandler.java b/core/src/main/java/me/aurium/beetle/branch/nodes/model/ResponseHandler.java new file mode 100644 index 0000000..1988067 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/model/ResponseHandler.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.nodes.model; + +public class ResponseHandler { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java deleted file mode 100644 index 5a92051..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/result/NodeResult.java +++ /dev/null @@ -1,23 +0,0 @@ -package me.aurium.beetle.branch.nodes.result; - -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.nodes.api.CommandNode; - -public class NodeResult { - - private final CommandNode calculatedNode; - private final BlockPath calculatedPath; - - public NodeResult(CommandNode calculatedNode, BlockPath calculatedPath) { - this.calculatedNode = calculatedNode; - this.calculatedPath = calculatedPath; - } - - public CommandNode resultingNode() { - return calculatedNode; - } - - public BlockPath resultingPath() { - return calculatedPath; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/result/ExecutionResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/ExecutionResult.java similarity index 91% rename from core/src/main/java/me/aurium/beetle/branch/nodes/result/ExecutionResult.java rename to core/src/main/java/me/aurium/beetle/branch/nodes/results/ExecutionResult.java index 2e77d8f..b475977 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/result/ExecutionResult.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/ExecutionResult.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.nodes.result; +package me.aurium.beetle.branch.nodes.results; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/SearchInfo.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/SearchInfo.java new file mode 100644 index 0000000..85c5e9c --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/SearchInfo.java @@ -0,0 +1,33 @@ +package me.aurium.beetle.branch.nodes.results; + +import me.aurium.beetle.branch.block.Block; +import me.aurium.beetle.branch.nodes.model.CommandNode; + +import java.util.Deque; + +public class SearchInfo { + + private final CommandNode calculatedNode; + private final SearchInput input; + + public SearchInfo(CommandNode calculatedNode, SearchInput input) { + this.calculatedNode = calculatedNode; + this.input = input; + } + + public CommandNode resultingNode() { + return calculatedNode; + } + + public Deque initialPath() { + return input.getInitialPath(); + } + + public Deque reducedPath() { + return input.getReducablePath(); + } + + public boolean hasMoreArguments() { + return !input.getReducablePath().isEmpty(); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/SearchInput.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/SearchInput.java new file mode 100644 index 0000000..c3fbf13 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/SearchInput.java @@ -0,0 +1,48 @@ +package me.aurium.beetle.branch.nodes.results; + +import me.aurium.beetle.branch.block.Block; +import me.aurium.beetle.branch.block.StringBlock; + +import java.util.ArrayDeque; +import java.util.Deque; + +public class SearchInput { + + private final Deque initialPath; + private final Deque reducablePath; + + public SearchInput(Deque initialPath, Deque reducablePath) { + this.initialPath = initialPath; + this.reducablePath = reducablePath; + } + + public Deque getInitialPath() { + return initialPath; + } + + public Deque getReducablePath() { + return reducablePath; + } + + public SearchInput withoutTop() { + Deque newBase = new ArrayDeque<>(initialPath); + + newBase.removeLast(); + + return of(newBase); + } + + public static SearchInput of(Deque initialPath) { + return new SearchInput(initialPath,new ArrayDeque<>(initialPath)); + } + + public static SearchInput of(String[] args) { + Deque blocks = new ArrayDeque<>(); + + for (String string : args) { + blocks.addLast(StringBlock.of(string)); + } + + return of(blocks); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/SuggestionResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/SuggestionResult.java new file mode 100644 index 0000000..ed2ddf9 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/SuggestionResult.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.nodes.results; + +public class SuggestionResult { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java new file mode 100644 index 0000000..a4a14e5 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java @@ -0,0 +1,24 @@ +package me.aurium.beetle.branch.nodes.results.model; + +import me.aurium.beetle.branch.fallback.failure.Failure; + +import java.util.Optional; + +public class FailingResult implements Result { + + private final Failure failure; + + public FailingResult(Failure failure) { + this.failure = failure; + } + + @Override + public Optional getSuccess() { + return Optional.empty(); + } + + @Override + public Optional getFailure() { + return Optional.of(failure); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java new file mode 100644 index 0000000..a6d6472 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java @@ -0,0 +1,12 @@ +package me.aurium.beetle.branch.nodes.results.model; + +import me.aurium.beetle.branch.fallback.failure.Failure; + +import java.util.Optional; + +public interface Result { + + Optional getSuccess(); + Optional getFailure(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java new file mode 100644 index 0000000..36e33bb --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java @@ -0,0 +1,24 @@ +package me.aurium.beetle.branch.nodes.results.model; + +import me.aurium.beetle.branch.fallback.failure.Failure; + +import java.util.Optional; + +public class SuccessfulResult implements Result { + + private final T sucessful; + + public SuccessfulResult(T sucessful) { + this.sucessful = sucessful; + } + + @Override + public Optional getSuccess() { + return Optional.of(sucessful); + } + + @Override + public Optional getFailure() { + return Optional.empty(); + } +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java index 203ce45..444e1ef 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java @@ -1,9 +1,9 @@ package me.aurium.beetle.branch.spigot; -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.fallback.message.BaseContext; import me.aurium.beetle.branch.handlers.context.AbstractNodeContext; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInfo; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -11,10 +11,10 @@ public class SpigotContext extends AbstractNodeContext< private final T sender; - public SpigotContext(T sender, String alias, String[] args, CommandNode executed, CommandNode base, BlockPath executedPath, BlockPath fullPath, FallbackHandler handler) { - super(sender, alias, args, executed, base, executedPath, fullPath, handler); + protected SpigotContext(T t, String alias, String[] strings, CommandNode baseNode, SearchInfo result, BaseContext baseContext) { + super(t, alias, strings, baseNode, result, baseContext); - this.sender = sender; + this.sender = t; } @Override diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java index c8fa56e..d2700b1 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java @@ -1,13 +1,13 @@ package me.aurium.beetle.branch.spigot; -import me.aurium.beetle.branch.block.BlockPath; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.fallback.message.BaseContext; import me.aurium.beetle.branch.handlers.context.Context; import me.aurium.beetle.branch.handlers.context.ContextProducer; import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.launchpoints.IllegalSenderException; import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; -import me.aurium.beetle.branch.nodes.api.CommandNode; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInfo; import org.bukkit.command.CommandSender; public class SpigotContextProducer implements ContextProducer { @@ -18,20 +18,22 @@ public SpigotContextProducer(ManagerAdapter adapter) { this.adapter = adapter; } - @Override - public NodeContext produce(C sender, String alias, String[] strings, CommandNode executedNode, CommandNode baseNode, BlockPath executedPath, BlockPath basePath, FallbackHandler handler) { + @Override + public NodeContext produce(C sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search, BaseContext baseContext) { if (!adapter.canAdapt(sender)) { adapter.failedAdaptAction(); + //delegate to baseContext's stuff + throw new IllegalSenderException("Sender is not instance of correct type!"); //TODO more fallback bullshit :) } - return new SpigotContext<>(adapter.adapt(sender), alias,strings,executedNode,baseNode,executedPath,basePath,handler); + return new SpigotContext<>(adapter.adapt(sender),alias,strings,baseNode,search,baseContext); } @Override public Context produce(C sender, String alias, String[] strings) { - return produce(sender, alias, strings,null,null,null,null,null); + return produce(sender, alias, strings,null,null,null); } } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java new file mode 100644 index 0000000..4ea5efc --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java @@ -0,0 +1,22 @@ +package me.aurium.beetle.branch.spigot.message; + +import me.aurium.beetle.branch.fallback.message.CommonKeys; +import me.aurium.beetle.branch.fallback.message.Message; +import me.aurium.beetle.branch.fallback.message.MessageKey; +import me.aurium.beetle.branch.fallback.message.MessageProvider; +import org.bukkit.command.CommandSender; + +import java.util.HashMap; +import java.util.Map; + +public class SpigotMessageProvider implements MessageProvider { + + public Map> make() { + Map> messMap = new HashMap<>(); + + messMap.put(CommonKeys.TOO_MANY_ARGS, new TextMessage<>("&7HI THERE IDIOT FACE! You provided %args% args!")); + + return messMap; + } + +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java new file mode 100644 index 0000000..035074a --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java @@ -0,0 +1,18 @@ +package me.aurium.beetle.branch.spigot.message; + +import me.aurium.beetle.branch.fallback.message.Message; +import org.bukkit.command.CommandSender; + +public class TextMessage implements Message { + + private final String coloredStringToSend; + + public TextMessage(String coloredStringToSend) { + this.coloredStringToSend = coloredStringToSend; + } + + @Override + public void accept(C sender, Object... info) { + sender.sendMessage(String.format(coloredStringToSend,info)); + } +} diff --git a/spigot-impl/src/test/java/me/aurium/beetle/branch/spigot/ExampleBinding.java b/spigot-impl/src/test/java/me/aurium/beetle/branch/spigot/ExampleBinding.java index abe418c..da76a28 100644 --- a/spigot-impl/src/test/java/me/aurium/beetle/branch/spigot/ExampleBinding.java +++ b/spigot-impl/src/test/java/me/aurium/beetle/branch/spigot/ExampleBinding.java @@ -1,6 +1,5 @@ package me.aurium.beetle.branch.spigot; -import me.aurium.beetle.branch.nodes.builders.SingleBuilder; import org.bukkit.plugin.java.JavaPlugin; public class ExampleBinding extends JavaPlugin { diff --git a/spigot-impl/src/test/resources/plugin.yml b/spigot-impl/src/test/resources/plugin.yml new file mode 100644 index 0000000..e69de29 From ba8b34cc8ff4f5814708b4af6747bb1a42d434b8 Mon Sep 17 00:00:00 2001 From: Aurium Date: Wed, 7 Apr 2021 00:27:15 -0700 Subject: [PATCH 26/56] work on the response system a bit more --- .../marker/permission/StringPermChecker.java | 2 +- .../parsers/PermissionAnnotationParser.java | 6 +- .../branch/fallback/failure/Failure.java | 13 ---- .../fallback/failure/SendableFailure.java | 30 -------- .../branch/fallback/message/BaseContext.java | 11 --- .../branch/fallback/message/CommonKeys.java | 7 -- .../branch/fallback/message/Message.java | 7 -- .../fallback/message/MessageHandler.java | 7 -- .../branch/fallback/message/MessageInfo.java | 21 ------ .../branch/fallback/message/MessageKey.java | 16 ---- .../fallback/message/MessageProvider.java | 10 --- .../fallback/message/MessageRequirement.java | 24 ------ .../message/impl/CommonMessageHandler.java | 27 ------- .../branch/fallback/message/impl/Shit.java | 41 ----------- .../strategies/ExecutionFallbackStrategy.java | 18 ----- .../permissions/EmptyPermission.java | 4 +- .../Permission.java | 4 +- .../PredicatePermission.java | 2 +- .../StringPermission.java | 4 +- .../strategies/FallbackSearchStrategy.java | 13 ++++ .../OneBackStrategy.java} | 29 +++++--- .../{util => fun}/PreStoredHashSet.java | 6 +- .../branch/handlers/api/BranchHandler.java | 3 +- .../beetle/branch/handlers/api/Execution.java | 11 +++ .../branch/handlers/api/FallbackHandler.java | 14 ---- .../handlers/context/AbstractContext.java | 30 -------- .../handlers/context/AbstractNodeContext.java | 27 ++++++- .../branch/handlers/context/Context.java | 11 --- ...textProducer.java => ContextProvider.java} | 4 +- .../branch/handlers/context/NodeContext.java | 28 ++++++- .../branch/interfacing/BlurbParser.java | 8 ++ .../beetle/branch/interfacing/CoreKeys.java | 14 ++++ .../FallbackPair.java | 4 +- .../branch/interfacing/ResultInterfacer.java | 4 + .../branch/interfacing/message/Message.java | 9 +++ .../interfacing/message/Requirement.java | 13 ++++ .../message/impl/CommonMessageHandler.java | 35 +++++++++ .../message/impl/CommonResponseHandler.java | 27 +++++++ .../message/model/InterfacingHandler.java | 16 ++++ .../message/model/MessageInfo.java | 24 ++++++ .../message/model/MessageProvider.java | 13 ++++ .../message/model/ResponseHandler.java | 18 +++++ .../responses/ExecutionResponse.java | 17 +++++ .../responses/SendableResponse.java | 27 +++++++ .../common/NoPermissionResponse.java | 20 +++++ .../branch/launchpoints/base/NodeBase.java | 2 +- .../launchpoints/base/NodeBaseBuilder.java | 34 ++------- .../launchpoints/base/SimpleBaseContext.java | 18 ----- .../launchpoints/base/SimpleNodeBase.java | 39 ---------- .../launchpoints/base/SyncNodeBase.java | 56 ++++++++++++++ .../typeadapter/CommonAdapter.java | 6 +- .../typeadapter/ManagerAdapter.java | 6 +- .../beetle/branch/nodes/BranchingNode.java | 61 +++++++++------- .../beetle/branch/nodes/SingleNode.java | 73 +++++++++++++------ .../nodes/builders/BranchingBuilder.java | 6 +- .../branch/nodes/builders/SingleBuilder.java | 4 +- .../branch/nodes/model/CommandNode.java | 9 +-- .../nodes/results/model/FailingResult.java | 21 +++--- .../branch/nodes/results/model/Result.java | 19 +++-- .../nodes/results/model/SuccessfulResult.java | 17 +++-- .../beetle/branch/spigot/SpigotContext.java | 2 +- ...oducer.java => SpigotContextProvider.java} | 7 +- .../beetle/branch/spigot/SpigotManager.java | 2 +- .../spigot/message/AdventureMessage.java | 4 + .../branch/spigot/message/SpigotKeys.java | 9 +++ .../spigot/message/SpigotMessageProvider.java | 26 +++++-- .../branch/spigot/message/TextMessage.java | 2 +- .../toPlayer/FailedAdaptingResponse.java | 14 ++++ .../spigot/{ => toPlayer}/PlayerAdapter.java | 15 +--- 69 files changed, 604 insertions(+), 527 deletions(-) delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/failure/Failure.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/failure/SendableFailure.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/BaseContext.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/CommonKeys.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/Message.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageInfo.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageKey.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProvider.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageRequirement.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/CommonMessageHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/Shit.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java rename core/src/main/java/me/aurium/beetle/branch/fallback/{permission => }/permissions/EmptyPermission.java (57%) rename core/src/main/java/me/aurium/beetle/branch/fallback/{permission => permissions}/Permission.java (62%) rename core/src/main/java/me/aurium/beetle/branch/fallback/{permission => permissions}/PredicatePermission.java (87%) rename core/src/main/java/me/aurium/beetle/branch/fallback/{permission => permissions}/StringPermission.java (65%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/strategies/FallbackSearchStrategy.java rename core/src/main/java/me/aurium/beetle/branch/fallback/{permission/strategies/CommonFallbackStrategy.java => strategies/OneBackStrategy.java} (67%) rename core/src/main/java/me/aurium/beetle/branch/{util => fun}/PreStoredHashSet.java (92%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractContext.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/context/Context.java rename core/src/main/java/me/aurium/beetle/branch/handlers/context/{ContextProducer.java => ContextProvider.java} (81%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/BlurbParser.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/CoreKeys.java rename core/src/main/java/me/aurium/beetle/branch/{fallback => interfacing}/FallbackPair.java (59%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/ResultInterfacer.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/Message.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/Requirement.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonMessageHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonResponseHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/InterfacingHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageInfo.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageProvider.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/ResponseHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/ExecutionResponse.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/SendableResponse.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/common/NoPermissionResponse.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleBaseContext.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SyncNodeBase.java rename spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/{SpigotContextProducer.java => SpigotContextProvider.java} (82%) create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/AdventureMessage.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotKeys.java create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/FailedAdaptingResponse.java rename spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/{ => toPlayer}/PlayerAdapter.java (57%) diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java index eba19f6..5009a76 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/marker/permission/StringPermChecker.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.annotate.marker.permission; -import me.aurium.beetle.branch.fallback.permission.StringPermission; +import me.aurium.beetle.branch.fallback.permissions.StringPermission; public interface StringPermChecker { diff --git a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java index 5a1882c..4b98904 100644 --- a/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java +++ b/core/src/main/java/me/aurium/beetle/branch/annotate/parsers/PermissionAnnotationParser.java @@ -1,7 +1,7 @@ package me.aurium.beetle.branch.annotate.parsers; import me.aurium.beetle.branch.annotate.marker.permission.Permission; -import me.aurium.beetle.branch.fallback.permission.StringPermission; +import me.aurium.beetle.branch.fallback.permissions.StringPermission; import java.lang.annotation.Annotation; @@ -9,7 +9,7 @@ public class PermissionAnnotationParser { - me.aurium.beetle.branch.fallback.permission.Permission parse(Annotation annotate) throws IllegalAccessException, InstantiationException { + me.aurium.beetle.branch.fallback.permissions.Permission parse(Annotation annotate) throws IllegalAccessException, InstantiationException { if (!annotate.annotationType().equals(Permission.class)) throw new PermissionParsingException("Annotation must be of type Permission"); @@ -21,7 +21,7 @@ me.aurium.beetle.branch.fallback.permission.Permission parse(Annotation annot StringPermission perm = permission.getRelativeChecker().newInstance().get(permission.permission()); - return (me.aurium.beetle.branch.fallback.permission.Permission) perm; + return (me.aurium.beetle.branch.fallback.permissions.Permission) perm; } public static class PermissionParsingException extends RuntimeException { diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/failure/Failure.java b/core/src/main/java/me/aurium/beetle/branch/fallback/failure/Failure.java deleted file mode 100644 index b2d9495..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/failure/Failure.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.aurium.beetle.branch.fallback.failure; - -import me.aurium.beetle.branch.fallback.message.MessageKey; -import me.aurium.beetle.branch.fallback.message.MessageRequirement; - -public interface Failure { - - MessageKey getCorrelatedMessage(); - MessageRequirement[] getRequirements(); - - Throwable toThrowable(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/failure/SendableFailure.java b/core/src/main/java/me/aurium/beetle/branch/fallback/failure/SendableFailure.java deleted file mode 100644 index ff624a5..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/failure/SendableFailure.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.aurium.beetle.branch.fallback.failure; - -import me.aurium.beetle.branch.fallback.message.MessageKey; -import me.aurium.beetle.branch.fallback.message.MessageRequirement; - -public class SendableFailure implements Failure{ - - private final MessageKey key; - private final MessageRequirement[] requirements; - - public SendableFailure(MessageKey key, MessageRequirement... requirements) { - this.key = key; - this.requirements = requirements; - } - - @Override - public MessageKey getCorrelatedMessage() { - return key; - } - - @Override - public MessageRequirement[] getRequirements() { - return requirements; - } - - @Override - public Throwable toThrowable() { - return new IllegalStateException(); - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/BaseContext.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/BaseContext.java deleted file mode 100644 index 0db1c78..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/BaseContext.java +++ /dev/null @@ -1,11 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -import me.aurium.beetle.branch.handlers.api.FallbackHandler; - -public interface BaseContext { - - FallbackHandler getFallback(); - - //TODO message stuff - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/CommonKeys.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/CommonKeys.java deleted file mode 100644 index b0a2054..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/CommonKeys.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -public class CommonKeys { - - public static final MessageKey TOO_MANY_ARGS = new MessageKey("TOO_MANY_ARGS"); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/Message.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/Message.java deleted file mode 100644 index ecc910c..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/Message.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -public interface Message { - - void accept(C c, Object... strings); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageHandler.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageHandler.java deleted file mode 100644 index 3f2c7aa..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageHandler.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -public interface MessageHandler { - - void sendMessage(T t, MessageInfo key); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageInfo.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageInfo.java deleted file mode 100644 index 2100c6b..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageInfo.java +++ /dev/null @@ -1,21 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -public class MessageInfo { - - private final MessageKey key; - private final Object[] args; - - public MessageInfo(MessageKey key, Object[] args) { - this.key = key; - this.args = args; - } - - public MessageKey getKey() { - return key; - } - - public Object[] getStrings() { - return args; - } - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageKey.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageKey.java deleted file mode 100644 index 4dd0382..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageKey.java +++ /dev/null @@ -1,16 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -public class MessageKey { - - private final String key; - - public MessageKey(String key) { - this.key = key; - } - - public String getKey() { - return key; - } - - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProvider.java deleted file mode 100644 index 6b6338d..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageProvider.java +++ /dev/null @@ -1,10 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -import java.util.HashMap; -import java.util.Map; - -public interface MessageProvider { - - Map> make(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageRequirement.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageRequirement.java deleted file mode 100644 index 933f94e..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/MessageRequirement.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.aurium.beetle.branch.fallback.message; - -public class MessageRequirement { - - private final String key; - private final String value; - - private MessageRequirement(String key, String value) { - this.key = key; - this.value = value; - } - - public static MessageRequirement of(String key, String value) { - return new MessageRequirement(key, value); - } - - public String getKey() { - return this.key; - } - - public String getValue() { - return this.value; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/CommonMessageHandler.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/CommonMessageHandler.java deleted file mode 100644 index 0ec2584..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/CommonMessageHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package me.aurium.beetle.branch.fallback.message.impl; - -import me.aurium.beetle.branch.fallback.message.*; - -import java.util.Map; - -public class CommonMessageHandler implements MessageHandler { - - private final Map> messages; - - public CommonMessageHandler(Map> messages) { - this.messages = messages; - } - - public CommonMessageHandler(MessageProvider messages) { - this.messages = messages.make(); - } - - @Override - public void sendMessage(T t, MessageInfo info) { - Message message = messages.get(info.getKey()); - - if (message == null) throw new IllegalArgumentException("No message mapped to key!"); - - message.accept(t); - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/Shit.java b/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/Shit.java deleted file mode 100644 index c61e2e7..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/message/impl/Shit.java +++ /dev/null @@ -1,41 +0,0 @@ -package me.aurium.beetle.branch.fallback.message.impl; - -import me.aurium.beetle.branch.handlers.context.NodeContext; -/* - -public class DefaultBuilderMessageProvider implements BuilderMessageProvider { - - @Override - public void handleDefaultSingle(NodeContext context) { - - - } - - @Override - public void handleDefaultBranching(NodeContext context) { - - */ -/*StringBuilder fuk = new StringBuilder("/"); - - context.fullPath().withoutTop().getAllBlocks().getBackingList().forEach(blok -> { - fuk.append(blok).append(" "); - }); - - String finalFuk = fuk.toString(); - - List alternatives = new ArrayList<>(); //TODO make parameter - - for (String string : alternatives) { - context.messageSender(finalFuk + string); - }*//* - - - - } - - @Override - public void handleDefaultValue(NodeContext context) { - - } -} -*/ diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java deleted file mode 100644 index c903cef..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/ExecutionFallbackStrategy.java +++ /dev/null @@ -1,18 +0,0 @@ -package me.aurium.beetle.branch.fallback.permission.strategies; - -import me.aurium.beetle.branch.fallback.message.BaseContext; -import me.aurium.beetle.branch.handlers.context.ContextProducer; -import me.aurium.beetle.branch.nodes.model.CommandNode; -import me.aurium.beetle.branch.nodes.results.SearchInfo; - -import java.util.Optional; - -public interface ExecutionFallbackStrategy { - - - Optional> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode); - void attemptExecution(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result, BaseContext baseContext, ContextProducer producer); - - - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/permissions/EmptyPermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/EmptyPermission.java similarity index 57% rename from core/src/main/java/me/aurium/beetle/branch/fallback/permission/permissions/EmptyPermission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permissions/EmptyPermission.java index b68d78c..a2c2125 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/permissions/EmptyPermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/EmptyPermission.java @@ -1,6 +1,4 @@ -package me.aurium.beetle.branch.fallback.permission.permissions; - -import me.aurium.beetle.branch.fallback.permission.Permission; +package me.aurium.beetle.branch.fallback.permissions; public class EmptyPermission implements Permission { diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/Permission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/Permission.java similarity index 62% rename from core/src/main/java/me/aurium/beetle/branch/fallback/permission/Permission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permissions/Permission.java index f6f48d2..464979a 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/Permission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/Permission.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.fallback.permission; +package me.aurium.beetle.branch.fallback.permissions; /** * @@ -7,4 +7,6 @@ public interface Permission { boolean attempt(T sender, String alias, String[] args); //because fuck you + String easyName(); + } diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/PredicatePermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/PredicatePermission.java similarity index 87% rename from core/src/main/java/me/aurium/beetle/branch/fallback/permission/PredicatePermission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permissions/PredicatePermission.java index b6cc15f..77609e6 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/PredicatePermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/PredicatePermission.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.fallback.permission; +package me.aurium.beetle.branch.fallback.permissions; import java.util.function.Predicate; diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/StringPermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/StringPermission.java similarity index 65% rename from core/src/main/java/me/aurium/beetle/branch/fallback/permission/StringPermission.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/permissions/StringPermission.java index e53a1a8..836aa47 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/StringPermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/StringPermission.java @@ -1,6 +1,4 @@ -package me.aurium.beetle.branch.fallback.permission; - -import me.aurium.beetle.branch.fallback.permission.Permission; +package me.aurium.beetle.branch.fallback.permissions; /** * Represents a permission that is controlled by a string identifier diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/FallbackSearchStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/FallbackSearchStrategy.java new file mode 100644 index 0000000..ef0d2fd --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/FallbackSearchStrategy.java @@ -0,0 +1,13 @@ +package me.aurium.beetle.branch.fallback.strategies; + +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInfo; +import me.aurium.beetle.branch.nodes.results.model.Result; + +public interface FallbackSearchStrategy { + + + Result> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode); + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/CommonFallbackStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/OneBackStrategy.java similarity index 67% rename from core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/CommonFallbackStrategy.java rename to core/src/main/java/me/aurium/beetle/branch/fallback/strategies/OneBackStrategy.java index 057a3d4..fc5a47e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permission/strategies/CommonFallbackStrategy.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/OneBackStrategy.java @@ -1,47 +1,52 @@ -package me.aurium.beetle.branch.fallback.permission.strategies; +package me.aurium.beetle.branch.fallback.strategies; +import me.aurium.beetle.branch.interfacing.responses.common.NoPermissionResponse; import me.aurium.beetle.branch.fallback.message.BaseContext; -import me.aurium.beetle.branch.handlers.context.ContextProducer; +import me.aurium.beetle.branch.handlers.api.Execution; +import me.aurium.beetle.branch.handlers.context.ContextProvider; import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInput; import me.aurium.beetle.branch.nodes.results.SearchInfo; import me.aurium.beetle.branch.nodes.results.model.Result; -import java.util.Optional; - -public class CommonFallbackStrategy implements ExecutionFallbackStrategy { +public class OneBackStrategy implements FallbackSearchStrategy { @Override - public Optional> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode) { + public Result> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode) { SearchInput input = SearchInput.of(args); - SearchInfo toBeExecuted = baseNode.getSpecificNode(input); //1. Check permissions and access (preprocessing) - while (!toBeExecuted.resultingNode().getPermission().attempt(sender, alias, args) || toBeExecuted.resultingNode().getExecutionHandler().getExecution().isEmpty()) { + while (!toBeExecuted.resultingNode().getPermission().attempt(sender, alias, args)) { //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. if (toBeExecuted.resultingNode().equals(baseNode)) { - return Optional.empty(); + return Result.fail(new NoPermissionResponse(baseNode)); } else { toBeExecuted = baseNode.getSpecificNode(input.withoutTop()); //regress backwards a node } } - return Optional.of(toBeExecuted); + return Result.success(toBeExecuted); } @Override - public void attemptExecution(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result, BaseContext baseContext, ContextProducer producer) { + public Result attemptExecution(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result, BaseContext baseContext, ContextProvider producer) { NodeContext produced = producer.produce(sender,alias,args,baseNode, result, baseContext); - result.resultingNode().getExecutionHandler().getExecution().orElseThrow().handle(produced); //this should never be null thanks to the preprocess + Result info = result.resultingNode().getHandling().getExecution(produced); + + if (!info.isSuccessful()) { + return info; + } + + result.resultingNode().getHandling().getExecutionHandler().getExecution().orElseThrow().handle(produced); //this should never be null thanks to the preprocess } diff --git a/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java b/core/src/main/java/me/aurium/beetle/branch/fun/PreStoredHashSet.java similarity index 92% rename from core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java rename to core/src/main/java/me/aurium/beetle/branch/fun/PreStoredHashSet.java index 33af162..b8cb810 100644 --- a/core/src/main/java/me/aurium/beetle/branch/util/PreStoredHashSet.java +++ b/core/src/main/java/me/aurium/beetle/branch/fun/PreStoredHashSet.java @@ -1,4 +1,4 @@ -package me.aurium.beetle.branch.util; +package me.aurium.beetle.branch.fun; import java.util.HashSet; import java.util.Optional; @@ -56,8 +56,8 @@ public Set getContents() { * get already store thing * @return already stored thing or null */ - public Optional getAlreadyStored() { - return Optional.ofNullable(alreadyStored); + public T getAlreadyStored() { + return alreadyStored; } } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java index 4d4ac58..3704010 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java @@ -1,12 +1,13 @@ package me.aurium.beetle.branch.handlers.api; import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.nodes.results.model.Result; import java.util.List; public interface BranchHandler { - void getExecution(NodeContext context); + Result getExecution(NodeContext context); List getSuggestions(NodeContext context); } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java new file mode 100644 index 0000000..c22d3d6 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java @@ -0,0 +1,11 @@ +package me.aurium.beetle.branch.handlers.api; + +import me.aurium.beetle.branch.handlers.context.NodeContext; + +public class Execution { + private final Runnable runnable; + + public Execution(Runnable runnable) { + this.runnable = runnable; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java deleted file mode 100644 index 4f90b4f..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/FallbackHandler.java +++ /dev/null @@ -1,14 +0,0 @@ -package me.aurium.beetle.branch.handlers.api; - -import me.aurium.beetle.branch.handlers.context.Context; - -/** - * Represents the fallback handler of a base that manages what happens when everything goes wrong - * - * EDIT THIS IS NO LONGER A FALLBACK HANDLER THIS IS ONLY FOR IF SOMETHIGN GOES HELL WRONG - */ -public interface FallbackHandler { - - void handle(Context context); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractContext.java deleted file mode 100644 index 8636ea4..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractContext.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.aurium.beetle.branch.handlers.context; - -public abstract class AbstractContext implements Context { - - private final T t; - private final String alias; - private final String[] args; - - protected AbstractContext(T t, String alias, String[] args) { - this.t = t; - this.alias = alias; - this.args = args; - } - - @Override - public T getSender() { - return t; - } - - @Override - public String getAlias() { - return alias; - } - - @Override - public String[] getArgs() { - return args; - } - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java index bd253c2..62a24a8 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java @@ -4,20 +4,41 @@ import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInfo; -public abstract class AbstractNodeContext extends AbstractContext implements NodeContext { +public abstract class AbstractNodeContext implements NodeContext { + + private final T sender; + private final String alias; + private final String[] args; private final CommandNode baseNode; private final SearchInfo searchInfo; private final BaseContext baseContext; - protected AbstractNodeContext(T t, String alias, String[] strings, CommandNode baseNode, SearchInfo result, BaseContext baseContext) { - super(t, alias, strings); + protected AbstractNodeContext(T t, String sender, String[] args, CommandNode baseNode, SearchInfo result, BaseContext baseContext) { + this.sender = t; + this.alias = sender; + this.args = args; this.baseContext = baseContext; this.searchInfo = result; this.baseNode = baseNode; } + @Override + public T getSender() { + return sender; + } + + @Override + public String getAlias() { + return alias; + } + + @Override + public String[] getArgs() { + return args; + } + @Override public CommandNode getBaseExecutedNode() { return baseNode; diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/Context.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/Context.java deleted file mode 100644 index efd485b..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/Context.java +++ /dev/null @@ -1,11 +0,0 @@ -package me.aurium.beetle.branch.handlers.context; - -public interface Context { - - T getSender(); - String getAlias(); - String[] getArgs(); - - void messageSender(String string); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProvider.java similarity index 81% rename from core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java rename to core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProvider.java index 72f672b..b9ec494 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProducer.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProvider.java @@ -7,10 +7,8 @@ /** * Produces context adapters, like the stock ContextSource for contexts. */ -public interface ContextProducer { +public interface ContextProvider { NodeContext produce(T sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search, BaseContext baseContext); - Context produce(T sender, String alias, String[] strings); - } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java index 77924db..b0cf26b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java @@ -1,18 +1,38 @@ package me.aurium.beetle.branch.handlers.context; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; import me.aurium.beetle.branch.fallback.message.BaseContext; +import me.aurium.beetle.branch.interfacing.message.Message; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInfo; -public interface NodeContext extends Context { +public interface NodeContext { + T getSender(); + String getAlias(); + String[] getArgs(); CommandNode getBaseExecutedNode(); - SearchInfo getResults(); BaseContext getBaseContext(); - //TODO add more cool features like the debug message sender, - // because NodeContext should be a collection of both context and context-specific actions? /review a248 + /** + * Sends an ugly string to the player using the platform's message handler. Whatever floats your boat! + * @param string string + */ + void stringSender(String string); + + /** + * Sends a fancy formatted message to a player using the bound platform's message-handler + * @param message message + */ + void messageSender(Message message); + + /** + * Sends a fancy formatted failure to a player that is bound to a Message using the platform's message-handler + * @param failure the failure + */ + void failureSender(ExecutionResponse failure); + } diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/BlurbParser.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/BlurbParser.java new file mode 100644 index 0000000..8fc534b --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/BlurbParser.java @@ -0,0 +1,8 @@ +package me.aurium.beetle.branch.interfacing; + +public interface BlurbParser { + + void parse(BlurbParser parser); + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/CoreKeys.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/CoreKeys.java new file mode 100644 index 0000000..35a337d --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/CoreKeys.java @@ -0,0 +1,14 @@ +package me.aurium.beetle.branch.interfacing; + +import java.util.UUID; + +public class CoreKeys { + + public static final UUID TOO_MANY_ARGS = UUID.randomUUID(); + public static final UUID NO_INTEGRATED_NOARGS = UUID.randomUUID(); + + //When someone has no permissions to execute a node + public static final UUID NO_PERMISSIONS = UUID.randomUUID(); + public static final UUID FAILED_ADAPTING = UUID.randomUUID(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/FallbackPair.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/FallbackPair.java similarity index 59% rename from core/src/main/java/me/aurium/beetle/branch/fallback/FallbackPair.java rename to core/src/main/java/me/aurium/beetle/branch/interfacing/FallbackPair.java index c205e9f..1ae0b2c 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/FallbackPair.java +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/FallbackPair.java @@ -1,6 +1,4 @@ -package me.aurium.beetle.branch.fallback; - -import me.aurium.beetle.branch.handlers.api.FallbackHandler; +package me.aurium.beetle.branch.interfacing; public interface FallbackPair { diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/ResultInterfacer.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/ResultInterfacer.java new file mode 100644 index 0000000..695a43a --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/ResultInterfacer.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.interfacing; + +public interface ResultInterfacer { +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Message.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Message.java new file mode 100644 index 0000000..88c6a85 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Message.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.interfacing.message; + +import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; + +public interface Message { + + void accept(C sender); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Requirement.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Requirement.java new file mode 100644 index 0000000..4de91fa --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Requirement.java @@ -0,0 +1,13 @@ +package me.aurium.beetle.branch.interfacing.message; + +import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; + +/** + * rename messageRequirement + * @param + */ +public interface Requirement { + + Message toMessage(MessageInfo... infos); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonMessageHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonMessageHandler.java new file mode 100644 index 0000000..2c14de4 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonMessageHandler.java @@ -0,0 +1,35 @@ +package me.aurium.beetle.branch.interfacing.message.impl; + +import me.aurium.beetle.branch.interfacing.message.model.InterfacingHandler; +import me.aurium.beetle.branch.interfacing.message.Message; +import me.aurium.beetle.branch.interfacing.message.model.MessageProvider; +import me.aurium.beetle.branch.interfacing.message.model.ResponseHandler; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; + +public class CommonMessageHandler implements InterfacingHandler { + + private final ResponseHandler handler; + + public CommonMessageHandler(MessageProvider provider) { + this.handler = new CommonResponseHandler<>(provider); + } + + public CommonMessageHandler(ResponseHandler handler) { + this.handler = handler; + } + + @Override + public void sendMessage(T recipent, Message message) { + message.accept(recipent); + } + + @Override + public void sendMessage(T recipent, ExecutionResponse response) { + handler.sendMessage(recipent,response); + } + + @Override + public void sendMessage(T recipent, String message) { + + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonResponseHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonResponseHandler.java new file mode 100644 index 0000000..8ab63a8 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonResponseHandler.java @@ -0,0 +1,27 @@ +package me.aurium.beetle.branch.interfacing.message.impl; + +import me.aurium.beetle.branch.interfacing.message.Requirement; +import me.aurium.beetle.branch.interfacing.message.model.ResponseHandler; +import me.aurium.beetle.branch.interfacing.message.model.MessageProvider; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; + +import java.util.Map; +import java.util.UUID; + +public class CommonResponseHandler implements ResponseHandler { + + private final Map> requirements; + + public CommonResponseHandler(MessageProvider requirements) { + this.requirements = requirements.make(); + } + + @Override + public void sendMessage(T sender, ExecutionResponse info) { + Requirement requirement = requirements.get(info.getCorrelatedMessage()); + + if (requirement == null) throw new IllegalArgumentException("No message mapped to key!"); + + requirement.toMessage(info.getRequirements()).accept(sender); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/InterfacingHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/InterfacingHandler.java new file mode 100644 index 0000000..2f46895 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/InterfacingHandler.java @@ -0,0 +1,16 @@ +package me.aurium.beetle.branch.interfacing.message.model; + +import me.aurium.beetle.branch.interfacing.message.Message; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; + +/** + * Represents a centralized source for message providing as well as context creation. I am aware i spelled recipient wrong. + * @param the type + */ +public interface InterfacingHandler { + + void sendMessage(T recipent, Message message); + void sendMessage(T recipent, ExecutionResponse response); + void sendMessage(T recipent, String message); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageInfo.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageInfo.java new file mode 100644 index 0000000..94dcd88 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageInfo.java @@ -0,0 +1,24 @@ +package me.aurium.beetle.branch.interfacing.message.model; + +public class MessageInfo { + + private final String key; + private final String value; + + public MessageInfo(String key, String value) { + this.key = key; + this.value = value; + } + + public static MessageInfo of(String key, String value) { + return new MessageInfo(key, value); + } + + public String getKey() { + return this.key; + } + + public String getValue() { + return this.value; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageProvider.java new file mode 100644 index 0000000..d9d049b --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageProvider.java @@ -0,0 +1,13 @@ +package me.aurium.beetle.branch.interfacing.message.model; + +import me.aurium.beetle.branch.interfacing.message.Message; +import me.aurium.beetle.branch.interfacing.message.Requirement; + +import java.util.Map; +import java.util.UUID; + +public interface MessageProvider { + + Map> make(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/ResponseHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/ResponseHandler.java new file mode 100644 index 0000000..dc5191a --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/ResponseHandler.java @@ -0,0 +1,18 @@ +package me.aurium.beetle.branch.interfacing.message.model; + +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; + +/** + * Represents something that will handle the accessing of responses from the bound map and sending them. + * @param the type + */ +public interface ResponseHandler { + + /** + * Sends a message bound to the execution response, or throws an exception if not present + * @param sender the sender + * @param key the response to send + */ + void sendMessage(T sender, ExecutionResponse key); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/ExecutionResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/ExecutionResponse.java new file mode 100644 index 0000000..7a336aa --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/ExecutionResponse.java @@ -0,0 +1,17 @@ +package me.aurium.beetle.branch.interfacing.responses; + +import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; + +import java.util.UUID; + +/** + * Represents a prebuilt response to a request or command that is bound to the handler. + */ +public interface ExecutionResponse { + + UUID getCorrelatedMessage(); + MessageInfo[] getRequirements(); + + //TODO to throwable + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/SendableResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/SendableResponse.java new file mode 100644 index 0000000..61f8916 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/SendableResponse.java @@ -0,0 +1,27 @@ +package me.aurium.beetle.branch.interfacing.responses; + +import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; + +import java.util.UUID; + +public class SendableResponse implements ExecutionResponse { + + private final UUID key; + private final MessageInfo[] requirements; + + public SendableResponse(UUID key, MessageInfo... requirements) { + this.key = key; + this.requirements = requirements; + } + + @Override + public UUID getCorrelatedMessage() { + return key; + } + + @Override + public MessageInfo[] getRequirements() { + return requirements; + } + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/common/NoPermissionResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/common/NoPermissionResponse.java new file mode 100644 index 0000000..0816cf5 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/common/NoPermissionResponse.java @@ -0,0 +1,20 @@ +package me.aurium.beetle.branch.interfacing.responses.common; + +import me.aurium.beetle.branch.interfacing.responses.SendableResponse; +import me.aurium.beetle.branch.interfacing.CoreKeys; +import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; +import me.aurium.beetle.branch.nodes.model.CommandNode; + +public class NoPermissionResponse extends SendableResponse { + + public NoPermissionResponse(CommandNode node) { + super(CoreKeys.NO_PERMISSIONS, new NoPermissionInfo(node)); + } + + public static class NoPermissionInfo extends MessageInfo { + + public NoPermissionInfo(CommandNode node) { + super("permission", node.getPermission().easyName()); + } + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java index edfad8f..83813b1 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java @@ -4,7 +4,7 @@ public interface NodeBase { - void execute(T t, String alias, String[] args); + void execute(T t, String alias, String[] args); //may execute instantly or take some time List suggest(T t, String alias, String[] args); } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java index 7850d1d..b3ea0ff 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java @@ -1,23 +1,18 @@ package me.aurium.beetle.branch.launchpoints.base; -import me.aurium.beetle.branch.fallback.permission.strategies.CommonFallbackStrategy; -import me.aurium.beetle.branch.handlers.context.ContextProducer; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; +import me.aurium.beetle.branch.fallback.strategies.OneBackStrategy; +import me.aurium.beetle.branch.handlers.context.ContextProvider; import me.aurium.beetle.branch.nodes.model.CommandNode; -import me.aurium.beetle.branch.fallback.permission.strategies.ExecutionFallbackStrategy; - -import java.util.Arrays; -import java.util.Objects; +import me.aurium.beetle.branch.fallback.strategies.FallbackSearchStrategy; public class NodeBaseBuilder { - private final ContextProducer producer; + private final ContextProvider producer; private CommandNode base; - private FallbackHandler fallbackHandler = (shit) -> shit.messageSender("Error running command with arguments: " + Arrays.toString(shit.getArgs())); - private ExecutionFallbackStrategy strategy = new CommonFallbackStrategy<>(); + private FallbackSearchStrategy strategy = new OneBackStrategy<>(); - public NodeBaseBuilder(ContextProducer producer) { + public NodeBaseBuilder(ContextProvider producer) { this.producer = producer; } @@ -27,25 +22,10 @@ public NodeBaseBuilder withBaseNode(CommandNode node) { return this; } - public NodeBaseBuilder withFallback(FallbackHandler fallback) { - this.fallbackHandler = fallback; - - return this; - } - - public NodeBaseBuilder withStrategy(ExecutionFallbackStrategy strategy) { + public NodeBaseBuilder withStrategy(FallbackSearchStrategy strategy) { this.strategy = strategy; return this; } - public NodeBase build() { - Objects.requireNonNull(base); - Objects.requireNonNull(fallbackHandler); - Objects.requireNonNull(strategy); - - return null; - - //return new SimpleNodeBase<>(base,producer,fallbackHandler,strategy); - } } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleBaseContext.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleBaseContext.java deleted file mode 100644 index e89eeae..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleBaseContext.java +++ /dev/null @@ -1,18 +0,0 @@ -package me.aurium.beetle.branch.launchpoints.base; - -import me.aurium.beetle.branch.fallback.message.BaseContext; -import me.aurium.beetle.branch.handlers.api.FallbackHandler; - -public class SimpleBaseContext implements BaseContext { - - private final FallbackHandler handler; - - public SimpleBaseContext(FallbackHandler handler) { - this.handler = handler; - } - - @Override - public FallbackHandler getFallback() { - return handler; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java deleted file mode 100644 index 83ed597..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SimpleNodeBase.java +++ /dev/null @@ -1,39 +0,0 @@ -package me.aurium.beetle.branch.launchpoints.base; - -import me.aurium.beetle.branch.fallback.message.BaseContext; -import me.aurium.beetle.branch.handlers.context.ContextProducer; -import me.aurium.beetle.branch.nodes.model.CommandNode; -import me.aurium.beetle.branch.fallback.permission.strategies.ExecutionFallbackStrategy; - -import java.util.List; - -public class SimpleNodeBase implements NodeBase { - - private final CommandNode baseNode; - private final ContextProducer factory; - - private final BaseContext baseContext; - private final ExecutionFallbackStrategy strategy; - - public SimpleNodeBase(CommandNode baseNode, ContextProducer factory, BaseContext baseContext, ExecutionFallbackStrategy strategy) { - - this.baseNode = baseNode; - this.factory = factory; - this.baseContext = baseContext; - this.strategy = strategy; - } - - @Override - public void execute(C executor, String alias, String[] args) { - strategy.attemptPreprocess(executor,alias,args,baseNode).ifPresentOrElse( - result -> strategy.attemptExecution(executor,alias,args,baseNode,result,baseContext,factory), - //else - () -> baseContext.getFallback().handle(factory.produce(executor, alias, args)) - ); - } - - @Override - public List suggest(C c, String alias, String[] args) { - return null; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SyncNodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SyncNodeBase.java new file mode 100644 index 0000000..82d7493 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SyncNodeBase.java @@ -0,0 +1,56 @@ +package me.aurium.beetle.branch.launchpoints.base; + +import me.aurium.beetle.branch.handlers.context.ContextProvider; +import me.aurium.beetle.branch.interfacing.message.model.InterfacingHandler; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.fallback.strategies.FallbackSearchStrategy; +import me.aurium.beetle.branch.nodes.results.SearchInfo; +import me.aurium.beetle.branch.nodes.results.model.Result; + +import java.util.List; + +/** + * Represents a nodebase that will perform it's executions synchronously + * @param + */ +public class SyncNodeBase implements NodeBase { + + private final CommandNode baseNode; + private final FallbackSearchStrategy strategy; + + private final ContextProvider provider; + private final InterfacingHandler handler; + + public SyncNodeBase(CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { + this.baseNode = baseNode; + this.provider = provider; + this.strategy = strategy; + this.handler = handler; + } + + @Override + public void execute(C executor, String alias, String[] args) { + Result> result = strategy.attemptPreprocess(executor,alias,args,baseNode); + + if (!result.isSuccessful()) { + + handler.sendMessage(executor, result.getFailure()); + + ha + return; + } + + + + .ifPresentOrElse( + result -> strategy.attemptExecution(executor,alias,args,baseNode,result,baseContext, provider), + //else + () -> baseContext.getFallback().handle(provider.produce(executor, alias, args)) + ); + } + + @Override + public List suggest(C c, String alias, String[] args) { + return null; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java index 715aa33..cf328d3 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.launchpoints.typeadapter; -import java.util.function.Consumer; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; public interface CommonAdapter extends ManagerAdapter { @@ -15,7 +15,7 @@ default boolean canAdapt(T t) { } @Override - default Consumer failedAdaptAction() { - return (i) -> {}; //noops + default ExecutionResponse failedAdaptAction() { + throw new IllegalStateException("How did you get here (Since canAdapt is always true this should never occur?)"); } } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java index 2eb688b..3e3ed1e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java @@ -1,14 +1,12 @@ package me.aurium.beetle.branch.launchpoints.typeadapter; -import me.aurium.beetle.branch.handlers.context.ContextProducer; - -import java.util.function.Consumer; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; public interface ManagerAdapter { OUTPUT adapt(INPUT input); boolean canAdapt(INPUT input); - Consumer failedAdaptAction(); + ExecutionResponse failedAdaptAction(INPUT input); } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java index 3c0c42b..5867f29 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java @@ -1,19 +1,20 @@ package me.aurium.beetle.branch.nodes; import me.aurium.beetle.branch.block.Block; +import me.aurium.beetle.branch.interfacing.responses.SendableResponse; +import me.aurium.beetle.branch.interfacing.CoreKeys; import me.aurium.beetle.branch.handlers.api.BranchHandler; -import me.aurium.beetle.branch.handlers.api.SuggestionHandler; +import me.aurium.beetle.branch.handlers.api.Execution; import me.aurium.beetle.branch.handlers.context.NodeContext; -import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.model.IdentifiableNode; import me.aurium.beetle.branch.nodes.results.*; -import me.aurium.beetle.branch.fallback.permission.Permission; -import me.aurium.beetle.branch.nodes.results.model.FailingResult; +import me.aurium.beetle.branch.fallback.permissions.Permission; import me.aurium.beetle.branch.nodes.results.model.Result; -import me.aurium.beetle.branch.util.PreStoredHashSet; +import me.aurium.beetle.branch.fun.PreStoredHashSet; import java.util.Deque; import java.util.List; +import java.util.stream.Collectors; /** * TODO: missing a Node for noargs will cause it to rely on fallback rather than throwning exceptions and being bad (DONE - ish) @@ -26,6 +27,7 @@ public class BranchingNode implements IdentifiableNode { private final PreStoredHashSet> nodes; private final Block path; + private final BranchHandler handler; private final Permission permission; @@ -33,6 +35,8 @@ public BranchingNode(PreStoredHashSet> nodes, Block path, Pe this.nodes = nodes; this.path = path; this.permission = permission; + + this.handler = new BranchingHandler<>(nodes); } @Override @@ -57,25 +61,8 @@ public SearchInfo getSpecificNode(SearchInput input) { } @Override - public ExecutionResult getExecutionHandler() { - - if (nodes.getAlreadyStored().isPresent()) { - return nodes.getAlreadyStored().get().getExecutionHandler(); - } else { - return ExecutionResult.empty(); //FALL BACK SOLDIER - } - - } - - @Override - public SuggestionHandler getSuggestionHandler() { - //TODO sort this out - - return (context) -> { - - //this works because this suggestion handler only gets called if we are on this object lmfao - return null; - }; + public BranchHandler getHandling() { + return handler; } @Override @@ -85,19 +72,37 @@ public Permission getPermission() { public static final class BranchingHandler implements BranchHandler { - private final CommandNode alreadyPresent; + private final PreStoredHashSet> nodeShit; + + public BranchingHandler(PreStoredHashSet> nodeShit) { + this.nodeShit = nodeShit; + } - @Override - public void getExecution(NodeContext context) { + @Override + public Result getExecution(NodeContext context) { + if (nodeShit.getAlreadyStored() == null) { + return Result.fail(new NoIntegratedNoArgsBlurb()); + } else { + return nodeShit.getAlreadyStored().getHandling().getExecution(context); + } } @Override public List getSuggestions(NodeContext context) { - return null; + + //TODO fix this bullshit, add close-to-queue + return nodeShit.getContents().stream().map(s -> s.getIdentifier().getIdentifier()).collect(Collectors.toList()); } } + public static final class NoIntegratedNoArgsBlurb extends SendableResponse { + + public NoIntegratedNoArgsBlurb() { + super(CoreKeys.NO_INTEGRATED_NOARGS); + } + } + } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java index f772c54..71d04a6 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java @@ -1,33 +1,33 @@ package me.aurium.beetle.branch.nodes; import me.aurium.beetle.branch.block.Block; -import me.aurium.beetle.branch.handlers.EmptySuggestionHandler; +import me.aurium.beetle.branch.interfacing.responses.SendableResponse; +import me.aurium.beetle.branch.interfacing.CoreKeys; +import me.aurium.beetle.branch.handlers.api.BranchHandler; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; -import me.aurium.beetle.branch.handlers.api.SuggestionHandler; +import me.aurium.beetle.branch.handlers.api.Execution; +import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.nodes.model.EndpointNode; -import me.aurium.beetle.branch.nodes.results.ExecutionResult; import me.aurium.beetle.branch.nodes.results.SearchInput; import me.aurium.beetle.branch.nodes.results.SearchInfo; -import me.aurium.beetle.branch.fallback.permission.Permission; +import me.aurium.beetle.branch.fallback.permissions.Permission; import me.aurium.beetle.branch.nodes.results.model.Result; -import me.aurium.beetle.branch.nodes.results.model.SuccessfulResult; + +import java.util.ArrayList; +import java.util.List; public class SingleNode implements EndpointNode { private final Block identifier; - - private final ExecutionHandler executionHandler; - private final SuggestionHandler suggestionHandler; - private final Permission permission; + private final SingleHandler handler; + public SingleNode(Block identifier, ExecutionHandler executionHandler, Permission permission) { this.identifier = identifier; - this.executionHandler = executionHandler; + this.handler = new SingleHandler<>(executionHandler); this.permission = permission; - - this.suggestionHandler = new EmptySuggestionHandler<>(); } @Override @@ -36,27 +36,58 @@ public Block getIdentifier() { } @Override - public Result> getSpecificNode(SearchInput input) { + public SearchInfo getSpecificNode(SearchInput input) { input.getReducablePath().removeFirst(); //consume - return new SuccessfulResult<>(new SearchInfo<>(this,input)); + return new SearchInfo<>(this,input); } - //TODO these maybe need to go somewhere else to a sort of parser @Override - public ExecutionResult getExecutionHandler() { - return new ExecutionResult<>(executionHandler); + public BranchHandler getHandling() { + return handler; } - @Override - public SuggestionHandler getSuggestionHandler() { - return suggestionHandler; - } @Override public Permission getPermission() { return permission; } + public static class SingleHandler implements BranchHandler { + + private final ExecutionHandler handler; + + public SingleHandler(ExecutionHandler handler) { + this.handler = handler; + } + + @Override + public Result getExecution(NodeContext context) { + context.getResults().reducedPath().removeFirst(); + + if (context.getResults().hasMoreArguments()) { + return Result.fail(new TooManyArgumentsBlurb()); + } + + return Result.success(new Execution(() -> { + handler.handle(context); + })); + } + + @Override + public List getSuggestions(NodeContext context) { + return new ArrayList<>(); + } + + } + + public static class TooManyArgumentsBlurb extends SendableResponse { + + public TooManyArgumentsBlurb() { + super(CoreKeys.TOO_MANY_ARGS); + } + + } + } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java index c0b580f..ef31a7c 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java @@ -3,12 +3,12 @@ import me.aurium.beetle.branch.block.Block; import me.aurium.beetle.branch.block.EmptyBlock; import me.aurium.beetle.branch.block.StringBlock; -import me.aurium.beetle.branch.fallback.permission.Permission; -import me.aurium.beetle.branch.fallback.permission.permissions.EmptyPermission; +import me.aurium.beetle.branch.fallback.permissions.Permission; +import me.aurium.beetle.branch.fallback.permissions.EmptyPermission; import me.aurium.beetle.branch.nodes.BranchingNode; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.model.IdentifiableNode; -import me.aurium.beetle.branch.util.PreStoredHashSet; +import me.aurium.beetle.branch.fun.PreStoredHashSet; import java.util.HashSet; import java.util.Objects; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java index 7b81e72..8804bf6 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/SingleBuilder.java @@ -6,8 +6,8 @@ import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.nodes.SingleNode; import me.aurium.beetle.branch.nodes.model.CommandNode; -import me.aurium.beetle.branch.fallback.permission.Permission; -import me.aurium.beetle.branch.fallback.permission.permissions.EmptyPermission; +import me.aurium.beetle.branch.fallback.permissions.Permission; +import me.aurium.beetle.branch.fallback.permissions.EmptyPermission; import java.util.Objects; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/model/CommandNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/model/CommandNode.java index cde6f34..3bf26f8 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/model/CommandNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/model/CommandNode.java @@ -1,11 +1,9 @@ package me.aurium.beetle.branch.nodes.model; -import me.aurium.beetle.branch.handlers.api.SuggestionHandler; -import me.aurium.beetle.branch.nodes.results.ExecutionResult; +import me.aurium.beetle.branch.handlers.api.BranchHandler; import me.aurium.beetle.branch.nodes.results.SearchInput; import me.aurium.beetle.branch.nodes.results.SearchInfo; -import me.aurium.beetle.branch.fallback.permission.Permission; -import me.aurium.beetle.branch.nodes.results.model.Result; +import me.aurium.beetle.branch.fallback.permissions.Permission; /** * Base object @@ -14,9 +12,8 @@ public interface CommandNode { SearchInfo getSpecificNode(SearchInput path); + BranchHandler getHandling(); - ExecutionResult getExecutionHandler(); - SuggestionHandler getSuggestionHandler(); /** * Gets the permission required to execute and interact with this node. Depending on the base, this may cause the node to become locked, or just completely be ignored. diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java index a4a14e5..11eb7df 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java @@ -1,24 +1,27 @@ package me.aurium.beetle.branch.nodes.results.model; -import me.aurium.beetle.branch.fallback.failure.Failure; - -import java.util.Optional; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; public class FailingResult implements Result { - private final Failure failure; + private final ExecutionResponse failure; - public FailingResult(Failure failure) { + public FailingResult(ExecutionResponse failure) { this.failure = failure; } @Override - public Optional getSuccess() { - return Optional.empty(); + public boolean isSuccessful() { + return false; + } + + @Override + public T getSuccess() { + throw new IllegalStateException("Attempted to get success of a failing result! (e.g. was not checked)"); } @Override - public Optional getFailure() { - return Optional.of(failure); + public ExecutionResponse getFailure() { + return failure; } } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java index a6d6472..9937e58 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java @@ -1,12 +1,21 @@ package me.aurium.beetle.branch.nodes.results.model; -import me.aurium.beetle.branch.fallback.failure.Failure; - -import java.util.Optional; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; public interface Result { - Optional getSuccess(); - Optional getFailure(); + boolean isSuccessful(); + + T getSuccess(); + ExecutionResponse getFailure(); + + //wow this looks familiar (i liked the functionality shhhh) + static Result success(X t) { + return new SuccessfulResult<>(t); + } + + static Result fail(ExecutionResponse failure) { + return new FailingResult<>(failure); + } } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java index 36e33bb..c75d457 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java @@ -1,8 +1,6 @@ package me.aurium.beetle.branch.nodes.results.model; -import me.aurium.beetle.branch.fallback.failure.Failure; - -import java.util.Optional; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; public class SuccessfulResult implements Result { @@ -13,12 +11,17 @@ public SuccessfulResult(T sucessful) { } @Override - public Optional getSuccess() { - return Optional.of(sucessful); + public boolean isSuccessful() { + return true; + } + + @Override + public T getSuccess() { + return sucessful; } @Override - public Optional getFailure() { - return Optional.empty(); + public ExecutionResponse getFailure() { + throw new IllegalStateException("Attempted to get failure of a successful result!"); } } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java index 444e1ef..e5f8080 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java @@ -18,7 +18,7 @@ protected SpigotContext(T t, String alias, String[] strings, CommandNode base } @Override - public void messageSender(String string) { + public void stringSender(String string) { sender.sendMessage(ChatColor.translateAlternateColorCodes('&',string)); //TODO prettify (or just use ContextErrorMessage LMFAO) } } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProvider.java similarity index 82% rename from spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java rename to spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProvider.java index d2700b1..0c24248 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProducer.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProvider.java @@ -1,8 +1,7 @@ package me.aurium.beetle.branch.spigot; import me.aurium.beetle.branch.fallback.message.BaseContext; -import me.aurium.beetle.branch.handlers.context.Context; -import me.aurium.beetle.branch.handlers.context.ContextProducer; +import me.aurium.beetle.branch.handlers.context.ContextProvider; import me.aurium.beetle.branch.handlers.context.NodeContext; import me.aurium.beetle.branch.launchpoints.IllegalSenderException; import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; @@ -10,11 +9,11 @@ import me.aurium.beetle.branch.nodes.results.SearchInfo; import org.bukkit.command.CommandSender; -public class SpigotContextProducer implements ContextProducer { +public class SpigotContextProvider implements ContextProvider { private final ManagerAdapter adapter; - public SpigotContextProducer(ManagerAdapter adapter) { + public SpigotContextProvider(ManagerAdapter adapter) { this.adapter = adapter; } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java index 8df5e86..9f0723d 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java @@ -23,7 +23,7 @@ public NodeBaseBuilder newCommand() { @Override public NodeBaseBuilder newCommand(ManagerAdapter adapter) { - return new NodeBaseBuilder<>(new SpigotContextProducer<>(adapter)); + return new NodeBaseBuilder<>(new SpigotContextProvider<>(adapter)); } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/AdventureMessage.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/AdventureMessage.java new file mode 100644 index 0000000..4d2ff65 --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/AdventureMessage.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.spigot.message; + +public class AdventureMessage { +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotKeys.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotKeys.java new file mode 100644 index 0000000..ffd8116 --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotKeys.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.spigot.message; + +import java.util.UUID; + +public class SpigotKeys { + + + +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java index 4ea5efc..5471fc6 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java @@ -1,22 +1,32 @@ package me.aurium.beetle.branch.spigot.message; -import me.aurium.beetle.branch.fallback.message.CommonKeys; -import me.aurium.beetle.branch.fallback.message.Message; -import me.aurium.beetle.branch.fallback.message.MessageKey; -import me.aurium.beetle.branch.fallback.message.MessageProvider; +import me.aurium.beetle.branch.interfacing.CoreKeys; +import me.aurium.beetle.branch.interfacing.message.Message; +import me.aurium.beetle.branch.interfacing.message.Requirement; +import me.aurium.beetle.branch.interfacing.message.model.MessageProvider; import org.bukkit.command.CommandSender; import java.util.HashMap; import java.util.Map; +import java.util.UUID; public class SpigotMessageProvider implements MessageProvider { - public Map> make() { - Map> messMap = new HashMap<>(); + private final Map> map = new HashMap<>(); + + public SpigotMessageProvider() { + map.put(CoreKeys.TOO_MANY_ARGS, new TextMessage<>("&7HI THERE IDIOT FACE! You provided %args% args!")); + } + + public SpigotMessageProvider with(UUID uuid, Requirement requirement) { + this.map.put(uuid,requirement); + + return this; + } - messMap.put(CommonKeys.TOO_MANY_ARGS, new TextMessage<>("&7HI THERE IDIOT FACE! You provided %args% args!")); - return messMap; + public final Map>make() { + return map; } } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java index 035074a..372a0b7 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.spigot.message; -import me.aurium.beetle.branch.fallback.message.Message; +import me.aurium.beetle.branch.interfacing.message.Message; import org.bukkit.command.CommandSender; public class TextMessage implements Message { diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/FailedAdaptingResponse.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/FailedAdaptingResponse.java new file mode 100644 index 0000000..dd221b6 --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/FailedAdaptingResponse.java @@ -0,0 +1,14 @@ +package me.aurium.beetle.branch.spigot.toPlayer; + +import me.aurium.beetle.branch.interfacing.CoreKeys; +import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; +import me.aurium.beetle.branch.interfacing.responses.SendableResponse; + +import java.util.UUID; + +public class FailedAdaptingResponse extends SendableResponse { + + public FailedAdaptingResponse(String expected_type, String actual_type) { + super(CoreKeys.FAILED_ADAPTING, new MessageInfo("expected_type",toAdapt.getClass().getName()), new MessageInfo("actual_type",)); + } +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/PlayerAdapter.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/PlayerAdapter.java similarity index 57% rename from spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/PlayerAdapter.java rename to spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/PlayerAdapter.java index 4f49a25..a68a81a 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/PlayerAdapter.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/PlayerAdapter.java @@ -1,19 +1,12 @@ -package me.aurium.beetle.branch.spigot; +package me.aurium.beetle.branch.spigot.toPlayer; +import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.function.Consumer; - public class PlayerAdapter implements ManagerAdapter { - private final Consumer failedOperation; - - public PlayerAdapter(Consumer failedOperation) { - this.failedOperation = failedOperation; - } - @Override public Player adapt(CommandSender sender) { return (Player) sender; @@ -25,8 +18,8 @@ public boolean canAdapt(CommandSender sender) { } @Override - public Consumer failedAdaptAction() { - return failedOperation; + public ExecutionResponse failedAdaptAction() { + return new FailedAdaptingResponse(null); } } From 6fe88d0102524ac9e02a3920632666dae34229c7 Mon Sep 17 00:00:00 2001 From: Auriium Date: Wed, 7 Apr 2021 20:45:09 -0700 Subject: [PATCH 27/56] intermediary commit, finish up basics of message and response system --- core/pom.xml | 2 +- .../fallback/permissions/EmptyPermission.java | 5 +++ .../permissions/PredicatePermission.java | 9 +++- .../fallback/strategies/OneBackStrategy.java | 42 ++++++++++--------- .../strategies/PermissionLockoutStrategy.java | 26 ++++++++++++ .../branch/handlers/api/BranchHandler.java | 2 +- .../beetle/branch/handlers/api/Execution.java | 16 +++++-- .../handlers/context/AbstractNodeContext.java | 14 ++----- .../handlers/context/ContextProvider.java | 3 +- .../branch/handlers/context/NodeContext.java | 14 +++---- .../branch/interfacing/BlurbParser.java | 8 ---- .../beetle/branch/interfacing/CoreKeys.java | 14 ------- .../branch/interfacing/FallbackPair.java | 7 ---- .../branch/interfacing/ResultInterfacer.java | 4 -- .../common/FailedAdaptingResponse.java | 27 ++++++++++++ .../common/NoIntegratedArgsResponse.java | 36 ++++++++++++++++ .../common/NoPermissionResponse.java | 16 +++++++ .../common/TooManyArgsResponse.java | 22 ++++++++++ .../handlers/CommonInterfacingHandler.java | 26 ++++++++++++ .../handlers/CommonMessageMap.java | 22 ++++++++++ .../handlers/CommonResponseActionHandler.java | 32 ++++++++++++++ .../handlers/InterfacingHandler.java | 15 +++++++ .../interfacing/handlers/MessageMap.java | 11 +++++ .../interfacing/handlers/MessageProvider.java | 12 ++++++ .../handlers/ResponseActionHandler.java | 13 ++++++ .../branch/interfacing/message/Message.java | 9 ---- .../interfacing/message/Requirement.java | 13 ------ .../message/impl/CommonMessageHandler.java | 35 ---------------- .../message/impl/CommonResponseHandler.java | 27 ------------ .../message/model/InterfacingHandler.java | 16 ------- .../message/model/MessageInfo.java | 24 ----------- .../message/model/MessageProvider.java | 13 ------ .../message/model/ResponseHandler.java | 18 -------- .../branch/interfacing/model/Message.java | 7 ++++ .../branch/interfacing/model/Response.java | 5 +++ .../interfacing/model/ResponseAction.java | 9 ++++ .../responses/ExecutionResponse.java | 17 -------- .../responses/SendableResponse.java | 27 ------------ .../common/NoPermissionResponse.java | 20 --------- .../launchpoints/base/NodeBaseBuilder.java | 6 +-- .../launchpoints/base/SyncNodeBase.java | 21 ++++++---- .../typeadapter/CommonAdapter.java | 15 ++++--- .../typeadapter/ManagerAdapter.java | 9 +++- .../beetle/branch/nodes/BranchingNode.java | 16 ++----- .../beetle/branch/nodes/SingleNode.java | 30 +++++++------ .../nodes/builders/BranchingBuilder.java | 2 +- .../branch/nodes/results/ExecutionResult.java | 22 ---------- .../nodes/results/SuggestionResult.java | 4 -- .../nodes/results/model/FailingResult.java | 13 ++++-- .../branch/nodes/results/model/Result.java | 9 ++-- .../nodes/results/model/SuccessfulResult.java | 4 +- .../{fun => utility}/PreStoredHashSet.java | 3 +- .../beetle/branch/spigot/SpigotContext.java | 25 ++++++++--- .../branch/spigot/SpigotContextProvider.java | 22 ++++------ .../beetle/branch/spigot/SpigotManager.java | 4 +- .../spigot/message/FancyTextMessage.java | 4 ++ .../spigot/message/SpigotMessageProvider.java | 30 ++++--------- .../branch/spigot/message/TextMessage.java | 15 ++++--- .../toPlayer/FailedAdaptingResponse.java | 14 ------- .../branch/spigot/toPlayer/PlayerAdapter.java | 7 ++-- 60 files changed, 463 insertions(+), 450 deletions(-) create mode 100644 core/src/main/java/me/aurium/beetle/branch/fallback/strategies/PermissionLockoutStrategy.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/BlurbParser.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/CoreKeys.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/FallbackPair.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/ResultInterfacer.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/common/FailedAdaptingResponse.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoIntegratedArgsResponse.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoPermissionResponse.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/common/TooManyArgsResponse.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonInterfacingHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonMessageMap.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonResponseActionHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/InterfacingHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/MessageMap.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/MessageProvider.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/ResponseActionHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/Message.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/Requirement.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonMessageHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonResponseHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/InterfacingHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageInfo.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageProvider.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/ResponseHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/model/Message.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/model/Response.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/model/ResponseAction.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/ExecutionResponse.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/SendableResponse.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/common/NoPermissionResponse.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/results/ExecutionResult.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/results/SuggestionResult.java rename core/src/main/java/me/aurium/beetle/branch/{fun => utility}/PreStoredHashSet.java (96%) create mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/FancyTextMessage.java delete mode 100644 spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/FailedAdaptingResponse.java diff --git a/core/pom.xml b/core/pom.xml index 09d2689..1f7cb8a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -22,7 +22,7 @@ me.aurium beetle-core - 0.4.1 + 1.1.1 diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/EmptyPermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/EmptyPermission.java index a2c2125..d6c4831 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/EmptyPermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/EmptyPermission.java @@ -6,4 +6,9 @@ public class EmptyPermission implements Permission { public boolean attempt(T sender, String alias, String[] args) { return true; } + + @Override + public String easyName() { + return "none"; //TODO perhaps throw? This shouldn't happen. + } } diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/PredicatePermission.java b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/PredicatePermission.java index 77609e6..20232bb 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/PredicatePermission.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/permissions/PredicatePermission.java @@ -4,9 +4,11 @@ public class PredicatePermission implements Permission { + private final String easyName; private final Predicate predicate; - public PredicatePermission(Predicate predicate) { + public PredicatePermission(String easyName, Predicate predicate) { + this.easyName = easyName; this.predicate = predicate; } @@ -14,4 +16,9 @@ public PredicatePermission(Predicate predicate) { public boolean attempt(T sender, String alias, String[] args) { return predicate.test(sender); } + + @Override + public String easyName() { + return easyName; + } } diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/OneBackStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/OneBackStrategy.java index fc5a47e..4b635e2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/OneBackStrategy.java +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/OneBackStrategy.java @@ -1,15 +1,32 @@ package me.aurium.beetle.branch.fallback.strategies; -import me.aurium.beetle.branch.interfacing.responses.common.NoPermissionResponse; -import me.aurium.beetle.branch.fallback.message.BaseContext; -import me.aurium.beetle.branch.handlers.api.Execution; -import me.aurium.beetle.branch.handlers.context.ContextProvider; -import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.interfacing.common.NoPermissionResponse; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInput; import me.aurium.beetle.branch.nodes.results.SearchInfo; import me.aurium.beetle.branch.nodes.results.model.Result; +/** + * Fallback and processing strategy that does the following actions: + * + * Attempts to get a node via arguments search. It then checks if the user has permission to access the node. + * If they do not, it falls back a single node and checks again. This repeats until the user has permission or + * until the search reaches the base node, in which case a response is fired as a failure. + * + * In practice: + * + * Node tree looks like + * + * /kitpvp moderation ban + * /kitpvp moderation kick + * + * User has permissions for kitpvp.moderation but not kitpvp.moderation.ban and tries to execute kitpvp moderation ban + * + * Searcher sees no permissions for ban command and so it falls back to the no-args of /kitpvp moderation which is + * then executed. + * + * @param + */ public class OneBackStrategy implements FallbackSearchStrategy { @Override @@ -25,7 +42,7 @@ public Result> attemptPreprocess(T sender, String alias, String[] //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. if (toBeExecuted.resultingNode().equals(baseNode)) { - return Result.fail(new NoPermissionResponse(baseNode)); + return Result.fail(new NoPermissionResponse(baseNode.getPermission().easyName())); } else { toBeExecuted = baseNode.getSpecificNode(input.withoutTop()); //regress backwards a node @@ -36,19 +53,6 @@ public Result> attemptPreprocess(T sender, String alias, String[] } - @Override - public Result attemptExecution(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result, BaseContext baseContext, ContextProvider producer) { - NodeContext produced = producer.produce(sender,alias,args,baseNode, result, baseContext); - - Result info = result.resultingNode().getHandling().getExecution(produced); - - if (!info.isSuccessful()) { - return info; - } - - result.resultingNode().getHandling().getExecutionHandler().getExecution().orElseThrow().handle(produced); //this should never be null thanks to the preprocess - } - //TODO old code - refer to it if you need to /*SearchInput input = SearchInput.of(args); diff --git a/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/PermissionLockoutStrategy.java b/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/PermissionLockoutStrategy.java new file mode 100644 index 0000000..e283963 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/fallback/strategies/PermissionLockoutStrategy.java @@ -0,0 +1,26 @@ +package me.aurium.beetle.branch.fallback.strategies; + +import me.aurium.beetle.branch.interfacing.common.NoPermissionResponse; +import me.aurium.beetle.branch.nodes.model.CommandNode; +import me.aurium.beetle.branch.nodes.results.SearchInfo; +import me.aurium.beetle.branch.nodes.results.SearchInput; +import me.aurium.beetle.branch.nodes.results.model.Result; + +/** + * Simple fallback strategy that if the sender has no permission to execute the command they are sent a failing response. + * @param + */ +public class PermissionLockoutStrategy implements FallbackSearchStrategy { + @Override + public Result> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode) { + + SearchInput input = SearchInput.of(args); + SearchInfo toBeExecuted = baseNode.getSpecificNode(input); + + if (!toBeExecuted.resultingNode().getPermission().attempt(sender, alias, args)) { + return Result.fail(new NoPermissionResponse(toBeExecuted.resultingNode().getPermission().easyName())); + } + + return Result.success(toBeExecuted); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java index 3704010..631aaa2 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java @@ -7,7 +7,7 @@ public interface BranchHandler { - Result getExecution(NodeContext context); + Result> getExecution(NodeContext context); List getSuggestions(NodeContext context); } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java b/core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java index c22d3d6..ec9af67 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java @@ -2,10 +2,18 @@ import me.aurium.beetle.branch.handlers.context.NodeContext; -public class Execution { - private final Runnable runnable; +public class Execution implements Runnable { - public Execution(Runnable runnable) { - this.runnable = runnable; + private final ExecutionHandler handler; + private final NodeContext node; + + public Execution(ExecutionHandler handler, NodeContext node) { + this.handler = handler; + this.node = node; + } + + @Override + public void run() { + handler.handle(node); } } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java index 62a24a8..43e046f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/AbstractNodeContext.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.handlers.context; -import me.aurium.beetle.branch.fallback.message.BaseContext; + import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInfo; @@ -12,14 +12,12 @@ public abstract class AbstractNodeContext implements NodeContext { private final CommandNode baseNode; private final SearchInfo searchInfo; - private final BaseContext baseContext; - protected AbstractNodeContext(T t, String sender, String[] args, CommandNode baseNode, SearchInfo result, BaseContext baseContext) { - this.sender = t; - this.alias = sender; + protected AbstractNodeContext(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result) { + this.sender = sender; + this.alias = alias; this.args = args; - this.baseContext = baseContext; this.searchInfo = result; this.baseNode = baseNode; } @@ -49,8 +47,4 @@ public SearchInfo getResults() { return searchInfo; } - @Override - public BaseContext getBaseContext() { - return baseContext; - } } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProvider.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProvider.java index b9ec494..714f186 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProvider.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProvider.java @@ -1,6 +1,5 @@ package me.aurium.beetle.branch.handlers.context; -import me.aurium.beetle.branch.fallback.message.BaseContext; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInfo; @@ -9,6 +8,6 @@ */ public interface ContextProvider { - NodeContext produce(T sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search, BaseContext baseContext); + NodeContext produce(T sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search); } diff --git a/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java b/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java index b0cf26b..fc0927e 100644 --- a/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java +++ b/core/src/main/java/me/aurium/beetle/branch/handlers/context/NodeContext.java @@ -1,8 +1,7 @@ package me.aurium.beetle.branch.handlers.context; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; -import me.aurium.beetle.branch.fallback.message.BaseContext; -import me.aurium.beetle.branch.interfacing.message.Message; +import me.aurium.beetle.branch.interfacing.model.Message; +import me.aurium.beetle.branch.interfacing.model.Response; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInfo; @@ -14,7 +13,6 @@ public interface NodeContext { String[] getArgs(); CommandNode getBaseExecutedNode(); SearchInfo getResults(); - BaseContext getBaseContext(); /** * Sends an ugly string to the player using the platform's message handler. Whatever floats your boat! @@ -26,13 +24,13 @@ public interface NodeContext { * Sends a fancy formatted message to a player using the bound platform's message-handler * @param message message */ - void messageSender(Message message); + void messageSender(Message message); /** - * Sends a fancy formatted failure to a player that is bound to a Message using the platform's message-handler - * @param failure the failure + * Sends a formatted response to a player coded to a key + * @param failure the response */ - void failureSender(ExecutionResponse failure); + void response(Response failure); } diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/BlurbParser.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/BlurbParser.java deleted file mode 100644 index 8fc534b..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/BlurbParser.java +++ /dev/null @@ -1,8 +0,0 @@ -package me.aurium.beetle.branch.interfacing; - -public interface BlurbParser { - - void parse(BlurbParser parser); - - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/CoreKeys.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/CoreKeys.java deleted file mode 100644 index 35a337d..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/CoreKeys.java +++ /dev/null @@ -1,14 +0,0 @@ -package me.aurium.beetle.branch.interfacing; - -import java.util.UUID; - -public class CoreKeys { - - public static final UUID TOO_MANY_ARGS = UUID.randomUUID(); - public static final UUID NO_INTEGRATED_NOARGS = UUID.randomUUID(); - - //When someone has no permissions to execute a node - public static final UUID NO_PERMISSIONS = UUID.randomUUID(); - public static final UUID FAILED_ADAPTING = UUID.randomUUID(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/FallbackPair.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/FallbackPair.java deleted file mode 100644 index 1ae0b2c..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/FallbackPair.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.aurium.beetle.branch.interfacing; - -public interface FallbackPair { - - //TODO make this liek have two things: fallback for the base and fallback pre-base (for shit like adapter fails) - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/ResultInterfacer.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/ResultInterfacer.java deleted file mode 100644 index 695a43a..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/ResultInterfacer.java +++ /dev/null @@ -1,4 +0,0 @@ -package me.aurium.beetle.branch.interfacing; - -public interface ResultInterfacer { -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/common/FailedAdaptingResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/common/FailedAdaptingResponse.java new file mode 100644 index 0000000..59886b0 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/common/FailedAdaptingResponse.java @@ -0,0 +1,27 @@ +package me.aurium.beetle.branch.interfacing.common; + +import me.aurium.beetle.branch.interfacing.model.Response; + +/** + * Represents a response to the scenario in which a certain object was attempted to be adapted to an extending type + * but it was not an instance of it (or similar scenarios, such as attempting to flatmap a certain type to another.) + */ +public class FailedAdaptingResponse implements Response { + + private final Class expectedClass; + private final Class receivedClass; + + public FailedAdaptingResponse(Class expectedClass, Class receivedClass) { + this.expectedClass = expectedClass; + this.receivedClass = receivedClass; + } + + public Class getExpectedClass() { + return expectedClass; + } + + public Class getReceivedClass() { + return receivedClass; + } + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoIntegratedArgsResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoIntegratedArgsResponse.java new file mode 100644 index 0000000..54037ff --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoIntegratedArgsResponse.java @@ -0,0 +1,36 @@ +package me.aurium.beetle.branch.interfacing.common; + +import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.interfacing.model.Response; + +import java.util.ArrayList; +import java.util.List; + +//This can probably be improved + +/** + * Represents a response to the scenario in which not enough arguments were supplied to execute a splittable + * node, so all alternative commands are suggested. This needs work, however, as it cannot list all alternative commands + * and their arguments just yet. (logic for this must be some kind of greedy queue consumer with potentially dangerous loops) + */ +public class NoIntegratedArgsResponse implements Response { + + private final List alternativeCommands; + + public NoIntegratedArgsResponse(List alternativeCommands) { + this.alternativeCommands = alternativeCommands; + } + + public List getAlternativeCommands() { + return alternativeCommands; + } + + /** + * Use a basic nodeContext to produce a simple no integrated args response + * @param context lah + * @return lah + */ + public static NoIntegratedArgsResponse of(NodeContext context) { + return new NoIntegratedArgsResponse(new ArrayList<>()); //TODO IMPLEMENT + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoPermissionResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoPermissionResponse.java new file mode 100644 index 0000000..fdfc797 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoPermissionResponse.java @@ -0,0 +1,16 @@ +package me.aurium.beetle.branch.interfacing.common; + +import me.aurium.beetle.branch.interfacing.model.Response; + +public class NoPermissionResponse implements Response { + + private final String lackingPermission; + + public NoPermissionResponse(String lackingPermission) { + this.lackingPermission = lackingPermission; + } + + public String getLackingPermission() { + return lackingPermission; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/common/TooManyArgsResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/common/TooManyArgsResponse.java new file mode 100644 index 0000000..219c1f1 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/common/TooManyArgsResponse.java @@ -0,0 +1,22 @@ +package me.aurium.beetle.branch.interfacing.common; + +import me.aurium.beetle.branch.interfacing.model.Response; + +public class TooManyArgsResponse implements Response { + + private final int expectedArgs; + private final int suppliedArgs; + + public TooManyArgsResponse(int expectedArgs, int suppliedArgs) { + this.expectedArgs = expectedArgs; + this.suppliedArgs = suppliedArgs; + } + + public int getExpectedArgs() { + return expectedArgs; + } + + public int getSuppliedArgs() { + return suppliedArgs; + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonInterfacingHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonInterfacingHandler.java new file mode 100644 index 0000000..2f451b8 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonInterfacingHandler.java @@ -0,0 +1,26 @@ +package me.aurium.beetle.branch.interfacing.handlers; + +import me.aurium.beetle.branch.interfacing.model.Message; +import me.aurium.beetle.branch.interfacing.model.Response; + +import java.util.concurrent.FutureTask; + +public class CommonInterfacingHandler implements InterfacingHandler { + + private final ResponseActionHandler handler; + + public CommonInterfacingHandler(ResponseActionHandler provider) { + this.handler = provider; + } + + @Override + public void sendMessage(T recipent, Message message) { + message.accept(recipent); + } + + @Override + public void sendMessage(T recipent, Response response) { + handler.getMessage(response).accept(recipent); + } + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonMessageMap.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonMessageMap.java new file mode 100644 index 0000000..2acfe8b --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonMessageMap.java @@ -0,0 +1,22 @@ +package me.aurium.beetle.branch.interfacing.handlers; + +import me.aurium.beetle.branch.interfacing.model.Response; +import me.aurium.beetle.branch.interfacing.model.ResponseAction; + +import java.util.HashMap; +import java.util.Map; + +public class CommonMessageMap implements MessageMap, MessageProvider { + + private final Map,ResponseAction> map = new HashMap<>(); + + @Override + public void add(Class key, ResponseAction action) { + map.put(key,action); //TODO checks + } + + @Override + public ResponseActionHandler make() { + return new CommonResponseActionHandler<>(Map.copyOf(map)); + } +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonResponseActionHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonResponseActionHandler.java new file mode 100644 index 0000000..0cf984f --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/CommonResponseActionHandler.java @@ -0,0 +1,32 @@ +package me.aurium.beetle.branch.interfacing.handlers; + +import me.aurium.beetle.branch.interfacing.model.Message; +import me.aurium.beetle.branch.interfacing.model.Response; +import me.aurium.beetle.branch.interfacing.model.ResponseAction; + +import java.util.Map; + +public class CommonResponseActionHandler implements ResponseActionHandler { + + private final Map, ResponseAction> map; + + CommonResponseActionHandler(Map, ResponseAction> map) { + this.map = map; + } + + @SuppressWarnings("unchecked") + public ResponseAction get(Class clazz) { + ResponseAction action = (ResponseAction) map.get(clazz); + + if (action == null) throw new IllegalStateException("A response was requested but internal map had no binding!"); + + return action; + } + + @SuppressWarnings("unchecked") + public Message getMessage(C response) { + return get((Class) response.getClass()).consume(response); + } + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/InterfacingHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/InterfacingHandler.java new file mode 100644 index 0000000..cc046ae --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/InterfacingHandler.java @@ -0,0 +1,15 @@ +package me.aurium.beetle.branch.interfacing.handlers; + +import me.aurium.beetle.branch.interfacing.model.Message; +import me.aurium.beetle.branch.interfacing.model.Response; + +/** + * Represents a centralized source for message providing as well as context creation. I am aware i spelled recipient wrong. + * @param the type + */ +public interface InterfacingHandler { + + void sendMessage(T recipent, Message message); + void sendMessage(T recipent, Response response); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/MessageMap.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/MessageMap.java new file mode 100644 index 0000000..cfccf71 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/MessageMap.java @@ -0,0 +1,11 @@ +package me.aurium.beetle.branch.interfacing.handlers; + +import me.aurium.beetle.branch.interfacing.handlers.ResponseActionHandler; +import me.aurium.beetle.branch.interfacing.model.Response; +import me.aurium.beetle.branch.interfacing.model.ResponseAction; + +public interface MessageMap { + + void add(Class key, ResponseAction action); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/MessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/MessageProvider.java new file mode 100644 index 0000000..6d726fd --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/MessageProvider.java @@ -0,0 +1,12 @@ +package me.aurium.beetle.branch.interfacing.handlers; + +import me.aurium.beetle.branch.interfacing.model.Response; +import me.aurium.beetle.branch.interfacing.model.ResponseAction; + +import java.util.Map; + +public interface MessageProvider { + + ResponseActionHandler make(); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/ResponseActionHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/ResponseActionHandler.java new file mode 100644 index 0000000..79c346d --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/handlers/ResponseActionHandler.java @@ -0,0 +1,13 @@ +package me.aurium.beetle.branch.interfacing.handlers; + +import me.aurium.beetle.branch.interfacing.model.Message; +import me.aurium.beetle.branch.interfacing.model.Response; +import me.aurium.beetle.branch.interfacing.model.ResponseAction; + +public interface ResponseActionHandler { + + ResponseAction get(Class clazz); + Message getMessage(C response); + + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Message.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Message.java deleted file mode 100644 index 88c6a85..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Message.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.aurium.beetle.branch.interfacing.message; - -import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; - -public interface Message { - - void accept(C sender); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Requirement.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Requirement.java deleted file mode 100644 index 4de91fa..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/Requirement.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.aurium.beetle.branch.interfacing.message; - -import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; - -/** - * rename messageRequirement - * @param - */ -public interface Requirement { - - Message toMessage(MessageInfo... infos); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonMessageHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonMessageHandler.java deleted file mode 100644 index 2c14de4..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonMessageHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -package me.aurium.beetle.branch.interfacing.message.impl; - -import me.aurium.beetle.branch.interfacing.message.model.InterfacingHandler; -import me.aurium.beetle.branch.interfacing.message.Message; -import me.aurium.beetle.branch.interfacing.message.model.MessageProvider; -import me.aurium.beetle.branch.interfacing.message.model.ResponseHandler; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; - -public class CommonMessageHandler implements InterfacingHandler { - - private final ResponseHandler handler; - - public CommonMessageHandler(MessageProvider provider) { - this.handler = new CommonResponseHandler<>(provider); - } - - public CommonMessageHandler(ResponseHandler handler) { - this.handler = handler; - } - - @Override - public void sendMessage(T recipent, Message message) { - message.accept(recipent); - } - - @Override - public void sendMessage(T recipent, ExecutionResponse response) { - handler.sendMessage(recipent,response); - } - - @Override - public void sendMessage(T recipent, String message) { - - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonResponseHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonResponseHandler.java deleted file mode 100644 index 8ab63a8..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/impl/CommonResponseHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package me.aurium.beetle.branch.interfacing.message.impl; - -import me.aurium.beetle.branch.interfacing.message.Requirement; -import me.aurium.beetle.branch.interfacing.message.model.ResponseHandler; -import me.aurium.beetle.branch.interfacing.message.model.MessageProvider; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; - -import java.util.Map; -import java.util.UUID; - -public class CommonResponseHandler implements ResponseHandler { - - private final Map> requirements; - - public CommonResponseHandler(MessageProvider requirements) { - this.requirements = requirements.make(); - } - - @Override - public void sendMessage(T sender, ExecutionResponse info) { - Requirement requirement = requirements.get(info.getCorrelatedMessage()); - - if (requirement == null) throw new IllegalArgumentException("No message mapped to key!"); - - requirement.toMessage(info.getRequirements()).accept(sender); - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/InterfacingHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/InterfacingHandler.java deleted file mode 100644 index 2f46895..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/InterfacingHandler.java +++ /dev/null @@ -1,16 +0,0 @@ -package me.aurium.beetle.branch.interfacing.message.model; - -import me.aurium.beetle.branch.interfacing.message.Message; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; - -/** - * Represents a centralized source for message providing as well as context creation. I am aware i spelled recipient wrong. - * @param the type - */ -public interface InterfacingHandler { - - void sendMessage(T recipent, Message message); - void sendMessage(T recipent, ExecutionResponse response); - void sendMessage(T recipent, String message); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageInfo.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageInfo.java deleted file mode 100644 index 94dcd88..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageInfo.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.aurium.beetle.branch.interfacing.message.model; - -public class MessageInfo { - - private final String key; - private final String value; - - public MessageInfo(String key, String value) { - this.key = key; - this.value = value; - } - - public static MessageInfo of(String key, String value) { - return new MessageInfo(key, value); - } - - public String getKey() { - return this.key; - } - - public String getValue() { - return this.value; - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageProvider.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageProvider.java deleted file mode 100644 index d9d049b..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/MessageProvider.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.aurium.beetle.branch.interfacing.message.model; - -import me.aurium.beetle.branch.interfacing.message.Message; -import me.aurium.beetle.branch.interfacing.message.Requirement; - -import java.util.Map; -import java.util.UUID; - -public interface MessageProvider { - - Map> make(); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/ResponseHandler.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/ResponseHandler.java deleted file mode 100644 index dc5191a..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/message/model/ResponseHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package me.aurium.beetle.branch.interfacing.message.model; - -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; - -/** - * Represents something that will handle the accessing of responses from the bound map and sending them. - * @param the type - */ -public interface ResponseHandler { - - /** - * Sends a message bound to the execution response, or throws an exception if not present - * @param sender the sender - * @param key the response to send - */ - void sendMessage(T sender, ExecutionResponse key); - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/model/Message.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/model/Message.java new file mode 100644 index 0000000..d97b2ad --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/model/Message.java @@ -0,0 +1,7 @@ +package me.aurium.beetle.branch.interfacing.model; + +public interface Message { + + void accept(C sender); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/model/Response.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/model/Response.java new file mode 100644 index 0000000..528d185 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/model/Response.java @@ -0,0 +1,5 @@ +package me.aurium.beetle.branch.interfacing.model; + +public interface Response { + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/model/ResponseAction.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/model/ResponseAction.java new file mode 100644 index 0000000..564c981 --- /dev/null +++ b/core/src/main/java/me/aurium/beetle/branch/interfacing/model/ResponseAction.java @@ -0,0 +1,9 @@ +package me.aurium.beetle.branch.interfacing.model; + +import me.aurium.beetle.branch.interfacing.model.Message; + +public interface ResponseAction { + + Message consume(C response); + +} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/ExecutionResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/ExecutionResponse.java deleted file mode 100644 index 7a336aa..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/ExecutionResponse.java +++ /dev/null @@ -1,17 +0,0 @@ -package me.aurium.beetle.branch.interfacing.responses; - -import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; - -import java.util.UUID; - -/** - * Represents a prebuilt response to a request or command that is bound to the handler. - */ -public interface ExecutionResponse { - - UUID getCorrelatedMessage(); - MessageInfo[] getRequirements(); - - //TODO to throwable - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/SendableResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/SendableResponse.java deleted file mode 100644 index 61f8916..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/SendableResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package me.aurium.beetle.branch.interfacing.responses; - -import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; - -import java.util.UUID; - -public class SendableResponse implements ExecutionResponse { - - private final UUID key; - private final MessageInfo[] requirements; - - public SendableResponse(UUID key, MessageInfo... requirements) { - this.key = key; - this.requirements = requirements; - } - - @Override - public UUID getCorrelatedMessage() { - return key; - } - - @Override - public MessageInfo[] getRequirements() { - return requirements; - } - -} diff --git a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/common/NoPermissionResponse.java b/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/common/NoPermissionResponse.java deleted file mode 100644 index 0816cf5..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/interfacing/responses/common/NoPermissionResponse.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.aurium.beetle.branch.interfacing.responses.common; - -import me.aurium.beetle.branch.interfacing.responses.SendableResponse; -import me.aurium.beetle.branch.interfacing.CoreKeys; -import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; -import me.aurium.beetle.branch.nodes.model.CommandNode; - -public class NoPermissionResponse extends SendableResponse { - - public NoPermissionResponse(CommandNode node) { - super(CoreKeys.NO_PERMISSIONS, new NoPermissionInfo(node)); - } - - public static class NoPermissionInfo extends MessageInfo { - - public NoPermissionInfo(CommandNode node) { - super("permission", node.getPermission().easyName()); - } - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java index b3ea0ff..eb63eba 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java @@ -7,15 +7,11 @@ public class NodeBaseBuilder { - private final ContextProvider producer; + private ContextProvider producer; private CommandNode base; private FallbackSearchStrategy strategy = new OneBackStrategy<>(); - public NodeBaseBuilder(ContextProvider producer) { - this.producer = producer; - } - public NodeBaseBuilder withBaseNode(CommandNode node) { this.base = node; diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SyncNodeBase.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SyncNodeBase.java index 82d7493..0353fff 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SyncNodeBase.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/base/SyncNodeBase.java @@ -1,7 +1,9 @@ package me.aurium.beetle.branch.launchpoints.base; +import me.aurium.beetle.branch.handlers.api.Execution; import me.aurium.beetle.branch.handlers.context.ContextProvider; -import me.aurium.beetle.branch.interfacing.message.model.InterfacingHandler; +import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.interfacing.handlers.InterfacingHandler; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.fallback.strategies.FallbackSearchStrategy; import me.aurium.beetle.branch.nodes.results.SearchInfo; @@ -33,20 +35,21 @@ public void execute(C executor, String alias, String[] args) { Result> result = strategy.attemptPreprocess(executor,alias,args,baseNode); if (!result.isSuccessful()) { - handler.sendMessage(executor, result.getFailure()); - - ha return; } + SearchInfo info = result.getSuccess(); + NodeContext produced = provider.produce(executor,alias,args,baseNode,info); + + Result> execution = info.resultingNode().getHandling().getExecution(produced); + if (!execution.isSuccessful()) { + handler.sendMessage(executor, execution.getFailure()); + return; + } - .ifPresentOrElse( - result -> strategy.attemptExecution(executor,alias,args,baseNode,result,baseContext, provider), - //else - () -> baseContext.getFallback().handle(provider.produce(executor, alias, args)) - ); + execution.getSuccess().run(); } @Override diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java index cf328d3..84c01e3 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java @@ -1,21 +1,26 @@ package me.aurium.beetle.branch.launchpoints.typeadapter; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; +import me.aurium.beetle.branch.interfacing.common.FailedAdaptingResponse; +import me.aurium.beetle.branch.interfacing.model.Response; +/** + * Represents an adapter that does not convert and simply returns the same object + * @param the object type + */ public interface CommonAdapter extends ManagerAdapter { @Override - default T adapt(T in) { - return in; + default T adapt(T input) { + return input; } @Override - default boolean canAdapt(T t) { + default boolean canAdapt(T input) { return true; } @Override - default ExecutionResponse failedAdaptAction() { + default FailedAdaptingResponse failedParseResponse(T input) { throw new IllegalStateException("How did you get here (Since canAdapt is always true this should never occur?)"); } } diff --git a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java index 3e3ed1e..be6acdc 100644 --- a/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java +++ b/core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java @@ -1,12 +1,17 @@ package me.aurium.beetle.branch.launchpoints.typeadapter; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; +import me.aurium.beetle.branch.interfacing.common.FailedAdaptingResponse; +/** + * Represents something that can convert an object of a certain type to another object + * @param Input object type + * @param Output object type + */ public interface ManagerAdapter { OUTPUT adapt(INPUT input); boolean canAdapt(INPUT input); - ExecutionResponse failedAdaptAction(INPUT input); + FailedAdaptingResponse failedParseResponse(INPUT input); } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java index 5867f29..1f92bf7 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/BranchingNode.java @@ -1,16 +1,15 @@ package me.aurium.beetle.branch.nodes; import me.aurium.beetle.branch.block.Block; -import me.aurium.beetle.branch.interfacing.responses.SendableResponse; -import me.aurium.beetle.branch.interfacing.CoreKeys; import me.aurium.beetle.branch.handlers.api.BranchHandler; import me.aurium.beetle.branch.handlers.api.Execution; import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.interfacing.common.NoIntegratedArgsResponse; import me.aurium.beetle.branch.nodes.model.IdentifiableNode; import me.aurium.beetle.branch.nodes.results.*; import me.aurium.beetle.branch.fallback.permissions.Permission; import me.aurium.beetle.branch.nodes.results.model.Result; -import me.aurium.beetle.branch.fun.PreStoredHashSet; +import me.aurium.beetle.branch.utility.PreStoredHashSet; import java.util.Deque; import java.util.List; @@ -80,9 +79,9 @@ public BranchingHandler(PreStoredHashSet> nodeShit) { @Override - public Result getExecution(NodeContext context) { + public Result> getExecution(NodeContext context) { if (nodeShit.getAlreadyStored() == null) { - return Result.fail(new NoIntegratedNoArgsBlurb()); + return Result.fail(NoIntegratedArgsResponse.of(context)); } else { return nodeShit.getAlreadyStored().getHandling().getExecution(context); } @@ -97,12 +96,5 @@ public List getSuggestions(NodeContext context) { } - public static final class NoIntegratedNoArgsBlurb extends SendableResponse { - - public NoIntegratedNoArgsBlurb() { - super(CoreKeys.NO_INTEGRATED_NOARGS); - } - } - } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java index 71d04a6..5ec3ce5 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/SingleNode.java @@ -1,12 +1,11 @@ package me.aurium.beetle.branch.nodes; import me.aurium.beetle.branch.block.Block; -import me.aurium.beetle.branch.interfacing.responses.SendableResponse; -import me.aurium.beetle.branch.interfacing.CoreKeys; import me.aurium.beetle.branch.handlers.api.BranchHandler; import me.aurium.beetle.branch.handlers.api.ExecutionHandler; import me.aurium.beetle.branch.handlers.api.Execution; import me.aurium.beetle.branch.handlers.context.NodeContext; +import me.aurium.beetle.branch.interfacing.common.TooManyArgsResponse; import me.aurium.beetle.branch.nodes.model.EndpointNode; import me.aurium.beetle.branch.nodes.results.SearchInput; import me.aurium.beetle.branch.nodes.results.SearchInfo; @@ -16,6 +15,10 @@ import java.util.ArrayList; import java.util.List; +/** + * Represents a node that can do one action and takes no arguments and has no tabcompletion + * @param the type of executor + */ public class SingleNode implements EndpointNode { private final Block identifier; @@ -62,16 +65,18 @@ public SingleHandler(ExecutionHandler handler) { } @Override - public Result getExecution(NodeContext context) { - context.getResults().reducedPath().removeFirst(); + public Result> getExecution(NodeContext context) { + SearchInfo info = context.getResults(); - if (context.getResults().hasMoreArguments()) { - return Result.fail(new TooManyArgumentsBlurb()); + info.reducedPath().removeFirst(); + + if (info.hasMoreArguments()) { + return Result.fail( + new TooManyArgsResponse(0,info.reducedPath().size()) //TODO change this so it actually reflects + ); } - return Result.success(new Execution(() -> { - handler.handle(context); - })); + return Result.success(new Execution<>(handler,context)); } @Override @@ -81,13 +86,6 @@ public List getSuggestions(NodeContext context) { } - public static class TooManyArgumentsBlurb extends SendableResponse { - - public TooManyArgumentsBlurb() { - super(CoreKeys.TOO_MANY_ARGS); - } - - } } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java index ef31a7c..778fe2b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/builders/BranchingBuilder.java @@ -8,7 +8,7 @@ import me.aurium.beetle.branch.nodes.BranchingNode; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.model.IdentifiableNode; -import me.aurium.beetle.branch.fun.PreStoredHashSet; +import me.aurium.beetle.branch.utility.PreStoredHashSet; import java.util.HashSet; import java.util.Objects; diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/ExecutionResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/ExecutionResult.java deleted file mode 100644 index b475977..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/results/ExecutionResult.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.aurium.beetle.branch.nodes.results; - -import me.aurium.beetle.branch.handlers.api.ExecutionHandler; - -import java.util.Optional; - -public class ExecutionResult{ - - private final ExecutionHandler executionHandler; - - public ExecutionResult(ExecutionHandler executionHandler) { - this.executionHandler = executionHandler; - } - - public Optional> getExecution() { - return Optional.ofNullable(executionHandler); - } - - public static ExecutionResult empty() { - return new ExecutionResult<>(null); - } -} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/SuggestionResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/SuggestionResult.java deleted file mode 100644 index ed2ddf9..0000000 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/results/SuggestionResult.java +++ /dev/null @@ -1,4 +0,0 @@ -package me.aurium.beetle.branch.nodes.results; - -public class SuggestionResult { -} diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java index 11eb7df..246bd0b 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/FailingResult.java @@ -1,12 +1,16 @@ package me.aurium.beetle.branch.nodes.results.model; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; +import me.aurium.beetle.branch.interfacing.model.Response; +/** + * A result that has failed + * @param the response + */ public class FailingResult implements Result { - private final ExecutionResponse failure; + private final Response failure; - public FailingResult(ExecutionResponse failure) { + public FailingResult(Response failure) { this.failure = failure; } @@ -21,7 +25,8 @@ public T getSuccess() { } @Override - public ExecutionResponse getFailure() { + public Response getFailure() { return failure; } + } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java index 9937e58..794900f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/Result.java @@ -1,20 +1,19 @@ package me.aurium.beetle.branch.nodes.results.model; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; +import me.aurium.beetle.branch.interfacing.model.Response; public interface Result { boolean isSuccessful(); T getSuccess(); - ExecutionResponse getFailure(); - //wow this looks familiar (i liked the functionality shhhh) + Response getFailure(); + static Result success(X t) { return new SuccessfulResult<>(t); } - - static Result fail(ExecutionResponse failure) { + static Result fail(Response failure) { return new FailingResult<>(failure); } diff --git a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java index c75d457..70e481d 100644 --- a/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java +++ b/core/src/main/java/me/aurium/beetle/branch/nodes/results/model/SuccessfulResult.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.nodes.results.model; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; +import me.aurium.beetle.branch.interfacing.model.Response; public class SuccessfulResult implements Result { @@ -21,7 +21,7 @@ public T getSuccess() { } @Override - public ExecutionResponse getFailure() { + public Response getFailure() { throw new IllegalStateException("Attempted to get failure of a successful result!"); } } diff --git a/core/src/main/java/me/aurium/beetle/branch/fun/PreStoredHashSet.java b/core/src/main/java/me/aurium/beetle/branch/utility/PreStoredHashSet.java similarity index 96% rename from core/src/main/java/me/aurium/beetle/branch/fun/PreStoredHashSet.java rename to core/src/main/java/me/aurium/beetle/branch/utility/PreStoredHashSet.java index b8cb810..0cea68f 100644 --- a/core/src/main/java/me/aurium/beetle/branch/fun/PreStoredHashSet.java +++ b/core/src/main/java/me/aurium/beetle/branch/utility/PreStoredHashSet.java @@ -1,7 +1,6 @@ -package me.aurium.beetle.branch.fun; +package me.aurium.beetle.branch.utility; import java.util.HashSet; -import java.util.Optional; import java.util.Set; /** diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java index e5f8080..501aa9f 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContext.java @@ -1,7 +1,10 @@ package me.aurium.beetle.branch.spigot; -import me.aurium.beetle.branch.fallback.message.BaseContext; + import me.aurium.beetle.branch.handlers.context.AbstractNodeContext; +import me.aurium.beetle.branch.interfacing.handlers.InterfacingHandler; +import me.aurium.beetle.branch.interfacing.model.Message; +import me.aurium.beetle.branch.interfacing.model.Response; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInfo; import org.bukkit.ChatColor; @@ -10,15 +13,27 @@ public class SpigotContext extends AbstractNodeContext { private final T sender; + private final InterfacingHandler handler; - protected SpigotContext(T t, String alias, String[] strings, CommandNode baseNode, SearchInfo result, BaseContext baseContext) { - super(t, alias, strings, baseNode, result, baseContext); + protected SpigotContext(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result, InterfacingHandler handler) { + super(sender, alias, args, baseNode, result); - this.sender = t; + this.sender = sender; + this.handler = handler; } @Override public void stringSender(String string) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',string)); //TODO prettify (or just use ContextErrorMessage LMFAO) + this.sender.sendMessage(ChatColor.translateAlternateColorCodes('&',string)); + } + + @Override + public void messageSender(Message message) { + handler.sendMessage(sender,message); + } + + @Override + public void response(Response failure) { + handler.sendMessage(sender,failure); } } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProvider.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProvider.java index 0c24248..7618597 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProvider.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotContextProvider.java @@ -1,9 +1,9 @@ package me.aurium.beetle.branch.spigot; -import me.aurium.beetle.branch.fallback.message.BaseContext; + import me.aurium.beetle.branch.handlers.context.ContextProvider; import me.aurium.beetle.branch.handlers.context.NodeContext; -import me.aurium.beetle.branch.launchpoints.IllegalSenderException; +import me.aurium.beetle.branch.interfacing.handlers.InterfacingHandler; import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; import me.aurium.beetle.branch.nodes.model.CommandNode; import me.aurium.beetle.branch.nodes.results.SearchInfo; @@ -12,27 +12,21 @@ public class SpigotContextProvider implements ContextProvider { private final ManagerAdapter adapter; + private final InterfacingHandler handler; - public SpigotContextProvider(ManagerAdapter adapter) { + public SpigotContextProvider(ManagerAdapter adapter, InterfacingHandler handler) { this.adapter = adapter; + this.handler = handler; } @Override - public NodeContext produce(C sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search, BaseContext baseContext) { + public NodeContext produce(C sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search) { if (!adapter.canAdapt(sender)) { - adapter.failedAdaptAction(); - - //delegate to baseContext's stuff - - throw new IllegalSenderException("Sender is not instance of correct type!"); //TODO more fallback bullshit :) + r } - return new SpigotContext<>(adapter.adapt(sender),alias,strings,baseNode,search,baseContext); - } - @Override - public Context produce(C sender, String alias, String[] strings) { - return produce(sender, alias, strings,null,null,null); + return new SpigotContext<>(sender,alias,strings,baseNode,search, handler); } } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java index 9f0723d..1ebc6dd 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/SpigotManager.java @@ -1,5 +1,7 @@ package me.aurium.beetle.branch.spigot; +import me.aurium.beetle.branch.interfacing.handlers.CommonInterfacingHandler; +import me.aurium.beetle.branch.interfacing.handlers.InterfacingHandler; import me.aurium.beetle.branch.launchpoints.CentralizedManager; import me.aurium.beetle.branch.launchpoints.CentralizedManagerBinder; import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; @@ -23,7 +25,7 @@ public NodeBaseBuilder newCommand() { @Override public NodeBaseBuilder newCommand(ManagerAdapter adapter) { - return new NodeBaseBuilder<>(new SpigotContextProvider<>(adapter)); + return new NodeBaseBuilder<>(new SpigotContextProvider<>(adapter, new CommonInterfacingHandler<>())); } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/FancyTextMessage.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/FancyTextMessage.java new file mode 100644 index 0000000..acfd592 --- /dev/null +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/FancyTextMessage.java @@ -0,0 +1,4 @@ +package me.aurium.beetle.branch.spigot.message; + +public class FancyTextMessage { +} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java index 5471fc6..5e483a7 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/SpigotMessageProvider.java @@ -1,32 +1,20 @@ package me.aurium.beetle.branch.spigot.message; -import me.aurium.beetle.branch.interfacing.CoreKeys; -import me.aurium.beetle.branch.interfacing.message.Message; -import me.aurium.beetle.branch.interfacing.message.Requirement; -import me.aurium.beetle.branch.interfacing.message.model.MessageProvider; -import org.bukkit.command.CommandSender; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import me.aurium.beetle.branch.interfacing.common.FailedAdaptingResponse; +import me.aurium.beetle.branch.interfacing.handlers.CommonMessageMap; +import org.bukkit.command.CommandSender; -public class SpigotMessageProvider implements MessageProvider { +public class SpigotMessageProvider{ - private final Map> map = new HashMap<>(); + private final CommonMessageMap map = new CommonMessageMap<>(); public SpigotMessageProvider() { - map.put(CoreKeys.TOO_MANY_ARGS, new TextMessage<>("&7HI THERE IDIOT FACE! You provided %args% args!")); - } - - public SpigotMessageProvider with(UUID uuid, Requirement requirement) { - this.map.put(uuid,requirement); - - return this; - } - + map.add(FailedAdaptingResponse.class, response -> new TextMessage<>( + "Expected class: " + response.getExpectedClass().getName() + "Got class: " + response.getReceivedClass() + )); - public final Map>make() { - return map; + map.add(FailedAdaptingResponse.class, response -> new TextMessage<>()); } } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java index 372a0b7..caf9f0d 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/message/TextMessage.java @@ -1,18 +1,23 @@ package me.aurium.beetle.branch.spigot.message; -import me.aurium.beetle.branch.interfacing.message.Message; +import me.aurium.beetle.branch.interfacing.model.Message; +import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; public class TextMessage implements Message { - private final String coloredStringToSend; + private final String[] coloredStringToSend; - public TextMessage(String coloredStringToSend) { + public TextMessage(String... coloredStringToSend) { this.coloredStringToSend = coloredStringToSend; } @Override - public void accept(C sender, Object... info) { - sender.sendMessage(String.format(coloredStringToSend,info)); + public void accept(C sender) { + + for (String string : coloredStringToSend) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&',string)); + } + } } diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/FailedAdaptingResponse.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/FailedAdaptingResponse.java deleted file mode 100644 index dd221b6..0000000 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/FailedAdaptingResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package me.aurium.beetle.branch.spigot.toPlayer; - -import me.aurium.beetle.branch.interfacing.CoreKeys; -import me.aurium.beetle.branch.interfacing.message.model.MessageInfo; -import me.aurium.beetle.branch.interfacing.responses.SendableResponse; - -import java.util.UUID; - -public class FailedAdaptingResponse extends SendableResponse { - - public FailedAdaptingResponse(String expected_type, String actual_type) { - super(CoreKeys.FAILED_ADAPTING, new MessageInfo("expected_type",toAdapt.getClass().getName()), new MessageInfo("actual_type",)); - } -} diff --git a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/PlayerAdapter.java b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/PlayerAdapter.java index a68a81a..6970477 100644 --- a/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/PlayerAdapter.java +++ b/spigot-impl/src/main/java/me/aurium/beetle/branch/spigot/toPlayer/PlayerAdapter.java @@ -1,6 +1,6 @@ package me.aurium.beetle.branch.spigot.toPlayer; -import me.aurium.beetle.branch.interfacing.responses.ExecutionResponse; +import me.aurium.beetle.branch.interfacing.common.FailedAdaptingResponse; import me.aurium.beetle.branch.launchpoints.typeadapter.ManagerAdapter; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,8 +18,9 @@ public boolean canAdapt(CommandSender sender) { } @Override - public ExecutionResponse failedAdaptAction() { - return new FailedAdaptingResponse(null); + public FailedAdaptingResponse failedParseResponse(CommandSender sender) { + return new FailedAdaptingResponse(Player.class, CommandSender.class); } + } From 3fd6000caf8609b02e6b8ec18fa66f151b685110 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 21 Apr 2021 18:21:02 -0700 Subject: [PATCH 28/56] re organize packages, add license --- .idea/jarRepositories.xml | 15 ++++ .idea/misc.xml | 2 +- beetle-impl/beetle-impl.iml | 2 - beetle-impl/pom.xml | 59 ------------- .../branch/converted/BranchCommand.java | 15 ---- .../launchpoints/AbstractBaseCommand.java | 15 ---- .../launchpoints/AbstractBranchCommand.java | 41 ---------- .../beetle/branch/tests/AbstractTests.java | 18 ---- .../branch/tests/BranchingNodeTests.java | 50 ----------- .../beetle/branch/tests/SingleNodeTests.java | 37 --------- .../aurium/beetle/branch/tests/TestBase.java | 7 -- .../branch/tests/context/TestContext.java | 11 --- .../tests/context/TestContextProducer.java | 20 ----- .../tests/mockups/BranchingCommand.java | 82 ------------------- .../BranchingImproperAnnotatedCommand.java | 44 ---------- .../mockups/ImproperAnnotatedCommand.java | 14 ---- .../tests/mockups/ProperAnnotatedCommand.java | 4 - .../branch/tests/mockups/SingleCommand.java | 45 ---------- branch.iml | 2 - core/pom.xml | 31 ++++--- .../branch/annotate/AnnotateConstants.java | 21 +++++ .../branch/annotate/AnnotatedCommand.java | 21 +++++ .../branch/annotate/AnnotatedParser.java | 21 +++++ .../beetle/branch/annotate/ParserOptions.java | 21 +++++ .../branch/annotate/ParsingException.java | 21 +++++ .../beetle/branch/annotate/TypeToken.java | 21 +++++ .../UncheckedInvocationException.java | 21 +++++ .../branch/annotate/marker/BranchCommand.java | 21 +++++ .../branch/annotate/marker/BranchingNode.java | 21 +++++ .../branch/annotate/marker/NoArgsNode.java | 21 +++++ .../branch/annotate/marker/SingleNode.java | 21 +++++ .../marker/permission/Permission.java | 21 +++++ .../marker/permission/StringPermChecker.java | 21 +++++ .../parsers/BranchingAnnotatedParser.java | 21 +++++ .../parsers/PermissionAnnotationParser.java | 21 +++++ .../parsers/SingleAnnotatedParser.java | 25 +++++- .../me/aurium/beetle/branch/block/Block.java | 10 --- .../beetle/branch/block/EmptyBlock.java | 20 ----- .../centralized/CentralizedManager.java | 40 +++++++++ .../centralized/CentralizedManagerBinder.java | 31 +++++++ .../centralized/IllegalSenderException.java | 30 +++++++ .../branch/centralized/base/NodeBase.java | 31 +++++++ .../centralized/base/NodeBaseBuilder.java | 48 +++++++++++ .../base/SyncNodeBase.java | 32 ++++++-- .../typeadapter/CommonAdapter.java | 46 +++++++++++ .../typeadapter/ManagerAdapter.java | 40 +++++++++ .../execution/EmptyExecutionHandler.java | 32 ++++++++ .../execution/EmptySuggestionHandler.java | 39 +++++++++ .../branch/execution/api/BranchHandler.java | 34 ++++++++ .../branch/execution/api/Execution.java | 40 +++++++++ .../execution/api/ExecutionHandler.java | 30 +++++++ .../execution/api/SuggestionHandler.java | 33 ++++++++ .../beetle/branch/execution/block/Block.java | 31 +++++++ .../branch/execution/block/EmptyBlock.java | 41 ++++++++++ .../{ => execution}/block/StringBlock.java | 23 +++++- .../context/AbstractNodeContext.java | 23 +++++- .../context/ContextErrorMessage.java | 30 +++++++ .../execution/context/ContextProvider.java | 34 ++++++++ .../context/NodeContext.java | 23 +++++- .../fallback/permissions/EmptyPermission.java | 21 +++++ .../fallback/permissions/Permission.java | 21 +++++ .../permissions/PredicatePermission.java | 21 +++++ .../permissions/StringPermission.java | 21 +++++ .../strategies/FallbackSearchStrategy.java | 21 +++++ .../fallback/strategies/OneBackStrategy.java | 23 +++++- .../strategies/PermissionLockoutStrategy.java | 23 +++++- .../handlers/EmptyExecutionHandler.java | 11 --- .../handlers/EmptySuggestionHandler.java | 18 ---- .../branch/handlers/api/BranchHandler.java | 13 --- .../beetle/branch/handlers/api/Execution.java | 19 ----- .../branch/handlers/api/ExecutionHandler.java | 9 -- .../handlers/api/SuggestionHandler.java | 12 --- .../handlers/context/ContextErrorMessage.java | 9 -- .../handlers/context/ContextProvider.java | 13 --- .../branch/information/help/HelpEntry.java | 25 ++++++ .../information/suggestion/Suggestion.java | 25 ++++++ .../common/FailedAdaptingResponse.java | 27 ------ .../common/NoPermissionResponse.java | 16 ---- .../common/TooManyArgsResponse.java | 22 ----- .../handlers/CommonInterfacingHandler.java | 21 +++++ .../handlers/CommonMessageMap.java | 21 +++++ .../handlers/CommonResponseActionHandler.java | 21 +++++ .../handlers/InterfacingHandler.java | 21 +++++ .../interfacing/handlers/MessageMap.java | 21 +++++ .../interfacing/handlers/MessageProvider.java | 21 +++++ .../handlers/ResponseActionHandler.java | 21 +++++ .../branch/interfacing/model/Message.java | 21 +++++ .../branch/interfacing/model/Response.java | 21 +++++ .../interfacing/model/ResponseAction.java | 21 +++++ .../responses/FailedAdaptingResponse.java | 48 +++++++++++ .../NoIntegratedArgsResponse.java | 25 +++++- .../responses/NoPermissionResponse.java | 37 +++++++++ .../responses/TooManyArgsResponse.java | 43 ++++++++++ .../launchpoints/CentralizedManager.java | 19 ----- .../CentralizedManagerBinder.java | 10 --- .../launchpoints/IllegalSenderException.java | 9 -- .../branch/launchpoints/base/NodeBase.java | 10 --- .../launchpoints/base/NodeBaseBuilder.java | 27 ------ .../typeadapter/CommonAdapter.java | 26 ------ .../typeadapter/ManagerAdapter.java | 17 ---- .../beetle/branch/nodes/ArgumentNode.java | 21 +++++ .../beetle/branch/nodes/BranchingNode.java | 31 +++++-- .../aurium/beetle/branch/nodes/HelpNode.java | 28 +++++++ .../beetle/branch/nodes/SingleNode.java | 33 ++++++-- .../beetle/branch/nodes/ValueContext.java | 21 +++++ .../branch/nodes/argument/Argument.java | 25 +++++- .../nodes/argument/ArgumentContext.java | 23 +++++- .../argument/ArgumentContextHandler.java | 21 +++++ .../nodes/argument/ArgumentConvertet.java | 21 +++++ .../branch/nodes/argument/Arguments.java | 21 +++++ .../branch/nodes/builders/AloneBuilder.java | 21 +++++ .../nodes/builders/BranchingBuilder.java | 27 +++++- .../beetle/branch/nodes/builders/Builder.java | 21 +++++ .../branch/nodes/builders/SingleBuilder.java | 29 ++++++- .../branch/nodes/model/CommandNode.java | 23 +++++- .../branch/nodes/model/EndpointNode.java | 21 +++++ .../branch/nodes/model/IdentifiableNode.java | 23 +++++- .../branch/nodes/model/ResponseHandler.java | 21 +++++ .../branch/nodes/results/SearchInfo.java | 23 +++++- .../branch/nodes/results/SearchInput.java | 25 +++++- .../nodes/results/model/FailingResult.java | 21 +++++ .../branch/nodes/results/model/Result.java | 21 +++++ .../nodes/results/model/SuccessfulResult.java | 21 +++++ .../branch/utility/PreStoredHashSet.java | 21 +++++ pom.xml | 29 +++++-- spigot-impl/pom.xml | 34 ++++++-- spigot-impl/spigot-impl.iml | 2 - .../beetle/branch/spigot/SenderAdapter.java | 23 +++++- .../beetle/branch/spigot/SpigotContext.java | 23 +++++- .../branch/spigot/SpigotContextProvider.java | 36 +++++--- .../beetle/branch/spigot/SpigotManager.java | 31 +++++-- .../branch/spigot/SpigotManagerBinder.java | 23 +++++- .../spigot/message/AdventureMessage.java | 21 +++++ .../spigot/message/FancyTextMessage.java | 21 +++++ .../branch/spigot/message/SpigotKeys.java | 21 +++++ .../spigot/message/SpigotMessageProvider.java | 24 +++++- .../branch/spigot/message/TextMessage.java | 21 +++++ .../branch/spigot/toPlayer/PlayerAdapter.java | 25 +++++- .../beetle/branch/spigot/ExampleBinding.java | 21 +++++ 139 files changed, 2494 insertions(+), 870 deletions(-) delete mode 100644 beetle-impl/beetle-impl.iml delete mode 100644 beetle-impl/pom.xml delete mode 100644 beetle-impl/src/main/java/me/aurium/beetle/branch/converted/BranchCommand.java delete mode 100644 beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBaseCommand.java delete mode 100644 beetle-impl/src/main/java/me/aurium/beetle/branch/converted/launchpoints/AbstractBranchCommand.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/AbstractTests.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/BranchingNodeTests.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/SingleNodeTests.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/TestBase.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContext.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/context/TestContextProducer.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingCommand.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/BranchingImproperAnnotatedCommand.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/ImproperAnnotatedCommand.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/ProperAnnotatedCommand.java delete mode 100644 beetle-impl/src/test/java/me/aurium/beetle/branch/tests/mockups/SingleCommand.java delete mode 100644 branch.iml delete mode 100644 core/src/main/java/me/aurium/beetle/branch/block/Block.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/block/EmptyBlock.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/centralized/CentralizedManager.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/centralized/CentralizedManagerBinder.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/centralized/IllegalSenderException.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/centralized/base/NodeBase.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/centralized/base/NodeBaseBuilder.java rename core/src/main/java/me/aurium/beetle/branch/{launchpoints => centralized}/base/SyncNodeBase.java (60%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/centralized/typeadapter/CommonAdapter.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/centralized/typeadapter/ManagerAdapter.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/EmptyExecutionHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/EmptySuggestionHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/api/BranchHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/api/Execution.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/api/ExecutionHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/api/SuggestionHandler.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/block/Block.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/block/EmptyBlock.java rename core/src/main/java/me/aurium/beetle/branch/{ => execution}/block/StringBlock.java (51%) rename core/src/main/java/me/aurium/beetle/branch/{handlers => execution}/context/AbstractNodeContext.java (55%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/context/ContextErrorMessage.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/execution/context/ContextProvider.java rename core/src/main/java/me/aurium/beetle/branch/{handlers => execution}/context/NodeContext.java (52%) delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/EmptyExecutionHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/EmptySuggestionHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/api/BranchHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/api/Execution.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/api/ExecutionHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/api/SuggestionHandler.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextErrorMessage.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/handlers/context/ContextProvider.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/information/help/HelpEntry.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/information/suggestion/Suggestion.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/common/FailedAdaptingResponse.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/common/NoPermissionResponse.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/common/TooManyArgsResponse.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/FailedAdaptingResponse.java rename core/src/main/java/me/aurium/beetle/branch/interfacing/{common => responses}/NoIntegratedArgsResponse.java (56%) create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/NoPermissionResponse.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/interfacing/responses/TooManyArgsResponse.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManager.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/CentralizedManagerBinder.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/IllegalSenderException.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBase.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/base/NodeBaseBuilder.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/CommonAdapter.java delete mode 100644 core/src/main/java/me/aurium/beetle/branch/launchpoints/typeadapter/ManagerAdapter.java create mode 100644 core/src/main/java/me/aurium/beetle/branch/nodes/HelpNode.java delete mode 100644 spigot-impl/spigot-impl.iml diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 57772c7..bf6e201 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -6,6 +6,16 @@