5

我正在尝试制定一个命令,让您可以让任何玩家都无懈可击——即上帝模式。

到目前为止,这是我的代码(尽管都是样板文件)

@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
    if(event.getEntity() instaceof Player) {
        if(godModed.containsKey(event.getPlayer())) {
            //This is where I need the code to go - something to cancel the damage.
        }
    }
}

godModed是一个HashMap godModed包含所有当前处于上帝模式的玩家。当他们关闭上帝模式时,他们会从地图中移除。

该命令本身运行良好 - 我目前让它向触发它的玩家发送消息,如果玩家尚未开启,我还让它将玩家添加到 godModed。但是,我无法弄清楚如何真正防止对玩家造成伤害。我想完全阻止它,而不仅仅是事后治愈它们;onEntityDamage虽然后者可能会奏效,但如果其他 mods试图触发 Godmoded 玩家不应该遇到的事情,它也可能导致无法预料的后果。

4

1 回答 1

4

你会想要使用event.setCancelled(true).

如果您当前的代码正在运行,您必须使用旧的事件 API(和旧版本的 bukkit),我建议您升级 bukkit。使用新事件 API的代码如下所示:

@EventHandler
public void onPlayerDamage(EntityDamageEvent event) {
    if(godModed.containsKey(event.getEntity())) {
        event.setCancelled(true);
    }
}
于 2012-11-29T18:57:52.777 回答