Skip to content

Commit 7b63c4c

Browse files
committed
support Json and MiniMessage in some components
1 parent f945225 commit 7b63c4c

20 files changed

Lines changed: 580 additions & 192 deletions

pom.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</parent>
1212

1313
<artifactId>BetterDialogs</artifactId>
14-
<version>1.1</version>
14+
<version>1.2-SNAPSHOT</version>
1515
<packaging>jar</packaging>
1616

1717
<name>BetterDialogs</name>
@@ -30,6 +30,10 @@
3030
<id>codemc-public</id>
3131
<url>https://repo.codemc.io/repository/maven-public/</url>
3232
</repository>
33+
<repository>
34+
<id>papermc</id>
35+
<url>https://repo.papermc.io/repository/maven-public/</url>
36+
</repository>
3337
</repositories>
3438

3539
<build>
@@ -108,6 +112,12 @@
108112
</build>
109113

110114
<dependencies>
115+
<dependency>
116+
<groupId>io.papermc.paper</groupId>
117+
<artifactId>paper-api</artifactId>
118+
<version>1.21.6-R0.1-SNAPSHOT</version>
119+
<scope>provided</scope>
120+
</dependency>
111121
<dependency>
112122
<groupId>io.github.projectunified</groupId>
113123
<artifactId>uni-dialog-packetevents</artifactId>

src/main/java/me/hsgamer/bettergui/betterdialogs/BetterDialogs.java

Lines changed: 12 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@
1515
*/
1616
package me.hsgamer.bettergui.betterdialogs;
1717

18-
import io.github.projectunified.minelib.scheduler.common.util.Platform;
19-
import io.github.projectunified.unidialog.core.DialogManager;
20-
import io.github.projectunified.unidialog.packetevents.PocketEventsDialogManager;
21-
import io.github.projectunified.unidialog.paper.PaperDialogManager;
22-
import io.github.projectunified.unidialog.spigot.SpigotDialogManager;
2318
import me.hsgamer.bettergui.api.addon.GetLogger;
2419
import me.hsgamer.bettergui.api.addon.GetPlugin;
2520
import me.hsgamer.bettergui.api.addon.Reloadable;
@@ -31,8 +26,6 @@
3126
import me.hsgamer.bettergui.builder.MenuBuilder;
3227
import me.hsgamer.bettergui.util.SchedulerUtil;
3328
import me.hsgamer.hscore.bukkit.config.BukkitConfig;
34-
import me.hsgamer.hscore.bukkit.utils.VersionUtils;
35-
import me.hsgamer.hscore.common.Validate;
3629
import me.hsgamer.hscore.config.proxy.ConfigGenerator;
3730
import me.hsgamer.hscore.expansion.common.Expansion;
3831
import me.hsgamer.hscore.expansion.extra.expansion.DataFolder;
@@ -41,69 +34,39 @@
4134
import me.hsgamer.hscore.license.polymart.PolymartLicenseChecker;
4235
import me.hsgamer.hscore.license.spigotmc.SpigotLicenseChecker;
4336
import me.hsgamer.hscore.logger.common.LogLevel;
44-
import me.hsgamer.hscore.logger.common.Logger;
45-
import org.bukkit.Bukkit;
46-
import org.bukkit.entity.Player;
47-
import org.bukkit.plugin.Plugin;
48-
import org.jetbrains.annotations.Nullable;
4937

5038
import java.io.File;
51-
import java.util.UUID;
52-
import java.util.function.BooleanSupplier;
53-
import java.util.function.Function;
5439

