有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Minecraft Java插件如何删除HashMap中存储的所有块

我试图存储游戏期间放置的所有块,然后当我运行resetblocks命令或游戏不再运行时,我存储在HashMap中的所有块都将被删除

这就是我储存积木的方式。我只是不知道如何循环通过HashMap并销毁每个块

public HashMap<Block, Location> BlockReset = new HashMap<>();
// WHEN PLACED BLOCK
public void onPlace(BlockPlaceEvent event) {
    Block block = event.getBlock();
    Location location = block.getLocation();

    if (gameRunning == true) {
        BlockReset.put(block, location);
    }
}

共 (2) 个答案

  1. # 1 楼答案

    您不需要HashMap来保存和销毁随后的块,因为位置很重要

    创建一个List<Location>并按如下方式执行:

    class Plugin {
    
        private List<Location> blocks = new ArrayList<>();
    
        public void onPlace(BlockPlaceEvent event) {
            Block block = event.getBlock();
            Location loc = block.getLocation();
    
            if (gameRunning == true) {
                if (!blocks.contains(loc))
                    blocks.add(loc);
            }
        }
    
        public void destroyPlacedBlocks() {
            for (Location loc : blocks) {
                loc.getWorld().getBlockAt(loc).setType(Material.AIR);
            }
        }
    }
    

    真诚地

  2. # 2 楼答案

    我对minecraft一无所知,我查看了javadoc关于块接口的内容,没有找到删除方法或类似的东西。我想你更清楚如何处理这件事。相反,我会帮你绘制地图:

    class Plugin {
        private Map<Block, Location> blocks = new HashMap<>();
    
        public void onPlace(BlockPlaceEvent event) {
            Block block = event.getBlock();
            Location location = block.getLocation();
            if (gameRunning == true) {
                blocks.put(block, location);
            }
        }
    
        public removeAllBlocks() {
            for(Map.Entry<Block, Location> entry : blocks.entrySet()) {
                Block block = entry.getKey();
                Location location entry.getValue();
                block.    // do what do you want with block and location
                location. // block.delete() or other minecraft things
            }
            blocks.clear(); //removes all entries from map, now map is clear;
    
        }
    
    
    }