From c3b0803782b71c8e43d9ef48a806e68398c6c8b6 Mon Sep 17 00:00:00 2001 From: Leviaria <113382526+Leviaria@users.noreply.github.com> Date: Sun, 3 Aug 2025 14:34:39 +0200 Subject: [PATCH 1/6] fix: /plot info escapes MiniMessage colors #3911 --- .../java/com/plotsquared/core/plot/Plot.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java index 655dc6d3f5..36f838ed9b 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java +++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java @@ -2897,6 +2897,20 @@ public CompletableFuture format(final Caption iInfo, PlotPlayer play } else { value = flag.toString(); } + // Create value component - use MiniMessage parsing for MiniMessage flags + Component valueComponent; + String formattedValue = CaptionUtility.formatRaw(player, value.toString()); + if (CaptionUtility.isMiniMessageFlag(flag)) { + try { + valueComponent = MINI_MESSAGE.deserialize(formattedValue); + } catch (Exception e) { + // Fallback to plain text if parsing fails + valueComponent = Component.text(formattedValue); + } + } else { + valueComponent = Component.text(formattedValue); + } + Component snip = MINI_MESSAGE.deserialize( prefix + CaptionUtility.format( player, @@ -2904,10 +2918,7 @@ public CompletableFuture format(final Caption iInfo, PlotPlayer play ), TagResolver.builder() .tag("flag", Tag.inserting(Component.text(flag.getName()))) - .tag("value", Tag.inserting(Component.text(CaptionUtility.formatRaw( - player, - value.toString() - )))) + .tag("value", Tag.inserting(valueComponent)) .build() ); flagBuilder.append(snip); From 5939d1793d8807cf720ebb329b6948bd95f500d1 Mon Sep 17 00:00:00 2001 From: Leviaria <113382526+Leviaria@users.noreply.github.com> Date: Sun, 3 Aug 2025 14:35:00 +0200 Subject: [PATCH 2/6] fix: /plot info escapes MiniMessage colors #3911 --- .../core/configuration/caption/CaptionUtility.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Core/src/main/java/com/plotsquared/core/configuration/caption/CaptionUtility.java b/Core/src/main/java/com/plotsquared/core/configuration/caption/CaptionUtility.java index 160e3277ab..39ef82bcc1 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/caption/CaptionUtility.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/caption/CaptionUtility.java @@ -116,6 +116,17 @@ public static String stripClickEvents(final @NonNull String miniMessageString) { return MiniMessage.miniMessage().serialize(component); } + /** + * Checks if a flag should be parsed as MiniMessage. + * + * @param flag the flag to check + * @return true if the flag value should be parsed as MiniMessage + * @since 7.3.9 + */ + public static boolean isMiniMessageFlag(PlotFlag flag) { + return MINI_MESSAGE_FLAGS.contains(flag.getClass()); + } + /** * Strips configured MiniMessage click events from a plot flag value. * This is used before letting the string be parsed by the plot flag. From 9680b2921ad088311e0a935bae8869277c5ee0a6 Mon Sep 17 00:00:00 2001 From: Leviaria <113382526+Leviaria@users.noreply.github.com> Date: Sun, 3 Aug 2025 14:50:44 +0200 Subject: [PATCH 3/6] ./gradlew :plotsquared-core:spotlessApply --- Core/src/main/java/com/plotsquared/core/plot/Plot.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java index 36f838ed9b..7c717753bd 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java +++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java @@ -2910,7 +2910,7 @@ public CompletableFuture format(final Caption iInfo, PlotPlayer play } else { valueComponent = Component.text(formattedValue); } - + Component snip = MINI_MESSAGE.deserialize( prefix + CaptionUtility.format( player, From 5836bb0fa16dae2b8d5d72e280baee5565ddd742 Mon Sep 17 00:00:00 2001 From: Leviaria <113382526+Leviaria@users.noreply.github.com> Date: Sun, 3 Aug 2025 15:49:20 +0200 Subject: [PATCH 4/6] enhancement -r flag --- .../com/plotsquared/core/command/Info.java | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/command/Info.java b/Core/src/main/java/com/plotsquared/core/command/Info.java index 3efabe114d..bdae3b8289 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Info.java +++ b/Core/src/main/java/com/plotsquared/core/command/Info.java @@ -23,6 +23,8 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.database.DBFunc; import com.plotsquared.core.permissions.Permission; +import com.plotsquared.core.player.MetaDataAccess; +import com.plotsquared.core.player.PlayerMetaDataKeys; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.flag.implementations.HideInfoFlag; @@ -39,7 +41,7 @@ @CommandDeclaration(command = "info", aliases = "i", - usage = "/plot info [-f to force info]", + usage = "/plot info [-f to force info] [-r to show raw flag values]", category = CommandCategory.INFO) public class Info extends SubCommand { @@ -83,6 +85,25 @@ public boolean onCommand(final PlotPlayer player, String[] args) { } } + // Check for raw flag display preference + boolean showRawFlags = false; + for (final String argument : args) { + if (argument.equalsIgnoreCase("-r")) { + if (!player.hasPermission("plots.admin.info.raw")) { + player.sendMessage( + TranslatableCaption.of("permission.no_permission"), + TagResolver.resolver( + "node", + Tag.inserting(Component.text("plots.admin.info.raw")) + ) + ); + return true; + } + showRawFlags = true; + break; + } + } + // hide-info flag if (plot.getFlag(HideInfoFlag.class)) { boolean allowed = false; @@ -140,7 +161,23 @@ public boolean onCommand(final PlotPlayer player, String[] args) { } else { full = false; } - plot.format(info, player, full).thenAcceptAsync(player::sendMessage); + + // Store raw flag preference in player metadata + try (final MetaDataAccess metaDataAccess = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_RAW_FLAGS)) { + if (showRawFlags) { + metaDataAccess.set(true); + } else { + metaDataAccess.remove(); + } + } + + plot.format(info, player, full).thenAcceptAsync(formatted -> { + player.sendMessage(formatted); + // Clean up metadata after use + try (final MetaDataAccess metaDataAccess = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_RAW_FLAGS)) { + metaDataAccess.remove(); + } + }); return true; } @@ -150,6 +187,9 @@ public Collection tab(PlotPlayer player, String[] args, boolean spac if (player.hasPermission(Permission.PERMISSION_AREA_INFO_FORCE)) { completions.add("-f"); } + if (player.hasPermission("plots.admin.info.raw")) { + completions.add("-r"); + } final List commands = completions.stream().filter(completion -> completion .toLowerCase() From f2c1d2590b58bae9be102974d18e7279dc8f6a0e Mon Sep 17 00:00:00 2001 From: Leviaria <113382526+Leviaria@users.noreply.github.com> Date: Sun, 3 Aug 2025 15:49:51 +0200 Subject: [PATCH 5/6] enhancement -r flag --- .../java/com/plotsquared/core/player/PlayerMetaDataKeys.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Core/src/main/java/com/plotsquared/core/player/PlayerMetaDataKeys.java b/Core/src/main/java/com/plotsquared/core/player/PlayerMetaDataKeys.java index 07fb482cc8..b9557470fc 100644 --- a/Core/src/main/java/com/plotsquared/core/player/PlayerMetaDataKeys.java +++ b/Core/src/main/java/com/plotsquared/core/player/PlayerMetaDataKeys.java @@ -64,6 +64,8 @@ public final class PlayerMetaDataKeys { }); public static final MetaDataKey TEMPORARY_CONFIRM = MetaDataKey.of("cmdConfirm", new TypeLiteral<>() { }); + public static final MetaDataKey TEMPORARY_RAW_FLAGS = MetaDataKey.of("rawFlags", new TypeLiteral<>() { + }); //@formatter:on private PlayerMetaDataKeys() { From a7227a90a6342f735501eb19d93830c6b553693b Mon Sep 17 00:00:00 2001 From: Leviaria <113382526+Leviaria@users.noreply.github.com> Date: Sun, 3 Aug 2025 15:50:22 +0200 Subject: [PATCH 6/6] enhancement -r flag --- .../main/java/com/plotsquared/core/plot/Plot.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java index 7c717753bd..a00442a954 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java +++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java @@ -39,6 +39,8 @@ import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.ConsolePlayer; +import com.plotsquared.core.player.MetaDataAccess; +import com.plotsquared.core.player.PlayerMetaDataKeys; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.expiration.ExpireManager; import com.plotsquared.core.plot.expiration.PlotAnalysis; @@ -2897,10 +2899,17 @@ public CompletableFuture format(final Caption iInfo, PlotPlayer play } else { value = flag.toString(); } - // Create value component - use MiniMessage parsing for MiniMessage flags + // Create value component - check if raw display is requested Component valueComponent; String formattedValue = CaptionUtility.formatRaw(player, value.toString()); - if (CaptionUtility.isMiniMessageFlag(flag)) { + + // Check if player requested raw flag display + boolean showRaw = false; + try (final MetaDataAccess metaDataAccess = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_RAW_FLAGS)) { + showRaw = metaDataAccess.get().orElse(false); + } + + if (!showRaw && CaptionUtility.isMiniMessageFlag(flag)) { try { valueComponent = MINI_MESSAGE.deserialize(formattedValue); } catch (Exception e) {