5540
public final class BetterDialogs implements Expansion, GetLogger, GetPlugin, Reloadable, DataFolder {
5641
private final MainConfig mainConfig = ConfigGenerator.newInstance(MainConfig.class, new BukkitConfig(new File(getDataFolder(), "config.yml")));
57-
private DialogManager<?, ?, ?, ?, ?> dialogManager;
5842

5943
@Override
6044
public boolean onLoad() {
61-
String dialogManagerName = mainConfig.dialogManager().toLowerCase();
62-
Logger logger = getLogger();
63-
if (dialogManagerName.equals("auto")) {
64-
for (DialogManagerType type : DialogManagerType.values()) {
65-
if (type.isAvailable()) {
66-
dialogManager = type.create(getPlugin());
67-
logger.log(LogLevel.INFO, "Using " + type.name() + " for BetterDialogs");
68-
return true;
69-
}
70-
}
71-
logger.log(LogLevel.WARN, "No available dialog manager found.");
72-
} else {
73-
try {
74-
DialogManagerType type = DialogManagerType.valueOf(dialogManagerName.toUpperCase());
75-
if (type.isAvailable()) {
76-
dialogManager = type.create(getPlugin());
77-
logger.log(LogLevel.INFO, "Using " + type.name() + " for BetterDialogs");
78-
return true;
79-
} else {
80-
logger.log(LogLevel.WARN, "The specified dialog manager '" + dialogManagerName + "' is not available.");
81-
}
82-
} catch (IllegalArgumentException e) {
83-
logger.log(LogLevel.WARN, "Invalid dialog manager specified: " + dialogManagerName);
84-
}
85-
}
86-
return false;
45+
return DialogManagerProvider.init(
46+
mainConfig.dialogManager().toLowerCase(),
47+
getPlugin(),
48+
getLogger()
49+
);
8750
}
8851

8952
@Override
9053
public void onEnable() {
9154
checkLicense();
92-
dialogManager.register();
93-
MenuBuilder.INSTANCE.register(config -> new ConfirmationDialogMenu(this, config), "confirmation-dialog", "confirm-dialog");
94-
MenuBuilder.INSTANCE.register(config -> new MultiActionDialogMenu(this, config), "multi-action-dialog", "action-dialog");
95-
MenuBuilder.INSTANCE.register(config -> new NoticeDialogMenu(this, config), "notice-dialog");
96-
MenuBuilder.INSTANCE.register(config -> new ServerLinksDialogMenu(this, config), "server-links-dialog", "links-dialog", "server-link-dialog", "link-dialog");
55+
DialogManagerProvider.dialogManager().register();
56+
MenuBuilder.INSTANCE.register(ConfirmationDialogMenu::new, "confirmation-dialog", "confirm-dialog");
57+
MenuBuilder.INSTANCE.register(MultiActionDialogMenu::new, "multi-action-dialog", "action-dialog");
58+
MenuBuilder.INSTANCE.register(NoticeDialogMenu::new, "notice-dialog");
59+
MenuBuilder.INSTANCE.register(ServerLinksDialogMenu::new, "server-links-dialog", "links-dialog", "server-link-dialog", "link-dialog");
9760
}
9861

9962
@Override
10063
public void onReload() {
101-
dialogManager.unregisterAllCustomActions();
64+
DialogManagerProvider.dialogManager().unregisterAllCustomActions();
10265
}
10366

10467
@Override
10568
public void onDisable() {
106-
dialogManager.unregister();
69+
DialogManagerProvider.dialogManager().unregister();
10770
}
10871

10972
private void checkLicense() {
@@ -136,50 +99,4 @@ private void checkLicense() {
13699
}
137100
});
138101
}
139-
140-
public DialogManager<?, ?, ?, ?, ?> dialogManager() {
141-
return dialogManager;
142-
}
143-
144-
private enum DialogManagerType {
145-
PAPER(
146-
() -> Platform.PAPER.isPlatform() && VersionUtils.isAtLeast(21, 7),
147-
plugin -> new PaperDialogManager(plugin, "betterdialogs")
148-
),
149-
PACKETEVENTS(
150-
() -> Bukkit.getPluginManager().getPlugin("packetevents") != null,
151-
plugin -> new PocketEventsDialogManager("betterdialogs") {
152-
@Override
153-
protected @Nullable Player getPlayer(UUID uuid) {
154-
return Bukkit.getPlayer(uuid);
155-
}
156-
157-
@Override
158-
protected UUID getPlayerId(Object player) {
159-
Player p = (Player) player;
160-
return p.getUniqueId();
161-
}
162-
}
163-
),
164-
SPIGOT(
165-
() -> Validate.isClassLoaded("net.md_5.bungee.api.dialog.Dialog"),
166-
plugin -> new SpigotDialogManager(plugin, "betterdialogs")
167-
);
168-
169-
private final BooleanSupplier isAvailable;
170-
private final Function<Plugin, DialogManager<?, ?, ?, ?, ?>> constructor;
171-
172-
DialogManagerType(BooleanSupplier isAvailable, Function<Plugin, DialogManager<?, ?, ?, ?, ?>> constructor) {
173-
this.isAvailable = isAvailable;
174-
this.constructor = constructor;
175-
}
176-
177-
public boolean isAvailable() {
178-
return isAvailable.getAsBoolean();
179-
}
180-
181-
public DialogManager<?, ?, ?, ?, ?> create(Plugin plugin) {
182-
return constructor.apply(plugin);
183-
}
184-
}
185102
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/*
2+
Copyright 2025-2025 Huynh Tien
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
package me.hsgamer.bettergui.betterdialogs;
17+
18+
import io.github.projectunified.minelib.scheduler.common.util.Platform;
19+
import io.github.projectunified.unidialog.core.DialogManager;
20+
import io.github.projectunified.unidialog.packetevents.PocketEventsDialogManager;
21+
import io.github.projectunified.unidialog.paper.PaperDialogManager;
22+
import io.github.projectunified.unidialog.spigot.SpigotDialogManager;
23+
import me.hsgamer.bettergui.betterdialogs.text.PacketEventsTextGetter;
24+
import me.hsgamer.bettergui.betterdialogs.text.PaperTextGetter;
25+
import me.hsgamer.bettergui.betterdialogs.text.SpigotTextGetter;
26+
import me.hsgamer.bettergui.betterdialogs.text.TextGetter;
27+
import me.hsgamer.hscore.bukkit.utils.VersionUtils;
28+
import me.hsgamer.hscore.common.Validate;
29+
import me.hsgamer.hscore.logger.common.LogLevel;
30+
import me.hsgamer.hscore.logger.common.Logger;
31+
import org.bukkit.Bukkit;
32+
import org.bukkit.entity.Player;
33+
import org.bukkit.plugin.Plugin;
34+
import org.jetbrains.annotations.Nullable;
35+
36+
import java.util.UUID;
37+
import java.util.function.BooleanSupplier;
38+
import java.util.function.Function;
39+
import java.util.function.Supplier;
40+
41+
public class DialogManagerProvider {
42+
private static DialogManager<?, ?, ?, ?, ?> dialogManager;
43+
private static TextGetter textGetter;
44+
45+
public static boolean init(String name, Plugin plugin, Logger logger) {
46+
DialogManagerType dialogManagerType = null;
47+
if (name.equals("auto")) {
48+
for (DialogManagerType type : DialogManagerType.values()) {
49+
if (type.isAvailable()) {
50+
dialogManagerType = type;
51+
logger.log(LogLevel.INFO, "Using " + type.name() + " for BetterDialogs");
52+
}
53+
}
54+
} else {
55+
try {
56+
DialogManagerType type = DialogManagerType.valueOf(name.toUpperCase());
57+
if (type.isAvailable()) {
58+
dialogManagerType = type;
59+
logger.log(LogLevel.INFO, "Using " + type.name() + " for BetterDialogs");
60+
} else {
61+
logger.log(LogLevel.WARN, "The specified dialog manager '" + name + "' is not available.");
62+
}
63+
} catch (IllegalArgumentException e) {
64+
logger.log(LogLevel.WARN, "Invalid dialog manager specified: " + name);
65+
}
66+
}
67+
if (dialogManagerType == null) {
68+
logger.log(LogLevel.ERROR, "No suitable dialog manager found. BetterDialogs will not be enabled.");
69+
return false;
70+
}
71+
72+
dialogManager = dialogManagerType.constructor.apply(plugin);
73+
textGetter = dialogManagerType.textGetterSupplier.get();
74+
return true;
75+
}
76+
77+
public static DialogManager<?, ?, ?, ?, ?> dialogManager() {
78+
return dialogManager;
79+
}
80+
81+
public static TextGetter textGetter() {
82+
return textGetter;
83+
}
84+
85+
private enum DialogManagerType {
86+
PAPER(
87+
() -> Platform.PAPER.isPlatform() && VersionUtils.isAtLeast(21, 7),
88+
plugin -> new PaperDialogManager(plugin, "betterdialogs"),
89+
PaperTextGetter::new
90+
),
91+
PACKETEVENTS(
92+
() -> Bukkit.getPluginManager().getPlugin("packetevents") != null,
93+
plugin -> new PocketEventsDialogManager("betterdialogs") {
94+
@Override
95+
protected @Nullable Player getPlayer(UUID uuid) {
96+
return Bukkit.getPlayer(uuid);
97+
}
98+
99+
@Override
100+
protected UUID getPlayerId(Object player) {
101+
Player p = (Player) player;
102+
return p.getUniqueId();
103+
}
104+
},
105+
PacketEventsTextGetter::new
106+
),
107+
SPIGOT(
108+
() -> Validate.isClassLoaded("net.md_5.bungee.api.dialog.Dialog"),
109+
plugin -> new SpigotDialogManager(plugin, "betterdialogs"),
110+
SpigotTextGetter::new
111+
);
112+
113+
private final BooleanSupplier isAvailable;
114+
private final Function<Plugin, DialogManager<?, ?, ?, ?, ?>> constructor;
115+
private final Supplier<TextGetter> textGetterSupplier;
116+
117+
DialogManagerType(BooleanSupplier isAvailable, Function<Plugin, DialogManager<?, ?, ?, ?, ?>> constructor, Supplier<TextGetter> textGetterSupplier) {
118+
this.isAvailable = isAvailable;
119+
this.constructor = constructor;
120+
this.textGetterSupplier = textGetterSupplier;
121+
}
122+
123+
public boolean isAvailable() {
124+
return isAvailable.getAsBoolean();
125+
}
126+
}
127+
}

src/main/java/me/hsgamer/bettergui/betterdialogs/component/action/ActionComponent.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,33 @@
1515
*/
1616
package me.hsgamer.bettergui.betterdialogs.component.action;
1717

