Trimmed item name and price on signs

This commit is contained in:
Stijn 2022-08-31 19:20:40 +02:00 committed by Len
parent 41cb2b2b65
commit aa00c8d1f7
3 changed files with 51 additions and 49 deletions

View File

@ -119,7 +119,7 @@ public class TransactionListener extends EventListener {
} }
TagResolver placeholders = TagResolver.resolver(action, TagResolver placeholders = TagResolver.resolver(action,
Placeholder.parsed("amount", "" + playerShop.getAmount()), Placeholder.parsed("amount", "" + playerShop.getAmount()),
Placeholder.component("item", itemComponent(playerShop.getItemStack())), Placeholder.component("item", ShopUtil.itemNameComponent(playerShop.getItemStack())),
Placeholder.parsed("material", Util.capitalize(playerShop.getItemStack().getType().name())), Placeholder.parsed("material", Util.capitalize(playerShop.getItemStack().getType().name())),
Placeholder.parsed("price", "" + playerShop.getPrice()) Placeholder.parsed("price", "" + playerShop.getPrice())
); );
@ -127,44 +127,6 @@ public class TransactionListener extends EventListener {
player.sendMiniMessage(MessageConfig.SHOP_INFO, 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) { private void executeTransaction(Player player, PlayerShop shop) {
if (shop == null || shop.getItemStack() == null) if (shop == null || shop.getItemStack() == null)
return; return;

View File

@ -152,9 +152,9 @@ public class PlayerShop {
MiniMessage miniMessage = MiniMessage.miniMessage(); MiniMessage miniMessage = MiniMessage.miniMessage();
TagResolver tagResolver = TagResolver.resolver( TagResolver tagResolver = TagResolver.resolver(
Placeholder.unparsed("ownername", getOwnerName()), Placeholder.unparsed("ownername", getOwnerName()),
Placeholder.unparsed("price", String.valueOf(getPrice())), Placeholder.unparsed("price", trimPrice(String.valueOf(getPrice()))),
Placeholder.unparsed("amount", String.valueOf(getAmount())), Placeholder.unparsed("amount", String.valueOf(getAmount())),
Placeholder.component("itemname", ShopUtil.itemNameComponent(getItemStack())) Placeholder.component("itemname", ShopUtil.trimmedItemNameComponent(getItemStack()))
); );
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
signBlock.line(i, miniMessage.deserialize(signLines.get(i), tagResolver)); signBlock.line(i, miniMessage.deserialize(signLines.get(i), tagResolver));
@ -164,6 +164,13 @@ public class PlayerShop {
}.runTaskLater(PlayerShops.getInstance(), 2L); }.runTaskLater(PlayerShops.getInstance(), 2L);
} }
private String trimPrice(String price) {
if (price.length() > 15) {
return price.substring(0, 13) + "<red>!</red>";
}
return price;
}
public double getPricePerItem() { public double getPricePerItem() {
return this.getPrice() / this.getAmount(); return this.getPrice() / this.getAmount();
} }

View File

@ -3,6 +3,7 @@ package com.alttd.playershops.utils;
import com.alttd.playershops.shop.PlayerShop; import com.alttd.playershops.shop.PlayerShop;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -156,17 +157,49 @@ public class ShopUtil {
return false; return false;
} }
public static Component itemNameComponent(ItemStack item) { public static Component trimmedItemNameComponent(ItemStack item) {
Component component = Component.empty();
if(item == null || item.getType().equals(Material.AIR)) if(item == null || item.getType().equals(Material.AIR))
return Component.text("Nothing"); return Component.text("Nothing");
boolean dname = item.hasItemMeta() && item.getItemMeta().hasDisplayName(); return materialToTrimmedName(item.getType());
if(dname) { }
component = component.append(item.getItemMeta().displayName());
} else { private static Component materialToTrimmedName(Material m) {
component = component.append(Component.text(materialToName(item.getType()), NamedTextColor.WHITE)); if (m.equals(Material.TNT)) {
return Component.text("TNT", NamedTextColor.WHITE);
}
String orig = m.name().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;
} }
if (sb.length() > 10)
return Component.text(sb.substring(0, 8), NamedTextColor.WHITE).append(Component.text("!", NamedTextColor.RED));
return Component.text(sb.toString(), NamedTextColor.WHITE);
}
public static Component itemNameComponent(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; return component;
} }
@ -174,7 +207,7 @@ public class ShopUtil {
if (m.equals(Material.TNT)) { if (m.equals(Material.TNT)) {
return "TNT"; return "TNT";
} }
String orig = m.name().toLowerCase(); String orig = m.toString().toLowerCase();
String[] splits = orig.split("_"); String[] splits = orig.split("_");
StringBuilder sb = new StringBuilder(orig.length()); StringBuilder sb = new StringBuilder(orig.length());
int pos = 0; int pos = 0;