MySQL Kit-System

Wenn ihr bei eurem Plugin nicht weiter kommt, könnt ihr hier euer Problem beschreiben und um Hilfe bitten.

MySQL Kit-System

Beitragvon TheMeyss » Sa 10. Sep 2016, 12:00

Hi Leute,
ich hab wieder einmal ein Problem. Ich arbeite an einem SkyWars-Plugin, welches sich mit MySQL verbindet.
Ich habe auch eine Tabelle (Playername (VARCHAR), UUID (VARCHAR), Kit1 (BOOLEAN), Kit2 (BOOLEAN), Kit3 (BOOLEAN), Kit4 (BOOLEAN)) erstellt (true = gekauft - false = nicht gekauft).
Kit1 ist hierbei das StarterKit. Das heißt, wenn der Spieler das erste mal joint, soll er in die Tabelle eingetragen werden. Die Frage hierbei ist: Wie finde ich heraus, ob der Spieler das erste mal gejoint ist?

Hier habe ich es mit der getFirstPlayed-Methode probiert, aber es gab immer einen geringen unterschied und deshalb hat die Methode nicht funktioniert.
Code: Alles auswählen
  1. public static void firstJoin(Player p) {
  2.         long first = p.getFirstPlayed();
  3.         long now = System.currentTimeMillis();
  4.         if(first == now) {
  5.             p.sendMessage("Du bist das erste mal auf dem Server!");
  6.         }
  7.         p.sendMessage(String.valueOf(first));
  8.         p.sendMessage(String.valueOf(now));
  9.     }



Dann habe ich z.B. das Kit2. Wenn ich das Kaufinventar öffne, will ich abrufen, ob der Spieler das Kit gekauft hat oder nicht. Die Frage hierbei: Wie geht das?

Nicht wundern, der Code ist so "kaputt", weil ich es auf so viele (auch dumme) Art und Weisen probiert habe.
Code: Alles auswählen
  1. public static void buyKit(Player p, String kit) {
  2.       String playername = p.getName();
  3.       String uuid = p.getUniqueId().toString();
  4.       if(kit.equalsIgnoreCase("Bergarbeiter")) {
  5.       }else if(kit.equalsIgnoreCase("Crafter")) {
  6.           Main.getMain.mySQL.update("INSERT INTO Kits (Spielername, UUID, Starter, Tank, Crafter, Bergarbeiter) VALUES ('"+playername+"','"+uuid+"','"+true+"','"+false+"','"+false+"','"+false+"')");
  7.       }else if(kit.equalsIgnoreCase("Tank")) {
  8.           ResultSet rs = Main.getMain.mySQL.getResult("SELECT * FROM Kits WHERE UUID='"+uuid+"' IS NULL");
  9.           ResultSet r = Main.getMain.mySQL.getResult("SELECT * FROM Kits WHERE UUID IS NULL;");
  10.               if(rs == null) {
  11.                   Bukkit.getConsoleSender().sendMessage("!=null");
  12.                   return;
  13.               }
  14.           if(rs != null) {
  15.               Bukkit.getConsoleSender().sendMessage("==null");
  16.               Bukkit.getConsoleSender().sendMessage(p.getUniqueId().toString());
  17.               Bukkit.getConsoleSender().sendMessage(rs.toString());
  18.            return;
  19.           }
  20.           Main.getMain.mySQL.update("UPDATE Kits SET Tank=true WHERE UUID='" + uuid + "'");
  21.         //  Main.getMain.mySQL.update("INSERT INTO Kits (Spielername, UUID) VALUES ('"+playername+"','"+uuid+"')");
  22.       }
  23.   }
  24.     public static boolean isBuyed(Player p, String kit) {
  25.         String uuid = p.getUniqueId().toString();
  26.         ResultSet rs = Main.getMain.mySQL.getResult("SELECT * FROM Kits WHERE UUID='"+uuid+"'");
  27.         try {
  28.             return rs.getBoolean(kit) == true;
  29.         } catch (SQLException e) {
  30.             e.printStackTrace();
  31.             Bukkit.getConsoleSender().sendMessage(Main.getMain.error);
  32.         }
  33.         return false;
  34.     }



Ich hoffe ihr könnt mir bei meinem Problem helfen... ich bin noch Anfänger im Thema SQL.

LG TheMeyss
Benutzeravatar
TheMeyss
 
Beiträge: 14
Registriert: Do 8. Sep 2016, 18:35

Re: MySQL Kit-System

Beitragvon Knadda » Sa 10. Sep 2016, 12:53

Du kanns abrufen ob der spieler das erste mal gejoint ist mit "p.hasPlayedBefore()"
Benutzeravatar
Knadda
 
Beiträge: 49
Registriert: Mo 1. Aug 2016, 07:06

Re: MySQL Kit-System

Beitragvon DevToLearn » Sa 10. Sep 2016, 13:28

Die Lösung ist hierbei ganz einfach. Wie du bereits gesagt hattest, speicherst du den Spieler mit verschieden Datentypen in eine Tabelle in MySQL ein. Die machst du, wenn der Spieler das erste Mal dem Server beigetreten ist. Das heißt, dass du ihn registrierst. Wenn dieser Spieler nun ein weiteres Mal dem Server beitritt, schreibst du einfach eine Methode, welche überprüft, ob der Spieler bereits in der Datenbank registriert ist. Wenn ja, kannst du die Werte beliebig editieren etc.

PS: Wenn das Standart-Kit sowieso jeder Spieler hat, weshalb speicherst du es dann mit einem boolean in der Tabelle ab?
PSS: Wenn du magst, kannst du mich gern auf Skype adden: tasibo_lp. Dann kann ich dir die MySQL-Befehle und dessen Funktionen besser erklären und anhand deines Problems demonstrieren ;)

LG DevToLearn
Benutzeravatar
DevToLearn
 
Beiträge: 15
Registriert: So 13. Mär 2016, 10:20

Re: MySQL Kit-System

Beitragvon TheMeyss » Sa 10. Sep 2016, 14:23

Danke für eure Antworten. Jetzt bleibt noch: Mit welcher Methode weiß ich ob da jetzt true oder falsch eingetragen ist... oder ob da überhaupt irgendetwas drin steht?
Benutzeravatar
TheMeyss
 
Beiträge: 14
Registriert: Do 8. Sep 2016, 18:35

Re: MySQL Kit-System

Beitragvon Letsplaybar » So 11. Sep 2016, 21:57

das kriegst du mit einem ResultSet raus. in dem du dir die Zeile vom Spieler als ResultSet holst und dann aus dem ResultSet die Spalte mit dem Entsprechenden boolean. dann kommt endweder true or false as return-value.
Bild
Helfe Wo ich kann.
Mein MinecraftServer: Letsplaybaro.de - Suchen Developer/Bilder

I hacked 127.0.0.1!!! :)
Benutzeravatar
Letsplaybar
 
Beiträge: 195
Registriert: Mo 1. Feb 2016, 17:21
Wohnort: Berlin

Re: MySQL Kit-System

Beitragvon DevToLearn » Mo 12. Sep 2016, 12:36

Alles bereits gelöst ;)



#Close
Benutzeravatar
DevToLearn
 
Beiträge: 15
Registriert: So 13. Mär 2016, 10:20


Zurück zu Hilfe und Support

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste