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 .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ env:
SLNE_SNAPSHOTS_REPO_PASSWORD: ${{ secrets.SLNE_SNAPSHOTS_REPO_PASSWORD }}
SLNE_RELEASES_REPO_USERNAME: ${{ secrets.SLNE_RELEASES_REPO_USERNAME }}
SLNE_RELEASES_REPO_PASSWORD: ${{ secrets.SLNE_RELEASES_REPO_PASSWORD }}
MODULE_REGEX: "surf-core-paper.*-all\\.jar$|surf-core-velocity.*-all\\.jar$"
MODULE_REGEX: "surf-core-paper.*-all\\.jar$|surf-core-velocity.*-all\\.jar$|surf-core-microservice.*-all\\.jar$"
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}

jobs:
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
kotlin.code.style=official
kotlin.stdlib.default.dependency=false
org.gradle.parallel=true
version=1.21.11-2.0.0-SNAPSHOT
version=1.21.11-2.1.0-SNAPSHOT
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package dev.slne.surf.core.api.paper

import dev.slne.surf.core.api.common.player.SurfPlayer
import dev.slne.surf.surfapi.core.api.util.requiredService
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player

private val access = requiredService<CorePlayerStatusAccess>()
typealias PlayerAccessHandler = (viewer: SurfPlayer, player: SurfPlayer) -> Boolean

interface CorePlayerStatusAccess {
fun registerHandler(handler: PlayerAccessHandler)
fun hasAccess(viewer: Player, player: Player): Boolean
fun hasAccess(viewer: CommandSender, player: SurfPlayer): Boolean
fun hasAccess(viewer: SurfPlayer, player: SurfPlayer): Boolean

companion object : CorePlayerStatusAccess by access {
val INSTANCE get() = access
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import dev.jorel.commandapi.arguments.CustomArgument
import dev.jorel.commandapi.arguments.StringArgument
import dev.slne.surf.core.api.common.SurfCoreApi
import dev.slne.surf.core.api.common.player.SurfPlayer
import dev.slne.surf.core.api.paper.CorePlayerStatusAccess
import dev.slne.surf.surfapi.core.api.util.logger
import kotlinx.coroutines.*
import kotlinx.coroutines.future.asDeferred
Expand All @@ -21,8 +22,10 @@ class SurfOfflinePlayerArgument(nodeName: String) :
}) {
init {
this.replaceSuggestions(
ArgumentSuggestions.stringCollection {
SurfCoreApi.getOnlinePlayers().mapNotNull { it.lastKnownName }
ArgumentSuggestions.stringCollection { viewerInfo ->
SurfCoreApi.getOnlinePlayers()
.filter { CorePlayerStatusAccess.hasAccess(viewerInfo.sender, it) }
.mapNotNull { it.lastKnownName }
}
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,25 @@ import dev.jorel.commandapi.arguments.CustomArgument
import dev.jorel.commandapi.arguments.StringArgument
import dev.slne.surf.core.api.common.SurfCoreApi
import dev.slne.surf.core.api.common.player.SurfPlayer
import dev.slne.surf.core.api.paper.CorePlayerStatusAccess
import dev.slne.surf.surfapi.core.api.messages.adventure.buildText

class SurfPlayerArgument(nodeName: String) :
CustomArgument<SurfPlayer, String>(StringArgument(nodeName), { info ->
SurfCoreApi.getPlayer(info.input) ?: throw CustomArgumentException.fromAdventureComponent(
SurfCoreApi.getPlayer(info.input)?.takeIf {
CorePlayerStatusAccess.hasAccess(info.sender, it)
} ?: throw CustomArgumentException.fromAdventureComponent(
buildText {
appendErrorPrefix()
error("Der Spieler wurde nicht gefunden.")
})
}) {
init {
this.replaceSuggestions(
ArgumentSuggestions.stringCollection {
SurfCoreApi.getOnlinePlayers().mapNotNull { it.lastKnownName }
ArgumentSuggestions.stringCollection { viewerInfo ->
SurfCoreApi.getOnlinePlayers()
.filter { CorePlayerStatusAccess.hasAccess(viewerInfo.sender, it) }
.mapNotNull { it.lastKnownName }
}
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package dev.slne.surf.core.paper.api.access

import com.google.auto.service.AutoService
import dev.slne.surf.core.api.common.SurfCoreApi
import dev.slne.surf.core.api.common.player.SurfPlayer
import dev.slne.surf.core.api.paper.CorePlayerStatusAccess
import dev.slne.surf.core.api.paper.PlayerAccessHandler
import net.kyori.adventure.util.Services
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import java.util.concurrent.ConcurrentHashMap

@AutoService(CorePlayerStatusAccess::class)
class CorePlayerStatusAccessImpl : CorePlayerStatusAccess, Services.Fallback {
private val _handlers = ConcurrentHashMap.newKeySet<PlayerAccessHandler>()

override fun registerHandler(handler: PlayerAccessHandler) {
_handlers += handler
}

override fun hasAccess(
viewer: Player,
player: Player
): Boolean {
val surfViewer = SurfCoreApi.getPlayer(viewer.uniqueId) ?: return false
val surfPlayer = SurfCoreApi.getPlayer(player.uniqueId) ?: return false

return hasAccess(surfViewer, surfPlayer)
}

override fun hasAccess(
viewer: CommandSender,
player: SurfPlayer
): Boolean {
if (viewer !is Player) return true
val surfViewer = SurfCoreApi.getPlayer(viewer.uniqueId) ?: return false

return hasAccess(surfViewer, player)
}

override fun hasAccess(
viewer: SurfPlayer,
player: SurfPlayer
): Boolean = _handlers.all { it(viewer, player) }
}