Skip to content

Commit b1ddec9

Browse files
authored
Merge pull request #6 from SLNE-Development/copilot/add-player-visibility-item
Add player visibility toggle with 3 states and StatableInventoryItem pattern
2 parents 84bdc17 + ace3213 commit b1ddec9

17 files changed

Lines changed: 406 additions & 21 deletions

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ repositories {
99
}
1010

1111
dependencies {
12-
compileOnly("surf-hologram:surf-hologram-api:1.21.10-1.0.1-20251011.094119-1")
12+
compileOnly("surf-hologram:surf-hologram-api:1.21.11-1.0.2-SNAPSHOT")
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")
1515
implementation("dev.slne.surf:surf-redis:1.0.0-SNAPSHOT")
1616
implementation("dev.slne.surf.event:surf-event-base-api-redis:1.21.11-1.0.0-SNAPSHOT")
17+
implementation("dev.slne.surf.tab:surf-tab-api:1.21.11-1.0.2-SNAPSHOT")
1718
}
1819

1920
version = findProperty("version") as String

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import dev.jorel.commandapi.kotlindsl.anyExecutor
44
import dev.jorel.commandapi.kotlindsl.commandTree
55
import dev.jorel.commandapi.kotlindsl.literalArgument
66
import dev.slne.surf.lobby.lobbyConfigHolder
7-
import dev.slne.surf.lobby.npc.SurfNpcHook
8-
import dev.slne.surf.lobby.surfNpcHook
97
import dev.slne.surf.lobby.utils.PermissionRegistry
108
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
119

