From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 15 Sep 2020 21:59:16 -0700 Subject: [PATCH] Add StructureLocateEvent diff --git a/src/main/java/io/papermc/paper/event/world/StructureLocateEvent.java b/src/main/java/io/papermc/paper/event/world/StructureLocateEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..45b6694fc5741831e2df638b1f760a3ca28a4907 --- /dev/null +++ b/src/main/java/io/papermc/paper/event/world/StructureLocateEvent.java @@ -0,0 +1,155 @@ +package io.papermc.paper.event.world; + +import org.bukkit.Location; +import org.bukkit.StructureType; +import org.bukkit.World; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.world.WorldEvent; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Called before a structure/feature is located. + * This happens when: + * + */ +public class StructureLocateEvent extends WorldEvent implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + private final Location origin; + private Location result = null; + private StructureType type; + private int radius; + private boolean findUnexplored; + private boolean cancelled = false; + + public StructureLocateEvent(@NotNull World world, @NotNull Location origin, @NotNull StructureType structureType, int radius, boolean findUnexplored) { + super(world); + this.origin = origin; + this.type = structureType; + this.radius = radius; + this.findUnexplored = findUnexplored; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return handlers; + } + + /** + * Gets the location set as the structure location, if it was defined. + *

+ * Returns {@code null} if it has not been set by {@link StructureLocateEvent#setResult(Location)}. + * Since this event fires before the search is done, the actual location is unknown at this point. + * + * @return The result location, if it has been set. null if it has not. + * @see World#locateNearestStructure(Location, StructureType, int, boolean) + */ + @Nullable + public Location getResult() { + return result; + } + + /** + * Sets the result {@link Location}. This causes the search to be skipped, and the location passed here to be used as the result. + * + * @param result the {@link Location} of the structure. + */ + public void setResult(@Nullable Location result) { + this.result = result; + } + + /** + * Gets the {@link StructureType} that is to be located. + * + * @return the structure type. + */ + @NotNull + public StructureType getType() { + return type; + } + + /** + * Sets the {@link StructureType} that is to be located. + * + * @param type the structure type. + */ + public void setType(@NotNull StructureType type) { + this.type = type; + } + + /** + * Gets the {@link Location} from which the search is to be conducted. + * + * @return {@link Location} where search begins + */ + @NotNull + public Location getOrigin() { + return origin; + } + + /** + * Gets the search radius in which to attempt locating the structure. + *

+ * This radius may not always be obeyed during the structure search! + * + * @return the search radius. + */ + public int getRadius() { + return radius; + } + + /** + * Sets the search radius in which to attempt locating the structure. + *

+ * This radius may not always be obeyed during the structure search! + * + * @param radius the search radius. + */ + public void setRadius(int radius) { + this.radius = radius; + } + + /** + * Gets whether to search exclusively for unexplored structures. + *

+ * As with the search radius, this value is not always obeyed. + * + * @return Whether to search for only unexplored structures. + */ + public boolean shouldFindUnexplored() { + return findUnexplored; + } + + /** + * Sets whether to search exclusively for unexplored structures. + *

+ * As with the search radius, this value is not always obeyed. + * + * @param findUnexplored Whether to search for only unexplored structures. + */ + public void setFindUnexplored(boolean findUnexplored) { + this.findUnexplored = findUnexplored; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } +}