[Spigot] [MySQL] Abfragen ob Spieler in Datenbank ist oder Online war?
Hallo Community
Ich programmiere derzeit ein Money-System wobei auch Geld von Spielern abgefragt werden soll welche Offline sind aber schonmal Online waren und in der Datenbank sind.
Wie setzte ich das am besten um?
Ich habe bereits einiges getestet und auch gegoogelt aber alles ohne Erfolg.
Was man können soll:
/money Testname | Geld abfragen, wenn Spieler Online ist.
/money Testname | Geld abfragen, wenn Spieler Offline ist aber schonmal auf dem Server war und somit in der Datenbank ist.
/money jgtjgiojg | Dann soll eine Nachricht kommen das der Spieler noch nie auf dem Server war.
Wie könnte ich das am besten umsetzten?
MFG
2 Antworten
SQL Tabelle mit 3 Spalten(Usernamen, uuid(key) und money) erstellen und beim joinen eines Spielers soll dieser hinzugefügt/geupdatet werden . Wenn der Username nicht in der Datenbank ist, dann war er nie auf dem Server! :) (Die uuid dient dazu, bei einer Namensänderung alle daten beizubehalten)
wenn du was von einem spieler der offline ist abfragen willst brauchst du ansich garkein Player Objekt da der Name als string schon reicht! ^^ ansonsten wenn du einen online Spieler abfragen willst immer zuerst if(Bukkit.getPlayer(args[0] != null) abfragen ^^
Deswegen beides in die SQL Datenbank: Beim joinen wird der Username aus der UUID raus Geupdatet und kann somit als abfrage genutzt werden.
Ein UUID und username cache halt.
Ansonsten ist es nur möglich die uuid eines offline spielers zu bekommen wenn man es über die mojang api abfrägt welche aber drosselt und dem entsprechend nicht für ungecachte abfragen zu empfehlen ist.
Naja wenn der targetPlayer nicht online ist, ist er bei Bukkit.getPlayer(args[0]) auch null. Um das zu vermeiden gäbe es ich Bukkit.getOfflinePlayer. Finde ich aber zu umständlich da es dort bessere Methoden gibt
Ja genau so habe ich es bis jetzt, mein Problem ist das der Player nicht gefunden wird bei z.b guhruughru
Bsp: Player targetPlayer = Bukkit.getPlayer(args[0]);
Dann kommt in der Console eine NullPointerException.
MFG
Hey,
ich würde nicht mit 3 Spalten arbeiten.
2 Spalten (UUID, Long) reichen voll aus. Du kannst dir ja immer den PlayerNamen getten mit Bukkit.getOfflinePlayer(UUID uuid). Am besten einfach beim setzen von Coins eines Offlineplayers einfach Bukkit.getUUID(args[Der Namen]).getUUID. Einfach abfragen ob die UUID in deiner Datenbank ist.
Meine Methode:
In der Console habe ich jetzt eine NullPointerException in der Zeile