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

有没有办法在没有AsyncPlayerChatEvent的情况下捕获玩家聊天输入?

酆翔宇
2023-03-14

我再次编写另一个银行系统插件,但这次是使用ATM。我正在尝试弄清楚如何在单击该选项后获得玩家聊天输入,以防止单击100次以在银行帐户上存入50,000美元。

我正在用Paper-Spigot 1.14.4编写这个插件,我尝试了以下步骤:

  • AsyncPlayerChatEvent作为一个单独的类,仅当我向插件管理器注册事件时才激活:
Bukkit.getPluginManager().registerEvents(new ChatListener(), Main.getPlugin());
  • 使用 get 和 set-method创建一个私有的 AsyncPlayerChatEvent 变量 e,并在需要时在该方法中调用它。
String input = getChat().getMessage();

我当前的聊天监听器()方法:

public void chatListener(Inventory inv, Player pl) {
        pl.closeInventory();
        pl.sendMessage("§6Please enter your amount:");
        String input = getChat().getMessage();
        if(input.matches("[0-9]+")) {
            pl.openInventory(inv);
            inv.setItem(0, new ItemStack(Material.AIR));
            inv.setItem(0, CustomHeads.customHead(CustomHeads.BITCOIN,
                    input));
        } else {
            pl.sendMessage("§cPlease enter only numeric characters!");
        }
    }

AsyncPlayerChat事件获取方法:

public AsyncPlayerChatEvent getChat() {
        return chat;
    }

我希望在消息“请输入您的金额:”出现后,玩家的消息保存在< code>input变量中。

当我创建<code>System.out时。println(input),控制台不显示任何内容,既不显示错误,也不显示任何警告。

共有1个答案

凤自珍
2023-03-14

创建一个< code > AsyncPlayerChatEvent 和一个< code >公共静态ArrayList。

exampleschatevent . class

public static ArrayList<Player> waitingForAmountPlayers = new ArrayList<>();

public void onChat(AsyncPlayerChatEvent e) {

 Player p = e.getPlayer();

 if (waitingForAmountPlayers.indexOf(p) != -1) {

  //
  // YOUR CODE
  //

  waitingForAmountPlayers.remove(p);

 }

}

当你想在聊天中输入玩家数量时,不要忘记将玩家添加到waitingForAmountPlayersExampleChatEvent.waitingForAmountPlayers.add(p);)。

 类似资料:
  • 所以我想要一个“Void Repository”,通过它可以访问不一定在实体上操作的存储过程。 但这当然不起作用,因为期望是一个实体。 有没有一种方法可以使用注释而无需创建虚拟实体,或者我是否坚持使用使用通过准备好的语句进行查询的已实现类? 因为老实说,这很难看:

  • 问题内容: 我看到了一些这样的代码: 我以为应该有一个? 为什么这段代码这样做呢? 问题答案: 如果您希望当前执行的方法仍引发异常,同时允许适当地清理资源,则这很有用。下面是处理调用方法中的异常的具体示例。

  • 问题内容: 我正在开发一个简单的Webapp,它将域模型公开为RESTful资源。我打算将JPA2(Hibernate)与SpringMVC REST支持一起使用。 在将Hibernate实体编组为XML / JSON时,如果该实体分离,它将为惰性子项关联抛出LazyLoadingException。如果实体仍然连接到Hibernate Session,它将几乎加载整个数据库。 我尝试使用推土机C

  • 大概是这样的: 谢谢[已解决] 也感谢Umer Farooq的回答:从lambda内部修改局部变量

  • 问题内容: 我有一种方法可以做很多事情。其中包括进行大量插入和更新。因此宣布… 它的工作完全符合预期,我对此没有任何问题。但是在某些情况下,尽管没有异常,但我还是想强制回滚…目前,当我遇到合适的条件时,我正在强制异常,但这很丑陋,我不喜欢它。 我可以以某种方式积极地调用回滚吗?异常调用它…我在想也许我也可以。 问题答案: 在Spring Transactions中,您使用。 您在这里遇到的问题是您

  • 使用PHP-PDO和SQLite,我可以编写一个PDO调用来检查表中是否存在某一行(通过检查主键),如果不存在,则编写另一个PDO调用来创建该行。但我觉得应该可以在一个命令中实现……类似于“如果不存在,则创建表”。是否有类似“不存在时插入行”的内容?