Files
.github
Paper-MojangAPI
build-data
gradle
licenses
paper-api-generator
patches
api
API-for-an-entity-s-scoreboard-name.patch
API-for-checking-sent-chunks.patch
API-for-creating-command-sender-which-forwards-feedb.patch
API-for-updating-recipes-on-clients.patch
API-to-get-a-BlockState-without-a-snapshot.patch
Ability-to-apply-mending-to-XP-API.patch
Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
Add-API-for-item-entity-health.patch
Add-API-for-quit-reason.patch
Add-API-for-resetting-a-single-score.patch
Add-API-methods-to-control-if-armour-stands-can-move.patch
Add-API-to-get-Material-from-Boats-and-Minecarts.patch
Add-API-to-get-exact-interaction-point-in-PlayerInte.patch
Add-API-to-get-the-collision-shape-of-a-block-before.patch
Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch
Add-Adventure-message-to-PlayerAdvancementDoneEvent.patch
Add-ArmorStand-Item-Meta.patch
Add-Ban-Methods-to-Player-Objects.patch
Add-BaseComponent-sendMessage-methods-to-CommandSend.patch
Add-BeaconEffectEvent.patch
Add-BellRevealRaiderEvent.patch
Add-BellRingEvent.patch
Add-Block-isValidTool.patch
Add-BlockBreakBlockEvent.patch
Add-BlockBreakProgressUpdateEvent.patch
Add-BlockFailedDispenseEvent.patch
Add-BlockLockCheckEvent.patch
Add-BlockPreDispenseEvent.patch
Add-BlockSoundGroup-interface.patch
Add-BlockStateMeta-clearBlockState.patch
Add-CartographyItemEvent.patch
Add-CompostItemEvent-and-EntityCompostItemEvent.patch
Add-Destroy-Speed-API.patch
Add-ElderGuardianAppearanceEvent.patch
Add-Entity-Body-Yaw-API.patch
Add-EntityBlockStorage-clearEntities.patch
Add-EntityDyeEvent-and-CollarColorable-interface.patch
Add-EntityFertilizeEggEvent.patch
Add-EntityInsideBlockEvent.patch
Add-EntityKnockbackByEntityEvent-and-EntityPushedByE.patch
Add-EntityLoadCrossbowEvent.patch
Add-EntityPortalReadyEvent.patch
Add-EntityTeleportEndGatewayEvent.patch
Add-EntityZapEvent.patch
Add-EquipmentSlot-convenience-methods.patch
Add-FastUtil-to-Bukkit.patch
Add-FluidState-API.patch
Add-GS4-Query-event.patch
Add-GameEvent-tags.patch
Add-GameMode-isInvulnerable.patch
Add-Git-information-to-version-command-on-startup.patch
Add-Heightmap-API.patch
Add-HiddenPotionEffect-API.patch
Add-ItemStack-Recipe-API-helper-methods.patch
Add-ItemStackRecipeChoice-Draft-API.patch
Add-Lifecycle-Event-system.patch
Add-Listing-API-for-Player.patch
Add-LivingEntity-clearActiveItem.patch
Add-LivingEntity-getTargetEntity.patch
Add-LivingEntity-swingHand-EquipmentSlot-convenience.patch
Add-Material-Tags.patch
Add-MetadataStoreBase.removeAll-Plugin.patch
Add-Mob-Experience-reward-API.patch
Add-Mob-Goal-API.patch
Add-Mob-lookAt-API.patch
Add-More-Creeper-API.patch
Add-Moving-Piston-API.patch
Add-NamespacedKey-biome-methods.patch
Add-OBSTRUCTED-reason-to-BedEnterResult.patch
Add-OfflinePlayer-isConnected.patch
Add-PhantomPreSpawnEvent.patch
Add-Player-Client-Options-API.patch
Add-Player-Warden-Warning-API.patch
Add-Player-getFishHook.patch
Add-PlayerAdvancementCriterionGrantEvent.patch
Add-PlayerArmorChangeEvent.patch
Add-PlayerAttackEntityCooldownResetEvent.patch
Add-PlayerConnectionCloseEvent.patch
Add-PlayerFailMoveEvent.patch
Add-PlayerFlowerPotManipulateEvent.patch
Add-PlayerInitialSpawnEvent.patch
Add-PlayerInventorySlotChangeEvent.patch
Add-PlayerItemCooldownEvent.patch
Add-PlayerItemFrameChangeEvent.patch
Add-PlayerJumpEvent.patch
Add-PlayerKickEvent-causes.patch
Add-PlayerLocaleChangeEvent.patch
Add-PlayerPickItemEvent.patch
Add-PlayerPostRespawnEvent.patch
Add-PlayerSetSpawnEvent.patch
Add-PlayerShearBlockEvent.patch
Add-PlayerShieldDisableEvent.patch
Add-PlayerSignCommandPreprocessEvent.patch
Add-PlayerStopUsingItemEvent.patch
Add-PlayerUseUnknownEntityEvent.patch
Add-Position.patch
Add-PrePlayerAttackEntityEvent.patch
Add-PrepareResultEvent-PrepareGrindstoneEvent.patch
Add-ProjectileCollideEvent.patch
Add-PufferFishStateChangeEvent.patch
Add-Raw-Byte-Entity-Serialization.patch
Add-Raw-Byte-ItemStack-Serialization.patch
Add-RegistryAccess-for-managing-registries.patch
Add-Shearable-API.patch
Add-ShulkerDuplicateEvent.patch
Add-Sign-getInteractableSideFor.patch
Add-Sneaking-API-for-Entities.patch
Add-String-based-Action-Bar-API.patch
Add-Structure-check-API.patch
Add-StructuresLocateEvent.patch
Add-TNTPrimeEvent.patch
Add-TameableDeathMessageEvent.patch
Add-TargetHitEvent-API.patch
Add-ThrownEggHatchEvent.patch
Add-Tick-TemporalUnit.patch
Add-UUID-attribute-modifier-API.patch
Add-UnknownCommandEvent.patch
Add-WardenAngerChangeEvent.patch
Add-WaterBottleSplashEvent.patch
Add-WhitelistToggleEvent.patch
Add-World.getEntity-UUID-API.patch
Add-a-call-helper-to-Event.patch
Add-a-consumer-parameter-to-ProjectileSource-launchP.patch
Add-a-should-burn-in-sunlight-API-for-Phantoms-and-S.patch
Add-additional-open-container-api-to-HumanEntity.patch
Add-and-implement-PlayerRecipeBookClickEvent.patch
Add-api-for-spawn-egg-texture-colors.patch
Add-basic-Datapack-API.patch
Add-cause-to-Weather-ThunderChangeEvents.patch
Add-command-line-option-to-load-extra-plugin-jars-no.patch
Add-command-to-reload-permissions.yml-and-require-co.patch
Add-configuration-option-to-prevent-player-names-fro.patch
Add-critical-damage-API.patch
Add-dropLeash-variable-to-EntityUnleashEvent.patch
Add-drops-to-shear-events.patch
Add-enchantWithLevels-API.patch
Add-entity-knockback-API.patch
Add-entity-liquid-API.patch
Add-event-for-player-editing-sign.patch
Add-exception-reporting-event.patch
Add-experience-points-API.patch
Add-exploded-block-state-to-EntityDamageByBlockEvent.patch
Add-extended-PaperServerListPingEvent.patch
Add-getChunkSnapshot-includeLightData-parameter.patch
Add-getComputedBiome-API.patch
Add-getDrops-to-BlockState.patch
Add-getI18NDisplayName-API.patch
Add-getMainThreadExecutor-to-BukkitScheduler.patch
Add-getNearbyXXX-methods-to-Location.patch
Add-getOfflinePlayerIfCached-String.patch
Add-getTPS-method.patch
Add-hand-to-fish-event-for-all-player-interactions.patch
Add-handshake-event-to-allow-plugins-to-handle-clien.patch
Add-helpers-for-left-right-click-to-Action.patch
Add-hook-to-remap-library-jars.patch
Add-ignore-discounts-API.patch
Add-isCollidable-methods-to-various-places.patch
Add-item-slot-convenience-methods.patch
Add-legacy-ping-support-to-PaperServerListPingEvent.patch
Add-method-isTickingWorlds-to-Bukkit.patch
Add-method-to-remove-all-active-potion-effects.patch
Add-methods-for-working-with-arrows-stuck-in-living-.patch
Add-methods-to-find-targets-for-lightning-strikes.patch
Add-methods-to-get-translation-keys.patch
Add-missing-Fluid-type.patch
Add-missing-InventoryType.patch
Add-missing-block-data-mins-and-maxes.patch
Add-missing-effects.patch
Add-missing-team-sidebar-display-slots.patch
Add-missing-wind-charge-damage-type.patch
Add-moon-phase-API.patch
Add-more-Campfire-API.patch
Add-more-Evoker-API.patch
Add-more-LimitedRegion-API.patch
Add-more-WanderingTrader-API.patch
Add-more-Witch-API.patch
Add-more-Zombie-API.patch
Add-more-advancement-API.patch
Add-more-fields-to-AsyncPreLoginEvent.patch
Add-more-line-of-sight-methods.patch
Add-more-scoreboard-API.patch
Add-openSign-method-to-HumanEntity.patch
Add-paper-dumplisteners-command.patch
Add-playPickupItemAnimation-to-LivingEntity.patch
Add-player-idle-duration-API.patch
Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch
Add-predicate-for-blocks-when-raytracing.patch
Add-ray-tracing-methods-to-LivingEntity.patch
Add-recipe-to-cook-events.patch
Add-sendOpLevel-API.patch
Add-sender-name-to-commands.yml-replacement.patch
Add-setPlayerProfile-API-for-Skulls.patch
Add-source-block-constructor-and-getChangedBlockData.patch
Add-source-to-PlayerExpChangeEvent.patch
Add-spectator-target-events.patch
Add-sun-related-API.patch
Add-tick-times-API.patch
Add-titleOverride-to-InventoryOpenEvent.patch
Add-transient-modifier-API.patch
Add-view-distance-API.patch
Add-villager-reputation-API.patch
Add-whitelist-events.patch
Add-workaround-for-plugins-modifying-the-parent-of-t.patch
Add-worldborder-events.patch
Added-API-to-get-player-ha-proxy-address.patch
Added-EntityDamageItemEvent.patch
Added-EntityToggleSitEvent.patch
Added-PlayerBedFailEnterEvent.patch
Added-PlayerChangeBeaconEffectEvent.patch
Added-PlayerDeepSleepEvent.patch
Added-PlayerLecternPageChangeEvent.patch
Added-PlayerLoomPatternSelectEvent.patch
Added-PlayerStonecutterRecipeSelectEvent.patch
Added-PlayerTradeEvent.patch
Added-ServerResourcesReloadedEvent.patch
Added-WorldGameRuleChangeEvent.patch
Added-byte-array-serialization-deserialization-for-P.patch
Additional-Block-Material-API-s.patch
Additional-world.getNearbyEntities-API-s.patch
Adds-PlayerArmSwingEvent.patch
Adventure.patch
Allow-Blocks-to-be-accessed-via-a-long-key.patch
Allow-Reloading-of-Command-Aliases.patch
Allow-adding-items-to-BlockDropItemEvent.patch
Allow-changing-bed-s-occupied-property.patch
Allow-delegation-to-vanilla-chunk-gen.patch
Allow-disabling-armour-stand-ticking.patch
Allow-modifying-library-loader-jars-bytecode.patch
Allow-plugins-to-use-SLF4J-for-logging.patch
Allow-proper-checking-of-empty-item-stacks.patch
Allow-setting-the-vex-s-summoner.patch
Allow-to-change-the-podium-of-the-EnderDragon.patch
Allow-trident-custom-damage.patch
Also-load-resources-from-LibraryLoader.patch
Amend-PlayerInteractAtEntityEvent-javadoc-for-ArmorS.patch
AnvilDamageEvent.patch
Arrow-pickup-rule-API.patch
Async-Chunks-API.patch
AsyncTabCompleteEvent.patch
Attributes-API-for-item-defaults.patch
Basic-PlayerProfile-API.patch
Beacon-API-custom-effect-ranges.patch
Block-Ticking-API.patch
BlockDestroyEvent.patch
Brand-support.patch
Bucketable-API.patch
Build-system-changes.patch
Cache-the-result-of-Material-isBlock.patch
Change-EnderEye-target-without-changing-other-things.patch
Change-the-reserved-channel-check-to-be-sensible.patch
Clone-mutables-to-prevent-unexpected-issues.patch
Code-Generation.patch
Collision-API.patch
Complete-resource-pack-API.patch
Configurable-sculk-sensor-listener-range.patch
Convert-project-to-Gradle.patch
Create-HoverEvent-from-ItemStack-Entity.patch
Custom-Chat-Completion-Suggestions-API.patch
Custom-Potion-Mixes.patch
Custom-replacement-for-eaten-items.patch
Deprecate-ItemStack-setType.patch
Deprecate-and-replace-methods-with-old-StructureType.patch
Display-warning-on-deprecated-recipe-API.patch
Dolphin-API.patch
Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch
Elder-Guardian-appearance-API.patch
EnderDragon-Events.patch
Enderman.teleportRandomly.patch
EndermanAttackPlayerEvent.patch
EndermanEscapeEvent.patch
Entity-AddTo-RemoveFrom-World-Events.patch
Entity-Jump-API.patch
Entity-Origin-API.patch
Entity-fromMobSpawner.patch
Entity-getChunk-API.patch
Entity-getEntitySpawnReason.patch
Entity-isTicking.patch
Entity-powdered-snow-API.patch
EntityMoveEvent.patch
EntityPathfindEvent.patch
EntityRegainHealthEvent-isFastRegen-API.patch
EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch
EntityTransformedEvent.patch
Expand-ArmorStand-API.patch
Expand-Explosions-API.patch
Expand-FallingBlock-API.patch
Expand-LingeringPotion-API.patch
Expand-Location-Manipulation-API.patch
Expand-PlayerItemMendEvent.patch
Expand-Pose-API.patch
Expand-World.spawnParticle-API-and-add-Builder.patch
Expand-world-key-API.patch
Expanded-Hopper-API.patch
ExperienceOrbMergeEvent.patch
ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch
Expose-LivingEntity-hurt-direction.patch
Expose-LootTable-of-DecoratedPot.patch
Expose-MinecraftServer-isRunning.patch
Expose-Tracked-Players.patch
Expose-WorldBorder-isInBounds-Location-check.patch
Expose-attack-cooldown-methods-for-Player.patch
Expose-clicked-BlockFace-during-BlockDamageEvent.patch
Expose-client-protocol-version-and-virtual-host.patch
Expose-codepoint-limit-in-YamlConfigOptions-and-incr.patch
Expose-furnace-minecart-push-values.patch
Expose-game-version.patch
Expose-hand-during-BlockCanBuildEvent.patch
Expose-hasColor-to-leather-armor.patch
Expose-isFuel-and-canSmelt-methods-to-FurnaceInvento.patch
Expose-protocol-version.patch
Expose-server-CommandMap.patch
Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch
Expose-the-internal-current-tick.patch
Expose-vanilla-BiomeProvider-from-WorldInfo.patch
Extend-VehicleCollisionEvent-move-HandlerList-up.patch
Fill-Profile-Property-Events.patch
Fireworks-API-s.patch
Fix-BanList-API.patch
Fix-DamageSource-API.patch
Fix-HandlerList-for-InventoryBlockStartEvent-subclas.patch
Fix-ItemFlags.patch
Fix-NPE-on-Boat-getStatus.patch
Fix-NotePlayEvent.patch
Fix-PlayerSwapHandItemsEvent-throwing-exception-when.patch
Fix-ServerListPingEvent-flagging-as-Async.patch
Fix-SpawnEggMeta-get-setSpawnedType.patch
Fix-SpawnerEntry-Equipment-API.patch
Fix-Spigot-annotation-mistakes.patch
Fix-custom-statistic-criteria-creation.patch
Fix-incorrect-new-blockstate-in-EntityBreakDoorEvent.patch
Fix-issues-with-mob-conversion.patch
Fix-upstream-javadocs.patch
Flying-Fall-Damage-API.patch
Folia-scheduler-and-owned-region-API.patch
Freeze-Tick-Lock-API.patch
Friction-API.patch
Furnace-RecipesUsed-API.patch
Get-entity-default-attributes.patch
Goat-ram-API.patch
Graduate-bungeecord-chat-API-from-spigot-subclasses.patch
Handle-plugin-prefixes-in-implementation-logging-con.patch
IllegalPacketEvent.patch
Implement-furnace-cook-speed-multiplier-API.patch
Implement-regenerateChunk.patch
Improve-Block-breakNaturally-API.patch
Improve-Item-Rarity-API.patch
Improve-PortalEvents.patch
Improve-Registry.patch
Improve-death-events.patch
Improve-scoreboard-entries.patch
Improve-the-Saddle-API-for-Horses.patch
Introduce-beacon-activation-deactivation-events.patch
Inventory-close.patch
Inventory-getHolder-method-without-block-snapshot.patch
Inventory-removeItemAnySlot.patch
InventoryCloseEvent-Reason-API.patch
Item-Mutation-Fixes.patch
Item-canEntityPickup.patch
Item-no-age-no-player-pickup.patch
ItemStack-API-additions-for-quantity-flags-lore.patch
ItemStack-Tooltip-API.patch
ItemStack-damage-API.patch
ItemStack-editMeta.patch
ItemStack-getMaxItemUseDuration.patch
ItemStack-repair-check-API.patch
Left-handed-API.patch
Limit-setBurnTime-to-valid-short-values.patch
LivingEntity-Active-Item-API.patch
LivingEntity-setKiller.patch
Location.isChunkLoaded-API.patch
Location.toBlockLocation-toCenterLocation.patch
LootTable-API.patch
Make-EntityUnleashEvent-cancellable.patch
Make-shield-blocking-delay-configurable.patch
Make-the-default-permission-message-configurable.patch
Material-API-additions.patch
MerchantRecipe-add-copy-constructor.patch
Misc-Utils.patch
Missing-Entity-API.patch
Mob-Pathfinding-API.patch
Mob-Spawner-API-Enhancements.patch
More-Chest-Block-API.patch
More-CommandBlock-API.patch
More-DragonBattle-API.patch
More-Enchantment-API.patch
More-Lidded-Block-API.patch
More-PotionEffectType-API.patch
More-Projectile-API.patch
More-Raid-API.patch
More-Teleport-API.patch
More-World-API.patch
More-lightning-API.patch
More-vanilla-friendly-methods-to-update-trades.patch
Multi-Block-Change-API.patch
Multiple-Entries-with-Scoreboards.patch
Nameable-Banner-API.patch
Optimize-Hoppers.patch
Option-to-prevent-data-components-copy-in-smithing-r.patch
Paper-Plugins.patch
Paper-Utils.patch
Performance-Concurrency-Improvements-to-Permissions.patch
Player-Chunk-Load-Unload-Events.patch
Player-Entity-Tracking-Events.patch
Player-Tab-List-and-Title-APIs.patch
Player-affects-spawning-API.patch
Player-elytra-boost-API.patch
Player.setPlayerProfile-API.patch
PlayerAttemptPickupItemEvent.patch
PlayerDeathEvent-getItemsToKeep.patch
PlayerDeathEvent-shouldDropExperience.patch
PlayerElytraBoostEvent.patch
PlayerLaunchProjectileEvent.patch
PlayerMoveEvent-Improvements.patch
PlayerNaturallySpawnCreaturesEvent.patch
PlayerPickupExperienceEvent.patch
PlayerPickupItemEvent-setFlyAtPlayer.patch
PlayerReadyArrowEvent.patch
PlayerTeleportEndGatewayEvent.patch
Potential-bed-API.patch
PotionEffect-clone-methods.patch
PreCreatureSpawnEvent.patch
PreSpawnerSpawnEvent.patch
Profile-Lookup-Events.patch
ProfileWhitelistVerifyEvent.patch
Properly-remove-the-experimental-smithing-inventory-.patch
Provide-Chunk-Coordinates-as-a-Long-API.patch
Provide-E-TE-Chunk-count-stat-methods.patch
RangedEntity-API.patch
Reduce-thread-synchronization-in-MetadataStoreBase.patch
Remove-unnecessary-durability-check-in-ItemStack-isS.patch
Replace-ItemFlag.HIDE_POTION_EFFECTS.patch
Return-null-for-empty-String-in-NamespacedKey.fromSt.patch
Rewrite-LogEvents-to-contain-the-source-jars-in-stac.patch
SculkCatalyst-bloom-API.patch
Server-Tick-Events.patch
Set-true-custom-payload-channel-size-limit.patch
Shoulder-Entities-Release-API.patch
SkeletonHorse-Additions.patch
Slime-Pathfinder-Events.patch
Spawn-Reason-API.patch
Stinger-API.patch
Support-cancellation-supression-of-EntityDismount-Ve.patch
Support-components-in-ItemMeta.patch
Suspicious-Effect-Entry-API.patch
System-prop-for-default-config-comment-parsing.patch
Tameable-getOwnerUniqueId-API.patch
Test-changes.patch
Timings-v2.patch
Turtle-API.patch
Use-ASM-for-event-executors.patch
Version-Command-2.0.patch
Villager-Restocks-API.patch
Villager-resetOffers.patch
Warn-on-strange-EventHandler-return-types.patch
Win-Screen-API.patch
WitchConsumePotionEvent.patch
WitchReadyPotionEvent.patch
WitchThrowPotionEvent.patch
WorldCreator-keepSpawnLoaded.patch
Zombie-API-breaking-doors.patch
add-DragonEggFormEvent.patch
add-RespawnFlags-to-PlayerRespawnEvent.patch
add-back-EntityPortalExitEvent.patch
add-consumeFuel-to-FurnaceBurnEvent.patch
add-get-set-drop-chance-to-EntityEquipment.patch
add-hand-to-BlockMultiPlaceEvent.patch
add-isDeeplySleeping-to-HumanEntity.patch
add-missing-Experimental-annotations.patch
add-number-format-api.patch
added-2-new-TargetReasons-for-1.16-mob-behavior.patch
added-PlayerNameEntityEvent.patch
additions-to-PlayerGameModeChangeEvent.patch
ensureServerConversions-API.patch
fix-Instruments.patch
fix-empty-array-elements-in-command-arguments.patch
getPlayerUniqueId-API.patch
improve-BanList-types.patch
isChunkGenerated-API.patch
living-entity-allow-attribute-registration.patch
server
removed-patches-1-20-5
scripts
test-plugin
work
.editorconfig
.gitattributes
.gitignore
.gitmodules
CONTRIBUTING.md
LICENSE.md
README.md
build.gradle.kts
gradle.properties
gradlew
gradlew.bat
settings.gradle.kts
paper-mc/patches/api/BlockDestroyEvent.patch

