Skip to content
This repository was archived by the owner on Dec 10, 2025. It is now read-only.
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
Empty file modified gradlew
100644 → 100755
Empty file.
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package dev.slne.surf.cloud.core.common.player.task
package dev.slne.surf.cloud.api.common.player.task

import dev.slne.surf.cloud.core.common.player.CommonOfflineCloudPlayerImpl
import dev.slne.surf.cloud.api.common.player.OfflineCloudPlayer
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
import net.kyori.adventure.text.Component

interface PrePlayerJoinTask { // TODO: 19.04.2025 12:47 - implement
suspend fun preJoin(player: CommonOfflineCloudPlayerImpl): Result
suspend fun preJoin(player: OfflineCloudPlayer): Result

@Serializable
sealed interface Result {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import dev.slne.surf.cloud.core.common.data.CloudPersistentData
import dev.slne.surf.cloud.core.common.messages.MessageManager
import dev.slne.surf.cloud.core.common.netty.network.protocol.running.PlayerConnectToServerPacket
import dev.slne.surf.cloud.core.common.netty.network.protocol.running.PlayerDisconnectFromServerPacket
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import kotlinx.coroutines.runBlocking
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import dev.slne.surf.cloud.core.common.netty.network.EncryptionManager
import dev.slne.surf.cloud.core.common.player.punishment.CloudPlayerPunishmentManagerBridgeImpl
import dev.slne.surf.cloud.core.common.plugin.task.CloudBeforeStartTaskHandler
import dev.slne.surf.cloud.core.common.processors.NettyPacketProcessor
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTaskAutoRegistrationHandler
import dev.slne.surf.cloud.core.common.spring.CloudChildSpringApplicationConfiguration
import dev.slne.surf.cloud.core.common.spring.CloudLifecycleAware
import dev.slne.surf.cloud.core.common.spring.SurfSpringBanner
Expand Down Expand Up @@ -236,6 +237,10 @@ class CloudCoreInstance : CloudInstance {
"beforeStartTaskHandler",
RootBeanDefinition(CloudBeforeStartTaskHandler::class.java)
)
ctx.registerBeanDefinition(
"prePlayerJoinTaskAutoRegistrationHandler",
RootBeanDefinition(PrePlayerJoinTaskAutoRegistrationHandler::class.java)
)
})


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import dev.slne.surf.cloud.api.common.meta.SurfNettyPacket
import dev.slne.surf.cloud.api.common.netty.network.protocol.PacketFlow
import dev.slne.surf.cloud.api.common.netty.packet.RespondingNettyPacket
import dev.slne.surf.cloud.api.common.netty.packet.ResponseNettyPacket
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
import java.util.*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import dev.slne.surf.cloud.api.common.netty.network.protocol.PacketFlow
import dev.slne.surf.cloud.api.common.netty.packet.NettyPacket
import dev.slne.surf.cloud.api.common.netty.packet.RespondingNettyPacket
import dev.slne.surf.cloud.api.common.netty.packet.ResponseNettyPacket
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
import java.net.Inet4Address
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import dev.slne.surf.cloud.api.common.server.UserListImpl
import dev.slne.surf.cloud.api.common.util.TimeLogger
import dev.slne.surf.cloud.api.common.util.mutableObject2ObjectMapOf
import dev.slne.surf.cloud.api.common.util.synchronize
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.core.common.spring.CloudLifecycleAware
import dev.slne.surf.surfapi.core.api.util.logger
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import dev.slne.surf.cloud.api.common.util.mutableObjectListOf
import dev.slne.surf.cloud.api.common.util.mutableObjectSetOf
import dev.slne.surf.cloud.api.common.util.synchronize
import dev.slne.surf.cloud.core.common.messages.MessageManager
import dev.slne.surf.cloud.core.common.player.CommonOfflineCloudPlayerImpl
import dev.slne.surf.cloud.api.common.player.OfflineCloudPlayer
import dev.slne.surf.cloud.core.common.player.PunishmentManager
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.core.common.util.bean
import dev.slne.surf.surfapi.core.api.util.logger
import dev.slne.surf.surfapi.core.api.util.toObjectList
Expand Down Expand Up @@ -93,7 +93,7 @@ class CloudPlayerPunishmentManagerBridgeImpl : CloudPlayerPunishmentManagerBridg
PrePlayerJoinTask {
private val log = logger()

override suspend fun preJoin(player: CommonOfflineCloudPlayerImpl): PrePlayerJoinTask.Result {
override suspend fun preJoin(player: OfflineCloudPlayer): PrePlayerJoinTask.Result {
val cache = punishmentManager.getCurrentLoginValidationPunishmentCache(player.uuid)
if (cache == null) {
log.atWarning()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import dev.slne.surf.cloud.api.common.event.CloudEventHandler
import dev.slne.surf.cloud.api.common.event.offlineplayer.punishment.CloudPlayerPunishEvent
import dev.slne.surf.cloud.api.common.event.offlineplayer.punishment.CloudPlayerPunishmentUpdatedEvent
import dev.slne.surf.cloud.api.common.player.punishment.type.mute.PunishmentMute
import dev.slne.surf.cloud.core.common.player.CommonOfflineCloudPlayerImpl
import dev.slne.surf.cloud.api.common.player.OfflineCloudPlayer
import dev.slne.surf.cloud.core.common.player.punishment.type.PunishmentMuteImpl
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import org.springframework.context.event.EventListener
import org.springframework.core.annotation.Order
import org.springframework.stereotype.Component
Expand All @@ -29,7 +29,7 @@ class MutePunishmentListener : PrePlayerJoinTask {
mute.punishedPlayer().punishmentManager.updateCachedMute(mute)
}

override suspend fun preJoin(player: CommonOfflineCloudPlayerImpl): PrePlayerJoinTask.Result {
override suspend fun preJoin(player: OfflineCloudPlayer): PrePlayerJoinTask.Result {
player.punishmentManager.cacheMutes()
return PrePlayerJoinTask.Result.ALLOWED
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package dev.slne.surf.cloud.core.common.player.task

import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.util.mutableObjectSetOf
import org.springframework.beans.factory.config.BeanPostProcessor
import org.springframework.context.SmartLifecycle
import org.springframework.stereotype.Component

@Component
class PrePlayerJoinTaskAutoRegistrationHandler(
private val taskManager: PrePlayerJoinTaskManager
) : BeanPostProcessor, SmartLifecycle {
private val watched = mutableObjectSetOf<PrePlayerJoinTask>()
private var running = false

override fun postProcessAfterInitialization(bean: Any, beanName: String): Any? {
if (bean is PrePlayerJoinTask) {
watched.add(bean)
if (running) {
taskManager.registerTask(bean)
}
}
return bean
}

override fun start() {
taskManager.registerTasks(watched)
running = true
}

override fun stop() {
running = false
watched.forEach { taskManager.unregisterTask(it) }
}

override fun isRunning(): Boolean = running
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.slne.surf.cloud.core.common.player.task

import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.util.mutableObjectListOf
import dev.slne.surf.cloud.core.common.coroutines.PrePlayerJoinTaskScope
import dev.slne.surf.cloud.core.common.player.CommonCloudPlayerImpl
Expand Down Expand Up @@ -33,6 +34,26 @@ class PrePlayerJoinTaskManager : BeanPostProcessor, SmartInitializingSingleton {
OrderComparator.sort(tasks)
}

fun registerTask(task: PrePlayerJoinTask) {
if (!tasks.contains(task)) {
tasks.add(task)
OrderComparator.sort(tasks)
}
}

fun registerTasks(tasks: Collection<PrePlayerJoinTask>) {
for (task in tasks) {
if (!this.tasks.contains(task)) {
this.tasks.add(task)
}
}
OrderComparator.sort(this.tasks)
}

fun unregisterTask(task: PrePlayerJoinTask) {
tasks.remove(task)
}

suspend fun runTasks(player: CommonOfflineCloudPlayerImpl): PrePlayerJoinTask.Result =
withContext(PrePlayerJoinTaskScope.context) {
for (task in tasks) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import dev.slne.surf.cloud.core.common.messages.MessageManager
import dev.slne.surf.cloud.core.common.netty.network.protocol.running.ClientboundRunPrePlayerJoinTasksPacket
import dev.slne.surf.cloud.core.common.player.CloudPlayerManagerImpl
import dev.slne.surf.cloud.core.common.player.playerManagerImpl
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTaskManager
import dev.slne.surf.cloud.core.common.util.bean
import dev.slne.surf.cloud.core.common.util.checkInstantiationByServiceLoader
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ import dev.slne.surf.cloud.api.server.netty.packet.broadcast
import dev.slne.surf.cloud.core.common.coroutines.PunishmentHandlerScope
import dev.slne.surf.cloud.core.common.netty.network.protocol.running.ClientboundTriggerPunishmentCreatedEventPacket
import dev.slne.surf.cloud.core.common.netty.network.protocol.running.ClientboundTriggerPunishmentUpdateEventPacket
import dev.slne.surf.cloud.core.common.player.CommonOfflineCloudPlayerImpl
import dev.slne.surf.cloud.api.common.player.OfflineCloudPlayer
import dev.slne.surf.cloud.core.common.player.PunishmentCacheImpl
import dev.slne.surf.cloud.core.common.player.PunishmentManager
import dev.slne.surf.cloud.core.common.player.punishment.type.*
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.standalone.player.db.exposed.punishment.entity.*
import dev.slne.surf.cloud.standalone.player.db.exposed.punishment.table.*
import dev.slne.surf.surfapi.core.api.util.logger
Expand Down Expand Up @@ -328,7 +328,7 @@ class PunishmentManagerImpl(private val service: PunishmentService) : Punishment
return preJoinPunishmentCache.getIfPresent(playerUuid)
}

override suspend fun preJoin(player: CommonOfflineCloudPlayerImpl): PrePlayerJoinTask.Result {
override suspend fun preJoin(player: OfflineCloudPlayer): PrePlayerJoinTask.Result {
val uuid = player.uuid
preJoinPunishmentCache.put(uuid, fetchPunishmentCache(uuid))
return PrePlayerJoinTask.Result.ALLOWED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import dev.slne.surf.cloud.api.common.player.punishment.type.ban.PunishmentBan
import dev.slne.surf.cloud.api.common.util.mapAsync
import dev.slne.surf.cloud.core.common.coroutines.PunishmentHandlerScope
import dev.slne.surf.cloud.core.common.messages.MessageManager
import dev.slne.surf.cloud.core.common.player.CommonOfflineCloudPlayerImpl
import dev.slne.surf.cloud.api.common.player.OfflineCloudPlayer
import dev.slne.surf.cloud.core.common.player.PunishmentManager
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.standalone.player.StandaloneCloudPlayerImpl
import dev.slne.surf.surfapi.core.api.util.logger
import kotlinx.coroutines.awaitAll
Expand Down Expand Up @@ -50,7 +50,7 @@ class DefaultBanPunishmentHandler(private val punishmentManager: PunishmentManag
}
}

override suspend fun preJoin(player: CommonOfflineCloudPlayerImpl): PrePlayerJoinTask.Result {
override suspend fun preJoin(player: OfflineCloudPlayer): PrePlayerJoinTask.Result {
val cache = punishmentManager.getCurrentLoginValidationPunishmentCache(player.uuid)
if (cache == null) {
log.atWarning()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import dev.slne.surf.cloud.core.common.data.CloudPersistentData
import dev.slne.surf.cloud.core.common.messages.MessageManager
import dev.slne.surf.cloud.core.common.netty.network.protocol.running.PlayerConnectToServerPacket
import dev.slne.surf.cloud.core.common.netty.network.protocol.running.PlayerDisconnectFromServerPacket
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask.Result
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask.Result
import dev.slne.surf.cloud.velocity.proxy
import org.springframework.stereotype.Component
import java.net.Inet4Address
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package dev.slne.surf.cloud.velocity.player

import dev.slne.surf.cloud.core.common.messages.MessageManager
import dev.slne.surf.cloud.core.common.player.CommonOfflineCloudPlayerImpl
import dev.slne.surf.cloud.core.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.api.common.player.OfflineCloudPlayer
import dev.slne.surf.cloud.api.common.player.task.PrePlayerJoinTask
import dev.slne.surf.cloud.velocity.proxy
import org.springframework.core.annotation.Order
import org.springframework.stereotype.Component as SpringComponent

@SpringComponent
@Order(PrePlayerJoinTask.VELOCITY_PLAYER_JOIN_VALIDATION)
class ValidateVelocityPlayerJoin : PrePlayerJoinTask {
override suspend fun preJoin(player: CommonOfflineCloudPlayerImpl): PrePlayerJoinTask.Result {
override suspend fun preJoin(player: OfflineCloudPlayer): PrePlayerJoinTask.Result {
return if (proxy.allServers.isEmpty()) {
PrePlayerJoinTask.Result.DENIED(
MessageManager.noServersAvailableToJoin
Expand Down