2016-07-11 39 views
2

我試圖做一個插件,它必須阻止由config設置的指定命令。我已經做了這個,但它並沒有阻止任何命令。Java Bukkit/Spigot - 塊指定的命令

代碼:

@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); 

感謝您的幫助... :)

回答

0

註冊的活動?實施清單?

此外,您的代碼不會在命令中使用其他參數。 如果它包含空格,請用「」分割並獲取第一個元素以獲得命令

if(cmd.contains(「」))cmd = cmd.split(「」)[0];

+0

OMG ......我沒有註冊的事件XDDDD感謝幫幫我! –

0

如前所述由Bukkit's wiiki,優先級被稱爲以下順序:

  • EventPriority.LOWEST
  • EventPriority.LOW
  • EventPriority.NORMAL
  • EventPriority.HIGH
  • EventPriority。 HIGHEST
  • EventPriority.MONITOR

也許你可以嘗試使用最低優先級,所以事件在命令處理之前被取消。

我也相信,這條命令可以有參數,所以它可能不等於提供的字符串,你也應該嘗試

String command = event.getMessage(); 


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