18+
import io.github.projectunified.unidialog.adventure.action.AdventureDialogActionBuilder;
1819
import io.github.projectunified.unidialog.core.action.DialogActionBuilder;
1920
import io.github.projectunified.unidialog.core.dialog.*;
21+
import me.hsgamer.bettergui.betterdialogs.DialogManagerProvider;
2022
import me.hsgamer.bettergui.betterdialogs.builder.DialogComponentBuilder;
2123
import me.hsgamer.bettergui.betterdialogs.component.DialogComponent;
24+
import me.hsgamer.bettergui.betterdialogs.text.Text;
2225
import me.hsgamer.bettergui.util.StringReplacerApplier;
2326
import me.hsgamer.hscore.common.Validate;
27+
import net.kyori.adventure.text.Component;
2428
import org.bukkit.entity.Player;
2529
import org.jetbrains.annotations.Nullable;
2630

2731
import java.util.Optional;
2832
import java.util.function.Consumer;
2933

3034
public abstract class ActionComponent extends DialogComponent {
31-
private final String label;
32-
private final @Nullable String tooltip;
35+
private final Text label;
36+
private final @Nullable Text tooltip;
3337
private final int width;
3438
private final @Nullable String assign;
3539

3640
protected ActionComponent(DialogComponentBuilder.Input input) {
3741
super(input);
38-
label = Optional.ofNullable(input.options().get("label"))
39-
.map(Object::toString)
40-
.orElse("Action");
41-
tooltip = Optional.ofNullable(input.options().get("tooltip"))
42-
.map(Object::toString)
42+
label = DialogManagerProvider.textGetter().get(input.options(), "label")
43+
.orElseGet(() -> Text.of("Action"));
44+
tooltip = DialogManagerProvider.textGetter().get(input.options(), "tooltip")
4345
.orElse(null);
4446
width = Optional.ofNullable(input.options().get("width"))
4547
.map(Object::toString)
@@ -57,10 +59,24 @@ protected ActionComponent(DialogComponentBuilder.Input input) {
5759
@Override
5860
public void apply(Player player, Dialog<?, ?, ?, ?> dialog) {
5961
Consumer<DialogActionBuilder<?, ?>> actionConsumer = builder -> {
60-
builder
61-
.label(StringReplacerApplier.replace(label, player.getUniqueId(), this))
62-
.tooltip(tooltip == null ? null : StringReplacerApplier.replace(tooltip, player.getUniqueId(), this))
63-
.width(width);
62+
builder.width(width);
63+
64+
String replacedLabel = StringReplacerApplier.replace(label.text(), player.getUniqueId(), this);
65+
if (label.isAdventure() && builder instanceof AdventureDialogActionBuilder<?, ?> adventureBuilder) {
66+
adventureBuilder.label((Component) label.parser().apply(replacedLabel, player));
67+
} else {
68+
builder.label(replacedLabel);
69+
}
70+
71+
if (tooltip != null) {
72+
String replacedTooltip = StringReplacerApplier.replace(tooltip.text(), player.getUniqueId(), this);
73+
if (tooltip.isAdventure() && builder instanceof AdventureDialogActionBuilder<?, ?> adventureBuilder) {
74+
adventureBuilder.tooltip((Component) tooltip.parser().apply(replacedTooltip, player));
75+
} else {
76+
builder.tooltip(replacedTooltip);
77+
}
78+
}
79+
6480
getAction(player, builder);
6581
};
6682
switch (dialog) {

src/main/java/me/hsgamer/bettergui/betterdialogs/component/body/ItemComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void apply(Player player, DialogBodyBuilder<?> builder) {
8080
.showDecorations(showDecorations)
8181
.showTooltip(showTooltip)
8282
.width(width)
83-
.description(description != null ? description.getBodyConsumer(player.getUniqueId())::accept : null)
83+
.description(description != null ? description.getBodyConsumer(player)::accept : null)
8484
.height(height);
8585
ItemStack itemStack = itemBuilder.build(player.getUniqueId());
8686
if (itemBody instanceof PEItemBody peItemBody) {

0 commit comments

Comments
 (0)