Skip to content

Commit b594f38

Browse files
committed
Initial solution for RegistryValueSet<Dialog> during bootstrap
1 parent 7a1d4d0 commit b594f38

File tree

10 files changed

+118
-35
lines changed

10 files changed

+118
-35
lines changed

paper-api/src/main/java/io/papermc/paper/registry/data/dialog/DialogRegistryEntry.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.papermc.paper.dialog.Dialog;
44
import io.papermc.paper.registry.RegistryBuilder;
55
import io.papermc.paper.registry.data.dialog.specialty.DialogSpecialty;
6+
import io.papermc.paper.registry.set.RegistryValueSetBuilder;
67
import org.jetbrains.annotations.ApiStatus;
78
import org.jetbrains.annotations.Contract;
89

@@ -12,8 +13,10 @@
1213
@ApiStatus.NonExtendable
1314
public interface DialogRegistryEntry {
1415

16+
@Contract(pure = true)
1517
DialogBase dialogBase();
1618

19+
@Contract(pure = true)
1720
DialogSpecialty dialogSpecialty();
1821

1922
/**
@@ -28,6 +31,15 @@ public interface DialogRegistryEntry {
2831
@ApiStatus.NonExtendable
2932
interface Builder extends DialogRegistryEntry, RegistryBuilder<Dialog> {
3033

34+
/**
35+
* Provides a builder for dialog {@link io.papermc.paper.registry.set.RegistryValueSet} which
36+
* can be used inside {@link io.papermc.paper.registry.data.dialog.specialty.DialogListSpecialty}.
37+
* <p>Not a part of the registry entry.</p>
38+
* @return a new registry value set builder
39+
*/
40+
@Contract(value = "-> new", pure = true)
41+
RegistryValueSetBuilder<Dialog, DialogRegistryEntry.Builder> registryValueSetBuilder();
42+
3143
/**
3244
* Sets the base dialog for this entry.
3345
*
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.papermc.paper.registry.set;
2+
3+
import io.papermc.paper.registry.RegistryBuilder;
4+
import io.papermc.paper.registry.RegistryBuilderFactory;
5+
import java.util.function.Consumer;
6+
import org.jetbrains.annotations.ApiStatus;
7+
8+
@ApiStatus.NonExtendable
9+
public interface RegistryValueSetBuilder<API, ENTRY_BUILDER extends RegistryBuilder<API>> {
10+
11+
/**
12+
*
13+
* @param builder
14+
* @return
15+
*/
16+
RegistryValueSetBuilder<API, ENTRY_BUILDER> add(Consumer<RegistryBuilderFactory<API, ? extends ENTRY_BUILDER>> builder);
17+
18+
RegistryValueSet<API> build();
19+
}

paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ private static <T> RegistryEntry<T> inconsistentEntry(ResourceKey<? extends Regi
184184
entry(Registries.CHICKEN_VARIANT, ChickenVariants.class, Chicken.Variant.class).writableApiRegistryBuilder(ChickenVariantRegistryEntry.Builder.class, "PaperChickenVariantRegistryEntry.PaperBuilder"),
185185
entry(Registries.COW_VARIANT, CowVariants.class, Cow.Variant.class).writableApiRegistryBuilder(CowVariantRegistryEntry.Builder.class, "PaperCowVariantRegistryEntry.PaperBuilder"),
186186
entry(Registries.PIG_VARIANT, PigVariants.class, Pig.Variant.class).writableApiRegistryBuilder(PigVariantRegistryEntry.Builder.class, "PaperPigVariantRegistryEntry.PaperBuilder"),
187-
entry(Registries.DIALOG, Dialogs.class, Dialog.class, "Paper").writableApiRegistryBuilder(DialogRegistryEntry.Builder.class, "PaperDialogRegistryEntry.PaperBuilder")
187+
entry(Registries.DIALOG, Dialogs.class, Dialog.class, "Paper").allowDirect().writableApiRegistryBuilder(DialogRegistryEntry.Builder.class, "PaperDialogRegistryEntry.PaperBuilder")
188188
);
189189

