SPIGOT-7799, #1436: Expose explosion world interaction in EntityExplodeEvent and BlockExplodeEvent
By: antiPerson <nathat890@outlook.com>
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
package org.bukkit.craftbukkit;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import net.minecraft.world.level.Explosion;
|
||||
import org.bukkit.ExplosionResult;
|
||||
|
||||
public final class CraftExplosionResult {
|
||||
|
||||
private CraftExplosionResult() {}
|
||||
|
||||
public static ExplosionResult toBukkit(Explosion.Effect effect) {
|
||||
Preconditions.checkArgument(effect != null, "explosion effect cannot be null");
|
||||
|
||||
switch (effect) {
|
||||
case KEEP:
|
||||
return ExplosionResult.KEEP;
|
||||
case DESTROY:
|
||||
return ExplosionResult.DESTROY;
|
||||
case DESTROY_WITH_DECAY:
|
||||
return ExplosionResult.DESTROY_WITH_DECAY;
|
||||
case TRIGGER_BLOCK:
|
||||
return ExplosionResult.TRIGGER_BLOCK;
|
||||
default:
|
||||
throw new IllegalArgumentException("There is no ExplosionResult which matches " + effect);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,6 +86,7 @@ import org.bukkit.block.Sign;
|
||||
import org.bukkit.block.sign.Side;
|
||||
import org.bukkit.craftbukkit.CraftChunk;
|
||||
import org.bukkit.craftbukkit.CraftEquipmentSlot;
|
||||
import org.bukkit.craftbukkit.CraftExplosionResult;
|
||||
import org.bukkit.craftbukkit.CraftLootTable;
|
||||
import org.bukkit.craftbukkit.CraftRaid;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
@@ -143,6 +144,7 @@ import org.bukkit.event.block.BellRingEvent;
|
||||
import org.bukkit.event.block.BlockDamageAbortEvent;
|
||||
import org.bukkit.event.block.BlockDamageEvent;
|
||||
import org.bukkit.event.block.BlockDropItemEvent;
|
||||
import org.bukkit.event.block.BlockExplodeEvent;
|
||||
import org.bukkit.event.block.BlockFadeEvent;
|
||||
import org.bukkit.event.block.BlockFormEvent;
|
||||
import org.bukkit.event.block.BlockGrowEvent;
|
||||
@@ -176,6 +178,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageModifier;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.EntityEnterLoveModeEvent;
|
||||
import org.bukkit.event.entity.EntityExhaustionEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.EntityInteractEvent;
|
||||
import org.bukkit.event.entity.EntityKnockbackByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityKnockbackEvent;
|
||||
@@ -1835,6 +1838,18 @@ public class CraftEventFactory {
|
||||
return !event.isCancelled();
|
||||
}
|
||||
|
||||
public static EntityExplodeEvent callEntityExplodeEvent(Entity entity, List<Block> blocks, float yield, Explosion.Effect effect) {
|
||||
EntityExplodeEvent event = new EntityExplodeEvent(entity.getBukkitEntity(), entity.getBukkitEntity().getLocation(), blocks, yield, CraftExplosionResult.toBukkit(effect));
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
return event;
|
||||
}
|
||||
|
||||
public static BlockExplodeEvent callBlockExplodeEvent(Block block, BlockState state, List<Block> blocks, float yield, Explosion.Effect effect) {
|
||||
BlockExplodeEvent event = new BlockExplodeEvent(block, state, blocks, yield, CraftExplosionResult.toBukkit(effect));
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
return event;
|
||||
}
|
||||
|
||||
public static ExplosionPrimeEvent callExplosionPrimeEvent(Explosive explosive) {
|
||||
ExplosionPrimeEvent event = new ExplosionPrimeEvent(explosive);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
|
||||
Reference in New Issue
Block a user