mirror of
https://e.coding.net/circlecloud/RealBackpacks.git
synced 2025-11-25 21:46:12 +00:00
use new serialization and remove json...
Signed-off-by: j502647092 <jtb1@163.com>
This commit is contained in:
330
src/main/java/cn/citycraft/RealBackpacks/MainCommand.java
Normal file
330
src/main/java/cn/citycraft/RealBackpacks/MainCommand.java
Normal file
@@ -0,0 +1,330 @@
|
||||
package cn.citycraft.RealBackpacks;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import cn.citycraft.RealBackpacks.util.MysqlFunctions;
|
||||
import cn.citycraft.RealBackpacks.util.RBUtil;
|
||||
|
||||
public class MainCommand implements CommandExecutor {
|
||||
|
||||
private final RealBackpacks plugin;
|
||||
|
||||
// private final boolean exist = false;
|
||||
|
||||
private final String[] helps = new String[] { "§6====== 真实背包插件 By:喵♂呜 ======", "§4* §a查看可购买列表 §7/rb list ", "§4* §a购买背包 §7/rb buy <背包名称> ",
|
||||
"§4* §a给玩家指定背包 §7/rb give <玩家名称> <背包名称>", "§4* §a查看玩家指定背包 §7/rb view <玩家名称> <背包名称>", "§4* §a数据转移至MySQL §7/rb filetomysql" };
|
||||
|
||||
public MainCommand(final RealBackpacks plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
|
||||
if (cmd.getName().equalsIgnoreCase("rb")) {
|
||||
if (args.length == 0) {
|
||||
sender.sendMessage(helps);
|
||||
}
|
||||
if (args.length >= 1) {
|
||||
final String command = args[0];
|
||||
if (command.equalsIgnoreCase("reload")) {
|
||||
if (plugin.isUsingPerms() && !sender.hasPermission("rb.reload")) {
|
||||
sender.sendMessage(ChatColor.RED + "你没有此命令的权限!");
|
||||
return false;
|
||||
}
|
||||
final Long first = System.currentTimeMillis();
|
||||
plugin.reloadConfig();
|
||||
plugin.setupLists();
|
||||
plugin.getServer().resetRecipes();
|
||||
plugin.setup();
|
||||
sender.sendMessage(ChatColor.GRAY + "配置文件重载完毕 用时 " + ChatColor.YELLOW + (System.currentTimeMillis() - first) + "毫秒" + ChatColor.GRAY + ".");
|
||||
return true;
|
||||
} else if (command.equalsIgnoreCase("buy") || command.equalsIgnoreCase("purchase")) {
|
||||
if (!plugin.isUsingVault()) {
|
||||
sender.sendMessage(ChatColor.RED + "当前命令无法使用,因为没有安装经济插件.");
|
||||
return false;
|
||||
}
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "控制台不能使用此命令.");
|
||||
return false;
|
||||
}
|
||||
if (!(args.length == 2)) {
|
||||
sender.sendMessage(ChatColor.RED + "命令错误. 正确命令:" + ChatColor.GRAY + " /rb buy <backpack>");
|
||||
return false;
|
||||
}
|
||||
String backpack = null;
|
||||
backpack = RBUtil.stringToBackpack(args[1]);
|
||||
if (backpack == null) {
|
||||
sender.sendMessage("背包不存在.");
|
||||
return false;
|
||||
}
|
||||
if (plugin.isUsingPerms() && !sender.hasPermission("rb." + backpack + ".buy")) {
|
||||
sender.sendMessage("没有购买的权限.");
|
||||
return false;
|
||||
}
|
||||
if (plugin.backpackData.get(backpack).get(13) != null && !plugin.backpackData.get(backpack).get(13).equals("true")) {
|
||||
sender.sendMessage("不能被购买.");
|
||||
return false;
|
||||
}
|
||||
final double price = Double.parseDouble(plugin.backpackData.get(backpack).get(14));
|
||||
if (RealBackpacks.econ.getBalance(sender.getName()) < price) {
|
||||
sender.sendMessage(ChatColor.RED + "你没有足够的钱购买这个背包.");
|
||||
return false;
|
||||
}
|
||||
final Player p = (Player) sender;
|
||||
final Inventory inv = p.getInventory();
|
||||
final ItemStack backpackItem = plugin.backpackItems.get(backpack);
|
||||
if (inv.firstEmpty() != -1) {
|
||||
RealBackpacks.econ.withdrawPlayer(p.getName(), price);
|
||||
if (plugin.backpackData.get(backpack).get(18) != null && plugin.backpackData.get(backpack).get(18).equalsIgnoreCase("true")) {
|
||||
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 {
|
||||
inv.setItem(inv.firstEmpty(), backpackItem);
|
||||
}
|
||||
} else {
|
||||
if (RealBackpacks.globalGlow && plugin.backpackData.get(backpack).get(17) != null && plugin.backpackData.get(backpack).get(17).equalsIgnoreCase("true")) {
|
||||
inv.addItem(RealBackpacks.NMS.addGlow(backpackItem));
|
||||
} else {
|
||||
inv.addItem(backpackItem);
|
||||
}
|
||||
}
|
||||
p.updateInventory();
|
||||
sender.sendMessage(ChatColor.GREEN + "你花费了 " + ChatColor.GOLD + price + ChatColor.GREEN + " 购买了背包: " + ChatColor.GOLD + backpack);
|
||||
return true;
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "你的背包是空的.");
|
||||
return false;
|
||||
}
|
||||
} else if (command.equalsIgnoreCase("list")) {
|
||||
if (plugin.isUsingPerms() && !sender.hasPermission("rb.list")) {
|
||||
sender.sendMessage(ChatColor.RED + "你没有此命令的权限!");
|
||||
return false;
|
||||
}
|
||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + " 名称 " + ChatColor.GOLD + "|" + ChatColor.AQUA + " 大小 " + ChatColor.GOLD + "|" + ChatColor.GREEN + " 价格 ");
|
||||
sender.sendMessage(ChatColor.GOLD + "-----------------------------------");
|
||||
if (plugin.isUsingPerms()) {
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
final boolean hasPerm = sender.hasPermission("rb." + backpack + ".buy");
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (plugin.backpackData.get(backpack).get(13).equalsIgnoreCase("true") && hasPerm) {
|
||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.GREEN
|
||||
+ Double.parseDouble(key.get(14)));
|
||||
} else if (plugin.backpackData.get(backpack).get(13) != null && !plugin.backpackData.get(backpack).get(13).equalsIgnoreCase("true") && hasPerm) {
|
||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.RED + "不能购买");
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.RED + "没有足够的权限购买");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (plugin.backpackData.get(backpack).get(13) != null && plugin.backpackData.get(backpack).get(13).equalsIgnoreCase("true")) {
|
||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.GREEN
|
||||
+ Double.parseDouble(key.get(14)));
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + backpack + ChatColor.GOLD + " | " + ChatColor.AQUA + key.get(0) + ChatColor.GOLD + " | " + ChatColor.RED + "不能购买");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (command.equalsIgnoreCase("give")) {
|
||||
if (!(args.length == 3)) {
|
||||
sender.sendMessage(ChatColor.RED + "错误的命令. 正确方式:" + ChatColor.GRAY + " /rb give <玩家> <背包名称>");
|
||||
return false;
|
||||
}
|
||||
String backpack = null;
|
||||
backpack = RBUtil.stringToBackpack(args[2]);
|
||||
if (plugin.isUsingPerms() && !sender.hasPermission("rb." + backpack + ".give")) {
|
||||
sender.sendMessage(ChatColor.RED + "没有足够的权限");
|
||||
return false;
|
||||
}
|
||||
if (backpack == null) {
|
||||
sender.sendMessage(ChatColor.RED + "背包不存在");
|
||||
return false;
|
||||
}
|
||||
final Player other = plugin.getServer().getPlayer(args[1]);
|
||||
if (other == null) {
|
||||
sender.sendMessage(ChatColor.RED + "玩家不存在");
|
||||
return false;
|
||||
}
|
||||
final Inventory inv = other.getInventory();
|
||||
final ItemStack backpackItem = plugin.backpackItems.get(backpack);
|
||||
if (inv.firstEmpty() != -1) {
|
||||
if (plugin.backpackData.get(backpack).get(18) != null && plugin.backpackData.get(backpack).get(18).equalsIgnoreCase("true")) {
|
||||
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 {
|
||||
inv.setItem(inv.firstEmpty(), backpackItem);
|
||||
}
|
||||
} else {
|
||||
if (RealBackpacks.globalGlow && plugin.backpackData.get(backpack).get(17) != null && plugin.backpackData.get(backpack).get(17).equalsIgnoreCase("true")) {
|
||||
inv.addItem(RealBackpacks.NMS.addGlow(backpackItem));
|
||||
} else {
|
||||
inv.addItem(backpackItem);
|
||||
}
|
||||
}
|
||||
other.updateInventory();
|
||||
sender.sendMessage(ChatColor.GREEN + "你把背包 " + ChatColor.GOLD + backpack + ChatColor.GREEN + " 发送给了 " + ChatColor.GOLD + other.getName());
|
||||
return true;
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + other.getName() + "的背包已经满了");
|
||||
return false;
|
||||
}
|
||||
// } else if (command.equalsIgnoreCase("filetomysql")) {
|
||||
// if (plugin.isUsingPerms() && !sender.hasPermission("rb.filetomysql")) {
|
||||
// return false;
|
||||
// }
|
||||
// plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// if (!MysqlFunctions.checkIfTableExists("rb_data")) {
|
||||
// MysqlFunctions.createTables();
|
||||
// exist = false;
|
||||
// } else {
|
||||
// exist = true;
|
||||
// }
|
||||
// try {
|
||||
// final Connection conn = DriverManager.getConnection(plugin.getUrl(), plugin.getUser(), plugin.getPass());
|
||||
// final File dir = new File(plugin.getDataFolder() + File.separator + "userdata");
|
||||
// int i = 0, times = 0;
|
||||
// final int files = dir.listFiles().length;
|
||||
// for (final File child : dir.listFiles()) {
|
||||
// final String player = child.getName().replace(".yml", "");
|
||||
// final FileConfig config = PlayerConfig.getInstance(plugin, player);
|
||||
// i++;
|
||||
// PreparedStatement statement = null;
|
||||
// PreparedStatement state = null;
|
||||
// for (final String backpack : config.getConfigurationSection("").getKeys(false)) {
|
||||
// if (exist) {
|
||||
// statement = conn.prepareStatement("SELECT EXISTS(SELECT 1 FROM rb_data WHERE player = ? AND backpack = ? LIMIT 1);");
|
||||
// statement.setString(1, player);
|
||||
// statement.setString(2, backpack);
|
||||
// final ResultSet res = statement.executeQuery();
|
||||
// if (res.next()) {
|
||||
// if (res.getInt(1) == 1) {
|
||||
// state = conn.prepareStatement("UPDATE rb_data SET player=?, backpack=?, inventory=? WHERE player=? AND backpack=?;");
|
||||
// state.setString(1, player);
|
||||
// state.setString(2, backpack);
|
||||
// state.setString(3, Serialization.listToString(config.getStringList(backpack + ".Inventory")));
|
||||
// state.setString(4, player);
|
||||
// state.setString(5, backpack);
|
||||
// } else {
|
||||
// state = conn.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
|
||||
// state.setString(1, player);
|
||||
// state.setString(2, backpack);
|
||||
// state.setString(3, Serialization.listToString(config.getStringList(backpack + ".Inventory")));
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// state = conn.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
|
||||
// state.setString(1, player);
|
||||
// state.setString(2, backpack);
|
||||
// state.setString(3, Serialization.listToString(config.getStringList(backpack + ".Inventory")));
|
||||
// }
|
||||
// if (state != null) {
|
||||
// state.executeUpdate();
|
||||
// state.close();
|
||||
// }
|
||||
// }
|
||||
// if (i == 50) {
|
||||
// i = 0;
|
||||
// times++;
|
||||
// sender.sendMessage(ChatColor.LIGHT_PURPLE + "" + times * 50 + "/" + files + " files have been transferred.");
|
||||
// }
|
||||
// }
|
||||
// conn.close();
|
||||
// sender.sendMessage(ChatColor.LIGHT_PURPLE + "数据转换完成.");
|
||||
// } catch (final SQLException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
} else if (command.equalsIgnoreCase("view")) {
|
||||
if (!(args.length == 3)) {
|
||||
sender.sendMessage(ChatColor.RED + "命令错误. 正确命令:" + ChatColor.GRAY + " /rb view <player> <backpack>");
|
||||
return false;
|
||||
}
|
||||
String backpack = null;
|
||||
backpack = RBUtil.stringToBackpack(args[2]);
|
||||
boolean fullview = false;
|
||||
boolean restrictedview = false;
|
||||
if (plugin.isUsingPerms() && sender.hasPermission("rb.fullview")) {
|
||||
fullview = true;
|
||||
} else if (plugin.isUsingPerms() && sender.hasPermission("rb.restrictedview")) {
|
||||
restrictedview = true;
|
||||
}
|
||||
if (plugin.isUsingPerms() && !fullview && !restrictedview) {
|
||||
sender.sendMessage(ChatColor.RED + "没有足够的权限购买");
|
||||
return false;
|
||||
}
|
||||
if (backpack == null) {
|
||||
sender.sendMessage(ChatColor.RED + "背包不存在");
|
||||
return false;
|
||||
}
|
||||
Inventory inv = null;
|
||||
final String name = args[1];
|
||||
final Player p = (Player) sender;
|
||||
// final List<String> key = plugin.backpackData.get(backpack);
|
||||
// if (!plugin.isUsingMysql()) {
|
||||
// boolean fileExists = false;
|
||||
// String fullName = null;
|
||||
// final File dir = new File(plugin.getDataFolder() + File.separator + "userdata");
|
||||
// for (final File f : dir.listFiles()) {
|
||||
// final String fileName = f.getName();
|
||||
// fullName = fileName.replace(".yml", "");
|
||||
// if (fullName.equalsIgnoreCase(name)) {
|
||||
// name = fullName;
|
||||
// fileExists = true;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// if (!fileExists) {
|
||||
// sender.sendMessage(ChatColor.RED + "这货从来没打开过背包,所以是空的,2333.");
|
||||
// return false;
|
||||
// }
|
||||
// final FileConfig config = PlayerConfig.getInstance(plugin, fullName);
|
||||
// if (config.getStringList(backpack + ".Inventory") == null) {
|
||||
// inv = plugin.getServer().createInventory(p, Integer.parseInt(key.get(0)), ChatColor.translateAlternateColorCodes('&', fullName + "'s " + backpack + " data"));
|
||||
// } else {
|
||||
// inv = Serialization.toInventory(config.getStringList(backpack + ".Inventory"), fullName + "'s " + backpack + " data", Integer.parseInt(key.get(0)));
|
||||
// }
|
||||
// } else {
|
||||
try {
|
||||
inv = MysqlFunctions.getBackpackInv(name, backpack);
|
||||
} catch (final SQLException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
if (inv == null) {
|
||||
sender.sendMessage(ChatColor.RED + "这货从来没打开过背包,所以是空的,2333.");
|
||||
return false;
|
||||
}
|
||||
// }
|
||||
if (plugin.playerData.containsKey(name)) {
|
||||
sender.sendMessage(ChatColor.RED + "玩家打开了背包,请等待玩家关闭.");
|
||||
return false;
|
||||
}
|
||||
if (fullview || !plugin.isUsingPerms()) {
|
||||
plugin.adminFullView.put(sender.getName(), backpack + ":" + name);
|
||||
} else {
|
||||
plugin.adminRestrictedView.add(sender.getName());
|
||||
}
|
||||
p.openInventory(inv);
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "命令未找到.");
|
||||
sender.sendMessage(helps);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
14
src/main/java/cn/citycraft/RealBackpacks/RBInterface.java
Normal file
14
src/main/java/cn/citycraft/RealBackpacks/RBInterface.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package cn.citycraft.RealBackpacks;
|
||||
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public interface RBInterface {
|
||||
|
||||
public String inventoryToString(Inventory inventory);
|
||||
|
||||
public Inventory stringToInventory(String data, String name);
|
||||
|
||||
public ItemStack addGlow(ItemStack item);
|
||||
|
||||
}
|
||||
349
src/main/java/cn/citycraft/RealBackpacks/RealBackpacks.java
Normal file
349
src/main/java/cn/citycraft/RealBackpacks/RealBackpacks.java
Normal file
@@ -0,0 +1,349 @@
|
||||
package cn.citycraft.RealBackpacks;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.material.MaterialData;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import cn.citycraft.PluginHelper.config.FileConfig;
|
||||
import cn.citycraft.RealBackpacks.listeners.CraftListener;
|
||||
import cn.citycraft.RealBackpacks.listeners.EntityListener;
|
||||
import cn.citycraft.RealBackpacks.listeners.InventoryListener;
|
||||
import cn.citycraft.RealBackpacks.listeners.PlayerListener;
|
||||
import cn.citycraft.RealBackpacks.util.MysqlFunctions;
|
||||
import cn.citycraft.RealBackpacks.util.RBUtil;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
|
||||
public class RealBackpacks extends JavaPlugin {
|
||||
|
||||
public static RBInterface NMS;
|
||||
|
||||
public static Economy econ = null;
|
||||
public static boolean globalGlow = true;
|
||||
|
||||
private static boolean average = false;
|
||||
private static boolean add = false;
|
||||
private boolean usingMysql = false;
|
||||
private boolean vault = true;
|
||||
private boolean usingPermissions = true;
|
||||
private String user = null;
|
||||
private String password = null;
|
||||
|
||||
private String url;
|
||||
public List<String> backpacks = new ArrayList<String>();
|
||||
public HashMap<String, List<String>> backpackData = new HashMap<String, List<String>>();
|
||||
public HashMap<String, List<String>> backpackLore = new HashMap<String, List<String>>();
|
||||
public HashMap<String, List<String>> backpackRecipe = new HashMap<String, List<String>>();
|
||||
public HashMap<String, ItemStack> backpackItems = new HashMap<String, ItemStack>();
|
||||
public HashMap<String, ItemStack> backpackOverrides = new HashMap<String, ItemStack>();
|
||||
public HashMap<String, List<String>> backpackBlacklist = new HashMap<String, List<String>>();
|
||||
|
||||
public HashMap<String, List<String>> backpackWhitelist = new HashMap<String, List<String>>();
|
||||
public HashMap<String, String> playerData = new HashMap<String, String>();
|
||||
public HashMap<String, String> adminFullView = new HashMap<String, String>();
|
||||
public List<String> adminRestrictedView = new ArrayList<String>();
|
||||
|
||||
public List<String> slowedPlayers = new ArrayList<String>();
|
||||
|
||||
public FileConfig config;
|
||||
|
||||
// List key
|
||||
// 0 = Size
|
||||
// 1 = UseRecipe
|
||||
// 2 = id
|
||||
// 3 = name
|
||||
// 4 =destroyContents
|
||||
// 5 = dropContents
|
||||
// 6 = dropBackpack
|
||||
// 7 = keepBackpack
|
||||
// 8 = walkSpeedEnabled
|
||||
// 9 = walkSpeedMultiplier
|
||||
// 10 = increasedHungerEnabled
|
||||
// 11 = hungerBarsToDeplete
|
||||
// 12 = hungerBarsToSubtractWhenEating
|
||||
// 13 = Purchasable
|
||||
// 14 = Price
|
||||
// 15 = OpenWith
|
||||
// 16 = UseWhitelist
|
||||
// 17 = addGlow
|
||||
// 18 = Unstackable
|
||||
|
||||
@Override
|
||||
public FileConfiguration getConfig() {
|
||||
if (config == null) {
|
||||
config = new FileConfig(this);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
public String getPass() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public boolean isAdding() {
|
||||
return add;
|
||||
}
|
||||
|
||||
public boolean isAveraging() {
|
||||
return average;
|
||||
}
|
||||
|
||||
public boolean isUsingMysql() {
|
||||
return usingMysql;
|
||||
}
|
||||
|
||||
public boolean isUsingPerms() {
|
||||
return usingPermissions;
|
||||
}
|
||||
|
||||
public boolean isUsingVault() {
|
||||
return vault;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
final String p = getServer().getClass().getPackage().getName();
|
||||
final String version = p.substring(p.lastIndexOf('.') + 1);
|
||||
final String classname = getClass().getPackage().getName() + ".versions." + version;
|
||||
try {
|
||||
final Class<?> clazz = Class.forName(classname);
|
||||
final Constructor<?> cons = clazz.getDeclaredConstructor(getClass());
|
||||
final Object obj = cons.newInstance(this);
|
||||
if (obj instanceof RBInterface) {
|
||||
NMS = (RBInterface) obj;
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
globalGlow = false;
|
||||
}
|
||||
|
||||
if (isEnabled()) {
|
||||
MysqlFunctions.setMysqlFunc(this);
|
||||
RBUtil.setRBUtil(this);
|
||||
if (!setupEconomy()) {
|
||||
getLogger().warning("Vault 未找到, 部分功能无法使用...");
|
||||
vault = false;
|
||||
} else {
|
||||
getLogger().info("Vault 已找到, 启用经济系统...");
|
||||
}
|
||||
setupLists();
|
||||
setup();
|
||||
if (isEnabled()) {
|
||||
getServer().getPluginManager().registerEvents(new PlayerListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new CraftListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new InventoryListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new EntityListener(this), this);
|
||||
getServer().getScheduler().runTaskTimer(this, new WalkSpeedRunnable(this), 20, 20);
|
||||
|
||||
getCommand("rb").setExecutor(new MainCommand(this));
|
||||
|
||||
getLogger().info("真实背包已加载 By: 喵♂呜.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadConfig() {
|
||||
config.reload();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveConfig() {
|
||||
config.save();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setup() {
|
||||
user = getConfig().getString("Data.MySQL.username");
|
||||
password = getConfig().getString("Data.MySQL.password");
|
||||
url = "jdbc:mysql://" + getConfig().getString("Data.MySQL.ip") + ":" + getConfig().getInt("Data.MySQL.port") + "/" + getConfig().getString("Data.MySQL.database");
|
||||
|
||||
if (!getConfig().isSet("Config.MultipleBackpacksInInventory.average")) {
|
||||
average = false;
|
||||
} else {
|
||||
average = getConfig().getBoolean("Config.MultipleBackpacksInInventory.average");
|
||||
}
|
||||
|
||||
if (!getConfig().isSet("Config.MultipleBackpacksInInventory.add")) {
|
||||
add = false;
|
||||
} else {
|
||||
add = getConfig().getBoolean("Config.MultipleBackpacksInInventory.add");
|
||||
}
|
||||
|
||||
if (!getConfig().isSet("Data.FileSystem")) {
|
||||
usingMysql = false;
|
||||
} else if (getConfig().getString("Data.FileSystem").equalsIgnoreCase("mysql") || getConfig().getString("Data.FileSystem").equalsIgnoreCase("sql")) {
|
||||
usingMysql = true;
|
||||
if (!MysqlFunctions.checkIfTableExists("rb_data")) {
|
||||
MysqlFunctions.createTables();
|
||||
}
|
||||
} else {
|
||||
usingMysql = false;
|
||||
}
|
||||
|
||||
if (!getConfig().isSet("Config.usePermissions")) {
|
||||
usingPermissions = true;
|
||||
} else {
|
||||
usingPermissions = getConfig().getBoolean("Config.usePermissions");
|
||||
}
|
||||
|
||||
for (final String backpack : backpacks) {
|
||||
|
||||
final String override = getConfig().getString("Backpacks." + backpack + ".Override");
|
||||
if (override != null) {
|
||||
backpackOverrides.put(backpack, RBUtil.getItemstackFromString(override));
|
||||
} else {
|
||||
backpackOverrides.put(backpack, null);
|
||||
}
|
||||
|
||||
final List<String> key = backpackData.get(backpack);
|
||||
final String backpackItem = key.get(2);
|
||||
backpackItems.put(backpack, getConfigLore(RBUtil.getItemstackFromString(backpackItem), backpack));
|
||||
|
||||
ShapedRecipe recipe = null;
|
||||
if (key.get(1).equalsIgnoreCase("true")) {
|
||||
recipe = new ShapedRecipe(backpackItems.get(backpack));
|
||||
recipe.shape("abc", "def", "ghi");
|
||||
int i = 0;
|
||||
for (final String s : backpackRecipe.get(backpack)) {
|
||||
final String[] itemIds = s.split(",");
|
||||
char shapechar = 0;
|
||||
for (final String itemid : itemIds) {
|
||||
i++;
|
||||
switch (i) {
|
||||
case 1:
|
||||
shapechar = 'a';
|
||||
break;
|
||||
case 2:
|
||||
shapechar = 'b';
|
||||
break;
|
||||
case 3:
|
||||
shapechar = 'c';
|
||||
break;
|
||||
case 4:
|
||||
shapechar = 'd';
|
||||
break;
|
||||
case 5:
|
||||
shapechar = 'e';
|
||||
break;
|
||||
case 6:
|
||||
shapechar = 'f';
|
||||
break;
|
||||
case 7:
|
||||
shapechar = 'g';
|
||||
break;
|
||||
case 8:
|
||||
shapechar = 'h';
|
||||
break;
|
||||
case 9:
|
||||
shapechar = 'i';
|
||||
break;
|
||||
}
|
||||
final String[] itemsplit = itemid.split(":");
|
||||
if (itemsplit[0].equals("0")) {
|
||||
continue;
|
||||
}
|
||||
if (itemsplit.length > 1) {
|
||||
final Material baseblock = Material.getMaterial(Integer.parseInt(itemsplit[0]));
|
||||
final MaterialData ingredient = new MaterialData(baseblock, (byte) Integer.parseInt(itemsplit[1]));
|
||||
recipe.setIngredient(shapechar, ingredient);
|
||||
} else {
|
||||
final Material baseblock = Material.getMaterial(Integer.parseInt(itemsplit[0]));
|
||||
recipe.setIngredient(shapechar, baseblock);
|
||||
}
|
||||
}
|
||||
}
|
||||
getServer().addRecipe(recipe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setupLists() {
|
||||
backpacks.clear();
|
||||
backpackRecipe.clear();
|
||||
backpackData.clear();
|
||||
backpackLore.clear();
|
||||
for (final String backpack : getConfig().getConfigurationSection("Backpacks").getKeys(false)) {
|
||||
final List<String> list = new ArrayList<String>();
|
||||
backpacks.add(backpack);
|
||||
list.add(0, getConfig().getString("Backpacks." + backpack + ".Size"));
|
||||
list.add(1, getConfig().getString("Backpacks." + backpack + ".UseRecipe"));
|
||||
if (getConfig().getStringList("Backpacks." + backpack + ".Recipe") != null) {
|
||||
backpackRecipe.put(backpack, getConfig().getStringList("Backpacks." + backpack + ".Recipe"));
|
||||
} else {
|
||||
backpackRecipe.put(backpack, null);
|
||||
}
|
||||
list.add(2, getConfig().getString("Backpacks." + backpack + ".BackpackItem.id"));
|
||||
list.add(3, getConfig().getString("Backpacks." + backpack + ".BackpackItem.name"));
|
||||
if (getConfig().getStringList("Backpacks." + backpack + ".BackpackItem.lore") != null) {
|
||||
backpackLore.put(backpack, getConfig().getStringList("Backpacks." + backpack + ".BackpackItem.lore"));
|
||||
} else {
|
||||
backpackLore.put(backpack, null);
|
||||
}
|
||||
list.add(4, getConfig().getString("Backpacks." + backpack + ".onDeath.destroyContents"));
|
||||
list.add(5, getConfig().getString("Backpacks." + backpack + ".onDeath.dropContents"));
|
||||
list.add(6, getConfig().getString("Backpacks." + backpack + ".onDeath.dropBackpack"));
|
||||
list.add(7, getConfig().getString("Backpacks." + backpack + ".onDeath.keepBackpack"));
|
||||
list.add(8, getConfig().getString("Backpacks." + backpack + ".WalkSpeedFeature.enabled"));
|
||||
list.add(9, getConfig().getString("Backpacks." + backpack + ".WalkSpeedFeature.walkingSpeed"));
|
||||
list.add(10, getConfig().getString("Backpacks." + backpack + ".IncreasedHungerFeature.enabled"));
|
||||
list.add(11, getConfig().getString("Backpacks." + backpack + ".IncreasedHungerFeature.extraHungerBarsToDeplete"));
|
||||
list.add(12, getConfig().getString("Backpacks." + backpack + ".IncreasedHungerFeature.hungerBarsToSubtractWhenEating"));
|
||||
list.add(13, getConfig().getString("Backpacks." + backpack + ".Purchasable"));
|
||||
list.add(14, getConfig().getString("Backpacks." + backpack + ".Price"));
|
||||
list.add(15, getConfig().getString("Backpacks." + backpack + ".OpenWith"));
|
||||
list.add(16, getConfig().getString("Backpacks." + backpack + ".UseWhitelist"));
|
||||
list.add(17, getConfig().getString("Backpacks." + backpack + ".addGlow"));
|
||||
list.add(18, getConfig().getString("Backpacks." + backpack + ".Unstackable"));
|
||||
backpackData.put(backpack, list);
|
||||
backpackBlacklist.put(backpack, getConfig().getStringList("Backpacks." + backpack + ".ItemBlacklist"));
|
||||
backpackWhitelist.put(backpack, getConfig().getStringList("Backpacks." + backpack + ".ItemWhitelist"));
|
||||
}
|
||||
}
|
||||
|
||||
private ItemStack getConfigLore(final ItemStack item, final String backpack) {
|
||||
final List<String> key = backpackData.get(backpack);
|
||||
final ItemMeta meta = item.getItemMeta();
|
||||
final ArrayList<String> lore = new ArrayList<String>();
|
||||
lore.clear();
|
||||
if (backpackLore.get(backpack) != null) {
|
||||
for (final String s : backpackLore.get(backpack)) {
|
||||
lore.add(ChatColor.translateAlternateColorCodes('&', s));
|
||||
}
|
||||
meta.setLore(lore);
|
||||
}
|
||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', key.get(3)));
|
||||
item.setItemMeta(meta);
|
||||
return item;
|
||||
}
|
||||
|
||||
private boolean setupEconomy() {
|
||||
if (getServer().getPluginManager().getPlugin("Vault") == null) {
|
||||
return false;
|
||||
}
|
||||
final RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
|
||||
if (rsp == null) {
|
||||
return false;
|
||||
}
|
||||
econ = rsp.getProvider();
|
||||
return econ != null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package cn.citycraft.RealBackpacks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
|
||||
public class WalkSpeedRunnable implements Runnable {
|
||||
private RealBackpacks plugin;
|
||||
|
||||
public WalkSpeedRunnable(RealBackpacks plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (Player p : plugin.getServer().getOnlinePlayers()) {
|
||||
final String name = p.getName();
|
||||
if (plugin.slowedPlayers.contains(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Inventory inv = p.getInventory();
|
||||
final List<String> backpackList = new ArrayList<String>();
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (key.get(8) != null && key.get(8).equalsIgnoreCase("true") && inv != null && inv.contains(plugin.backpackItems.get(backpack))) {
|
||||
backpackList.add(backpack);
|
||||
}
|
||||
}
|
||||
final int listsize = backpackList.size();
|
||||
if (listsize > 0) {
|
||||
float walkSpeedMultiplier = 0.0F;
|
||||
if (listsize > 1) {
|
||||
if (plugin.isAveraging()) {
|
||||
float average = 0;
|
||||
for (final String backpack : backpackList) {
|
||||
average += Float.parseFloat(plugin.backpackData.get(backpack).get(9));
|
||||
}
|
||||
walkSpeedMultiplier = average / listsize;
|
||||
} else {
|
||||
if (plugin.isAdding()) {
|
||||
float sum = 0;
|
||||
for (final String backpack : backpackList) {
|
||||
sum += 0.2F - Float.parseFloat(plugin.backpackData.get(backpack).get(9));
|
||||
}
|
||||
walkSpeedMultiplier = 0.2F - sum;
|
||||
} else {
|
||||
final List<Float> floatList = new ArrayList<Float>();
|
||||
for (final String backpack : backpackList) {
|
||||
floatList.add(Float.parseFloat(plugin.backpackData.get(backpack).get(9)));
|
||||
}
|
||||
walkSpeedMultiplier = Collections.max(floatList);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (listsize == 1) {
|
||||
walkSpeedMultiplier = Float.parseFloat(plugin.backpackData.get(backpackList.get(0)).get(9));
|
||||
}
|
||||
}
|
||||
plugin.slowedPlayers.add(name);
|
||||
p.setWalkSpeed(walkSpeedMultiplier);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package cn.citycraft.RealBackpacks.listeners;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import cn.citycraft.RealBackpacks.RealBackpacks;
|
||||
|
||||
public class CraftListener implements Listener {
|
||||
|
||||
private final RealBackpacks plugin;
|
||||
|
||||
public CraftListener(final RealBackpacks plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onPrepareCraft(final PrepareItemCraftEvent e) {
|
||||
final ItemStack result = e.getInventory().getResult();
|
||||
final HumanEntity human = e.getView().getPlayer();
|
||||
if (!(human instanceof Player) || result == null) {
|
||||
return;
|
||||
}
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
if (plugin.backpackOverrides.get(backpack) != null && result.isSimilar(plugin.backpackOverrides.get(backpack))) {
|
||||
if (RealBackpacks.globalGlow && plugin.backpackData.get(backpack).get(17) != null && plugin.backpackData.get(backpack).get(17).equalsIgnoreCase("true")) {
|
||||
e.getInventory().setResult(RealBackpacks.NMS.addGlow(plugin.backpackItems.get(backpack)));
|
||||
} else {
|
||||
e.getInventory().setResult(plugin.backpackItems.get(backpack));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (result.hasItemMeta() && result.getItemMeta().hasDisplayName()) {
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (!result.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', key.get(3)))) {
|
||||
continue;
|
||||
}
|
||||
if (!human.hasPermission("rb." + backpack + ".craft") && plugin.isUsingPerms()) {
|
||||
e.getInventory().setResult(null);
|
||||
((Player) human).sendMessage(ChatColor.RED + "你没有合成此背包的权限...");
|
||||
break;
|
||||
}
|
||||
if (RealBackpacks.globalGlow && plugin.backpackData.get(backpack).get(17) != null && plugin.backpackData.get(backpack).get(17).equalsIgnoreCase("true")) {
|
||||
e.getInventory().setResult(RealBackpacks.NMS.addGlow(plugin.backpackItems.get(backpack)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package cn.citycraft.RealBackpacks.listeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
import cn.citycraft.RealBackpacks.RealBackpacks;
|
||||
import cn.citycraft.RealBackpacks.util.RBUtil;
|
||||
|
||||
public class EntityListener implements Listener {
|
||||
|
||||
private final RealBackpacks plugin;
|
||||
|
||||
private int setlevel = 0;
|
||||
|
||||
public EntityListener(final RealBackpacks plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onFoodChange(final FoodLevelChangeEvent e) {
|
||||
if (e.getEntity() instanceof Player) {
|
||||
final int foodlevel = e.getFoodLevel();
|
||||
final Player p = (Player) e.getEntity();
|
||||
final int pLevel = p.getFoodLevel();
|
||||
final Inventory inv = p.getInventory();
|
||||
|
||||
final List<String> backpackList = new ArrayList<String>();
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (!key.get(10).equals("true")) {
|
||||
continue;
|
||||
}
|
||||
if (!inv.contains(plugin.backpackItems.get(backpack))) {
|
||||
continue;
|
||||
}
|
||||
backpackList.add(backpack);
|
||||
}
|
||||
final int listsize = backpackList.size();
|
||||
if (listsize > 0) {
|
||||
if (pLevel > foodlevel) {
|
||||
//Starving
|
||||
setlevel = RBUtil.getFoodLevel(foodlevel, pLevel, listsize, 11, backpackList);
|
||||
if (setlevel < 0) {
|
||||
setlevel = 0;
|
||||
}
|
||||
} else {
|
||||
//Ate food
|
||||
setlevel = RBUtil.getFoodLevel(foodlevel, pLevel, listsize, 12, backpackList);
|
||||
if (setlevel < pLevel) {
|
||||
setlevel = pLevel;
|
||||
}
|
||||
}
|
||||
e.setCancelled(true);
|
||||
p.setFoodLevel(setlevel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
package cn.citycraft.RealBackpacks.listeners;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import cn.citycraft.RealBackpacks.RealBackpacks;
|
||||
import cn.citycraft.RealBackpacks.util.MysqlFunctions;
|
||||
import cn.citycraft.RealBackpacks.util.RBUtil;
|
||||
import cn.citycraft.RealBackpacks.util.Serialization;
|
||||
|
||||
public class InventoryListener implements Listener {
|
||||
|
||||
private final RealBackpacks plugin;
|
||||
|
||||
public InventoryListener(final RealBackpacks plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public boolean isSimilar(final ItemStack origin, final ItemStack compare) {
|
||||
if (compare == null) {
|
||||
return false;
|
||||
}
|
||||
if (compare == origin) {
|
||||
return true;
|
||||
}
|
||||
return compare.getTypeId() == origin.getTypeId() && compare.getDurability() == origin.getDurability() && compare.hasItemMeta() == origin.hasItemMeta()
|
||||
&& (compare.hasItemMeta() ? isSimilarMeta(compare.getItemMeta(), origin.getItemMeta()) : true);
|
||||
}
|
||||
|
||||
public boolean isSimilarMeta(final ItemMeta origin, final ItemMeta compare) {
|
||||
if (origin.hasDisplayName() != compare.hasDisplayName()) {
|
||||
return false;
|
||||
}
|
||||
if (origin.hasEnchants() != compare.hasEnchants()) {
|
||||
return false;
|
||||
}
|
||||
if (origin.hasLore() != compare.hasLore()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (origin.hasDisplayName() && compare.hasDisplayName()) {
|
||||
if (!origin.getDisplayName().equals(compare.getDisplayName())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (origin.hasEnchants() && compare.hasEnchants()) {
|
||||
if (!origin.getEnchants().equals(compare.getEnchants())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (origin.hasLore() && compare.hasLore()) {
|
||||
if (!(compare.getLore().containsAll(origin.getLore()))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onInventoryClick(final InventoryClickEvent e) {
|
||||
if (e.getWhoClicked() instanceof Player) {
|
||||
|
||||
final Player p = (Player) e.getWhoClicked();
|
||||
final String name = p.getName();
|
||||
|
||||
if (plugin.adminRestrictedView.contains(name)) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
final Inventory otherInv = e.getView().getTopInventory();
|
||||
final ItemStack curItem = e.getCurrentItem();
|
||||
boolean otherInvPresent = false;
|
||||
|
||||
if (otherInv != null) {
|
||||
otherInvPresent = true;
|
||||
}
|
||||
|
||||
if (curItem != null && curItem.hasItemMeta() && curItem.getItemMeta().hasDisplayName()) {
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
if (curItem.isSimilar(plugin.backpackItems.get(backpack))) {
|
||||
plugin.slowedPlayers.remove(name);
|
||||
p.setWalkSpeed(0.2F);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!e.isCancelled() && curItem != null && otherInvPresent) {
|
||||
|
||||
if (plugin.playerData.containsKey(name)) {
|
||||
|
||||
final String backpack = plugin.playerData.get(name);
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
final ItemStack cursor = e.getCursor();
|
||||
boolean go = true;
|
||||
|
||||
if (key.get(16) != null && key.get(16).equalsIgnoreCase("true")) {
|
||||
for (final String whitelist : plugin.backpackWhitelist.get(backpack)) {
|
||||
if (whitelist == null) {
|
||||
continue;
|
||||
}
|
||||
final String potentialBackpack = RBUtil.stringToBackpack(whitelist);
|
||||
if (potentialBackpack != null && plugin.backpackItems.containsKey(potentialBackpack)) {
|
||||
if (curItem.isSimilar(plugin.backpackItems.get(potentialBackpack)) || cursor.isSimilar(plugin.backpackItems.get(potentialBackpack))) {
|
||||
go = false;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (RBUtil.itemsAreEqual(curItem, whitelist) || RBUtil.itemsAreEqual(cursor, whitelist)) {
|
||||
go = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (go) {
|
||||
e.setCancelled(true);
|
||||
p.sendMessage(ChatColor.RED + "当前物品不能放入背包...");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (final String blacklist : plugin.backpackBlacklist.get(backpack)) {
|
||||
if (blacklist == null) {
|
||||
continue;
|
||||
}
|
||||
final String potentialBackpack = RBUtil.stringToBackpack(blacklist);
|
||||
if (potentialBackpack != null && plugin.backpackItems.containsKey(potentialBackpack)) {
|
||||
if (isSimilar(curItem, plugin.backpackItems.get(potentialBackpack))) {
|
||||
e.setCancelled(true);
|
||||
p.sendMessage(ChatColor.RED + "当前物品不能放入背包...");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (RBUtil.itemsAreEqual(curItem, blacklist)) {
|
||||
e.setCancelled(true);
|
||||
p.sendMessage(ChatColor.RED + "当前物品不能放入背包...");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onInventoryClose(final InventoryCloseEvent e) {
|
||||
final String name = e.getPlayer().getName();
|
||||
final Inventory inv = e.getView().getTopInventory();
|
||||
final String invString = Serialization.toString(inv);
|
||||
final String backpack = plugin.playerData.get(name);
|
||||
plugin.playerData.remove(name);
|
||||
final String adminBackpack = plugin.adminFullView.get(name);
|
||||
plugin.adminFullView.remove(name);
|
||||
if (backpack != null) {
|
||||
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// if (plugin.isUsingMysql()) {
|
||||
try {
|
||||
MysqlFunctions.addBackpackData(name, backpack, invString);
|
||||
} catch (final SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// } else {
|
||||
// PlayerConfig.getInstance(plugin, name).set(backpack + ".Inventory", invString);
|
||||
// PlayerConfig.save();
|
||||
// }
|
||||
}
|
||||
});
|
||||
} else if (adminBackpack != null) {
|
||||
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final String[] split = adminBackpack.split(":");
|
||||
// if (plugin.isUsingMysql()) {
|
||||
try {
|
||||
MysqlFunctions.addBackpackData(split[0], split[1], invString);
|
||||
} catch (final SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// } else {
|
||||
// PlayerConfig.getInstance(plugin, split[1]).set(split[0] + ".Inventory", invString);
|
||||
// PlayerConfig.save();
|
||||
// }
|
||||
}
|
||||
});
|
||||
} else if (plugin.adminRestrictedView.contains(name)) {
|
||||
plugin.adminRestrictedView.remove(name);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,254 @@
|
||||
package cn.citycraft.RealBackpacks.listeners;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import cn.citycraft.RealBackpacks.RealBackpacks;
|
||||
import cn.citycraft.RealBackpacks.util.MysqlFunctions;
|
||||
import cn.citycraft.RealBackpacks.util.RBUtil;
|
||||
|
||||
public class PlayerListener implements Listener {
|
||||
|
||||
private final RealBackpacks plugin;
|
||||
|
||||
private final HashMap<String, String> deadPlayers = new HashMap<String, String>();
|
||||
|
||||
public PlayerListener(final RealBackpacks plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onDeath(final PlayerDeathEvent e) {
|
||||
final Player p = e.getEntity();
|
||||
final String name = p.getName();
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
if (!p.getInventory().contains(plugin.backpackItems.get(backpack))) {
|
||||
continue;
|
||||
}
|
||||
p.setWalkSpeed(0.2F);
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (key.get(5) != null && key.get(5).equalsIgnoreCase("true")) {
|
||||
// Drop contents
|
||||
Inventory binv = null;
|
||||
// if (plugin.isUsingMysql()) {
|
||||
try {
|
||||
binv = MysqlFunctions.getBackpackInv(name, backpack);
|
||||
} catch (final SQLException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
// } else {
|
||||
// final FileConfig config = PlayerConfig.getInstance(plugin, name);
|
||||
// if (config.getStringList(backpack + ".Inventory") == null) {
|
||||
// continue;
|
||||
// }
|
||||
// binv = Serialization.toInventory(config.getStringList(backpack + ".Inventory"), key.get(3), Integer.parseInt(key.get(0)));
|
||||
// }
|
||||
if (plugin.playerData.containsKey(name)) {
|
||||
if (p.getItemOnCursor() != null) {
|
||||
p.setItemOnCursor(null);
|
||||
}
|
||||
}
|
||||
if (binv != null) {
|
||||
for (final ItemStack item : binv.getContents()) {
|
||||
if (item != null) {
|
||||
p.getWorld().dropItemNaturally(p.getLocation(), item);
|
||||
}
|
||||
}
|
||||
}
|
||||
RBUtil.destroyContents(name, backpack);
|
||||
}
|
||||
if (key.get(4) != null && key.get(4).equalsIgnoreCase("true")) {
|
||||
// Destroy contents
|
||||
RBUtil.destroyContents(name, backpack);
|
||||
p.sendMessage(ChatColor.RED + "因为死亡背包物品已销毁...");
|
||||
}
|
||||
if (key.get(6) != null && key.get(6).equalsIgnoreCase("false")) {
|
||||
// Drop backpack
|
||||
e.getDrops().remove(plugin.backpackItems.get(backpack));
|
||||
}
|
||||
if (key.get(7) != null && key.get(7).equalsIgnoreCase("true")) {
|
||||
deadPlayers.put(name, backpack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onDrop(final PlayerDropItemEvent e) {
|
||||
final Player p = e.getPlayer();
|
||||
final String name = p.getName();
|
||||
final ItemStack item = e.getItemDrop().getItemStack();
|
||||
if (plugin.slowedPlayers.contains(name)) {
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
if (plugin.backpackItems.get(backpack).equals(item)) {
|
||||
plugin.slowedPlayers.remove(name);
|
||||
p.setWalkSpeed(0.2F);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onInteract(final PlayerInteractEvent e) {
|
||||
if (e.getAction().equals(Action.PHYSICAL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Action act = e.getAction();
|
||||
final Player p = e.getPlayer();
|
||||
final ItemStack item = p.getItemInHand();
|
||||
final String name = p.getName();
|
||||
if (item.hasItemMeta()) {
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', key.get(3)))) {
|
||||
if (plugin.isUsingPerms() && !p.hasPermission("rb." + backpack + ".use")) {
|
||||
p.sendMessage(ChatColor.RED + "你没有打开此背包的权限...");
|
||||
continue;
|
||||
}
|
||||
final String openWith = key.get(15);
|
||||
if (openWith != null) {
|
||||
if (openWith.equalsIgnoreCase("left_click")) {
|
||||
if (act.equals(Action.RIGHT_CLICK_AIR)) {
|
||||
continue;
|
||||
}
|
||||
if (act.equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||
continue;
|
||||
}
|
||||
} else if (openWith.equalsIgnoreCase("right_click")) {
|
||||
if (act.equals(Action.LEFT_CLICK_AIR)) {
|
||||
continue;
|
||||
}
|
||||
if (act.equals(Action.LEFT_CLICK_BLOCK)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (act.equals(Action.LEFT_CLICK_AIR)) {
|
||||
continue;
|
||||
}
|
||||
if (act.equals(Action.LEFT_CLICK_BLOCK)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (act.equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||
e.setCancelled(true);
|
||||
p.updateInventory();
|
||||
}
|
||||
Inventory inv = null;
|
||||
// if (plugin.isUsingMysql()) {
|
||||
try {
|
||||
inv = MysqlFunctions.getBackpackInv(name, backpack);
|
||||
} catch (final SQLException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
if (inv == null) {
|
||||
inv = plugin.getServer().createInventory(p, Integer.parseInt(key.get(0)), ChatColor.translateAlternateColorCodes('&', key.get(3)));
|
||||
}
|
||||
// } else {
|
||||
// FileConfig config = PlayerConfig.getInstance(plugin, name);
|
||||
// if (!config.isSet(backpack + ".Inventory")) {
|
||||
// inv = plugin.getServer().createInventory(p,
|
||||
// Integer.parseInt(key.get(0)),
|
||||
// ChatColor.translateAlternateColorCodes('&', key.get(3)));
|
||||
// } else {
|
||||
// inv = Serialization.toInventory(
|
||||
// config.getStringList(backpack + ".Inventory"), key.get(3),
|
||||
// Integer.parseInt(key.get(0)));
|
||||
// }
|
||||
// }
|
||||
if (p.getOpenInventory().getTopInventory() != null) {
|
||||
p.closeInventory();
|
||||
}
|
||||
plugin.playerData.put(name, backpack);
|
||||
p.openInventory(inv);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onPickup(final PlayerPickupItemEvent e) {
|
||||
final ItemStack item = e.getItem().getItemStack();
|
||||
final Player p = e.getPlayer();
|
||||
final String name = p.getName();
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
if (!item.isSimilar(plugin.backpackItems.get(backpack))) {
|
||||
continue;
|
||||
}
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (!plugin.slowedPlayers.contains(name)) {
|
||||
plugin.slowedPlayers.add(name);
|
||||
}
|
||||
p.setWalkSpeed(Float.parseFloat(key.get(9)));
|
||||
if (key.get(18) != null && key.get(18).equalsIgnoreCase("true")) {
|
||||
final Inventory inv = p.getInventory();
|
||||
final Location loc = e.getItem().getLocation();
|
||||
final ItemStack backpackItem = plugin.backpackItems.get(backpack);
|
||||
int emptySlots = 0, itemAmount = item.getAmount();
|
||||
for (final ItemStack invItem : inv.getContents()) {
|
||||
if (invItem == null) {
|
||||
emptySlots++;
|
||||
}
|
||||
}
|
||||
if (emptySlots == 0) {
|
||||
e.setCancelled(true);
|
||||
} else {
|
||||
e.getItem().remove();
|
||||
e.setCancelled(true);
|
||||
if (itemAmount > emptySlots) {
|
||||
final ItemStack dropItem = backpackItem;
|
||||
dropItem.setAmount(itemAmount - emptySlots);
|
||||
p.getWorld().dropItem(loc, dropItem);
|
||||
itemAmount = emptySlots;
|
||||
}
|
||||
if (itemAmount == 1) {
|
||||
backpackItem.setAmount(1);
|
||||
inv.setItem(inv.firstEmpty(), backpackItem);
|
||||
} else if (itemAmount > 1) {
|
||||
int x = itemAmount;
|
||||
backpackItem.setAmount(1);
|
||||
while (x > 0) {
|
||||
x--;
|
||||
inv.setItem(inv.firstEmpty(), backpackItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onRespawn(final PlayerRespawnEvent e) {
|
||||
final Player p = e.getPlayer();
|
||||
final String name = p.getName();
|
||||
for (final String backpack : plugin.backpacks) {
|
||||
final List<String> key = plugin.backpackData.get(backpack);
|
||||
if (key.get(7) != null && key.get(7).equalsIgnoreCase("true") && deadPlayers.get(name) != null && deadPlayers.get(name).equals(backpack)) {
|
||||
// Keep backpack
|
||||
p.getInventory().addItem(plugin.backpackItems.get(backpack));
|
||||
p.updateInventory();
|
||||
deadPlayers.remove(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
package cn.citycraft.RealBackpacks.util;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
import cn.citycraft.RealBackpacks.RealBackpacks;
|
||||
|
||||
public class MysqlFunctions {
|
||||
|
||||
private static cn.citycraft.RealBackpacks.RealBackpacks plugin;
|
||||
|
||||
public static void addBackpackData(final String playerName, final String backpack, final String invString) throws SQLException {
|
||||
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 statement = conn.prepareStatement("SELECT EXISTS(SELECT 1 FROM rb_data WHERE player = ? AND backpack = ? LIMIT 1);");
|
||||
statement.setString(1, playerName);
|
||||
statement.setString(2, backpack);
|
||||
final ResultSet res = statement.executeQuery();
|
||||
PreparedStatement state = null;
|
||||
if (res.next()) {
|
||||
if (res.getInt(1) == 1) {
|
||||
state = conn.prepareStatement("UPDATE rb_data SET player=?, backpack=?, inventory=? WHERE player=? AND backpack=?;");
|
||||
state.setString(1, playerName);
|
||||
state.setString(2, backpack);
|
||||
state.setString(3, invString);
|
||||
state.setString(4, playerName);
|
||||
state.setString(5, backpack);
|
||||
} else {
|
||||
state = conn.prepareStatement("INSERT INTO rb_data (player, backpack, inventory) VALUES(?, ?, ?);");
|
||||
state.setString(1, playerName);
|
||||
state.setString(2, backpack);
|
||||
state.setString(3, invString);
|
||||
}
|
||||
}
|
||||
if (state != null) {
|
||||
state.executeUpdate();
|
||||
state.close();
|
||||
}
|
||||
conn.close();
|
||||
} catch (final SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean checkIfTableExists(final String table) {
|
||||
try {
|
||||
final 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() {
|
||||
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(invString, ChatColor.translateAlternateColorCodes('&', plugin.backpackData.get(backpack).get(3)),
|
||||
Integer.parseInt(plugin.backpackData.get(backpack).get(0)));
|
||||
}
|
||||
}
|
||||
state.close();
|
||||
conn.close();
|
||||
} catch (final Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return returnInv;
|
||||
}
|
||||
|
||||
public static void setMysqlFunc(final RealBackpacks plugin) {
|
||||
MysqlFunctions.plugin = plugin;
|
||||
}
|
||||
|
||||
}
|
||||
138
src/main/java/cn/citycraft/RealBackpacks/util/RBUtil.java
Normal file
138
src/main/java/cn/citycraft/RealBackpacks/util/RBUtil.java
Normal file
@@ -0,0 +1,138 @@
|
||||
package cn.citycraft.RealBackpacks.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import cn.citycraft.RealBackpacks.RealBackpacks;
|
||||
|
||||
public class RBUtil {
|
||||
|
||||
private static RealBackpacks plugin;
|
||||
|
||||
public static void destroyContents(final String name, final String backpack) {
|
||||
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// if (plugin.isUsingMysql()) {
|
||||
MysqlFunctions.delete(name, backpack);
|
||||
// } else {
|
||||
// FileConfig = new cn.citycraft.PluginHelper.config.PlayerConfig(plugin, name);
|
||||
// PlayerConfig.getInstance(plugin, name).set(backpack + ".Inventory", null);
|
||||
// PlayerConfig.save();
|
||||
// }
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static int getFoodLevel(final int foodlevel, final int pLevel, final int listsize, final int key, final List<String> backpackList) {
|
||||
int i = 0;
|
||||
if (plugin.isAveraging()) {
|
||||
int average = 0;
|
||||
for (final String backpack : backpackList) {
|
||||
average += Integer.parseInt(plugin.backpackData.get(backpack).get(key));
|
||||
}
|
||||
i = foodlevel - (average / listsize);
|
||||
} else if (plugin.isAdding()) {
|
||||
int sum = 0;
|
||||
for (final String backpack : backpackList) {
|
||||
sum += Integer.parseInt(plugin.backpackData.get(backpack).get(key));
|
||||
}
|
||||
i = foodlevel - sum;
|
||||
} else {
|
||||
final List<Integer> list = new ArrayList<Integer>();
|
||||
for (final String backpack : backpackList) {
|
||||
list.add(Integer.parseInt(plugin.backpackData.get(backpack).get(key)));
|
||||
}
|
||||
i = foodlevel - Collections.max(list);
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static ItemStack getItemstackFromString(final String s) {
|
||||
ItemStack item = null;
|
||||
final String[] split = s.split(":");
|
||||
if (split.length == 1) {
|
||||
item = new ItemStack(Material.getMaterial(Integer.parseInt(split[0])), 1);
|
||||
} else {
|
||||
if (split[1].equalsIgnoreCase("enchant") || split[1].equalsIgnoreCase("lore") || split[1].equalsIgnoreCase("all")) {
|
||||
item = new ItemStack(Material.getMaterial(Integer.parseInt(split[0])));
|
||||
} else {
|
||||
item = new ItemStack(Material.getMaterial(Integer.parseInt(split[0])), 1, (byte) Integer.parseInt(split[1]));
|
||||
}
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
public static boolean hasLore(final ItemStack item) {
|
||||
if (item.getItemMeta() != null) {
|
||||
if (item.getItemMeta().hasDisplayName() || item.getItemMeta().hasLore()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isEnchanted(final String s) {
|
||||
final String[] split = s.split(":");
|
||||
int i = 0;
|
||||
if (split.length != 1) {
|
||||
for (i = 1; i < split.length; i++) {
|
||||
if (split[i].equalsIgnoreCase("enchant") || split[i].equalsIgnoreCase("all")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isLored(final String s) {
|
||||
final String[] split = s.split(":");
|
||||
int i = 0;
|
||||
if (split.length != 1) {
|
||||
for (i = 1; i < split.length; i++) {
|
||||
if (split[i].equalsIgnoreCase("lore") || split[i].equalsIgnoreCase("all")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean itemsAreEqual(final ItemStack item, final String s) {
|
||||
final boolean lore = hasLore(item);
|
||||
final boolean enchant = item.getEnchantments().size() >= 1;
|
||||
final boolean isLored = isLored(s);
|
||||
final boolean isEnchanted = isEnchanted(s);
|
||||
if (!isLored && !isEnchanted && item.isSimilar(getItemstackFromString(s))) {
|
||||
return true;
|
||||
} else if (item.getType() == getItemstackFromString(s).getType()) {
|
||||
if (enchant && !lore) {
|
||||
return isEnchanted && !isLored;
|
||||
} else if (enchant && lore) {
|
||||
return isEnchanted && isLored;
|
||||
} else if (!enchant && lore) {
|
||||
return isLored && !isEnchanted;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void setRBUtil(final RealBackpacks plugin) {
|
||||
RBUtil.plugin = plugin;
|
||||
}
|
||||
|
||||
public static String stringToBackpack(final String s) {
|
||||
for (final String b : plugin.backpacks) {
|
||||
if (b.equalsIgnoreCase(s)) {
|
||||
return b;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package cn.citycraft.RealBackpacks.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import cn.citycraft.PluginHelper.config.FileConfig;
|
||||
|
||||
// import cn.citycraft.RealBackpacks.json.JSONArray;
|
||||
// import cn.citycraft.RealBackpacks.json.JSONException;
|
||||
// import cn.citycraft.RealBackpacks.json.JSONObject;
|
||||
|
||||
/**
|
||||
* Fancy JSON serialization mostly by evilmidget38.
|
||||
*
|
||||
* @author evilmidget38, gomeow
|
||||
*
|
||||
*/
|
||||
public class Serialization {
|
||||
public static String INVKEY = "Inventory";
|
||||
public static String ITEMKEY = "Item";
|
||||
|
||||
public static String listToString(final List<String> list) {
|
||||
final FileConfig yml = new FileConfig();
|
||||
yml.set(INVKEY, list);
|
||||
return yml.saveToString();
|
||||
}
|
||||
|
||||
public static List<String> stringToList(final String invString) {
|
||||
final FileConfig yml = new FileConfig();
|
||||
return yml.getStringList(INVKEY);
|
||||
}
|
||||
|
||||
public static Inventory toInventory(final String invString, final String name, final int size) throws InvalidConfigurationException {
|
||||
final List<String> itemlist = stringToList(invString);
|
||||
final ItemStack[] items = new ItemStack[itemlist.size()];
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
final FileConfig yml = new FileConfig();
|
||||
yml.loadFromString(itemlist.get(i));
|
||||
items[i] = yml.getItemStack(ITEMKEY + i);
|
||||
}
|
||||
final Inventory inv = Bukkit.createInventory(null, size, ChatColor.translateAlternateColorCodes('&', name));
|
||||
inv.setContents(items);
|
||||
return inv;
|
||||
}
|
||||
|
||||
public static List<String> toList(final Inventory inv) {
|
||||
final List<String> invlist = new ArrayList<String>();
|
||||
for (int i = 0; i < inv.getContents().length; i++) {
|
||||
final FileConfig yml = new FileConfig();
|
||||
yml.set(ITEMKEY + i, inv.getContents()[i]);
|
||||
invlist.add(yml.saveToString());
|
||||
}
|
||||
return invlist;
|
||||
}
|
||||
|
||||
public static String toString(final Inventory inv) {
|
||||
return listToString(toList(inv));
|
||||
}
|
||||
}
|
||||
253
src/main/resources/config.yml
Normal file
253
src/main/resources/config.yml
Normal file
@@ -0,0 +1,253 @@
|
||||
Data:
|
||||
#数据保存方式 [flatfile|MySQL]
|
||||
FileSystem: flatfile
|
||||
#MySQL数据库配置 只有当FileSystem配置为MySQL时有效
|
||||
MySQL:
|
||||
database: minecraft
|
||||
username: root
|
||||
password:
|
||||
ip: localhost
|
||||
port: 3306
|
||||
Config:
|
||||
#是否使用权限系统
|
||||
usePermissions: true
|
||||
#多背包配置模式 average平均模式 add添加模式
|
||||
MultipleBackpacksInInventory:
|
||||
average: false
|
||||
add: true
|
||||
#背包自定义配置
|
||||
Backpacks:
|
||||
#背包名称
|
||||
Bp-18:
|
||||
#背包大小
|
||||
Size: 18
|
||||
addGlow: true
|
||||
#如何打开背包 [right_click|left_click]
|
||||
OpenWith: right_click
|
||||
#能否购买
|
||||
Purchasable: true
|
||||
#背包价格
|
||||
Price: 2000
|
||||
#是否启用合成
|
||||
UseRecipe: true
|
||||
#覆盖
|
||||
Override: '0'
|
||||
#合成表
|
||||
Recipe:
|
||||
- 334,334,334
|
||||
- 334,54,334
|
||||
- 334,334,334
|
||||
#背包详情
|
||||
BackpackItem:
|
||||
#背包ID
|
||||
id: 334
|
||||
#背包名称
|
||||
name: "&a背包-18"
|
||||
#背包Lore
|
||||
lore:
|
||||
- "&5一个随身携带的背包."
|
||||
- "&b有&d18&b个格子的物品可存放."
|
||||
- "&3移动速度下降5%."
|
||||
- "&6背包掉落或丢失,再次购买即可,物品不丢失."
|
||||
- "&c每种背包仅需购买一次,多个不叠加."
|
||||
#是否开启白名单(开启后只有白名单的物品可以放入)
|
||||
UseWhitelist: false
|
||||
#白名单列表
|
||||
ItemWhitelist: []
|
||||
#黑名单列表(请填写所有背包的名称,防止背包放到背包内!)
|
||||
ItemBlacklist:
|
||||
- Bp-18
|
||||
- Bp-27
|
||||
- Bp-36
|
||||
- Bp-45
|
||||
- Bp-54
|
||||
- 276:all
|
||||
#死亡后处理
|
||||
onDeath:
|
||||
#掉落背包物品
|
||||
dropContents: false
|
||||
#摧毁背包物品
|
||||
destroyContents: false
|
||||
#掉落背包(当服务器开启物品掉落保护时)
|
||||
dropBackpack: false
|
||||
#保留背包(当服务器关闭物品掉落保护时)
|
||||
keepBackpack: false
|
||||
#修改行走速度
|
||||
WalkSpeedFeature:
|
||||
#是否启用
|
||||
enabled: true
|
||||
#行走速度控制(0.2为正常速度)
|
||||
walkingSpeed: 0.19
|
||||
#饥饿系统控制
|
||||
IncreasedHungerFeature:
|
||||
#是否开启
|
||||
enabled: true
|
||||
extraHungerBarsToDeplete: 1
|
||||
hungerBarsToSubtractWhenEating: 0
|
||||
Bp-27:
|
||||
Size: 27
|
||||
addGlow: true
|
||||
OpenWith: right_click
|
||||
Purchasable: true
|
||||
Price: 3000
|
||||
UseRecipe: true
|
||||
Override: '0'
|
||||
Recipe:
|
||||
- 334,334,334
|
||||
- 334,146,334
|
||||
- 334,334,334
|
||||
BackpackItem:
|
||||
id: 334
|
||||
name: "&a背包-27"
|
||||
lore:
|
||||
- "&5一个随身携带的背包."
|
||||
- "&b有&d27&b个格子的物品可存放."
|
||||
- "&3移动速度下降10%."
|
||||
- "&6背包掉落或丢失,再次购买即可,物品不丢失."
|
||||
- "&c每种背包仅需购买一次,多个不叠加."
|
||||
UseWhitelist: false
|
||||
ItemWhitelist: []
|
||||
ItemBlacklist:
|
||||
- Bp-18
|
||||
- Bp-27
|
||||
- Bp-36
|
||||
- Bp-45
|
||||
- Bp-54
|
||||
- 276:all
|
||||
onDeath:
|
||||
dropContents: false
|
||||
destroyContents: false
|
||||
dropBackpack: false
|
||||
keepBackpack: false
|
||||
WalkSpeedFeature:
|
||||
enabled: true
|
||||
walkingSpeed: 0.18
|
||||
IncreasedHungerFeature:
|
||||
enabled: true
|
||||
extraHungerBarsToDeplete: 1
|
||||
hungerBarsToSubtractWhenEating: 0
|
||||
Bp-36:
|
||||
Size: 36
|
||||
addGlow: true
|
||||
OpenWith: right_click
|
||||
Purchasable: true
|
||||
Price: 3000
|
||||
UseRecipe: true
|
||||
Override: '0'
|
||||
Recipe:
|
||||
- 334,334,334
|
||||
- 334,154,334
|
||||
- 334,334,334
|
||||
BackpackItem:
|
||||
id: 334
|
||||
name: "&a背包-36"
|
||||
lore:
|
||||
- "&5一个随身携带的背包."
|
||||
- "&b有&d36&b个格子的物品可存放."
|
||||
- "&3移动速度下降15%."
|
||||
- "&6背包掉落或丢失,再次购买即可,物品不丢失."
|
||||
- "&c每种背包仅需购买一次,多个不叠加."
|
||||
UseWhitelist: false
|
||||
ItemWhitelist: []
|
||||
ItemBlacklist:
|
||||
- Bp-18
|
||||
- Bp-27
|
||||
- Bp-36
|
||||
- Bp-45
|
||||
- Bp-54
|
||||
- 276:all
|
||||
onDeath:
|
||||
dropContents: false
|
||||
destroyContents: false
|
||||
dropBackpack: false
|
||||
keepBackpack: false
|
||||
WalkSpeedFeature:
|
||||
enabled: true
|
||||
walkingSpeed: 0.17
|
||||
IncreasedHungerFeature:
|
||||
enabled: true
|
||||
extraHungerBarsToDeplete: 1
|
||||
hungerBarsToSubtractWhenEating: 0
|
||||
Bp-45:
|
||||
Size: 45
|
||||
addGlow: true
|
||||
OpenWith: right_click
|
||||
Purchasable: true
|
||||
Price: 4000
|
||||
UseRecipe: false
|
||||
Override: '0'
|
||||
Recipe:
|
||||
- 334,334,334
|
||||
- 334,154,334
|
||||
- 334,334,334
|
||||
BackpackItem:
|
||||
id: 334
|
||||
name: "&a背包-45"
|
||||
lore:
|
||||
- "&5一个随身携带的背包."
|
||||
- "&b有&d45&b个格子的物品可存放."
|
||||
- "&3移动速度下降20%."
|
||||
- "&6背包掉落或丢失,再次购买即可,物品不丢失."
|
||||
- "&c每种背包仅需购买一次,多个不叠加."
|
||||
UseWhitelist: false
|
||||
ItemWhitelist: []
|
||||
ItemBlacklist:
|
||||
- Bp-18
|
||||
- Bp-27
|
||||
- Bp-36
|
||||
- Bp-45
|
||||
- Bp-54
|
||||
- 276:all
|
||||
onDeath:
|
||||
dropContents: false
|
||||
destroyContents: false
|
||||
dropBackpack: false
|
||||
keepBackpack: false
|
||||
WalkSpeedFeature:
|
||||
enabled: true
|
||||
walkingSpeed: 0.16
|
||||
IncreasedHungerFeature:
|
||||
enabled: true
|
||||
extraHungerBarsToDeplete: 1
|
||||
hungerBarsToSubtractWhenEating: 0
|
||||
Bp-54:
|
||||
Size: 54
|
||||
addGlow: true
|
||||
OpenWith: right_click
|
||||
Purchasable: true
|
||||
Price: 5000
|
||||
UseRecipe: false
|
||||
Override: '0'
|
||||
Recipe:
|
||||
- 334,334,334
|
||||
- 334,154,334
|
||||
- 334,334,334
|
||||
BackpackItem:
|
||||
id: 334
|
||||
name: "&a背包-54"
|
||||
lore:
|
||||
- "&5一个随身携带的背包."
|
||||
- "&b有&d54&b个格子的物品可存放."
|
||||
- "&6背包掉落或丢失,再次购买即可,物品不丢失."
|
||||
- "&c每种背包仅需购买一次,多个不叠加."
|
||||
UseWhitelist: false
|
||||
ItemWhitelist: []
|
||||
ItemBlacklist:
|
||||
- Bp-18
|
||||
- Bp-27
|
||||
- Bp-36
|
||||
- Bp-45
|
||||
- Bp-54
|
||||
- 276:all
|
||||
onDeath:
|
||||
dropContents: false
|
||||
destroyContents: false
|
||||
dropBackpack: false
|
||||
keepBackpack: false
|
||||
WalkSpeedFeature:
|
||||
enabled: true
|
||||
walkingSpeed: 0.2
|
||||
IncreasedHungerFeature:
|
||||
enabled: true
|
||||
extraHungerBarsToDeplete: 1
|
||||
hungerBarsToSubtractWhenEating: 0
|
||||
24
src/main/resources/plugin.yml
Normal file
24
src/main/resources/plugin.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
name: ${project.artifactId}
|
||||
description: ${project.description}
|
||||
main: ${project.groupId}.${project.artifactId}.${project.artifactId}
|
||||
version: ${project.version}
|
||||
author: 喵♂呜
|
||||
website: http://ci.SumCraft.cn:8080/job/${project.artifactId}/
|
||||
softdepend: [Vault]
|
||||
commands:
|
||||
rb:
|
||||
description: 背包插件主命令.
|
||||
aliases: [realbackpacks, realb, rbs]
|
||||
permissions:
|
||||
rb.reload:
|
||||
description: 重新载入插件!
|
||||
default: op
|
||||
rb.list:
|
||||
description: 列出可购买背包!
|
||||
default: op
|
||||
rb.filetomysql:
|
||||
description: 转换数据到MySql!
|
||||
default: op
|
||||
rb.fullview:
|
||||
description: 完整查看别的玩家背包!
|
||||
default: op
|
||||
Reference in New Issue
Block a user