Config auslesen?

Dieses Thema im Forum "Programmierung" wurde erstellt von sacha220899, 20. April 2014.

  1. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Hallo,
    Ich wollte mal fragen wie ich das mache, meine Config auszulesen.
    Und zwar soll man in der Config entweder true oder false hin schreiben. Dann soll das Plugin schauen, ob da true oder false steht, und wenn true da steht, soll was ausgeführt werden, anders was anderes...
    LG Sacha
     
    #1
  2. ZermenoHD
    Offline

    ZermenoHD

    Registriert seit:
    8. April 2014
    Beiträge:
    29
    Eine Methode werde ich dir mal zeigen:
    Erst einmal musst du sagen was du für ein Configfile willst:
    Code (Text):
    1.  
    2. File file = new File("plugins/<Pluginname>/<Configname>.yml");
    3. Fileconfiguaration cfg = Yamlconfiguration.loadconfiguration(file);
    4.  
    Und dann das auslesen:
    Code (Text):
    1.  
    2. Boolean auslesen = false;
    3. if(cfg.isSet("TrueOrFalse") {
    4.     auslesen = cfg.getBoolean("TrueOrFalse");
    5. }
    6.  
     
    #2
  3. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178

    Ich weiß jetzt nicht genau was ich damit anfangen soll.
    Die Config habe ich schon erstellt etc. Ich möchte nur wissen, wie ich das mache, um zu checken, ob in einer bestimmten Zeile true oder false steht. Also mit if (this.getConfig().getString("Fragen.1.true/false").equalsIgnoreCase("true"))
    Dann kommt aber einer Fehlermeldung bei getConfig...
     
    #3
  4. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Das TrueOrFalse wird dann in deinem Beispiel zu Frage.1

    Also :
    Code (Text):
    1.  
    2. Boolean auslesen = false;
    3. if(cfg.isSet("Frage.1") {
    4.     auslesen = cfg.getBoolean("Frage.1");
    5. }
    6.  
     
    #4
  5. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Das ist nicht was ich meine...
    Also das ganze muss schon so sein: if (this.getConfig().getString("Fragen.1.answer").equalsIgnoreCase("true")
    Aber da ich das ganze in einem Scheduler habe, geht es nicht. Wie mach ich das dann anders?
     
    #5
  6. ZermenoHD
    Offline

    ZermenoHD

    Registriert seit:
    8. April 2014
    Beiträge:
    29
    Schreib uns doch mal genauer was du nun meinst. Immerhin ist es ja nicht allzuschwer einen Wert aus einer Config zu holen. Nur müssen wir wissen, was du genau von uns wissen möchtest.
     
    #6
  7. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Wie gesagt möchte ich mit
    if (this.getConfig().getString("Fragen.1.answer").equ alsIgnoreCase("true") {
    und
    if (this.getConfig().getString("Fragen.1.answer").equ alsIgnoreCase("false") {
    schauen, ob jetzt bei Fragen.1.answer in der Config true oder false steht.

    Wenn dann dort true steht, soll zb das hier ausgeführt werden: Bukkit.getServer().BroadcastMessage("Die Frage war RICHTIG");
    und wenn dort false steht, kommt: Bukkit.getServer().BroadcastMessage("Die Frage war FALSCH");

    Aber das ganze geht so nicht, da ich das this.getConfig in einem Scheduler stehen habe, da ich das ganze erst nach 30 Sekunden ausgeben möchte. Jetzt ist meine Frage wie ich das ganze anders machen kann, so dass keine Fehlermeldung kommt.
    Ich hoffe das war ausführlich genug ;)
     
    #7
  8. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Wenn du nur die config.yml abrufen willst dann sollte das in deine Main Class im onEnable() :
    Code (Text):
    1.  
    2. private Configuration _conf;´
    3.  
    4. public onEnable() {
    5.   _conf = this.getConfig();
    6.   if(!this.getDataFolder().exists()) {
    7.     this.getDataFolder().mkdir();
    8.     configuration.options().copyDefaults(true);
    9.   }
    10.   this.saveConfig();
    11. }
    12.  
    So in etwa halt ;-)
     
    #8
  9. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Sry dass ich das jetzt schreibe, aber kannst du nicht lesen?
    Ich möchte schauen, ob bei fragen.1.answer true oder false steht.
    NIX ANDERES!
     
    #9
  10. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Motz hier mal nicht herum. Schliesslich ist es doch so schon richtig wie du es gemacht hast. nimm statt getString() einfach getBoolean()

    Undankbar wenn es schon nicht ordentlich erklären kann was genau du willst.

    P.S. Doppelpostings sind meines Wissens nach nicht gestattet.
    P.S.S. Verwende mal den Code BBCode.

    Ist True :
    Code (Text):
    1. if (this.getConfig().getBoolean("Fragen.1.answer")) { }
    Ist False :
    Code (Text):
    1. if (!this.getConfig().getBoolean("Fragen.1.answer")) { }
     
    #10
  11. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Wenn das aber nicht genau erklärt war...
    Trotzdem danke werde ich mal probieren :)

    EDIT:

    Klappt immer noch nicht... Immer noch der gleiche Fehler, und immer noch getConfig unterstrichen...
    Hier mal so, dass es auch jeder versteht:
    Code (Text):
    1. Bukkit.getScheduler().scheduleAsyncDelayedTask(this, new Runnable(){
    2.     @Override
    3.     public void run() {
    4.         //Countdown STOP
    5.     countdown = false;
    6.    
    7.         //Config --> answer
    8.     if (this.getConfig().getBoolean("Fragen.1.answer").equalsIgnoreCase("true")){
    9.         Bukkit.getServer().broadcastMessage(ChatColor.GREEN + "Die Aussage war " + ChatColor.BOLD + "RICHTIG");
    10.         for(Player all : Bukkit.getOnlinePlayers()){
    11.              all.playSound(all.getLocation(), Sound.ANVIL_LAND, 1.0F, 1.0F);
    12.          }
    13.     }
    14.                                    
    15.     else if (this.getConfig().getString("Fragen.1.answer").equalsIgnoreCase("false")) {
    16.             Bukkit.getServer().broadcastMessage(ChatColor.RED + "Die Aussage war " + ChatColor.BOLD + "FALSCH");
    17.             for(Player all : Bukkit.getOnlinePlayers()){
    18.                 all.playSound(all.getLocation(), Sound.ANVIL_LAND, 1.0F, 1.0F);
    19.             }
    20.         }
    21.     }
    22.     },20 * 30L);
     
    #11
  12. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni

    Du machst ja auch nicht das was ich geschrieben habe oO
     
    #12
  13. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Wenn ich von getString in getBollean mach, geht's immer noch nicht...
    Oder schreibt mir einfach mal als Code was du meinst, hab ja schon menen gepostet, musst dann ja nur was hinzufügen ^^
     
    #13
  14. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Code (Text):
    1. Bukkit.getScheduler().scheduleAsyncDelayedTask(this, new Runnable(){
    2.     @Override
    3.     public void run() {
    4.         //Countdown STOP
    5.     countdown = false;
    6.    
    7.         //Config --> answer
    8.     if (this.getConfig().getBoolean("Fragen.1.answer")){
    9.         Bukkit.getServer().broadcastMessage(ChatColor.GREEN + "Die Aussage war " + ChatColor.BOLD + "RICHTIG");
    10.         for(Player all : Bukkit.getOnlinePlayers()){
    11.              all.playSound(all.getLocation(), Sound.ANVIL_LAND, 1.0F, 1.0F);
    12.          }
    13.     } else {
    14.             Bukkit.getServer().broadcastMessage(ChatColor.RED + "Die Aussage war " + ChatColor.BOLD + "FALSCH");
    15.             for(Player all : Bukkit.getOnlinePlayers()){
    16.                 all.playSound(all.getLocation(), Sound.ANVIL_LAND, 1.0F, 1.0F);
    17.             }
    18.         }
    19.     }
    20.     },20 * 30L);
    grml
     
    #14
  15. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Wird das ganze dann immer noch nach erst 30 Sekunden ausgegeben?
     
    #15
  16. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Das ist doch dein Code Ausschnitt nicht meiner.

    Wird dann wohl.
     
    #16
  17. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Und geht immer noch nicht...
    Immer noch Fehler bei getConfig
     
    #17
  18. GermanUbuntu
    Offline

    GermanUbuntu

    Bohaaaa du musst erst ma lernen was int string boolean ist....
    Grundwissen der informatik.
    Aber schick uns denn fehler ma...

    EDIT
    in einem scheduler ist this nicht das bukki-plugin.
     
    #18
  19. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Hab ja erst angefangen und ist mein erstes Plugin. Probieren geht über Studieren ^^
    Wie muss ich das dann schreiben dass es das BukkitPlugin nimmt?
     
    #19
  20. ThunderFlo
    Offline

    ThunderFlo

    Registriert seit:
    22. September 2013
    Beiträge:
    53
    Sowas ist einer der unnötigsten Beiträge die es gibt das hilft 0 zur Lösung des Problems weiter. Lass sowas einfach bitte das kotzt mich langsam echt richtig an da du dass fast in jedem Thread rein schreibst. Jeder fängt mal von 0 an jeder braucht auch mal Hilfe...

    ====================================================================================================

    Also Sascha hier nun die Lösung deines Problems:

    Als erstes registrierst du ein paar Variablen. Diese würden dann so aussehen ;)

    Code (Text):
    1. public static File f = new File("mainFile");
    2. public static YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
    Nun zum onEnable...

    Code (Text):
    1. if (!this.getDataFolder().exists) {
    2. this.getDataFolder().mkdir; //Somit erstellst du dir den Ordner von deinem Plugin
    3. }
    Dannach schreibst du rein nach diesem Teil das hier:

    Code (Text):
    1. f = new File(this.getDataFolder(), "DeinConfigName.yml");
    2.  
    3. if (!f.exists()) {
    4.   f.createNewFile();
    5.  
    6.   config.createSection("Sektion1");
    7.   config.createSection("Sektion2");
    8.  
    9.   config.set("Sektion1", "Test1");
    10.   config.set("Sektion2", "Test2");
    11.  
    12.   config.save(f); //Hier wirds dir noch rot unterstrichen werden, da du hier noch was catchen musst. Schreibe das hier gerade alles ausm Kopf hoffe das es dennoch funktionieren wird...
    13. } else {
    14.   config.load(f); //Hier wirds dir auch noch rot unterstrichen werden...
    15. }
    16.  
    So nun zu dem teil wie du den noch was ausließt. Das geht eig. ganz einfach das schwierigste war eig. die Konfigurationsdatei zu erstellen. Du schreibst nun einfach den Klassen namen von deiner Hauptklasse in eine andere. Sagen wir jetzt der Name von der Hauptklasse wäre Main dann schreibst du falls du in einer anderen Klasse die Datei auslesen willst zb. if (Main.config.getString("Sektion1").equalsIgnoreCase("true")) {
    p.sendMessage("Hallo);
    }

    Es kommt halt auch drauf an was du dort stehen hast. Wenn es nun ein Int ist geht das natürlich nicht dann musst du getInt machen etc. Ich denke aber mal das du dir den Rest von selber erklären kannst ;)
     
    #20