Skip to content

Commit 9b5a41f

Browse files
feat: integrate event server state management and Redis API
- Added `LocalEventServerState` to handle event server states locally. - Introduced `EventServerBridge` to manage state synchronization with Redis. - Registered `EventServerStateChangeListener` to handle Redis events for state updates. - Updated `NavigatorInventory` to provide actions and messages based on event server state. - Enhanced `PermissionRegistry` with `EVENT_BYPASS` permission. - Added Redis API and event base API Redis dependencies to `build.gradle.kts`. - Updated `LobbyConfig` with `redisUrl` configuration.
1 parent 42108b1 commit 9b5a41f

File tree

8 files changed

+105
-4
lines changed

8 files changed

+105
-4
lines changed

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ dependencies {
1212
compileOnly("surf-hologram:surf-hologram-api:1.21.10-1.0.1-20251011.094119-1")
1313
compileOnly("dev.slne.surf.npc:surf-npc-api:1.21.10-1.5.0-20251009.154819-1")
1414
compileOnly("com.nexomc:nexo:1.16.1")
15+
implementation("dev.slne.surf:surf-redis:1.0.0-SNAPSHOT")
16+
implementation("dev.slne.surf.event:surf-event-base-api-redis:1.21.11-1.0.0-SNAPSHOT")
1517
}
1618

1719
version = findProperty("version") as String

src/main/kotlin/dev/slne/surf/lobby/PaperMain.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package dev.slne.surf.lobby
22

33
import com.github.shynixn.mccoroutine.folia.SuspendingJavaPlugin
4+
import com.github.shynixn.mccoroutine.folia.launch
45
import dev.slne.surf.lobby.command.lobbyCommand
56
import dev.slne.surf.lobby.command.spawnCommand
67
import dev.slne.surf.lobby.config.LobbyConfigHolder
8+
import dev.slne.surf.lobby.event.eventServerBridge
9+
import dev.slne.surf.lobby.event.listener.EventServerStateChangeListener
710
import dev.slne.surf.lobby.hologram.SurfHologramHook
811
import dev.slne.surf.lobby.listener.*
912
import dev.slne.surf.lobby.manager.PushbackManager
1013
import dev.slne.surf.lobby.nexo.NexoHook
1114
import dev.slne.surf.lobby.npc.SurfNpcHook
15+
import dev.slne.surf.redis.RedisApi
1216
import dev.slne.surf.surfapi.bukkit.api.event.register
1317
import org.bukkit.Bukkit
1418
import org.bukkit.inventory.ItemType
@@ -17,6 +21,7 @@ import org.bukkit.plugin.java.JavaPlugin
1721
val plugin get() = JavaPlugin.getPlugin(PaperMain::class.java)
1822

