提问者:小点点

JavaBukkit/Spigot-阻止指定命令


我正在尝试制作一个插件,它必须阻止由config设置的指定命令。我做了这个,但它不会阻止任何命令。

代码:

@EventHandler(priority = EventPriority.HIGHEST)
  public void onPreprocess(PlayerCommandPreprocessEvent event)
  {
    Player player = event.getPlayer();
    String command = event.getMessage();
    List<String> bCmds = this.plugin.cfg.getStringList("blocked-commands");

    for (String bCmd : bCmds) 
    {
        if(command.equalsIgnoreCase(bCmd))
        {
            event.setCancelled(true);
        }
    }
  }

配置:

blocked-commands:
- /pl
- /op
- /sp
- /gravityblock

PS:我尝试使用:

String command = event.getMessage().subString(1);

感谢您的帮助…:)


共2个答案

匿名用户

注册事件?实现的监听器?

此外,您的代码无法使用命令中的附加参数。如果它包含空格,请将其拆分为“”并获取第一个元素以仅获取命令

如果包含(" ")) cmd=cmd. split("")[0];

匿名用户

正如Bukkit的wiiki所述,优先级按以下顺序调用:

  • 事件优先级。最低
  • 事件优先级。低
  • 事件优先级。正常
  • 事件优先级。高
  • 事件优先级。最高
  • 事件优先级。监视器

也许您可以尝试使用最低优先级,以便在处理命令之前取消事件。

我也相信该命令可能有参数,因此它可能不等于提供的字符串,您也应该尝试

String command = event.getMessage();


if (command.toLowerCase().startsWith("/command") ) {
    //cancel
}