Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
20 changes: 20 additions & 0 deletions .github/workflows/maven-deploy.yml
Original file line number Diff line number Diff line change
@@ -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 }}
51 changes: 40 additions & 11 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>me.hgsoft.minecraft.devcommand</groupId>
<artifactId>DevCommand</artifactId>
<version>0.0.2-SNAPSHOT</version>
<groupId>dev.hugog.minecraft</groupId>
<artifactId>dev-command</artifactId>
<version>0.0.3</version>

<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<repositories>
Expand All @@ -25,7 +26,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.19.2-R0.1-SNAPSHOT</version>
<version>1.20.6-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

Expand Down Expand Up @@ -53,6 +54,12 @@
<version>2.18.0</version>
</dependency>

<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>5.1.0</version>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
Expand All @@ -63,14 +70,14 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.7.0</version>
<version>4.8.0</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.7.0</version>
<version>4.8.0</version>
<scope>test</scope>
</dependency>

Expand All @@ -89,35 +96,57 @@

<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<version>3.3.1</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<version>3.3.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<version>3.1.2</version>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<version>3.3.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<version>3.1.1</version>
</plugin>

</plugins>

</build>

<distributionManagement>
<repository>
<id>dev-command-depository</id>
<name>GitHub Packages DevCommand Repository</name>
<url>https://maven.pkg.github.com/Hugo1307/DevCommand</url>
</repository>
</distributionManagement>


</project>
37 changes: 37 additions & 0 deletions src/main/java/dev/hugog/minecraft/dev_command/DevCommand.java
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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 {};

}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -12,5 +12,6 @@
String alias();
String description() default "";
String permission() default "";
boolean isPlayerOnly() default false;

}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
Expand All @@ -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);

Expand Down Expand Up @@ -91,7 +108,7 @@ public boolean hasValidArgs() {
@Override
public List<Object> getDependencies() {

DependencyHandler dependencyHandler = DependencyHandler.createOrGetInstance();
DependencyHandler dependencyHandler = DevCommand.getOrCreateInstance().getDependencyHandler();
Integration commandIntegration = commandData.getIntegration();

return Arrays.stream(getCommandData().getDependencies())
Expand All @@ -100,4 +117,10 @@ public List<Object> getDependencies() {

}

@Override
public Object getDependency(Class<?> dependencyClass) {
DependencyHandler dependencyHandler = DevCommand.getOrCreateInstance().getDependencyHandler();
return dependencyHandler.getDependencyInstance(commandData.getIntegration(), dependencyClass);
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package me.hgsoft.minecraft.devcommand.commands;
package dev.hugog.minecraft.dev_command.commands;

import java.util.List;

Expand All @@ -7,6 +7,8 @@ public interface IDevCommand {
void execute();
boolean hasPermissionToExecuteCommand();
boolean hasValidArgs();
boolean canSenderExecuteCommand();
List<Object> getDependencies();
Object getDependency(Class<?> dependencyClass);

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package me.hgsoft.minecraft.devcommand.commands.builder;
package dev.hugog.minecraft.dev_command.commands.builder;

import me.hgsoft.minecraft.devcommand.commands.data.BukkitCommandData;
import me.hgsoft.minecraft.devcommand.commands.IDevCommand;
import me.hgsoft.minecraft.devcommand.integration.Integration;
import me.hgsoft.minecraft.devcommand.validators.CommandArgument;
import dev.hugog.minecraft.dev_command.commands.data.BukkitCommandData;
import dev.hugog.minecraft.dev_command.commands.IDevCommand;
import dev.hugog.minecraft.dev_command.integration.Integration;
import dev.hugog.minecraft.dev_command.validators.CommandArgument;

public class BukkitCommandDataBuilder implements ICommandBuilder<BukkitCommandDataBuilder, BukkitCommandData> {

Expand All @@ -14,6 +14,7 @@ public class BukkitCommandDataBuilder implements ICommandBuilder<BukkitCommandDa
private Class<? extends IDevCommand> executor;
private Class<?>[] dependencies;
private String permission;
private boolean isPlayerOnly;
private Class<? extends CommandArgument<?>>[] mandatoryArguments;
private Class<? extends CommandArgument<?>>[] optionalArguments;

Expand Down Expand Up @@ -74,8 +75,13 @@ public final BukkitCommandDataBuilder withIntegration(Integration integration) {
return this;
}

public final BukkitCommandDataBuilder withPlayerOnly(boolean isPlayerOnly) {
this.isPlayerOnly = isPlayerOnly;
return this;
}

public BukkitCommandData build() {
return new BukkitCommandData(name, alias, description, integration, dependencies, executor, permission, mandatoryArguments, optionalArguments);
return new BukkitCommandData(name, alias, description, integration, dependencies, executor, permission, isPlayerOnly, mandatoryArguments, optionalArguments);
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.hgsoft.minecraft.devcommand.commands.builder;
package dev.hugog.minecraft.dev_command.commands.builder;

import me.hgsoft.minecraft.devcommand.commands.IDevCommand;
import dev.hugog.minecraft.dev_command.commands.IDevCommand;

public interface ICommandBuilder<T extends ICommandBuilder<T, C>, C> {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package me.hgsoft.minecraft.devcommand.commands.data;
package dev.hugog.minecraft.dev_command.commands.data;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import me.hgsoft.minecraft.devcommand.commands.IDevCommand;
import me.hgsoft.minecraft.devcommand.integration.Integration;
import dev.hugog.minecraft.dev_command.commands.IDevCommand;
import dev.hugog.minecraft.dev_command.integration.Integration;

@Getter
@RequiredArgsConstructor
Expand Down
Loading