Coder Social home page Coder Social logo

rollczi / litecommands Goto Github PK

View Code? Open in Web Editor NEW
113.0 3.0 16.0 1.68 MB

☄️ LiteCommands - Command framework for Velocity, Bukkit, Paper, BungeeCord, Minestom, Sponge, JDA and other implementations.

Home Page: https://litedevelopers.rollczi.dev/

License: Apache License 2.0

Java 100.00%
bukkit hacktoberfest java kyori minecraft papermc spigot velocity litecommands velocitypowered jda minestom chatgpt sponge

litecommands's Introduction

dependency

banner

Discord Sponsor Gradle Java

LiteCommands

Annotation based command framework for Velocity, Bukkit, Paper, BungeeCord, Minestom, Sponge, JDA and future implementations.

📌 Helpful links

✨ Features

  • Simple Arguments @Arg & Optional arguments @OptionalArg
  • Flags - @Flag
  • Joiner - @Join remaining arguments into a string
  • Asynchronous commands, argument parsing and completion. @Async
  • Command shortcuts @Shortcut
  • Support for basic types: int, double, Duration, LocalDateTime, Location and more!
  • Support for collection types: List, Set, TreeSet, Queue, java array T[] and many others!
  • IntelliJ Plugin that provides annotation inspections, syntax highlighting and more!
  • Custom annotation validators. (example)
  • Programmatic API for creating more dynamic commands. (example)
  • Jakarta EE annotation validation. (extension)
  • ChatGPT suggestions. (extension)
  • Adventure Kyori support. (extension)
  • and more! ✨

📦 Platforms

💡 Command Example

This is an example of /hello <name> <amount> command:

@Command(name = "hello")
@Permission("dev.rollczi.helloworld")
public class HelloCommand {

    @Execute
    void command(@Context CommandSender sender, @Arg String name, @Arg int amount) {
        for (int i = 0; i < amount; i++) {
            sender.sendMessage("Hello " + name);
        }
    }
}

Then we need to register the command in plugin main class: (in this case for Bukkit)

this.liteCommands = LiteBukkitFactory.builder("example-plugin")
    .commands(new HelloCommand())
    .build();

🚀 Get Started

➕ Add Panda Repository ❤️

maven("https://repo.panda-lang.org/releases")
<repository>
    <id>panda-repository</id>
    <url>https://repo.panda-lang.org/releases</url>
</repository>

➕ Add LiteCommands to dependencies

implementation("dev.rollczi:{artifact}:3.4.2")
<dependency>
    <groupId>dev.rollczi</groupId>
    <artifactId>{artifact}</artifactId>
    <version>3.4.2</version>
</dependency>

⚠️ Replace {artifact} with platform artifact
Add -parameters flag to your compiler to use all features (read more)

💖 GitHub Sponsors

@@ Special thanks to all sponsors for supporting me and my projects! ❤️ @@
Piotr Zych   q1zZ   Nadwey   

🔮 Official IntelliJ Plugin

With LiteCommands plugin, you can easily develop your commands within the IntelliJ IDEA environment. The plugin provides annotation inspections, tools for creating new command classes, syntax highlighting, code completion, and other useful features to make your development experience smoother and more efficient. How to install? litecommandsbanner-intellij

🌍 More Examples

➕ Official examples

➕ Plugins that use LiteCommands!

💖 Thanks for our partners!

JetBrains

JetBrains
Supports us with a free license for the most intelligent Java IDE - IntelliJ IDEA Ultimate

Reposilite

Reposilite
Provides us with a Maven repository for our artifacts - Reposilite Repository

YourKit

YourKit
Supports us with a innovative and intelligent tools for monitoring and profiling - YourKit Java Profiler

🔐 Dependencies used

litecommands's People

Contributors

blackbaroness avatar carmjos avatar citralflo avatar codestech1 avatar dependabot[bot] avatar huanmeng-qwq avatar p1otrulla avatar p3ridot avatar phm07 avatar q1zzu avatar rchomczyk avatar renovate[bot] avatar rollczi avatar skyy0x avatar vluckyyy avatar zax71 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

litecommands's Issues

Argument error message does not print

Hello. I have this code

