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:
loki5512344 2025-12-30 21:59:33 +01:00
parent 29ae373554
commit d2c45b3f0c
5 changed files with 89 additions and 53 deletions

View file

@ -41,7 +41,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
GradientMessages msg = module.getMessages(); GradientMessages msg = module.getMessages();
if (!sender.hasPermission("gradient.admin")) { if (!sender.hasPermission("gradient.admin")) {
sender.sendMessage(msg.get("no-permission")); msg.send(sender, "no-permission");
return true; return true;
} }
@ -55,7 +55,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
switch (subCommand) { switch (subCommand) {
case "reload" -> { case "reload" -> {
module.reload(); module.reload();
sender.sendMessage(msg.get("reload-success")); msg.send(sender, "reload-success");
} }
case "info" -> { case "info" -> {
if (args.length < 2) { if (args.length < 2) {
@ -105,24 +105,24 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
private void handleInfo(CommandSender sender, String playerName, GradientMessages msg) { private void handleInfo(CommandSender sender, String playerName, GradientMessages msg) {
OfflinePlayer target = Bukkit.getOfflinePlayer(playerName); OfflinePlayer target = Bukkit.getOfflinePlayer(playerName);
if (!target.hasPlayedBefore() && !target.isOnline()) { if (!target.hasPlayedBefore() && !target.isOnline()) {
sender.sendMessage(msg.get("player-not-found")); msg.send(sender, "player-not-found");
return; return;
} }
GradientPlayerData data = module.getDataManager().getPlayerData(target.getUniqueId()); GradientPlayerData data = module.getDataManager().getPlayerData(target.getUniqueId());
sender.sendMessage(msg.get("info-header", "player", playerName)); msg.send(sender, "info-header", "player", playerName);
sender.sendMessage(msg.get("info-prefix", "prefix", data.hasPrefix() ? data.getPrefix() : "нет")); msg.send(sender, "info-prefix", "prefix", data.hasPrefix() ? data.getPrefix() : "нет");
sender.sendMessage(msg.get("info-prefix-enabled", "enabled", data.isPrefixEnabled() ? "да" : "нет")); msg.send(sender, "info-prefix-enabled", "enabled", data.isPrefixEnabled() ? "да" : "нет");
sender.sendMessage(msg.get("info-colors", "colors", data.hasColors() ? String.join(", ", data.getColors()) : "нет")); msg.send(sender, "info-colors", "colors", data.hasColors() ? String.join(", ", data.getColors()) : "нет");
sender.sendMessage(msg.get("info-color-enabled", "enabled", data.isColorEnabled() ? "да" : "нет")); msg.send(sender, "info-color-enabled", "enabled", data.isColorEnabled() ? "да" : "нет");
sender.sendMessage(msg.get("info-prefix-purchased", "purchased", data.isPrefixPurchased() ? "да" : "нет")); msg.send(sender, "info-prefix-purchased", "purchased", data.isPrefixPurchased() ? "да" : "нет");
} }
private void handleSetColor(CommandSender sender, String[] args, GradientMessages msg) { private void handleSetColor(CommandSender sender, String[] args, GradientMessages msg) {
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]); OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
if (!target.hasPlayedBefore() && !target.isOnline()) { if (!target.hasPlayedBefore() && !target.isOnline()) {
sender.sendMessage(msg.get("player-not-found")); msg.send(sender, "player-not-found");
return; return;
} }
@ -130,7 +130,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
for (int i = 2; i < args.length; i++) { for (int i = 2; i < args.length; i++) {
String color = args[i].startsWith("#") ? args[i] : "#" + args[i]; String color = args[i].startsWith("#") ? args[i] : "#" + args[i];
if (!GradientUtil.isValidHex(color)) { if (!GradientUtil.isValidHex(color)) {
sender.sendMessage(msg.get("invalid-color", "color", args[i])); msg.send(sender, "invalid-color", "color", args[i]);
return; return;
} }
colors.add(color.toUpperCase()); colors.add(color.toUpperCase());
@ -138,7 +138,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
GradientConfig cfg = module.getConfig(); GradientConfig cfg = module.getConfig();
if (colors.size() > cfg.getMaxColors()) { 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; return;
} }
@ -161,7 +161,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
private void handleSetPrefix(CommandSender sender, String[] args, GradientMessages msg) { private void handleSetPrefix(CommandSender sender, String[] args, GradientMessages msg) {
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]); OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
if (!target.hasPlayedBefore() && !target.isOnline()) { if (!target.hasPlayedBefore() && !target.isOnline()) {
sender.sendMessage(msg.get("player-not-found")); msg.send(sender, "player-not-found");
return; return;
} }
@ -174,7 +174,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
GradientConfig cfg = module.getConfig(); GradientConfig cfg = module.getConfig();
if (prefix.length() > cfg.getMaxPrefixLength()) { 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; return;
} }
@ -205,7 +205,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]); OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
if (!target.hasPlayedBefore() && !target.isOnline()) { if (!target.hasPlayedBefore() && !target.isOnline()) {
sender.sendMessage(msg.get("player-not-found")); msg.send(sender, "player-not-found");
return; return;
} }
@ -232,7 +232,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]); OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
if (!target.hasPlayedBefore() && !target.isOnline()) { if (!target.hasPlayedBefore() && !target.isOnline()) {
sender.sendMessage(msg.get("player-not-found")); msg.send(sender, "player-not-found");
return; return;
} }
@ -265,7 +265,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]); OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
if (!target.hasPlayedBefore() && !target.isOnline()) { if (!target.hasPlayedBefore() && !target.isOnline()) {
sender.sendMessage(msg.get("player-not-found")); msg.send(sender, "player-not-found");
return; return;
} }
@ -293,7 +293,7 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]); OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
if (!target.hasPlayedBefore() && !target.isOnline()) { if (!target.hasPlayedBefore() && !target.isOnline()) {
sender.sendMessage(msg.get("player-not-found")); msg.send(sender, "player-not-found");
return; return;
} }

