From 6e548f34c7579bce4724d6ac449264153663f32f Mon Sep 17 00:00:00 2001 From: twisti-dev <76837088+twisti-dev@users.noreply.github.com> Date: Mon, 8 Jun 2026 12:30:47 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20feat(queue):=20implement=20defa?= =?UTF-8?q?ult=20available=20slots=20provider=20for=20surf=20servers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add DefaultSurfQueueAvailableSlotsProvider to calculate available slots - integrate provider into PaperQueueTransfer and PaperSurfQueueInstance - create SurfQueueAvailableSlotsProvider interface for global access --- .../api/SurfQueueAvailableSlotsProvider.kt | 41 +++++++++++++++++++ .../queue/paper/PaperSurfQueueInstance.kt | 3 ++ .../DefaultSurfQueueAvailableSlotsProvider.kt | 15 +++++++ .../queue/transfer/PaperQueueTransfer.kt | 5 ++- 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 surf-queue-api/src/main/kotlin/dev/slne/surf/queue/api/SurfQueueAvailableSlotsProvider.kt create mode 100644 surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/queue/DefaultSurfQueueAvailableSlotsProvider.kt diff --git a/surf-queue-api/src/main/kotlin/dev/slne/surf/queue/api/SurfQueueAvailableSlotsProvider.kt b/surf-queue-api/src/main/kotlin/dev/slne/surf/queue/api/SurfQueueAvailableSlotsProvider.kt new file mode 100644 index 0000000..58f17ac --- /dev/null +++ b/surf-queue-api/src/main/kotlin/dev/slne/surf/queue/api/SurfQueueAvailableSlotsProvider.kt @@ -0,0 +1,41 @@ +package dev.slne.surf.queue.api + +import dev.slne.surf.core.api.common.server.SurfServer + +/** + * Provides the number of currently available slots for a given [SurfServer]. + */ +interface SurfQueueAvailableSlotsProvider { + + /** + * Returns the number of currently available slots on the given [server]. + * + * @param server the server whose available slots should be resolved + * @return the amount of free slots on the server + */ + suspend fun getAvailableSlots(server: SurfServer): Int + + /** + * Holds global access to the currently configured [SurfQueueAvailableSlotsProvider]. + */ + companion object { + private lateinit var instance: SurfQueueAvailableSlotsProvider + + /** + * Sets the global [SurfQueueAvailableSlotsProvider] instance. + * + * @param provider the provider instance to register + */ + fun set(provider: SurfQueueAvailableSlotsProvider) { + instance = provider + } + + /** + * Returns the globally configured [SurfQueueAvailableSlotsProvider] instance. + * + * @return the registered provider instance + * @throws UninitializedPropertyAccessException if no provider has been set yet + */ + fun get() = instance + } +} \ No newline at end of file diff --git a/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/PaperSurfQueueInstance.kt b/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/PaperSurfQueueInstance.kt index 61f04c4..3b72c4e 100644 --- a/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/PaperSurfQueueInstance.kt +++ b/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/PaperSurfQueueInstance.kt @@ -3,6 +3,7 @@ package dev.slne.surf.queue.paper import com.google.auto.service.AutoService import dev.slne.surf.api.paper.event.register import dev.slne.surf.core.api.common.server.SurfServer +import dev.slne.surf.queue.api.SurfQueueAvailableSlotsProvider import dev.slne.surf.queue.common.QueueInstance import dev.slne.surf.queue.common.queue.AbstractQueue import dev.slne.surf.queue.common.queue.tick.QueueScheduler @@ -11,6 +12,7 @@ import dev.slne.surf.queue.paper.config.SurfQueueConfig import dev.slne.surf.queue.paper.hook.startup.QueueStartHook import dev.slne.surf.queue.paper.listener.PlayerKickedDueToFullServerListener import dev.slne.surf.queue.paper.metrics.QueueMetricsLogger +import dev.slne.surf.queue.paper.queue.DefaultSurfQueueAvailableSlotsProvider import dev.slne.surf.queue.paper.queue.PaperOwnedQueueImpl import dev.slne.surf.queue.paper.queue.PaperQueueImpl @@ -25,6 +27,7 @@ class PaperSurfQueueInstance : QueueInstance() { override suspend fun load() { SurfQueueConfig.init() + SurfQueueAvailableSlotsProvider.set(DefaultSurfQueueAvailableSlotsProvider) super.load() QueueStartHook.get().onServerReady { isLoaded = true diff --git a/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/queue/DefaultSurfQueueAvailableSlotsProvider.kt b/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/queue/DefaultSurfQueueAvailableSlotsProvider.kt new file mode 100644 index 0000000..2c2c7ae --- /dev/null +++ b/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/queue/DefaultSurfQueueAvailableSlotsProvider.kt @@ -0,0 +1,15 @@ +package dev.slne.surf.queue.paper.queue + +import dev.slne.surf.core.api.common.server.SurfServer +import dev.slne.surf.queue.api.SurfQueueAvailableSlotsProvider +import org.bukkit.Bukkit + +object DefaultSurfQueueAvailableSlotsProvider : SurfQueueAvailableSlotsProvider { + override suspend fun getAvailableSlots(server: SurfServer): Int { + return if (SurfServer.current().name == server.name) { + Bukkit.getMaxPlayers() - Bukkit.getOnlinePlayers().size + } else { + server.maxPlayers - server.getPlayers().size + } + } +} \ No newline at end of file diff --git a/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/queue/transfer/PaperQueueTransfer.kt b/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/queue/transfer/PaperQueueTransfer.kt index b97c503..f40a2d8 100644 --- a/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/queue/transfer/PaperQueueTransfer.kt +++ b/surf-queue-paper/src/main/kotlin/dev/slne/surf/queue/paper/queue/transfer/PaperQueueTransfer.kt @@ -7,6 +7,7 @@ import dev.slne.surf.core.api.common.server.connection.SurfServerConnectResult import dev.slne.surf.queue.paper.config.SurfQueueConfig import dev.slne.surf.queue.paper.listener.PlayerKickedDueToFullServerListener import dev.slne.surf.api.core.util.logger +import dev.slne.surf.queue.api.SurfQueueAvailableSlotsProvider import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.withTimeout import net.kyori.adventure.text.Component @@ -26,10 +27,10 @@ class PaperQueueTransfer( } suspend fun tryTransfer(): Int { - val availableSlots = Bukkit.getMaxPlayers() - Bukkit.getOnlinePlayers().size + val coreServer = SurfServer[serverName] ?: return 0 + val availableSlots = SurfQueueAvailableSlotsProvider.get().getAvailableSlots(coreServer) if (availableSlots <= 0) return 0 - val coreServer = SurfServer[serverName] ?: return 0 val maxTransfers = min(availableSlots, SurfQueueConfig.getConfig().maxTransfersPerSecond) return processor.processTransfers(maxTransfers) { (uuid) -> From caeb1f38b91d1b38ff1819cd0cebe932877c80b9 Mon Sep 17 00:00:00 2001 From: twisti-dev <76837088+twisti-dev@users.noreply.github.com> Date: Mon, 8 Jun 2026 12:31:56 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=94=A7=20chore:=20bump=20version=20to?= =?UTF-8?q?=201.2.0=20in=20gradle.properties?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7e9810a..c5d4f36 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ org.gradle.configuration-cache=false kotlin.code.style=official kotlin.stdlib.default.dependency=false org.gradle.parallel=true -version=1.1.3 +version=1.2.0 authors=twisti,SLNE-Development \ No newline at end of file