diff --git a/src/main/java/cn/nukkit/event/level/ExplodeEvent.java b/src/main/java/cn/nukkit/event/level/ExplodeEvent.java new file mode 100644 index 00000000000..bf51a7d4adf --- /dev/null +++ b/src/main/java/cn/nukkit/event/level/ExplodeEvent.java @@ -0,0 +1,53 @@ +package cn.nukkit.event.level; + +import cn.nukkit.block.Block; +import cn.nukkit.event.Cancellable; +import cn.nukkit.event.HandlerList; +import cn.nukkit.level.Level; +import cn.nukkit.level.Position; + +import java.util.List; + +/** + * author: SergeyDertan + * Nukkit Project + */ +public class ExplodeEvent extends LevelEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + protected final Position position; + protected List blocks; + protected double yield; + + public static HandlerList getHandlers() { + return handlers; + } + + public ExplodeEvent(Level level, Position position, List blocks, double yield) { + super(level); + this.position = position; + this.blocks = blocks; + this.yield = yield; + } + + public Position getPosition() { + return this.position; + } + + public List getBlockList() { + return this.blocks; + } + + public void setBlockList(List blocks) { + this.blocks = blocks; + } + + public double getYield() { + return this.yield; + } + + public void setYield(double yield) { + this.yield = yield; + } +} diff --git a/src/main/java/cn/nukkit/level/Explosion.java b/src/main/java/cn/nukkit/level/Explosion.java index fb110954893..926c93cfbc7 100644 --- a/src/main/java/cn/nukkit/level/Explosion.java +++ b/src/main/java/cn/nukkit/level/Explosion.java @@ -14,6 +14,7 @@ import cn.nukkit.event.entity.EntityDamageEvent; import cn.nukkit.event.entity.EntityDamageEvent.DamageCause; import cn.nukkit.event.entity.EntityExplodeEvent; +import cn.nukkit.event.level.ExplodeEvent; import cn.nukkit.inventory.InventoryHolder; import cn.nukkit.item.Item; import cn.nukkit.item.ItemBlock; @@ -133,6 +134,15 @@ public boolean explodeB() { yield = ev.getYield(); this.affectedBlocks = ev.getBlockList(); } + } else { + ExplodeEvent ev = new ExplodeEvent(this.level, this.source, this.affectedBlocks, yield); + this.level.getServer().getPluginManager().callEvent(ev); + if (ev.isCancelled()) { + return false; + } else { + yield = ev.getYield(); + this.affectedBlocks = ev.getBlockList(); + } } double explosionSize = this.size * 2d;