Bukkit事件If-Statement被忽略

时间:2014-12-12 20:10:24

标签: java if-statement bukkit

我正在建设一个'建筑模式'对于Minecraft服务器而言,我真的很困惑。构建模式工作正常,但是当事件被触发时,它的行为方式使得检查工作'当玩家是操作时。

以下是活动:

@EventHandler
public void blockBreakWithBuilder(BlockBreakEvent e)
{
    if (onWorld(e.getPlayer()) && !e.getPlayer().isOp() || !buildMode.hasBuildMode(e.getPlayer()))
    {
        e.getPlayer().sendMessage("True");
        e.setCancelled(blockBreak);
        return;
    }

    e.getPlayer().sendMessage("False");
}

应检查播放器是否为op,或者播放器是否处于构建模式。如果为true,则不应取消该事件,因此让玩家破坏阻挡。

仅当玩家是操作员时才有效,这使得很难找到问题。

相关方法:

public boolean hasBuildMode(Player player)
{
    return builders.contains(player);
}

如何检查播放器是否为制造商/运营商而不取消活动?

1 个答案:

答案 0 :(得分:1)

如果我正确阅读,您的代码与您想要发生的事情的陈述不符。该代码实际上是if (!op || !buildMode)。代码后面的陈述if (!(op || buildMode))。将DeMorgan's Law应用于此代码,代码应为if (!op && !buildMode)

@EventHandler
public void blockBreakWithBuilder(BlockBreakEvent e)
{
    if (onWorld(e.getPlayer()) && !e.getPlayer().isOp() && !buildMode.hasBuildMode(e.getPlayer()))
    {
        e.getPlayer().sendMessage("True");
        e.setCancelled(blockBreak);
        return;
    }

    e.getPlayer().sendMessage("False");
}