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) {