Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ makeevrserg.java.ktarget=21
# Project
makeevrserg.project.name=AstraRating
makeevrserg.project.group=ru.astrainteractive.astrarating
makeevrserg.project.version.string=1.25.0
makeevrserg.project.version.string=1.26.0
makeevrserg.project.description=Rating plugin for EmpireProjekt
makeevrserg.project.developers=makeevrserg|Makeev Roman|makeevrserg@gmail.com
makeevrserg.project.url=https://empireprojekt.ru
Expand Down
34 changes: 17 additions & 17 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[versions]
cache4k = "0.14.0"
discordsrv = "1.30.1"
discordsrv = "1.30.2"
driver-h2 = "2.4.240"
driver-jdbc = "3.50.3.0"
driver-mariadb = "3.5.6"
Expand All @@ -12,45 +12,45 @@ gradle-ftp = "0.1.2"
gradle-shadow = "9.2.2"
gson = "2.13.2"
guava = "33.5.0-jre"
jda = "6.0.0-preview"
jda = "6.1.0"
jda-webhook = "0.8.4"
klibs-gradleplugin = "1.11.1"
klibs-kdi = "1.4.8"
klibs-kstorage = "4.2.3"
klibs-mikro = "1.14.2"
klibs-kstorage = "4.4.1"
klibs-mikro = "1.16.0"
kotlin-benchmark = "0.4.14"
kotlin-coroutines = "1.10.2"
kotlin-datetime = "0.7.1-0.6.x-compat"
kotlin-json = "1.9.0"
kotlin-serialization-kaml = "0.98.0"
kotlin-serialization-kaml = "0.102.0"
kotlin-serialization = "1.9.0"
kotlin-version = "2.2.0"
ktor = "3.3.0"
kyori = "4.24.0"
kyori-adventure = "4.24.0"
ktor = "3.3.1"
kyori = "4.25.0"
kyori-adventure = "4.25.0"
mcprotocollib = "1.21.7-SNAPSHOT"
minecraft-astralibs = "3.26.1"
minecraft-astralibs = "3.28.4"
minecraft-bstats = "3.1.0"
minecraft-bungee = "1.21-R0.5-SNAPSHOT"
minecraft-essentialsx = "2.21.2"
minecraft-fabric-api = "0.134.1+"
minecraft-fabric-kotlin = "1.13.1+"
minecraft-fabric-loader = "0.17.2"
minecraft-fabric-loom = "1.11.8"
minecraft-fabric-api = "0.136.3+"
minecraft-fabric-kotlin = "1.13.7+"
minecraft-fabric-loader = "0.17.3"
minecraft-fabric-loom = "1.12.5"
minecraft-luckperms = "5.5"
minecraft-mockbukkit = "4.33.2"
minecraft-mojang-version = "1.20.1"
minecraft-packetevents = "2.9.5"
minecraft-packetevents = "2.10.0"
minecraft-papi = "2.11.6"
minecraft-protocollib = "5.3.0"
minecraft-spigot = "1.21.9-R0.1-SNAPSHOT"
minecraft-towny = "0.101.2.1"
minecraft-vault = "1.7.1"
minecraft-velocity = "4.0.0-SNAPSHOT"
shadow = "8.1.8"
telegrambots = "9.1.0"
tests-junit-bom = "6.0.0"
tests-junit-jupiter-api = "6.0.0"
telegrambots = "9.2.0"
tests-junit-bom = "6.0.1"
tests-junit-jupiter-api = "6.0.1"
tests-mockito = "5.20.0"
tests-org-testing = "7.11.0"
turbine = "1.2.1"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ class CommandsModule(
)
bukkitModule.commandRegistrarContext.registerWhenReady(
node = createRatingCommandNode(
kyoriKrate = bukkitModule.kyoriKrate,
commandExceptionHandler = CommandExceptionHandler(
translationKrate = coreModule.translationKrate,
kyoriKrate = bukkitModule.kyoriKrate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package ru.astrainteractive.astrarating.command.exception

import com.mojang.brigadier.context.CommandContext
import io.papermc.paper.command.brigadier.CommandSourceStack
import ru.astrainteractive.astralibs.command.api.exception.ArgumentTypeException
import ru.astrainteractive.astralibs.command.api.exception.ArgumentConverterException
import ru.astrainteractive.astralibs.command.api.exception.BadArgumentException
import ru.astrainteractive.astralibs.command.api.exception.NoPermissionException
import ru.astrainteractive.astralibs.command.api.exception.NoPlayerException
Expand All @@ -26,7 +26,7 @@ class CommandExceptionHandler(
val desc = when (t) {
is StringDescCommandException -> t.stringDesc
is BadArgumentException -> translation.general.wrongUsage
is ArgumentTypeException -> translation.general.wrongUsage
is ArgumentConverterException -> translation.general.wrongUsage
is NoPermissionException -> translation.general.noPermission
is UnknownPlayerCommandException,
is NoPlayerException -> translation.general.playerNotExist
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
package ru.astrainteractive.astrarating.command.rating

import com.mojang.brigadier.builder.RequiredArgumentBuilder
import com.mojang.brigadier.arguments.StringArgumentType
import com.mojang.brigadier.context.CommandContext
import com.mojang.brigadier.tree.LiteralCommandNode
import io.papermc.paper.command.brigadier.CommandSourceStack
import org.bukkit.Bukkit
import org.bukkit.entity.Player
import ru.astrainteractive.astralibs.command.api.argumenttype.OfflinePlayerArgument
import ru.astrainteractive.astralibs.command.api.argumenttype.StringArgumentType
import ru.astrainteractive.astralibs.command.api.argumenttype.StringArgumentConverter
import ru.astrainteractive.astralibs.command.api.util.argument
import ru.astrainteractive.astralibs.command.api.util.command
import ru.astrainteractive.astralibs.command.api.util.findArgument
import ru.astrainteractive.astralibs.command.api.util.hints
import ru.astrainteractive.astralibs.command.api.util.literal
import ru.astrainteractive.astralibs.command.api.util.requireArgument
import ru.astrainteractive.astralibs.command.api.util.requirePlayer
import ru.astrainteractive.astralibs.command.api.util.runs
import ru.astrainteractive.astralibs.command.api.util.stringArgument
import ru.astrainteractive.astralibs.kyori.KyoriComponentSerializer
import ru.astrainteractive.astrarating.command.exception.CommandExceptionHandler
import ru.astrainteractive.astrarating.command.exception.OnlyPlayerCommandException
import ru.astrainteractive.astrarating.command.exception.UnknownPlayerCommandException
import ru.astrainteractive.astrarating.command.exception.UsageCommandException
import ru.astrainteractive.klibs.kstorage.api.CachedKrate
import ru.astrainteractive.klibs.kstorage.util.getValue

private fun openRating(
ctx: CommandContext<CommandSourceStack>,
Expand All @@ -41,112 +39,97 @@ private fun openRating(

@Suppress("LongMethod")
internal fun createRatingCommandNode(
kyoriKrate: CachedKrate<KyoriComponentSerializer>,
ratingCommandExecutor: RatingCommandExecutor,
commandExceptionHandler: CommandExceptionHandler
): LiteralCommandNode<CommandSourceStack> {
val kyori by kyoriKrate
return with(kyori) {
command("arating") {
literal("player") {
stringArgument("player") {
hints(Bukkit.getOnlinePlayers().map(Player::getName))
runs { ctx ->
val player = ctx.source.sender as? Player
if (player == null) {
commandExceptionHandler.handle(ctx, OnlyPlayerCommandException())
return@runs
}
val targetPlayer = ctx.findArgument("player", OfflinePlayerArgument)
val targetPlayerUuid = targetPlayer?.uniqueId
val targetPlayerName = targetPlayer?.name
if (targetPlayerUuid == null || targetPlayerName == null) {
commandExceptionHandler.handle(ctx, UnknownPlayerCommandException())
return@runs
}
if (!targetPlayer.hasPlayedBefore()) {
commandExceptionHandler.handle(ctx, UnknownPlayerCommandException())
return@runs
}
ratingCommandExecutor.execute(
RatingCommand.Result.OpenPlayerRatingGui(
player = player,
selectedPlayerName = targetPlayerName,
selectedPlayerUUID = targetPlayerUuid
)
)
}
}
}
literal("rating") {
return command("arating") {
literal("player") {
argument("player", StringArgumentType.string()) { playerArg ->
hints { Bukkit.getOnlinePlayers().map(Player::getName) }
runs { ctx ->
openRating(
ctx = ctx,
commandExceptionHandler = commandExceptionHandler,
ratingCommandExecutor = ratingCommandExecutor
)
}
stringArgument("like_dislike") {
hints(listOf("like", "dislike", "+", "-"))
stringArgument("player") player@{
hints { Bukkit.getOnlinePlayers().map(Player::getName) }
fun RequiredArgumentBuilder<CommandSourceStack, *>.messageArgument(
sizeLeft: Int,
maxSize: Int
) {
if (sizeLeft < 0) return
stringArgument("message_$sizeLeft") message@{
hints(listOf("..."))
messageArgument(sizeLeft - 1, maxSize)
runs { ctx ->
val executor = ctx.source.sender as? Player
if (executor == null) {
commandExceptionHandler.handle(ctx, OnlyPlayerCommandException())
return@runs
}
val value = when (ctx.findArgument("like_dislike", StringArgumentType)) {
"like", "+" -> 1
"dislike", "-" -> -1
else -> {
commandExceptionHandler.handle(ctx, UsageCommandException())
return@runs
}
}
val ratedPlayer = ctx.findArgument("player", OfflinePlayerArgument)
if (ratedPlayer == null) {
commandExceptionHandler.handle(ctx, UnknownPlayerCommandException())
return@runs
}
if (!ratedPlayer.hasPlayedBefore()) {
commandExceptionHandler.handle(ctx, UnknownPlayerCommandException())
return@runs
}
ratingCommandExecutor.execute(
RatingCommand.Result.ChangeRating(
value = value,
message = (sizeLeft..maxSize)
.reversed()
.mapNotNull { i -> ctx.findArgument("message_$i", StringArgumentType) }
.joinToString(" "),
executor = executor,
ratedPlayer = ratedPlayer
)
)
}
}
}

messageArgument(300, 300)
val player = ctx.requirePlayer()
val targetPlayer = runCatching {
ctx.requireArgument(playerArg, OfflinePlayerArgument)
}.getOrNull()
val targetPlayerUuid = targetPlayer?.uniqueId
val targetPlayerName = targetPlayer?.name
if (targetPlayerUuid == null || targetPlayerName == null) {
commandExceptionHandler.handle(ctx, UnknownPlayerCommandException())
return@runs
}
if (!targetPlayer.hasPlayedBefore()) {
commandExceptionHandler.handle(ctx, UnknownPlayerCommandException())
return@runs
}
ratingCommandExecutor.execute(
RatingCommand.Result.OpenPlayerRatingGui(
player = player,
selectedPlayerName = targetPlayerName,
selectedPlayerUUID = targetPlayerUuid
)
)
}
}
}
literal("rating") {
runs { ctx ->
openRating(
ctx = ctx,
commandExceptionHandler = commandExceptionHandler,
ratingCommandExecutor = ratingCommandExecutor
)
}
}.build()
}
argument("like_dislike", StringArgumentType.string()) { ratingTypeArg ->
hints { listOf("like", "dislike", "+", "-") }
argument("player", StringArgumentType.string()) player@{ playerArg ->
hints { Bukkit.getOnlinePlayers().map(Player::getName) }
argument("message", StringArgumentType.greedyString()) message@{ messageArg ->
hints { listOf("...") }
runs { ctx ->
val executor = ctx.source.sender as? Player
if (executor == null) {
commandExceptionHandler.handle(ctx, OnlyPlayerCommandException())
return@runs
}
val value = when (ctx.requireArgument(ratingTypeArg, StringArgumentConverter)) {
"like", "+" -> 1
"dislike", "-" -> -1
else -> {
commandExceptionHandler.handle(ctx, UsageCommandException())
return@runs
}
}
val ratedPlayer = runCatching {
ctx.requireArgument(playerArg, OfflinePlayerArgument)
}.getOrNull()
if (ratedPlayer == null) {
commandExceptionHandler.handle(ctx, UnknownPlayerCommandException())
return@runs
}
if (!ratedPlayer.hasPlayedBefore()) {
commandExceptionHandler.handle(ctx, UnknownPlayerCommandException())
return@runs
}
ratingCommandExecutor.execute(
RatingCommand.Result.ChangeRating(
value = value,
message = ctx.requireArgument(messageArg, StringArgumentConverter),
executor = executor,
ratedPlayer = ratedPlayer
)
)
}
}
}
}
}
runs { ctx ->
openRating(
ctx = ctx,
commandExceptionHandler = commandExceptionHandler,
ratingCommandExecutor = ratingCommandExecutor
)
}
}.build()
}
Loading