MultiKits #88
Keine Reviewer
Label
Kein Label
Bug
Codeverbesserung
Einsteiger Freundlich
Idee
In Arbeit
Neues Feature
Prio A
Security Breach
Überprüfung notwendig
Verbesserung
Zu Beobachten
Kein Meilenstein
Niemand zuständig
2 Beteiligte
Fällig am
Kein Fälligkeitsdatum gesetzt.
Abhängigkeiten
Keine Abhängigkeiten gesetzt.
Referenz: SteamWar/SpigotCore#88
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren
Keine Beschreibung angegeben.
Branch "multi-kit" löschen
Das Löschen eines Branches ist permanent. Obwohl der Branch für eine kurze Zeit weiter existieren könnte, kann diese Aktion in den meisten Fällen NICHT rückgängig gemacht werden. Fortfahren?
@ -36,2 +40,4 @@
private boolean inUse;
private PersonalKit(ResultSet rs) throws SQLException {
kitID = rs.getInt("KitID");
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.
@ -40,2 +46,4 @@
inventory = rs.getString("Inventory");
armor = rs.getString("Armor");
name = rs.getString("Name");
inUse = rs.getBoolean("InUse");
Ich verstehe zwar, was du damit bezwecken möchtest, jedoch ist das mMn. nicht sauber & kann schnell zu einem korrupten Datenbankzustand führen. Wenn, dann müsste man eigentlich eine Tabelle InUse mit User, GameMode, KitName machen, dann kann ein Spieler auch nur ein Kit "in use" haben, oder wir lassen das einfach und der Spieler hat Standardmäßig immer erstmal das default-Kit und muss dann halt sein "derzeitiges" Kit erst manuell auswählen.
In der Methode wo dieser Zustand abgerufen wird, gibt es auch einen Failsafe welcher so fern mehrere Elemente mit diesem Zustand existieren werden die mit der höheren ID zurückgesetzt.
@ -49,2 +62,3 @@
}
return new PersonalKit(rs);
public static List<PersonalKit> get(int userID, String gamemode, String name) {
Das sollte nur ein Kit zurückliefern oder null.
Wie gesagt, Kits können den gleichen Namen haben
Mehrere Kits mit gleichem Spieler, GameMode und Namen finde ich nicht sinnvoll, das erlaubt nur Verwirrung.
@ -75,2 +113,4 @@
return Objects.requireNonNull(config.getList("Armor")).toArray(new ItemStack[0]);
}
public int getUserID() {
Wurde bislang nicht benötigt, warum jetzt?
Same as getGamemode
@ -77,0 +121,4 @@
return name;
}
public String getGamemode() {
Wurde bislang nicht benötigt, warum jetzt?
Habe es einfach mal Präventiv reingepackt, weil ich zu diesem Zeitpunkt noch nicht ganz wusste, ob ich es brauchen würde. Kann eigentlich weg.
@ -77,0 +134,4 @@
SQL.update("UPDATE PersonalKit SET InUse = ? WHERE KitID = ?", this.inUse, kitID);
}
public void setName(String name) {
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.
Die Möglichkeit, dass Kit umzubenennen ist im FightSystem schon implementiert.
@ -77,0 +139,4 @@
SQL.update("UPDATE PersonalKit SET Name = ? WHERE KitID = ?", this.name, kitID);
}
public void setInventory(ItemStack[] inventory) {
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)
@ -63,3 +98,1 @@
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) {
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)
@ -77,0 +130,4 @@
public void setInUse(boolean inUse) {
this.inUse = inUse;
updateDB();
Hier würde ich mir wünschen, dass automatisch alle anderen Kits desselben Spielers desselben Moduses inUse=False gestellt werden.
@ -77,0 +138,4 @@
updateDB();
}
public void setInventory(ItemStack[] inventory) {
Wenn, wird immer Inventory und Armor zeitgleich geupdated, daher auch bitte zeitgleich setzen, das macht einen Datenbankaufruf weniger.
@ -77,0 +131,4 @@
public void setInUse(boolean inUse) {
PersonalKit kit = getKitInUse(userID, gamemode);
if(kit != null)
kit.setUse(inUse);
Whops! Fehlende invertierung!
@ -77,0 +176,4 @@
YamlConfiguration armorConfig = new YamlConfiguration();
armorConfig.set("Armor", armor);
return armorConfig.saveToString();
Wenn du hier schon 2 extramethoden draus machst, könnte man diese auch noch zu einer einzelnen zusammenfassen (+ String als parameter)
Muss zeitgleich mit der FightSystem-Änderung gepusht werden + DB-Anpassung