Solved Saving and Retrieving Inventories

Discussion in 'Plugin Development' started by MaxFireIce, Nov 14, 2016.

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

    MaxFireIce

    Is there any way to save and retrieve a player's inventory? I have googled this extensively and nothing is working. I have saved the inventory to config like this:

    Code:
            String oldWorld = event.getFrom().getWorld().getName();
            String newWorld = event.getTo().getWorld().getName();
           
            // If player is telporting within the world, forget it
            if (oldWorld == newWorld) return;
           
            Player player = event.getPlayer();
            String playerName = player.getName();
            FileConfiguration config = Main.plugin.getConfig();
            ItemStack[] playerInvOld = player.getInventory().getContents();
           
            // save the old inventory of the player
                config.addDefault(playerName + ".Worlds." + oldWorld + ".Inventory", playerInvOld);
                Main.plugin.saveConfig();
               
            // if player dosent have a saved inventory for the old world, make a new one.
            if (!config.contains(playerName + ".Worlds." + newWorld + ".Inventory")){
                player.getInventory().clear();
                config.addDefault(playerName + ".Worlds." + newWorld + ".Inventory", playerInvOld);
                Main.plugin.saveConfig();
    Then I have tried to set the inventory in a few ways:

    Code:
                ArrayList<?> playerInvNewList = (ArrayList<?>) Main.plugin.getConfig().get(playerName + ".Worlds." + newWorld + ".Inventory");
                ItemStack air = new ItemStack(Material.AIR, 1);
                player.getInventory().clear();
                for (Object item : playerInvNewList){
                    if (item == null){
                        player.getInventory().addItem(air);
                    }
                    else {
                    player.getInventory().addItem((ItemStack) item);
                    }
    And i have tried just setting it to the saved inventory. I ALWAYS get the error of not being able to cast to ItemStack from ArrayList. Any ideas?
     
  2. Offline

    Lordloss

    I would suggest you to use <ItemStack> instead of <?> so you dont have to iterate over a list of objects. At which line it tells you youre casting from ArrayList? Btw, this doesnt seem to be your full code of loading inventories.
     
  3. Offline

    MaxFireIce

    @Lordloss
    Its most of it, i have others that do the same thing when a player joins, btw i tried that as well and the same thing showed up. Also, the error is here:
    Code:
                    else {
                    player.getInventory().addItem((ItemStack) item);
                    }
     
    Last edited: Nov 16, 2016
  4. Offline

    Lordloss

    I would check if item is instanceof ArrayList. If so, you have to figure out why. Please show us your config.
     
  5. Offline

    MaxFireIce

    @Lordloss
    Code:
    MaxFireIce:
      Worlds:
        CardBattles:
          Inventory:
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - null
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_CHESTPLATE
          - null
          - null
        Arcade:
          Inventory:
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_INGOT
            amount: 2
          - null
          - null
          - null
          - ==: org.bukkit.inventory.ItemStack
            type: GOLD_CHESTPLATE
          - null
          - null
    
    The worlds are the same because it still saved the inventories, it just didnt switch them.
    Working on it instance of thing.
     
  6. Offline

    MaxFireIce

    @Lordloss
    I got the instance and fixed it, thanks
     
Thread Status:
Not open for further replies.

Share This Page