Fix MiniMessage color parsing in commands - Added send() method to GradientMessages for proper Component parsing - Updated all gradient commands to use msg.send() instead of player.sendMessage(msg.get()) - Now <#RRGGBB> tags are properly converted to colors in chat
This commit is contained in:
parent
29ae373554
commit
d2c45b3f0c
5 changed files with 89 additions and 53 deletions
|
|
@ -41,7 +41,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
GradientMessages msg = module.getMessages();
|
||||
|
||||
if (!sender.hasPermission("gradient.admin")) {
|
||||
sender.sendMessage(msg.get("no-permission"));
|
||||
msg.send(sender, "no-permission");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
switch (subCommand) {
|
||||
case "reload" -> {
|
||||
module.reload();
|
||||
sender.sendMessage(msg.get("reload-success"));
|
||||
msg.send(sender, "reload-success");
|
||||
}
|
||||
case "info" -> {
|
||||
if (args.length < 2) {
|
||||
|
|
@ -105,24 +105,24 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
private void handleInfo(CommandSender sender, String playerName, GradientMessages msg) {
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(playerName);
|
||||
if (!target.hasPlayedBefore() && !target.isOnline()) {
|
||||
sender.sendMessage(msg.get("player-not-found"));
|
||||
msg.send(sender, "player-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
GradientPlayerData data = module.getDataManager().getPlayerData(target.getUniqueId());
|
||||
|
||||
sender.sendMessage(msg.get("info-header", "player", playerName));
|
||||
sender.sendMessage(msg.get("info-prefix", "prefix", data.hasPrefix() ? data.getPrefix() : "нет"));
|
||||
sender.sendMessage(msg.get("info-prefix-enabled", "enabled", data.isPrefixEnabled() ? "да" : "нет"));
|
||||
sender.sendMessage(msg.get("info-colors", "colors", data.hasColors() ? String.join(", ", data.getColors()) : "нет"));
|
||||
sender.sendMessage(msg.get("info-color-enabled", "enabled", data.isColorEnabled() ? "да" : "нет"));
|
||||
sender.sendMessage(msg.get("info-prefix-purchased", "purchased", data.isPrefixPurchased() ? "да" : "нет"));
|
||||
msg.send(sender, "info-header", "player", playerName);
|
||||
msg.send(sender, "info-prefix", "prefix", data.hasPrefix() ? data.getPrefix() : "нет");
|
||||
msg.send(sender, "info-prefix-enabled", "enabled", data.isPrefixEnabled() ? "да" : "нет");
|
||||
msg.send(sender, "info-colors", "colors", data.hasColors() ? String.join(", ", data.getColors()) : "нет");
|
||||
msg.send(sender, "info-color-enabled", "enabled", data.isColorEnabled() ? "да" : "нет");
|
||||
msg.send(sender, "info-prefix-purchased", "purchased", data.isPrefixPurchased() ? "да" : "нет");
|
||||
}
|
||||
|
||||
private void handleSetColor(CommandSender sender, String[] args, GradientMessages msg) {
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
|
||||
if (!target.hasPlayedBefore() && !target.isOnline()) {
|
||||
sender.sendMessage(msg.get("player-not-found"));
|
||||
msg.send(sender, "player-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -130,7 +130,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
for (int i = 2; i < args.length; i++) {
|
||||
String color = args[i].startsWith("#") ? args[i] : "#" + args[i];
|
||||
if (!GradientUtil.isValidHex(color)) {
|
||||
sender.sendMessage(msg.get("invalid-color", "color", args[i]));
|
||||
msg.send(sender, "invalid-color", "color", args[i]);
|
||||
return;
|
||||
}
|
||||
colors.add(color.toUpperCase());
|
||||
|
|
@ -138,7 +138,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
GradientConfig cfg = module.getConfig();
|
||||
if (colors.size() > cfg.getMaxColors()) {
|
||||
sender.sendMessage(msg.get("too-many-colors", "max", String.valueOf(cfg.getMaxColors())));
|
||||
msg.send(sender, "too-many-colors", "max", String.valueOf(cfg.getMaxColors()));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -161,7 +161,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
private void handleSetPrefix(CommandSender sender, String[] args, GradientMessages msg) {
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
|
||||
if (!target.hasPlayedBefore() && !target.isOnline()) {
|
||||
sender.sendMessage(msg.get("player-not-found"));
|
||||
msg.send(sender, "player-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -174,7 +174,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
GradientConfig cfg = module.getConfig();
|
||||
if (prefix.length() > cfg.getMaxPrefixLength()) {
|
||||
sender.sendMessage(msg.get("prefix-too-long", "max", String.valueOf(cfg.getMaxPrefixLength())));
|
||||
msg.send(sender, "prefix-too-long", "max", String.valueOf(cfg.getMaxPrefixLength()));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -205,7 +205,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
|
||||
if (!target.hasPlayedBefore() && !target.isOnline()) {
|
||||
sender.sendMessage(msg.get("player-not-found"));
|
||||
msg.send(sender, "player-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -232,7 +232,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
|
||||
if (!target.hasPlayedBefore() && !target.isOnline()) {
|
||||
sender.sendMessage(msg.get("player-not-found"));
|
||||
msg.send(sender, "player-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -265,7 +265,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
|
||||
if (!target.hasPlayedBefore() && !target.isOnline()) {
|
||||
sender.sendMessage(msg.get("player-not-found"));
|
||||
msg.send(sender, "player-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -293,7 +293,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
|
||||
if (!target.hasPlayedBefore() && !target.isOnline()) {
|
||||
sender.sendMessage(msg.get("player-not-found"));
|
||||
msg.send(sender, "player-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,17 +51,17 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
|
||||
@NotNull String label, @NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(module.getMessages().get("only-player"));
|
||||
module.getMessages().send(sender, "only-player");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!player.hasPermission("gradient.color")) {
|
||||
player.sendMessage(module.getMessages().get("no-permission"));
|
||||
module.getMessages().send(player, "no-permission");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(module.getMessages().get("color-help"));
|
||||
module.getMessages().send(player, "color-help");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -79,13 +79,13 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
GradientMessages msg = module.getMessages();
|
||||
|
||||
if (!data.hasColors()) {
|
||||
player.sendMessage(msg.get("color-no-colors"));
|
||||
msg.send(player, "color-no-colors");
|
||||
return true;
|
||||
}
|
||||
|
||||
data.setColorEnabled(true);
|
||||
saveAndUpdate(player, data);
|
||||
player.sendMessage(msg.get("color-enabled"));
|
||||
msg.send(player, "color-enabled");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -93,7 +93,7 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
GradientPlayerData data = module.getDataManager().getPlayerData(player.getUniqueId());
|
||||
data.setColorEnabled(false);
|
||||
saveAndUpdate(player, data);
|
||||
player.sendMessage(module.getMessages().get("color-disabled"));
|
||||
module.getMessages().send(player, "color-disabled");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -102,14 +102,14 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
GradientMessages msg = module.getMessages();
|
||||
|
||||
if (!data.hasColors()) {
|
||||
player.sendMessage(msg.get("color-no-colors"));
|
||||
msg.send(player, "color-no-colors");
|
||||
return true;
|
||||
}
|
||||
|
||||
data.setColors(new ArrayList<>());
|
||||
data.setColorEnabled(false);
|
||||
saveAndUpdate(player, data);
|
||||
player.sendMessage(msg.get("color-reset"));
|
||||
msg.send(player, "color-reset");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -118,19 +118,19 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
GradientConfig cfg = module.getConfig();
|
||||
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(msg.get("color-copy-usage"));
|
||||
msg.send(player, "color-copy-usage");
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(args[1]);
|
||||
if (target == null) {
|
||||
player.sendMessage(msg.get("player-not-found"));
|
||||
msg.send(player, "player-not-found");
|
||||
return true;
|
||||
}
|
||||
|
||||
GradientPlayerData targetData = module.getDataManager().getPlayerData(target.getUniqueId());
|
||||
if (!targetData.hasColors()) {
|
||||
player.sendMessage(msg.get("color-copy-no-colors", "player", target.getName()));
|
||||
msg.send(player, "color-copy-no-colors", "player", target.getName());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -159,12 +159,12 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
GradientConfig cfg = module.getConfig();
|
||||
|
||||
if (args.length > cfg.getMaxColors()) {
|
||||
player.sendMessage(msg.get("too-many-colors", "max", String.valueOf(cfg.getMaxColors())));
|
||||
msg.send(player, "too-many-colors", "max", String.valueOf(cfg.getMaxColors()));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length < cfg.getMinColors()) {
|
||||
player.sendMessage(msg.get("not-enough-colors", "min", String.valueOf(cfg.getMinColors())));
|
||||
msg.send(player, "not-enough-colors", "min", String.valueOf(cfg.getMinColors()));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -179,7 +179,7 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
for (String arg : args) {
|
||||
String color = arg.startsWith("#") ? arg : "#" + arg;
|
||||
if (!GradientUtil.isValidHex(color)) {
|
||||
player.sendMessage(msg.get("invalid-color", "color", arg));
|
||||
msg.send(player, "invalid-color", "color", arg);
|
||||
return true;
|
||||
}
|
||||
colors.add(color.toUpperCase());
|
||||
|
|
@ -202,7 +202,7 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
long timePassed = System.currentTimeMillis() - lastChange;
|
||||
if (timePassed < cooldownMs) {
|
||||
long remaining = (cooldownMs - timePassed) / GradientConstants.MILLIS_PER_SECOND;
|
||||
player.sendMessage(module.getMessages().get("cooldown", "time", String.valueOf(remaining)));
|
||||
module.getMessages().send(player, "cooldown", "time", String.valueOf(remaining));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
@ -215,7 +215,7 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
|
|||
}
|
||||
int balance = module.getPlayerPointsAPI().look(player.getUniqueId());
|
||||
if (balance < price) {
|
||||
player.sendMessage(module.getMessages().get("not-enough-points-color", "price", String.valueOf(price)));
|
||||
module.getMessages().send(player, "not-enough-points-color", "price", String.valueOf(price));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -48,17 +48,17 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
|
|||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
|
||||
@NotNull String label, @NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(module.getMessages().get("only-player"));
|
||||
module.getMessages().send(sender, "only-player");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!player.hasPermission("gradient.prefix")) {
|
||||
player.sendMessage(module.getMessages().get("no-permission"));
|
||||
module.getMessages().send(player, "no-permission");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(module.getMessages().get("prefix-help"));
|
||||
module.getMessages().send(player, "prefix-help");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -76,14 +76,14 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
|
|||
GradientMessages msg = module.getMessages();
|
||||
|
||||
if (!data.hasPrefix()) {
|
||||
player.sendMessage(msg.get("prefix-no-prefix"));
|
||||
msg.send(player, "prefix-no-prefix");
|
||||
return true;
|
||||
}
|
||||
|
||||
data.setPrefixEnabled(true);
|
||||
module.getLuckPermsHook().setPrefix(player, DisplayNameUtil.buildColoredPrefix(module, data));
|
||||
saveAndUpdate(player, data);
|
||||
player.sendMessage(msg.get("prefix-enabled"));
|
||||
msg.send(player, "prefix-enabled");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -92,7 +92,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
|
|||
data.setPrefixEnabled(false);
|
||||
module.getLuckPermsHook().removePrefix(player);
|
||||
saveAndUpdate(player, data);
|
||||
player.sendMessage(module.getMessages().get("prefix-disabled"));
|
||||
module.getMessages().send(player, "prefix-disabled");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -101,7 +101,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
|
|||
GradientMessages msg = module.getMessages();
|
||||
|
||||
if (!data.hasPrefix()) {
|
||||
player.sendMessage(msg.get("prefix-no-prefix"));
|
||||
msg.send(player, "prefix-no-prefix");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -109,7 +109,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
|
|||
data.setPrefixEnabled(false);
|
||||
module.getLuckPermsHook().removePrefix(player);
|
||||
saveAndUpdate(player, data);
|
||||
player.sendMessage(msg.get("prefix-reset-success"));
|
||||
msg.send(player, "prefix-reset-success");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -119,27 +119,27 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
|
|||
String prefix = String.join(" ", args);
|
||||
|
||||
if (prefix.trim().isEmpty()) {
|
||||
player.sendMessage(msg.get("prefix-help"));
|
||||
msg.send(player, "prefix-help");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (COLOR_CODE_PATTERN.matcher(prefix).find()) {
|
||||
player.sendMessage(msg.get("prefix-no-colors"));
|
||||
msg.send(player, "prefix-no-colors");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!ALLOWED_PREFIX_PATTERN.matcher(prefix).matches()) {
|
||||
player.sendMessage(msg.get("prefix-invalid-chars"));
|
||||
msg.send(player, "prefix-invalid-chars");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (cfg.isPrefixBlacklisted(prefix)) {
|
||||
player.sendMessage(msg.get("prefix-blacklisted"));
|
||||
msg.send(player, "prefix-blacklisted");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (prefix.length() > cfg.getMaxPrefixLength()) {
|
||||
player.sendMessage(msg.get("prefix-too-long", "max", String.valueOf(cfg.getMaxPrefixLength())));
|
||||
msg.send(player, "prefix-too-long", "max", String.valueOf(cfg.getMaxPrefixLength()));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -172,7 +172,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
|
|||
long timePassed = System.currentTimeMillis() - lastChange;
|
||||
if (timePassed < cooldownMs) {
|
||||
long remaining = (cooldownMs - timePassed) / GradientConstants.MILLIS_PER_SECOND;
|
||||
player.sendMessage(module.getMessages().get("cooldown", "time", String.valueOf(remaining)));
|
||||
module.getMessages().send(player, "cooldown", "time", String.valueOf(remaining));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
@ -185,7 +185,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
|
|||
}
|
||||
int balance = module.getPlayerPointsAPI().look(player.getUniqueId());
|
||||
if (balance < price) {
|
||||
player.sendMessage(module.getMessages().get("not-enough-points-prefix", "price", String.valueOf(price)));
|
||||
module.getMessages().send(player, "not-enough-points-prefix", "price", String.valueOf(price));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
package com.loki.lochat.gradient.config;
|
||||
|
||||
import com.loki.lochat.utils.ChatFormatter;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
|
@ -43,11 +45,17 @@ public class GradientMessages {
|
|||
loadMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает сообщение как строку с MiniMessage тегами
|
||||
*/
|
||||
public String get(String key) {
|
||||
String message = messages.getString(key, "&#FF0000Сообщение не найдено: " + key);
|
||||
return ChatFormatter.convertAllColors(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает сообщение как строку с заменами
|
||||
*/
|
||||
public String get(String key, String... replacements) {
|
||||
String message = messages.getString(key, "&#FF0000Сообщение не найдено: " + key);
|
||||
for (int i = 0; i < replacements.length; i += 2) {
|
||||
|
|
@ -57,4 +65,32 @@ public class GradientMessages {
|
|||
}
|
||||
return ChatFormatter.convertAllColors(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает сообщение как Component
|
||||
*/
|
||||
public Component getComponent(String key) {
|
||||
return ChatFormatter.parse(get(key));
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает сообщение как Component с заменами
|
||||
*/
|
||||
public Component getComponent(String key, String... replacements) {
|
||||
return ChatFormatter.parse(get(key, replacements));
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет сообщение игроку
|
||||
*/
|
||||
public void send(CommandSender sender, String key) {
|
||||
sender.sendMessage(getComponent(key));
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет сообщение игроку с заменами
|
||||
*/
|
||||
public void send(CommandSender sender, String key, String... replacements) {
|
||||
sender.sendMessage(getComponent(key, replacements));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ public class GradientGUIListener implements Listener {
|
|||
}
|
||||
int balance = module.getPlayerPointsAPI().look(player.getUniqueId());
|
||||
if (balance < price) {
|
||||
player.sendMessage(msg.get(PRICE_MSG_KEYS.get(gui.getType()), "price", String.valueOf(price)));
|
||||
msg.send(player, PRICE_MSG_KEYS.get(gui.getType()), "price", String.valueOf(price));
|
||||
return;
|
||||
}
|
||||
module.getPlayerPointsAPI().take(player.getUniqueId(), price);
|
||||
|
|
@ -70,7 +70,7 @@ public class GradientGUIListener implements Listener {
|
|||
data.setColors(gui.getColors());
|
||||
data.setColorEnabled(true);
|
||||
data.setLastColorChange(System.currentTimeMillis());
|
||||
player.sendMessage(msg.get("color-success", "price", String.valueOf(price)));
|
||||
msg.send(player, "color-success", "price", String.valueOf(price));
|
||||
}
|
||||
case PREFIX -> {
|
||||
data.setPrefix(gui.getPrefix());
|
||||
|
|
@ -78,8 +78,8 @@ public class GradientGUIListener implements Listener {
|
|||
data.setPrefixPurchased(true);
|
||||
data.setLastPrefixChange(System.currentTimeMillis());
|
||||
module.getLuckPermsHook().setPrefix(player, DisplayNameUtil.buildColoredPrefix(module, data));
|
||||
player.sendMessage(msg.get(price > 0 ? "prefix-success" : "prefix-success-free",
|
||||
"price", String.valueOf(price)));
|
||||
msg.send(player, price > 0 ? "prefix-success" : "prefix-success-free",
|
||||
"price", String.valueOf(price));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue