Skip to content

Commit 6f9751c

Browse files
committed
feat: enhance DialogListTypeBuilder to support dynamic dialog addition and improve dialog management
1 parent 0b2bc4b commit 6f9751c

File tree

2 files changed

+52
-12
lines changed

2 files changed

+52
-12
lines changed

surf-api-bukkit/surf-api-bukkit-api/api/surf-api-bukkit-api.api

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,10 +1274,9 @@ public final class dev/slne/surf/surfapi/bukkit/api/dialog/builder/DialogTypeBui
12741274
public final fun confirmation (Lio/papermc/paper/registry/data/dialog/ActionButton;Lio/papermc/paper/registry/data/dialog/ActionButton;)V
12751275
public final fun confirmation (Lkotlin/jvm/functions/Function1;)V
12761276
public static synthetic fun confirmation$default (Ldev/slne/surf/surfapi/bukkit/api/dialog/builder/DialogTypeBuilder;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
1277-
public final fun dialogList (Lio/papermc/paper/registry/set/RegistrySet;Lkotlin/jvm/functions/Function1;)V
1277+
public final fun dialogList (Lkotlin/jvm/functions/Function1;)V
12781278
public final fun dialogList ([Lio/papermc/paper/dialog/Dialog;Lkotlin/jvm/functions/Function1;)V
12791279
public final fun dialogList ([Lio/papermc/paper/registry/TypedKey;Lkotlin/jvm/functions/Function1;)V
1280-
public static synthetic fun dialogList$default (Ldev/slne/surf/surfapi/bukkit/api/dialog/builder/DialogTypeBuilder;Lio/papermc/paper/registry/set/RegistrySet;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
12811280
public static synthetic fun dialogList$default (Ldev/slne/surf/surfapi/bukkit/api/dialog/builder/DialogTypeBuilder;[Lio/papermc/paper/dialog/Dialog;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
12821281
public static synthetic fun dialogList$default (Ldev/slne/surf/surfapi/bukkit/api/dialog/builder/DialogTypeBuilder;[Lio/papermc/paper/registry/TypedKey;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
12831282
public final fun multiAction (Ljava/util/List;Lkotlin/jvm/functions/Function1;)V
@@ -1304,9 +1303,14 @@ public final class dev/slne/surf/surfapi/bukkit/api/dialog/builder/DialogTypeBui
13041303
}
13051304

13061305
public final class dev/slne/surf/surfapi/bukkit/api/dialog/builder/DialogTypeBuilder$DialogListTypeBuilder {
1307-
public fun <init> (Lio/papermc/paper/registry/set/RegistrySet;)V
1306+
public fun <init> ()V
1307+
public final fun addAll (Ljava/lang/Iterable;)V
1308+
public final fun addAll ([Lio/papermc/paper/dialog/Dialog;)V
13081309
public final fun buttonWidth (I)V
13091310
public final fun columns (I)V
1311+
public final fun dialog (Lio/papermc/paper/dialog/Dialog;)V
1312+
public final fun dialog (Lio/papermc/paper/registry/TypedKey;)V
1313+
public final fun dialog ([Lio/papermc/paper/registry/TypedKey;)V
13101314
public final fun exitAction (Lio/papermc/paper/registry/data/dialog/ActionButton;)V
13111315
public final fun exitAction (Lkotlin/jvm/functions/Function1;)V
13121316
public final fun getButtonWidth ()Ljava/lang/Integer;

surf-api-bukkit/surf-api-bukkit-api/src/main/kotlin/dev/slne/surf/surfapi/bukkit/api/dialog/builder/DialogTypeBuilder.kt

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
package dev.slne.surf.surfapi.bukkit.api.dialog.builder
44

55
import dev.slne.surf.surfapi.core.api.util.mutableObjectListOf
6+
import dev.slne.surf.surfapi.core.api.util.mutableObjectSetOf
67
import io.papermc.paper.dialog.Dialog
8+
import io.papermc.paper.registry.RegistryAccess
79
import io.papermc.paper.registry.RegistryKey
810
import io.papermc.paper.registry.TypedKey
911
import io.papermc.paper.registry.data.dialog.ActionButton
@@ -27,16 +29,22 @@ class DialogTypeBuilder {
2729
type = DialogType.notice(ActionButton(block))
2830
}
2931

30-
fun dialogList(dialogs: RegistrySet<Dialog>, block: DialogListTypeBuilder.() -> Unit = {}) {
31-
type = DialogListTypeBuilder(dialogs).apply(block).build()
32+
fun dialogList(vararg keys: TypedKey<Dialog>, block: DialogListTypeBuilder.() -> Unit = {}) {
33+
dialogList {
34+
dialog(*keys)
35+
block()
36+
}
3237
}
3338

34-
fun dialogList(vararg key: TypedKey<Dialog>, block: DialogListTypeBuilder.() -> Unit = {}) {
35-
dialogList(RegistrySet.keySet(RegistryKey.DIALOG, *key), block)
39+
fun dialogList(vararg dialogs: Dialog, block: DialogListTypeBuilder.() -> Unit = {}) {
40+
dialogList {
41+
addAll(*dialogs)
42+
block()
43+
}
3644
}
3745

38-
fun dialogList(vararg dialogs: Dialog, block: DialogListTypeBuilder.() -> Unit = {}) {
39-
dialogList(RegistrySet.valueSet(RegistryKey.DIALOG, dialogs.toList()), block)
46+
fun dialogList(block: DialogListTypeBuilder.() -> Unit) {
47+
type = DialogListTypeBuilder().apply(block).build()
4048
}
4149

4250
fun confirmation(block: DialogConfirmationTypeBuilder.() -> Unit = {}) {
@@ -61,7 +69,10 @@ class DialogTypeBuilder {
6169
}.build()
6270
}
6371

64-
fun multiAction(vararg actions: ActionButton, block: DialogMultiActionTypeBuilder.() -> Unit = {}) {
72+
fun multiAction(
73+
vararg actions: ActionButton,
74+
block: DialogMultiActionTypeBuilder.() -> Unit = {},
75+
) {
6576
multiAction(actions.toList(), block)
6677
}
6778

@@ -75,10 +86,11 @@ class DialogTypeBuilder {
7586
return type
7687
}
7788

78-
class DialogListTypeBuilder(private val dialogs: RegistrySet<Dialog>) {
89+
class DialogListTypeBuilder {
7990
var exitAction: ActionButton? = null
8091
var columns: @Range(from = 1, to = Int.MAX_VALUE.toLong()) Int? = null
8192
var buttonWidth: @Range(from = 1, to = 1024) Int? = null
93+
private val dialogs = mutableObjectSetOf<Dialog>()
8294

8395
fun exitAction(exitAction: ActionButton) {
8496
this.exitAction = exitAction
@@ -96,8 +108,32 @@ class DialogTypeBuilder {
96108
this.buttonWidth = buttonWidth
97109
}
98110

111+
fun dialog(dialog: Dialog) {
112+
dialogs.add(dialog)
113+
}
114+
115+
fun addAll(vararg dialogs: Dialog) {
116+
this.dialogs.addAll(dialogs)
117+
}
118+
119+
fun addAll(dialogs: Iterable<Dialog>) {
120+
this.dialogs.addAll(dialogs)
121+
}
122+
123+
fun dialog(key: TypedKey<Dialog>) {
124+
dialogs.add(
125+
RegistryAccess.registryAccess().getRegistry(RegistryKey.DIALOG).getOrThrow(key)
126+
)
127+
}
128+
129+
fun dialog(vararg keys: TypedKey<Dialog>) {
130+
dialogs.addAll(
131+
keys.map { RegistryAccess.registryAccess().getRegistry(RegistryKey.DIALOG).getOrThrow(it) }
132+
)
133+
}
134+
99135
internal fun build(): DialogType {
100-
val builder = DialogType.dialogList(dialogs)
136+
val builder = DialogType.dialogList(RegistrySet.valueSet(RegistryKey.DIALOG, dialogs))
101137
with(builder) {
102138
exitAction?.let { exitAction(it) }
103139
columns?.let { columns(it) }

0 commit comments

Comments
 (0)