1
0
mirror of https://e.coding.net/circlecloud/QuickShop.git synced 2024-11-25 02:28:54 +00:00

feat: 去除调试 优化检测线程

Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
502647092 2017-05-10 00:04:53 +08:00
parent b3995f3b2f
commit 833fe1ac43
6 changed files with 90 additions and 100 deletions

View File

@ -7,14 +7,11 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Shop.Item.DisplayItem; 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.bukkit.Log;
import pw.yumc.YumCore.config.FileConfig; import pw.yumc.YumCore.config.FileConfig;
@ -109,9 +106,9 @@ public class ConfigManager {
plugin.getLogger().info("魔改库功能测试正常..."); plugin.getLogger().info("魔改库功能测试正常...");
this.enableMagicLib = true; this.enableMagicLib = true;
} catch (final Error | Exception e) { } catch (final Error | Exception e) {
plugin.getLogger().warning("+========================================="); Log.d("+=========================================");
plugin.getLogger().warning("| 警告: 启动魔改库失败 将使用GUI商店界面..."); Log.d("| 警告: 启动魔改库失败 将使用GUI商店界面...");
plugin.getLogger().warning("+========================================="); Log.d("+=========================================");
} }
} }
} }

View File

@ -1,12 +1,20 @@
package org.maxgamer.QuickShop; package org.maxgamer.QuickShop;
import java.io.File; 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.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Map.Entry; 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.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -18,18 +26,27 @@ import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
import org.maxgamer.QuickShop.Command.QuickShopCommands; import org.maxgamer.QuickShop.Command.QuickShopCommands;
import org.maxgamer.QuickShop.Config.ConfigManager; 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.Economy;
import org.maxgamer.QuickShop.Economy.EconomyCore; import org.maxgamer.QuickShop.Economy.EconomyCore;
import org.maxgamer.QuickShop.Economy.Economy_Vault; 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.ContainerShop;
import org.maxgamer.QuickShop.Shop.Shop; import org.maxgamer.QuickShop.Shop.Shop;
import org.maxgamer.QuickShop.Shop.ShopManager; import org.maxgamer.QuickShop.Shop.ShopManager;
import org.maxgamer.QuickShop.Shop.ShopType; import org.maxgamer.QuickShop.Shop.ShopType;
import org.maxgamer.QuickShop.Util.MsgUtil; import org.maxgamer.QuickShop.Util.MsgUtil;
import org.maxgamer.QuickShop.Util.Util; import org.maxgamer.QuickShop.Util.Util;
import org.maxgamer.QuickShop.Watcher.ItemWatcher;
import org.maxgamer.QuickShop.Watcher.LogWatcher; import org.maxgamer.QuickShop.Watcher.LogWatcher;
import pw.yumc.YumCore.config.FileConfig; import pw.yumc.YumCore.config.FileConfig;
@ -49,7 +66,7 @@ public class QuickShop extends JavaPlugin {
private Database database; private Database database;
/** The economy we hook into for transactions */ /** The economy we hook into for transactions */
private Economy economy; private Economy economy;
private BukkitTask itemWatcherTask; public BukkitTask itemWatcherTask;
private LogWatcher logWatcher; private LogWatcher logWatcher;
/** The Shop Manager used to store shops */ /** The Shop Manager used to store shops */
private ShopManager shopManager; private ShopManager shopManager;
@ -61,9 +78,7 @@ public class QuickShop extends JavaPlugin {
* The string to print. * The string to print.
*/ */
public void debug(final String s) { public void debug(final String s) {
if (!configManager.isDebug()) { if (!configManager.isDebug()) { return; }
return;
}
this.getLogger().info(ChatColor.YELLOW + "[Debug] " + s); 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. * The string to log. It will be prefixed with the date and time.
*/ */
public void log(final String s) { public void log(final String s) {
if (this.logWatcher == null) { if (this.logWatcher == null) { return; }
return;
}
final Date date = Calendar.getInstance().getTime(); final Date date = Calendar.getInstance().getTime();
final Timestamp time = new Timestamp(date.getTime()); final Timestamp time = new Timestamp(date.getTime());
this.logWatcher.add("[" + time.toString() + "] " + s); this.logWatcher.add("[" + time.toString() + "] " + s);
@ -239,9 +252,7 @@ public class QuickShop extends JavaPlugin {
@Override @Override
public void onEnable() { public void onEnable() {
if (!loadEcon()) { if (!loadEcon()) { return; }
return;
}
configManager = new ConfigManager(this); configManager = new ConfigManager(this);
// Initialize Util // Initialize Util
Util.initialize(); Util.initialize();
@ -303,14 +314,6 @@ public class QuickShop extends JavaPlugin {
pm.registerEvents(new WorldListener(this), this); pm.registerEvents(new WorldListener(this), this);
pm.registerEvents(new ProtectListener(this), this); pm.registerEvents(new ProtectListener(this), this);
pm.registerEvents(new ChatListener(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 // Command handlers
new QuickShopCommands(); new QuickShopCommands();

View File

@ -11,7 +11,9 @@ import org.bukkit.Material;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Listeners.ChunkListener;
import org.maxgamer.QuickShop.Shop.ContainerShop; import org.maxgamer.QuickShop.Shop.ContainerShop;
import org.maxgamer.QuickShop.Watcher.ItemWatcher;
import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.bukkit.Log;
import pw.yumc.YumCore.bukkit.P; import pw.yumc.YumCore.bukkit.P;
@ -43,6 +45,13 @@ public abstract class DisplayItem {
} }
if (displayItemClass == null) { if (displayItemClass == null) {
displayItemClass = NormalItem.class; 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("| 警告: 启动虚拟物品失败 使用原版悬浮物品..."); Log.w("| 警告: 启动虚拟物品失败 使用原版悬浮物品...");
Log.w("+========================================="); Log.w("+=========================================");

View File

@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemStack;
import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Shop.Shop; import org.maxgamer.QuickShop.Shop.Shop;
import pw.yumc.YumCore.bukkit.Log;
import pw.yumc.YumCore.config.FileConfig; import pw.yumc.YumCore.config.FileConfig;
import pw.yumc.YumCore.tellraw.Tellraw; import pw.yumc.YumCore.tellraw.Tellraw;
@ -39,7 +40,7 @@ public class MsgUtil {
* The player to message * The player to message
* @return true if success, false if the player is offline or null * @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()) { if (p != null && p.isOnline()) {
final String pName = p.getName(); final String pName = p.getName();
final LinkedList<String> msgs = player_messages.get(pName); final LinkedList<String> msgs = player_messages.get(pName);
@ -50,9 +51,7 @@ public class MsgUtil {
plugin.getDB().execute("DELETE FROM messages WHERE owner = ?", pName); plugin.getDB().execute("DELETE FROM messages WHERE owner = ?", pName);
msgs.clear(); msgs.clear();
} }
return true;
} }
return false;
} }
public static void init(final QuickShop plugin) { public static void init(final QuickShop plugin) {
@ -73,16 +72,12 @@ public class MsgUtil {
while (rs.next()) { while (rs.next()) {
final String owner = rs.getString("owner"); final String owner = rs.getString("owner");
final String message = rs.getString("message"); final String message = rs.getString("message");
LinkedList<String> msgs = player_messages.get(owner); LinkedList<String> msgs = player_messages.computeIfAbsent(owner, k -> new LinkedList<>());
if (msgs == null) {
msgs = new LinkedList<>();
player_messages.put(owner, msgs);
}
msgs.add(message); msgs.add(message);
} }
} catch (final SQLException e) { } catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
plugin.getLogger().warning("无法从数据库获得玩家的交易记录 跳过..."); Log.d("无法从数据库获得玩家的交易记录 跳过...");
} }
} }
@ -110,24 +105,16 @@ public class MsgUtil {
* them in the database. * them in the database.
*/ */
public static void send(final String player, final String message) { public static void send(final String player, final String message) {
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
@Override
public void run() {
@SuppressWarnings("deprecation")
final OfflinePlayer p = Bukkit.getOfflinePlayer(player); final OfflinePlayer p = Bukkit.getOfflinePlayer(player);
if (p == null || !p.isOnline()) { if (p == null || !p.isOnline()) {
LinkedList<String> msgs = player_messages.get(player); LinkedList<String> msgs = player_messages.computeIfAbsent(player, k -> new LinkedList<>());
if (msgs == null) {
msgs = new LinkedList<>();
player_messages.put(player, msgs);
}
msgs.add(message); msgs.add(message);
final String q = "INSERT INTO messages (owner, message, time) VALUES (?, ?, ?)"; final String q = "INSERT INTO messages (owner, message, time) VALUES (?, ?, ?)";
plugin.getDB().execute(q, player, message, System.currentTimeMillis()); plugin.getDB().execute(q, player, message, System.currentTimeMillis());
} else { } else {
p.getPlayer().sendMessage(message); p.getPlayer().sendMessage(message);
} }
}
}); });
} }
@ -171,19 +158,16 @@ public class MsgUtil {
sendShopInfo(p, shop, shop.getRemainingStock()); sendShopInfo(p, shop, shop.getRemainingStock());
} }
@SuppressWarnings("deprecation")
public static void sendShopInfo(final Player p, final Shop shop, final int stock) { public static void sendShopInfo(final Player p, final Shop shop, final int stock) {
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
@Override
public void run() {
// Potentially faster with an array? // Potentially faster with an array?
final ItemStack item = shop.getItem(); final ItemStack item = shop.getItem();
p.sendMessage(""); p.sendMessage("");
p.sendMessage(""); p.sendMessage("");
p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+"); p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+");
p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.shop-information")); p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.shop-information"));
p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.owner", p.sendMessage(ChatColor.DARK_PURPLE + "| "
Bukkit.getOfflinePlayer(shop.getOwner()).getName() == null ? (shop.isUnlimited() ? "系统商店" : "未知") : Bukkit.getOfflinePlayer(shop.getOwner()).getName())); + 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()); final String msg = ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.item", shop.getDataName());
sendItemMessage(p, shop.getItem(), msg); sendItemMessage(p, shop.getItem(), msg);
if (Util.isTool(item.getType())) { if (Util.isTool(item.getType())) {
@ -208,7 +192,6 @@ public class MsgUtil {
final int items = Util.countItems(p.getInventory(), shop.getItem()); final int items = Util.countItems(p.getInventory(), shop.getItem());
p.sendMessage(MsgUtil.p("how-many-sell", items)); p.sendMessage(MsgUtil.p("how-many-sell", items));
} }
}
}); });
} }
} }