@@ -17,10 +15,6 @@ fun lobbyCommand() = commandTree("surflobby") {
1715
anyExecutor { executor, _ ->
1816
lobbyConfigHolder.reload()
1917

20-
if (surfNpcHook) {
21-
SurfNpcHook.reload()
22-
}
23-
2418
executor.sendText {
2519
appendPrefix()
2620
success("Lobby configuration reloaded successfully.")

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ data class LobbyConfig(
88
val spawnPoint: LocationConfig = LocationConfig.default(),
99
val survivalNpc: LocationConfig = LocationConfig.default(),
1010
val eventNpc: LocationConfig = LocationConfig.default(),
11+
val survivalNpcTeleport: LocationConfig = LocationConfig.default(),
12+
val survivalInfoHologram: LocationConfig = LocationConfig.default()
1113
) {
1214
@ConfigSerializable
1315
data class LocationConfig(
Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,48 @@
11
package dev.slne.surf.lobby.hologram
22

3-
import dev.slne.surf.lobby.config.LobbyConfig
3+
import dev.slne.surf.hologram.api.dsl.hologram
4+
import dev.slne.surf.hologram.api.hologram.Hologram
5+
import dev.slne.surf.hologram.api.hologram.SimpleHologram
6+
import dev.slne.surf.hologram.api.hologram.type.SimpleHologramOptions
7+
import dev.slne.surf.hologram.api.hologram.util.HologramOrientationType
8+
import dev.slne.surf.hologram.api.surfHologramApi
9+
import dev.slne.surf.hologram.api.util.show
10+
import dev.slne.surf.lobby.lobbyConfig
11+
import dev.slne.surf.lobby.utils.note
12+
import dev.slne.surf.lobby.utils.toHologramLocation
13+
import dev.slne.surf.surfapi.core.api.font.toSmallCaps
14+
import dev.slne.surf.surfapi.core.api.messages.adventure.appendNewline
15+
import net.kyori.adventure.text.format.TextDecoration
416

517
object SurfHologramHook {
18+
lateinit var survivalInfoHologram: Hologram
619
fun initialize() {
20+
survivalInfoHologram = hologram<SimpleHologram, SimpleHologramOptions>(
21+
"survival-info",
22+
SimpleHologram::class.java,
23+
HologramOrientationType.FIXED,
24+
lobbyConfig.survivalInfoHologram.toLocation().toHologramLocation()
25+
) {
26+
displayedText {
27+
primary("Survival Server".toSmallCaps(), TextDecoration.BOLD)
28+
appendNewline(2)
29+
note("Erkunde die Welt, baue deine Träume und eröffne dein eigenes Business!".toSmallCaps())
30+
}
731

32+
options {
33+
34+
}
35+
}
36+
37+
survivalInfoHologram.show()
38+
}
39+
40+
fun shutdown() {
41+
surfHologramApi.deleteHologram(survivalInfoHologram)
42+
}
43+
44+
fun reload() {
45+
shutdown()
46+
initialize()
847
}
948
}

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@ package dev.slne.surf.lobby.inventory.impl
33
import com.github.stefvanschie.inventoryframework.pane.util.Slot
44
import dev.slne.surf.lobby.event.eventServerBridge
55
import dev.slne.surf.lobby.event.state.LocalEventServerState
6+
import dev.slne.surf.lobby.lobbyConfig
67
import dev.slne.surf.lobby.plugin
78
import dev.slne.surf.lobby.utils.PermissionRegistry
89
import dev.slne.surf.surfapi.bukkit.api.builder.displayName
910
import dev.slne.surf.surfapi.bukkit.api.event.cancel
1011
import dev.slne.surf.surfapi.bukkit.api.inventory.dsl.menu
1112
import dev.slne.surf.surfapi.bukkit.api.inventory.dsl.staticPane
1213
import dev.slne.surf.surfapi.bukkit.api.surfBukkitApi
14+
import dev.slne.surf.surfapi.core.api.messages.adventure.playSound
1315
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
1416
import dev.slne.surf.surfapi.core.api.messages.adventure.text
17+
import org.bukkit.Sound
1518
import org.bukkit.entity.Player
1619

1720
fun navigatorInventory() = menu(text("<shift:-46><glyph:server_selector>"), 6) {
@@ -56,13 +59,20 @@ fun navigatorInventory() = menu(text("<shift:-46><glyph:server_selector>"), 6) {
5659
fillWith(survivalServerItem)
5760

5861
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.")
62+
val player = it.whoClicked as? Player ?: return@setOnClick
63+
64+
// if(player.isPremium()) { TODO: Premium Rang
65+
// surfBukkitApi.sendPlayerToServer(player, "survival")
66+
// return@setOnClick
67+
// }
68+
69+
player.teleportAsync(lobbyConfig.survivalNpcTeleport.toLocation()).thenRun {
70+
player.playSound(true) {
71+
type(Sound.ENTITY_ENDERMAN_TELEPORT)
72+
pitch(2.0f)
73+
}
6474
}
65-
it.whoClicked.closeInventory()
75+
player.closeInventory()
6676
}
6777
}
6878

src/main/kotlin/dev/slne/surf/lobby/inventory/item/InventoryItem.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package dev.slne.surf.lobby.inventory.item
33
import dev.slne.surf.lobby.inventory.item.impl.NavigatorInventoryItem
44
import dev.slne.surf.lobby.inventory.item.impl.PushbackDisableInventoryItem
55
import dev.slne.surf.lobby.inventory.item.impl.PushbackEnableInventoryItem
6+
import dev.slne.surf.lobby.inventory.item.impl.ShowAllPlayersInventoryItem
7+
import dev.slne.surf.lobby.inventory.item.impl.ShowNonePlayersInventoryItem
8+
import dev.slne.surf.lobby.inventory.item.impl.ShowTeamPlayersInventoryItem
69
import org.bukkit.entity.Player
710
import org.bukkit.inventory.ItemStack
811

@@ -20,6 +23,9 @@ interface InventoryItem {
2023
items.add(PushbackDisableInventoryItem)
2124
items.add(PushbackEnableInventoryItem)
2225
items.add(NavigatorInventoryItem)
26+
items.add(ShowNonePlayersInventoryItem)
27+
items.add(ShowTeamPlayersInventoryItem)
28+
items.add(ShowAllPlayersInventoryItem)
2329
}
2430
}
2531
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import org.bukkit.entity.Player
1010
import org.bukkit.inventory.ItemType
1111

1212
object PushbackDisableInventoryItem : InventoryItem {
13-
override val slot = 3
13+
override val slot = 0
1414
override val item = ItemType.ENDER_EYE.createItemStack().apply {
1515
displayName {
1616
variableValue("Pushback")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import org.bukkit.entity.Player
1010
import org.bukkit.inventory.ItemType
1111

1212
object PushbackEnableInventoryItem : InventoryItem {
13-
override val slot = 3
13+
override val slot = 0
1414
override val permission: String = PermissionRegistry.PUSHBACK_ITEM
1515
override val item = ItemType.ENDER_EYE.createItemStack().apply {
1616
displayName {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package dev.slne.surf.lobby.inventory.item.impl
2+
3+
import dev.slne.surf.lobby.inventory.item.InventoryItem
4+
import dev.slne.surf.lobby.manager.PlayerVisibilityManager
5+
import dev.slne.surf.lobby.utils.PermissionRegistry
6+
import dev.slne.surf.surfapi.bukkit.api.builder.buildLore
7+
import dev.slne.surf.surfapi.bukkit.api.builder.displayName
8+
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
9+
import org.bukkit.entity.Player
10+
import org.bukkit.inventory.ItemType
11+
12+
object ShowAllPlayersInventoryItem : InventoryItem {
13+
override val slot = 2
14+
override val permission: String = PermissionRegistry.PLAYER_VISIBILITY_ITEM
15+
override val item = ItemType.LIME_DYE.createItemStack().apply {
16+
displayName {
17+
variableValue("Spieler-Sichtbarkeit")
18+
}
19+
20+
buildLore {
21+
emptyLine()
22+
line {
23+
info("Steuert welche Spieler du sehen kannst.")
24+
}
25+
emptyLine()
26+
line {
27+
success("Alle Spieler werden angezeigt")
28+
}
29+
}
30+
}
31+
32+
override fun onInteract(player: Player) {
33+
PlayerVisibilityManager.setState(
34+
player.uniqueId,
35+
PlayerVisibilityManager.VisibilityState.SHOW_TEAM
36+
)
37+
player.inventory.setItem(slot, ShowTeamPlayersInventoryItem.item)
38+
39+
player.sendText {
40+
appendPrefix()
41+
info("Du siehst jetzt nur noch ")
42+
success("Teammitglieder.")
43+
}
44+
}
45+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package dev.slne.surf.lobby.inventory.item.impl
2+
3+
import dev.slne.surf.lobby.inventory.item.InventoryItem
4+
import dev.slne.surf.lobby.manager.PlayerVisibilityManager
5+
import dev.slne.surf.lobby.utils.PermissionRegistry
6+
import dev.slne.surf.surfapi.bukkit.api.builder.buildLore
7+
import dev.slne.surf.surfapi.bukkit.api.builder.displayName
8+
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
9+
import org.bukkit.entity.Player
10+
import org.bukkit.inventory.ItemType
11+
12+
object ShowNonePlayersInventoryItem : InventoryItem {
13+
override val slot = 2
14+
override val permission: String = PermissionRegistry.PLAYER_VISIBILITY_ITEM
15+
override val item = ItemType.GRAY_DYE.createItemStack().apply {
16+
displayName {
17+
variableValue("Spieler-Sichtbarkeit")
18+
}
19+
20+
buildLore {
21+
emptyLine()
22+
line {
23+
info("Steuert welche Spieler du sehen kannst.")
24+
}
25+
emptyLine()
26+
line {
27+
error("Keine Spieler werden angezeigt")
28+
}
29+
}
30+
}
31+
32+
override fun onInteract(player: Player) {
33+
PlayerVisibilityManager.setState(
34+
player.uniqueId,
35+
PlayerVisibilityManager.VisibilityState.SHOW_ALL
36+
)
37+
player.inventory.setItem(slot, ShowAllPlayersInventoryItem.item)
38+
39+
player.sendText {
40+
appendPrefix()
41+
info("Du siehst jetzt ")
42+
success("alle Spieler.")
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)