首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bukkit空投爆炸块

Bukkit空投爆炸块
EN

Stack Overflow用户
提问于 2015-05-14 23:40:49
回答 1查看 1.6K关注 0票数 3

我在Java 7中使用Bukkit 1.8.3API。

我有代码,当你破坏它时,它会爆炸。它引发了一场爆炸,打破了你刚刚打破的街区周围的街区。我的问题是,爆炸的街区没有下降,只是一个球员已经打破了。我试图通过添加此事件(同时,我的事件已注册)来修复它:

代码语言:javascript
复制
@EventHandler
public void onEntityDamage(EntityDamageByBlockEvent e)
{
    if(e.getCause().equals(DamageCause.BLOCK_EXPLOSION))
    {
        if (explosive)
        {
            e.setCancelled(true);
        }
    }
}

这可以阻止玩家受到伤害,但不能阻止街区被丢弃。我认为,由于被丢弃的块是一个实体,这将是可行的。但事实并非如此。那我怎么才能让爆炸的石块掉下来呢?

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

代码语言:javascript
复制
loc.getWorld().createExplosion(loc, lvl1);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-16 00:08:40

造成这种情况的原因很简单:爆炸通常不会在默认情况下丢弃所有的块。

但是,您可以更改以下内容:侦听BlockExplodeEvent,然后调用值为1的setYield

代码语言:javascript
复制
@EventHandler
public void onBlockExplosion(BlockExplodeEvent e) {
    e.setYield(1);
}

不过,您可能需要添加一些检查,以确定爆炸是否是由您的插件引起的。

如果这不起作用,您可以使用以下代码:

代码语言:javascript
复制
@EventHandler
public void onBlockExplosion(BlockExplodeEvent e) {
    for (Block block : e.blockList()) {
        block.breakNaturally();
    }
}

上面的代码可以工作,但它可能会破坏任何其他插件的填充与blockList,因为所有的块将成为空气。因此,如果可以的话,我强烈建议使用第一段代码。

BlockExplodeEvent似乎只在最新版本中;如果没有它,则需要进行更新。在这两个版本中都可以找到它,但只有最新的更新。

这是你需要的饮料:

代码语言:javascript
复制
<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 ->更新,然后确保选中“/Releases”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30249243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档