Solved Saving blockstates to hashmap error

Discussion in 'Plugin Development' started by slater96, Aug 5, 2013.

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

    slater96

    Code:
        public Map<String, List<BlockState>> savedBlocks = new HashMap<String, List<BlockState>>();
    I'm saving blockstates to that hashmap above but I get this error.
    BlockState cannot be cast to java.util.List

    Code:
    Code:
    @SuppressWarnings("unchecked")
        @EventHandler
        public void blockPlace(BlockPlaceEvent event) {
            Player p = event.getPlayer();
            List<BlockState> b = (List<BlockState>) event.getBlockReplacedState();
            if (plugin.skyblock.containsKey(p.getName())) {
                String arena = plugin.skyblock.get(p.getName());
                plugin.savedBlocks.put(arena, b);
            }
        }
       
        @SuppressWarnings("unchecked")
        @EventHandler
        public void blockBreak(BlockBreakEvent event) {
            Player p = event.getPlayer();
            List<BlockState> b = (List<BlockState>) event.getBlock().getState();
            if (plugin.skyblock.containsKey(p.getName())) {
                String arena = plugin.skyblock.get(p.getName());
                plugin.savedBlocks.put(arena, b);
            }
        }
     
  2. Offline

    chasechocolate

    Change the b variable to BlockState and when you put it in your HashMap, use map.get(arena).add(b).
     
  3. Offline

    slater96


    Code:
    @EventHandler
        public void blockPlace(BlockPlaceEvent event) {
            Player p = event.getPlayer();
            BlockState b = event.getBlockReplacedState();
            if (plugin.skyblock.containsKey(p.getName())) {
                String arena = plugin.skyblock.get(p.getName());
                plugin.savedBlocks.get(arena).add(b);
            }
        }
    I get a NullPointerException on plugin.savedBlocks.get(arena).add(b);
     
  4. Offline

    chasechocolate

    slater96 if the HashMap doesn't contain the arena String key, use map.put(arena, new ArrayList<BlockState>). Then add the BlockState to the list.
     
  5. Offline

    slater96

    Code:
    @EventHandler
        public void blockPlace(BlockPlaceEvent event) {
            Player p = event.getPlayer();
            BlockState b = event.getBlockReplacedState();
            if (plugin.skyblock.containsKey(p.getName())) {
                String arena = plugin.skyblock.get(p.getName());
                plugin.savedBlocks.put(arena, new ArrayList<BlockState>());
                plugin.savedBlocks.get(arena).add(b);
            }
        }
    It only seems to save one block. Thanks for your help so far though.
     
  6. You should only add a new ArrayList if there is no ArrayList for the arena already. Check if savedBlcoks containsKey arena and only add the list if the key isn't already added.
     
    slater96 likes this.
Thread Status:
Not open for further replies.

Share This Page