diff --git a/src/main/java/com/alttd/playershops/config/MessageConfig.java b/src/main/java/com/alttd/playershops/config/MessageConfig.java index b093709..bb27b80 100644 --- a/src/main/java/com/alttd/playershops/config/MessageConfig.java +++ b/src/main/java/com/alttd/playershops/config/MessageConfig.java @@ -33,4 +33,9 @@ public class MessageConfig extends AbstractConfiguration { BREAK_SHOP_WHILE_CONVERSING = getString("errors.break-shop-while-conversing", BREAK_SHOP_WHILE_CONVERSING); NO_PERMISSION_FOR_SHOP_TYPE = getString("permissions-messages.shop-type", NO_PERMISSION_FOR_SHOP_TYPE); } + + public static String SHOP_INFO = "This shop for ."; + void otherMessages() { + SHOP_INFO = getString("messages.shop-info", SHOP_INFO); + } } diff --git a/src/main/java/com/alttd/playershops/listener/TransactionListener.java b/src/main/java/com/alttd/playershops/listener/TransactionListener.java index 8a72a94..5de9de9 100644 --- a/src/main/java/com/alttd/playershops/listener/TransactionListener.java +++ b/src/main/java/com/alttd/playershops/listener/TransactionListener.java @@ -11,10 +11,14 @@ import com.alttd.playershops.shop.TransactionError; import com.alttd.playershops.utils.Logger; import com.alttd.playershops.utils.ShopUtil; import com.alttd.playershops.utils.Util; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -22,6 +26,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; /** * Dedicated class to listen to transactions for shops. @@ -105,8 +110,6 @@ public class TransactionListener extends EventListener { if (!playerShop.isInitialized()) return; - String message = "This shop () for "; - TagResolver.Single action; switch (playerShop.getType()) { case SELL -> action = Placeholder.unparsed("action", "sells"); @@ -116,12 +119,50 @@ public class TransactionListener extends EventListener { } TagResolver placeholders = TagResolver.resolver(action, Placeholder.parsed("amount", "" + playerShop.getAmount()), - Placeholder.component("item", playerShop.getItemStack().displayName()), + Placeholder.component("item", itemComponent(playerShop.getItemStack())), Placeholder.parsed("material", Util.capitalize(playerShop.getItemStack().getType().name())), Placeholder.parsed("price", "" + playerShop.getPrice()) ); - player.sendMiniMessage(message, placeholders); + player.sendMiniMessage(MessageConfig.SHOP_INFO, placeholders); + } + + private Component itemComponent(ItemStack item) { + Component component; + MiniMessage miniMessage = MiniMessage.miniMessage(); + if (item.getType().equals(Material.AIR)) + return miniMessage.deserialize("NONE"); + boolean dname = item.hasItemMeta() && item.getItemMeta().hasDisplayName(); + if (dname) { + component = item.getItemMeta().displayName(); + } else { + component = Component.text(materialToName(item.getType()), NamedTextColor.WHITE); + } + component = component.hoverEvent(item.asHoverEvent()); + return component; + } + + private String materialToName(Material m) { + if (m.equals(Material.TNT)) { + return "TNT"; + } + String orig = m.toString().toLowerCase(); + String[] splits = orig.split("_"); + StringBuilder sb = new StringBuilder(orig.length()); + int pos = 0; + for (String split : splits) { + sb.append(split); + int loc = sb.lastIndexOf(split); + char charLoc = sb.charAt(loc); + if (!(split.equalsIgnoreCase("of") || split.equalsIgnoreCase("and") || + split.equalsIgnoreCase("with") || split.equalsIgnoreCase("on"))) + sb.setCharAt(loc, Character.toUpperCase(charLoc)); + if (pos != splits.length - 1) + sb.append(' '); + ++pos; + } + + return sb.toString(); } private void executeTransaction(Player player, PlayerShop shop) {