mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
SPIGOT-519: Add TNTPrimeEvent
Thanks to Pokechu22 for an earlier implementation By: Jishuna <joshl5324@gmail.com>
This commit is contained in:
parent
1087e895bb
commit
7f981d0d2d
1 changed files with 123 additions and 0 deletions
|
@ -0,0 +1,123 @@
|
|||
package org.bukkit.event.block;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Called when a block of TNT in the world become primed.
|
||||
* <p>
|
||||
* If a TNT Prime event is cancelled, the block of TNT will not become primed.
|
||||
*/
|
||||
public class TNTPrimeEvent extends BlockEvent implements Cancellable {
|
||||
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private boolean cancelled;
|
||||
private final PrimeCause igniteCause;
|
||||
private final Entity primingEntity;
|
||||
private final Block primingBlock;
|
||||
|
||||
public TNTPrimeEvent(@NotNull final Block block, @NotNull final PrimeCause igniteCause, @Nullable final Entity primingEntity, @Nullable final Block primingBlock) {
|
||||
super(block);
|
||||
this.igniteCause = igniteCause;
|
||||
this.primingEntity = primingEntity;
|
||||
this.primingBlock = primingBlock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
this.cancelled = cancel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cause of the TNT becoming primed.
|
||||
*
|
||||
* @return the cause
|
||||
*/
|
||||
@NotNull
|
||||
public PrimeCause getCause() {
|
||||
return igniteCause;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the entity that caused the TNT to be primed.
|
||||
*
|
||||
* @return the entity that caused the TNT to be primed, or null if it was
|
||||
* not caused by an entity.
|
||||
*/
|
||||
@Nullable
|
||||
public Entity getPrimingEntity() {
|
||||
return primingEntity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the block that caused the TNT to be primed.
|
||||
*
|
||||
* @return the block that caused the TNT to be primed, or null if it was not
|
||||
* caused by a block.
|
||||
*/
|
||||
@Nullable
|
||||
public Block getPrimingBlock() {
|
||||
return primingBlock;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
/**
|
||||
* An enum to represent the cause of a TNT block becoming primed.
|
||||
*/
|
||||
public enum PrimeCause {
|
||||
|
||||
/**
|
||||
* When TNT is primed by fire spreading.
|
||||
*/
|
||||
FIRE,
|
||||
/**
|
||||
* When TNT is primed by a redstone signal.
|
||||
*/
|
||||
REDSTONE,
|
||||
/**
|
||||
* When TNT is primed by a player interacting with it directly.
|
||||
*/
|
||||
PLAYER,
|
||||
/**
|
||||
* When TNT is primed by a nearby explosion.
|
||||
*/
|
||||
EXPLOSION,
|
||||
/**
|
||||
* When TNT is primed after getting hit with a burning projectile.
|
||||
*/
|
||||
PROJECTILE,
|
||||
/**
|
||||
* When TNT with the unstable block state set to true is broken.
|
||||
* <p>
|
||||
* Note: Canceling a prime event with this cause will stop the primed
|
||||
* TNT from spawning but will not stop the block from being broken.
|
||||
*/
|
||||
BLOCK_BREAK,
|
||||
/**
|
||||
* When TNT is primed by a dispenser holding flint and steel.
|
||||
* <p>
|
||||
* Note: This event is not called for a dispenser dispensing TNT
|
||||
* directly.
|
||||
*/
|
||||
DISPENSER;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue