• 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!

Andere Spieler in einer .yml Speichern

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Hey ich bins wieder :),
mein derzeitiges Problem:
ich möchte das einer /Lizenz kaufen eingibt und dieser dann in einer .yml abgespeichert wird was ich hier gemacht habe:

Javascript:
File file = new File("plugins//???/handler.yml");
    FileConfiguration cfg = new YamlConfiguration().loadConfiguration(file);
  
  

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String arg2, String[] args) {
        Player p = (Player)sender;
        String name = p.getName();
        if(args.length == 0) {
            p.sendMessage("§7[§e???§7] §c/lizenz kaufen");
        } else if(args.length == 1) {
            if(args[0].equalsIgnoreCase("kaufen")) {
                if(econ.hasAccount(p)) {
                    if(econ.has(p, 10000)) {
                        if(cfg.getString("Name:") != null) {
                            p.sendMessage("§7[§e???§7] §cDu besitzt bereits eine Lizenz");
                          
                        }else {
                            econ.withdrawPlayer(p, 10000);
                            //p.getServer().dispatchCommand(Bukkit.getConsoleSender(), "pex user "+p.getName()+" group set Händler");
                            p.sendMessage("§7[§e???§7] §aDu bist nun ein Händler!");
                          
                            cfg.set("Name:", name);
                            try {
                                cfg.save(file);
                            } catch (IOException e) {
                              
                                e.printStackTrace();
                            }
                        }
                    } else {
                        p.sendMessage("§7[§e???§7] §cDu hast nicht genügend Geld!");
                    }
                } else {
                    p.sendMessage("§7[§e???§7] §cDu hast keinen Account!");
                }
            } else {
                p.sendMessage("§7[§e???§7] §c/lizenz kaufen");
            }
        } else {
            p.sendMessage("§7[§e???7] §c/lizenz kaufen");
        }
        return false;
    }

}

Problem ist das nur 1 Spielernamen dort stehen kann bei ienen anderen steht du besitzt bereits eine Lizenz wie kann ich das machen das die Namen hintereinander/unternander geschrieben werden aber trz das so Funktioniert wie es soll?
Ja ich weis das ist nicht die beste Umsetzung :)
Vielen Dank im vorraus.
 

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Hey ich habe jetzt das:
Javascript:
public class CMDLIZENZ implements CommandExecutor{

  
    private Economy econ;
    public CMDLIZENZ(Main main) {
        this.econ = Main.economy;
      
      
    }
  
    File file = new File("plugins//???//handler.yml");
    FileConfiguration cfg = new YamlConfiguration().loadConfiguration(file);
  
  
  

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String arg2, String[] args) {
        Player p = (Player)sender;
        String name = p.getName();
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch(IOException e){
                p.sendMessage("§cDatei konnte nicht erstellt werden!");
            }
        }
        if(args.length == 0) {
            p.sendMessage("§7[§e???§7] §c/lizenz kaufen");
        } else if(args.length == 1) {
            if(args[0].equalsIgnoreCase("kaufen")) {
                if(econ.hasAccount(p)) {
                    if(econ.has(p, 10000)) {
                        if(cfg.getString(p.getName() + ".")!= null) {
                            p.sendMessage("§7[§e???§7] §cDu besitzt bereits eine Lizenz");
                          
                        }else {
                            econ.withdrawPlayer(p, 10000);
                            //p.getServer().dispatchCommand(Bukkit.getConsoleSender(), "pex user "+p.getName()+" group set Händler");
                            p.sendMessage("§7[§e???§7] §aDu bist nun ein Händler!");
                            cfg.set(p.getName() + ".", name);
                            try {
                                cfg.save(file);
                            } catch (IOException e) {
                              
                                e.printStackTrace();
                            }
                        }
                    } else {
                        p.sendMessage("§7[§e???§7] §cDu hast nicht genügend Geld!");
                    }
                } else {
                    p.sendMessage("§7[§e???§7] §cDu hast keinen Account!");
                }
            } else {
                p.sendMessage("§7[§e???§7] §c/lizenz kaufen");
            }
        } else {
            p.sendMessage("§7[§e???§7] §c/lizenz kaufen");
        }
        return false;
    }

}
Es scheint jetzt zu gehen aber wenn man /Lizenz eingibt kommt ein Error wenn man es nochmal eingibt dann steht da das man schon eine hat.
Nur der Error soll weg!
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Kleiner Tipp zu deinen if-Bedingungen: Dein Code wird etwas unübersichtlich, wenn du so viele if-Verknüpfungen ineinander verschachtelst.
So kann man das hübscher machen:

