1
0
mirror of https://e.coding.net/circlecloud/RealBackpacks.git synced 2025-11-24 21:36:12 +00:00

update...

Signed-off-by: j502647092 <jtb1@163.com>
This commit is contained in:
j502647092
2015-10-08 00:13:38 +08:00
parent 02938bc626
commit 89ce4c1e95
3 changed files with 193 additions and 310 deletions

View File

@@ -28,10 +28,12 @@ public class MainCommand implements CommandExecutor {
private boolean exist = false; private boolean exist = false;
private String[] helps = new String[] { "§6====== 真实背包插件 By:喵♂呜 ======", private final String[] helps = new String[] { "§6====== 真实背包插件 By:喵♂呜 ======",
"§4* §a查看可购买列表 §7/rb list ", "§4* §a购买背包 §7/rb buy <背包名称> ", "§4* §a查看可购买列表 §7/rb list ",
"§4* §a给玩家指定背包 §7/rb give <玩家名称> <背包名称>", "§4* §a购买背包 §7/rb buy <背包名称> ",
"§4* §a查看玩家指定背包 §7/rb view <玩家名称> <背包名称>", "§4* §a数据转移至MySQL §7/rb filetomysql" }; "§4* §a玩家指定背包 §7/rb give <玩家名称> <背包名称>",
"§4* §a查看玩家指定背包 §7/rb view <玩家名称> <背包名称>",
"§4* §a数据转移至MySQL §7/rb filetomysql" };
public MainCommand(final RealBackpacks plugin) { public MainCommand(final RealBackpacks plugin) {
this.plugin = plugin; this.plugin = plugin;
@@ -56,8 +58,7 @@ public class MainCommand implements CommandExecutor {
plugin.setupLists(); plugin.setupLists();
plugin.getServer().resetRecipes(); plugin.getServer().resetRecipes();
plugin.setup(); plugin.setup();
sender.sendMessage(ChatColor.GRAY + "配置文件重载完毕 用时 " + ChatColor.YELLOW sender.sendMessage(ChatColor.GRAY + "配置文件重载完毕 用时 " + ChatColor.YELLOW + (System.currentTimeMillis() - first) + "毫秒" + ChatColor.GRAY + ".");
+ (System.currentTimeMillis() - first) + "毫秒" + ChatColor.GRAY + ".");
return true; return true;
} else if (command.equalsIgnoreCase("buy") || command.equalsIgnoreCase("purchase")) { } else if (command.equalsIgnoreCase("buy") || command.equalsIgnoreCase("purchase")) {
if (!plugin.isUsingVault()) { if (!plugin.isUsingVault()) {
@@ -69,8 +70,7 @@ public class MainCommand implements CommandExecutor {
return false; return false;
} }
if (!(args.length == 2)) { if (!(args.length == 2)) {
sender.sendMessage(ChatColor.RED + "命令错误. 正确命令:" + ChatColor.GRAY sender.sendMessage(ChatColor.RED + "命令错误. 正确命令:" + ChatColor.GRAY + " /rb buy <backpack>");
+ " /rb buy <backpack>");
return false; return false;
} }
String backpack = null; String backpack = null;
@@ -83,13 +83,11 @@ public class MainCommand implements CommandExecutor {
sender.sendMessage("没有购买的权限."); sender.sendMessage("没有购买的权限.");
return false; return false;
} }
if (plugin.backpackData.get(backpack).get(13) != null if (plugin.backpackData.get(backpack).get(13) != null && !plugin.backpackData.get(backpack).get(13).equals("true")) {
&& !plugin.backpackData.get(backpack).get(13).equals("true")) {
sender.sendMessage("不能被购买."); sender.sendMessage("不能被购买.");
return false; return false;
} }
final double price = Double.parseDouble(plugin.backpackData.get(backpack).get( final double price = Double.parseDouble(plugin.backpackData.get(backpack).get(14));
14));
if (RealBackpacks.econ.getBalance(sender.getName()) < price) { if (RealBackpacks.econ.getBalance(sender.getName()) < price) {
sender.sendMessage(ChatColor.RED + "你没有足够的钱购买这个背包."); sender.sendMessage(ChatColor.RED + "你没有足够的钱购买这个背包.");
return false; return false;
@@ -99,31 +97,21 @@ public class MainCommand implements CommandExecutor {
final ItemStack backpackItem = plugin.backpackItems.get(backpack); final ItemStack backpackItem = plugin.backpackItems.get(backpack);
if (inv.firstEmpty() != -1) { if (inv.firstEmpty() != -1) {
RealBackpacks.econ.withdrawPlayer(p.getName(), price); RealBackpacks.econ.withdrawPlayer(p.getName(), price);
if (plugin.backpackData.get(backpack).get(18) != null if (plugin.backpackData.get(backpack).get(18) != null && plugin.backpackData.get(backpack).get(18).equalsIgnoreCase("true")) {
&& plugin.backpackData.get(backpack).get(18) if (RealBackpacks.globalGlow && plugin.backpackData.get(backpack).get(17) != null && plugin.backpackData.get(backpack).get(17).equalsIgnoreCase("true")) {
.equalsIgnoreCase("true")) { inv.setItem(inv.firstEmpty(), RealBackpacks.NMS.addGlow(backpackItem));
if (RealBackpacks.globalGlow
&& plugin.backpackData.get(backpack).get(17) != null
&& plugin.backpackData.get(backpack).get(17)
.equalsIgnoreCase("true")) {
inv.setItem(inv.firstEmpty(),
RealBackpacks.NMS.addGlow(backpackItem));
} else { } else {
inv.setItem(inv.firstEmpty(), backpackItem); inv.setItem(inv.firstEmpty(), backpackItem);
} }
} else { } else {
if (RealBackpacks.globalGlow if (RealBackpacks.globalGlow && plugin.backpackData.get(backpack).get(17) != null && plugin.backpackData.get(backpack).get(17).equalsIgnoreCase("true")) {
&& plugin.backpackData.get(backpack).get(17) != null
&& plugin.backpackData.get(backpack).get(17)
.equalsIgnoreCase("true")) {
inv.addItem(RealBackpacks.NMS.addGlow(backpackItem)); inv.addItem(RealBackpacks.NMS.addGlow(backpackItem));
} else { } else {
inv.addItem(backpackItem); inv.addItem(backpackItem);
} }
} }
p.updateInventory(); p.updateInventory();
sender.sendMessage(ChatColor.GREEN + "你花费了 " + ChatColor.GOLD + price sender.sendMessage(ChatColor.GREEN + "你花费了 " + ChatColor.GOLD + price + ChatColor.GREEN + " 购买了背包: " + ChatColor.GOLD + backpack);
+ ChatColor.GREEN + " 购买了背包: " + ChatColor.GOLD + backpack);
return true; return true;
} else { } else {
sender.sendMessage(ChatColor.RED + "你的背包是空的."); sender.sendMessage(ChatColor.RED + "你的背包是空的.");
@@ -134,53 +122,35 @@ public class MainCommand implements CommandExecutor {
sender.sendMessage(ChatColor.RED + "你没有此命令的权限!"); sender.sendMessage(ChatColor.RED + "你没有此命令的权限!");
return false; return false;
} }
sender.sendMessage(ChatColor.LIGHT_PURPLE + " 名称 " + ChatColor.GOLD + "|" sender.sendMessage(ChatColor.LIGHT_PURPLE + " 名称 " + ChatColor.GOLD + "|" + ChatColor.AQUA + " 大小 " + ChatColor.GOLD + "|" + ChatColor.GREEN + " 价格 ");
+ ChatColor.AQUA + " 大小 " + ChatColor.GOLD + "|" + ChatColor.GREEN
+ " 价格 ");
sender.sendMessage(ChatColor.GOLD + "-----------------------------------"); sender.sendMessage(ChatColor.GOLD + "-----------------------------------");
if (plugin.isUsingPerms()) { if (plugin.isUsingPerms()) {
for (final String backpack : plugin.backpacks) { for (final String backpack : plugin.backpacks) {
final boolean hasPerm = sender.hasPermission("rb." + backpack + ".buy"); final boolean hasPerm = sender.hasPermission("rb." + backpack + ".buy");
final List<String> key = plugin.backpackData.get(backpack); final List<String> key = plugin.backpackData.get(backpack);
if (plugin.backpackData.get(backpack).get(13).equalsIgnoreCase("true") if (plugin.backpackData.get(backpack).get(13).equalsIgnoreCase("true") && hasPerm) {
&& hasPerm) { sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.GREEN
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack
+ ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0)
+ ChatColor.GOLD + " | " + ChatColor.GREEN
+ Double.parseDouble(key.get(14))); + Double.parseDouble(key.get(14)));
} else if (plugin.backpackData.get(backpack).get(13) != null } else if (plugin.backpackData.get(backpack).get(13) != null && !plugin.backpackData.get(backpack).get(13).equalsIgnoreCase("true") && hasPerm) {
&& !plugin.backpackData.get(backpack).get(13) sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.RED + "不能购买");
.equalsIgnoreCase("true") && hasPerm) {
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack
+ ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0)
+ ChatColor.GOLD + " | " + ChatColor.RED + "不能购买");
} else { } else {
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.RED + "没有足够的权限购买");
+ ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0)
+ ChatColor.GOLD + " | " + ChatColor.RED + "没有足够的权限购买");
} }
} }
} else { } else {
for (final String backpack : plugin.backpacks) { for (final String backpack : plugin.backpacks) {
final List<String> key = plugin.backpackData.get(backpack); final List<String> key = plugin.backpackData.get(backpack);
if (plugin.backpackData.get(backpack).get(13) != null if (plugin.backpackData.get(backpack).get(13) != null && plugin.backpackData.get(backpack).get(13).equalsIgnoreCase("true")) {
&& plugin.backpackData.get(backpack).get(13) sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.GREEN
.equalsIgnoreCase("true")) {
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack
+ ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0)
+ ChatColor.GOLD + " | " + ChatColor.GREEN
+ Double.parseDouble(key.get(14))); + Double.parseDouble(key.get(14)));
} else { } else {
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.RED + "不能购买");
+ ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0)
+ ChatColor.GOLD + " | " + ChatColor.RED + "不能购买");
} }
} }
} }
} else if (command.equalsIgnoreCase("give")) { } else if (command.equalsIgnoreCase("give")) {
if (!(args.length == 3)) { if (!(args.length == 3)) {
sender.sendMessage(ChatColor.RED + "错误的命令. 正确方式:" + ChatColor.GRAY sender.sendMessage(ChatColor.RED + "错误的命令. 正确方式:" + ChatColor.GRAY + " /rb give <玩家> <背包名称>");
+ " /rb give <玩家> <背包名称>");
return false; return false;
} }
String backpack = null; String backpack = null;
@@ -201,39 +171,30 @@ public class MainCommand implements CommandExecutor {
final Inventory inv = other.getInventory(); final Inventory inv = other.getInventory();
final ItemStack backpackItem = plugin.backpackItems.get(backpack); final ItemStack backpackItem = plugin.backpackItems.get(backpack);
if (inv.firstEmpty() != -1) { if (inv.firstEmpty() != -1) {
if (plugin.backpackData.get(backpack).get(18) != null if (plugin.backpackData.get(backpack).get(18) != null && plugin.backpackData.get(backpack).get(18).equalsIgnoreCase("true")) {
&& plugin.backpackData.get(backpack).get(18) if (RealBackpacks.globalGlow && plugin.backpackData.get(backpack).get(17) != null && plugin.backpackData.get(backpack).get(17).equalsIgnoreCase("true")) {
.equalsIgnoreCase("true")) { inv.setItem(inv.firstEmpty(), RealBackpacks.NMS.addGlow(backpackItem));
if (RealBackpacks.globalGlow
&& plugin.backpackData.get(backpack).get(17) != null
&& plugin.backpackData.get(backpack).get(17)
.equalsIgnoreCase("true")) {
inv.setItem(inv.firstEmpty(),
RealBackpacks.NMS.addGlow(backpackItem));
} else { } else {
inv.setItem(inv.firstEmpty(), backpackItem); inv.setItem(inv.firstEmpty(), backpackItem);
} }
} else { } else {
if (RealBackpacks.globalGlow if (RealBackpacks.globalGlow && plugin.backpackData.get(backpack).get(17) != null && plugin.backpackData.get(backpack).get(17).equalsIgnoreCase("true")) {
&& plugin.backpackData.get(backpack).get(17) != null
&& plugin.backpackData.get(backpack).get(17)
.equalsIgnoreCase("true")) {
inv.addItem(RealBackpacks.NMS.addGlow(backpackItem)); inv.addItem(RealBackpacks.NMS.addGlow(backpackItem));
} else { } else {
inv.addItem(backpackItem); inv.addItem(backpackItem);
} }
} }
other.updateInventory(); other.updateInventory();
sender.sendMessage(ChatColor.GREEN + "你把背包 " + ChatColor.GOLD + backpack sender.sendMessage(ChatColor.GREEN + "你把背包 " + ChatColor.GOLD + backpack + ChatColor.GREEN + " 发送给了 " + ChatColor.GOLD + other.getName());
+ ChatColor.GREEN + " 发送给了 " + ChatColor.GOLD + other.getName());
return true; return true;
} else { } else {
sender.sendMessage(ChatColor.RED + other.getName() + "的背包已经满了"); sender.sendMessage(ChatColor.RED + other.getName() + "的背包已经满了");
return false; return false;
} }
} else if (command.equalsIgnoreCase("filetomysql")) { } else if (command.equalsIgnoreCase("filetomysql")) {
if (plugin.isUsingPerms() && !sender.hasPermission("rb.filetomysql")) if (plugin.isUsingPerms() && !sender.hasPermission("rb.filetomysql")) {
return false; return false;
}
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() { plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -244,67 +205,53 @@ public class MainCommand implements CommandExecutor {
exist = true; exist = true;
} }
try { try {
final Connection conn = DriverManager.getConnection( final Connection conn = DriverManager.getConnection(plugin.getUrl(), plugin.getUser(), plugin.getPass());
plugin.getUrl(), plugin.getUser(), plugin.getPass()); final File dir = new File(plugin.getDataFolder() + File.separator + "userdata");
final File dir = new File(plugin.getDataFolder() + File.separator int i = 0, times = 0;
+ "userdata");
int i = 0,times = 0;
final int files = dir.listFiles().length; final int files = dir.listFiles().length;
for (final File child : dir.listFiles()) { for (final File child : dir.listFiles()) {
final String player = child.getName().replace(".yml", ""); final String player = child.getName().replace(".yml", "");
final FileConfig config = PlayerConfig.getInstance(plugin, final FileConfig config = PlayerConfig.getInstance(plugin, player);
player);
i++; i++;
PreparedStatement statement = null; PreparedStatement statement = null;
PreparedStatement state = null; PreparedStatement state = null;
for (final String backpack : config.getConfigurationSection("") for (final String backpack : config.getConfigurationSection("").getKeys(false)) {
.getKeys(false)) {
if (exist) { if (exist) {
statement = conn statement = conn.prepareStatement("SELECT EXISTS(SELECT 1 FROM rb_data WHERE player = ? AND backpack = ? LIMIT 1);");
.prepareStatement("SELECT EXISTS(SELECT 1 FROM rb_data WHERE player = ? AND backpack = ? LIMIT 1);");
statement.setString(1, player); statement.setString(1, player);
statement.setString(2, backpack); statement.setString(2, backpack);
final ResultSet res = statement.executeQuery(); final ResultSet res = statement.executeQuery();
if (res.next()) { if (res.next()) {
if (res.getInt(1) == 1) { if (res.getInt(1) == 1) {
state = conn state = conn.prepareStatement("UPDATE rb_data SET player=?, backpack=?, inventory=? WHERE player=? AND backpack=?;");
.prepareStatement("UPDATE rb_data SET player=?, backpack=?, inventory=? WHERE player=? AND backpack=?;");
state.setString(1, player); state.setString(1, player);
state.setString(2, backpack); state.setString(2, backpack);
state.setString(3, Serialization state.setString(3, Serialization.listToString(config.getStringList(backpack + ".Inventory")));
.listToString(config
.getStringList(backpack
+ ".Inventory")));
state.setString(4, player); state.setString(4, player);
state.setString(5, backpack); state.setString(5, backpack);
} else { } else {
state = conn state = conn.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
state.setString(1, player); state.setString(1, player);
state.setString(2, backpack); state.setString(2, backpack);
state.setString(3, Serialization state.setString(3, Serialization.listToString(config.getStringList(backpack + ".Inventory")));
.listToString(config
.getStringList(backpack
+ ".Inventory")));
} }
} }
} else { } else {
state = conn state = conn.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
state.setString(1, player); state.setString(1, player);
state.setString(2, backpack); state.setString(2, backpack);
state.setString(3, Serialization.listToString(config state.setString(3, Serialization.listToString(config.getStringList(backpack + ".Inventory")));
.getStringList(backpack + ".Inventory"))); }
if (state != null) {
state.executeUpdate();
state.close();
} }
state.executeUpdate();
state.close();
} }
if (i == 50) { if (i == 50) {
i = 0; i = 0;
times++; times++;
sender.sendMessage(ChatColor.LIGHT_PURPLE + "" + times * 50 sender.sendMessage(ChatColor.LIGHT_PURPLE + "" + times * 50 + "/" + files + " files have been transferred.");
+ "/" + files + " files have been transferred.");
} }
} }
conn.close(); conn.close();
@@ -316,8 +263,7 @@ public class MainCommand implements CommandExecutor {
}); });
} else if (command.equalsIgnoreCase("view")) { } else if (command.equalsIgnoreCase("view")) {
if (!(args.length == 3)) { if (!(args.length == 3)) {
sender.sendMessage(ChatColor.RED + "命令错误. 正确命令:" + ChatColor.GRAY sender.sendMessage(ChatColor.RED + "命令错误. 正确命令:" + ChatColor.GRAY + " /rb view <player> <backpack>");
+ " /rb view <player> <backpack>");
return false; return false;
} }
String backpack = null; String backpack = null;
@@ -344,8 +290,7 @@ public class MainCommand implements CommandExecutor {
if (!plugin.isUsingMysql()) { if (!plugin.isUsingMysql()) {
boolean fileExists = false; boolean fileExists = false;
String fullName = null; String fullName = null;
final File dir = new File(plugin.getDataFolder() + File.separator final File dir = new File(plugin.getDataFolder() + File.separator + "userdata");
+ "userdata");
for (final File f : dir.listFiles()) { for (final File f : dir.listFiles()) {
final String fileName = f.getName(); final String fileName = f.getName();
fullName = fileName.replace(".yml", ""); fullName = fileName.replace(".yml", "");
@@ -361,15 +306,9 @@ public class MainCommand implements CommandExecutor {
} }
final FileConfig config = PlayerConfig.getInstance(plugin, fullName); final FileConfig config = PlayerConfig.getInstance(plugin, fullName);
if (config.getStringList(backpack + ".Inventory") == null) { if (config.getStringList(backpack + ".Inventory") == null) {
inv = plugin.getServer().createInventory( inv = plugin.getServer().createInventory(p, Integer.parseInt(key.get(0)), ChatColor.translateAlternateColorCodes('&', fullName + "'s " + backpack + " data"));
p,
Integer.parseInt(key.get(0)),
ChatColor.translateAlternateColorCodes('&', fullName + "'s "
+ backpack + " data"));
} else { } else {
inv = Serialization.toInventory( inv = Serialization.toInventory(config.getStringList(backpack + ".Inventory"), fullName + "'s " + backpack + " data", Integer.parseInt(key.get(0)));
config.getStringList(backpack + ".Inventory"), fullName + "'s "
+ backpack + " data", Integer.parseInt(key.get(0)));
} }
} else { } else {
try { try {

View File

@@ -29,37 +29,42 @@ public class InventoryListener implements Listener {
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public boolean isSimilar(ItemStack origin, ItemStack compare) { public boolean isSimilar(final ItemStack origin, final ItemStack compare) {
if (compare == null) if (compare == null) {
return false; return false;
if (compare == origin) }
if (compare == origin) {
return true; return true;
return compare.getTypeId() == origin.getTypeId() }
&& compare.getDurability() == origin.getDurability() return compare.getTypeId() == origin.getTypeId() && compare.getDurability() == origin.getDurability() && compare.hasItemMeta() == origin.hasItemMeta()
&& compare.hasItemMeta() == origin.hasItemMeta() && (compare.hasItemMeta() ? isSimilarMeta(compare.getItemMeta(), origin.getItemMeta()) : true);
&& (compare.hasItemMeta() ? isSimilarMeta(compare.getItemMeta(),
origin.getItemMeta()) : true);
} }
public boolean isSimilarMeta(ItemMeta origin, ItemMeta compare) { public boolean isSimilarMeta(final ItemMeta origin, final ItemMeta compare) {
if (origin.hasDisplayName() != compare.hasDisplayName()) if (origin.hasDisplayName() != compare.hasDisplayName()) {
return false; return false;
if (origin.hasEnchants() != compare.hasEnchants()) }
if (origin.hasEnchants() != compare.hasEnchants()) {
return false; return false;
if (origin.hasLore() != compare.hasLore()) }
if (origin.hasLore() != compare.hasLore()) {
return false; return false;
}
if (origin.hasDisplayName() && compare.hasDisplayName()) { if (origin.hasDisplayName() && compare.hasDisplayName()) {
if (!origin.getDisplayName().equals(compare.getDisplayName())) if (!origin.getDisplayName().equals(compare.getDisplayName())) {
return false; return false;
}
} }
if (origin.hasEnchants() && compare.hasEnchants()) { if (origin.hasEnchants() && compare.hasEnchants()) {
if (!origin.getEnchants().equals(compare.getEnchants())) if (!origin.getEnchants().equals(compare.getEnchants())) {
return false; return false;
}
} }
if (origin.hasLore() && compare.hasLore()) { if (origin.hasLore() && compare.hasLore()) {
if (!(compare.getLore().containsAll(origin.getLore()))) if (!(compare.getLore().containsAll(origin.getLore()))) {
return false; return false;
}
} }
return true; return true;
} }
@@ -108,18 +113,14 @@ public class InventoryListener implements Listener {
if (whitelist == null) { if (whitelist == null) {
continue; continue;
} }
String potentialBackpack = RBUtil.stringToBackpack(whitelist); final String potentialBackpack = RBUtil.stringToBackpack(whitelist);
if (potentialBackpack != null if (potentialBackpack != null && plugin.backpackItems.containsKey(potentialBackpack)) {
&& plugin.backpackItems.containsKey(potentialBackpack)) { if (curItem.isSimilar(plugin.backpackItems.get(potentialBackpack)) || cursor.isSimilar(plugin.backpackItems.get(potentialBackpack))) {
if (curItem.isSimilar(plugin.backpackItems.get(potentialBackpack))
|| cursor.isSimilar(plugin.backpackItems
.get(potentialBackpack))) {
go = false; go = false;
break; break;
} }
} else { } else {
if (RBUtil.itemsAreEqual(curItem, whitelist) if (RBUtil.itemsAreEqual(curItem, whitelist) || RBUtil.itemsAreEqual(cursor, whitelist)) {
|| RBUtil.itemsAreEqual(cursor, whitelist)) {
go = false; go = false;
break; break;
} }
@@ -136,9 +137,8 @@ public class InventoryListener implements Listener {
if (blacklist == null) { if (blacklist == null) {
continue; continue;
} }
String potentialBackpack = RBUtil.stringToBackpack(blacklist); final String potentialBackpack = RBUtil.stringToBackpack(blacklist);
if (potentialBackpack != null if (potentialBackpack != null && plugin.backpackItems.containsKey(potentialBackpack)) {
&& plugin.backpackItems.containsKey(potentialBackpack)) {
if (isSimilar(curItem, plugin.backpackItems.get(potentialBackpack))) { if (isSimilar(curItem, plugin.backpackItems.get(potentialBackpack))) {
e.setCancelled(true); e.setCancelled(true);
p.sendMessage(ChatColor.RED + "当前物品不能放入背包..."); p.sendMessage(ChatColor.RED + "当前物品不能放入背包...");
@@ -155,24 +155,6 @@ public class InventoryListener implements Listener {
} }
} }
/*
* Dupes for (String backpack : plugin.backpackItems.keySet()) { if
* (p.getInventory().contains(plugin.backpackItems.get(backpack))) {
* plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
*
* @Override public void run() { Location loc = p.getLocation(); World world =
* p.getWorld(); for (ItemStack item : p.getInventory().getContents()) { if (item !=
* null && item.hasItemMeta() && item.getAmount() > 1) { for (String backpack :
* plugin.backpacks) { String unstackable = plugin.backpackData.get(backpack).get(18);
* if (unstackable == null || unstackable.equalsIgnoreCase("false")) { continue; } if
* (item.isSimilar(plugin.backpackItems.get(backpack))) { while (item.getAmount() > 1) {
* item.setAmount(item.getAmount() - 1); if (p.getInventory().firstEmpty() != -1) {
* p.getInventory().setItem(p.getInventory().firstEmpty(), item); p.updateInventory(); }
* else { world.dropItemNaturally(loc, plugin.backpackItems.get(backpack)); } } } } } }
* } }, 2L); break; } }
*/
} }
} }
@@ -196,8 +178,7 @@ public class InventoryListener implements Listener {
e.printStackTrace(); e.printStackTrace();
} }
} else { } else {
PlayerConfig.getInstance(plugin, name).set(backpack + ".Inventory", PlayerConfig.getInstance(plugin, name).set(backpack + ".Inventory", invString);
invString);
PlayerConfig.save(); PlayerConfig.save();
} }
} }
@@ -214,8 +195,7 @@ public class InventoryListener implements Listener {
e.printStackTrace(); e.printStackTrace();
} }
} else { } else {
PlayerConfig.getInstance(plugin, split[1]).set(split[0] + ".Inventory", PlayerConfig.getInstance(plugin, split[1]).set(split[0] + ".Inventory", invString);
invString);
PlayerConfig.save(); PlayerConfig.save();
} }
} }

