|
67 | 67 | import org.bukkit.block.data.Waterlogged; |
68 | 68 | import org.bukkit.block.data.type.Dispenser; |
69 | 69 | import org.bukkit.entity.AreaEffectCloud; |
| 70 | +import org.bukkit.entity.Arrow; |
70 | 71 | import org.bukkit.entity.BreezeWindCharge; |
71 | 72 | import org.bukkit.entity.Creeper; |
72 | 73 | import org.bukkit.entity.Entity; |
@@ -913,11 +914,19 @@ public void onEntityDamage(EntityDamageEvent event) { |
913 | 914 |
|
914 | 915 | @EventHandler(ignoreCancelled = true) |
915 | 916 | public void onEntityCombust(EntityCombustEvent event) { |
916 | | - if (event instanceof EntityCombustByBlockEvent) { |
| 917 | + if (event instanceof EntityCombustByBlockEvent combustByBlockEvent) { |
917 | 918 | // at the time of writing, spigot is throwing null for the event's combuster. this causes lots of issues downstream. |
918 | 919 | // whenever (i mean if ever) it is fixed, use getCombuster again instead of the current block |
919 | | - Events.fireToCancel(event, new DamageEntityEvent(event, create(event.getEntity().getLocation().getBlock()), event.getEntity())); |
| 920 | + Block combuster = combustByBlockEvent.getCombuster(); |
| 921 | + Events.fireToCancel(event, new DamageEntityEvent(event, |
| 922 | + create(combuster == null ? event.getEntity().getLocation().getBlock() : combuster), event.getEntity())); |
920 | 923 | } else if (event instanceof EntityCombustByEntityEvent) { |
| 924 | + if (event.getEntity() instanceof Arrow) { |
| 925 | + // this only happens from the Flame enchant. igniting arrows in other ways (eg with lava) doesn't even |
| 926 | + // throw the combust event, not even the CombustByBlock event... they're also very buggy and don't even |
| 927 | + // show as lit on the client consistently |
| 928 | + return; |
| 929 | + } |
921 | 930 | Events.fireToCancel(event, new DamageEntityEvent(event, create(((EntityCombustByEntityEvent) event).getCombuster()), event.getEntity())); |
922 | 931 | } |
923 | 932 | } |
|
0 commit comments