SPIGOT-7799, #1436: Expose explosion world interaction in EntityExplodeEvent and BlockExplodeEvent

By: antiPerson <nathat890@outlook.com>
This commit is contained in:
CraftBukkit/Spigot
2024-07-06 17:19:45 +10:00
parent 41b8d833db
commit b6655d093f
5 changed files with 88 additions and 27 deletions

View File

@@ -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);
}
}
}

View File

@@ -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);