View file

@ -51,17 +51,17 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) { @NotNull String label, @NotNull String[] args) {
if (!(sender instanceof Player player)) { if (!(sender instanceof Player player)) {
sender.sendMessage(module.getMessages().get("only-player")); module.getMessages().send(sender, "only-player");
return true; return true;
} }
if (!player.hasPermission("gradient.color")) { if (!player.hasPermission("gradient.color")) {
player.sendMessage(module.getMessages().get("no-permission")); module.getMessages().send(player, "no-permission");
return true; return true;
} }
if (args.length == 0) { if (args.length == 0) {
player.sendMessage(module.getMessages().get("color-help")); module.getMessages().send(player, "color-help");
return true; return true;
} }
@ -79,13 +79,13 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
GradientMessages msg = module.getMessages(); GradientMessages msg = module.getMessages();
if (!data.hasColors()) { if (!data.hasColors()) {
player.sendMessage(msg.get("color-no-colors")); msg.send(player, "color-no-colors");
return true; return true;
} }
data.setColorEnabled(true); data.setColorEnabled(true);
saveAndUpdate(player, data); saveAndUpdate(player, data);
player.sendMessage(msg.get("color-enabled")); msg.send(player, "color-enabled");
return true; return true;
} }
@ -93,7 +93,7 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
GradientPlayerData data = module.getDataManager().getPlayerData(player.getUniqueId()); GradientPlayerData data = module.getDataManager().getPlayerData(player.getUniqueId());
data.setColorEnabled(false); data.setColorEnabled(false);
saveAndUpdate(player, data); saveAndUpdate(player, data);
player.sendMessage(module.getMessages().get("color-disabled")); module.getMessages().send(player, "color-disabled");
return true; return true;
} }
@ -102,14 +102,14 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
GradientMessages msg = module.getMessages(); GradientMessages msg = module.getMessages();
if (!data.hasColors()) { if (!data.hasColors()) {
player.sendMessage(msg.get("color-no-colors")); msg.send(player, "color-no-colors");
return true; return true;
} }
data.setColors(new ArrayList<>()); data.setColors(new ArrayList<>());
data.setColorEnabled(false); data.setColorEnabled(false);
saveAndUpdate(player, data); saveAndUpdate(player, data);
player.sendMessage(msg.get("color-reset")); msg.send(player, "color-reset");
return true; return true;
} }
@ -118,19 +118,19 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
GradientConfig cfg = module.getConfig(); GradientConfig cfg = module.getConfig();
if (args.length < 2) { if (args.length < 2) {
player.sendMessage(msg.get("color-copy-usage")); msg.send(player, "color-copy-usage");
return true; return true;
} }
Player target = Bukkit.getPlayer(args[1]); Player target = Bukkit.getPlayer(args[1]);
if (target == null) { if (target == null) {
player.sendMessage(msg.get("player-not-found")); msg.send(player, "player-not-found");
return true; return true;
} }
GradientPlayerData targetData = module.getDataManager().getPlayerData(target.getUniqueId()); GradientPlayerData targetData = module.getDataManager().getPlayerData(target.getUniqueId());
if (!targetData.hasColors()) { 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; return true;
} }
@ -159,12 +159,12 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
GradientConfig cfg = module.getConfig(); GradientConfig cfg = module.getConfig();
if (args.length > cfg.getMaxColors()) { 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; return true;
} }
if (args.length < cfg.getMinColors()) { 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; return true;
} }
@ -179,7 +179,7 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
for (String arg : args) { for (String arg : args) {
String color = arg.startsWith("#") ? arg : "#" + arg; String color = arg.startsWith("#") ? arg : "#" + arg;
if (!GradientUtil.isValidHex(color)) { if (!GradientUtil.isValidHex(color)) {
player.sendMessage(msg.get("invalid-color", "color", arg)); msg.send(player, "invalid-color", "color", arg);
return true; return true;
} }
colors.add(color.toUpperCase()); colors.add(color.toUpperCase());
@ -202,7 +202,7 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
long timePassed = System.currentTimeMillis() - lastChange; long timePassed = System.currentTimeMillis() - lastChange;
if (timePassed < cooldownMs) { if (timePassed < cooldownMs) {
long remaining = (cooldownMs - timePassed) / GradientConstants.MILLIS_PER_SECOND; 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 false;
} }
return true; return true;
@ -215,7 +215,7 @@ public class GradientColorCommand implements CommandExecutor, TabCompleter {
} }
int balance = module.getPlayerPointsAPI().look(player.getUniqueId()); int balance = module.getPlayerPointsAPI().look(player.getUniqueId());
if (balance < price) { 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 false;
} }
return true; return true;