190190
public static final List<RegistryEntry<?>> API_ONLY = List.of(

paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public final class PaperRegistries {
134134
start(Registries.CHICKEN_VARIANT, RegistryKey.CHICKEN_VARIANT).craft(Chicken.Variant.class, CraftChicken.CraftVariant::new).writable(PaperChickenVariantRegistryEntry.PaperBuilder::new),
135135
start(Registries.COW_VARIANT, RegistryKey.COW_VARIANT).craft(Cow.Variant.class, CraftCow.CraftVariant::new).writable(PaperCowVariantRegistryEntry.PaperBuilder::new),
136136
start(Registries.PIG_VARIANT, RegistryKey.PIG_VARIANT).craft(Pig.Variant.class, CraftPig.CraftVariant::new).writable(PaperPigVariantRegistryEntry.PaperBuilder::new),
137-
start(Registries.DIALOG, RegistryKey.DIALOG).craft(Dialog.class, PaperDialog::new).writable(PaperDialogRegistryEntry.PaperBuilder::new),
137+
start(Registries.DIALOG, RegistryKey.DIALOG).craft(Dialog.class, PaperDialog::new, true).writable(PaperDialogRegistryEntry.PaperBuilder::new),
138138

139139
// api-only
140140
start(Registries.ENTITY_TYPE, RegistryKey.ENTITY_TYPE).apiOnly(PaperSimpleRegistry::entityType),
@@ -164,13 +164,13 @@ public final class PaperRegistries {
164164
}
165165

166166
@SuppressWarnings("unchecked")
167-
public static <M, T extends Keyed, B extends PaperRegistryBuilder<M, T>> RegistryEntryMeta.Buildable<M, T, B> getBuildableMeta(final ResourceKey<? extends Registry<M>> resourceKey) {
168-
final RegistryEntry<M, T> entry = getEntry(resourceKey);
167+
public static <M, T extends Keyed, B extends PaperRegistryBuilder<M, T>> RegistryEntryMeta.Buildable<M, T, B> getBuildableMeta(final RegistryKey<T> registryKey) {
168+
final RegistryEntry<M, T> entry = getEntry(registryKey);
169169
if (entry == null) {
170-
throw new IllegalArgumentException("No registry entry for " + resourceKey);
170+
throw new IllegalArgumentException("No registry entry for " + registryKey);
171171
}
172172
if (!(entry.meta() instanceof final RegistryEntryMeta.Buildable<M, T, ?> buildableMeta)) {
173-
throw new IllegalArgumentException("Registry entry for " + resourceKey + " is not buildable");
173+
throw new IllegalArgumentException("Registry entry for " + registryKey + " is not buildable");
174174
}
175175
return (RegistryEntryMeta.Buildable<M, T, B>) buildableMeta;
176176
}

paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import io.papermc.paper.dialog.Dialog;
44
import io.papermc.paper.registry.RegistryBuilderFactory;
5+
import io.papermc.paper.registry.RegistryKey;
56
import io.papermc.paper.registry.data.dialog.DialogRegistryEntry;
67
import io.papermc.paper.registry.data.util.Conversions;
78
import java.util.function.Consumer;
8-
import net.minecraft.core.registries.Registries;
99

1010
public final class InlinedRegistryBuilderProviderImpl implements InlinedRegistryBuilderProvider {
1111

1212
@Override
1313
public Dialog createDialog(final Consumer<RegistryBuilderFactory<Dialog, ? extends DialogRegistryEntry.Builder>> value) {
14-
return Conversions.global().createApiInstanceFromBuilder(Registries.DIALOG, value);
14+
return Conversions.global().createApiInstanceFromBuilder(RegistryKey.DIALOG, value);
1515
}
1616
}

paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
import io.papermc.paper.registry.PaperRegistries;
44
import io.papermc.paper.registry.PaperRegistryBuilder;
55
import io.papermc.paper.registry.RegistryBuilderFactory;
6+
import io.papermc.paper.registry.RegistryKey;
67
import io.papermc.paper.registry.TypedKey;
78
import io.papermc.paper.registry.data.util.Conversions;
89
import io.papermc.paper.registry.holder.PaperRegistryHolders;
910
import io.papermc.paper.registry.holder.RegistryHolder;
1011
import java.util.OptionalInt;
1112
import java.util.function.Consumer;
1213
import net.minecraft.core.Holder;
13-
import net.minecraft.core.registries.Registries;
1414
import net.minecraft.network.chat.Component;
1515
import net.minecraft.sounds.SoundEvent;
1616
import net.minecraft.world.item.JukeboxSong;
@@ -80,7 +80,7 @@ public JukeboxSongRegistryEntry.Builder soundEvent(final TypedKey<Sound> soundEv
8080

8181
@Override
8282
public JukeboxSongRegistryEntry.Builder soundEvent(final Consumer<RegistryBuilderFactory<Sound, ? extends SoundEventRegistryEntry.Builder>> soundEvent) {
83-
this.soundEvent = this.conversions.createHolderFromBuilder(Registries.SOUND_EVENT, asArgument(soundEvent, "soundEvent"));
83+
this.soundEvent = this.conversions.createHolderFromBuilder(RegistryKey.SOUND_EVENT, asArgument(soundEvent, "soundEvent"));
8484
return this;
8585
}
8686

paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogRegistryEntry.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package io.papermc.paper.registry.data.dialog;
22

33
import io.papermc.paper.registry.PaperRegistryBuilder;
4+
import io.papermc.paper.registry.RegistryKey;
45
import io.papermc.paper.registry.data.dialog.specialty.DialogSpecialty;
56
import io.papermc.paper.registry.data.util.Conversions;
7+
import io.papermc.paper.registry.set.RegistryValueSetBuilder;
8+
import io.papermc.paper.registry.set.RegistryValueSetBuilderImpl;
69
import net.minecraft.server.dialog.CommonDialogData;
710
import net.minecraft.server.dialog.Dialog;
811
import org.jspecify.annotations.Nullable;
@@ -46,6 +49,11 @@ public PaperBuilder(final Conversions conversions, final @Nullable Dialog intern
4649
super(conversions, internal);
4750
}
4851

52+
@Override
53+
public RegistryValueSetBuilder<io.papermc.paper.dialog.Dialog, Builder> registryValueSetBuilder() {
54+
return new RegistryValueSetBuilderImpl<>(RegistryKey.DIALOG, this.conversions);
55+
}
56+
4957
@Override
5058
public Builder dialogBase(final DialogBase dialogBase) {
5159
this.dialogBase = asArgument(dialogBase, "dialogBase");

paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.papermc.paper.registry.PaperRegistries;
99
import io.papermc.paper.registry.PaperRegistryBuilder;
1010
import io.papermc.paper.registry.PaperRegistryBuilderFactory;
11+
import io.papermc.paper.registry.RegistryKey;
1112
import io.papermc.paper.registry.data.client.ClientTextureAsset;
1213
import io.papermc.paper.registry.entry.RegistryEntryMeta;
1314
import java.util.function.Consumer;
@@ -85,32 +86,33 @@ public net.minecraft.core.ClientAsset asVanilla(final @Nullable ClientTextureAss
8586
);
8687
}
8788

88-
private static <M, A extends Keyed, B extends PaperRegistryBuilder<M, A>> RegistryEntryMeta.Buildable<M, A, B> getDirectHolderBuildableMeta(final ResourceKey<? extends Registry<M>> registryKey) {
89+
private static <M, A extends Keyed, B extends PaperRegistryBuilder<M, A>> RegistryEntryMeta.Buildable<M, A, B> getDirectHolderBuildableMeta(final RegistryKey<A> registryKey) {
8990
final RegistryEntryMeta.Buildable<M, A, B> buildableMeta = PaperRegistries.getBuildableMeta(registryKey);
9091
Preconditions.checkArgument(buildableMeta.registryTypeMapper().supportsDirectHolders(), "Registry type mapper must support direct holders");
9192
return buildableMeta;
9293
}
9394

94-
public <M, A extends Keyed, B extends PaperRegistryBuilder<M, A>> A createApiInstanceFromBuilder(final ResourceKey<? extends Registry<M>> registryKey, final Consumer<? super PaperRegistryBuilderFactory<M, A, B>> value) {
95+
public <M, A extends Keyed, B extends PaperRegistryBuilder<M, A>> A createApiInstanceFromBuilder(final RegistryKey<A> registryKey, final Consumer<? super PaperRegistryBuilderFactory<M, A, B>> value) {
9596
final RegistryEntryMeta.Buildable<M, A, B> meta = getDirectHolderBuildableMeta(registryKey);
9697
final PaperRegistryBuilderFactory<M, A, B> builderFactory = this.createRegistryBuilderFactory(registryKey, meta);
9798
value.accept(builderFactory);
9899
return meta.registryTypeMapper().createBukkit(Holder.direct(builderFactory.requireBuilder().build()));
99100
}
100101

101-
public <M, A extends Keyed, B extends PaperRegistryBuilder<M, A>> Holder<M> createHolderFromBuilder(final ResourceKey<? extends Registry<M>> registryKey, final Consumer<? super PaperRegistryBuilderFactory<M, A, B>> value) {
102+
public <M, A extends Keyed, B extends PaperRegistryBuilder<M, A>> Holder<M> createHolderFromBuilder(final RegistryKey<A> registryKey, final Consumer<? super PaperRegistryBuilderFactory<M, A, B>> value) {
102103
final RegistryEntryMeta.Buildable<M, A, B> meta = getDirectHolderBuildableMeta(registryKey);
103104
final PaperRegistryBuilderFactory<M, A, B> builderFactory = this.createRegistryBuilderFactory(registryKey, meta);
104105
value.accept(builderFactory);
105106
return Holder.direct(builderFactory.requireBuilder().build());
106107
}
107108

108109
private <M, A extends Keyed, B extends PaperRegistryBuilder<M, A>> PaperRegistryBuilderFactory<M, A, B> createRegistryBuilderFactory(
109-
final ResourceKey<? extends Registry<M>> registryKey,
110+
final RegistryKey<A> registryKey,
110111
final RegistryEntryMeta.Buildable<M, A, B> buildableMeta
111112
) {
112-
final HolderLookup.RegistryLookup<M> lookupForBuilders = this.lookup.lookupForValueCopyViaBuilders().lookupOrThrow(registryKey);
113-
return new PaperRegistryBuilderFactory<>(registryKey, this, buildableMeta.builderFiller(), lookupForBuilders::getValueForCopying);
113+
final ResourceKey<? extends Registry<M>> resourceRegistryKey = PaperRegistries.registryToNms(registryKey);
114+
final HolderLookup.RegistryLookup<M> lookupForBuilders = this.lookup.lookupForValueCopyViaBuilders().lookupOrThrow(resourceRegistryKey);
115+
return new PaperRegistryBuilderFactory<>(resourceRegistryKey, this, buildableMeta.builderFiller(), lookupForBuilders::getValueForCopying);
114116
}
115117

116118
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.papermc.paper.registry.set;
2+
3+
import io.papermc.paper.registry.RegistryBuilder;
4+
import io.papermc.paper.registry.RegistryBuilderFactory;
5+
import io.papermc.paper.registry.RegistryKey;
6+
import io.papermc.paper.registry.data.util.Conversions;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
import java.util.function.Consumer;
10+
import org.bukkit.Keyed;
11+
12+
public class RegistryValueSetBuilderImpl<M, API extends Keyed, BUILDER extends RegistryBuilder<API>> implements RegistryValueSetBuilder<API, BUILDER> { // TODO remove Keyed
13+
14+
private final RegistryKey<API> registryKey;
15+
private final Conversions conversions;
16+
private final List<API> instances = new ArrayList<>();
17+
18+
public RegistryValueSetBuilderImpl(final RegistryKey<API> registryKey, final Conversions conversions) {
19+
this.registryKey = registryKey;
20+
this.conversions = conversions;
21+
}
22+
23+
@Override
24+
public RegistryValueSetBuilder<API, BUILDER> add(final Consumer<RegistryBuilderFactory<API, ? extends BUILDER>> builder) {
25+
this.instances.add(this.conversions.createApiInstanceFromBuilder(this.registryKey, builder));
26+
return this;
27+
}
28+
29+
@Override
30+
public RegistryValueSet<API> build() {
31+
return RegistrySet.valueSet(this.registryKey, this.instances);
32+
}
33+
}

test-plugin/src/main/java/io/papermc/testplugin/TestPluginBootstrap.java

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
package io.papermc.testplugin;
22

3+
import io.papermc.paper.dialog.Dialog;
34
import io.papermc.paper.plugin.bootstrap.BootstrapContext;
45
import io.papermc.paper.plugin.bootstrap.PluginBootstrap;
56
import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager;
7+
import io.papermc.paper.registry.TypedKey;
68
import io.papermc.paper.registry.data.dialog.ActionButton;
79
import io.papermc.paper.registry.data.dialog.DialogBase;
10+
import io.papermc.paper.registry.data.dialog.DialogRegistryEntry;
811
import io.papermc.paper.registry.data.dialog.action.DialogAction;
912
import io.papermc.paper.registry.data.dialog.body.DialogBody;
1013
import io.papermc.paper.registry.data.dialog.input.DialogInput;
1114
import io.papermc.paper.registry.data.dialog.input.type.DialogInputType;
1215
import io.papermc.paper.registry.data.dialog.specialty.DialogSpecialty;
1316
import io.papermc.paper.registry.event.RegistryEvents;
1417
import io.papermc.paper.registry.keys.DialogKeys;
18+
import io.papermc.paper.registry.set.RegistryValueSetBuilder;
19+
import java.util.Collections;
1520
import java.util.List;
1621
import net.kyori.adventure.key.Key;
1722
import net.kyori.adventure.text.format.NamedTextColor;
@@ -28,28 +33,32 @@ public void bootstrap(@NotNull BootstrapContext context) {
2833
final LifecycleEventManager<BootstrapContext> manager = context.getLifecycleManager();
2934
manager.registerEventHandler(RegistryEvents.DIALOG.entryAdd().newHandler(event -> {
3035
final DialogBase oldBase = event.builder().dialogBase();
31-
event.builder().dialogBase(DialogBase.create(
32-
text("New Better Title", NamedTextColor.LIGHT_PURPLE),
33-
oldBase.externalTitle(),
34-
oldBase.canCloseWithEscape(),
35-
oldBase.pause(),
36-
oldBase.afterAction(),
37-
oldBase.body(),
38-
oldBase.inputs()
39-
));
36+
event.builder().dialogBase(DialogBase.create(text("New Better Title", NamedTextColor.LIGHT_PURPLE), oldBase.externalTitle(), oldBase.canCloseWithEscape(), oldBase.pause(), oldBase.afterAction(), oldBase.body(), oldBase.inputs()));
4037
}).filter(DialogKeys.SERVER_LINKS));
4138

39+
final TypedKey<Dialog> listDialog = DialogKeys.create(Key.key("mm:list"));
4240
manager.registerEventHandler(RegistryEvents.DIALOG.compose(), event -> {
43-
event.registry().register(DialogKeys.create(Key.key("mm:test")), builder -> {
44-
final List<DialogBody> body = List.of(DialogBody.plainMessage(text("Select relative coordinates", NamedTextColor.GREEN), 100));
45-
final List<DialogInput> inputs = List.of(DialogInput.create("x", DialogInputType.numberRange(100, text("X Coordinate", NamedTextColor.YELLOW), "options.generic_value", -1000f, 1000f, 0f, 1f)),
46-
DialogInput.create("y", DialogInputType.numberRange(100, text("Y Coordinate", NamedTextColor.YELLOW), "%s: ~%s", -1000f, 1000f, 0f, 1f)),
47-
DialogInput.create("z", DialogInputType.numberRange(100, text("Z Coordinate", NamedTextColor.YELLOW), "%s: ~%s", -1000f, 1000f, 0f, 1f))
48-
);
49-
builder.dialogBase(DialogBase.create(text("Teleport somewhere COOL", NamedTextColor.YELLOW), null, true, false, DialogBase.DialogAfterAction.CLOSE, body, inputs));
50-
final ActionButton cancel = ActionButton.create(text("Cancel", NamedTextColor.RED), null, 50, null);
51-
final ActionButton teleport = ActionButton.create(text("Teleport", NamedTextColor.GREEN), null, 50, DialogAction.commandTemplate("tp ~$(x) ~$(y) ~$(z)"));
52-
builder.dialogSpecialty(DialogSpecialty.confirmation(teleport, cancel));
41+
event.registry().register(listDialog, listBuilder -> {
42+
final RegistryValueSetBuilder<Dialog, DialogRegistryEntry.Builder> valueSetBuilder = listBuilder.registryValueSetBuilder();
43+
valueSetBuilder.add(b -> {
44+
final DialogRegistryEntry.Builder builder = b.empty();
45+
final List<DialogBody> body = List.of(DialogBody.plainMessage(text("Select relative coordinates", NamedTextColor.GREEN), 100));
46+
final List<DialogInput> inputs = List.of(DialogInput.create("x", DialogInputType.numberRange(100, text("X Coordinate", NamedTextColor.YELLOW), "options.generic_value", -1000f, 1000f, 0f, 1f)), DialogInput.create("y", DialogInputType.numberRange(100, text("Y Coordinate", NamedTextColor.YELLOW), "%s: ~%s", -1000f, 1000f, 0f, 1f)), DialogInput.create("z", DialogInputType.numberRange(100, text("Z Coordinate", NamedTextColor.YELLOW), "%s: ~%s", -1000f, 1000f, 0f, 1f)));
47+
builder.dialogBase(DialogBase.create(text("Teleport somewhere COOL", NamedTextColor.YELLOW), null, true, false, DialogBase.DialogAfterAction.CLOSE, body, inputs));
48+
final ActionButton cancel = ActionButton.create(text("Cancel", NamedTextColor.RED), null, 50, null);
49+
final ActionButton teleport = ActionButton.create(text("Teleport", NamedTextColor.GREEN), null, 50, DialogAction.commandTemplate("tp ~$(x) ~$(y) ~$(z)"));
50+
builder.dialogSpecialty(DialogSpecialty.confirmation(teleport, cancel));
51+
}).add(b -> {
52+
final DialogRegistryEntry.Builder builder = b.empty();
53+
final List<DialogBody> body = List.of(DialogBody.plainMessage(text("Enter a message to say", NamedTextColor.GREEN), 100));
54+
final List<DialogInput> inputs = List.of(DialogInput.create("msg", DialogInputType.text(100, text("Message"), true, "", 1000, null)));
55+
builder.dialogBase(DialogBase.create(text("Send a message"), null, true, false, DialogBase.DialogAfterAction.CLOSE, body, inputs));
56+
final ActionButton cancel = ActionButton.create(text("Cancel", NamedTextColor.RED), null, 50, null);
57+
final ActionButton say = ActionButton.create(text("Say the thing!", NamedTextColor.GREEN), null, 50, DialogAction.commandTemplate("say $(msg)")); // can't actually run this command cause signed args
58+
builder.dialogSpecialty(DialogSpecialty.confirmation(say, cancel));
59+
});
60+
listBuilder.dialogBase(DialogBase.create(text("Select an epic dialog", NamedTextColor.RED), null, true, false, DialogBase.DialogAfterAction.CLOSE, Collections.emptyList(), Collections.emptyList()));
61+
listBuilder.dialogSpecialty(DialogSpecialty.dialogList(valueSetBuilder.build(), null, 1, 200));
5362
});
5463
});
5564
}

0 commit comments

Comments
 (0)