From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jakub Zacek <dawon@dawon.eu> 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 d3fc033aba36c5fd99846e9200ed0071fddd6045..637480c622bdb170456baabe71d84e446ebd7b13 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java @@ -692,6 +692,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. + * + * <p>Note: To activate a Lightning Rod, the position one block above it must be struck by lightning.</p> + * + * @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. + * <p>It selects from (in the following order):</p> + * <ol> + * <li>the block above the nearest Lightning Rod, found using {@link World#findLightningRod(Location)}</li> + * <li>a random {@link LivingEntity} that can see the sky in a 6x6 cuboid + * around input X/Z coordinates. Y ranges from <i>the highest motion-blocking + * block at the input X/Z - 3</i> to <i>the height limit + 3</i></li> + * </ol> + * <p>Returns {@code null} if no target is found.</p> + * + * @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 *