View file

@ -48,17 +48,17 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) { @NotNull String label, @NotNull String[] args) {
if (!(sender instanceof Player player)) { if (!(sender instanceof Player player)) {
sender.sendMessage(module.getMessages().get("only-player")); module.getMessages().send(sender, "only-player");
return true; return true;
} }
if (!player.hasPermission("gradient.prefix")) { if (!player.hasPermission("gradient.prefix")) {
player.sendMessage(module.getMessages().get("no-permission")); module.getMessages().send(player, "no-permission");
return true; return true;
} }
if (args.length == 0) { if (args.length == 0) {
player.sendMessage(module.getMessages().get("prefix-help")); module.getMessages().send(player, "prefix-help");
return true; return true;
} }
@ -76,14 +76,14 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
GradientMessages msg = module.getMessages(); GradientMessages msg = module.getMessages();
if (!data.hasPrefix()) { if (!data.hasPrefix()) {
player.sendMessage(msg.get("prefix-no-prefix")); msg.send(player, "prefix-no-prefix");
return true; return true;
} }
data.setPrefixEnabled(true); data.setPrefixEnabled(true);
module.getLuckPermsHook().setPrefix(player, DisplayNameUtil.buildColoredPrefix(module, data)); module.getLuckPermsHook().setPrefix(player, DisplayNameUtil.buildColoredPrefix(module, data));
saveAndUpdate(player, data); saveAndUpdate(player, data);
player.sendMessage(msg.get("prefix-enabled")); msg.send(player, "prefix-enabled");
return true; return true;
} }
@ -92,7 +92,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
data.setPrefixEnabled(false); data.setPrefixEnabled(false);
module.getLuckPermsHook().removePrefix(player); module.getLuckPermsHook().removePrefix(player);
saveAndUpdate(player, data); saveAndUpdate(player, data);
player.sendMessage(module.getMessages().get("prefix-disabled")); module.getMessages().send(player, "prefix-disabled");
return true; return true;
} }
@ -101,7 +101,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
GradientMessages msg = module.getMessages(); GradientMessages msg = module.getMessages();
if (!data.hasPrefix()) { if (!data.hasPrefix()) {
player.sendMessage(msg.get("prefix-no-prefix")); msg.send(player, "prefix-no-prefix");
return true; return true;
} }
@ -109,7 +109,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
data.setPrefixEnabled(false); data.setPrefixEnabled(false);
module.getLuckPermsHook().removePrefix(player); module.getLuckPermsHook().removePrefix(player);
saveAndUpdate(player, data); saveAndUpdate(player, data);
player.sendMessage(msg.get("prefix-reset-success")); msg.send(player, "prefix-reset-success");
return true; return true;
} }
@ -119,27 +119,27 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
String prefix = String.join(" ", args); String prefix = String.join(" ", args);
if (prefix.trim().isEmpty()) { if (prefix.trim().isEmpty()) {
player.sendMessage(msg.get("prefix-help")); msg.send(player, "prefix-help");
return true; return true;
} }
if (COLOR_CODE_PATTERN.matcher(prefix).find()) { if (COLOR_CODE_PATTERN.matcher(prefix).find()) {
player.sendMessage(msg.get("prefix-no-colors")); msg.send(player, "prefix-no-colors");
return true; return true;
} }
if (!ALLOWED_PREFIX_PATTERN.matcher(prefix).matches()) { if (!ALLOWED_PREFIX_PATTERN.matcher(prefix).matches()) {
player.sendMessage(msg.get("prefix-invalid-chars")); msg.send(player, "prefix-invalid-chars");
return true; return true;
} }
if (cfg.isPrefixBlacklisted(prefix)) { if (cfg.isPrefixBlacklisted(prefix)) {
player.sendMessage(msg.get("prefix-blacklisted")); msg.send(player, "prefix-blacklisted");
return true; return true;
} }
if (prefix.length() > cfg.getMaxPrefixLength()) { 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; return true;
} }
@ -172,7 +172,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
long timePassed = System.currentTimeMillis() - lastChange; long timePassed = System.currentTimeMillis() - lastChange;
if (timePassed < cooldownMs) { if (timePassed < cooldownMs) {
long remaining = (cooldownMs - timePassed) / GradientConstants.MILLIS_PER_SECOND; 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 false;
} }
return true; return true;
@ -185,7 +185,7 @@ public class GradientPrefixCommand implements CommandExecutor, TabCompleter {
} }
int balance = module.getPlayerPointsAPI().look(player.getUniqueId()); int balance = module.getPlayerPointsAPI().look(player.getUniqueId());
if (balance < price) { 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 false;
} }
return true; return true;