View File

@ -7,7 +7,7 @@ public class NMS {
public static void safeGuard(final Item item) throws ClassNotFoundException { public static void safeGuard(final Item item) throws ClassNotFoundException {
rename(item.getItemStack()); rename(item.getItemStack());
item.setPickupDelay(2147483647); item.setPickupDelay(Integer.MAX_VALUE);
} }
private static void rename(final ItemStack iStack) { private static void rename(final ItemStack iStack) {

View File

@ -1,5 +1,11 @@
package org.maxgamer.QuickShop.Util; 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.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -17,15 +23,8 @@ import org.bukkit.material.MaterialData;
import org.bukkit.material.Sign; import org.bukkit.material.Sign;
import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.QuickShop;
import pw.yumc.YumCore.bukkit.Log;
import pw.yumc.YumCore.global.L10N; 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") @SuppressWarnings("deprecation")
public class Util { public class Util {
private static HashSet<Material> blacklist = new HashSet<>(); private static HashSet<Material> blacklist = new HashSet<>();
@ -178,7 +177,6 @@ public class Util {
* @return the block which is also a chest and connected to b. * @return the block which is also a chest and connected to b.
*/ */
public static Block getSecondHalf(final Block b) { public static Block getSecondHalf(final Block b) {
Log.d("%s", b);
if (!b.getType().toString().contains("CHEST")) { return null; } if (!b.getType().toString().contains("CHEST")) { return null; }
final Block[] blocks = new Block[4]; final Block[] blocks = new Block[4];
blocks[0] = b.getRelative(1, 0, 0); blocks[0] = b.getRelative(1, 0, 0);