我正在建设一个'建筑模式'对于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);
}
如何检查播放器是否为制造商/运营商而不取消活动?
答案 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");
}