ServerPlugin Location List via ConfigurationSerializable speichern

Dieses Thema im Forum "Programmierung" wurde erstellt von Summerfeeling, 24. November 2013.

  1. Summerfeeling
    Offline

    Summerfeeling

    Registriert seit:
    12. Dezember 2012
    Beiträge:
    2
    Hey,
    ich arbeite derzeit an einem Game Plugin, für meinen Freund.
    Nun ist meine Frage, wie kann ich über die ConfigurationSerializable eine List<Location> speichern, und laden?

    Mein derzeitiger Code ist:
    Code (Text):
    1.     package de.Summerfeeling.Wizardwars;
    2.  
    3.     import java.util.HashMap;
    4.     import java.util.List;
    5.     import java.util.Map;
    6.  
    7.     import org.bukkit.Location;
    8.     import org.bukkit.configuration.serialization.ConfigurationSerializable;
    9.  
    10.     public class Arena implements ConfigurationSerializable{
    11.  
    12.        private String name;
    13.        private String builder;
    14.        private String builderURL;
    15.        private List<Location> spawns;
    16.        
    17.        public Arena(String name, String builder, String builderURL, List<Location> spawns) {
    18.           this.name = name;
    19.           this.builder = builder;
    20.           this.builderURL = builderURL;
    21.           this.spawns = spawns;
    22.        }
    23.  
    24.        @Override
    25.        public Map<String, Object> serialize() {
    26.           Map<String, Object> o = new HashMap<String, Object>();
    27.           o.put("name", name);
    28.           o.put("builder", builder);
    29.           o.put("builderURL", builderURL);
    30.           return o;
    31.        }
    32.        
    33.     }
    34.  
     
    #1
  2. delta242
    Offline

    delta242

    Registriert seit:
    28. Mai 2012
    Beiträge:
    90
    Also so einfach kann man keine Liste abspeichern.
    Ich mach es immer so:
    Eine einzelne Location speicher ich mit den einzelnen relevanten Werten ab, also world, x, y, z und eventuell noch yaw und pitch.
    Wenn ich mehrere Locations speichern möchte, schau ich erst mal was mehr Sinn macht.
    1. Für jede Location eine eigene *.yml Datei erstellen und die Dateien durchnummerieren.
    2. Jede Location in einer Config unter einem eigenem Pfad abspeichern, also z.B. locations.loc1.x, locations.loc2.x,... usw.

    In deinem Fall würde ich es in etwa so machen:

    Code (Text):
    1.  
    2.        @Override
    3.        public Map<String, Object> serialize() {
    4.           Map<String, Object> o = new HashMap<String, Object>();
    5.           o.put("name", name);
    6.           o.put("builder", builder);
    7.           o.put("builderURL", builderURL);
    8.           int i = 0;
    9.           for (Location loc : spawns) {
    10.                 o.put("spawn." + i + ".world", loc.getWorld());
    11.                 o.put("spawn." + i + ".x", loc.getBlockX());
    12.                 // Hier dann alle anderen relevanten Werte...
    13.                 ++i;
    14.           }  
    15.           return o;
    16.        }
    Ist nicht getestet, kannst ja einfach mal ein wenig rumprobieren ;)
     
    #2