@Route(name = "builds")
class BuildsCommand @Inject constructor(
// hidden
) {

    @Async
    @Execute
    fun execute(player: Player) {
        TODO()
    }

    @Async
    @Execute(route = "setcategory")
    @Permission("hidden")
    fun setCategory(commandSender: CommandSender, @Arg town: Town, @Arg category: Category) {
        TODO()
    }
}
@ArgumentName("category")
class CategoryArgument @Inject constructor(
    private val configurationProvider: ConfigurationProvider,
    private val miniMessage: MiniMessage,
    private val messageService: MessageService
) : OneArgument<Category> {

    override fun parse(invocation: LiteInvocation?, argument: String?): Result<Category, *> {
        return Option.of(
            configurationProvider.get().categories().find { it.id.equals(argument, true) }
        ).toResult(
            messageService.asLegacy(configurationProvider.get().ui().categoryDoesNotExists())
        )
    }

    override fun suggest(invocation: LiteInvocation?): MutableList<Suggestion> {
        return configurationProvider.get().categories()
            .map { Suggestion.of(it.id) }
            .toMutableList()
    }
}
@ArgumentName("town")
class TownArgument @Inject constructor(
    private val configurationProvider: ConfigurationProvider,
    private val townyAPI: TownyAPI,
    private val messageService: MessageService
) : OneArgument<Town> {

    override fun parse(invocation: LiteInvocation?, argument: String?): Result<Town, *> {
        return Option.of(
            townyAPI.towns.find { it.name.equals(argument, true) }
        ).toResult(
            messageService.asLegacy(configurationProvider.get().ui().townDoesNotExists())
        )
    }

    override fun suggest(invocation: LiteInvocation?): MutableList<Suggestion> {
        return townyAPI.towns.map { Suggestion.of(it.name) }.toMutableList()
    }
}

Tab complete works as expected, but not error messages. I will never see the error, if I type invalid town or category, I will be redirected to execute(Player).

Also, I don't know if there are Component support, so I used legacy strings. Anyway, I can't see them in game.

Short: /builds setcategory invalid_town invalid_category works like /builds.

BungeeCord strange no-permission message

When I declare permission via annotation at BungeeCord and the player tries to execute this command without permission, he just receives permission as a message. I mean in raw format, just "permissionYouTyped".

Error: Caused by: dev.rollczi.litecommands.injector.MissingBindException: Have you added type bind or contextual bind? CometCommand#find(Player sender) [org.bukkit.entity.Player]

Full stacktrace:

