Skip to content

Commit d7522f5

Browse files
fix: refactor navigator view to use NavigatorInventory and improve layout handling
1 parent d1b8692 commit d7522f5

3 files changed

Lines changed: 61 additions & 63 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import dev.slne.surf.lobby.config.LobbyConfigHolder
1010
import dev.slne.surf.lobby.event.eventServerBridge
1111
import dev.slne.surf.lobby.hook.nexo.NexoHook
1212
import dev.slne.surf.lobby.hook.npc.SurfNpcHook
13+
import dev.slne.surf.lobby.inventory.impl.NavigatorInventory
1314
import dev.slne.surf.lobby.inventory.impl.lobbySelectorView
14-
import dev.slne.surf.lobby.inventory.impl.navigatorView
1515
import dev.slne.surf.lobby.listener.*
1616
import dev.slne.surf.lobby.manager.PushbackManager
1717
import dev.slne.surf.redis.RedisApi
@@ -24,7 +24,7 @@ class PaperMain : SuspendingJavaPlugin() {
2424
lateinit var redisApi: RedisApi
2525

2626
override fun onLoad() {
27-
navigatorView().register()
27+
NavigatorInventory.register()
2828
lobbySelectorView().register()
2929
}
3030

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

Lines changed: 57 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.github.benmanes.caffeine.cache.Caffeine
66
import com.github.shynixn.mccoroutine.folia.launch
77
import com.sksamuel.aedile.core.expireAfterWrite
88
import dev.slne.surf.api.core.font.toSmallCaps
9+
import dev.slne.surf.api.core.messages.adventure.buildText
910
import dev.slne.surf.api.core.messages.adventure.clickOpensUrl
1011
import dev.slne.surf.api.core.messages.adventure.playSound
1112
import dev.slne.surf.api.core.messages.adventure.sendText
@@ -15,8 +16,11 @@ import dev.slne.surf.api.paper.builder.displayName
1516
import dev.slne.surf.api.paper.inventory.framework.dsl.onItemClick
1617
import dev.slne.surf.api.paper.inventory.framework.dsl.openForPlayer
1718
import dev.slne.surf.api.paper.inventory.framework.dsl.slot
18-
import dev.slne.surf.api.paper.inventory.framework.view.*
19+
import dev.slne.surf.api.paper.inventory.framework.view.layoutTarget
20+
import dev.slne.surf.api.paper.inventory.framework.view.onFirstRender
21+
import dev.slne.surf.api.paper.inventory.framework.view.paginatedSurfView
1922
import dev.slne.surf.api.paper.inventory.framework.view.pagination.pagination
23+
import dev.slne.surf.api.paper.inventory.framework.view.settings
2024
import dev.slne.surf.api.paper.inventory.framework.view.settings.PaginationViewRows
2125
import dev.slne.surf.core.api.common.SurfCoreApi
2226
import dev.slne.surf.core.api.common.server.state.SurfServerState
@@ -26,93 +30,87 @@ import dev.slne.surf.lobby.event.eventServerBridge
2630
import dev.slne.surf.lobby.lobbyConfig
2731
import dev.slne.surf.lobby.plugin
2832
import dev.slne.surf.lobby.utils.Locations
33+
import me.devnatan.inventoryframework.View
34+
import me.devnatan.inventoryframework.ViewConfigBuilder
35+
import me.devnatan.inventoryframework.context.RenderContext
2936
import org.bukkit.Material
3037
import org.bukkit.Sound
3138
import org.bukkit.inventory.ItemType
3239
import java.util.*
3340
import kotlin.time.Duration.Companion.minutes
3441

35-
private val connectingPlayers =
36-
Caffeine.newBuilder().expireAfterWrite(5.minutes).build<UUID, Long>()
37-
38-
fun navigatorView() = surfView("<shift:-48><glyph:server_selector>") {
39-
settings {
40-
rows(6)
41-
cancelAllInteractions()
42+
object NavigatorInventory : View() {
43+
override fun onInit(config: ViewConfigBuilder) {
44+
config.size(6).cancelInteractions().layout(
45+
"ASSSAEEEA",
46+
"ASSSAEEEA",
47+
"ASSSAEEEA",
48+
"AAAAAAAAA",
49+
"LLPPARRCC",
50+
"LLPPARRCC"
51+
).title(buildText {
52+
text("<shift:-48><glyph:server_selector>")
53+
})
4254
}
4355

44-
onFirstRender {
45-
slot(2, 2) {
46-
withItem(survivalServerItem)
47-
onClick { click ->
48-
val player = click.player
49-
player.teleportAsync(Locations.SURVIVAL_TELEPORT.getLocation()).thenRun {
50-
player.playSound(true) {
51-
type(Sound.ENTITY_ENDERMAN_TELEPORT)
52-
pitch(2.0f)
53-
}
56+
override fun onFirstRender(render: RenderContext) {
57+
render.layoutSlot('S').withItem(survivalServerItem).onClick { click ->
58+
val player = click.player
59+
player.teleportAsync(Locations.SURVIVAL_TELEPORT.getLocation()).thenRun {
60+
player.playSound(true) {
61+
type(Sound.ENTITY_ENDERMAN_TELEPORT)
62+
pitch(2.0f)
5463
}
55-
player.closeInventory()
5664
}
65+
player.closeInventory()
5766
}
5867

59-
slot(6, 2) {
60-
withItem(eventServerItem)
61-
onClick { click ->
62-
val player = click.player
63-
player.teleportAsync(Locations.EVENT_TELEPORT.getLocation()).thenRun {
64-
player.playSound(true) {
65-
type(Sound.ENTITY_ENDERMAN_TELEPORT)
66-
pitch(2.0f)
67-
}
68+
render.layoutSlot('E').withItem(eventServerItem).onClick { click ->
69+
val player = click.player
70+
player.teleportAsync(Locations.EVENT_TELEPORT.getLocation()).thenRun {
71+
player.playSound(true) {
72+
type(Sound.ENTITY_ENDERMAN_TELEPORT)
73+
pitch(2.0f)
6874
}
69-
player.closeInventory()
7075
}
76+
player.closeInventory()
7177
}
7278

73-
slot(1, 5) {
74-
withItem(lobbySelectorItem)
75-
onClick { click ->
76-
click.openForPlayer(lobbySelectorView())
77-
}
79+
render.layoutSlot('L').withItem(lobbySelectorItem).onClick { click ->
80+
click.openForPlayer(lobbySelectorView())
7881
}
7982

80-
slot(3, 5) {
81-
withItem(spawnItem)
82-
onClick { click ->
83-
val player = click.player
84-
player.closeInventory()
85-
player.teleportAsync(lobbyConfig.spawnPoint.toLocation()).thenRun {
86-
player.sendText {
87-
appendInfoPrefix()
88-
info("Du wurdest zum Spawn teleportiert.")
89-
}
83+
render.layoutSlot('P').withItem(spawnItem).onClick { click ->
84+
val player = click.player
85+
player.closeInventory()
86+
player.teleportAsync(lobbyConfig.spawnPoint.toLocation()).thenRun {
87+
player.sendText {
88+
appendInfoPrefix()
89+
info("Du wurdest zum Spawn teleportiert.")
9090
}
9191
}
9292
}
9393

94-
slot(6, 5) {
95-
withItem(rulesItem)
96-
onClick { click ->
97-
val player = click.player
98-
player.closeInventory()
99-
player.sendText {
100-
appendInfoPrefix()
101-
info("Das Regelwerk findest du hier: ")
102-
append {
103-
variableValue("server.castcrafter.de/rules")
104-
clickOpensUrl("https://server.castcrafter.de/rules")
105-
}
94+
render.layoutSlot('R').withItem(rulesItem).onClick { click ->
95+
val player = click.player
96+
player.closeInventory()
97+
player.sendText {
98+
appendInfoPrefix()
99+
info("Das Regelwerk findest du hier: ")
100+
append {
101+
variableValue("server.castcrafter.de/rules")
102+
clickOpensUrl("https://server.castcrafter.de/rules")
106103
}
107104
}
108105
}
109106

110-
slot(8, 5) {
111-
withItem(cosmeticsItem)
112-
}
107+
render.layoutSlot('C').withItem(cosmeticsItem)
113108
}
114109
}
115110

111+
private val connectingPlayers =
112+
Caffeine.newBuilder().expireAfterWrite(5.minutes).build<UUID, Long>()
113+
116114
fun lobbySelectorView() = paginatedSurfView("Lobby Auswahl") {
117115
pagination {
118116
lazySource {

src/main/kotlin/dev/slne/surf/lobby/inventory/item/impl/navigator/NavigatorItem.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import dev.slne.surf.api.core.messages.builder.SurfComponentBuilder
55
import dev.slne.surf.api.paper.builder.buildLore
66
import dev.slne.surf.api.paper.builder.displayName
77
import dev.slne.surf.api.paper.inventory.framework.open
8-
import dev.slne.surf.lobby.inventory.impl.navigatorView
8+
import dev.slne.surf.lobby.inventory.impl.NavigatorInventory
99
import dev.slne.surf.lobby.inventory.item.InventoryItem
1010
import net.kyori.adventure.text.format.TextColor
1111
import net.kyori.adventure.text.format.TextDecoration
@@ -42,7 +42,7 @@ object NavigatorItem : InventoryItem(4, ItemType.COMPASS.createItemStack().apply
4242
}) {
4343
override val permission = null
4444
override fun onInteract(player: Player) {
45-
navigatorView().open(player)
45+
NavigatorInventory.open(player)
4646
}
4747
}
4848

0 commit comments

Comments
 (0)