Skip to content

Commit d54e8c5

Browse files
Support components in command permission msgs (#6676)
1 parent fdd5c65 commit d54e8c5

File tree

2 files changed

+94
-10
lines changed

2 files changed

+94
-10
lines changed

patches/api/0007-Adventure.patch

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,6 +1220,78 @@ index ab6b0ec328e94bf65a0dafd0403e5ee3b870296c..c8d37184d8e882a4084a1bfef85faa33
12201220
public void setLine(int index, @NotNull String line) throws IndexOutOfBoundsException;
12211221

12221222
/**
1223+
diff --git a/src/main/java/org/bukkit/command/Command.java b/src/main/java/org/bukkit/command/Command.java
1224+
index 03bdc1622791e1206406c87065978688d602e39e..96067ea484eab10bc2be35656481185a67cbcad5 100644
1225+
--- a/src/main/java/org/bukkit/command/Command.java
1226+
+++ b/src/main/java/org/bukkit/command/Command.java
1227+
@@ -32,7 +32,7 @@ public abstract class Command {
1228+
protected String description;
1229+
protected String usageMessage;
1230+
private String permission;
1231+
- private String permissionMessage;
1232+
+ private net.kyori.adventure.text.Component permissionMessage; // Paper
1233+
public co.aikar.timings.Timing timings; // Paper
1234+
@NotNull public String getTimingName() {return getName();} // Paper
1235+
1236+
@@ -186,10 +186,10 @@ public abstract class Command {
1237+
1238+
if (permissionMessage == null) {
1239+
target.sendMessage(ChatColor.RED + "I'm sorry, but you do not have permission to perform this command. Please contact the server administrators if you believe that this is a mistake.");
1240+
- } else if (permissionMessage.length() != 0) {
1241+
- for (String line : permissionMessage.replace("<permission>", permission).split("\n")) {
1242+
- target.sendMessage(line);
1243+
- }
1244+
+ // Paper start - use components for permissionMessage
1245+
+ } else if (!permissionMessage.equals(net.kyori.adventure.text.Component.empty())) {
1246+
+ target.sendMessage(permissionMessage.replaceText(net.kyori.adventure.text.TextReplacementConfig.builder().matchLiteral("<permission>").replacement(permission).build()));
1247+
+ // Paper end
1248+
}
1249+
1250+
return false;
1251+
@@ -316,10 +316,12 @@ public abstract class Command {
1252+
* command
1253+
*
1254+
* @return Permission check failed message
1255+
+ * @deprecated use {@link #permissionMessage()}
1256+
*/
1257+
@Nullable
1258+
+ @Deprecated // Paper
1259+
public String getPermissionMessage() {
1260+
- return permissionMessage;
1261+
+ return io.papermc.paper.text.PaperComponents.legacySectionSerializer().serialize(permissionMessage); // Paper
1262+
}
1263+
1264+
/**
1265+
@@ -380,10 +382,12 @@ public abstract class Command {
1266+
* @param permissionMessage new permission message, null to indicate
1267+
* default message, or an empty string to indicate no message
1268+
* @return this command object, for chaining
1269+
+ * @deprecated use {@link #permissionMessage(net.kyori.adventure.text.Component)}
1270+
*/
1271+
@NotNull
1272+
+ @Deprecated // Paper
1273+
public Command setPermissionMessage(@Nullable String permissionMessage) {
1274+
- this.permissionMessage = permissionMessage;
1275+
+ this.permissionMessage = io.papermc.paper.text.PaperComponents.legacySectionSerializer().deserializeOrNull(permissionMessage); // Paper
1276+
return this;
1277+
}
1278+
1279+
@@ -398,6 +402,15 @@ public abstract class Command {
1280+
this.usageMessage = (usage == null) ? "" : usage;
1281+
return this;
1282+
}
1283+
+ // Paper start
1284+
+ public @Nullable net.kyori.adventure.text.Component permissionMessage() {
1285+
+ return this.permissionMessage;
1286+
+ }
1287+
+
1288+
+ public void permissionMessage(@Nullable net.kyori.adventure.text.Component permissionMessage) {
1289+
+ this.permissionMessage = permissionMessage;
1290+
+ }
1291+
+ // Paper end
1292+
1293+
public static void broadcastCommandMessage(@NotNull CommandSender source, @NotNull String message) {
1294+
broadcastCommandMessage(source, message, true);
12231295
diff --git a/src/main/java/org/bukkit/command/CommandSender.java b/src/main/java/org/bukkit/command/CommandSender.java
12241296
index 284be63a125624a8ae43d2c164aede810ce6bfe5..7c9a0c85c0e23d6a569c3583e87b005938923d95 100644
12251297
--- a/src/main/java/org/bukkit/command/CommandSender.java
@@ -1339,6 +1411,19 @@ index a7ef1f51c2b96617a32e6e7b1723e8770ba8a6a8..68daa56546d00089d7d6c13ee897d828
13391411

13401412
@Override
13411413
default boolean isOp() {
1414+
diff --git a/src/main/java/org/bukkit/command/PluginCommandYamlParser.java b/src/main/java/org/bukkit/command/PluginCommandYamlParser.java
1415+
index a542c4bb3c973bbe4b976642feccde6a4d90cb7b..614cba22c0997dbb45576f800675db4053a9831c 100644
1416+
--- a/src/main/java/org/bukkit/command/PluginCommandYamlParser.java
1417+
+++ b/src/main/java/org/bukkit/command/PluginCommandYamlParser.java
1418+
@@ -67,7 +67,7 @@ public class PluginCommandYamlParser {
1419+
}
1420+
1421+
if (permissionMessage != null) {
1422+
- newCmd.setPermissionMessage(permissionMessage.toString());
1423+
+ newCmd.permissionMessage(io.papermc.paper.text.PaperComponents.legacySectionSerializer().deserialize(permissionMessage.toString())); // Paper
1424+
}
1425+
1426+
pluginCmds.add(newCmd);
13421427
diff --git a/src/main/java/org/bukkit/command/ProxiedCommandSender.java b/src/main/java/org/bukkit/command/ProxiedCommandSender.java
13431428
index fcc34b640265f4dccb46b9f09466ab8e1d96043e..74599b4ee0518481c0e3a5f6ab2f5302837f1ae3 100644
13441429
--- a/src/main/java/org/bukkit/command/ProxiedCommandSender.java

patches/api/0164-Make-the-default-permission-message-configurable.patch

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,19 @@ index 87690bd58bdab40edcfddc40b26acc8e1f8cf8fc..bb77ab2a93eb4242b2e66c679effc7e4
4343
* Creates a PlayerProfile for the specified uuid, with name as null
4444
* @param uuid UUID to create profile for
4545
diff --git a/src/main/java/org/bukkit/command/Command.java b/src/main/java/org/bukkit/command/Command.java
46-
index 7c80dc54776d0d66f7816b77136f6dbd9b801704..fed7281a912ea256f4b0cb1a5880ac4494a53c18 100644
46+
index 91b08156172c12ea890e426958769a1eef8cd8d4..6161208cb5e862be0e7bf4ed0954a1558a0ac5b5 100644
4747
--- a/src/main/java/org/bukkit/command/Command.java
4848
+++ b/src/main/java/org/bukkit/command/Command.java
49-
@@ -184,9 +184,10 @@ public abstract class Command {
49+
@@ -184,10 +184,9 @@ public abstract class Command {
5050
return true;
5151
}
5252

5353
- if (permissionMessage == null) {
5454
- target.sendMessage(ChatColor.RED + "I'm sorry, but you do not have permission to perform this command. Please contact the server administrators if you believe that this is a mistake.");
55-
- } else if (permissionMessage.length() != 0) {
56-
+ // Paper start
57-
+ String permissionMessage = this.permissionMessage != null ? this.permissionMessage : Bukkit.getPermissionMessage();
58-
+ if (!permissionMessage.isBlank()) {
59-
+ // Paper end
60-
for (String line : permissionMessage.replace("<permission>", permission).split("\n")) {
61-
target.sendMessage(line);
62-
}
55+
// Paper start - use components for permissionMessage
56+
- } else if (!permissionMessage.equals(net.kyori.adventure.text.Component.empty())) {
57+
+ net.kyori.adventure.text.Component permissionMessage = this.permissionMessage != null ? this.permissionMessage : io.papermc.paper.text.PaperComponents.legacySectionSerializer().deserialize(Bukkit.getPermissionMessage());
58+
+ if (!permissionMessage.equals(net.kyori.adventure.text.Component.empty())) {
59+
target.sendMessage(permissionMessage.replaceText(net.kyori.adventure.text.TextReplacementConfig.builder().matchLiteral("<permission>").replacement(permission).build()));
60+
// Paper end
61+
}

0 commit comments

Comments
 (0)