[20:28:26 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing 'comet find' in dev.rollczi.litecommands.bukkit.SimpleCommand(comet)
        at org.bukkit.command.SimpleCommandMap.dispatch(:162) ~[guardspigot.jar:git-Paper-8359863]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(:687) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(:1504) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PlayerConnection.a(:1309) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(:45) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(:5) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(:14) ~[guardspigot.jar:git-Paper-8359863]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
        at net.minecraft.server.v1_12_R1.SystemUtils.a(:46) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(:854) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(:431) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(:778) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(:669) ~[guardspigot.jar:git-Paper-8359863]
        at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: dev.rollczi.litecommands.injector.MissingBindException: Have you added type bind or contextual bind? CometCommand#find(Player sender) [org.bukkit.entity.Player]
        at dev.rollczi.litecommands.implementation.injector.CommandInjector.invokeExecutable(CommandInjector.java:177) ~[?:?]
        at dev.rollczi.litecommands.implementation.injector.CommandInjector.invokeExecutables(CommandInjector.java:100) ~[?:?]
        at dev.rollczi.litecommands.implementation.injector.CommandInjector.invokeMethod(CommandInjector.java:81) ~[?:?]
        at dev.rollczi.litecommands.implementation.MethodExecutor.execute(MethodExecutor.java:26) ~[?:?]
        at dev.rollczi.litecommands.implementation.LiteArgumentArgumentExecutor.execute(LiteArgumentArgumentExecutor.java:65) ~[?:?]
        at dev.rollczi.litecommands.implementation.LiteCommandSection.execute(LiteCommandSection.java:89) ~[?:?]
        at dev.rollczi.litecommands.command.CommandService.lambda$register$0(CommandService.java:42) ~[?:?]
        at dev.rollczi.litecommands.bukkit.SimpleCommand.execute(SimpleCommand.java:29) ~[?:?]
        at org.bukkit.command.SimpleCommandMap.dispatch(:152) ~[guardspigot.jar:git-Paper-8359863]
        ... 14 more

My code:

private void registerCommands() {
    LiteBukkitFactory.builder(server, "ElementComets")
        .commandInstance(cometCommand)
        .register();
}
@Route(name = "comet")
@Permission("comets.admin")
@RequiredArgsConstructor(onConstructor_ = @Inject)
public class CometCommand {

   // ...

    @Execute(route = "find")
    public void find(Player sender) {
        // ...
    }

}

I run Java 17, PaperSpigot 1.12.2 and LiteCommands 2.8.6. I use bukkit module.

Error when tab-complete or execute invalid boolean argument

Error:

[15:10:36 ERROR]: Exception when BlackBaroness attempted to tab complete comet seer fa
org.bukkit.command.CommandException: Unhandled exception executing tab-completer for 'comet seer fa' in ru.elementcraft.elementcomets.__relocated__.litecommands.bukkit.SimpleCommand(comet)
        at org.bukkit.command.SimpleCommandMap.tabComplete(:237) ~[guardspigot.jar:git-Paper-8359863]
        at org.bukkit.command.SimpleCommandMap.tabComplete(:183) ~[guardspigot.jar:git-Paper-8359863]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.tabCompleteCommand(:1760) ~[guardspigot.jar:git-Paper-8359863]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.tabComplete(:1734) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.tabCompleteCommand(:1279) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PlayerConnection$9.evaluate(:2345) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PlayerConnection$9.evaluate(:2342) ~[guardspigot.jar:git-Paper-8359863]
        at org.bukkit.craftbukkit.v1_12_R1.util.Waitable.run(:24) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(:865) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(:431) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(:778) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(:669) ~[guardspigot.jar:git-Paper-8359863]
        at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.IllegalArgumentException: Argument is not boolean
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.BooleanArgument.lambda$parse$2(BooleanArgument.java:15) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.panda_std.Option.orThrow(Option.java:244) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.BooleanArgument.parse(BooleanArgument.java:15) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.TypeUtils.validate(TypeUtils.java:46) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.TypeUtils.lambda$suggestion$1(TypeUtils.java:37) ~[?:?]
        at java.util.Optional.filter(Optional.java:218) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.TypeUtils.suggestion(TypeUtils.java:37) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.AbstractBasicTypeArgument.suggest(AbstractBasicTypeArgument.java:30) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.simple.SimpleMultilevelArgument.suggestion(SimpleMultilevelArgument.java:51) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.simple.SimpleMultilevelArgument.suggestion(SimpleMultilevelArgument.java:16) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.AnnotatedParameterImpl.extractSuggestion(AnnotatedParameterImpl.java:39) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.AnnotatedParameterImpl$SimpleSuggester.suggestion(AnnotatedParameterImpl.java:102) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.suggestion.Suggester.extractSuggestions(Suggester.java:18) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.suggestionParameters(LiteCommandSection.java:183) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.findSuggestion(LiteCommandSection.java:145) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.findSuggestion(LiteCommandSection.java:131) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.command.CommandService.lambda$register$1(CommandService.java:47) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.bukkit.SimpleCommand.tabComplete(SimpleCommand.java:35) ~[?:?]
        at org.bukkit.command.Command.tabComplete(:90) ~[guardspigot.jar:git-Paper-8359863]
        at org.bukkit.command.SimpleCommandMap.tabComplete(:231) ~[guardspigot.jar:git-Paper-8359863]
        ... 12 more

When you try to write a command like "[command] fa" instead of "[command] false", you will receive that error.

    @Async
    @Execute(route = "seer")
    public void seer(Player player, @Arg boolean enable) {
    }

Also executing command with non-boolean value throws error too:

[15:14:24 INFO]: BlackBaroness issued server command: /comet seer fa
[15:14:24 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing 'comet seer fa' in ru.elementcraft.elementcomets.__relocated__.litecommands.bukkit.SimpleCommand(comet)
        at org.bukkit.command.SimpleCommandMap.dispatch(:162) ~[guardspigot.jar:git-Paper-8359863]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(:687) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(:1504) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PlayerConnection.a(:1309) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(:45) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(:5) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(:14) ~[guardspigot.jar:git-Paper-8359863]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
        at net.minecraft.server.v1_12_R1.SystemUtils.a(:46) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(:854) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(:431) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(:778) ~[guardspigot.jar:git-Paper-8359863]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(:669) ~[guardspigot.jar:git-Paper-8359863]
        at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: ru.elementcraft.elementcomets.__relocated__.panda_std.AttemptFailedException: java.lang.IllegalArgumentException: Argument is not boolean
        at ru.elementcraft.elementcomets.__relocated__.panda_std.Result.supplyThrowing(Result.java:140) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.TypeUtils.parse(TypeUtils.java:29) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.AbstractBasicTypeArgument.parse(AbstractBasicTypeArgument.java:25) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.simple.OneArgument.parseMultilevel(OneArgument.java:21) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.simple.SimpleMultilevelArgument.match(SimpleMultilevelArgument.java:34) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.AnnotatedParameterImpl.match(AnnotatedParameterImpl.java:35) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.AnnotatedParameterStateImpl.lambda$new$0(AnnotatedParameterStateImpl.java:20) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.HandleLazyUtil.lambda$handle$0(HandleLazyUtil.java:16) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.panda_std.Lazy.get(Lazy.java:50) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.AnnotatedParameterStateImpl.matchResult(AnnotatedParameterStateImpl.java:26) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteArgumentArgumentExecutor.find(LiteArgumentArgumentExecutor.java:78) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.find(LiteCommandSection.java:244) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.find(LiteCommandSection.java:225) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.execute(LiteCommandSection.java:83) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.command.CommandService.lambda$register$0(CommandService.java:42) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.bukkit.SimpleCommand.execute(SimpleCommand.java:29) ~[?:?]
        at org.bukkit.command.SimpleCommandMap.dispatch(:152) ~[guardspigot.jar:git-Paper-8359863]
        ... 14 more
Caused by: java.lang.IllegalArgumentException: Argument is not boolean
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.BooleanArgument.lambda$parse$2(BooleanArgument.java:15) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.panda_std.Option.orThrow(Option.java:244) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.BooleanArgument.parse(BooleanArgument.java:15) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.AbstractBasicTypeArgument.lambda$parse$0(AbstractBasicTypeArgument.java:25) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.panda_std.Result.supplyThrowing(Result.java:133) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.TypeUtils.parse(TypeUtils.java:29) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.basictype.AbstractBasicTypeArgument.parse(AbstractBasicTypeArgument.java:25) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.simple.OneArgument.parseMultilevel(OneArgument.java:21) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.argument.simple.SimpleMultilevelArgument.match(SimpleMultilevelArgument.java:34) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.AnnotatedParameterImpl.match(AnnotatedParameterImpl.java:35) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.AnnotatedParameterStateImpl.lambda$new$0(AnnotatedParameterStateImpl.java:20) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.HandleLazyUtil.lambda$handle$0(HandleLazyUtil.java:16) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.panda_std.Lazy.get(Lazy.java:50) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.AnnotatedParameterStateImpl.matchResult(AnnotatedParameterStateImpl.java:26) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteArgumentArgumentExecutor.find(LiteArgumentArgumentExecutor.java:78) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.find(LiteCommandSection.java:244) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.find(LiteCommandSection.java:225) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.implementation.LiteCommandSection.execute(LiteCommandSection.java:83) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.command.CommandService.lambda$register$0(CommandService.java:42) ~[?:?]
        at ru.elementcraft.elementcomets.__relocated__.litecommands.bukkit.SimpleCommand.execute(SimpleCommand.java:29) ~[?:?]
        at org.bukkit.command.SimpleCommandMap.dispatch(:152) ~[guardspigot.jar:git-Paper-8359863]
        ... 14 more

Custom command sender type

I am writing a cross platform plugin and have my own CommandSenderWrapper. Is it possible to specify my own CommandSender in the same way as in Cloud?

Something like that:

.setSenderType<CustomCommandSender>({ toBukkit(it) }, { toCustom(it) })
    @Execute
    @Min(1)
    fun command(sender: CustomCommandSender, @Args args: Array<String?>) {
        sender.sendMessage(args.joinToString(" "))
    }

Add exception handling to async commands

Hi, I have noticed that @Async commands does not print stack trace. Yes, we can work out it by using CompletableFuture, but this will look bad. What about adding some kind of exception handling for commands like this? For me, just printing stackstace would be enough.

Support multi handlers for same class.

@Execute(route = "command1", required = 1)
public void execute(@Arg(0) @Handler(StringArg1.class) String text) {

}

@Execute(route = "command2", required = 1)
public void execute(@Arg(0) @Handler(StringArg2.class) String text) {

}

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/build.yml
  • actions/checkout v4
  • actions/setup-java v3
.github/workflows/codeql-analysis.yml
  • actions/checkout v4
  • github/codeql-action v2
  • github/codeql-action v2
  • github/codeql-action v2
.github/workflows/publish.yml
  • actions/checkout v4
  • actions/setup-java v3
gradle
gradle.properties
settings.gradle.kts
buildSrc/build.gradle.kts
  • me.champeau.jmh:jmh-gradle-plugin 0.7.1
  • net.kyori:blossom 1.3.1
  • net.kyori:indra-git 3.1.3
buildSrc/src/main/kotlin/litecommands-compile-variables.gradle.kts
buildSrc/src/main/kotlin/litecommands-java-11.gradle.kts
buildSrc/src/main/kotlin/litecommands-java-17.gradle.kts
buildSrc/src/main/kotlin/litecommands-java-8.gradle.kts
buildSrc/src/main/kotlin/litecommands-java-benchmark.gradle.kts
  • org.openjdk.jmh:jmh-generator-annprocess 1.37
buildSrc/src/main/kotlin/litecommands-java-unit-test.gradle.kts
  • org.mockito:mockito-core 5.6.0
  • org.junit.jupiter:junit-jupiter-api 5.10.0
  • org.junit.jupiter:junit-jupiter-params 5.10.0
  • org.assertj:assertj-core 3.24.2
  • org.awaitility:awaitility 4.2.0
  • org.junit.jupiter:junit-jupiter-engine 5.10.0
buildSrc/src/main/kotlin/litecommands-java.gradle.kts
buildSrc/src/main/kotlin/litecommands-publish.gradle.kts
buildSrc/src/main/kotlin/litecommands-repositories.gradle.kts
litecommands-adventure/build.gradle.kts
  • net.kyori:adventure-text-minimessage 4.14.0
  • net.kyori:adventure-text-serializer-legacy 4.14.0
litecommands-adventure-platform/build.gradle.kts
  • net.kyori:adventure-platform-api 4.3.1
litecommands-annotations/build.gradle.kts
litecommands-bukkit/build.gradle.kts
  • org.spigotmc:spigot-api 1.20.2-R0.1-SNAPSHOT
  • org.spigotmc:spigot 1.8.8-R0.1-SNAPSHOT
  • com.comphenix.protocol:ProtocolLib 5.1.0
litecommands-bungee/build.gradle.kts
  • net.md-5:bungeecord-api 1.20-R0.1
litecommands-chatgpt/build.gradle.kts
  • com.google.code.gson:gson 2.10.1
  • com.github.ben-manes.caffeine:caffeine 3.1.8
  • com.squareup.okhttp3:okhttp 4.12.0
litecommands-core/build.gradle.kts
  • org.panda-lang:expressible 1.3.6
  • org.jetbrains:annotations 24.0.1
litecommands-framework/build.gradle.kts
litecommands-jda/build.gradle.kts
  • net.dv8tion:JDA 5.0.0-beta.17
  • net.dv8tion:JDA 5.0.0-beta.17
litecommands-minestom/build.gradle.kts
  • dev.hollowcube:minestom-ce 438338381e
  • dev.hollowcube:minestom-ce 438338381e
litecommands-programmatic/build.gradle.kts
litecommands-unit/build.gradle.kts
  • org.junit.jupiter:junit-jupiter-api 5.10.0
  • org.junit.jupiter:junit-jupiter-params 5.10.0
  • org.assertj:assertj-core 3.24.2
  • org.mockito:mockito-core 5.6.0
  • org.awaitility:awaitility 4.2.0
litecommands-velocity/build.gradle.kts
  • com.velocitypowered:velocity-api 3.2.0-SNAPSHOT
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.0.1

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.