SteamWar/SpigotCore
Archiviert
13
0

MultiKits #88

Manuell gemergt
Lixfel hat 10 Commits von multi-kit nach master 2021-01-30 16:42:25 +01:00 zusammengeführt
Nur Änderungen aus Commit e88f183e72 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -37,6 +37,7 @@ public class PersonalKit {
private final String gamemode;
private String inventory;
private String armor;
private boolean inUse;
private PersonalKit(ResultSet rs) throws SQLException {
kitID = rs.getInt("KitID");
Veraltet
Review

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

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
Veraltet
Review

Die ID wird der neue PK, hiermit wird es möglich Kits mit dem gleichen Name und Gamemode zu haben

Die ID wird der neue PK, hiermit wird es möglich Kits mit dem gleichen Name und Gamemode zu haben
Veraltet
Review

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.
@ -45,6 +46,7 @@ public class PersonalKit {
inventory = rs.getString("Inventory");
armor = rs.getString("Armor");
name = rs.getString("Name");
inUse = rs.getBoolean("InUse");
Veraltet
Review

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.

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.
Veraltet
Review

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.

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.
}
public static List<PersonalKit> get(int userID, String gamemode){
@ -81,6 +83,23 @@ public class PersonalKit {
userID, gamemode, name, inventoryConfig.saveToString(), armorConfig.saveToString());
}
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<PersonalKit> list = new ArrayList<>();
while (rs.next())
list.add(new PersonalKit(rs));
if(list.size() > 1) {
list.forEach(kit -> {
if(list.indexOf(kit) >= 1) kit.setInUse(false);
});
}
return list.get(0);
} catch (SQLException e) {
Review

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)
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]);
@ -103,6 +122,15 @@ public class PersonalKit {
return gamemode;
}
Review

Wurde bislang nicht benötigt, warum jetzt?

Wurde bislang nicht benötigt, warum jetzt?
Review

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.

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.
public boolean isInUse() {
return inUse;
}
public void setInUse(boolean inUse) {
this.inUse = inUse;
SQL.update("UPDATE PersonalKit SET InUse = ? WHERE KitID = ?", this.inUse, kitID);
}
Veraltet
Review

Hier würde ich mir wünschen, dass automatisch alle anderen Kits desselben Spielers desselben Moduses inUse=False gestellt werden.

Hier würde ich mir wünschen, dass automatisch alle anderen Kits desselben Spielers desselben Moduses inUse=False gestellt werden.
public void setName(String name) {
Veraltet
Review

Whops! Fehlende invertierung!

Whops! Fehlende invertierung!
this.name = name;
SQL.update("UPDATE PersonalKit SET Name = ? WHERE KitID = ?", this.name, kitID);