diff --git a/src/main/java/com/alttd/playershops/commands/ShopCommand.java b/src/main/java/com/alttd/playershops/commands/ShopCommand.java
index 2e6c1d2..cfb9a66 100644
--- a/src/main/java/com/alttd/playershops/commands/ShopCommand.java
+++ b/src/main/java/com/alttd/playershops/commands/ShopCommand.java
@@ -1,5 +1,8 @@
package com.alttd.playershops.commands;
+import com.alttd.playershops.PlayerShops;
+import com.alttd.playershops.config.Config;
+import com.alttd.playershops.config.MessageConfig;
import com.alttd.playershops.gui.HomeGui;
import com.alttd.playershops.gui.ShopManagementGui;
import com.alttd.playershops.shop.PlayerShop;
@@ -24,6 +27,7 @@ public class ShopCommand implements CommandExecutor, TabCompleter {
}
switch (args[0].toLowerCase()) {
case "reload":
+ PlayerShops.getInstance().reloadConfigs();
break;
case "open":
HomeGui gui = new HomeGui(player.getUniqueId());
diff --git a/src/main/java/com/alttd/playershops/config/MessageConfig.java b/src/main/java/com/alttd/playershops/config/MessageConfig.java
index b093709..bd0f1f1 100644
--- a/src/main/java/com/alttd/playershops/config/MessageConfig.java
+++ b/src/main/java/com/alttd/playershops/config/MessageConfig.java
@@ -17,7 +17,7 @@ public class MessageConfig extends AbstractConfiguration {
version = config.getInt("config-version", 1);
config.set("config-version", 1);
- config.readConfig(Config.class, null);
+ config.readConfig(MessageConfig.class, null);
}
public static String SHOP_ALREADY_EXISTS = "This block is already a Shop";
@@ -26,11 +26,16 @@ public class MessageConfig extends AbstractConfiguration {
public static String BREAK_SHOP_WHILE_CONVERSING = "You can not break shop signs while editing them.";
public static String NO_PERMISSION_FOR_SHOP_TYPE = "You do not have permission to use shops.";
- void loadErrorMessages() {
- SHOP_ALREADY_EXISTS = getString("errors.shop-already-exists", SHOP_ALREADY_EXISTS);
- NO_SHOP_CREATE_PERMISSION = getString("errors.no-shop-create-permission", NO_SHOP_CREATE_PERMISSION);
- SHOP_LIMIT_REACHED = getString("errors.shop-limit-reached", SHOP_LIMIT_REACHED);
- 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);
+ private static void loadErrorMessages() {
+ SHOP_ALREADY_EXISTS = config.getString("errors.shop-already-exists", SHOP_ALREADY_EXISTS);
+ NO_SHOP_CREATE_PERMISSION = config.getString("errors.no-shop-create-permission", NO_SHOP_CREATE_PERMISSION);
+ SHOP_LIMIT_REACHED = config.getString("errors.shop-limit-reached", SHOP_LIMIT_REACHED);
+ BREAK_SHOP_WHILE_CONVERSING = config.getString("errors.break-shop-while-conversing", BREAK_SHOP_WHILE_CONVERSING);
+ NO_PERMISSION_FOR_SHOP_TYPE = config.getString("permissions-messages.shop-type", NO_PERMISSION_FOR_SHOP_TYPE);
+ }
+
+ public static String SHOP_INFO = "This shop - for .";
+ private static void otherMessages() {
+ SHOP_INFO = config.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 23f766b..b7baac7 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.
@@ -45,7 +50,7 @@ public class TransactionListener extends EventListener {
return;
Player player = event.getPlayer();
- if (!(event.getAction() == Action.RIGHT_CLICK_BLOCK))
+ if (!(event.getAction() == Action.RIGHT_CLICK_BLOCK) && !(event.getAction() == Action.LEFT_CLICK_BLOCK))
return;
Block block = event.getClickedBlock();
@@ -79,6 +84,11 @@ public class TransactionListener extends EventListener {
return;
}
+ if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
+ giveInfo(playerShop, player);
+ return;
+ }
+
if (ShopUtil.canManageShop(player, playerShop)) {
if (player.isSneaking())
return;
@@ -94,6 +104,29 @@ public class TransactionListener extends EventListener {
executeTransaction(player, playerShop);
}
+ private void giveInfo(PlayerShop playerShop, Player player) {
+ if (player.isSneaking())
+ return;
+ if (!playerShop.isInitialized())
+ return;
+
+ TagResolver.Single action;
+ switch (playerShop.getType()) {
+ case SELL -> action = Placeholder.unparsed("action", "sells");
+ case BUY -> action = Placeholder.unparsed("action", "buys");
+ case GAMBLE -> action = Placeholder.unparsed("action", "gambles");
+ default -> action = Placeholder.unparsed("action", "UNKNOWN");
+ }
+ TagResolver placeholders = TagResolver.resolver(action,
+ Placeholder.parsed("amount", "" + playerShop.getAmount()),
+ Placeholder.component("item", ShopUtil.itemNameComponent(playerShop.getItemStack())),
+ Placeholder.parsed("material", Util.capitalize(playerShop.getItemStack().getType().name())),
+ Placeholder.parsed("price", "" + ShopUtil.round(playerShop.getPrice()))
+ );
+
+ player.sendMiniMessage(MessageConfig.SHOP_INFO, placeholders);
+ }
+
private void executeTransaction(Player player, PlayerShop shop) {
if (shop == null || shop.getItemStack() == null)
return;
diff --git a/src/main/java/com/alttd/playershops/shop/PlayerShop.java b/src/main/java/com/alttd/playershops/shop/PlayerShop.java
index 3285486..75a2f15 100644
--- a/src/main/java/com/alttd/playershops/shop/PlayerShop.java
+++ b/src/main/java/com/alttd/playershops/shop/PlayerShop.java
@@ -152,9 +152,9 @@ public class PlayerShop {
MiniMessage miniMessage = MiniMessage.miniMessage();
TagResolver tagResolver = TagResolver.resolver(
Placeholder.unparsed("ownername", getOwnerName()),
- Placeholder.unparsed("price", String.valueOf(getPrice())),
+ Placeholder.unparsed("price", trimPrice(String.valueOf(ShopUtil.round(getPrice())))),
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++) {
signBlock.line(i, miniMessage.deserialize(signLines.get(i), tagResolver));
@@ -164,6 +164,13 @@ public class PlayerShop {
}.runTaskLater(PlayerShops.getInstance(), 2L);
}
+ private String trimPrice(String price) {
+ if (price.length() > 15) {
+ return price.substring(0, 13) + "!";
+ }
+ return price;
+ }
+
public double getPricePerItem() {
return this.getPrice() / this.getAmount();
}
diff --git a/src/main/java/com/alttd/playershops/utils/ShopUtil.java b/src/main/java/com/alttd/playershops/utils/ShopUtil.java
index 5ccb5ae..fc48bc7 100644
--- a/src/main/java/com/alttd/playershops/utils/ShopUtil.java
+++ b/src/main/java/com/alttd/playershops/utils/ShopUtil.java
@@ -3,6 +3,7 @@ package com.alttd.playershops.utils;
import com.alttd.playershops.shop.PlayerShop;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
+import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -156,17 +157,49 @@ public class ShopUtil {
return false;
}
- public static Component itemNameComponent(ItemStack item) {
- Component component = Component.empty();
+ public static Component trimmedItemNameComponent(ItemStack item) {
if(item == null || item.getType().equals(Material.AIR))
return Component.text("Nothing");
- boolean dname = item.hasItemMeta() && item.getItemMeta().hasDisplayName();
- if(dname) {
- component = component.append(item.getItemMeta().displayName());
- } else {
- component = component.append(Component.text(materialToName(item.getType()), NamedTextColor.WHITE));
+ return materialToTrimmedName(item.getType());
+ }
+
+ private static Component materialToTrimmedName(Material m) {
+ 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 == null || 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;
}
@@ -174,7 +207,7 @@ public class ShopUtil {
if (m.equals(Material.TNT)) {
return "TNT";
}
- String orig = m.name().toLowerCase();
+ String orig = m.toString().toLowerCase();
String[] splits = orig.split("_");
StringBuilder sb = new StringBuilder(orig.length());
int pos = 0;
@@ -193,4 +226,7 @@ public class ShopUtil {
return sb.toString();
}
+ public static double round(double price) {
+ return (double) Math.round(price * 100) / 100;
+ }
}