Skip to content

Commit c90c483

Browse files
authored
Add Cause tracking for SulfurCube (#2295)
1 parent 49ebc79 commit c90c483

5 files changed

Lines changed: 28 additions & 6 deletions

File tree

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/cause/Cause.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.bukkit.entity.LightningStrike;
4141
import org.bukkit.entity.Player;
4242
import org.bukkit.entity.Projectile;
43+
import org.bukkit.entity.SulfurCube;
4344
import org.bukkit.entity.TNTPrimed;
4445
import org.bukkit.entity.Tameable;
4546
import org.bukkit.entity.Vehicle;
@@ -117,7 +118,7 @@ public boolean isKnown() {
117118
return false;
118119
}
119120

120-
if (object instanceof TNTPrimed || object instanceof Vehicle) {
121+
if (object instanceof TNTPrimed || object instanceof Vehicle || object instanceof SulfurCube) {
121122
if (!PaperLib.isPaper()) {
122123
return false;
123124
}

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import org.bukkit.entity.Mob;
8484
import org.bukkit.entity.Painting;
8585
import org.bukkit.entity.Player;
86+
import org.bukkit.entity.SulfurCube;
8687
import org.bukkit.entity.Tameable;
8788
import org.bukkit.entity.ThrownPotion;
8889
import org.bukkit.entity.WindCharge;
@@ -895,7 +896,18 @@ public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
895896
if (matchingItem != null && hasInteractBypass(world, matchingItem)) {
896897
useEntityEvent.setAllowed(true);
897898
}
898-
Events.fireToCancel(event, useEntityEvent);
899+
if (!Events.fireToCancel(event, useEntityEvent)) {
900+
/* Sulfur cube doesn't have API for interaction/ignition source tracking */
901+
if(entity instanceof SulfurCube) {
902+
/* Remove player in case of using shears */
903+
if(item.getType() == Material.SHEARS) {
904+
Cause.untrackParentCause(entity);
905+
/* Save player overwise */
906+
} else {
907+
Cause.trackParentCause(entity, player);
908+
}
909+
}
910+
}
899911
}
900912

901913
@EventHandler(ignoreCancelled = true)
@@ -917,6 +929,8 @@ public void onEntityDamage(EntityDamageEvent event) {
917929
eventToFire.getRelevantFlags().add(Flags.FIREWORK_DAMAGE);
918930
} else if (damager instanceof Creeper) {
919931
eventToFire.getRelevantFlags().add(Flags.CREEPER_EXPLOSION);
932+
} else if (damager instanceof SulfurCube) {
933+
eventToFire.getRelevantFlags().add(Flags.TNT);
920934
}
921935
if (Events.fireToCancel(event, eventToFire)) {
922936
if (damager instanceof Tameable && damager instanceof Mob) {

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import org.bukkit.entity.Item;
5858
import org.bukkit.entity.ItemFrame;
5959
import org.bukkit.entity.Player;
60+
import org.bukkit.entity.SulfurCube;
6061
import org.bukkit.entity.Tameable;
6162
import org.bukkit.event.Event;
6263
import org.bukkit.event.Event.Result;
@@ -222,7 +223,7 @@ public void onBreakBlock(final BreakBlockEvent event) {
222223
String what;
223224

224225
/* TNT */
225-
if (event.getCause().find(EntityType.TNT, EntityType.TNT_MINECART) != null) {
226+
if (event.getCause().find(EntityType.TNT, EntityType.TNT_MINECART, EntityType.SULFUR_CUBE) != null) {
226227
canBreak = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.BLOCK_BREAK, Flags.TNT));
227228
what = "use dynamite";
228229

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.bukkit.entity.LivingEntity;
6262
import org.bukkit.entity.Player;
6363
import org.bukkit.entity.Projectile;
64+
import org.bukkit.entity.SulfurCube;
6465
import org.bukkit.entity.TNTPrimed;
6566
import org.bukkit.entity.Tameable;
6667
import org.bukkit.entity.WindCharge;
@@ -487,7 +488,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
487488
event.blockList().clear();
488489
return;
489490
}
490-
} else if (ent instanceof TNTPrimed || ent instanceof ExplosiveMinecart) {
491+
} else if (ent instanceof TNTPrimed || ent instanceof ExplosiveMinecart || ent instanceof SulfurCube) {
491492
if (wcfg.blockTNTExplosions) {
492493
event.setCancelled(true);
493494
return;
@@ -615,7 +616,8 @@ public void onExplosionPrime(ExplosionPrimeEvent event) {
615616
return;
616617
}
617618
} else if (event.getEntityType() == EntityType.TNT
618-
|| event.getEntityType() == EntityType.TNT_MINECART) {
619+
|| event.getEntityType() == EntityType.TNT_MINECART
620+
|| event.getEntityType() == EntityType.SULFUR_CUBE) {
619621
if (wcfg.blockTNTExplosions) {
620622
event.setCancelled(true);
621623
return;

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.bukkit.entity.Projectile;
4444
import org.bukkit.entity.SpectralArrow;
4545
import org.bukkit.entity.Steerable;
46+
import org.bukkit.entity.SulfurCube;
4647
import org.bukkit.entity.TNTPrimed;
4748
import org.bukkit.entity.Tameable;
4849
import org.bukkit.entity.Vehicle;
@@ -78,7 +79,9 @@ public static boolean isTamed(@Nullable Entity entity) {
7879
* @return true if TNT based
7980
*/
8081
public static boolean isTNTBased(Entity entity) {
81-
return entity instanceof TNTPrimed || entity instanceof ExplosiveMinecart;
82+
return entity instanceof TNTPrimed
83+
|| entity instanceof ExplosiveMinecart
84+
|| entity instanceof SulfurCube sulfurCube && sulfurCube.canExplode();
8285
}
8386

8487
/**
@@ -265,6 +268,7 @@ public static boolean isPluginSpawning(CreatureSpawnEvent.SpawnReason spawnReaso
265268
case Wither wither -> Flags.WITHER_DAMAGE;
266269
case Creeper creeper -> Flags.CREEPER_EXPLOSION;
267270
case TNTPrimed tnt -> Flags.TNT;
271+
case SulfurCube sulfurCube -> Flags.TNT;
268272
case ExplosiveMinecart minecart -> Flags.TNT;
269273
case EnderDragon dragon -> Flags.ENDERDRAGON_BLOCK_DAMAGE;
270274
case null, default -> Flags.OTHER_EXPLOSION;

0 commit comments

Comments
 (0)