Discord

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

Config

WlanGehtNicht

Kuhfänger
Osterei Experte
Mitglied seit
30 Mai 2017
Beiträge
84
Hallo,
wenn ich den Command /sethouse name Test eingebe, dann wird Test in die Config geschrieben.
Wenn ich z.B. noch /sethouse name Hallo eingebe, dann überschreibt Hallo Test in der Config. Kann mir da bitte jemand weiterhelfen?

Code:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        
        if(sender instanceof Player) {
            Player p = (Player) sender;
            
            if(args.length > 0) {
                if(args[0].equalsIgnoreCase("name")) {
                    
                    Server.createHouse.add(p);
                    String name = args[1];
                    if(!(name.equals(Server.housecfg.get("House")))) {
                        Server.housecfg.set("House", name);
                        
                        try {
                            Server.housecfg.save(Server.housefile);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        
                        p.sendMessage(Server.prefix + "Du hast erfolgreich den Namen gesetzt");
                        p.sendMessage(Server.prefix + "Bitte setze die Punkte: /sethouse location " + name);
                    } else {
                        p.sendMessage(Server.prefix + "Das Haus " + name + " gibt es schon");
                    }
                    
                } else if(args[0].equalsIgnoreCase("location")) {
                    String name = args[1];
                    if(name.equals(Server.housecfg.get("House"))) {
                        SetHouseInventar.run(p);
                    } else {
                        p.sendMessage(Server.prefix + "Das Haus gibt es noch nicht.");
                        p.sendMessage(Server.prefix + "Erstelle ein Haus mit /sethouse name [Name]");
                    }
                }
            } else {
                p.sendMessage(Server.prefix + "Verwendung:");
                p.sendMessage(Server.prefix + "/sethouse name [Name] §cErstellt ein Haus");
                p.sendMessage(Server.prefix + "/sethouse location [Name] §cÄndert die Location Punkte");
                p.sendMessage(Server.prefix + "/sethouse price [Name] [Preis] §cSetze den Preis");
                p.sendMessage(Server.prefix + "/sethouse [Name] finish §cSetze das Haus fertig");
            }
        }
        
        return true;
    }

}
Danke
 

petomka

Redstoneengineer
Osterei Experte
Mitglied seit
8 Oktober 2012
Beiträge
38
Alter
20
Hallo,

du speicherst deine Werte unter dem falschen Pfad ab, bzw. speicherst du jedes Mal unter dem gleichen Pfad einen neuen Wert ab:
Server.housecfg.set("House", name) speichert nämlich genau unter dem Schlüssel "House" den Wert in name ab. Das sieht dann folgendermaßen aus, wenn z.B. name = "Test":
YAML:
House: 'Test'
Nach dem zweiten Eingeben des Befehls schaut deine Datei dann aber (logischerweise) so aus:
YAML:
House: 'Hallo'
Da ich nicht genau weiß, ob du einfach nur die Namen der Häuser speichern möchtest, oder noch mehr, weiß ich nicht, ob für dich dort eine einfach Stringliste reicht oder ob du eventuell ein komplexeres Objekt dort abspeichern könntest.

Nichtsdestotrotz kannst du dich ja mal hier umsehen: https://bukkit.gamepedia.com/Configuration_API_Reference
Wenn du ein komplexeres Objekt abspeichern möchtest, kannst du mal einen Blick auf das Interface ConfigurationSerializable werfen.

Gruß,
petomka
 

WlanGehtNicht

Kuhfänger
Osterei Experte
Mitglied seit
30 Mai 2017
Beiträge
84
Habe es noch nicht wirklich hinbekommen.
Währe nett, wenn jemand mir nochmal hilft.
Danke
 

Taminoful

Redstoneengineer
Mitglied seit
3 August 2012
Beiträge
48
Alter
23
Minecraft
Taminoful

Taminoful

Redstoneengineer
Mitglied seit
3 August 2012
Beiträge
48
Alter
23
Minecraft
Taminoful
Was brauchst du noch für Informationen?
Naja, ne anständige Problembeschreibung halt.
Was hast du seit @petomkas Kommentar an deinem Code verändert? Wo hängst du derzeit fest, weiterhin das gleiche Problem oder ein anderes? Wie hast du bereits versucht das auftretende Problem zu lösen und wie bist du dabei vorgegangen (Konkrete Lösungsansätze und Umsetzungen), hast du dir bereits einmal das erwähnte Interface angesehen oder nicht? Etc.
 

WlanGehtNicht

Kuhfänger
Osterei Experte
Mitglied seit
30 Mai 2017
Beiträge
84
Ich habe mir die Seiten schon angesehen, aber es bringt mir nichts, da nachdem ich die Namen abgespeichert habe, noch mehr Sachen abgespeichert werden sollen.
Wenn ich den Command /sethouse name Test eingebe, dann wird Test in die Config gespeichert. Wenn ich z.B. /sethouse name Hallo eingebe, dann überschreibt Hallo Test in der Config. Das bekomme ich nicht hin.
 

Taminoful