View File

@@ -16,162 +16,126 @@ import cn.citycraft.RealBackpacks.RealBackpacks;
public class MysqlFunctions { public class MysqlFunctions {
private static cn.citycraft.RealBackpacks.RealBackpacks plugin; private static cn.citycraft.RealBackpacks.RealBackpacks plugin;
public static void addBackpackData(final String playerName, public static void addBackpackData(final String playerName, final String backpack, final List<String> invString) throws SQLException {
final String backpack, final List<String> invString) plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
throws SQLException { @Override
plugin.getServer().getScheduler() public void run() {
.runTaskAsynchronously(plugin, new Runnable() { try {
@Override final String url = plugin.getUrl() + "?" + "user=" + plugin.getUser() + "&password=" + plugin.getPass() + "&useUnicode=true&characterEncoding=utf-8";
public void run() { final Connection conn = DriverManager.getConnection(url);
try { final PreparedStatement statement = conn.prepareStatement("SELECT EXISTS(SELECT 1 FROM rb_data WHERE player = ? AND backpack = ? LIMIT 1);");
String url = plugin.getUrl() statement.setString(1, playerName);
+ "?" statement.setString(2, backpack);
+ "user=" final ResultSet res = statement.executeQuery();
+ plugin.getUser() PreparedStatement state = null;
+ "&password=" if (res.next()) {
+ plugin.getPass() if (res.getInt(1) == 1) {
+ "&useUnicode=true&characterEncoding=utf-8"; state = conn.prepareStatement("UPDATE rb_data SET player=?, backpack=?, inventory=? WHERE player=? AND backpack=?;");
final Connection conn = DriverManager state.setString(1, playerName);
.getConnection(url); state.setString(2, backpack);
PreparedStatement statement = conn state.setString(3, Serialization.listToString(invString));
.prepareStatement("SELECT EXISTS(SELECT 1 FROM rb_data WHERE player = ? AND backpack = ? LIMIT 1);"); state.setString(4, playerName);
statement.setString(1, playerName); state.setString(5, backpack);
statement.setString(2, backpack); } else {
final ResultSet res = statement.executeQuery(); state = conn.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
PreparedStatement state = null; state.setString(1, playerName);
if (res.next()) { state.setString(2, backpack);
if (res.getInt(1) == 1) { state.setString(3, Serialization.listToString(invString));
state = conn }
.prepareStatement("UPDATE rb_data SET player=?, backpack=?, inventory=? WHERE player=? AND backpack=?;"); }
state.setString(1, playerName); if (state != null) {
state.setString(2, backpack); state.executeUpdate();
state.setString(3, Serialization state.close();
.listToString(invString)); }
state.setString(4, playerName); conn.close();
state.setString(5, backpack); } catch (final SQLException e) {
} else { e.printStackTrace();
state = conn
.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
state.setString(1, playerName);
state.setString(2, backpack);
state.setString(3, Serialization
.listToString(invString));
} }
}
state.executeUpdate();
state.close();
conn.close();
} catch (final SQLException e) {
e.printStackTrace();
} }
} });
});
}
public static boolean checkIfTableExists(final String table) {
try {
String url = plugin.getUrl() + "?" + "user=" + plugin.getUser()
+ "&password=" + plugin.getPass()
+ "&useUnicode=true&characterEncoding=utf-8";
final Connection conn = DriverManager.getConnection(url);
final Statement state = conn.createStatement();
final DatabaseMetaData dbm = conn.getMetaData();
final ResultSet tables = dbm.getTables(null, null, "rb_data", null);
state.close();
conn.close();
if (tables.next())
return true;
else
return false;
} catch (final SQLException e) {
e.printStackTrace();
} }
return false;
}
public static void createTables() { public static boolean checkIfTableExists(final String table) {
try { try {
String url = plugin.getUrl() + "?" + "user=" + plugin.getUser() final String url = plugin.getUrl() + "?" + "user=" + plugin.getUser() + "&password=" + plugin.getPass() + "&useUnicode=true&characterEncoding=utf-8";
+ "&password=" + plugin.getPass() final Connection conn = DriverManager.getConnection(url);
+ "&useUnicode=true&characterEncoding=utf-8"; final Statement state = conn.createStatement();
final Connection conn = DriverManager.getConnection(url); final DatabaseMetaData dbm = conn.getMetaData();
final PreparedStatement state = conn final ResultSet tables = dbm.getTables(null, null, "rb_data", null);
.prepareStatement("CREATE TABLE rb_data (player VARCHAR(16), backpack VARCHAR(20), inventory TEXT)ENGINE=InnoDB DEFAULT CHARSET=UTF8;"); state.close();
state.executeUpdate(); conn.close();
state.close(); if (tables.next()) {
conn.close(); return true;
} catch (final SQLException e) { } else {
e.printStackTrace(); return false;
}
}
public static void delete(final String playerName, final String backpack) {
plugin.getServer().getScheduler()
.runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
try {
String url = plugin.getUrl()
+ "?"
+ "user="
+ plugin.getUser()
+ "&password="
+ plugin.getPass()
+ "&useUnicode=true&characterEncoding=utf-8";
final Connection conn = DriverManager
.getConnection(url);
final PreparedStatement state = conn
.prepareStatement("DELETE FROM rb_data WHERE player = ? AND backpack = ?;");
state.setString(1, playerName);
state.setString(2, backpack);
state.executeUpdate();
state.close();
conn.close();
} catch (final SQLException e) {
e.printStackTrace();
} }
} } catch (final SQLException e) {
}); e.printStackTrace();
}
public static Inventory getBackpackInv(final String playerName,
final String backpack) throws SQLException {
Inventory returnInv = null;
try {
String url = plugin.getUrl() + "?" + "user=" + plugin.getUser()
+ "&password=" + plugin.getPass()
+ "&useUnicode=true&characterEncoding=utf-8";
final Connection conn = DriverManager.getConnection(url);
final PreparedStatement state = conn
.prepareStatement("SELECT inventory FROM rb_data WHERE player=? AND backpack=? LIMIT 1;");
state.setString(1, playerName);
state.setString(2, backpack);
final ResultSet res = state.executeQuery();
if (res.next()) {
final String invString = res.getString(1);
if (invString != null) {
returnInv = Serialization.toInventory(Serialization
.stringToList(invString), ChatColor
.translateAlternateColorCodes('&',
plugin.backpackData.get(backpack).get(3)),
Integer.parseInt(plugin.backpackData.get(backpack)
.get(0)));
} else {
returnInv = null;
} }
} return false;
state.close();
conn.close();
} catch (final SQLException e) {
e.printStackTrace();
} }
return returnInv;
}
public static void setMysqlFunc(final RealBackpacks plugin) { public static void createTables() {
MysqlFunctions.plugin = plugin; try {
} final String url = plugin.getUrl() + "?" + "user=" + plugin.getUser() + "&password=" + plugin.getPass() + "&useUnicode=true&characterEncoding=utf-8";
final Connection conn = DriverManager.getConnection(url);
final PreparedStatement state = conn.prepareStatement("CREATE TABLE rb_data (player VARCHAR(16), backpack VARCHAR(20), inventory TEXT)ENGINE=InnoDB DEFAULT CHARSET=UTF8;");
state.executeUpdate();
state.close();
conn.close();
} catch (final SQLException e) {
e.printStackTrace();
}
}
public static void delete(final String playerName, final String backpack) {
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
try {
final String url = plugin.getUrl() + "?" + "user=" + plugin.getUser() + "&password=" + plugin.getPass() + "&useUnicode=true&characterEncoding=utf-8";
final Connection conn = DriverManager.getConnection(url);
final PreparedStatement state = conn.prepareStatement("DELETE FROM rb_data WHERE player = ? AND backpack = ?;");
state.setString(1, playerName);
state.setString(2, backpack);
state.executeUpdate();
state.close();
conn.close();
} catch (final SQLException e) {
e.printStackTrace();
}
}
});
}
public static Inventory getBackpackInv(final String playerName, final String backpack) throws SQLException {
Inventory returnInv = null;
try {
final String url = plugin.getUrl() + "?" + "user=" + plugin.getUser() + "&password=" + plugin.getPass() + "&useUnicode=true&characterEncoding=utf-8";
final Connection conn = DriverManager.getConnection(url);
final PreparedStatement state = conn.prepareStatement("SELECT inventory FROM rb_data WHERE player=? AND backpack=? LIMIT 1;");
state.setString(1, playerName);
state.setString(2, backpack);
final ResultSet res = state.executeQuery();
if (res.next()) {
final String invString = res.getString(1);
if (invString != null) {
returnInv = Serialization.toInventory(Serialization.stringToList(invString), ChatColor.translateAlternateColorCodes('&', plugin.backpackData.get(backpack).get(3)),
Integer.parseInt(plugin.backpackData.get(backpack).get(0)));
}
}
state.close();
conn.close();
} catch (final SQLException e) {
e.printStackTrace();
}
return returnInv;
}
public static void setMysqlFunc(final RealBackpacks plugin) {
MysqlFunctions.plugin = plugin;
}
} }