mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-05-31 14:16:24 +02:00
fix: correctly parse help messages with prefix (#4652)
This commit is contained in:
parent
629646ab06
commit
7da4eb1ab5
@ -24,6 +24,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@ -98,6 +99,14 @@ public enum CommandCategory implements Caption {
|
|||||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull Component toComponent(
|
||||||
|
@NonNull final LocaleHolder localeHolder,
|
||||||
|
final @NonNull TagResolver @NonNull ... tagResolvers
|
||||||
|
) {
|
||||||
|
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a player has access to this command category
|
* Checks if a player has access to this command category
|
||||||
*
|
*
|
||||||
|
@ -113,38 +113,34 @@ public class Help extends Command {
|
|||||||
}
|
}
|
||||||
if (cat == null && page == 0) {
|
if (cat == null && page == 0) {
|
||||||
TextComponent.Builder builder = Component.text();
|
TextComponent.Builder builder = Component.text();
|
||||||
builder.append(MINI_MESSAGE.deserialize(TranslatableCaption.of("help.help_header").getComponent(player)));
|
builder.append(TranslatableCaption.of("help.help_header").toComponent(player));
|
||||||
for (CommandCategory c : CommandCategory.values()) {
|
for (CommandCategory c : CommandCategory.values()) {
|
||||||
if (!c.canAccess(player)) {
|
if (!c.canAccess(player)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE
|
builder.append(Component.newline());
|
||||||
.deserialize(
|
builder.append(TranslatableCaption.of("help.help_info_item").toComponent(
|
||||||
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
player, TagResolver.builder()
|
||||||
TagResolver.builder()
|
.tag("command", Tag.inserting(Component.text("/plot help")))
|
||||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
.tag("category", Tag.inserting(Component.text(c.name().toLowerCase())))
|
||||||
.tag("category", Tag.inserting(Component.text(c.name().toLowerCase())))
|
.tag("category_desc", Tag.inserting(c.toComponent(player)))
|
||||||
.tag("category_desc", Tag.inserting(c.toComponent(player)))
|
.build()
|
||||||
.build()
|
));
|
||||||
));
|
|
||||||
}
|
}
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE
|
builder.append(Component.newline());
|
||||||
.deserialize(
|
builder.append(TranslatableCaption.of("help.help_info_item").toComponent(
|
||||||
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
player, TagResolver.builder()
|
||||||
TagResolver.builder()
|
.tag("command", Tag.inserting(Component.text("/plot help")))
|
||||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
.tag("category", Tag.inserting(Component.text("all")))
|
||||||
.tag("category", Tag.inserting(Component.text("all")))
|
.tag(
|
||||||
.tag(
|
"category_desc", Tag.inserting(TranslatableCaption
|
||||||
"category_desc",
|
.of("help.help_display_all_commands")
|
||||||
Tag.inserting(TranslatableCaption
|
.toComponent(player))
|
||||||
.of("help.help_display_all_commands")
|
)
|
||||||
.toComponent(player))
|
.build()
|
||||||
)
|
));
|
||||||
.build()
|
builder.append(Component.newline());
|
||||||
));
|
builder.append(TranslatableCaption.of("help.help_footer").toComponent(player));
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
|
|
||||||
.of("help.help_footer")
|
|
||||||
.getComponent(player)));
|
|
||||||
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.asComponent())));
|
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.asComponent())));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ package com.plotsquared.core.configuration.caption;
|
|||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.ComponentLike;
|
import net.kyori.adventure.text.ComponentLike;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,6 +45,16 @@ public interface Caption {
|
|||||||
*/
|
*/
|
||||||
@NonNull Component toComponent(@NonNull LocaleHolder localeHolder);
|
@NonNull Component toComponent(@NonNull LocaleHolder localeHolder);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Adventure {@link ComponentLike} for this caption while applying custom {@link TagResolver}
|
||||||
|
* (apart from the default {@code core.prefix})
|
||||||
|
* @param localeHolder Local holder
|
||||||
|
* @param tagResolvers custom tag resolvers to replace placeholders / parameters
|
||||||
|
* @return {@link ComponentLike}
|
||||||
|
* @since TODO
|
||||||
|
*/
|
||||||
|
@NonNull Component toComponent(@NonNull LocaleHolder localeHolder, @NonNull TagResolver @NonNull... tagResolvers);
|
||||||
|
|
||||||
@NonNull String toString();
|
@NonNull String toString();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ package com.plotsquared.core.configuration.caption;
|
|||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
public final class StaticCaption implements Caption {
|
public final class StaticCaption implements Caption {
|
||||||
@ -51,6 +52,14 @@ public final class StaticCaption implements Caption {
|
|||||||
return MiniMessage.miniMessage().deserialize(this.value);
|
return MiniMessage.miniMessage().deserialize(this.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull Component toComponent(
|
||||||
|
@NonNull final LocaleHolder localeHolder,
|
||||||
|
final @NonNull TagResolver @NonNull ... tagResolvers
|
||||||
|
) {
|
||||||
|
return MiniMessage.miniMessage().deserialize(this.value, tagResolvers);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull String toString() {
|
public @NonNull String toString() {
|
||||||
return "StaticCaption(" + value + ")";
|
return "StaticCaption(" + value + ")";
|
||||||
|
@ -27,6 +27,7 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -96,13 +97,23 @@ public final class TranslatableCaption implements NamespacedCaption {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull Component toComponent(@NonNull final LocaleHolder localeHolder) {
|
public @NonNull Component toComponent(@NonNull final LocaleHolder localeHolder) {
|
||||||
|
return this.toComponent(localeHolder, new TagResolver[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull Component toComponent(
|
||||||
|
@NonNull final LocaleHolder localeHolder,
|
||||||
|
final @NonNull TagResolver @NonNull ... tagResolvers
|
||||||
|
) {
|
||||||
if (getKey().equals("core.prefix")) {
|
if (getKey().equals("core.prefix")) {
|
||||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
||||||
}
|
}
|
||||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder), TagResolver.resolver(
|
TagResolver[] finalResolvers = Arrays.copyOf(tagResolvers, tagResolvers.length + 1);
|
||||||
|
finalResolvers[finalResolvers.length - 1] = TagResolver.resolver(
|
||||||
"prefix",
|
"prefix",
|
||||||
Tag.inserting(TranslatableCaption.of("core.prefix").toComponent(localeHolder))
|
Tag.inserting(TranslatableCaption.of("core.prefix").toComponent(localeHolder))
|
||||||
));
|
);
|
||||||
|
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder), finalResolvers);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -25,30 +25,24 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.ComponentLike;
|
import net.kyori.adventure.text.ComponentLike;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class HelpObject implements ComponentLike {
|
public class HelpObject implements ComponentLike {
|
||||||
|
|
||||||
static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage();
|
|
||||||
|
|
||||||
private final Component rendered;
|
private final Component rendered;
|
||||||
|
|
||||||
public HelpObject(final Command command, final String label, final PlotPlayer<?> audience) {
|
public HelpObject(final Command command, final String label, final PlotPlayer<?> audience) {
|
||||||
rendered = MINI_MESSAGE.deserialize(
|
this.rendered = TranslatableCaption.of("help.help_item").toComponent(audience, TagResolver.builder()
|
||||||
TranslatableCaption.of("help.help_item").getComponent(audience),
|
.tag("usage", Tag.inserting(Component.text(command.getUsage().replace("{label}", label))))
|
||||||
TagResolver.builder()
|
.tag("alias", Tag.inserting(Component.text(
|
||||||
.tag("usage", Tag.inserting(Component.text(command.getUsage().replace("{label}", label))))
|
command.getAliases().isEmpty() ? "" : StringMan.join(command.getAliases(), " | ")
|
||||||
.tag("alias", Tag.inserting(Component.text(
|
)))
|
||||||
command.getAliases().isEmpty() ? "" : StringMan.join(command.getAliases(), " | ")
|
.tag("desc", Tag.inserting(command.getDescription().toComponent(audience)))
|
||||||
)))
|
.tag("arguments", Tag.inserting(Component.text(buildArgumentList(command.getRequiredArguments()))))
|
||||||
.tag("desc", Tag.inserting(command.getDescription().toComponent(audience)))
|
.tag("label", Tag.inserting(Component.text(label)))
|
||||||
.tag("arguments", Tag.inserting(Component.text(buildArgumentList(command.getRequiredArguments()))))
|
.build());
|
||||||
.tag("label", Tag.inserting(Component.text(label)))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildArgumentList(final Argument<?>[] arguments) {
|
private String buildArgumentList(final Argument<?>[] arguments) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user