Skip to content

Commit 2a090d0

Browse files
committed
feat: add dialog test commands for pagination and search functionality
1 parent 16e81ba commit 2a090d0

5 files changed

Lines changed: 185 additions & 6 deletions

File tree

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
@file:Suppress("UnstableApiUsage")
2+
@file:OptIn(NmsUseWithCaution::class)
3+
4+
package dev.slne.surf.surfapi.bukkit.api.dialog.search
5+
6+
import dev.slne.surf.surfapi.bukkit.api.dialog.base
7+
import dev.slne.surf.surfapi.bukkit.api.dialog.builder.DialogBodyBuilder
8+
import dev.slne.surf.surfapi.bukkit.api.dialog.builder.DialogInputBuilder
9+
import dev.slne.surf.surfapi.bukkit.api.dialog.clearDialogs
10+
import dev.slne.surf.surfapi.bukkit.api.dialog.dialog
11+
import dev.slne.surf.surfapi.bukkit.api.dialog.type
12+
import dev.slne.surf.surfapi.bukkit.api.nms.NmsUseWithCaution
13+
import dev.slne.surf.surfapi.core.api.messages.builder.SurfComponentBuilder
14+
import io.papermc.paper.dialog.Dialog
15+
import io.papermc.paper.registry.data.dialog.DialogBase
16+
import org.bukkit.entity.Player
17+
18+
data class SearchDialogAction(
19+
var label: SurfComponentBuilder.() -> Unit,
20+
var tooltip: SurfComponentBuilder.() -> Unit
21+
)
22+
23+
data class SearchInput(
24+
var key: String = "search",
25+
var label: SurfComponentBuilder.() -> Unit = {
26+
text("Suche")
27+
},
28+
var initialValue: String = "",
29+
var inputModifier: DialogInputBuilder.TextDialogInput.() -> Unit = {}
30+
)
31+
32+
fun searchDialog(
33+
title: SurfComponentBuilder.() -> Unit,
34+
externalTitle: SurfComponentBuilder.() -> Unit = title,
35+
onSearch: (player: Player, query: String) -> Unit,
36+
onClose: (player: Player, query: String) -> Unit,
37+
body: DialogBodyBuilder.() -> Unit = { },
38+
searchButton: SearchDialogAction.() -> Unit = {
39+
label = {
40+
text("Suchen")
41+
}
42+
tooltip = {
43+
text("Klicke hier, um die Suche zu starten.")
44+
}
45+
},
46+
cancelButton: SearchDialogAction.() -> Unit = {
47+
label = {
48+
text("Abbrechen")
49+
}
50+
tooltip = {
51+
text("Klicke hier, um die Suche abzubrechen.")
52+
}
53+
},
54+
searchInput: SearchInput.() -> Unit,
55+
canCloseWithEscape: Boolean = false,
56+
afterAction: DialogBase.DialogAfterAction = DialogBase.DialogAfterAction.NONE
57+
): Dialog = dialog {
58+
val searchInput = SearchInput().apply(searchInput)
59+
60+
val searchButton = SearchDialogAction(
61+
label = { },
62+
tooltip = { }
63+
).apply(searchButton)
64+
65+
val cancelButton = SearchDialogAction(
66+
label = { },
67+
tooltip = { }
68+
).apply(cancelButton)
69+
70+
base {
71+
title(title)
72+
externalTitle(externalTitle)
73+
this.canCloseWithEscape = canCloseWithEscape
74+
this.afterAction = afterAction
75+
76+
body {
77+
body()
78+
79+
input {
80+
text(searchInput.key) {
81+
label(searchInput.label)
82+
initial(searchInput.initialValue)
83+
84+
searchInput.inputModifier(this)
85+
}
86+
}
87+
}
88+
89+
type {
90+
confirmation {
91+
yes {
92+
label(searchButton.label)
93+
tooltip(searchButton.tooltip)
94+
95+
action {
96+
customPlayerClick { response, player ->
97+
player.clearDialogs(false)
98+
99+
val query = response.getText(searchInput.key) ?: ""
100+
onSearch(player, query)
101+
}
102+
}
103+
}
104+
105+
no {
106+
label(cancelButton.label)
107+
tooltip(cancelButton.tooltip)
108+
109+
action {
110+
customPlayerClick { response, player ->
111+
player.clearDialogs(false)
112+
113+
val query = response.getText(searchInput.key) ?: ""
114+
onClose(player, query)
115+
}
116+
}
117+
}
118+
}
119+
}
120+
}
121+
}

