From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jakub Zacek Date: Mon, 4 Oct 2021 08:29:36 +0200 Subject: [PATCH] Add methods to find targets for lightning strikes diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java index 2173d1e675bdb90f3117614e6e52dac61b4fada9..887ad76c3ea44f0dcfcd21f30c0883e023f1ac3a 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java @@ -761,6 +761,37 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @NotNull public LightningStrike strikeLightningEffect(@NotNull Location loc); + // Paper start + /** + * Finds the location of the nearest unobstructed Lightning Rod in a 128-block + * radius around the given location. Returns {@code null} if no Lightning Rod is found. + * + *

Note: To activate a Lightning Rod, the position one block above it must be struck by lightning.

+ * + * @param location {@link Location} to search for Lightning Rod around + * @return {@link Location} of Lightning Rod or {@code null} + */ + @Nullable + public Location findLightningRod(@NotNull Location location); + + /** + * Finds a target {@link Location} for lightning to strike. + *

It selects from (in the following order):

+ *
    + *
  1. the block above the nearest Lightning Rod, found using {@link World#findLightningRod(Location)}
  2. + *
  3. a random {@link LivingEntity} that can see the sky in a 6x6 cuboid + * around input X/Z coordinates. Y ranges from the highest motion-blocking + * block at the input X/Z - 3 to the height limit + 3
  4. + *
+ *

Returns {@code null} if no target is found.

+ * + * @param location {@link Location} to search for target around + * @return lightning target or {@code null} + */ + @Nullable + public Location findLightningTarget(@NotNull Location location); + // Paper end + /** * Get a list of all entities in this World *