141 lines
4.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 6 Feb 2019 00:19:33 -0500
Subject: [PATCH] BlockDestroyEvent
Adds an event for when the server is going to destroy a current block,
potentially causing it to drop. This event can be cancelled to avoid
the block destruction, such as preventing signs from popping when
floating in the air.
This can replace many uses of BlockPhysicsEvent
diff --git a/src/main/java/com/destroystokyo/paper/event/block/BlockDestroyEvent.java b/src/main/java/com/destroystokyo/paper/event/block/BlockDestroyEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/event/block/BlockDestroyEvent.java
@@ -0,0 +0,0 @@
+package com.destroystokyo.paper.event.block;
+
+import org.bukkit.block.Block;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.block.BlockExpEvent;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Fired anytime the server intends to 'destroy' a block through some triggering reason.
+ * This does not fire anytime a block is set to air, but only with more direct triggers such
+ * as physics updates, pistons, Entities changing blocks, commands set to "Destroy".
+ * <p>
+ * This event is associated with the game playing a sound effect at the block in question, when
+ * something can be described as "intend to destroy what is there",
+ * <p>
+ * Events such as leaves decaying, pistons retracting (where the block is moving), does NOT fire this event.
+ */
+public class BlockDestroyEvent extends BlockExpEvent implements Cancellable {
+
+ private static final HandlerList HANDLER_LIST = new HandlerList();
+
+ @NotNull private final BlockData newState;
+ private boolean willDrop;
+ private boolean playEffect = true;
+ private BlockData effectBlock;
+
+ private boolean cancelled;
+
+ @ApiStatus.Internal
+ public BlockDestroyEvent(@NotNull Block block, @NotNull BlockData newState, @NotNull BlockData effectBlock, int xp, boolean willDrop) {
+ super(block, xp);
+ this.newState = newState;
+ this.effectBlock = effectBlock;
+ this.willDrop = willDrop;
+ }
+
+ /**
+ * Get the effect that will be played when the block is broken.
+ *
+ * @return block break effect
+ */
+ @NotNull
+ public BlockData getEffectBlock() {
+ return this.effectBlock;
+ }
+
+ /**
+ * Sets the effect that will be played when the block is broken.
+ * Note: {@link BlockDestroyEvent#playEffect()} must be {@code true} in order for this effect to be
+ * played.
+ *
+ * @param effectBlock block effect
+ */
+ public void setEffectBlock(@NotNull BlockData effectBlock) {
+ this.effectBlock = effectBlock;
+ }
+
+ /**
+ * @return The new state of this block (Air, or a Fluid type)
+ */
+ public @NotNull BlockData getNewState() {
+ return this.newState.clone();
+ }
+
+ /**
+ * @return If the server is going to drop the block in question with this destroy event
+ */
+ public boolean willDrop() {
+ return this.willDrop;
+ }
+
+ /**
+ * @param willDrop If the server is going to drop the block in question with this destroy event
+ */
+ public void setWillDrop(boolean willDrop) {
+ this.willDrop = willDrop;
+ }
+
+ /**
+ * @return If the server is going to play the sound effect for this destruction
+ */
+ public boolean playEffect() {
+ return this.playEffect;
+ }
+
+ /**
+ * @param playEffect If the server should play the sound effect for this destruction
+ */
+ public void setPlayEffect(boolean playEffect) {
+ this.playEffect = playEffect;
+ }
+
+ /**
+ * @return If the event is cancelled, meaning the block will not be destroyed
+ */
+ @Override
+ public boolean isCancelled() {
+ return this.cancelled;
+ }
+
+ /**
+ * If the event is cancelled, the block will remain in its previous state.
+ */
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.cancelled = cancel;
+ }
+
+ @NotNull
+ @Override
+ public HandlerList getHandlers() {
+ return HANDLER_LIST;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return HANDLER_LIST;
+ }
+}