diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index f496ae8..9653356 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -18,10 +18,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up JDK 11
- uses: actions/setup-java@v3
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
with:
- java-version: '11'
+ java-version: '17'
distribution: 'temurin'
cache: maven
diff --git a/.github/workflows/maven-deploy.yml b/.github/workflows/maven-deploy.yml
new file mode 100644
index 0000000..44ddb92
--- /dev/null
+++ b/.github/workflows/maven-deploy.yml
@@ -0,0 +1,20 @@
+name: Publish package to GitHub Packages
+on:
+ release:
+ types: [created]
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ - name: Publish package
+ run: mvn --batch-mode deploy
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3138f0e..64311b5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,13 +4,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- me.hgsoft.minecraft.devcommand
- DevCommand
- 0.0.2-SNAPSHOT
+ dev.hugog.minecraft
+ dev-command
+ 0.0.3
11
11
+ UTF-8
@@ -25,7 +26,7 @@
org.spigotmc
spigot-api
- 1.19.2-R0.1-SNAPSHOT
+ 1.20.6-R0.1-SNAPSHOT
provided
@@ -53,6 +54,12 @@
2.18.0
+
+ com.google.inject
+ guice
+ 5.1.0
+
+
org.junit.jupiter
junit-jupiter
@@ -63,14 +70,14 @@
org.mockito
mockito-core
- 4.7.0
+ 4.8.0
test
org.mockito
mockito-junit-jupiter
- 4.7.0
+ 4.8.0
test
@@ -89,15 +96,16 @@
maven-clean-plugin
- 3.1.0
+ 3.3.1
maven-resources-plugin
- 3.0.2
+ 3.3.1
org.apache.maven.plugins
maven-compiler-plugin
+ 3.11.0
11
11
@@ -105,19 +113,40 @@
maven-surefire-plugin
- 2.22.1
+ 3.1.2
+
+
+ maven-failsafe-plugin
+ 3.1.2
+
+
+
+ integration-test
+ verify
+
+
+
maven-jar-plugin
- 3.0.2
+ 3.3.0
maven-install-plugin
- 2.5.2
+ 3.1.1
+
+
+ dev-command-depository
+ GitHub Packages DevCommand Repository
+ https://maven.pkg.github.com/Hugo1307/DevCommand
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/dev/hugog/minecraft/dev_command/DevCommand.java b/src/main/java/dev/hugog/minecraft/dev_command/DevCommand.java
new file mode 100644
index 0000000..f9b9776
--- /dev/null
+++ b/src/main/java/dev/hugog/minecraft/dev_command/DevCommand.java
@@ -0,0 +1,37 @@
+package dev.hugog.minecraft.dev_command;
+
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import lombok.Getter;
+import dev.hugog.minecraft.dev_command.commands.handler.CommandHandler;
+import dev.hugog.minecraft.dev_command.dependencies.DependencyHandler;
+import dev.hugog.minecraft.dev_command.injection.GuiceBinderModule;
+
+@Getter
+public final class DevCommand {
+
+ private static DevCommand instance;
+
+ @Inject
+ private CommandHandler commandHandler;
+ @Inject
+ private DependencyHandler dependencyHandler;
+
+ private DevCommand() {
+ initDependencyInjectionModules();
+ }
+
+ public static DevCommand getOrCreateInstance() {
+ if (instance == null) {
+ instance = new DevCommand();
+ }
+ return instance;
+ }
+
+ private void initDependencyInjectionModules() {
+ GuiceBinderModule guiceBinderModule = new GuiceBinderModule();
+ Injector injector = guiceBinderModule.createInjector();
+ injector.injectMembers(this);
+ }
+
+}
diff --git a/src/main/java/me/hgsoft/minecraft/devcommand/annotations/ArgsValidation.java b/src/main/java/dev/hugog/minecraft/dev_command/annotations/ArgsValidation.java
similarity index 50%
rename from src/main/java/me/hgsoft/minecraft/devcommand/annotations/ArgsValidation.java
rename to src/main/java/dev/hugog/minecraft/dev_command/annotations/ArgsValidation.java
index 117d689..c176449 100644
--- a/src/main/java/me/hgsoft/minecraft/devcommand/annotations/ArgsValidation.java
+++ b/src/main/java/dev/hugog/minecraft/dev_command/annotations/ArgsValidation.java
@@ -1,6 +1,6 @@
-package me.hgsoft.minecraft.devcommand.annotations;
+package dev.hugog.minecraft.dev_command.annotations;
-import me.hgsoft.minecraft.devcommand.validators.CommandArgument;
+import dev.hugog.minecraft.dev_command.validators.CommandArgument;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -10,7 +10,7 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ArgsValidation {
- Class extends CommandArgument>>[] argsTypes();
- int mandatory() default 0;
+ Class extends CommandArgument>>[] mandatoryArgs() default {};
+ Class extends CommandArgument>>[] optionalArgs() default {};
}
diff --git a/src/main/java/me/hgsoft/minecraft/devcommand/annotations/Command.java b/src/main/java/dev/hugog/minecraft/dev_command/annotations/Command.java
similarity index 78%
rename from src/main/java/me/hgsoft/minecraft/devcommand/annotations/Command.java
rename to src/main/java/dev/hugog/minecraft/dev_command/annotations/Command.java
index 1964fb8..0e25cdc 100644
--- a/src/main/java/me/hgsoft/minecraft/devcommand/annotations/Command.java
+++ b/src/main/java/dev/hugog/minecraft/dev_command/annotations/Command.java
@@ -1,4 +1,4 @@
-package me.hgsoft.minecraft.devcommand.annotations;
+package dev.hugog.minecraft.dev_command.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -12,5 +12,6 @@
String alias();
String description() default "";
String permission() default "";
+ boolean isPlayerOnly() default false;
}
diff --git a/src/main/java/me/hgsoft/minecraft/devcommand/annotations/Dependencies.java b/src/main/java/dev/hugog/minecraft/dev_command/annotations/Dependencies.java
similarity index 84%
rename from src/main/java/me/hgsoft/minecraft/devcommand/annotations/Dependencies.java
rename to src/main/java/dev/hugog/minecraft/dev_command/annotations/Dependencies.java
index 24f1a34..ec40292 100644
--- a/src/main/java/me/hgsoft/minecraft/devcommand/annotations/Dependencies.java
+++ b/src/main/java/dev/hugog/minecraft/dev_command/annotations/Dependencies.java
@@ -1,4 +1,4 @@
-package me.hgsoft.minecraft.devcommand.annotations;
+package dev.hugog.minecraft.dev_command.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/me/hgsoft/minecraft/devcommand/commands/BukkitDevCommand.java b/src/main/java/dev/hugog/minecraft/dev_command/commands/BukkitDevCommand.java
similarity index 72%
rename from src/main/java/me/hgsoft/minecraft/devcommand/commands/BukkitDevCommand.java
rename to src/main/java/dev/hugog/minecraft/dev_command/commands/BukkitDevCommand.java
index cf40c18..c963515 100644
--- a/src/main/java/me/hgsoft/minecraft/devcommand/commands/BukkitDevCommand.java
+++ b/src/main/java/dev/hugog/minecraft/dev_command/commands/BukkitDevCommand.java
@@ -1,16 +1,18 @@
-package me.hgsoft.minecraft.devcommand.commands;
+package dev.hugog.minecraft.dev_command.commands;
+import dev.hugog.minecraft.dev_command.commands.data.BukkitCommandData;
import lombok.Generated;
import lombok.Getter;
-import me.hgsoft.minecraft.devcommand.commands.data.BukkitCommandData;
-import me.hgsoft.minecraft.devcommand.dependencies.DependencyHandler;
-import me.hgsoft.minecraft.devcommand.exceptions.ArgumentsConfigException;
-import me.hgsoft.minecraft.devcommand.exceptions.PermissionConfigException;
-import me.hgsoft.minecraft.devcommand.factories.ArgumentFactory;
-import me.hgsoft.minecraft.devcommand.integration.Integration;
-import me.hgsoft.minecraft.devcommand.validators.CommandArgument;
-import me.hgsoft.minecraft.devcommand.validators.ICommandArgument;
+import dev.hugog.minecraft.dev_command.DevCommand;
+import dev.hugog.minecraft.dev_command.dependencies.DependencyHandler;
+import dev.hugog.minecraft.dev_command.exceptions.ArgumentsConfigException;
+import dev.hugog.minecraft.dev_command.exceptions.PermissionConfigException;
+import dev.hugog.minecraft.dev_command.factories.ArgumentFactory;
+import dev.hugog.minecraft.dev_command.integration.Integration;
+import dev.hugog.minecraft.dev_command.validators.CommandArgument;
+import dev.hugog.minecraft.dev_command.validators.ICommandArgument;
import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.List;
@@ -32,10 +34,20 @@ public BukkitDevCommand(BukkitCommandData commandData, CommandSender commandSend
@Override
public boolean hasPermissionToExecuteCommand() {
+
if (commandData.getPermission() == null) {
throw new PermissionConfigException(String.format("Unable to find the permission for the command %s. Have you configured any permission at all?", commandData.getName()));
}
+
return commandSender.hasPermission(commandData.getPermission());
+
+ }
+
+ @Override
+ public boolean canSenderExecuteCommand() {
+ if (commandData.isPlayerOnly())
+ return commandSender instanceof Player;
+ return true;
}
@Override
@@ -57,6 +69,11 @@ public boolean hasValidArgs() {
for (int mandatoryArgumentIdx = 0; mandatoryArgumentIdx < mandatoryArguments.length; mandatoryArgumentIdx++) {
String currentArgument = mandatoryArguments[mandatoryArgumentIdx];
+
+ if (commandData.getMandatoryArguments() == null) {
+ continue;
+ }
+
Class extends CommandArgument>> expectedCommandArgumentClass = commandData.getMandatoryArguments()[mandatoryArgumentIdx];
ICommandArgument> expectedCommandArgument = new ArgumentFactory(currentArgument).generate(expectedCommandArgumentClass);
@@ -91,7 +108,7 @@ public boolean hasValidArgs() {
@Override
public List