Skip to content

Commit 84bdc17

Browse files
authored
Merge pull request #5 from SLNE-Development/feat/surf-redis
Feat/surf redis
2 parents 83d4d39 + 64d2c3a commit 84bdc17

File tree

12 files changed

+168
-3
lines changed

12 files changed

+168
-3
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: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +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
6+
import dev.slne.surf.lobby.command.spawnCommand
57
import dev.slne.surf.lobby.config.LobbyConfigHolder
8+
import dev.slne.surf.lobby.event.eventServerBridge
9+
import dev.slne.surf.lobby.event.listener.EventServerStateChangeListener
610
import dev.slne.surf.lobby.hologram.SurfHologramHook
711
import dev.slne.surf.lobby.listener.*
812
import dev.slne.surf.lobby.manager.PushbackManager
913
import dev.slne.surf.lobby.nexo.NexoHook
1014
import dev.slne.surf.lobby.npc.SurfNpcHook
15+
import dev.slne.surf.redis.RedisApi
1116
import dev.slne.surf.surfapi.bukkit.api.event.register
1217
import org.bukkit.Bukkit
1318
import org.bukkit.inventory.ItemType
@@ -16,6 +21,7 @@ import org.bukkit.plugin.java.JavaPlugin
1621
val plugin get() = JavaPlugin.getPlugin(PaperMain::class.java)
1722

1823
class PaperMain : SuspendingJavaPlugin() {
24+
lateinit var redisApi: RedisApi
1925
override fun onEnable() {
2026
if (surfNpcHook) {
2127
SurfNpcHook.initialize()
@@ -37,6 +43,19 @@ class PaperMain : SuspendingJavaPlugin() {
3743
PushbackManager.startTask()
3844

3945
lobbyCommand()
46+
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()
4059
}
4160

4261
fun getInvisibleItem() =

src/main/kotlin/dev/slne/surf/lobby/command/LobbyCommand.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import dev.slne.surf.lobby.surfNpcHook
99
import dev.slne.surf.lobby.utils.PermissionRegistry
1010
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
1111

12-
fun lobbyCommand() = commandTree("lobby") {
12+
fun lobbyCommand() = commandTree("surflobby") {
1313
withPermission(PermissionRegistry.COMMAND_LOBBY)
1414

1515
literalArgument("reload") {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package dev.slne.surf.lobby.command
2+
3+
import dev.jorel.commandapi.kotlindsl.commandTree
4+
import dev.jorel.commandapi.kotlindsl.playerExecutor
5+
import dev.slne.surf.lobby.lobbyConfig
6+
import dev.slne.surf.lobby.utils.PermissionRegistry
7+
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
8+
9+
fun spawnCommand() = commandTree("spawn") {
10+
withPermission(PermissionRegistry.COMMAND_SPAWN)
11+
playerExecutor { player, _ ->
12+
player.teleportAsync(lobbyConfig.spawnPoint.toLocation()).thenRun {
13+
player.sendText {
14+
appendPrefix()
15+
success("Du wurdest zum Spawn teleportiert.")
16+
}
17+
}
18+
}
19+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ 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(),
1111
) {
1212
@ConfigSerializable
1313
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: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,95 @@
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
811
import dev.slne.surf.surfapi.bukkit.api.inventory.dsl.staticPane
12+
import dev.slne.surf.surfapi.bukkit.api.surfBukkitApi
13+
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
914
import dev.slne.surf.surfapi.core.api.messages.adventure.text
15+
import org.bukkit.entity.Player
1016

1117
fun navigatorInventory() = menu(text("<shift:-46><glyph:server_selector>"), 6) {
1218
setOnGlobalDrag { it.cancel() }
1319
setOnGlobalClick { it.cancel() }
1420

1521
staticPane(Slot.fromXY(5, 0), 3, 3) {
1622
fillWith(eventServerItem)
23+
24+
setOnClick {
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+
}
50+
}
51+
it.whoClicked.closeInventory()
52+
}
1753
}
1854

1955
staticPane(Slot.fromXY(1, 0), 3, 3) {
2056
fillWith(survivalServerItem)
57+
58+
setOnClick {
59+
it.whoClicked.sendText {
60+
appendPrefix()
61+
error("Die ")
62+
variableValue("1.21 Season vom Survival Server")
63+
error(" ist beendet. Es steht nicht fest, wann eine neue Season startet. Bitte habe Geduld.")
64+
}
65+
it.whoClicked.closeInventory()
66+
}
2167
}
2268

2369
staticPane(Slot.fromXY(0, 4), 2, 3) {
2470
fillWith(lobbyOneServerItem)
71+
72+
setOnClick {
73+
val player = it.whoClicked as? Player ?: return@setOnClick
74+
surfBukkitApi.sendPlayerToServer(player, "lobby01")
75+
}
2576
}
2677

2778
staticPane(Slot.fromXY(3, 4), 2, 3) {
2879
fillWith(lobbyTwoServerItem)
80+
81+
setOnClick {
82+
val player = it.whoClicked as? Player ?: return@setOnClick
83+
surfBukkitApi.sendPlayerToServer(player, "lobby02")
84+
}
2985
}
3086
staticPane(Slot.fromXY(6, 4), 2, 3) {
3187
fillWith(lobbyThreeServerItem)
88+
89+
setOnClick {
90+
val player = it.whoClicked as? Player ?: return@setOnClick
91+
surfBukkitApi.sendPlayerToServer(player, "lobby03")
92+
}
3293
}
3394
}
3495

src/main/kotlin/dev/slne/surf/lobby/listener/DamageListener.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.bukkit.event.EventHandler
88
import org.bukkit.event.Listener
99
import org.bukkit.event.entity.EntityDamageByEntityEvent
1010
import org.bukkit.event.entity.EntityDamageEvent
11+
import org.bukkit.event.entity.FoodLevelChangeEvent
1112

1213
object DamageListener : Listener {
1314
@EventHandler
@@ -23,4 +24,11 @@ object DamageListener : Listener {
2324
event.cancel()
2425
}
2526
}
27+
28+
@EventHandler
29+
fun onFoodLose(event: FoodLevelChangeEvent) {
30+
if (event.entity is Player) {
31+
event.cancel()
32+
}
33+
}
2634
}

0 commit comments

Comments
 (0)