Bukkit - 为什么某段代码只适用于OP?

时间:2014-07-19 07:44:36

标签: java bukkit

出于某种原因,我的一段代码仅适用于OP。这段代码可能是唯一不适用于OP的代码之一。

我的代码是: http://pastebin.com/sQeeXRNN

现在,不起作用的是

@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if(!event.getWhoClicked().isOp()) {
//rest of it

if(!event.getWhoClicked().isOp()) {明确表示只为那些不是Op的人工作。我试过没有if语句,它仍然只适用于OP。有什么想法吗?

谢谢, 杰

3 个答案:

答案 0 :(得分:0)

使用

if(!e.getWhoClicked().isOp())
{
    // code
}

将无效,因为InventoryClickEvent#getWhoClicked()会返回HumanEntity。这不是一个玩家。

要解决此问题,您首先会将getWhoClicked()投射到类似的播放器:

Player player = (Player) e.getWhoClicked();
if(!player.isOp())
{
    // continue code
}

在检查是否有操作之前,您必须始终确保某些内容正在返回播放器。

答案 1 :(得分:-1)

我上次检查时,不推荐使用这些检查,请改为使用权限系统:

if (!event.getWhoClicked().hasPermission("yourplugin.bypassclick"))

并将此权限授予plugin.yml

中的操作
permissions:
  yourplugin.*:
    description: Gives all permission
    children:
      yourplugin.bypassclick: true
  yourplugin.bypassclick:
    description: Gives the permission to <do something>
    default: op

答案 2 :(得分:-2)

奇怪的是,简单地重启服务器就解决了这个问题。