List - YML Problem

Dieses Thema im Forum "Programmierung" wurde erstellt von Galliar12, 19. Juli 2013.

  1. Galliar12
    Offline

    Galliar12

    Registriert seit:
    16. Juli 2011
    Beiträge:
    85
    Minecraft:
    Galliar12
    Hey Leute, habe ein kleines Problem:
    Wenn ich einen Command ausführe welcher die Location in eine LinkedList und in eine .yml Datei speichert.
    Das Problem: Er überschreibt alle alten Koordinaten mit den neuen + er erstellt einen neuen Eintrag mit den neuen Koords.

    setSpawner:
    Code (Text):
    1.  
    2.    private boolean setSpawner(Player p) {
    3.         World w = p.getWorld();
    4.         double x = p.getLocation().getBlockX();
    5.         double y = p.getLocation().getBlockY();
    6.         double z = p.getLocation().getBlockZ();
    7.         Location loc = new Location(w, x, y, z);
    8.         this.plugin.Spawnerlist.add(loc);
    9.          this.plugin.cfgspawner.set("Spawner", null);
    10.         for (int i = 0; i < this.plugin.Spawnerlist.size(); i++) {
    11.             String str = "Spawner." + i;
    12.             this.plugin.cfgspawner.set(str + ".world", loc.getWorld().getName());
    13.             this.plugin.cfgspawner.set(str + ".x", loc.getBlockX());
    14.             this.plugin.cfgspawner.set(str + ".y", loc.getBlockY());
    15.             this.plugin.cfgspawner.set(str + ".z", loc.getBlockZ());
    16.             try {
    17.                 this.plugin.cfgspawner.save(this.plugin.spawner);
    18.             } catch (IOException e) {
    19.                 e.printStackTrace();
    20.             }
    21.         }
    22.         return false;
    23.     }
    Hoffe irg.jmd könnte mich über den Fehler aufklären :)

    Grüße Galliar
     
    #1
  2. Chrisliebaer
    Online

    Chrisliebaer

    Code (Text):
    1. this.plugin.cfgspawner.save(this.plugin.spawner);
    Das ist eine extrem teuere Operation, da sie direkt auf die Festplatte geht. Du solltest es vermeiden, zu oft auf die Festplatte zu scheiben. Auf keinen Fall solltest du daher IN der Schleife immer wieder die Config speichern.

    Zu deiner eigentlichen Frage, kann ich allerdings nichts sagen. Poste doch mal bitte, wie die Config vorher und nacher aussieht. Außerdem wäre es schön, wenn du in die Schleife mal Logausgaben machen könntest, mit den Werten und wie sie gesetzt werden und diese dann hier posten.
     
    #2
  3. Galliar12
    Offline

    Galliar12

    Registriert seit:
    16. Juli 2011
    Beiträge:
    85
    Minecraft:
    Galliar12
    Config vorhger:
    Code (Text):
    1. Spawner:
    2.   '0':
    3.     world: world
    4.     x: 242
    5.     y: 204
    6.     z: 296
    Nacher:
    Code (Text):
    1. Spawner:
    2.   '0':
    3.     world: world
    4.     x: 237
    5.     y: 204
    6.     z: 280
    7.   '1':
    8.     world: world
    9.     x: 237
    10.     y: 204
    11.     z: 280
     
    #3
  4. games6471
    Online

    games6471

    Irgendwie macht die Schleife für mich nicht wirklich Sinn. Deine momentane Schleife holt sich die Anzahl der Einträge inder LinkedList und schreibt danach in die Datei jedes Mal die Koordinaten, jedoch immer wieder die selben. Schließlich hölt er sich auch gar nicht die anderen Daten aus der Liste, er holt sich jediglich die momentane Größe der Liste.

    Hier noch ein paar Kommentare
    Code (Text):
    1.     private boolean setSpawner(Player p) {
    2.         final World w = p.getWorld();
    3.  
    4.         final double x = p.getLocation().getBlockX();
    5.         final double y = p.getLocation().getBlockY();
    6.         final double z = p.getLocation().getBlockZ();
    7.  
    8.         final Location loc = new Location(w, x, y, z); //Wieso erstellst du dir noch ein Location-Objekt, wenn du du bereits eins hast?
    9.  
    10.         this.plugin.Spawnerlist.add(loc);
    11.         this.plugin.cfgspawner.set("Spawner", null);
    12.  
    13.         for (int i = 0; i < this.plugin.Spawnerlist.size(); i++) {
    14.             final String str = "Spawner." + i;
    15.  
    16.  
    17.             this.plugin.cfgspawner.set(str + ".world", loc.getWorld().getName());
    18.  
    19.             this.plugin.cfgspawner.set(str + ".x", loc.getBlockX()); //Hier kannst du auch auf die vorher gesicherten Variablen zugreifen.
    20.             this.plugin.cfgspawner.set(str + ".y", loc.getBlockY()); //Schließlich wurde an diesen nichts verändert.
    21.             this.plugin.cfgspawner.set(str + ".z", loc.getBlockZ());
    22.         }
    23.  
    24.         try {
    25.             this.plugin.cfgspawner.save(this.plugin.spawner);
    26.         } catch (IOException ex) {
    27.             Logger.getLogger(this.plugin.getName()).log(Level.WARNING
    28.                     , "Error while saving the spawners file. Please contact the plugin author of this plugin with the following error"
    29.                     , ex);
    30.         }
    31.  
    32.         return false;
    33.     }
     
    #4
  5. Galliar12
    Offline

    Galliar12

    Registriert seit:
    16. Juli 2011
    Beiträge:
    85
    Minecraft:
    Galliar12
    Ok, werde dass dann morgen früh umbauen ^^
    Würde dir ja gerne wieder einen Dia geben, darf aber nicht ._. ^^
     
    #5