diff --git a/README.md b/README.md
index b55efb56d..6d05bf395 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
Helpful links:
- [Support Discord](https://discord.gg/6cUhkj6uZJ)
- [GitHub issues](https://github.com/Rollczi/LiteCommands/issues)
-- [Example (Modern 2.3.2)](https://github.com/Rollczi/LiteCommands/tree/master/examples/bukkit)
+- [Example (Modern 2.3.3)](https://github.com/Rollczi/LiteCommands/tree/master/examples/bukkit)
- [Docs (Legacy 1.7.2)](https://docs.rollczi.dev/)
### Panda Repository (Maven or Gradle) ❤️
@@ -25,11 +25,11 @@ Framework Core
dev.rollczi.litecommands
core
- 2.3.2
+ 2.3.3
```
```groovy
-implementation 'dev.rollczi.litecommands:core:2.3.2'
+implementation 'dev.rollczi.litecommands:core:2.3.3'
```
### First Simple Command
@@ -64,11 +64,11 @@ Add this to your dependencies if you want use ready-made implementation for velo
dev.rollczi.litecommands
velocity
- 2.3.2
+ 2.3.3
```
```groovy
-implementation 'dev.rollczi.litecommands:velocity:2.3.2'
+implementation 'dev.rollczi.litecommands:velocity:2.3.3'
```
#### All extensions:
diff --git a/build.gradle.kts b/build.gradle.kts
index 9adde83b7..117deb652 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -14,7 +14,7 @@ plugins {
allprojects {
group = "dev.rollczi.litecommands"
- version = "2.3.2"
+ version = "2.3.3"
apply(plugin = "java-library")
apply(plugin = "maven-publish")
diff --git a/examples/bukkit/build.gradle.kts b/examples/bukkit/build.gradle.kts
index 155d2e3aa..211d6d85a 100644
--- a/examples/bukkit/build.gradle.kts
+++ b/examples/bukkit/build.gradle.kts
@@ -10,7 +10,7 @@ repositories {
dependencies {
compileOnly("org.spigotmc:spigot-api:1.19-R0.1-SNAPSHOT")
- // implementation("dev.rollczi.litecommands:bukkit:2.3.2") // <-- uncomment in your project
+ // implementation("dev.rollczi.litecommands:bukkit:2.3.3") // <-- uncomment in your project
implementation(project(":litecommands-bukkit")) // don't use this line in your build.gradle
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
diff --git a/litecommands-bukkit-adventure/README.md b/litecommands-bukkit-adventure/README.md
index c6a20931f..96bb16b6b 100644
--- a/litecommands-bukkit-adventure/README.md
+++ b/litecommands-bukkit-adventure/README.md
@@ -4,10 +4,10 @@ Maven
dev.rollczi.litecommands
bukkit-adventure
- 2.3.2
+ 2.3.3
```
Gradle
```groovy
-implementation 'dev.rollczi.litecommands:bukkit-adventure:2.3.2'
+implementation 'dev.rollczi.litecommands:bukkit-adventure:2.3.3'
```
diff --git a/litecommands-bukkit/README.md b/litecommands-bukkit/README.md
index 7c57be8d3..8bc697163 100644
--- a/litecommands-bukkit/README.md
+++ b/litecommands-bukkit/README.md
@@ -4,12 +4,12 @@ Maven
dev.rollczi.litecommands
bukkit
- 2.3.2
+ 2.3.3
```
Gradle
```groovy
-implementation 'dev.rollczi.litecommands:bukkit:2.3.2'
+implementation 'dev.rollczi.litecommands:bukkit:2.3.3'
```
#### Examples:
diff --git a/litecommands-bungee/README.md b/litecommands-bungee/README.md
index d4cc19718..c601335b2 100644
--- a/litecommands-bungee/README.md
+++ b/litecommands-bungee/README.md
@@ -4,12 +4,12 @@ Maven
dev.rollczi.litecommands
bungee
- 2.3.2
+ 2.3.3
```
Gradle
```groovy
-implementation 'dev.rollczi.litecommands:bungee:2.3.2'
+implementation 'dev.rollczi.litecommands:bungee:2.3.3'
```
#### Examples:
diff --git a/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsBuilder.java b/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsBuilder.java
index 6261f2d18..8e1aa8021 100644
--- a/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsBuilder.java
+++ b/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsBuilder.java
@@ -73,9 +73,9 @@ public interface LiteCommandsBuilder {
Class getSenderType();
- LiteCommandsBuilder beforeRegister(LiteCommandsProcess preProcess);
+ LiteCommandsBuilder beforeRegister(LiteCommandsPreProcess preProcess);
- LiteCommandsBuilder afterRegister(LiteCommandsProcess postProcess);
+ LiteCommandsBuilder afterRegister(LiteCommandsPostProcess postProcess);
LiteCommands register();
diff --git a/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsPostProcess.java b/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsPostProcess.java
new file mode 100644
index 000000000..1079dc708
--- /dev/null
+++ b/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsPostProcess.java
@@ -0,0 +1,11 @@
+package dev.rollczi.litecommands;
+
+import dev.rollczi.litecommands.command.CommandService;
+import dev.rollczi.litecommands.injector.Injector;
+import dev.rollczi.litecommands.platform.RegistryPlatform;
+
+public interface LiteCommandsPostProcess {
+
+ void process(LiteCommandsBuilder builder, RegistryPlatform platform, Injector injector, CommandService commandService);
+
+}
diff --git a/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsProcess.java b/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsPreProcess.java
similarity index 84%
rename from litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsProcess.java
rename to litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsPreProcess.java
index 51f3584bb..006334c32 100644
--- a/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsProcess.java
+++ b/litecommands-core/src/main/java/dev/rollczi/litecommands/LiteCommandsPreProcess.java
@@ -3,7 +3,7 @@
import dev.rollczi.litecommands.injector.Injector;
import dev.rollczi.litecommands.platform.RegistryPlatform;
-public interface LiteCommandsProcess {
+public interface LiteCommandsPreProcess {
void process(LiteCommandsBuilder builder, RegistryPlatform platform, Injector injector);
diff --git a/litecommands-core/src/main/java/dev/rollczi/litecommands/command/CommandService.java b/litecommands-core/src/main/java/dev/rollczi/litecommands/command/CommandService.java
index 738f07136..351d976fa 100644
--- a/litecommands-core/src/main/java/dev/rollczi/litecommands/command/CommandService.java
+++ b/litecommands-core/src/main/java/dev/rollczi/litecommands/command/CommandService.java
@@ -48,4 +48,12 @@ public void register(CommandSection section) {
);
}
+ public RegistryPlatform getPlatform() {
+ return platform;
+ }
+
+ public ExecuteResultHandler getHandler() {
+ return handler;
+ }
+
}
diff --git a/litecommands-core/src/main/java/dev/rollczi/litecommands/command/section/Section.java b/litecommands-core/src/main/java/dev/rollczi/litecommands/command/section/Section.java
index 87cee5cbe..7572ab1e8 100644
--- a/litecommands-core/src/main/java/dev/rollczi/litecommands/command/section/Section.java
+++ b/litecommands-core/src/main/java/dev/rollczi/litecommands/command/section/Section.java
@@ -15,8 +15,6 @@
String[] aliases() default {};
- int priority() default -1;
-
int required() default -1;
FactoryAnnotationResolver RESOLVER = new SectionAnnotationResolver();
diff --git a/litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandsBuilderImpl.java b/litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandsBuilderImpl.java
index c97f330a9..6027a60eb 100644
--- a/litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandsBuilderImpl.java
+++ b/litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandsBuilderImpl.java
@@ -2,7 +2,8 @@
import dev.rollczi.litecommands.LiteCommands;
import dev.rollczi.litecommands.LiteCommandsBuilder;
-import dev.rollczi.litecommands.LiteCommandsProcess;
+import dev.rollczi.litecommands.LiteCommandsPostProcess;
+import dev.rollczi.litecommands.LiteCommandsPreProcess;
import dev.rollczi.litecommands.argument.Arg;
import dev.rollczi.litecommands.argument.Argument;
import dev.rollczi.litecommands.argument.simple.MultilevelArgument;
@@ -33,8 +34,10 @@
import panda.std.Option;
import java.lang.annotation.Annotation;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -49,8 +52,8 @@ class LiteCommandsBuilderImpl implements LiteCommandsBuilder {
private RegistryPlatform registryPlatform;
private CommandStateFactory commandStateFactory;
- private LiteCommandsProcess preProcess = (builder, platform, injector) -> {};
- private LiteCommandsProcess postProcess = (builder, platform, injector) -> {};
+ private LiteCommandsPreProcess preProcess = (builder, platform, injector) -> {};
+ private LiteCommandsPostProcess postProcess = (builder, platform, injector, commandService) -> {};
private final Set>> commandStateFactoryEditors = new HashSet<>();
private final CommandEditorRegistry editorRegistry = new CommandEditorRegistry();
@@ -216,13 +219,13 @@ public Class getSenderType() {
}
@Override
- public LiteCommandsBuilder beforeRegister(LiteCommandsProcess preProcess) {
+ public LiteCommandsBuilder beforeRegister(LiteCommandsPreProcess preProcess) {
this.preProcess = preProcess;
return this;
}
@Override
- public LiteCommandsBuilder afterRegister(LiteCommandsProcess postProcess) {
+ public LiteCommandsBuilder afterRegister(LiteCommandsPostProcess postProcess) {
this.postProcess = postProcess;
return this;
}
@@ -233,10 +236,12 @@ public LiteCommands register() {
throw new IllegalStateException("Registry platform is not set");
}
+
this.preProcess.process(this, this.registryPlatform, this.injectorSettings.create());
+ CommandService commandService = new CommandService<>(this.registryPlatform, this.executeResultHandler);
Injector injector = this.injectorSettings.create();
- LiteCommands commands = new LiteCommandsImpl<>(senderType, registryPlatform, executeResultHandler, injector);
+ LiteCommands liteCommands = new LiteCommandsImpl<>(commandService, senderType, injector);
if (this.commandStateFactory == null) {
this.commandStateFactory = new LiteCommandFactory<>(injector, this.argumentsRegistry, this.editorRegistry);
@@ -252,12 +257,13 @@ public LiteCommands register() {
this.commandsInstances.add(command);
}
- } catch (Throwable throwable) {
- throw new RuntimeException(throwable);
+ } catch (Exception exception) {
+ throw new RuntimeException(exception);
}
- CommandService service = commands.getCommandService();
+ List> commandSections = new ArrayList<>();
+ root:
for (Object instance : commandsInstances) {
Option> option = this.commandStateFactory.create(instance);
@@ -265,12 +271,25 @@ public LiteCommands register() {
continue;
}
- service.register(option.get());
+ CommandSection currentCommand = option.get();
+
+ for (CommandSection commandSection : commandSections) {
+ if (commandSection.isSimilar(currentCommand.getName())) {
+ commandSection.mergeSection(currentCommand);
+ continue root;
+ }
+ }
+
+ commandSections.add(currentCommand);
+ }
+
+ for (CommandSection commandSection : commandSections) {
+ commandService.register(commandSection);
}
- this.postProcess.process(this, this.registryPlatform, injector);
+ this.postProcess.process(this, this.registryPlatform, injector, commandService);
- return commands;
+ return liteCommands;
}
public static LiteCommandsBuilder builder(Class senderType) {
diff --git a/litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandsImpl.java b/litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandsImpl.java
index 87521efc1..7b31f24da 100644
--- a/litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandsImpl.java
+++ b/litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandsImpl.java
@@ -9,17 +9,13 @@
class LiteCommandsImpl implements LiteCommands {
private final CommandService commandService;
- private final RegistryPlatform platform;
private final Injector injector;
private final Class senderType;
- private final ExecuteResultHandler executeResultHandler;
- LiteCommandsImpl(Class senderType, RegistryPlatform platform, ExecuteResultHandler handler, Injector injector) {
+ LiteCommandsImpl(CommandService commandService, Class senderType,Injector injector) {
+ this.commandService = commandService;
this.senderType = senderType;
this.injector = injector;
- this.commandService = new CommandService<>(platform, handler);
- this.platform = platform;
- this.executeResultHandler = handler;
}
@Override
@@ -29,7 +25,7 @@ public CommandService getCommandService() {
@Override
public RegistryPlatform getPlatform() {
- return this.platform;
+ return this.commandService.getPlatform();
}
@Override
@@ -44,7 +40,7 @@ public Class getSenderType() {
@Override
public ExecuteResultHandler getExecuteResultHandler() {
- return executeResultHandler;
+ return this.commandService.getHandler();
}
}
diff --git a/litecommands-core/src/test/java/dev/rollczi/litecommands/implementation/MergeCommandClassesTest.java b/litecommands-core/src/test/java/dev/rollczi/litecommands/implementation/MergeCommandClassesTest.java
new file mode 100644
index 000000000..ee7845e47
--- /dev/null
+++ b/litecommands-core/src/test/java/dev/rollczi/litecommands/implementation/MergeCommandClassesTest.java
@@ -0,0 +1,34 @@
+package dev.rollczi.litecommands.implementation;
+
+import dev.rollczi.litecommands.TestFactory;
+import dev.rollczi.litecommands.TestPlatform;
+import dev.rollczi.litecommands.argument.Arg;
+import dev.rollczi.litecommands.command.execute.Execute;
+import dev.rollczi.litecommands.command.section.Section;
+import org.junit.jupiter.api.Test;
+
+class MergeCommandClassesTest {
+
+ TestPlatform platform = TestFactory.withCommands(FirstCommandClass.class, SecondCommandClass.class);
+
+ @Section(route = "test")
+ static class FirstCommandClass {
+ @Execute(route = "set") public static String set(@Arg String name, @Arg String value) {
+ return name + " -> " + value;
+ }
+ }
+
+ @Section(route = "test")
+ static class SecondCommandClass {
+ @Execute(route = "unset") public static String get(@Arg String name) {
+ return name + " value";
+ }
+ }
+
+ @Test
+ void test() {
+ platform.execute("test", "unset", "Rollczi").assertResult("Rollczi value");
+ platform.execute("test", "set", "Rollczi", "vip").assertResult("Rollczi -> vip");
+ }
+
+}
diff --git a/litecommands-velocity/README.md b/litecommands-velocity/README.md
index a3ad832a5..58aff5c69 100644
--- a/litecommands-velocity/README.md
+++ b/litecommands-velocity/README.md
@@ -4,12 +4,12 @@ Maven
dev.rollczi.litecommands
velocity
- 2.3.2
+ 2.3.3
```
Gradle
```groovy
-implementation 'dev.rollczi.litecommands:velocity:2.3.2'
+implementation 'dev.rollczi.litecommands:velocity:2.3.3'
```
#### Examples: