diff --git a/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java b/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java index b55fe82..7fa2948 100644 --- a/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java +++ b/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java @@ -162,23 +162,31 @@ public class PlayerListener implements Listener { final Block attached = Util.getAttached(b); final Shop shop = attached == null ? null : plugin.getShopManager().getShop(attached.getLocation()); if (shop != null) { + final Location loc = shop.getLocation(); + String shopmode = ""; if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { if (p.hasPermission("quickshop.unlimited")) { shop.setUnlimited(!shop.isUnlimited()); - p.sendMessage(MsgUtil.p("command.toggle-unlimited", (shop.isUnlimited() ? "§e无限模式" : "§c有限模式"))); + shopmode = shop.isUnlimited() ? "§e无限模式" : "§c有限模式"; + p.sendMessage(MsgUtil.p("command.toggle-unlimited", shopmode)); return; } } else { if (shop.getShopType() == ShopType.BUYING && p.hasPermission("quickshop.create.sell")) { shop.setShopType(ShopType.SELLING); p.sendMessage(MsgUtil.p("command.now-selling", shop.getDataName())); + shopmode = "出售模式"; return; } else if (shop.getShopType() == ShopType.SELLING && p.hasPermission("quickshop.create.buy")) { shop.setShopType(ShopType.BUYING); p.sendMessage(MsgUtil.p("command.now-buying", shop.getDataName())); + shopmode = "收购模式"; return; } } + if (!shopmode.isEmpty()) { + plugin.log(String.format("玩家: %s 将 %s(%s,%s,%s) 的商店切换为 %s !", p.getName(), loc.getWorld().getName(), loc.getX(), loc.getY(), loc.getZ(), shopmode)); + } shop.setSignText(); shop.update(); } diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java b/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java index e2ed1d1..a9d287c 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java @@ -101,8 +101,16 @@ public class ShopManager { try { // Write it to the database final String q = "INSERT INTO shops (owner, price, itemConfig, x, y, z, world, unlimited, type) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; - plugin.getDB().execute(q, shop.getOwner().toString(), shop.getPrice(), Util.serialize(item), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), loc.getWorld().getName(), - (shop.isUnlimited() ? 1 : 0), shop.getShopType().toID()); + plugin.getDB().execute(q, + shop.getOwner().toString(), + shop.getPrice(), + Util.serialize(item), + loc.getBlockX(), + loc.getBlockY(), + loc.getBlockZ(), + loc.getWorld().getName(), + (shop.isUnlimited() ? 1 : 0), + shop.getShopType().toID()); // Add it to the world addShop(loc.getWorld().getName(), shop); } catch (final Exception e) { @@ -279,7 +287,7 @@ public class ShopManager { createShop(shop); p.sendMessage(MsgUtil.p("success-created-shop")); final Location loc = shop.getLocation(); - plugin.log(p.getName() + " created a " + shop.getDataName() + " shop at (" + loc.getWorld().getName() + " - " + loc.getX() + "," + loc.getY() + "," + loc.getZ() + ")"); + plugin.log(String.format("玩家: %s 创建了一个 %s 商店 在 (%s - %s,%s,%s)", p.getName(), shop.getDataName(), loc.getWorld().getName(), loc.getX(), loc.getY(), loc.getZ())); if (!plugin.getConfig().getBoolean("shop.lock")) { // Warn them if they haven't been warned since // reboot @@ -390,14 +398,20 @@ public class ShopManager { if (plugin.getConfigManager().isShowTax()) { String msg = MsgUtil.p("player-bought-from-your-store-tax", p.getName(), "" + amount, shop.getDataName(), Util.format((tax * total))); if (stock == amount) { - msg += "\n" + MsgUtil.p("shop-out-of-stock", "" + shop.getLocation().getBlockX(), "" + shop.getLocation().getBlockY(), "" + shop.getLocation().getBlockZ(), + msg += "\n" + MsgUtil.p("shop-out-of-stock", + "" + shop.getLocation().getBlockX(), + "" + shop.getLocation().getBlockY(), + "" + shop.getLocation().getBlockZ(), shop.getDataName()); } MsgUtil.send(shop.getOwner(), msg); } else { String msg = MsgUtil.p("player-bought-from-your-store", p.getName(), "" + amount, shop.getDataName()); if (stock == amount) { - msg += "\n" + MsgUtil.p("shop-out-of-stock", "" + shop.getLocation().getBlockX(), "" + shop.getLocation().getBlockY(), "" + shop.getLocation().getBlockZ(), + msg += "\n" + MsgUtil.p("shop-out-of-stock", + "" + shop.getLocation().getBlockX(), + "" + shop.getLocation().getBlockY(), + "" + shop.getLocation().getBlockZ(), shop.getDataName()); } MsgUtil.send(shop.getOwner(), msg); @@ -406,7 +420,7 @@ public class ShopManager { // Transfers the item from A to B shop.sell(p, amount); MsgUtil.sendPurchaseSuccess(p, shop, amount); - plugin.log(String.format("%s 从 %s 购买了 %s 件商品 花费 %s", p.getName(), shop.toString(), amount, shop.getPrice() * amount)); + plugin.log(String.format("玩家: %s 从 %s 购买了 %s 件商品 花费 %s", p.getName(), shop.toString(), amount, shop.getPrice() * amount)); } else if (shop.isBuying()) { final int space = shop.getRemainingSpace(); if (space < amount) { @@ -462,7 +476,7 @@ public class ShopManager { } shop.buy(p, amount); MsgUtil.sendSellSuccess(p, shop, amount); - plugin.log(String.format("%s 出售了 %s 件商品 到 %s 获得 %s", p.getName(), amount, shop.toString(), shop.getPrice() * amount)); + plugin.log(String.format("玩家: %s 出售了 %s 件商品 到 %s 获得 %s", p.getName(), amount, shop.toString(), shop.getPrice() * amount)); } shop.setSignText(); // Update the signs count } diff --git a/src/main/java/org/maxgamer/QuickShop/Util/NMS.java b/src/main/java/org/maxgamer/QuickShop/Util/NMS.java index b86d1ed..45d4016 100644 --- a/src/main/java/org/maxgamer/QuickShop/Util/NMS.java +++ b/src/main/java/org/maxgamer/QuickShop/Util/NMS.java @@ -1,8 +1,5 @@ package org.maxgamer.QuickShop.Util; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - import org.bukkit.entity.Item; import org.bukkit.inventory.ItemStack; @@ -10,43 +7,9 @@ public class NMS { public static void safeGuard(final Item item) throws ClassNotFoundException { rename(item.getItemStack()); - protect(item); item.setPickupDelay(2147483647); } - private static void protect(final Item item) { - try { - final Field itemField = item.getClass().getDeclaredField("item"); - itemField.setAccessible(true); - final Object nmsEntityItem = itemField.get(item); - Method getItemStack; - try { - getItemStack = nmsEntityItem.getClass().getMethod("getItemStack", new Class[0]); - } catch (final NoSuchMethodException e) { - try { - getItemStack = nmsEntityItem.getClass().getMethod("d", new Class[0]); - } catch (final NoSuchMethodException e2) { - return; - } - } - final Object itemStack = getItemStack.invoke(nmsEntityItem, new Object[0]); - Field countField; - try { - countField = itemStack.getClass().getDeclaredField("count"); - } catch (final NoSuchFieldException e) { - countField = itemStack.getClass().getDeclaredField("a"); - } - countField.setAccessible(true); - countField.set(itemStack, Integer.valueOf(1)); - } catch (final NoSuchFieldException e) { - e.printStackTrace(); - System.out.println("[QuickShop] Could not protect item from pickup properly! Dupes are now possible."); - } catch (final Exception e) { - System.out.println("Other error"); - e.printStackTrace(); - } - } - private static void rename(final ItemStack iStack) { MarkUtil.addMark(iStack); } diff --git a/src/main/java/org/maxgamer/QuickShop/Watcher/LogWatcher.java b/src/main/java/org/maxgamer/QuickShop/Watcher/LogWatcher.java index 7f74b2a..117e275 100644 --- a/src/main/java/org/maxgamer/QuickShop/Watcher/LogWatcher.java +++ b/src/main/java/org/maxgamer/QuickShop/Watcher/LogWatcher.java @@ -24,13 +24,13 @@ public class LogWatcher implements Runnable { this.ps = new PrintStream(fos); } catch (FileNotFoundException e) { e.printStackTrace(); - plugin.getLogger().severe("Log file not found!"); + plugin.getLogger().severe("日志文件未找到!"); } catch (IOException e) { e.printStackTrace(); - plugin.getLogger().severe("Could not create log file!"); + plugin.getLogger().severe("无法创建日志文件!"); } } - + @Override public void run() { synchronized (logs) {