2015-05-14 27 views
3

我正在使用Java 7的Bukkit 1.8.3 API。Bukkit drop分解塊

我有代碼在分解時會爆炸塊。它發起了一場爆炸,打破了剛爆發的街區周圍的街區。我的問題是,爆炸塊沒有下降,只是玩家已經破壞的那個。我有試圖加入本次活動以固定(也,我的事件註冊):

@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,然後調用setYield與值1。添加此事件處理程序:

@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 - >更新,然後確保「Shapshots /發佈的強制更新」被選中。

+0

我知道爆炸是否是由我的插件引起的,因爲爆炸時爆炸布爾值設置爲true。根據我的理解,沒有BlockExplodeEvent。沒有進口,因此給我一個錯誤。 – JarFile

+0

@JF文件BlockExplodeEvent是bukkit 1.8.3的新增功能 - 如果您在插件中使用1.7.10(用於編譯),它不會在那裏。我會確保你在你的POM中使用1.8.3。 (完整的包是'org.bukkit.event.block.BlockExplodeEvent')。 – Pokechu22

+0

更新了它,現在該事件起作用,但setYield不在那裏,我的主類有一個關於引用的錯誤。我不知道我是否使用了正確版本的api。我以爲我是。 – JarFile