File tree Expand file tree Collapse file tree
src/main/java/net/coreprotect Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2222import org .bukkit .entity .EntityType ;
2323import org .bukkit .entity .ItemFrame ;
2424import org .bukkit .entity .LivingEntity ;
25+ import org .bukkit .event .Event ;
26+ import org .bukkit .event .block .BlockExplodeEvent ;
2527import org .bukkit .event .block .SignChangeEvent ;
2628import org .bukkit .event .inventory .InventoryType ;
2729import org .bukkit .event .player .PlayerInteractEvent ;
@@ -316,6 +318,17 @@ public boolean isWaxed(Sign sign) {
316318 return false ;
317319 }
318320
321+ @ Override
322+ public boolean shouldLogExplosion (Event event ){
323+ return true ;
324+ }
325+
326+ @ Override
327+ public Material getExplodedBlock (BlockExplodeEvent event ){
328+ // accoding to the Bukkit docs this will always return air
329+ return event .getBlock ().getType ();
330+ }
331+
319332 @ Override
320333 public void setGlowing (Sign sign , boolean isFront , boolean isGlowing ) {
321334 // Base implementation does nothing
Original file line number Diff line number Diff line change 1414import org .bukkit .entity .Entity ;
1515import org .bukkit .entity .EntityType ;
1616import org .bukkit .entity .LivingEntity ;
17+ import org .bukkit .event .Event ;
18+ import org .bukkit .event .block .BlockExplodeEvent ;
1719import org .bukkit .event .block .SignChangeEvent ;
1820import org .bukkit .event .inventory .InventoryType ;
1921import org .bukkit .event .player .PlayerInteractEvent ;
@@ -413,6 +415,27 @@ public interface BukkitInterface {
413415 */
414416 boolean isSignFront (SignChangeEvent event );
415417
418+
419+
420+ /**
421+ * Checks whether an explosion event should be logged or not. (i.e. wind charge explosions)
422+ *
423+ * @param event
424+ * The explosion event (Block or Entity ExplodeEvent)
425+ * @return true if the explosion should affect blocks
426+ */
427+ boolean shouldLogExplosion (Event event );
428+
429+
430+ /**
431+ * Gets the material of the block that exploded
432+ *
433+ * @param event
434+ * The block explosion event
435+ * @return the material of the block that caused the explosion
436+ */
437+ Material getExplodedBlock (BlockExplodeEvent event );
438+
416439 // --------------------------------------------------------------------------
417440 // Registry methods
418441 // --------------------------------------------------------------------------
Original file line number Diff line number Diff line change 1313import org .bukkit .block .Sign ;
1414import org .bukkit .block .sign .Side ;
1515import org .bukkit .entity .Arrow ;
16+ import org .bukkit .event .block .BlockExplodeEvent ;
1617import org .bukkit .event .block .SignChangeEvent ;
1718import org .bukkit .event .player .PlayerInteractEvent ;
1819import org .bukkit .inventory .ItemStack ;
@@ -297,4 +298,10 @@ else if (Boolean.FALSE.equals(hasBasePotionType)) {
297298 return super .getArrowMeta (arrow , itemStack );
298299 }
299300 }
301+
302+ @ Override
303+ public Material getExplodedBlock (BlockExplodeEvent event ){
304+ // accoding to the Bukkit docs this will always return air
305+ return event .getExplodedBlockState ().getType ();
306+ }
300307}
Original file line number Diff line number Diff line change 66import java .util .Set ;
77
88import org .bukkit .Bukkit ;
9+ import org .bukkit .ExplosionResult ;
910import org .bukkit .Keyed ;
1011import org .bukkit .Material ;
1112import org .bukkit .NamespacedKey ;
1213import org .bukkit .Tag ;
1314import org .bukkit .entity .EntityType ;
15+ import org .bukkit .event .Event ;
16+ import org .bukkit .event .block .BlockExplodeEvent ;
17+ import org .bukkit .event .entity .EntityExplodeEvent ;
1418import org .bukkit .event .inventory .InventoryType ;
1519
20+
1621import net .coreprotect .model .BlockGroup ;
1722
1823/**
@@ -218,4 +223,18 @@ public Set<Material> shelfMaterials() {
218223
219224 return SHELVES ;
220225 }
226+
227+ @ Override
228+ public boolean shouldLogExplosion (Event event ){
229+ ExplosionResult result = null ;
230+
231+ if (event instanceof EntityExplodeEvent ){
232+ result = ((EntityExplodeEvent )event ).getExplosionResult ();
233+ } else if (event instanceof BlockExplodeEvent ){
234+ result = ((BlockExplodeEvent )event ).getExplosionResult ();
235+ }
236+ return !(result == ExplosionResult .KEEP ||
237+ result == ExplosionResult .TRIGGER_BLOCK
238+ );
239+ }
221240}
Original file line number Diff line number Diff line change @@ -146,18 +146,25 @@ else if (scanType.hasGravity() && Config.getConfig(world).BLOCK_MOVEMENT) {
146146
147147 @ EventHandler (priority = EventPriority .MONITOR )
148148 protected void onBlockExplode (BlockExplodeEvent event ) {
149- Block eventBlock = event .getBlock ();
150- World world = eventBlock .getLocation ().getWorld ();
151- String user = "" ;
152- if (!eventBlock .getType ().equals (Material .AIR ) && !eventBlock .getType ().equals (Material .CAVE_AIR )) {
153- user = eventBlock .getType ().name ().toLowerCase (Locale .ROOT );
154- }
155- if (user .contains ("tnt" )) {
156- user = "#tnt" ;
149+ Material eventMaterial = BukkitAdapter .ADAPTER .getExplodedBlock (event );
150+ World world = event .getBlock ().getLocation ().getWorld ();
151+
152+ if (!BukkitAdapter .ADAPTER .shouldLogExplosion (event )){
153+ return ;
157154 }
158- else if (user .contains ("end_crystal" )) {
159- user = "#end_crystal" ;
155+
156+ String user = "" ;
157+ if (!eventMaterial .equals (Material .AIR ) && !eventMaterial .equals (Material .CAVE_AIR )) {
158+ user = eventMaterial .name ().toLowerCase (Locale .ROOT );
159+
160+ if (user .contains ("respawn_anchor" )) {
161+ user = "#respawn_anchor" ;
162+ }
163+ else if (user .contains ("_bed" )) {
164+ user = "#bed" ;
165+ }
160166 }
167+
161168 if (!user .startsWith ("#" )) {
162169 user = "#explosion" ;
163170 }
Original file line number Diff line number Diff line change 11package net .coreprotect .listener .entity ;
22
3+ import org .bukkit .ExplosionResult ;
34import org .bukkit .World ;
45import org .bukkit .entity .Creeper ;
56import org .bukkit .entity .EnderCrystal ;
1516import org .bukkit .event .Listener ;
1617import org .bukkit .event .entity .EntityExplodeEvent ;
1718
19+ import net .coreprotect .bukkit .BukkitAdapter ;
1820import net .coreprotect .config .Config ;
1921import net .coreprotect .consumer .Queue ;
2022import net .coreprotect .listener .block .BlockExplodeListener ;
@@ -24,7 +26,8 @@ public final class EntityExplodeListener extends Queue implements Listener {
2426 @ EventHandler (priority = EventPriority .MONITOR )
2527 protected void onEntityExplode (EntityExplodeEvent event ) {
2628 Entity entity = event .getEntity ();
27- if (entity .getType ().name ().equals ("WIND_CHARGE" ) || entity .getType ().name ().equals ("BREEZE_WIND_CHARGE" )) {
29+
30+ if (!BukkitAdapter .ADAPTER .shouldLogExplosion (event )){
2831 return ;
2932 }
3033
You can’t perform that action at this time.
0 commit comments