diff --git a/SpigotCore_Main/src/de/steamwar/sql/PersonalKit.java b/SpigotCore_Main/src/de/steamwar/sql/PersonalKit.java index f839f0d..9db33f0 100644 --- a/SpigotCore_Main/src/de/steamwar/sql/PersonalKit.java +++ b/SpigotCore_Main/src/de/steamwar/sql/PersonalKit.java @@ -25,44 +25,85 @@ import org.bukkit.inventory.ItemStack; import java.io.StringReader; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; public class PersonalKit { private final int userID; + private String name; private final String gamemode; private String inventory; private String armor; + private boolean inUse; private PersonalKit(ResultSet rs) throws SQLException { userID = rs.getInt("UserID"); gamemode = rs.getString("GameMode"); inventory = rs.getString("Inventory"); armor = rs.getString("Armor"); + name = rs.getString("Name"); + inUse = rs.getBoolean("InUse"); } - public static PersonalKit get(int userID, String gamemode){ + public static List get(int userID, String gamemode){ ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ?", userID, gamemode); + try { + List list = new ArrayList<>(); + while (rs.next()) + list.add(new PersonalKit(rs)); + return list; + } catch (SQLException e) { + throw new SecurityException("Failed loading personal kit", e); + } + } + + public static PersonalKit get(int userID, String gamemode, String name) { + ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND Name = ?", userID, gamemode, name); try { if(!rs.next()) return null; - return new PersonalKit(rs); } catch (SQLException e) { throw new SecurityException("Failed loading personal kit", e); } } - public static PersonalKit save(int userID, String gamemode, ItemStack[] inventory, ItemStack[] armor){ - YamlConfiguration inventoryConfig = new YamlConfiguration(); - inventoryConfig.set("Inventory", inventory); + public static PersonalKit create(int userID, String gamemode, String name, ItemStack[] inventory, ItemStack[] armor){ + SQL.update("INSERT INTO PersonalKit (UserID, GameMode, Name, Inventory, Armor) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor), Name = VALUES(name)", + userID, gamemode, name, saveInvConfig("Inventory", inventory), saveInvConfig("Armor", armor)); + return get(userID, gamemode, name); + } - YamlConfiguration armorConfig = new YamlConfiguration(); - armorConfig.set("Armor", armor); + public static PersonalKit getKitInUse(int userID, String gamemode) { + ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND InUse = ?", userID, gamemode, true); + try { + List list = new ArrayList<>(); + while (rs.next()) + list.add(new PersonalKit(rs)); + if(list.size() > 1) { + list.forEach(kit -> { + if(list.indexOf(kit) >= 1) kit.setUse(false); + }); + list.removeIf(kit -> !kit.isInUse()); + } + if(list.isEmpty()) return null; + return list.get(0); + } catch (SQLException e) { + throw new SecurityException("Failed loading personal kit", e); + } + } - SQL.update("INSERT INTO PersonalKit (UserID, GameMode, Inventory, Armor) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor)", - userID, gamemode, inventoryConfig.saveToString(), armorConfig.saveToString()); - return get(userID, gamemode); + public static boolean nameInUse(int userID, String gamemode, String name) { + ResultSet set = SQL.select("SELECT COUNT(*) AS Count FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND Name = ?", userID, gamemode, name); + try { + if(!set.next()) + return true; + return set.getInt("Count") > 0; + } catch (SQLException e) { + throw new SecurityException("Failed loading personal kit", e); + } } public ItemStack[] getInventory(){ @@ -74,4 +115,65 @@ public class PersonalKit { YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(armor)); return Objects.requireNonNull(config.getList("Armor")).toArray(new ItemStack[0]); } + + public int getUserID() { + return userID; + } + + public String getName() { + return name; + } + + public boolean isInUse() { + return inUse; + } + + public void setInUse() { + PersonalKit kit = getKitInUse(userID, gamemode); + if(kit != null) + kit.setUse(false); + setUse(true); + } + + private void setUse(boolean inUse) { + this.inUse = inUse; + updateDB(); + } + + public void setName(String name) { + this.name = name; + updateDB(); + } + + public void setInventory(ItemStack[] inventory) { + this.inventory = saveInvConfig("Inventory", inventory); + updateDB(); + } + + public void setArmor(ItemStack[] armor) { + this.armor = saveInvConfig("Armor", armor); + updateDB(); + } + + public void setContainer(ItemStack[] inventory, ItemStack[] armor) { + this.armor = saveInvConfig("Armor", armor); + this.inventory = saveInvConfig("Inventory", inventory); + updateDB(); + } + + public void delete() { + SQL.update("DELETE FROM `PersonalKit` WHERE KitID = ?"); + } + + private static String saveInvConfig(String name, ItemStack[] inv) { + YamlConfiguration armorConfig = new YamlConfiguration(); + armorConfig.set(name, inv); + + return armorConfig.saveToString(); + } + + private void updateDB() { + SQL.update("INSERT INTO PersonalKit (UserID, GameMode, Name, Inventory, Armor, InUse) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor), Name = VALUES(Name), InUse = VALUES(InUse)", + userID, gamemode, name, inventory, armor, inUse); + } }