Javascript:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String arg2, String[] args) {
        Player p = (Player)sender;
        String name = p.getName();
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch(IOException e){
                p.sendMessage("§cDatei konnte nicht erstellt werden!");
            }
        }
        if(args.length != 1) {
            p.sendMessage("§7[§e???§7] §c/lizenz kaufen");
            return true;
        }
        if(!args[0].equalsIgnoreCase("kaufen")) {
            p.sendMessage("§7[§e???§7] §c/lizenz kaufen");
            return true;
        }
        if(!econ.hasAccount(p)) {
            p.sendMessage("§7[§e???§7] §cDu hast keinen Account!");
            return true;
        }
        if(!econ.has(p, 10000)) {
            p.sendMessage("§7[§e???§7] §cDu hast nicht genügend Geld!");
            return true;
        }
        if(cfg.getString(p.getName() + ".")!= null) {
            p.sendMessage("§7[§e???§7] §cDu besitzt bereits eine Lizenz");
            return true;
        }
        econ.withdrawPlayer(p, 10000);
        //p.getServer().dispatchCommand(Bukkit.getConsoleSender(), "pex user "+p.getName()+" group set Händler");
        p.sendMessage("§7[§e???§7] §aDu bist nun ein Händler!");
        cfg.set(p.getName() + ".", name);
        try {
            cfg.save(file);
        } catch (IOException e) {
        
            e.printStackTrace();
        }
        return true;
    }

Ansonsten würde ich einfach eine Liste mit UUIDs in die Config speichern. Das bedeutet, dass du nachschaust, ob in der Liste die UUID des Spielers gespeichert ist.

Und wenn du ganz faul bist, arbeitest du einfach mit einer Permission über Pex (gebe dem Spieler eine Gruppe mit der Permission oder eine Permission "tradeplugin.trader". Dann musst du nicht eine extra Config anlegen ;)
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Es kommt diese Error Message:
Code:
[17:45:19 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'lizenz' in plugin Neromania_2 v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Bukkit-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:620) ~[craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1106) [craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:966) [craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:37) [craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:9) [craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit.jar:git-Bukkit-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_141]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_141]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:673) [craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) [craftbukkit.jar:git-Bukkit-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) [craftbukkit.jar:git-Bukkit-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_141]
Caused by: java.lang.IllegalArgumentException: Cannot set to an empty path
        at org.apache.commons.lang.Validate.notEmpty(Validate.java:321) ~[craftbukkit.jar:git-Bukkit-18fbb24]
        at org.bukkit.configuration.MemorySection.set(MemorySection.java:163) ~[craftbukkit.jar:git-Bukkit-18fbb24]
        at org.bukkit.configuration.MemorySection.set(MemorySection.java:193) ~[craftbukkit.jar:git-Bukkit-18fbb24]
        at de.axt.commands.CMDLIZENZ.onCommand(CMDLIZENZ.java:59) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-18fbb24]
        ... 15 more
Es steht du bist Händler und eine Error Message. Beim erneuten eingeben kommt Du besitzt bereits eine Lizenz. Bei anderen Spielern geht es auch nur die Error Message stört ich habe return true nur wie gesagt es kommt das selbe.
Und nach einem Reload ist es auch weg was eigentlich nicht sein sollte.
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
cfg.set(p.getName() + ".", name);
Das verursacht dein Problem: Du benutzt den YML-Pfad "name." - hinter dem "." muss noch etwas kommen.

Ersetze die Zeile durch cfg.set(p.getName() + ".lizenz", name);, dann könnte es gehen. Ich für meinen Teil würde allerdings eher eine Liste benutzen (s.o.)
 
Oben