diff --git a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java index d540351..81d92c8 100644 --- a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java +++ b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java @@ -7,14 +7,11 @@ import java.util.List; import java.util.Set; import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.Shop.Item.DisplayItem; -import org.maxgamer.QuickShop.Shop.Item.FakeItem_18; -import org.maxgamer.QuickShop.Shop.Item.FakeItem_19_111; import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.config.FileConfig; @@ -109,9 +106,9 @@ public class ConfigManager { plugin.getLogger().info("魔改库功能测试正常..."); this.enableMagicLib = true; } catch (final Error | Exception e) { - plugin.getLogger().warning("+========================================="); - plugin.getLogger().warning("| 警告: 启动魔改库失败 将使用GUI商店界面..."); - plugin.getLogger().warning("+========================================="); + Log.d("+========================================="); + Log.d("| 警告: 启动魔改库失败 将使用GUI商店界面..."); + Log.d("+========================================="); } } } diff --git a/src/main/java/org/maxgamer/QuickShop/QuickShop.java b/src/main/java/org/maxgamer/QuickShop/QuickShop.java index d689572..06d24e8 100644 --- a/src/main/java/org/maxgamer/QuickShop/QuickShop.java +++ b/src/main/java/org/maxgamer/QuickShop/QuickShop.java @@ -1,12 +1,20 @@ package org.maxgamer.QuickShop; import java.io.File; -import java.sql.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; import java.util.Map.Entry; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; @@ -18,18 +26,27 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; import org.maxgamer.QuickShop.Command.QuickShopCommands; import org.maxgamer.QuickShop.Config.ConfigManager; -import org.maxgamer.QuickShop.Database.*; +import org.maxgamer.QuickShop.Database.Database; +import org.maxgamer.QuickShop.Database.DatabaseCore; +import org.maxgamer.QuickShop.Database.DatabaseHelper; +import org.maxgamer.QuickShop.Database.MySQLCore; +import org.maxgamer.QuickShop.Database.SQLiteCore; import org.maxgamer.QuickShop.Economy.Economy; import org.maxgamer.QuickShop.Economy.EconomyCore; import org.maxgamer.QuickShop.Economy.Economy_Vault; -import org.maxgamer.QuickShop.Listeners.*; +import org.maxgamer.QuickShop.Listeners.BlockListener; +import org.maxgamer.QuickShop.Listeners.ChatListener; +import org.maxgamer.QuickShop.Listeners.LockListener; +import org.maxgamer.QuickShop.Listeners.PlayerListener; +import org.maxgamer.QuickShop.Listeners.ProtectListener; +import org.maxgamer.QuickShop.Listeners.WorldListener; +import org.maxgamer.QuickShop.Listeners.WowSuchCleanerListener; import org.maxgamer.QuickShop.Shop.ContainerShop; import org.maxgamer.QuickShop.Shop.Shop; import org.maxgamer.QuickShop.Shop.ShopManager; import org.maxgamer.QuickShop.Shop.ShopType; import org.maxgamer.QuickShop.Util.MsgUtil; import org.maxgamer.QuickShop.Util.Util; -import org.maxgamer.QuickShop.Watcher.ItemWatcher; import org.maxgamer.QuickShop.Watcher.LogWatcher; import pw.yumc.YumCore.config.FileConfig; @@ -49,7 +66,7 @@ public class QuickShop extends JavaPlugin { private Database database; /** The economy we hook into for transactions */ private Economy economy; - private BukkitTask itemWatcherTask; + public BukkitTask itemWatcherTask; private LogWatcher logWatcher; /** The Shop Manager used to store shops */ private ShopManager shopManager; @@ -61,9 +78,7 @@ public class QuickShop extends JavaPlugin { * The string to print. */ public void debug(final String s) { - if (!configManager.isDebug()) { - return; - } + if (!configManager.isDebug()) { return; } this.getLogger().info(ChatColor.YELLOW + "[Debug] " + s); } @@ -203,9 +218,7 @@ public class QuickShop extends JavaPlugin { * The string to log. It will be prefixed with the date and time. */ public void log(final String s) { - if (this.logWatcher == null) { - return; - } + if (this.logWatcher == null) { return; } final Date date = Calendar.getInstance().getTime(); final Timestamp time = new Timestamp(date.getTime()); this.logWatcher.add("[" + time.toString() + "] " + s); @@ -239,9 +252,7 @@ public class QuickShop extends JavaPlugin { @Override public void onEnable() { - if (!loadEcon()) { - return; - } + if (!loadEcon()) { return; } configManager = new ConfigManager(this); // Initialize Util Util.initialize(); @@ -303,14 +314,6 @@ public class QuickShop extends JavaPlugin { pm.registerEvents(new WorldListener(this), this); pm.registerEvents(new ProtectListener(this), this); pm.registerEvents(new ChatListener(this), this); - if (configManager.isDisplay()) { - Bukkit.getServer().getPluginManager().registerEvents(new ChunkListener(this), this); - // Display item handler thread - getLogger().info("开启商店检查以及悬浮物刷新线程..."); - final ItemWatcher itemWatcher = new ItemWatcher(this); - itemWatcherTask = Bukkit.getScheduler().runTaskTimer(this, itemWatcher, 20, 1800); - } - // Command handlers new QuickShopCommands(); diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/Item/DisplayItem.java b/src/main/java/org/maxgamer/QuickShop/Shop/Item/DisplayItem.java index 7de0621..75fd066 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/Item/DisplayItem.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/Item/DisplayItem.java @@ -11,7 +11,9 @@ import org.bukkit.Material; import org.bukkit.entity.Item; import org.bukkit.inventory.ItemStack; import org.maxgamer.QuickShop.QuickShop; +import org.maxgamer.QuickShop.Listeners.ChunkListener; import org.maxgamer.QuickShop.Shop.ContainerShop; +import org.maxgamer.QuickShop.Watcher.ItemWatcher; import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.bukkit.P; @@ -43,6 +45,13 @@ public abstract class DisplayItem { } if (displayItemClass == null) { displayItemClass = NormalItem.class; + if (plugin.getConfigManager().isDisplay()) { + Bukkit.getServer().getPluginManager().registerEvents(new ChunkListener(plugin), plugin); + // Display item handler thread + Log.i("开启商店检查以及悬浮物刷新线程..."); + final ItemWatcher itemWatcher = new ItemWatcher(plugin); + plugin.itemWatcherTask = Bukkit.getScheduler().runTaskTimer(plugin, itemWatcher, 20, 1800); + } Log.w("+========================================="); Log.w("| 警告: 启动虚拟物品失败 使用原版悬浮物品..."); Log.w("+========================================="); diff --git a/src/main/java/org/maxgamer/QuickShop/Util/MsgUtil.java b/src/main/java/org/maxgamer/QuickShop/Util/MsgUtil.java index 1562c05..738f8e5 100644 --- a/src/main/java/org/maxgamer/QuickShop/Util/MsgUtil.java +++ b/src/main/java/org/maxgamer/QuickShop/Util/MsgUtil.java @@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemStack; import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.Shop.Shop; +import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.config.FileConfig; import pw.yumc.YumCore.tellraw.Tellraw; @@ -39,7 +40,7 @@ public class MsgUtil { * The player to message * @return true if success, false if the player is offline or null */ - public static boolean flush(final OfflinePlayer p) { + public static void flush(final OfflinePlayer p) { if (p != null && p.isOnline()) { final String pName = p.getName(); final LinkedList msgs = player_messages.get(pName); @@ -50,9 +51,7 @@ public class MsgUtil { plugin.getDB().execute("DELETE FROM messages WHERE owner = ?", pName); msgs.clear(); } - return true; } - return false; } public static void init(final QuickShop plugin) { @@ -73,16 +72,12 @@ public class MsgUtil { while (rs.next()) { final String owner = rs.getString("owner"); final String message = rs.getString("message"); - LinkedList msgs = player_messages.get(owner); - if (msgs == null) { - msgs = new LinkedList<>(); - player_messages.put(owner, msgs); - } + LinkedList msgs = player_messages.computeIfAbsent(owner, k -> new LinkedList<>()); msgs.add(message); } } catch (final SQLException e) { e.printStackTrace(); - plugin.getLogger().warning("无法从数据库获得玩家的交易记录 跳过..."); + Log.d("无法从数据库获得玩家的交易记录 跳过..."); } } @@ -110,23 +105,15 @@ public class MsgUtil { * them in the database. */ public static void send(final String player, final String message) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - @SuppressWarnings("deprecation") - final OfflinePlayer p = Bukkit.getOfflinePlayer(player); - if (p == null || !p.isOnline()) { - LinkedList msgs = player_messages.get(player); - if (msgs == null) { - msgs = new LinkedList<>(); - player_messages.put(player, msgs); - } - msgs.add(message); - final String q = "INSERT INTO messages (owner, message, time) VALUES (?, ?, ?)"; - plugin.getDB().execute(q, player, message, System.currentTimeMillis()); - } else { - p.getPlayer().sendMessage(message); - } + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + final OfflinePlayer p = Bukkit.getOfflinePlayer(player); + if (p == null || !p.isOnline()) { + LinkedList msgs = player_messages.computeIfAbsent(player, k -> new LinkedList<>()); + msgs.add(message); + final String q = "INSERT INTO messages (owner, message, time) VALUES (?, ?, ?)"; + plugin.getDB().execute(q, player, message, System.currentTimeMillis()); + } else { + p.getPlayer().sendMessage(message); } }); } @@ -171,43 +158,39 @@ public class MsgUtil { sendShopInfo(p, shop, shop.getRemainingStock()); } - @SuppressWarnings("deprecation") public static void sendShopInfo(final Player p, final Shop shop, final int stock) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - // Potentially faster with an array? - final ItemStack item = shop.getItem(); - p.sendMessage(""); - p.sendMessage(""); - p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+"); - p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.shop-information")); - p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.owner", - Bukkit.getOfflinePlayer(shop.getOwner()).getName() == null ? (shop.isUnlimited() ? "系统商店" : "未知") : Bukkit.getOfflinePlayer(shop.getOwner()).getName())); - final String msg = ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.item", shop.getDataName()); - sendItemMessage(p, shop.getItem(), msg); - if (Util.isTool(item.getType())) { - p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.damage-percent-remaining", Util.getToolPercentage(item))); - } - if (shop.isSelling()) { - p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.stock", "" + (stock == 10000 ? "无限" : stock))); - } else { - final int space = shop.getRemainingSpace(); - p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.space", "" + (space == 10000 ? "无限" : space))); - } - p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.price-per", shop.getDataName(), Util.format(shop.getPrice()))); - if (shop.isBuying()) { - p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.this-shop-is-buying")); - } else { - p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.this-shop-is-selling")); - } - p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+"); - if (shop.isSelling()) { - p.sendMessage(MsgUtil.p("how-many-buy")); - } else { - final int items = Util.countItems(p.getInventory(), shop.getItem()); - p.sendMessage(MsgUtil.p("how-many-sell", items)); - } + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + // Potentially faster with an array? + final ItemStack item = shop.getItem(); + p.sendMessage(""); + p.sendMessage(""); + p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+"); + p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.shop-information")); + p.sendMessage(ChatColor.DARK_PURPLE + "| " + + MsgUtil.p("menu.owner", Bukkit.getOfflinePlayer(shop.getOwner()).getName() == null ? (shop.isUnlimited() ? "系统商店" : "未知") : Bukkit.getOfflinePlayer(shop.getOwner()).getName())); + final String msg = ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.item", shop.getDataName()); + sendItemMessage(p, shop.getItem(), msg); + if (Util.isTool(item.getType())) { + p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.damage-percent-remaining", Util.getToolPercentage(item))); + } + if (shop.isSelling()) { + p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.stock", "" + (stock == 10000 ? "无限" : stock))); + } else { + final int space = shop.getRemainingSpace(); + p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.space", "" + (space == 10000 ? "无限" : space))); + } + p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.price-per", shop.getDataName(), Util.format(shop.getPrice()))); + if (shop.isBuying()) { + p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.this-shop-is-buying")); + } else { + p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.this-shop-is-selling")); + } + p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+"); + if (shop.isSelling()) { + p.sendMessage(MsgUtil.p("how-many-buy")); + } else { + final int items = Util.countItems(p.getInventory(), shop.getItem()); + p.sendMessage(MsgUtil.p("how-many-sell", items)); } }); } diff --git a/src/main/java/org/maxgamer/QuickShop/Util/NMS.java b/src/main/java/org/maxgamer/QuickShop/Util/NMS.java index 9bc6d8f..25c3c6e 100644 --- a/src/main/java/org/maxgamer/QuickShop/Util/NMS.java +++ b/src/main/java/org/maxgamer/QuickShop/Util/NMS.java @@ -7,7 +7,7 @@ public class NMS { public static void safeGuard(final Item item) throws ClassNotFoundException { rename(item.getItemStack()); - item.setPickupDelay(2147483647); + item.setPickupDelay(Integer.MAX_VALUE); } private static void rename(final ItemStack iStack) { diff --git a/src/main/java/org/maxgamer/QuickShop/Util/Util.java b/src/main/java/org/maxgamer/QuickShop/Util/Util.java index a7229b8..524f261 100644 --- a/src/main/java/org/maxgamer/QuickShop/Util/Util.java +++ b/src/main/java/org/maxgamer/QuickShop/Util/Util.java @@ -1,5 +1,11 @@ package org.maxgamer.QuickShop.Util; +import java.text.DecimalFormat; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -17,15 +23,8 @@ import org.bukkit.material.MaterialData; import org.bukkit.material.Sign; import org.maxgamer.QuickShop.QuickShop; -import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.global.L10N; -import java.text.DecimalFormat; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - @SuppressWarnings("deprecation") public class Util { private static HashSet blacklist = new HashSet<>(); @@ -178,7 +177,6 @@ public class Util { * @return the block which is also a chest and connected to b. */ public static Block getSecondHalf(final Block b) { - Log.d("%s", b); if (!b.getType().toString().contains("CHEST")) { return null; } final Block[] blocks = new Block[4]; blocks[0] = b.getRelative(1, 0, 0);