Skip to content
Closed
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 @@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
javaVersion=25
mcVersion=26.1.2
group=dev.slne.surf.api
version=3.10.0
version=3.10.1
relocationPrefix=dev.slne.surf.api.libs
snapshot=false
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ kotlinxCoroutines = "1.10.2"
kotlinx-serialization = "1.11.0"

# Packet Events
packetevents = "2.11.2"
packetevents = "2.12.1"
packetevents-plugin = "2.12.1"

# Command API
Expand Down Expand Up @@ -115,7 +115,7 @@ adventure-nbt = { module = "net.kyori:adventure-nbt", version.ref = "adventure-a

# Velocity
velocity-api = { module = "com.velocitypowered:velocity-api", version.ref = "velocity-api" }
velocity-proxy-ctd = { module = "com.velocityctd:velocity-proxy", version.ref = "velocity-api"}
velocity-proxy-ctd = { module = "com.velocityctd:velocity-proxy", version.ref = "velocity-api" }

# PAPI
placeholder-api = { module = "me.clip:placeholderapi", version.ref = "placeholder-api" }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package dev.slne.surf.api.paper.command.args.audience

import dev.jorel.commandapi.CommandAPICommand
import dev.jorel.commandapi.CommandTree
import dev.jorel.commandapi.arguments.Argument
import dev.jorel.commandapi.arguments.ArgumentSuggestions
import dev.jorel.commandapi.arguments.StringArgument
import dev.slne.surf.api.paper.command.args.SuspendCustomArgument
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer
import org.bukkit.entity.Player

class AsyncOfflinePlayerArgument(nodeName: String) :
SuspendCustomArgument<OfflinePlayer, String>(StringArgument(nodeName)) {

override suspend fun CoroutineScope.parse(info: CustomArgumentInfo<String>) =
withContext(Dispatchers.IO) {
Bukkit.getOfflinePlayer(info.input)
}

init {
this.replaceSuggestions(
ArgumentSuggestions.stringCollection { viewerInfo ->
Bukkit.getOnlinePlayers().filter { viewerInfo.sender !is Player || it.canSee(it) }
.map(Player::getName)
}
)
}
}

inline fun CommandTree.asyncOfflinePlayerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): CommandTree = then(
AsyncOfflinePlayerArgument(nodeName).setOptional(optional).apply(block)
)

inline fun Argument<*>.asyncOfflinePlayerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): Argument<*> = then(
AsyncOfflinePlayerArgument(nodeName).setOptional(optional).apply(block)
)

inline fun CommandAPICommand.asyncOfflinePlayerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): CommandAPICommand =
withArguments(AsyncOfflinePlayerArgument(nodeName).setOptional(optional).apply(block))
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package dev.slne.surf.api.paper.command.args.audience

import dev.jorel.commandapi.CommandAPICommand
import dev.jorel.commandapi.CommandTree
import dev.jorel.commandapi.arguments.Argument
import dev.jorel.commandapi.arguments.ArgumentSuggestions
import dev.jorel.commandapi.arguments.CustomArgument
import dev.jorel.commandapi.arguments.StringArgument
import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer
import org.bukkit.entity.Player

class OfflinePlayerArgument(nodeName: String) :
CustomArgument<OfflinePlayer, String>(StringArgument(nodeName), { info ->
Bukkit.getOfflinePlayer(info.input)
}) {
init {
this.replaceSuggestions(
ArgumentSuggestions.stringCollection { viewerInfo ->
Bukkit.getOnlinePlayers().filter { viewerInfo.sender !is Player || it.canSee(it) }
.map(Player::getName)
}
)
}
}

inline fun CommandTree.offlinePlayerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): CommandTree = then(
OfflinePlayerArgument(nodeName).setOptional(optional).apply(block)
)

inline fun Argument<*>.offlinePlayerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): Argument<*> = then(
OfflinePlayerArgument(nodeName).setOptional(optional).apply(block)
)

inline fun CommandAPICommand.offlinePlayerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): CommandAPICommand =
withArguments(OfflinePlayerArgument(nodeName).setOptional(optional).apply(block))
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package dev.slne.surf.api.paper.command.args.audience

import dev.jorel.commandapi.CommandAPICommand
import dev.jorel.commandapi.CommandTree
import dev.jorel.commandapi.arguments.Argument
import dev.jorel.commandapi.arguments.ArgumentSuggestions
import dev.jorel.commandapi.arguments.CustomArgument
import dev.jorel.commandapi.arguments.StringArgument
import dev.slne.surf.api.core.messages.adventure.buildText
import org.bukkit.Bukkit
import org.bukkit.entity.Player

class PlayerArgument(nodeName: String) :
CustomArgument<Player, String>(StringArgument(nodeName), { info ->
Bukkit.getPlayer(info.input)?.takeIf {
info.sender !is Player || it.canSee(it)
} ?: throw CustomArgumentException.fromAdventureComponent(
Comment on lines +14 to +17
buildText {
appendErrorPrefix()
error("Der Spieler wurde nicht gefunden.")
})
}) {
init {
this.replaceSuggestions(
ArgumentSuggestions.stringCollection { viewerInfo ->
Bukkit.getOnlinePlayers().filter { viewerInfo.sender !is Player || it.canSee(it) }
.map(Player::getName)
}
Comment on lines +24 to +28
)
}
}

inline fun CommandTree.playerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): CommandTree = then(
PlayerArgument(nodeName).setOptional(optional).apply(block)
)

inline fun Argument<*>.playerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): Argument<*> = then(
PlayerArgument(nodeName).setOptional(optional).apply(block)
)

inline fun CommandAPICommand.playerArgument(
nodeName: String,
optional: Boolean = false,
block: Argument<*>.() -> Unit = {}
): CommandAPICommand =
withArguments(PlayerArgument(nodeName).setOptional(optional).apply(block))
Loading