• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Spigot [Gelöst] Datenbank informationen eintragen per befehl

D

deleted209242

Guest
Hallo Foren User,

ich habe mal wieder eine etwas leichtere Frage, zumindestens hoffe ich das.
Ich wollte gerne in mein /fly sowie /vanish befehl eine config mit einbinden, sodass auch nach einem Restart noch alles wie vanish oder fly aktiv ist und nicht wieder aus ist.
Ich hatte mir folgendes überlegt:
Pluginname/Playerconfig/UUID.yml --> Dieser Pfad sollte erstellt werden mit der UUID des Spielers als namen.
Nun möchte ich in der Config eintragen ob der Spieler Vanish oder fly Aktiviert hat oder nicht.

Meine Frage nun wie erstelle ich die Config mit der UUID des Spielers als namen und wie kann ich diese und den Inhalt mit dem befehl abrufen

mfg Sullaysur
 
Zuletzt bearbeitet von einem Moderator:

ES-Henne

Redstoneengineer
Registriert
3 Oktober 2017
Beiträge
41
Diamanten
0
Gleichmal einen Vorschlag vorweg.
Bevor du für jeden Spieler zwei Dateien anlegst und in jeder Datei nur eine Zeile steht, lege für jeden Spieler eine Datei an und speichere dort beide Werte. Damit sparst du dir Leistung und hast eine bessere Übersicht.
 
D

deleted209242

Guest
Ich habe nun schonmal eine Klasse FileManager angelegt, wo ich dann alles mit der Datei drüber regeln möchte.

java:
public class FileManager {
    public static File getPlayerConfigFile() {
        return new File("plugins/PluginName/Player/", ".yml");
    }
    
    public static FileConfiguration getPlayerConfigFileConfiguration() {
        return YamlConfiguration.loadConfiguration(getPlayerConfigFile());
    }
    
