13
0
geforkt von Mirrors/Paper

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

By: antiPerson <nathat890@outlook.com>
Dieser Commit ist enthalten in:
Bukkit/Spigot 2024-07-06 17:19:42 +10:00
Ursprung abc756fce8
Commit 58999b263e
3 geänderte Dateien mit 65 neuen und 7 gelöschten Zeilen

Datei anzeigen

@ -0,0 +1,37 @@
package org.bukkit;
import org.jetbrains.annotations.ApiStatus;
/**
* Represents the outcome of an explosion.
*/
@ApiStatus.Experimental
public enum ExplosionResult {
/**
* Represents an explosion where no change took place.
*
* This is the case when {@link org.bukkit.GameRule#MOB_GRIEFING} is
* disabled.
*/
KEEP,
/**
* Represents an explosion where all destroyed blocks drop their items.
*
* This is the case when
* {@link org.bukkit.GameRule#TNT_EXPLOSION_DROP_DECAY} or
* {@link org.bukkit.GameRule#BLOCK_EXPLOSION_DROP_DECAY} is disabled.
*/
DESTROY,
/**
* Represents an explosion where explosions cause only some blocks to drop.
*/
DESTROY_WITH_DECAY,
/**
* Represents an explosion where a block change/update has happened.
*
* For example, when a wind charge is used it will cause nearby buttons,
* levers and bells to be activated.
*/
TRIGGER_BLOCK
}

Datei anzeigen

@ -1,6 +1,7 @@
package org.bukkit.event.block;
import java.util.List;
import org.bukkit.ExplosionResult;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.event.Cancellable;
@ -20,18 +21,15 @@ public class BlockExplodeEvent extends BlockEvent implements Cancellable {
private final BlockState blockState;
private final List<Block> blocks;
private float yield;
private final ExplosionResult result;
public BlockExplodeEvent(@NotNull final Block what, @NotNull final BlockState blockState, @NotNull final List<Block> blocks, final float yield) {
public BlockExplodeEvent(@NotNull final Block what, @NotNull final BlockState blockState, @NotNull final List<Block> blocks, final float yield, @NotNull final ExplosionResult result) {
super(what);
this.blockState = blockState;
this.blocks = blocks;
this.yield = yield;
this.cancel = false;
}
@Deprecated(forRemoval = true)
public BlockExplodeEvent(@NotNull final Block what, @NotNull final List<Block> blocks, final float yield) {
this(what, what.getState(), blocks, yield);
this.result = result;
}
@Override
@ -44,6 +42,16 @@ public class BlockExplodeEvent extends BlockEvent implements Cancellable {
this.cancel = cancel;
}
/**
* Returns the result of the explosion if it is not cancelled.
*
* @return the result of the explosion
*/
@NotNull
public ExplosionResult getExplosionResult() {
return result;
}
/**
* Returns the captured BlockState of the block that exploded.
*

Datei anzeigen

@ -1,6 +1,7 @@
package org.bukkit.event.entity;
import java.util.List;
import org.bukkit.ExplosionResult;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
@ -17,13 +18,15 @@ public class EntityExplodeEvent extends EntityEvent implements Cancellable {
private final Location location;
private final List<Block> blocks;
private float yield;
private final ExplosionResult result;
public EntityExplodeEvent(@NotNull final Entity what, @NotNull final Location location, @NotNull final List<Block> blocks, final float yield) {
public EntityExplodeEvent(@NotNull final Entity what, @NotNull final Location location, @NotNull final List<Block> blocks, final float yield, @NotNull final ExplosionResult result) {
super(what);
this.location = location;
this.blocks = blocks;
this.yield = yield;
this.cancel = false;
this.result = result;
}
@Override
@ -36,6 +39,16 @@ public class EntityExplodeEvent extends EntityEvent implements Cancellable {
this.cancel = cancel;
}
/**
* Returns the result of the explosion if it is not cancelled.
*
* @return the result of the explosion
*/
@NotNull
public ExplosionResult getExplosionResult() {
return result;
}
/**
* Returns the list of blocks that would have been removed or were removed
* from the explosion event.