View file

@ -1,6 +1,8 @@
package com.loki.lochat.gradient.config; package com.loki.lochat.gradient.config;
import com.loki.lochat.utils.ChatFormatter; 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.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -43,11 +45,17 @@ public class GradientMessages {
loadMessages(); loadMessages();
} }
/**
* Получает сообщение как строку с MiniMessage тегами
*/
public String get(String key) { public String get(String key) {
String message = messages.getString(key, "&#FF0000Сообщение не найдено: " + key); String message = messages.getString(key, "&#FF0000Сообщение не найдено: " + key);
return ChatFormatter.convertAllColors(message); return ChatFormatter.convertAllColors(message);
} }
/**
* Получает сообщение как строку с заменами
*/
public String get(String key, String... replacements) { public String get(String key, String... replacements) {
String message = messages.getString(key, "&#FF0000Сообщение не найдено: " + key); String message = messages.getString(key, "&#FF0000Сообщение не найдено: " + key);
for (int i = 0; i < replacements.length; i += 2) { for (int i = 0; i < replacements.length; i += 2) {
@ -57,4 +65,32 @@ public class GradientMessages {
} }
return ChatFormatter.convertAllColors(message); 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));
}
} }

View file

@ -57,7 +57,7 @@ public class GradientGUIListener implements Listener {
} }
int balance = module.getPlayerPointsAPI().look(player.getUniqueId()); int balance = module.getPlayerPointsAPI().look(player.getUniqueId());
if (balance < price) { 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; return;
} }
module.getPlayerPointsAPI().take(player.getUniqueId(), price); module.getPlayerPointsAPI().take(player.getUniqueId(), price);
@ -70,7 +70,7 @@ public class GradientGUIListener implements Listener {
data.setColors(gui.getColors()); data.setColors(gui.getColors());
data.setColorEnabled(true); data.setColorEnabled(true);
data.setLastColorChange(System.currentTimeMillis()); 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 -> { case PREFIX -> {
data.setPrefix(gui.getPrefix()); data.setPrefix(gui.getPrefix());
@ -78,8 +78,8 @@ public class GradientGUIListener implements Listener {
data.setPrefixPurchased(true); data.setPrefixPurchased(true);
data.setLastPrefixChange(System.currentTimeMillis()); data.setLastPrefixChange(System.currentTimeMillis());
module.getLuckPermsHook().setPrefix(player, DisplayNameUtil.buildColoredPrefix(module, data)); module.getLuckPermsHook().setPrefix(player, DisplayNameUtil.buildColoredPrefix(module, data));
player.sendMessage(msg.get(price > 0 ? "prefix-success" : "prefix-success-free", msg.send(player, price > 0 ? "prefix-success" : "prefix-success-free",
"price", String.valueOf(price))); "price", String.valueOf(price));
} }
} }