    public static void setPlayerPrefixConfig() {
        FileConfiguration cfg = getPlayerConfigFileConfiguration();
        cfg.options().copyDefaults(true);
        cfg.addDefault("...", "...");
        try {
            cfg.save(getPrefixConfigFile());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void readPlayerConfig() {
        FileConfiguration cfg = getPrefixPlayerFileConfiguration();
        Main.isfly = cfg.getString("..."); //Main.isfly = boolean
        Main.isvanish = cfg.getString("..."); //Main.isfly = boolean
    }
}

Wie muss ich jetzt was eintragen damit ich die Datei mit der UUID habe und darinsteht:
isfly: false
isvanish: false
oder halt true?
 

_dortom_

Minecrafter
Registriert
1 November 2014
Beiträge
16
Diamanten
300
Minecraft
_dortom_
Ich würde es so hier machen:

für deine Main (nicht in die OnEnable einfach oben drüber):

Code:
public static File filename = new File("plugins/pluginname", "filename.yml");
public static FileConfiguration filename_cfg = YamlConfiguration.loadConfiguration(filename.);

Damit kannst du schonmal auf das File "filename" zugreifen und Daten schreiben und lesen.

Jetzt gehst du in deine onCommand vom Vanish oder Fly und sagst:

wenn /fly spielername eingegeben wird --> Frage UUID vom Spieler ab --> Frage File ob UUID in File existiert --> wenn nicht dann setze UUID in File --> wenn schon vorhanden dann entferne UUID aus File

das Prinzip ist ziemlich einfach.

Ich hoffe du weißt wie man dann Daten in die Datei schreibt und ausliest. Wenn du dazu noch Hilfe brauchst, dann kannst du dich auch in Discord melden.

_dortom_#8320
 
D

deleted209242

Guest
Danke erstmal für die ganzen Hilfreichen Kommentare,

Warum willst du da getString machen? Gibt doch auch ein getBoolean.
Ich habe nun getString in getBoolean geändert.

-------------------------------------------------------------------------------------------------------------------------

Die Spielerdatei könntest du so anlegen:
Code:
    public static File getPlayerConfigFile(UUID playerId) {
        Preconditions.checkNotNull(playerId, "playerId");
        return new File(plugin.getDataFolder(),  "Player/" + playerId + ".yml");
    }
Das habe ich nun soweit geändert, erhalte aber noch 2 Fehlermeldungen:
java:
public static File getPlayerConfigFile(UUID uuid) {
        Preconditions.checkNotNull(uuid, "uuid");
        return new File("plugins/Calderya/Player/", uuid + ".yml");
    }
  
    public static FileConfiguration getPlayerConfigFileConfiguration() {
        return YamlConfiguration.loadConfiguration(getPlayerConfigFile());
    }

public static void setPlayerPrefixConfig() {
        FileConfiguration cfg = getPlayerConfigFileConfiguration();
        cfg.options().copyDefaults(true);
        cfg.addDefault("vanish", "false");
        cfg.addDefault("fly", "false");
        try {
            cfg.save(getPrefixConfigFile());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    public static void readPlayerConfig() {
        FileConfiguration cfg = getPlayerConfigFileConfiguration();
        Vanish.isvanish = cfg.getBoolean("vanish");
        Fly.isfly = cfg.getBoolean("fly");
    }
  1. Mir wird checkNotNull rot unterstrichen, warum?
  2. Bei getPlayerConfigFile() fehlt ein Argument, was genau gehört da rein? habe jetzt etwas probiert, scheint aber nicht zu klappen.
  3. Kann ich das über die readPlayerConfig so machen oder nicht, habe da nämlich meine zweifel, der ruft doch nur die file mit der UUID des Spielers ab oder?
-------------------------------------------------------------------------------------------------------------------------

Ich würde es so hier machen:
für deine Main (nicht in die OnEnable einfach oben drüber):
Code:
public static File filename = new File("plugins/pluginname", "filename.yml");
public static FileConfiguration filename_cfg = YamlConfiguration.loadConfiguration(filename.);

Damit kannst du schonmal auf das File "filename" zugreifen und Daten schreiben und lesen.
Da sehe ich jetzt leider noch nicht ganz den Sinn, kann ich dann praktisch die FileManager Class fallen lassen und brauche nur dass, oder wie soll das ganze Funktionieren?

Jetzt gehst du in deine onCommand vom Vanish oder Fly und sagst:
wenn /fly spielername eingegeben wird --> Frage UUID vom Spieler ab --> Frage File ob UUID in File existiert --> wenn nicht dann setze UUID in File --> wenn schon vorhanden dann entferne UUID aus File
Danke, das war mir in soweit Klar, genau wie dass mit dem abrufen der werte, habe ich schonmal für die MySQL verbindung gebraucht.
 
Zuletzt bearbeitet von einem Moderator:

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
1. Vermutlich hast du das falsche Preconditions importiert. Das was ich meine kommt aus dem Namespace com.google.common.base
2. Da musst du die UUID des Spielers übergeben, dessen Datei du laden möchtest.
3. readPlayerConfig() benötigt dann auch die UUID des Spielers als Argument
 
Zuletzt bearbeitet:

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Also du möchtest doch für jeden Spieler eine eigene Datei anlegen? Dann benötigst du die UUID des Spieler, um die Daten zu lesen oder zu schreiben. Für eine Instanz von Player oder OfflinePlayer kannst du .getUniqueId() verwenden, um diese UUID zu erhalten.
 
D

deleted209242

Guest
In einem Command kann ich das ja folgendermaßen abfragen:
Code:
Player p = (Player) sender;
p.getUniqueId(); bzw p.getUniqueId().toString;

In einem Event dann halt mit:
Code:
Player p = e.getPlayer();
p.getUniqueId().toString();

Aber wie mache ich das hier?
Code:
public static File getPlayerConfigFile(UUID uuid) {
    Preconditions.checkNotNull(uuid, "uuid");
       return new File("plugins/Calderya/Player/", uuid + ".yml");
}
   
public static FileConfiguration getPlayerConfigFileConfiguration() {
    return YamlConfiguration.loadConfiguration(getPlayerConfigFile();
}
   
public static void setStandardPlayerConfig() {
    FileConfiguration cfg = getPlayerConfigFileConfiguration();
    cfg.options().copyDefaults(true);
    cfg.addDefault("vanish", "false");
    cfg.addDefault("fly", "false");
    try {
        cfg.save(getPlayerConfigFile(Bukkit.));
    } catch (IOException e) {
        e.printStackTrace();
    }
}
   
public static void readPlayerConfig() {
    FileConfiguration cfg = getPlayerConfigFileConfiguration();
    Vanish.isvanish = cfg.getBoolean("vanish");
    Fly.isfly = cfg.getBoolean("fly");
}

ps: Sprry dass ich mich dabei so doof anstelle, habe erst vor kurzem angefangen und bin noch am lernen, und möchte mich auch verbessern.
 
Zuletzt bearbeitet von einem Moderator:

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Die Methoden benötigen alle einen Parameter für die UUID des Spielers. Ich habe das einfach mal in deinen Code eingetragen ohne weitere Fehlerbehandlung oder Optimierungen:
Code:
public static FileConfiguration getPlayerConfigFileConfiguration(UUID uuid) {
    return YamlConfiguration.loadConfiguration(getPlayerConfigFile(uuid);
}
  
public static void setStandardPlayerConfig(UUID uuid) {
    FileConfiguration cfg = getPlayerConfigFileConfiguration(uuid);
    cfg.options().copyDefaults(true);
    cfg.addDefault("vanish", "false");
    cfg.addDefault("fly", "false");
    try {
        cfg.save(getPlayerConfigFile(uuid));
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  
public static void readPlayerConfig(UUID uuid) {
    FileConfiguration cfg = getPlayerConfigFileConfiguration(uuid);
    Vanish.isvanish = cfg.getBoolean("vanish");
    Fly.isfly = cfg.getBoolean("fly");
}

Auffallen tut mir dabei insbesondere, dass Vanish.isvanish und Fly.isfly statische Felder sind. Sie sind also überhaupt nicht vom Spieler abhängig. Eine besser geeignete Datenstruktur wäre Set<UUID>. Hier musst du dann beim Setzen abhängig vom Wert des Config-Eintrags .add() oder .remove() verwenden und mit .contains() prüfen, ob der Wert für einen Spieler gesetzt ist.

Einfacher ginge es aber so wie ich es in Beitrag #3 dargestellt habe. Hier würdest du eine Config-Datei beim Starten des Plugins einlesen und bei Änderungen speichern.
 
D

deleted209242

Guest
Einfacher ginge es aber so wie ich es in Beitrag #3 dargestellt habe. Hier würdest du eine Config-Datei beim Starten des Plugins einlesen und bei Änderungen speichern.
Ich würde es dann auch gerne Folgendermaßen wie du schon geschrieben hattest so speichern wollen:
yaml:
fly:
  - 3b62fcd9-6d0a-425b-a0f0-1b65d0f7db33
  - f9503937-d7b6-49c4-a226-393341df0d7e
vanish:
  - b86ab469-475e-41c4-8277-f0d8bfb787f0
spy:
  - b86ab469-475e-41c4-8277-f0d8bfb787f0

Ich habe nun folgendes in meiner Vanish.java schon geändert:
java:
public class Vanish implements CommandExecutor{
    
    private String uuid;

    @SuppressWarnings("deprecation")
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if ((sender instanceof ConsoleCommandSender)) {
            sender.sendMessage(Main.noconsole);
            return true;
        }
        
        Player p = (Player) sender;
        if(cmd.getName().equalsIgnoreCase("vanish")) {
            if(p.hasPermission("Calderya.vanish")) {
                if(args.length == 0) {
                    uuid = p.getUniqueId().toString();
                    if(/*Wenn die Datei Vanish Spieler nicht enthält*/) {
                        //Spieler in Vanish und Fly einfügen
                        //Datei Speichern
                        p.setAllowFlight(true);
                        p.setFlying(true);
                        p.getWorld().strikeLightningEffect(p.getLocation());
                        p.sendMessage(Main.prefix + "§eDu bist nun nicht mehr Sichtbar!");
                    } else if(/*Wenn die Datei Vanish Spieler enthält*/) {
                        //Spieler aus Vanish und Fly entfernen
                        //Datei Speichern
                        for(Player all : Bukkit.getOnlinePlayers()) {
                            all.showPlayer(p);
                        }
                        p.setAllowFlight(false);
                        p.setFlying(false);
                        p.getWorld().playEffect(p.getLocation(), Effect.POTION_BREAK, 5);
                        p.sendMessage(Main.prefix + "§eDu bist nun wieder Sichtbar!");
                    }
                } else {
                    p.sendMessage(Main.prefix + " §4Bitte benutzte §3/help §4für Hilfe!");
                }
            } else {
                p.sendMessage(Main.noperm);
            }
        }
        return false;
    }

}
Frage ist jetzt wie genau ich die Datei nun aufrufe und die werte einspeichern muss?
Das selbe muss ich ja dann auch in der fly und msgspy machen oder?
 
Zuletzt bearbeitet von einem Moderator:

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Beim Start deines Plugins musst du diese Daten dann also einlesen und bei Veränderung jeweils speichern. Zudem musst du speichern, welche Spieler den jeweiligen Befehl aktiviert haben, also bei jeder Veränderung die Daten in deinen internen Datenstrukturen aktualisieren und diese Config-Datei speichern. Dann musst du bei Abfragen immer nur deine internen Daten abfragen, nicht die ganze Config-Datei durchgehen.

Das Auslesen und Schreiben der Configdatei solltest du dann zentral in deiner Plugin-Klasse machen. Dabei solltest du die UUIDs erst beim Speichern zu String umwandeln bzw. beim Einlesen aus einem String.
Die Daten kannst du dann entweder in deiner Plugin-Klasse oder in den Befehlsklassen speichern. Z.B. Set<UUID> vanishedPlayers = new HashSet<>();
 
D

deleted209242

Guest
Beim Start deines Plugins musst du diese Daten dann also einlesen und bei Veränderung jeweils speichern. Zudem musst du speichern, welche Spieler den jeweiligen Befehl aktiviert haben, also bei jeder Veränderung die Daten in deinen internen Datenstrukturen aktualisieren und diese Config-Datei speichern. Dann musst du bei Abfragen immer nur deine internen Daten abfragen, nicht die ganze Config-Datei durchgehen.

Das Auslesen und Schreiben der Configdatei solltest du dann zentral in deiner Plugin-Klasse machen. Dabei solltest du die UUIDs erst beim Speichern zu String umwandeln bzw. beim Einlesen aus einem String.
Die Daten kannst du dann entweder in deiner Plugin-Klasse oder in den Befehlsklassen speichern. Z.B. Set<UUID> vanishedPlayers = new HashSet<>();

Ok, ich merke gerade das könnte ich auch einfahcer regeln, aber danke für deine Antwort

Ich habe es jetzt versucht anders und besser zu lösen, ich habe eine funktionierende Verbindugng mit einer Datenbank, habe schnelle die Table erstellt:
java:
public class MySQL {
   
    public static String username;
    public static String password;
    public static String database;
    public static String host;
    public static String port;
    public static Connection con;
   
    public static void connect() {
        if(!isConnected()) {
            try {
                con = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, username, password);
                Bukkit.getConsoleSender().sendMessage(Main.prefix + "MySQL Verbindung aufgebaut!");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
   
    public static void close() {
        if(isConnected()) {
            try {
                con.close();
                Bukkit.getConsoleSender().sendMessage(Main.prefix + "MySQL Verbindung geschlossen!");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static boolean isConnected() {
        return con != null;
    }
   
    public static void createTable() {
        if(isConnected()) {
            try {
                con.createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS BannedPlayers (Spielername VARCHAR(100), UUID VARCHAR(100), Ende VARCHAR(100), Grund VARCHAR(100))");
                con.createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS Playerfly (Spielername VARCHAR(100), UUID VARCHAR(100), Fly VARCHAR(100))");
                con.createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS Playervanish (Spielername VARCHAR(100), UUID VARCHAR(100), Vanish VARCHAR(100), Fly VARCHAR(100))");
                con.createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS Playerspy (Spielername VARCHAR(100), UUID VARCHAR(100), Spy VARCHAR(100))");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
   
    public static void update(String qry) {
        if(isConnected()) {
            try {
                con.createStatement().executeUpdate(qry);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
   
    public static ResultSet getResult(String qry) {
        if(isConnected()) {
            try {
                return con.createStatement().executeQuery(qry);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
   
}

Und dann habe ich meine Fly und Vanish angefangen umzu schreiben:
java:
public class Vanish implements CommandExecutor{

    public static String fly = "true";
    public static String vanish = "true";

    @SuppressWarnings("deprecation")
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if ((sender instanceof ConsoleCommandSender)) {
            sender.sendMessage(Main.noconsole);
            return true;
        }
       
        Player p = (Player) sender;
        String player = p.toString();
        if(cmd.getName().equalsIgnoreCase("vanish")) {
            if(p.hasPermission("Calderya.vanish")) {
                if(args.length == 0) {
                    if(PlayerManager.isvanish(getUUID(player))) {
                        PlayerManager.vanishon(getUUID(player), p, vanish, fly);
                        p.setAllowFlight(true);
                        p.setFlying(true);
                        p.getWorld().strikeLightningEffect(p.getLocation());
                        p.sendMessage(Main.prefix + "§eDu bist nun nicht mehr Sichtbar!");
                    } else {
                        PlayerManager.vanishoff(getUUID(player));
                        for(Player all : Bukkit.getOnlinePlayers()) {
                            all.showPlayer(p);
                        }
                        if(PlayerManager.isfly(getUUID(player))) {
                            p.setAllowFlight(true);
                            p.setFlying(true);
                        } else {
                            p.setAllowFlight(false);
                            p.setFlying(false);
                        }
                        p.getWorld().playEffect(p.getLocation(), Effect.POTION_BREAK, 5);
                        p.sendMessage(Main.prefix + "§eDu bist nun wieder Sichtbar!");
                    }
                } else {
                    p.sendMessage(Main.prefix + " §4Bitte benutzte §3/help §4für Hilfe!");
                }
            } else {
                p.sendMessage(Main.noperm);
            }
        }
        return false;
    }

    @SuppressWarnings("deprecation")
    private String getUUID(String p) {
        return Bukkit.getOfflinePlayer(p).getUniqueId().toString();
    }
}

java:
public class Fly implements CommandExecutor{

    public static String fly = "true";

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if ((sender instanceof ConsoleCommandSender)) {
            sender.sendMessage(Main.noconsole);
            return true;
        }
        Player p = (Player) sender;
        String player = p.toString();
        if(cmd.getName().equalsIgnoreCase("fly")) {
            if(p.hasPermission("Calderya.fly")) {
                if(args.length == 0) {
                    if(PlayerManager.isfly(getUUIDp(player))) {
                        PlayerManager.flyoff(getUUIDp(player));
                        p.sendMessage("§eDu hast Fliegen §bdeaktiviert §e!");
                        p.setAllowFlight(false);
                        p.setFlying(false);
                    } else {
                        PlayerManager.flyon(getUUIDp(player), p, fly);
                        p.sendMessage("§eDu hast Fliegen §baktiviert §e!");
                        p.setAllowFlight(true);
                        p.setFlying(true);
                    }
                } else if(args.length == 1) {
                    Player t = Bukkit.getPlayer(args[0]);
                    String target = args[0];
                    if(t != null) {
                        if(PlayerManager.isfly(getUUIDt(target))) {
                            PlayerManager.flyoff(getUUIDt(target));
                            t.sendMessage("§eFliegen wurde von §a" + p.getName() + " §bdeaktiviert §e!");
                            t.setAllowFlight(false);
                            t.setFlying(false);
                            p.sendMessage("§eDu hast das Fliegen für §a" + t.getName() + " §bdeaktiviert §e!");
                        } else {
                            PlayerManager.flyon(getUUIDt(target), t, fly);
                            t.sendMessage("§eFliegen wurde von §a" + p.getName() + " §baktiviert §e!");
                            t.setAllowFlight(true);
                            t.setFlying(true);
                            p.sendMessage("§eDu hast das Fliegen für §a" + t.getName() + " §baktiviert §e!");
                        }
                    } else {
                        p.sendMessage(Main.prefix + " §cFalscher Spielername angegeben oder der Spieler ist nicht online!");
                    }
                } else {
                    p.sendMessage(Main.prefix + " §4Bitte benutzte §3/help §4für Hilfe!");
                }
            } else {
                p.sendMessage(Main.noperm);
            }
        }
        return false;
    }

    @SuppressWarnings("deprecation")
    private String getUUIDp(String player) {
        return Bukkit.getOfflinePlayer(player).getUniqueId().toString();
    }

    @SuppressWarnings("deprecation")
    private String getUUIDt(String target) {
        return Bukkit.getOfflinePlayer(target).getUniqueId().toString();
    }
}

Dazu habe ich auch noch eine ManagerKlasse erstellt, die werte einträgt und löscht:
java:
public static void flyon(String uuid, Player p, String fly) {
        MySQL.update("INSERT INTO Playerfly (Spielername, UUID, Ende, Grund) VALUES ('"+p+"','"+uuid+"','"+fly+"')");
    }

    public static void flyoff(String uuid) {
        MySQL.update("DELETE FROM Playerfly WHERE UUID='"+uuid+"'");
    }
   
    public static void vanishon(String uuid, Player p, String db_vanish, String db_fly) {
        MySQL.update("INSERT INTO Playervanish (Spielername, UUID, Vanish, Fly) VALUES ('"+p+"','"+uuid+"','"+db_vanish.toString()+"','"+db_fly+"')");
    }

    public static void vanishoff(String uuid) {
        MySQL.update("DELETE FROM Playervanish WHERE UUID='"+uuid+"'");
    }

    public static void spyon(String uuid, Player p, String Spy) {
        MySQL.update("INSERT INTO Playerspy (Spielername, UUID, Spy) VALUES ('"+p+"','"+uuid+"','"+Spy+"')");
    }

    public static void spyoff(String uuid) {
        MySQL.update("DELETE FROM Playerspy WHERE UUID='"+uuid+"'");
    }

    public static boolean isfly(String uuid) {
        ResultSet rs = MySQL.getResult("SELECT Fly FROM Playerfly WHERE UUID='"+uuid+"'");
        try {
            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
   
    public static boolean isvanish(String uuid) {
        ResultSet rs = MySQL.getResult("SELECT Vanish FROM Playervanish WHERE UUID='"+uuid+"'");
        try {
            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    public static boolean isspy(String uuid) {
        ResultSet rs = MySQL.getResult("SELECT Spy FROM Playerspy WHERE UUID='"+uuid+"'");
        try {
            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

Und zwar folgendes, immer wenn ich jetzt z.B. /fly eingebe bekomme ich diesen Fehler:
Code:
[20:17:40 WARN]: java.sql.SQLException: Column count doesn't match value count at row 1
[20:17:40 WARN]:        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
[20:17:40 WARN]:        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)
[20:17:40 WARN]:        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)
[20:17:40 WARN]:        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
[20:17:40 WARN]:        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
[20:17:40 WARN]:        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2491)
[20:17:40 WARN]:        at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)
[20:17:40 WARN]:        at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2607)
[20:17:40 WARN]:        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1480)
[20:17:40 WARN]:        at de.thegreeny.calderya.mysql.MySQL.update(MySQL.java:63)
[20:17:40 WARN]:        at de.thegreeny.calderya.util.PlayerManager.flyon(PlayerManager.java:13)
[20:17:40 WARN]:        at de.thegreeny.calderya.commands.Fly.onCommand(Fly.java:34)
[20:17:40 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[20:17:40 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:139)
[20:17:40 WARN]:        at org.bukkit.craftbukkit.v1_13_R2.CraftServer.dispatchCommand(CraftServer.java:702)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.PlayerConnection.handleCommand(PlayerConnection.java:1636)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.PlayerConnection.a(PlayerConnection.java:1476)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.PacketPlayInChat.a(PacketPlayInChat.java:45)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.PacketPlayInChat.a(PacketPlayInChat.java:1)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.PlayerConnectionUtils.a(SourceFile:10)
[20:17:40 WARN]:        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[20:17:40 WARN]:        at java.util.concurrent.FutureTask.run(Unknown Source)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.SystemUtils.a(SourceFile:199)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:896)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:417)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:831)
[20:17:40 WARN]:        at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:729)
[20:17:40 WARN]:        at java.lang.Thread.run(Unknown Source)
Was ich daran verstanden habe, dass es ein problem mit der Variable die übergeben wird und in der Db hinterlegt ist zu tun hat, liege ich da richtig?
Hingegen bei /vanish keinen, da passiert dann aber auch nichts in der db aber auch kein fehler, woran kann das liegen?

Des weiteren wollte ich mal fragen ob da generell noch weitere fehler drin sind?

mfg Sullaysur
 
D

deleted209242

Guest
Hier willst du Daten in 4 Spalten eintragen, übergibst aber nur Werte für 3 Spalten:
MySQL.update("INSERT INTO Playerfly (Spielername, UUID, Ende, Grund) VALUES ('"+p+"','"+uuid+"','"+fly+"')");
Vielen Vielen Dank, jetzt funktioniert es, das habe ich irgendwie übersehen, und bei vanish hat nichts funktioniert weil ich überprüft habe wenn er drinsteht dann trage ihn ein und wenn nicht dann trage ihn aus.

1ne Frage noch, in der Datenbank trägt er mir beim Namen: CraftPlayer{name= Sullaysur} ein, aber ich möchte da nur Sullaysur stehen haben, geht das bzw. was muss ich ändern, wo liegt der fehler?
 
Oben