Bukkit掉落爆炸块

时间:2015-05-14 23:40:50

标签: java minecraft bukkit

我正在使用Bukkit 1.8.3 API和Java 7。

我有一些代码可以在你破解时爆炸。它发动了爆炸,打破了你刚刚破坏的街区周围的街区。我的问题是爆炸的块没有下降,只是玩家已经破坏的块。我已经尝试通过添加此事件来修复它(同样,我的事件已注册):

@EventHandler
public void onEntityDamage(EntityDamageByBlockEvent e)
{
    if(e.getCause().equals(DamageCause.BLOCK_EXPLOSION))
    {
        if (explosive)
        {
            e.setCancelled(true);
        }
    }
}

这可以阻止玩家受到损坏,但不会阻止玩家被丢弃。我认为,因为丢弃的块是一个实体,这将起作用。但事实并非如此。那么我怎样才能让爆炸块掉落?

这是我用来首先爆炸块的代码:

loc.getWorld().createExplosion(loc, lvl1);

loc是块位置。 lvl1是爆炸半径的浮点数。

1 个答案:

答案 0 :(得分:1)

这个原因很简单:默认情况下,爆炸通常不会丢弃所有块。

但是,您可以更改此内容:收听BlockExplodeEvent,然后使用值1调用setYield。添加此事件处理程序:

@EventHandler
public void onBlockExplosion(BlockExplodeEvent e) {
    e.setYield(1);
}

您可能想要添加某种检查,以确定爆炸是否是由您的插件引起的。

如果这不起作用,您可以改为使用此代码:

@EventHandler
public void onBlockExplosion(BlockExplodeEvent e) {
    for (Block block : e.blockList()) {
        block.breakNaturally();
    }
}

上面的代码有效,但它可能会破坏任何其他插件blockList,因为所有的块都会变成空气。因此,如果可以,我强烈建议使用第一个代码。

BlockExplodeEvent似乎只在最新版本中出现;如果你没有它,你需要更新。它可以在1.8版本中找到,但只能在最新版本中找到。

这是你需要的pom:

<repositories>
    <repository>
        <id>spigot-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>org.bukkit</groupId>
        <artifactId>bukkit</artifactId>
        <version>1.8.3-R0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

你还需要做Maven - &gt;更新,然后确保选中“强制更新Shapshots / Releases”。