当前位置: 首页 > 知识库问答 >
问题:

在CommandExecutor中使用HashMap

东郭子默
2023-03-14

我试图在我的插件上使用CommandExecutor中的HashMap,以便保存一些被更改的块的信息,然后撤消更改。但是,当我保存块类型和位置以便稍后用另一个命令进行更改时,hashmap是空的。这是我的代码:

public boolean onCommand(CommandSender sender, Command cmd, String s, String[] arg) {

    public Map<Location, Material> bloques = new HashMap<>() ;

    if (!(sender instanceof Player)) {
        sender.sendMessage(ChatColor.RED + "This command can only be executed by players.");
        return true ;
    }if (cmd.getName().equalsIgnoreCase("column")) {
        int x = player.getLocation().getBlockX() ;
        int y = player.getLocation().getBlockY() ;
        int z = player.getLocation().getBlockZ() ;
        for (int j=0 ; j<=2 ; j++) {
            for (int i = Integer.parseInt(arg[0]); i > 0; i--) {
                Material b = player.getWorld().getBlockAt(x+j-1, y + 2+ i, z).getType() ;
                bloques.put(player.getWorld().getBlockAt(x+j-1, y + 2+ i, z).getLocation(),b ) ;
                player.getWorld().getBlockAt(x+j-1, y + 2+ i, z).setType(Material.getMaterial(arg[1].toUpperCase()));

            }
        }
        return true ;
    }
    if (cmd.getName().equalsIgnoreCase("undo")){

        for (Location w: bloques.keySet()) {
            player.getWorld().getBlockAt(w).setType(bloques.get(w));
             player.sendMessage(bloques.get(w).toString());
        }
        return true ;
    }

    return true;
}

当执行命令“column”时,数据正在存储,但是如果您试图访问映射,它是空的。

共有1个答案

谷梁俊楚
2023-03-14

这是因为您在oncommand方法中声明了映射,所以每次输入该方法都会创建一个新的映射实例,该实例将为空。

要解决这个问题,只需将映射声明移到方法之外。

 类似资料:
  • 我一直试图获得一个简单的web操作来向API发出一个经过身份验证的get请求(我已经从示例代码中删除了实际的url和秘密)。 我已经在本地成功地运行了这一点,但是当我测试web动作时,它只是在记录“调用Axios”之后死亡。 它不会报告错误,我尝试实现一个承诺,认为线程在api响应之前就结束了,但没有效果。有什么线索吗?

  • 问题内容: 我想使用Android Studio使用Gradle构建工具开发应用程序。我无法在上插入存储库和库。我的文件如下: 如何在项目中添加OpenCV? 问题答案: 您可以在Android Studio中轻松完成此操作。 请按照以下步骤将Open CV作为库添加到您的项目中。 libraries在项目主目录下创建一个文件夹。例如,如果您的项目是OpenCVExamples,则将创建一个Ope

  • 我想使用Android Studio开发一个应用程序使用Gradle构建工具。我无法在上插入OpenCV repo和库。我的文件如下所示: 我如何在我的项目中添加OpenCV?

  • 问题内容: 我有一个简单的Entitly类,(和单独类中的字段)。然后,我使用Spring Data()访问数据库(MySql),使用常规ID,查询可以正常工作,无论是Spring生成的查询还是我自己编写的查询。与我没有设法创建正确的查询。我想做的是选择所有id(发生某些情况的EmbeddedId字段之一),这里有一些代码示例,也许有人会知道如何解决它。 实体类: EmbeddedId类: 和存储

  • 问题内容: 我正在研究控制建筑物的光和热的项目。后端(用Java编写)将在Mac Mini上运行,并且应该可以通过SOAP进行访问。 我希望将此项目的复杂性降至最低,因为我不希望每个使用它的人都必须设置应用程序服务器。所以到目前为止,我一直使用javax.xml.ws.Endpoint: 这样的效果出奇的好(嘿,您什么时候最后一次只用3行代码看到Java中的东西?),但是现在我正在寻找一种使用HT

  • 问题内容: 我想使用系统蜂鸣器(并且只有在没有蜂鸣器/无法访问蜂鸣器时才使用扬声器)生成具有特定频率和长度(针对不同的声音信号)的蜂鸣声。我知道可以通过使用ioctl来做到这一点,但这需要root访问权限,而这是我所不希望的。 我知道我可以只使用“ beep”命令,但这将是一个依赖关系,如果可能的话,不应使用它(根本没有外部依赖关系,只有基本的linux库和C)。 我目前拥有的是以下代码(但这需要