2014-07-19 54 views
0

由于某种原因,我的一段代码仅适用于OP。这段代码可能是唯一不能用于OP的代码之一。Bukkit - 为什么某些代码只能在OP上工作?

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

,不工作的位是

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

其中作为if(!event.getWhoClicked().isOp()) {清楚地说明,因为只有人谁不运工作。我试过没有if声明,它仍然只适用于OP。有任何想法吗?

感谢, 周杰伦

+0

我会建议在isOP检查前添加一些日志语句。输出从getWhoClicked返回的用户的名称以及isOP的结果。我希望这会给你一个关于正在发生的事情的好主意。 –

+1

也许检查你的测试/使用这个服务器上的服务器是否有一个适用于每个人的插件......同时仔细检查测试仪是不是一个操作(我知道,这听起来很愚蠢,但这可能是问题),也许如果你需要 – Jojodmo

回答

-1

我最后一次检查,使用这些类型的检查都过时了,使用许可制度,而不是:

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

并给予许可OPS里面你plugin.yml

permissions: 
    yourplugin.*: 
    description: Gives all permission 
    children: 
     yourplugin.bypassclick: true 
    yourplugin.bypassclick: 
    description: Gives the permission to <do something> 
    default: op 
+0

删除'ops.json' /'ops.txt'文件,即使没有if语句,它仍然只适用于OP。 Idk为什么使用烫发会更好? – user3798369

+0

@ user3798369因为它依赖于适当的权限机制,并且如果您想要更改访问权限(将旁路设置为某些组或某些事件),您只需添加/撤销该权限,而不是更改该插件。 – Snaipe

+0

这些检查并没有被破坏,Bukkit仍然允许你(并且希望你)使用.isOp() – Jojodmo

-2

奇怪的是,一个简单的服务器重新启动修复了这个问题。

0

使用

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

不会起作用,因为InventoryClickEvent#getWhoClicked()返回HumanEntity。这不是一个球员。

要解决这个问题,你会先投getWhoClicked()的球员,像这样:

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

您必须始终确保事情是检查它是否运回前一个球员。

相关问题