Bukkit 掉落爆炸块
Bukkit drop exploded blocks
我正在使用 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 的 BlockExplodeEvent
, and then call 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 -> 更新,然后确保选中 "Force Update of Shapshots/Releases"。
我正在使用 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 的 BlockExplodeEvent
, and then call 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 -> 更新,然后确保选中 "Force Update of Shapshots/Releases"。