Save & Load Inventory (Hashmap)

Discussion in 'Plugin Development' started by re4ly, Jul 2, 2013.

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

    re4ly

    Code:java
    1. @Override
    2. public void onDisable() {
    3. for (Player p : Bukkit.getServer().getOnlinePlayers()) {
    4. String name = p.getName();
    5. if (pArmor.containsKey(name)) {
    6. getConfig().set(name + ".pArmor", pArmor.get(name));
    7. }
    8. if (pInventory.containsKey(p.getName())) {
    9. getConfig().set(name + ".pInventory", pInventory.get(name));
    10. }
    11. }
    12. saveConfig();
    13. }

    Code:java
    1. private void loadconfig() {
    2. for (String playername : getConfig().getKeys(false)) {
    3. ItemStack[] pA = (ItemStack[]) getConfig().get(playername + ".pArmor");
    4. ItemStack[] pI = (ItemStack[]) getConfig().get(playername + ".pInventory");
    5.  
    6. pInventory.put(playername, pI);
    7. pArmor.put(playername, pA);
    8.  
    9. for(String key : getConfig().getKeys(false)){
    10. getConfig().set(key,null);
    11. }
    12. saveConfig();
    13.  
    14.  
    15. }
    16. }


    Error Message: java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Lorg.bukkit.inventory.ItemStack;
     
  2. Offline

    Vandrake

    Code:java
    1. Code From Someone(Can't remmeber who):
    2.  
    3. public class InventoryStringDeSerializer {
    4. public static String InventoryToString (Inventory invInventory)
    5. {
    6. String serialization = invInventory.getSize() + ";";
    7. for (int i = 0; i < invInventory.getSize(); i++)
    8. {
    9. ItemStack is = invInventory.getItem(i);
    10. if (is != null)
    11. {
    12. String serializedItemStack = new String();
    13.  
    14. String isType = String.valueOf(is.getType().getId());
    15. serializedItemStack += "t@" + isType;
    16.  
    17. if (is.getDurability() != 0)
    18. {
    19. String isDurability = String.valueOf(is.getDurability());
    20. serializedItemStack += ":d@" + isDurability;
    21. }
    22.  
    23. if (is.getAmount() != 1)
    24. {
    25. String isAmount = String.valueOf(is.getAmount());
    26. serializedItemStack += ":a@" + isAmount;
    27. }
    28.  
    29. Map<Enchantment,Integer> isEnch = is.getEnchantments();
    30. if (isEnch.size() > 0)
    31. {
    32. for (Entry<Enchantment,Integer> ench : isEnch.entrySet())
    33. {
    34. serializedItemStack += ":e@" + ench.getKey().getId() + "@" + ench.getValue();
    35. }
    36. }
    37.  
    38. serialization += i + "#" + serializedItemStack + ";";
    39. }
    40. }
    41. return serialization;
    42. }
    43.  
    44. public static Inventory StringToInventory (String invString)
    45. {
    46. String[] serializedBlocks = invString.split(";");
    47. String invInfo = serializedBlocks[0];
    48. Inventory deserializedInventory = Bukkit.getServer().createInventory(null, Integer.valueOf(invInfo));
    49.  
    50. for (int i = 1; i < serializedBlocks.length; i++)
    51. {
    52. String[] serializedBlock = serializedBlocks[I].split("#");[/I]
    53. [I] int stackPosition = Integer.valueOf(serializedBlock[0]);[/I]
    54.  
    55. [I] if (stackPosition >= deserializedInventory.getSize())[/I]
    56. [I] {[/I]
    57. [I] continue;[/I]
    58. [I] }[/I]
    59.  
    60. [I] ItemStack is = null;[/I]
    61. [I] Boolean createdItemStack = false;[/I]
    62.  
    63. [I] String[] serializedItemStack = serializedBlock[1].split(":");[/I]
    64. [I] for (String itemInfo : serializedItemStack)[/I]
    65. [I] {[/I]
    66. [I] String[] itemAttribute = itemInfo.split("@");[/I]
    67. [I] if (itemAttribute[0].equals("t"))[/I]
    68. [I] {[/I]
    69. [I] is = new ItemStack(Material.getMaterial(Integer.valueOf(itemAttribute[1])));[/I]
    70. [I] createdItemStack = true;[/I]
    71. [I] }[/I]
    72. [I] else if (itemAttribute[0].equals("d") && createdItemStack)[/I]
    73. [I] {[/I]
    74. [I] is.setDurability(Short.valueOf(itemAttribute[1]));[/I]
    75. [I] }[/I]
    76. [I] else if (itemAttribute[0].equals("a") && createdItemStack)[/I]
    77. [I] {[/I]
    78. [I] is.setAmount(Integer.valueOf(itemAttribute[1]));[/I]
    79. [I] }[/I]
    80. [I] else if (itemAttribute[0].equals("e") && createdItemStack)[/I]
    81. [I] {[/I]
    82. [I] is.addEnchantment(Enchantment.getById(Integer.valueOf(itemAttribute[1])), Integer.valueOf(itemAttribute[2]));[/I]
    83. [I] }[/I]
    84. [I] }[/I]
    85. [I] deserializedInventory.setItem(stackPosition, is);[/I]
    86. [I] }[/I]
    87.  
    88. [I] return deserializedInventory;[/I]
    89. [I] }[/I]
    90. [I]}[/I]
     
    re4ly likes this.
  3. Offline

    re4ly

    Vandrake
    serializedBlocks.split("#"); -> Cannot invoke split(String) on the array type String[]
    ...ItemStack(Material.getMaterial(Integer.valueOf... -> The method getMaterial(Integer) is undefined for the type Material

    with what for a invstring can i get the inventory pack? playername ?
     
  4. Offline

    Vandrake

    Saving iNventory:
    Use
    InventoryToString
    Loading inventory:
    Use
    StringToInventory
     
  5. Offline

    re4ly

    Vandrake
    StringToInventory(string); -> what for a string?
     
  6. Offline

    Vandrake

    lol you want me to code it for you? Jeez xD


    just do something like
    InventoryToString(player.getInventory()) <<< save this string to a file or a hashmap,

    then

    load it from
    String gottenfromfile = config.getString("whatever");
    player.getInventory().setContents(StringToInventory(gottefromfile)); or something.

    maybe you'll even have to iterate through the inventory and add it to the player 1 by 1.

    Good luck
     
    re4ly likes this.
  7. Offline

    re4ly

    ahh i got it wrong until now. Thanks!
     
Thread Status:
Not open for further replies.

Share This Page