Skip to content

Commit 7da4eb1

Browse files
fix: correctly parse help messages with prefix (#4652)
1 parent 629646a commit 7da4eb1

File tree

6 files changed

+74
-44
lines changed

6 files changed

+74
-44
lines changed

Core/src/main/java/com/plotsquared/core/command/CommandCategory.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.plotsquared.core.player.PlotPlayer;
2525
import net.kyori.adventure.text.Component;
2626
import net.kyori.adventure.text.minimessage.MiniMessage;
27+
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
2728
import org.checkerframework.checker.nullness.qual.NonNull;
2829
import org.jetbrains.annotations.NotNull;
2930

@@ -98,6 +99,14 @@ public String getComponent(@NonNull LocaleHolder localeHolder) {
9899
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
99100
}
100101

102+
@Override
103+
public @NonNull Component toComponent(
104+
@NonNull final LocaleHolder localeHolder,
105+
final @NonNull TagResolver @NonNull ... tagResolvers
106+
) {
107+
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
108+
}
109+
101110
/**
102111
* Checks if a player has access to this command category
103112
*

Core/src/main/java/com/plotsquared/core/command/Help.java

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -113,38 +113,34 @@ public CompletableFuture<Boolean> displayHelp(
113113
}
114114
if (cat == null && page == 0) {
115115
TextComponent.Builder builder = Component.text();
116-
builder.append(MINI_MESSAGE.deserialize(TranslatableCaption.of("help.help_header").getComponent(player)));
116+
builder.append(TranslatableCaption.of("help.help_header").toComponent(player));
117117
for (CommandCategory c : CommandCategory.values()) {
118118
if (!c.canAccess(player)) {
119119
continue;
120120
}
121-
builder.append(Component.newline()).append(MINI_MESSAGE
122-
.deserialize(
123-
TranslatableCaption.of("help.help_info_item").getComponent(player),
124-
TagResolver.builder()
125-
.tag("command", Tag.inserting(Component.text("/plot help")))
126-
.tag("category", Tag.inserting(Component.text(c.name().toLowerCase())))
127-
.tag("category_desc", Tag.inserting(c.toComponent(player)))
128-
.build()
129-
));
121+
builder.append(Component.newline());
122+
builder.append(TranslatableCaption.of("help.help_info_item").toComponent(
123+
player, TagResolver.builder()
124+
.tag("command", Tag.inserting(Component.text("/plot help")))
125+
.tag("category", Tag.inserting(Component.text(c.name().toLowerCase())))
126+
.tag("category_desc", Tag.inserting(c.toComponent(player)))
127+
.build()
128+
));
130129
}
131-
builder.append(Component.newline()).append(MINI_MESSAGE
132-
.deserialize(
133-
TranslatableCaption.of("help.help_info_item").getComponent(player),
134-
TagResolver.builder()
135-
.tag("command", Tag.inserting(Component.text("/plot help")))
136-
.tag("category", Tag.inserting(Component.text("all")))
137-
.tag(
138-
"category_desc",
139-
Tag.inserting(TranslatableCaption
140-
.of("help.help_display_all_commands")
141-
.toComponent(player))
142-
)
143-
.build()
144-
));
145-
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
146-
.of("help.help_footer")
147-
.getComponent(player)));
130+
builder.append(Component.newline());
131+
builder.append(TranslatableCaption.of("help.help_info_item").toComponent(
132+
player, TagResolver.builder()
133+
.tag("command", Tag.inserting(Component.text("/plot help")))
134+
.tag("category", Tag.inserting(Component.text("all")))
135+
.tag(
136+
"category_desc", Tag.inserting(TranslatableCaption
137+
.of("help.help_display_all_commands")
138+
.toComponent(player))
139+
)
140+
.build()
141+
));
142+
builder.append(Component.newline());
143+
builder.append(TranslatableCaption.of("help.help_footer").toComponent(player));
148144
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.asComponent())));
149145
return true;
150146
}

Core/src/main/java/com/plotsquared/core/configuration/caption/Caption.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import net.kyori.adventure.text.Component;
2222
import net.kyori.adventure.text.ComponentLike;
23+
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
2324
import org.checkerframework.checker.nullness.qual.NonNull;
2425

2526
/**
@@ -44,6 +45,16 @@ public interface Caption {
4445
*/
4546
@NonNull Component toComponent(@NonNull LocaleHolder localeHolder);
4647

48+
/**
49+
* Get the Adventure {@link ComponentLike} for this caption while applying custom {@link TagResolver}
50+
* (apart from the default {@code core.prefix})
51+
* @param localeHolder Local holder
52+
* @param tagResolvers custom tag resolvers to replace placeholders / parameters
53+
* @return {@link ComponentLike}
54+
* @since TODO
55+
*/
56+
@NonNull Component toComponent(@NonNull LocaleHolder localeHolder, @NonNull TagResolver @NonNull... tagResolvers);
57+
4758
@NonNull String toString();
4859

4960
}

