MultiKits #88
@ -31,7 +31,6 @@ import java.util.Objects;
|
||||
|
||||
public class PersonalKit {
|
||||
|
||||
private final int kitID;
|
||||
private final int userID;
|
||||
private String name;
|
||||
private final String gamemode;
|
||||
@ -40,7 +39,6 @@ public class PersonalKit {
|
||||
private boolean inUse;
|
||||
|
||||
private PersonalKit(ResultSet rs) throws SQLException {
|
||||
kitID = rs.getInt("KitID");
|
||||
userID = rs.getInt("UserID");
|
||||
gamemode = rs.getString("GameMode");
|
||||
|
||||
inventory = rs.getString("Inventory");
|
||||
@ -61,27 +59,21 @@ public class PersonalKit {
|
||||
}
|
||||
}
|
||||
|
||||
public static List<PersonalKit> get(int userID, String gamemode, String name) {
|
||||
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 {
|
||||
Lixfel
hat
Das sollte nur ein Kit zurückliefern oder null. Das sollte nur ein Kit zurückliefern oder null.
Chaoscaot
hat
Wie gesagt, Kits können den gleichen Namen haben Wie gesagt, Kits können den gleichen Namen haben
Lixfel
hat
Mehrere Kits mit gleichem Spieler, GameMode und Namen finde ich nicht sinnvoll, das erlaubt nur Verwirrung. Mehrere Kits mit gleichem Spieler, GameMode und Namen finde ich nicht sinnvoll, das erlaubt nur Verwirrung.
|
||||
List<PersonalKit> list = new ArrayList<>();
|
||||
while (rs.next())
|
||||
list.add(new PersonalKit(rs));
|
||||
return list;
|
||||
if(!rs.next())
|
||||
return null;
|
||||
return new PersonalKit(rs);
|
||||
} catch (SQLException e) {
|
||||
throw new SecurityException("Failed loading personal kit", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void create(int userID, String gamemode, String name, ItemStack[] inventory, ItemStack[] armor){
|
||||
YamlConfiguration inventoryConfig = new YamlConfiguration();
|
||||
inventoryConfig.set("Inventory", inventory);
|
||||
|
||||
YamlConfiguration armorConfig = new YamlConfiguration();
|
||||
armorConfig.set("Armor", armor);
|
||||
|
||||
SQL.update("INSERT INTO PersonalKit (UserID, GameMode, Name, Inventory, Armor) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor)",
|
||||
userID, gamemode, name, inventoryConfig.saveToString(), armorConfig.saveToString());
|
||||
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, getInventoryConfig(inventory), getArmorConfig(armor));
|
||||
return get(userID, gamemode, name);
|
||||
}
|
||||
|
||||
public static PersonalKit getKitInUse(int userID, String gamemode) {
|
||||
@ -103,6 +95,17 @@ public class PersonalKit {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean nameInUse(int userID, String gamemode, String name) {
|
||||
Lixfel
hat
Ich weiß jetzt nicht ganz den Sinn dieser "NameInUse" Funktion, um Abzufragen, ob dieser Name derzeit verwendet wird, ist das denkbar ungeeignet. Sinnvoller wäre denke ich ein getInUse(), um das derzeitige Kit in Benutzung zu bekommen. (Es sei denn, du hast da einen sehr speziellen Anwendungsfall) Ich weiß jetzt nicht ganz den Sinn dieser "NameInUse" Funktion, um Abzufragen, ob dieser Name derzeit verwendet wird, ist das denkbar ungeeignet.
Sinnvoller wäre denke ich ein getInUse(), um das derzeitige Kit in Benutzung zu bekommen. (Es sei denn, du hast da einen sehr speziellen Anwendungsfall)
|
||||
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(){
|
||||
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(inventory));
|
||||
return Objects.requireNonNull(config.getList("Inventory")).toArray(new ItemStack[0]);
|
||||
@ -131,31 +134,44 @@ public class PersonalKit {
|
||||
|
||||
Lixfel
hat
Whops! Fehlende invertierung! Whops! Fehlende invertierung!
|
||||
public void setInUse(boolean inUse) {
|
||||
this.inUse = inUse;
|
||||
SQL.update("UPDATE PersonalKit SET InUse = ? WHERE KitID = ?", this.inUse, kitID);
|
||||
updateDB();
|
||||
Lixfel
hat
Namen nachträglich zu ändern ist glaube ich UI-Technisch etwas umständlich. Es wird kaum jemanden stören, wenn wir das Feature einfach nicht anbieten. Namen nachträglich zu ändern ist glaube ich UI-Technisch etwas umständlich. Es wird kaum jemanden stören, wenn wir das Feature einfach nicht anbieten.
Chaoscaot
hat
Die Möglichkeit, dass Kit umzubenennen ist im FightSystem schon implementiert. Die Möglichkeit, dass Kit umzubenennen ist im FightSystem schon implementiert.
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
Lixfel
hat
Wenn, wird immer Inventory und Armor zeitgleich geupdated, daher auch bitte zeitgleich setzen, das macht einen Datenbankaufruf weniger. Wenn, wird immer Inventory und Armor zeitgleich geupdated, daher auch bitte zeitgleich setzen, das macht einen Datenbankaufruf weniger.
|
||||
SQL.update("UPDATE PersonalKit SET Name = ? WHERE KitID = ?", this.name, kitID);
|
||||
updateDB();
|
||||
Lixfel
hat
Dazu hat die Create-Methode eigentlich auch ON DUPLICATE KEY Update & man wird wsl. immer auch zeitgleich die Armor setzen. Es erscheint mir daher zielführender, ein Update nicht vom Neuerstellen zu unterscheiden (also beim ändern create aufzurufen) Dazu hat die Create-Methode eigentlich auch ON DUPLICATE KEY Update & man wird wsl. immer auch zeitgleich die Armor setzen. Es erscheint mir daher zielführender, ein Update nicht vom Neuerstellen zu unterscheiden (also beim ändern create aufzurufen)
|
||||
}
|
||||
|
||||
public void setInventory(ItemStack[] inventory) {
|
||||
YamlConfiguration inventoryConfig = new YamlConfiguration();
|
||||
inventoryConfig.set("Inventory", inventory);
|
||||
|
||||
this.inventory = inventoryConfig.saveToString();
|
||||
SQL.update("UPDATE PersonalKit SET Inventory = ? WHERE KitID = ?", this.inventory, kitID);
|
||||
this.inventory = getInventoryConfig(inventory);
|
||||
updateDB();
|
||||
}
|
||||
|
||||
public void setArmor(ItemStack[] armor) {
|
||||
YamlConfiguration armorConfig = new YamlConfiguration();
|
||||
armorConfig.set("Armor", armor);
|
||||
|
||||
this.armor = armorConfig.saveToString();
|
||||
SQL.update("UPDATE PersonalKit SET Armor = ? WHERE KitID = ?", this.armor, kitID);
|
||||
this.armor = getArmorConfig(armor);
|
||||
updateDB();
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
SQL.update("DELETE FROM `PersonalKit` WHERE KitID = ?", kitID);
|
||||
SQL.update("DELETE FROM `PersonalKit` WHERE KitID = ?");
|
||||
}
|
||||
|
||||
private static String getInventoryConfig(ItemStack[] inventory) {
|
||||
YamlConfiguration inventoryConfig = new YamlConfiguration();
|
||||
inventoryConfig.set("Inventory", inventory);
|
||||
|
||||
return inventoryConfig.saveToString();
|
||||
}
|
||||
|
||||
private static String getArmorConfig(ItemStack[] armor) {
|
||||
YamlConfiguration armorConfig = new YamlConfiguration();
|
||||
armorConfig.set("Armor", armor);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
Es fällt mir kein Anwendungsfall ein, für den wir eine KitID benötigen würden. Dir etwa? PK wäre UserID, GameMode, Name
Die ID wird der neue PK, hiermit wird es möglich Kits mit dem gleichen Name und Gamemode zu haben
Mehrere Kits mit gleichem Spieler, GameMode und Namen finde ich nicht sinnvoll, das erlaubt nur Verwirrung.