Saving ArrayList's

Discussion in 'Plugin Development' started by jimbo8, Nov 23, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    jimbo8

    Hey!

    I've managed to create a plugin where you can protect areas and such, and then saving them to a arraylist.

    But now i'm wondering on how i could save the Arraylists? I'd like to have the arraylist saved in a config file, because then i can easily delete/modify it through there.

    Thanks in advance,

    -jimbo out.
     
  2. Offline

    Chinwe

    When you have your config.yml created (through saveDefaultConfig()), you can simply do this:
    Code:
    // save
    getConfig().set("path.to.list", list);
    saveConfig();
     
    // retrieve
    List<String> list = getConfig().getStringList("path.to.list");
     
  3. Offline

    1Rogue

    Keep in mind the generic type you pass to the arraylist has to be serializable / configurationserializable
     
  4. Offline

    jimbo8

    Chinwe

    Thanks for a so incredibly quick answer!

    I also can't load it for some reason(from the main config), i don't know why :p


    I get a stacktrace when i try to save it too, can't figure it out;

    Code:
    16:14:28 [SEVERE] Cannot load plugins\Mindwork\regionConfig.yml
    org.bukkit.configuration.InvalidConfigurationException: could not determine a co
    nstructor for the tag tag:yaml.org,2002:org.bukkit.Location
    in "<string>", line 3, column 5:
          - !!org.bukkit.Location
            ^
     
            at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlCo
    nfiguration.java:55)
            at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguratio
    n.java:138)
            at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguratio
    n.java:105)
            at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(Yam
    lConfiguration.java:175)
            at me.Thomas.mindwork.Mindwork.reloadregionConfig(Mindwork.java:269)
            at me.Thomas.mindwork.Mindwork.getregionConfig(Mindwork.java:260)
            at me.Thomas.mindwork.Mindwork.onEnable(Mindwork.java:240)
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:457)
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:381)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugin(CraftServer.jav
    a:282)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.
    java:264)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.reload(CraftServer.java:60
    9)
            at org.bukkit.Bukkit.reload(Bukkit.java:277)
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
    23)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    2)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchCommand(CraftServe
    r.java:523)
            at net.minecraft.server.v1_6_R3.PlayerConnection.handleCommand(PlayerCon
    nection.java:959)
            at net.minecraft.server.v1_6_R3.PlayerConnection.chat(PlayerConnection.j
    ava:877)
            at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java
    :834)
            at net.minecraft.server.v1_6_R3.Packet3Chat.handle(SourceFile:49)
            at net.minecraft.server.v1_6_R3.NetworkManager.b(NetworkManager.java:296
    )
            at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java
    :116)
            at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
            at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:3
    0)
            at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:5
    92)
            at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:2
    27)
            at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:4
    88)
            at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    :421)
            at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    83)
    Caused by: could not determine a constructor for the tag tag:yaml.org,2002:org.b
    ukkit.Location
    in "<string>", line 3, column 5:
          - !!org.bukkit.Location
            ^
     
            at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructUndefined.con
    struct(SafeConstructor.java:475)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseCo
    nstructor.java:183)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructSequenceStep2
    (BaseConstructor.java:277)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructSequence(Base
    Constructor.java:248)
            at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlSeq.const
    ruct(SafeConstructor.java:440)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseCo
    nstructor.java:183)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndSte
    p(BaseConstructor.java:326)
            at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndSte
    p(SafeConstructor.java:143)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseC
    onstructor.java:307)
            at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.const
    ruct(SafeConstructor.java:459)
            at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.c
    onstruct(YamlConstructor.java:26)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseCo
    nstructor.java:183)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndSte
    p(BaseConstructor.java:326)
            at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndSte
    p(SafeConstructor.java:143)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseC
    onstructor.java:307)
            at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.const
    ruct(SafeConstructor.java:459)
            at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.c
    onstruct(YamlConstructor.java:26)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseCo
    nstructor.java:183)
            at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(Base
    Constructor.java:142)
            at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseCons
    tructor.java:128)
            at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480)
            at org.yaml.snakeyaml.Yaml.load(Yaml.java:399)
            at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlCo
    nfiguration.java:53)
            ... 29 more
    It's pointing to this area;

    Code:java
    1. private FileConfiguration getregionConfig() {
    2. if (regionConfig == null) {
    3. reloadregionConfig();
    4. }
    5. return regionConfig;
    6. }
    7. public void reloadregionConfig() {
    8. if (regionConfigFile == null) {
    9. regionConfigFile = new File(getDataFolder(),
    10. "regionConfig.yml");
    11. }
    12. regionConfig = YamlConfiguration.loadConfiguration(regionConfigFile);
    13.  
    14. InputStream defregionConfig = this
    15. .getResource("regionConfig.yml");
    16. if (defregionConfig != null) {
    17. YamlConfiguration defConfig = YamlConfiguration
    18. .loadConfiguration(defregionConfig);
    19. regionConfig.setDefaults(defConfig);
    20. }
    21. }
    22.  
    23.  
    24.  
    25. public FileConfiguration saveregionConfig() {
    26. if (regionConfig == null || regionConfigFile == null) {
    27. return regionConfig;
    28. }
    29. try {
    30. getregionConfig().save(regionConfigFile);
    31. } catch (IOException ex) {
    32. getLogger().log(Level.SEVERE,
    33. "Kunne ikke lagre koordinater til " + regionConfigFile, ex);
    34. }
    35. return null;
    36. }
    37.  
    38.  

    Line 269:
    Code:java
    1. regionConfig = YamlConfiguration.loadConfiguration(regionConfigFile);
    2.  

    Line 260:
    Code:java
    1. reloadregionConfig();
    2.  

    Line 240(in onEnable):
    Code:java
    1. getregionConfig().options().copyDefaults(true);
    2.  

    Thanks!
     
  5. Offline

    Chinwe

    Does your List contain Locations? Like 1Rogue said, the contents have to be serializable, which Locations are not: you could convert them to a String (x,y,z,worldname) and save that, or make your own SerializableLocation object :)
     
  6. Offline

    jimbo8

    Yeah, my ArrayList does contain Locations. I haven't touched Serializable objects and such before, so i have no idea what to do with that/how to make one :p

    How can i convert them to a String? I might sound like a idiot, but i think i'm just dumb today :p Some days, i'm like, "How do i make a command?!" *thinking for hours* "Stupid me! I've done this tons of times"

    Chinwe
     
  7. Offline

    Chinwe

    You would just need a simple method that creates a string from location.getWorld().getName() + location.getBlockX() + etc...

    Ie, this :)
     
  8. Offline

    jimbo8

    Why do i need all of this at all?

    It did save in the default config, or do you mean that i need to serialize it to load it?
    Chinwe

    Thanks :)

    [EDIT]

    I think i understand what you want with the serializing, if i understood it right, i have already done this?

    Code:java
    1. for (int z = miz; z <= maz; z++) {
    2. Location location = new Location(player.getWorld(), x, y, z);
    3. plugin.protectedBlocks.add(location);
    4. blockCounter++;
    5. }


    A small little shameless bump :>

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
  9. Offline

    Chinwe

    What I mean is you reduce all Locations to Strings, which you can then save in the config, ie:
    Code:
    List<Location> originalList = //blahblah
    List<String> newList = new ArrayList<String>();
     
    // convert them all
    for (Location l : originalList)
        newList.add(packageLocation(l));
     
    // save them
    config.set("path.to.list", newList);
     
    // loading from config
    originalList.clear();
    newList = config.getStringList("path.to.list");
     
    // convert
    for (String s : newList)
        originalList.add(unpackageLocation(s));
     
     
     
    
     
Thread Status:
Not open for further replies.

Share This Page