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 ce1f3ffbab6a8dc8395e3a5b74a7874bb6b38aa9..90270582b75705e42b4690cadb6d15de3188d98f 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. + * + *

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 *