Core/src/main/java/com/plotsquared/core/configuration/caption/StaticCaption.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.google.common.base.Preconditions;
2222
import net.kyori.adventure.text.Component;
2323
import net.kyori.adventure.text.minimessage.MiniMessage;
24+
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
2425
import org.checkerframework.checker.nullness.qual.NonNull;
2526

2627
public final class StaticCaption implements Caption {
@@ -51,6 +52,14 @@ private StaticCaption(final String value) {
5152
return MiniMessage.miniMessage().deserialize(this.value);
5253
}
5354

55+
@Override
56+
public @NonNull Component toComponent(
57+
@NonNull final LocaleHolder localeHolder,
58+
final @NonNull TagResolver @NonNull ... tagResolvers
59+
) {
60+
return MiniMessage.miniMessage().deserialize(this.value, tagResolvers);
61+
}
62+
5463
@Override
5564
public @NonNull String toString() {
5665
return "StaticCaption(" + value + ")";

Core/src/main/java/com/plotsquared/core/configuration/caption/TranslatableCaption.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.checkerframework.checker.nullness.qual.NonNull;
2828
import org.jetbrains.annotations.NotNull;
2929

30+
import java.util.Arrays;
3031
import java.util.Locale;
3132
import java.util.regex.Pattern;
3233

@@ -96,13 +97,23 @@ private TranslatableCaption(final @NonNull String namespace, final @NonNull Stri
9697

9798
@Override
9899
public @NonNull Component toComponent(@NonNull final LocaleHolder localeHolder) {
100+
return this.toComponent(localeHolder, new TagResolver[0]);
101+
}
102+
103+
@Override
104+
public @NonNull Component toComponent(
105+
@NonNull final LocaleHolder localeHolder,
106+
final @NonNull TagResolver @NonNull ... tagResolvers
107+
) {
99108
if (getKey().equals("core.prefix")) {
100109
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
101110
}
102-
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder), TagResolver.resolver(
111+
TagResolver[] finalResolvers = Arrays.copyOf(tagResolvers, tagResolvers.length + 1);
112+
finalResolvers[finalResolvers.length - 1] = TagResolver.resolver(
103113
"prefix",
104114
Tag.inserting(TranslatableCaption.of("core.prefix").toComponent(localeHolder))
105-
));
115+
);
116+
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder), finalResolvers);
106117
}
107118

108119
@Override

Core/src/main/java/com/plotsquared/core/util/helpmenu/HelpObject.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,24 @@
2525
import com.plotsquared.core.util.StringMan;
2626
import net.kyori.adventure.text.Component;
2727
import net.kyori.adventure.text.ComponentLike;
28-
import net.kyori.adventure.text.minimessage.MiniMessage;
2928
import net.kyori.adventure.text.minimessage.tag.Tag;
3029
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
3130
import org.jetbrains.annotations.NotNull;
3231

3332
public class HelpObject implements ComponentLike {
3433

35-
static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage();
36-
3734
private final Component rendered;
3835

3936
public HelpObject(final Command command, final String label, final PlotPlayer<?> audience) {
40-
rendered = MINI_MESSAGE.deserialize(
41-
TranslatableCaption.of("help.help_item").getComponent(audience),
42-
TagResolver.builder()
43-
.tag("usage", Tag.inserting(Component.text(command.getUsage().replace("{label}", label))))
44-
.tag("alias", Tag.inserting(Component.text(
45-
command.getAliases().isEmpty() ? "" : StringMan.join(command.getAliases(), " | ")
46-
)))
47-
.tag("desc", Tag.inserting(command.getDescription().toComponent(audience)))
48-
.tag("arguments", Tag.inserting(Component.text(buildArgumentList(command.getRequiredArguments()))))
49-
.tag("label", Tag.inserting(Component.text(label)))
50-
.build()
51-
);
37+
this.rendered = TranslatableCaption.of("help.help_item").toComponent(audience, TagResolver.builder()
38+
.tag("usage", Tag.inserting(Component.text(command.getUsage().replace("{label}", label))))
39+
.tag("alias", Tag.inserting(Component.text(
40+
command.getAliases().isEmpty() ? "" : StringMan.join(command.getAliases(), " | ")
41+
)))
42+
.tag("desc", Tag.inserting(command.getDescription().toComponent(audience)))
43+
.tag("arguments", Tag.inserting(Component.text(buildArgumentList(command.getRequiredArguments()))))
44+
.tag("label", Tag.inserting(Component.text(label)))
45+
.build());
5246
}
5347

5448
private String buildArgumentList(final Argument<?>[] arguments) {

0 commit comments

Comments
 (0)