surf-api-bukkit/surf-api-bukkit-plugin-test/src/main/kotlin/dev/slne/surf/surfapi/bukkit/test/BukkitPluginMain.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import dev.slne.surf.surfapi.bukkit.api.inventory.framework.register
66
import dev.slne.surf.surfapi.bukkit.api.nms.NmsUseWithCaution
77
import dev.slne.surf.surfapi.bukkit.api.packet.listener.packetListenerApi
88
import dev.slne.surf.surfapi.bukkit.test.command.SurfApiTestCommand
9+
import dev.slne.surf.surfapi.bukkit.test.command.dialog.dialogTestCommand
910
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.inventory.TestInventoryView
10-
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.paginationDialogTestCommand
1111
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.reflection.Reflection
1212
import dev.slne.surf.surfapi.bukkit.test.config.ModernTestConfig
1313
import dev.slne.surf.surfapi.bukkit.test.listener.ChatListener
@@ -26,7 +26,7 @@ class BukkitPluginMain : SuspendingJavaPlugin() {
2626

2727
override suspend fun onEnableAsync() {
2828
SurfApiTestCommand().register()
29-
paginationDialogTestCommand()
29+
dialogTestCommand()
3030
Reflection::class.java.getClassLoader() // initialize Reflection
3131

3232
surfComponentApi.enable(this)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package dev.slne.surf.surfapi.bukkit.test.command.dialog
2+
3+
import dev.jorel.commandapi.kotlindsl.commandAPICommand
4+
import dev.slne.surf.surfapi.bukkit.test.command.dialog.subcommands.paginationDialogTestCommand
5+
import dev.slne.surf.surfapi.bukkit.test.command.dialog.subcommands.searchDialogTestCommand
6+
7+
fun dialogTestCommand() = commandAPICommand("dialogtest") {
8+
paginationDialogTestCommand()
9+
searchDialogTestCommand()
10+
}

surf-api-bukkit/surf-api-bukkit-plugin-test/src/main/kotlin/dev/slne/surf/surfapi/bukkit/test/command/subcommands/PaginatedDialogTest.kt renamed to surf-api-bukkit/surf-api-bukkit-plugin-test/src/main/kotlin/dev/slne/surf/surfapi/bukkit/test/command/dialog/subcommands/PaginatedDialogTest.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
@file:OptIn(NmsUseWithCaution::class)
22

3-
package dev.slne.surf.surfapi.bukkit.test.command.subcommands
3+
package dev.slne.surf.surfapi.bukkit.test.command.dialog.subcommands
44

55
import com.github.shynixn.mccoroutine.folia.launch
66
import com.github.shynixn.mccoroutine.folia.scope
7-
import dev.jorel.commandapi.kotlindsl.commandAPICommand
7+
import dev.jorel.commandapi.CommandAPICommand
88
import dev.jorel.commandapi.kotlindsl.playerExecutor
9+
import dev.jorel.commandapi.kotlindsl.subcommand
910
import dev.slne.surf.surfapi.bukkit.api.dialog.base
1011
import dev.slne.surf.surfapi.bukkit.api.dialog.builder.actionButton
1112
import dev.slne.surf.surfapi.bukkit.api.dialog.clearDialogs
@@ -113,8 +114,8 @@ object PaginatedDialogTest {
113114
}
114115
}
115116

116-
fun paginationDialogTestCommand() = commandAPICommand("paginationdialog") {
117-
playerExecutor { player, arguments ->
117+
fun CommandAPICommand.paginationDialogTestCommand() = subcommand("paginated") {
118+
playerExecutor { player, _ ->
118119
plugin.launch {
119120
paginatedDialog(
120121
player = player,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package dev.slne.surf.surfapi.bukkit.test.command.dialog.subcommands
2+
3+
import dev.jorel.commandapi.CommandAPICommand
4+
import dev.jorel.commandapi.kotlindsl.getValue
5+
import dev.jorel.commandapi.kotlindsl.greedyStringArgument
6+
import dev.jorel.commandapi.kotlindsl.playerExecutor
7+
import dev.jorel.commandapi.kotlindsl.subcommand
8+
import dev.slne.surf.surfapi.bukkit.api.dialog.search.searchDialog
9+
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
10+
11+
fun CommandAPICommand.searchDialogTestCommand() = subcommand("search") {
12+
greedyStringArgument("initial")
13+
14+
playerExecutor { player, args ->
15+
val initial: String by args
16+
17+
player.showDialog(
18+
searchDialog(
19+
title = {
20+
text("Suche")
21+
},
22+
searchInput = {
23+
initialValue = initial
24+
},
25+
body = {
26+
plainMessage {
27+
info("Gib einen Suchbegriff ein und klicke auf den Suchen-Button, um die Suche zu starten.")
28+
}
29+
},
30+
onSearch = { p, query ->
31+
p.sendText {
32+
info("Du hast nach ")
33+
variableValue(query)
34+
info(" gesucht.")
35+
}
36+
},
37+
onClose = { p, query ->
38+
p.sendText {
39+
info("Du hast die Suche mit dem Suchbegriff ")
40+
variableValue(query)
41+
info(" geschlossen.")
42+
}
43+
}
44+
)
45+
)
46+
}
47+
}

0 commit comments

Comments
 (0)