diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 2acc891c..c31d3012 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -12,7 +12,7 @@ object Versions { const val ADVENTURE_PLATFORM_BUKKIT = "4.3.4" const val ADVENTURE_TEXT_MINIMESSAGE = "4.17.0" - const val LITE_COMMANDS = "2.8.9" + const val LITE_COMMANDS = "3.5.0" const val OKAERI_CONFIGS_YAML_BUKKIT = "5.0.3" const val OKAERI_CONFIGS_SERDES_COMMONS = "5.0.3" const val OKAERI_CONFIGS_SERDES_BUKKIT = "5.0.3" diff --git a/eternalcombat-api/build.gradle.kts b/eternalcombat-api/build.gradle.kts index efbd0420..3ddc75f2 100644 --- a/eternalcombat-api/build.gradle.kts +++ b/eternalcombat-api/build.gradle.kts @@ -14,7 +14,7 @@ dependencies { api("net.kyori:adventure-text-minimessage:${Versions.ADVENTURE_TEXT_MINIMESSAGE}") // litecommands - api("dev.rollczi.litecommands:bukkit-adventure:${Versions.LITE_COMMANDS}") + api("dev.rollczi:litecommands-bukkit:${Versions.LITE_COMMANDS}") // Okaeri configs api("eu.okaeri:okaeri-configs-yaml-bukkit:${Versions.OKAERI_CONFIGS_YAML_BUKKIT}") diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/CombatCommand.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/CombatCommand.java similarity index 75% rename from eternalcombat-api/src/main/java/com/eternalcode/combat/CombatCommand.java rename to eternalcombat-api/src/main/java/com/eternalcode/combat/command/CombatCommand.java index e6e7db61..9609cf18 100644 --- a/eternalcombat-api/src/main/java/com/eternalcode/combat/CombatCommand.java +++ b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/CombatCommand.java @@ -1,6 +1,5 @@ -package com.eternalcode.combat; +package com.eternalcode.combat.command; -import com.eternalcode.combat.config.ConfigService; import com.eternalcode.combat.config.implementation.PluginConfig; import com.eternalcode.combat.fight.FightManager; import com.eternalcode.combat.fight.event.CauseOfTag; @@ -8,11 +7,11 @@ import com.eternalcode.combat.fight.event.FightTagEvent; import com.eternalcode.combat.fight.event.FightUntagEvent; import com.eternalcode.combat.notification.NotificationAnnouncer; -import dev.rollczi.litecommands.argument.Arg; -import dev.rollczi.litecommands.command.async.Async; -import dev.rollczi.litecommands.command.execute.Execute; -import dev.rollczi.litecommands.command.permission.Permission; -import dev.rollczi.litecommands.command.route.Route; +import dev.rollczi.litecommands.annotations.argument.Arg; +import dev.rollczi.litecommands.annotations.command.Command; +import dev.rollczi.litecommands.annotations.context.Context; +import dev.rollczi.litecommands.annotations.execute.Execute; +import dev.rollczi.litecommands.annotations.permission.Permission; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import panda.utilities.text.Formatter; @@ -20,24 +19,22 @@ import java.time.Duration; import java.util.UUID; -@Route(name = "combatlog", aliases = "combat") +@Command(name = "combatlog", aliases = "combat") public class CombatCommand { private final FightManager fightManager; - private final ConfigService configService; private final NotificationAnnouncer announcer; private final PluginConfig config; - public CombatCommand(FightManager fightManager, ConfigService configService, NotificationAnnouncer announcer, PluginConfig config) { + public CombatCommand(FightManager fightManager, NotificationAnnouncer announcer, PluginConfig config) { this.fightManager = fightManager; - this.configService = configService; this.announcer = announcer; this.config = config; } - @Execute(route = "status", required = 1) + @Execute(name = "status") @Permission("eternalcombat.status") - void status(CommandSender sender, @Arg Player target) { + void status(@Context CommandSender sender, @Arg Player target) { UUID targetUniqueId = target.getUniqueId(); PluginConfig.Messages messages = this.config.messages; @@ -49,9 +46,9 @@ void status(CommandSender sender, @Arg Player target) { : formatter.format(messages.admin.playerNotInCombat)); } - @Execute(route = "tag", required = 1) + @Execute(name = "tag") @Permission("eternalcombat.tag") - void tag(CommandSender sender, @Arg Player target) { + void tag(@Context CommandSender sender, @Arg Player target) { UUID targetUniqueId = target.getUniqueId(); Duration time = this.config.settings.combatDuration; @@ -69,9 +66,9 @@ void tag(CommandSender sender, @Arg Player target) { this.announcer.sendMessage(sender, format); } - @Execute(route = "tag", required = 2) + @Execute(name = "tag") @Permission("eternalcombat.tag") - void tagMultiple(CommandSender sender, @Arg Player firstTarget, @Arg Player secondTarget) { + void tagMultiple(@Context CommandSender sender, @Arg Player firstTarget, @Arg Player secondTarget) { Duration combatTime = this.config.settings.combatDuration; PluginConfig.Messages messages = this.config.messages; @@ -104,17 +101,9 @@ void tagMultiple(CommandSender sender, @Arg Player firstTarget, @Arg Player seco this.announcer.sendMessage(sender, format); } - @Async - @Execute(route = "reload") - @Permission("eternalcombat.reload") - void execute(CommandSender player) { - this.configService.reload(); - this.announcer.sendMessage(player, this.config.messages.admin.reload); - } - - @Execute(route = "untag", required = 1) + @Execute(name = "untag") @Permission("eternalcombat.untag") - void untag(Player sender, @Arg Player target) { + void untag(@Context Player sender, @Arg Player target) { UUID targetUniqueId = target.getUniqueId(); if (!this.fightManager.isInCombat(targetUniqueId)) { diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/command/InvalidUsage.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/InvalidUsage.java deleted file mode 100644 index a8a6e622..00000000 --- a/eternalcombat-api/src/main/java/com/eternalcode/combat/command/InvalidUsage.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.eternalcode.combat.command; - - -import com.eternalcode.combat.config.implementation.PluginConfig; -import com.eternalcode.combat.notification.NotificationAnnouncer; -import dev.rollczi.litecommands.command.LiteInvocation; -import dev.rollczi.litecommands.handle.InvalidUsageHandler; -import dev.rollczi.litecommands.schematic.Schematic; -import org.bukkit.command.CommandSender; -import panda.utilities.text.Formatter; - -import java.util.List; - -public class InvalidUsage implements InvalidUsageHandler { - - private final PluginConfig config; - private final NotificationAnnouncer announcer; - - public InvalidUsage(PluginConfig config, NotificationAnnouncer announcer) { - this.config = config; - this.announcer = announcer; - } - - @Override - public void handle(CommandSender commandSender, LiteInvocation invocation, Schematic scheme) { - List schematics = scheme.getSchematics(); - - for (String schematic : schematics) { - Formatter formatter = new Formatter() - .register("{USAGE}", schematic); - - this.announcer.sendMessage(commandSender, formatter.format(this.config.messages.invalidCommandUsage)); - } - } -} diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/command/PermissionMessage.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/PermissionMessage.java deleted file mode 100644 index d9343b5a..00000000 --- a/eternalcombat-api/src/main/java/com/eternalcode/combat/command/PermissionMessage.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.eternalcode.combat.command; - -import com.eternalcode.combat.config.implementation.PluginConfig; -import com.eternalcode.combat.notification.NotificationAnnouncer; -import dev.rollczi.litecommands.command.LiteInvocation; -import dev.rollczi.litecommands.command.permission.RequiredPermissions; -import dev.rollczi.litecommands.handle.PermissionHandler; -import org.bukkit.command.CommandSender; -import panda.utilities.text.Formatter; -import panda.utilities.text.Joiner; - -public class PermissionMessage implements PermissionHandler { - - private final PluginConfig config; - private final NotificationAnnouncer announcer; - - public PermissionMessage(PluginConfig config, NotificationAnnouncer announcer) { - this.config = config; - this.announcer = announcer; - } - - @Override - public void handle(CommandSender commandSender, LiteInvocation invocation, RequiredPermissions requiredPermissions) { - String value = Joiner.on(", ") - .join(requiredPermissions.getPermissions()) - .toString(); - - Formatter formatter = new Formatter() - .register("{PERMISSION}", value); - - this.announcer.sendMessage(commandSender, formatter.format(this.config.messages.noPermission)); - } - -} diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/command/ReloadCommand.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/ReloadCommand.java new file mode 100644 index 00000000..95fc7a3e --- /dev/null +++ b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/ReloadCommand.java @@ -0,0 +1,39 @@ +package com.eternalcode.combat.command; + +import com.eternalcode.combat.config.ConfigService; +import com.eternalcode.combat.notification.NotificationAnnouncer; +import com.google.common.base.Stopwatch; +import dev.rollczi.litecommands.annotations.async.Async; +import dev.rollczi.litecommands.annotations.command.Command; +import dev.rollczi.litecommands.annotations.context.Context; +import dev.rollczi.litecommands.annotations.execute.Execute; +import dev.rollczi.litecommands.annotations.permission.Permission; +import java.time.Duration; +import org.bukkit.command.CommandSender; +import panda.utilities.text.Formatter; + +@Command(name = "combatlog", aliases = "combat") +@Permission("eternalcombat.reload") +public class ReloadCommand { + + private static final String RELOAD_MESSAGE = "EternalCombat: Reloaded EternalCombat in {TIME}ms!"; + + private final ConfigService configService; + private final NotificationAnnouncer announcer; + + public ReloadCommand(ConfigService configService, NotificationAnnouncer announcer) { + this.configService = configService; + this.announcer = announcer; + } + + @Async + @Execute(name = "reload") + void execute(@Context CommandSender sender) { + Stopwatch stopwatch = Stopwatch.createStarted(); + this.configService.reload(); + + Duration elapsed = stopwatch.elapsed(); + Formatter format = new Formatter().register("{TIME}", elapsed.toMillis()); + this.announcer.sendMessage(sender, format.format(RELOAD_MESSAGE)); + } +} diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/command/handler/InvalidUsageHandlerImpl.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/handler/InvalidUsageHandlerImpl.java new file mode 100644 index 00000000..8aebba22 --- /dev/null +++ b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/handler/InvalidUsageHandlerImpl.java @@ -0,0 +1,38 @@ +package com.eternalcode.combat.command.handler; + +import com.eternalcode.combat.config.implementation.PluginConfig; +import com.eternalcode.combat.notification.NotificationAnnouncer; +import dev.rollczi.litecommands.handler.result.ResultHandlerChain; +import dev.rollczi.litecommands.invalidusage.InvalidUsage; +import dev.rollczi.litecommands.invalidusage.InvalidUsageHandler; +import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.schematic.Schematic; +import org.bukkit.command.CommandSender; +import panda.utilities.text.Formatter; + +public class InvalidUsageHandlerImpl implements InvalidUsageHandler { + + private final PluginConfig config; + private final NotificationAnnouncer announcer; + + public InvalidUsageHandlerImpl(PluginConfig config, NotificationAnnouncer announcer) { + this.config = config; + this.announcer = announcer; + } + + @Override + public void handle( + Invocation invocation, + InvalidUsage commandSenderInvalidUsage, + ResultHandlerChain resultHandlerChain + ) { + Schematic schematic = commandSenderInvalidUsage.getSchematic(); + + for (String usage : schematic.all()) { + Formatter formatter = new Formatter() + .register("{USAGE}", usage); + + this.announcer.sendMessage(invocation.sender(), formatter.format(this.config.messages.invalidCommandUsage)); + } + } +} diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/command/handler/MissingPermissionHandlerImpl.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/handler/MissingPermissionHandlerImpl.java new file mode 100644 index 00000000..93f669f3 --- /dev/null +++ b/eternalcombat-api/src/main/java/com/eternalcode/combat/command/handler/MissingPermissionHandlerImpl.java @@ -0,0 +1,35 @@ +package com.eternalcode.combat.command.handler; + +import com.eternalcode.combat.config.implementation.PluginConfig; +import com.eternalcode.combat.notification.NotificationAnnouncer; +import dev.rollczi.litecommands.handler.result.ResultHandlerChain; +import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.permission.MissingPermissions; +import dev.rollczi.litecommands.permission.MissingPermissionsHandler; +import org.bukkit.command.CommandSender; +import panda.utilities.text.Formatter; + +public class MissingPermissionHandlerImpl implements MissingPermissionsHandler { + + private final PluginConfig config; + private final NotificationAnnouncer announcer; + + public MissingPermissionHandlerImpl(PluginConfig config, NotificationAnnouncer announcer) { + this.config = config; + this.announcer = announcer; + } + + @Override + public void handle( + Invocation invocation, + MissingPermissions missingPermissions, + ResultHandlerChain resultHandlerChain + ) { + String joinedText = missingPermissions.asJoinedText(); + + Formatter formatter = new Formatter() + .register("{PERMISSION}", joinedText); + + this.announcer.sendMessage(invocation.sender(), formatter.format(this.config.messages.noPermission)); + } +} diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/config/implementation/PluginConfig.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/config/implementation/PluginConfig.java index a192f99f..830e2137 100644 --- a/eternalcombat-api/src/main/java/com/eternalcode/combat/config/implementation/PluginConfig.java +++ b/eternalcombat-api/src/main/java/com/eternalcode/combat/config/implementation/PluginConfig.java @@ -206,9 +206,6 @@ public static class Messages extends OkaeriConfig { public String cantEnterOnRegion = "&cYou can't enter this region during combat!"; public static class AdminMessages extends OkaeriConfig { - @Comment("# Message sent when the configuration is reloaded") - public String reload = "&aConfiguration has been successfully reloaded!"; - @Comment("# Message sent when console tries to use a command that is only for players") public String onlyForPlayers = "&cThis command is only available to players!"; diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java index 8451463f..19604406 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java @@ -1,8 +1,9 @@ package com.eternalcode.combat; import com.eternalcode.combat.bridge.BridgeService; -import com.eternalcode.combat.command.InvalidUsage; -import com.eternalcode.combat.command.PermissionMessage; +import com.eternalcode.combat.command.CombatCommand; +import com.eternalcode.combat.command.handler.InvalidUsageHandlerImpl; +import com.eternalcode.combat.command.handler.MissingPermissionHandlerImpl; import com.eternalcode.combat.config.ConfigService; import com.eternalcode.combat.config.implementation.PluginConfig; import com.eternalcode.combat.drop.DropController; @@ -36,16 +37,14 @@ import com.eternalcode.commons.adventure.AdventureLegacyColorPreProcessor; import com.google.common.base.Stopwatch; import dev.rollczi.litecommands.LiteCommands; -import dev.rollczi.litecommands.bukkit.adventure.platform.LiteBukkitAdventurePlatformFactory; -import dev.rollczi.litecommands.bukkit.tools.BukkitOnlyPlayerContextual; -import dev.rollczi.litecommands.bukkit.tools.BukkitPlayerArgument; +import dev.rollczi.litecommands.bukkit.LiteBukkitFactory; +import dev.rollczi.litecommands.bukkit.LiteBukkitMessages; import net.kyori.adventure.platform.AudienceProvider; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bstats.bukkit.Metrics; import org.bukkit.Server; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import java.io.File; @@ -111,17 +110,19 @@ public void onEnable() { NotificationAnnouncer notificationAnnouncer = new NotificationAnnouncer(this.audienceProvider, miniMessage); - this.liteCommands = LiteBukkitAdventurePlatformFactory.builder(server, FALLBACK_PREFIX, this.audienceProvider) - .argument(Player.class, new BukkitPlayerArgument<>(this.getServer(), this.pluginConfig.messages.playerNotFound)) - .contextualBind(Player.class, new BukkitOnlyPlayerContextual<>(this.pluginConfig.messages.admin.onlyForPlayers)) + this.liteCommands = LiteBukkitFactory.builder(FALLBACK_PREFIX, this, server) + .message(LiteBukkitMessages.PLAYER_NOT_FOUND, this.pluginConfig.messages.playerNotFound) + .message(LiteBukkitMessages.PLAYER_ONLY, this.pluginConfig.messages.admin.onlyForPlayers) - .invalidUsageHandler(new InvalidUsage(this.pluginConfig, notificationAnnouncer)) - .permissionHandler(new PermissionMessage(this.pluginConfig, notificationAnnouncer)) + .invalidUsage(new InvalidUsageHandlerImpl(this.pluginConfig, notificationAnnouncer)) + .missingPermission(new MissingPermissionHandlerImpl(this.pluginConfig, notificationAnnouncer)) - .commandInstance(new CombatCommand(this.fightManager, configService, notificationAnnouncer, this.pluginConfig)) - .commandInstance(new TagOutCommand(this.fightTagOutService, notificationAnnouncer, this.pluginConfig)) + .commands( + new CombatCommand(this.fightManager, notificationAnnouncer, this.pluginConfig), + new TagOutCommand(this.fightTagOutService, notificationAnnouncer, this.pluginConfig) + ) - .register(); + .build(); FightTask fightTask = new FightTask(server, this.pluginConfig, this.fightManager, fightBossBarService, notificationAnnouncer); this.getServer().getScheduler().runTaskTimer(this, fightTask, 20L, 20L); @@ -159,7 +160,7 @@ public void onDisable() { EternalCombatProvider.deinitialize(); if (this.liteCommands != null) { - this.liteCommands.getPlatform().unregisterAll(); + this.liteCommands.unregister(); } if (this.audienceProvider != null) {