Redstoneengineer
Mitglied seit
3 August 2012
Beiträge
48
Alter
23
Minecraft
Taminoful
Wenn ich den Command /sethouse name Test eingebe, dann wird Test in die Config gespeichert. Wenn ich z.B. /sethouse name Hallo eingebe, dann überschreibt Hallo Test in der Config. Das bekomme ich nicht hin.
du speicherst deine Werte unter dem falschen Pfad ab, bzw. speicherst du jedes Mal unter dem gleichen Pfad einen neuen Wert ab
Server.housecfg.set("House", name) speichert nämlich genau unter dem Schlüssel "House" den Wert in name ab. Das sieht dann folgendermaßen aus, wenn z.B. name = "Test":
Das löst dein Problem bereits. Du solltest Beiträge aufmerksam lesen. Was du tun musst, ist den Pfad anpassen in dem dein Wert gespeichert wird. Bleibt dieser der gleiche, wird dieser natürlich überschrieben, wie soll das auch sonst funktionieren?
Vermutlich, basierend auf den Hilfeausgabe, wäre eine Konfiguration in einem Schema wie diesem sinnvoller.
Auch hier bietet sich das oben verlinkte Tutorial von SirYwell an, welches auch beschreibt, wie man Objekte (Java Klassen) in einer YAML Konfiguration abbilden (serialisieren/deserialisieren) kann, dies ist für einen objektorientierten Aufbau äußerst hilfreich.

Configuration Schema Example:
houses:
  key-input-from-user-executing-the-sethouse-command:
    location: # Some values
    price: # Some price
  other-key-input-from-a-user:
    location: # another location
    price: # another price
  # many, many more houses.
 

WlanGehtNicht

Kuhfänger
Osterei Experte
Mitglied seit
30 Mai 2017
Beiträge
84
Ich habe das jetzt so

Code:
public class SetHouseCommand implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        
        if(sender instanceof Player) {
            Player p = (Player) sender;
            
            if(p.hasPermission("createhouse.set")) {
                if(args.length > 0) {
                    if(args[0].equalsIgnoreCase("name")) {
                        
                        Server.createHouse.add(p);
                        String name = args[1];
                        if(!(name.equals(Server.housecfg.get("House")))) {
                            Server.housecfg.set("Hous", p.getUniqueId());
                            Server.housecfg.set("Hous." + p.getUniqueId() + ".Ersteller", p.getName());
                            Server.housecfg.set("Hous." + p.getUniqueId() + ".Ersteller." + p.getName() + ".Haus.Name", name);
                            
                            try {
                                Server.housecfg.save(Server.housefile);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            
                            p.sendMessage(Server.prefix + "Du hast erfolgreich den Namen gesetzt");
                            p.sendMessage(Server.prefix + "Bitte setze die Punkte: /sethouse location " + name);
                        } else {
                            p.sendMessage(Server.prefix + "Das Haus " + name + " gibt es schon");
                        }
                        
                    } else if(args[0].equalsIgnoreCase("location")) {
                        String name = args[1];
                        if(name.equals(Server.housecfg.get("House"))) {
                            SetHouseInventar.run(p);
                        } else {
                            p.sendMessage(Server.prefix + "Das Haus gibt es noch nicht.");
                            p.sendMessage(Server.prefix + "Erstelle ein Haus mit /sethouse name [Name]");
                        }
                    }
                } else {
                    p.sendMessage(Server.prefix + "Verwendung:");
                    p.sendMessage(Server.prefix + "/sethouse name [Name] §cErstellt ein Haus");
                    p.sendMessage(Server.prefix + "/sethouse location [Name] §cÄndert die Location Punkte");
                    p.sendMessage(Server.prefix + "/sethouse price [Name] [Preis] §cSetze den Preis");
                    p.sendMessage(Server.prefix + "/sethouse [Name] finish §cSetze das Haus fertig");
                }
            }
        }
        
        return true;
    }

}
Das geht aber immernoch nicht. Ich habe das gleiche Problem, wie vorher. Die Häuser überschreiben sich.
 

Taminoful

Redstoneengineer
Mitglied seit
3 August 2012
Beiträge
48
Alter
23
Minecraft
Taminoful
Das geht aber immernoch nicht. Ich habe das gleiche Problem, wie vorher. Die Häuser überschreiben sich.
Weil du unsere Antworten nicht anständig liest. Irgendwann wird es auch mir zu doof mich andauernd zu wiederholen. Bei dir wird weiterhin alles unter einem Key gespeichert, in dem Fall jetzt "Hous", wenn du es nicht schaffst, den ersten Parameter, welcher sogar ein String ist, der set-Methode anzupassen kann ich dir auch nicht mehr weiterhelfen.
 

WlanGehtNicht

Kuhfänger
Osterei Experte
Mitglied seit
30 Mai 2017
Beiträge
84
Ich verstehe nicht so richtig, was du meinst mit, dass ich den ersten String anpassen muss. Du musst mir doch auch nicht helfen.
 

SirYwell

Braumeister
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
326
Alter
20
Minecraft
SirYwell
Die Zeilen 15-18 sind irgendwie merkwürdig, ich weiß nicht, ob du dir darüber im Klaren bist, was da passiert. Außerdem kann ich, wie bereits @petomka und @Taminoful erwähnt haben, dir ans Herz legen, die dafür gedachte Serialisierung von Bukkit zu verwenden. Mein Tutorial dazu hat Taminoful bereits verlinkt. Wenn du Fragen dazu hast, kannst du diese jederzeit gerne stellen. Die Werte alle einzeln zu setzen ist umständlich, fehleranfällig und verursacht unnötigen Code an Stellen, an denen Übersichtlichkeit sowieso schon schwer zu gewährleisten ist.

Auch für generelle Fragen bezüglich einer Strukturierung solcher Funktionalitäten stehen wir hier jederzeit offen.
 
Oben