Reading HashMap from config

Discussion in 'Plugin Development' started by YoFuzzy3, Dec 15, 2012.

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

    YoFuzzy3

    Well I wanted to try use HashMaps for the first time, so I thought I'd make a simple plugin that prevents the loss of items when dying. To prevent an inventory being cleared if a server restarted I need to save it to a config file. The problem is that I don't know how to read the HashMaps from the config file. I'm probably doing the whole thing wrong anyway.

    My class:
    Code:java
    1. package com.fuzzoland.KeepInventory;
    2.  
    3. import java.util.HashMap;
    4. import java.util.Map;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.EventHandler;
    9. import org.bukkit.event.Listener;
    10. import org.bukkit.event.entity.PlayerDeathEvent;
    11. import org.bukkit.event.player.PlayerRespawnEvent;
    12. import org.bukkit.inventory.ItemStack;
    13. import org.bukkit.plugin.java.JavaPlugin;
    14.  
    15. public class Main extends JavaPlugin implements Listener{
    16.  
    17. HashMap<String, ItemStack[]> inventories;
    18. HashMap<String, ItemStack> helmets;
    19. HashMap<String, ItemStack> chestplates;
    20. HashMap<String, ItemStack> leggings;
    21. HashMap<String, ItemStack> boots;
    22.  
    23. public void onEnable(){
    24. getConfig().options().copyDefaults(true);
    25. saveConfig();
    26.  
    27. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    28. }
    29.  
    30. public void onDisable(){
    31. saveConfig();
    32. }
    33.  
    34. @EventHandler
    35. public void onPlayerDeath(PlayerDeathEvent event){
    36. Player player = event.getEntity().getPlayer();
    37. if(player.hasPermission("KeepInventory.use")){
    38. inventories.put(event.getEntity().getName(), player.getInventory().getContents());
    39. helmets.put(event.getEntity().getName(), player.getInventory().getHelmet());
    40. chestplates.put(event.getEntity().getName(), player.getInventory().getChestplate());
    41. leggings.put(event.getEntity().getName(), player.getInventory().getLeggings());
    42. boots.put(event.getEntity().getName(), player.getInventory().getBoots());
    43. getConfig().createSection(player.getName(), inventories);
    44. getConfig().createSection(player.getName(), helmets);
    45. getConfig().createSection(player.getName(), chestplates);
    46. getConfig().createSection(player.getName(), leggings);
    47. getConfig().createSection(player.getName(), boots);
    48. saveConfig();
    49. event.getDrops().clear();
    50. event.setKeepLevel(true);
    51. event.setDroppedExp(0);
    52. }
    53. }
    54.  
    55. @EventHandler
    56. public void onPlayerRespawn(PlayerRespawnEvent event){
    57. if(getConfig().getConfigurationSection("inventories").getValues(false).containsKey(event.getPlayer().getName())){
    58. Player player = event.getPlayer();
    59. HashMap<String, ItemStack[]> invents = getConfig().getConfigurationSection("inventories").getValues(false); //Not sure how to get it to work properly.
    60. HashMap<String, ItemStack> helms = getConfig().getConfigurationSection("helmets").getValues(false); //Not sure how to get it to work properly.
    61. HashMap<String, ItemStack> plates = getConfig().getConfigurationSection("chestplates").getValues(false); //Not sure how to get it to work properly.
    62. HashMap<String, ItemStack> legs = getConfig().getConfigurationSection("leggings").getValues(false); //Not sure how to get it to work properly.
    63. HashMap<String, ItemStack> booties = getConfig().getConfigurationSection("boots").getValues(false); //Not sure how to get it to work properly.
    64. event.getPlayer().getInventory().setContents((ItemStack[])invents.remove(event.getPlayer().getName()));
    65. event.getPlayer().getInventory().setHelmet((ItemStack)helms.remove(event.getPlayer().getName()));
    66. event.getPlayer().getInventory().setHelmet((ItemStack)plates.remove(event.getPlayer().getName()));
    67. event.getPlayer().getInventory().setHelmet((ItemStack)legs.remove(event.getPlayer().getName()));
    68. event.getPlayer().getInventory().setHelmet((ItemStack)booties.remove(event.getPlayer().getName()));
    69. saveConfig();
    70. }
    71. }
    72. }
     
  2. Offline

    tommycake50

    you can do it like this,
    have a yaml section for the player,
    then for every item in his inventory save the id under slot number so it would look like this.
    playername:
    1: 250
    2: 12
    3: 15
    4: 48
    helmet: 56
    etc.
    then read the ints from it and set those slots to the item id aka the number next to the slots.
    this may just be a long way around it.
     
  3. Offline

    YoFuzzy3

    That would work but complication would increase with damage values and enchantments.
     
  4. Offline

    tommycake50

    yeah never thought of that.
     
  5. Offline

    fireblast709

    search for inventory saving, you would probably end up with a few good threads
     
Thread Status:
Not open for further replies.

Share This Page