1923
class PaperMain : SuspendingJavaPlugin() {
24+
lateinit var redisApi: RedisApi
2025
override fun onEnable() {
2126
if (surfNpcHook) {
2227
SurfNpcHook.initialize()
@@ -39,6 +44,18 @@ class PaperMain : SuspendingJavaPlugin() {
3944

4045
lobbyCommand()
4146
spawnCommand()
47+
48+
redisApi = RedisApi.create(plugin.dataPath)
49+
redisApi.registerRequestHandler(EventServerStateChangeListener)
50+
redisApi.freezeAndConnect()
51+
52+
launch {
53+
eventServerBridge.requestState()
54+
}
55+
}
56+
57+
override fun onDisable() {
58+
redisApi.disconnect()
4259
}
4360

4461
fun getInvisibleItem() =

src/main/kotlin/dev/slne/surf/lobby/config/LobbyConfig.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import org.spongepowered.configurate.objectmapping.ConfigSerializable
77
data class LobbyConfig(
88
val spawnPoint: LocationConfig = LocationConfig.default(),
99
val survivalNpc: LocationConfig = LocationConfig.default(),
10-
val eventNpc: LocationConfig = LocationConfig.default()
10+
val eventNpc: LocationConfig = LocationConfig.default(),
11+
12+
val redisUrl: String = "redis://localhost:6379",
1113
) {
1214
@ConfigSerializable
1315
data class LocationConfig(
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package dev.slne.surf.lobby.event
2+
3+
import dev.slne.surf.event.base.api.redis.request.EventServerStateRequest
4+
import dev.slne.surf.event.base.api.redis.response.EventServerStateResponse
5+
import dev.slne.surf.lobby.event.state.LocalEventServerState
6+
import dev.slne.surf.lobby.plugin
7+
8+
val eventServerBridge = EventServerBridge()
9+
10+
class EventServerBridge {
11+
var state: LocalEventServerState = LocalEventServerState.UNKNOWN
12+
13+
suspend fun requestState() = runCatching {
14+
plugin.logger.info("Requesting event server state...")
15+
val response =
16+
plugin.redisApi.sendRequest<EventServerStateResponse>(EventServerStateRequest())
17+
state = LocalEventServerState.ofState(response.state)
18+
plugin.logger.info("Received event server state: $state")
19+
}.onFailure {
20+
state = LocalEventServerState.UNKNOWN
21+
}
22+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.slne.surf.lobby.event.listener
2+
3+
import dev.slne.surf.event.base.api.redis.event.EventServerStateChangeRedisEvent
4+
import dev.slne.surf.lobby.event.eventServerBridge
5+
import dev.slne.surf.lobby.event.state.LocalEventServerState
6+
import dev.slne.surf.redis.event.OnRedisEvent
7+
8+
object EventServerStateChangeListener {
9+
@OnRedisEvent
10+
fun onEventServerStateChange(event: EventServerStateChangeRedisEvent) {
11+
eventServerBridge.state = LocalEventServerState.ofState(event.to)
12+
}
13+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package dev.slne.surf.lobby.event.state
2+
3+
import dev.slne.surf.event.base.api.common.state.EventServerState
4+
5+
enum class LocalEventServerState {
6+
OPEN,
7+
CLOSED,
8+
UNKNOWN;
9+
10+
companion object {
11+
fun ofState(eventServerState: EventServerState): LocalEventServerState {
12+
return when (eventServerState) {
13+
EventServerState.OPEN -> OPEN
14+
EventServerState.CLOSED -> CLOSED
15+
}
16+
}
17+
}
18+
}

src/main/kotlin/dev/slne/surf/lobby/inventory/impl/NavigatorInventory.kt

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package dev.slne.surf.lobby.inventory.impl
22

33
import com.github.stefvanschie.inventoryframework.pane.util.Slot
4+
import dev.slne.surf.lobby.event.eventServerBridge
5+
import dev.slne.surf.lobby.event.state.LocalEventServerState
46
import dev.slne.surf.lobby.plugin
7+
import dev.slne.surf.lobby.utils.PermissionRegistry
58
import dev.slne.surf.surfapi.bukkit.api.builder.displayName
69
import dev.slne.surf.surfapi.bukkit.api.event.cancel
710
import dev.slne.surf.surfapi.bukkit.api.inventory.dsl.menu
@@ -19,9 +22,31 @@ fun navigatorInventory() = menu(text("<shift:-46><glyph:server_selector>"), 6) {
1922
fillWith(eventServerItem)
2023

2124
setOnClick {
22-
it.whoClicked.sendText {
23-
appendPrefix()
24-
error("Aktuell findet kein Event statt!")
25+
val player = it.whoClicked as? Player ?: return@setOnClick
26+
27+
when (eventServerBridge.state) {
28+
LocalEventServerState.OPEN -> {
29+
surfBukkitApi.sendPlayerToServer(player, "event")
30+
return@setOnClick
31+
}
32+
33+
LocalEventServerState.CLOSED -> {
34+
if (player.hasPermission(PermissionRegistry.EVENT_BYPASS)) {
35+
surfBukkitApi.sendPlayerToServer(player, "event")
36+
return@setOnClick
37+
}
38+
player.sendText {
39+
appendPrefix()
40+
error("Der Event Server ist aktuell geschlossen!")
41+
}
42+
}
43+
44+
LocalEventServerState.UNKNOWN -> {
45+
player.sendText {
46+
appendPrefix()
47+
error("Aktuell findet kein Event statt!")
48+
}
49+
}
2550
}
2651
it.whoClicked.closeInventory()
2752
}

src/main/kotlin/dev/slne/surf/lobby/utils/PermissionRegistry.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ object PermissionRegistry : PermissionRegistry() {
1111
val COMMAND_LOBBY = create("$COMMAND_PREFIX.lobby")
1212
val COMMAND_LOBBY_RELOAD = create("$COMMAND_PREFIX.lobby.reload")
1313

14+
val EVENT_BYPASS = create("$PREFIX.event.bypass")
15+
1416
val PUSHBACK_ATTACK = create("$PREFIX.pushback.attack")
1517
val PUSHBACK_ITEM = create("$PREFIX.pushback.item")
1618
val PROTECTION_BYPASS = create("$PREFIX.bypass")

0 commit comments

Comments
 (0)