#963: Add API for in-world structures

By: coll1234567 <joshl5324@gmail.com>
This commit is contained in:
Bukkit/Spigot 2024-02-04 10:04:33 +11:00
parent 9a36ebd659
commit 7087785389
4 changed files with 108 additions and 0 deletions

View file

@ -6,6 +6,8 @@ import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Entity;
import org.bukkit.generator.structure.GeneratedStructure;
import org.bukkit.generator.structure.Structure;
import org.bukkit.persistence.PersistentDataHolder;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
@ -263,6 +265,26 @@ public interface Chunk extends PersistentDataHolder {
@NotNull
LoadLevel getLoadLevel();
/**
* Gets all generated structures that intersect this chunk. <br>
* If no structures are present an empty collection will be returned.
*
* @return a collection of placed structures in this chunk
*/
@NotNull
Collection<GeneratedStructure> getStructures();
/**
* Gets all generated structures of a given {@link Structure} that intersect
* this chunk. <br>
* If no structures are present an empty collection will be returned.
*
* @param structure the structure to find
* @return a collection of placed structures in this chunk
*/
@NotNull
Collection<GeneratedStructure> getStructures(@NotNull Structure structure);
/**
* An enum to specify the load level of a chunk.
*/

View file

@ -26,6 +26,7 @@ import org.bukkit.generator.BiomeProvider;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.generator.WorldInfo;
import org.bukkit.generator.structure.GeneratedStructure;
import org.bukkit.generator.structure.Structure;
import org.bukkit.generator.structure.StructureType;
import org.bukkit.inventory.ItemStack;
@ -2869,6 +2870,33 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@NotNull
public Set<FeatureFlag> getFeatureFlags();
/**
* Gets all generated structures that intersect the chunk at the given
* coordinates. <br>
* If no structures are present an empty collection will be returned.
*
* @param x X-coordinate of the chunk
* @param z Z-coordinate of the chunk
* @return a collection of placed structures in the chunk at the given
* coordinates
*/
@NotNull
public Collection<GeneratedStructure> getStructures(int x, int z);
/**
* Gets all generated structures of a given {@link Structure} that intersect
* the chunk at the given coordinates. <br>
* If no structures are present an empty collection will be returned.
*
* @param x X-coordinate of the chunk
* @param z Z-coordinate of the chunk
* @param structure the structure to find
* @return a collection of placed structures in the chunk at the given
* coordinates
*/
@NotNull
public Collection<GeneratedStructure> getStructures(int x, int z, @NotNull Structure structure);
/**
* Represents various map environment types that a world may be
*/

View file

@ -0,0 +1,38 @@
package org.bukkit.generator.structure;
import java.util.Collection;
import org.bukkit.persistence.PersistentDataHolder;
import org.bukkit.util.BoundingBox;
import org.jetbrains.annotations.NotNull;
/**
* Represents a structure placed in the world.
*
* @see StructurePiece
*/
public interface GeneratedStructure extends PersistentDataHolder {
/**
* Gets the bounding box of this placed structure.
*
* @return bounding box of this placed structure
*/
@NotNull
public BoundingBox getBoundingBox();
/**
* Gets the structure that this PlacedStructure represents.
*
* @return the structure that this PlacedStructure represents
*/
@NotNull
public Structure getStructure();
/**
* Gets all the {@link StructurePiece} that make up this PlacedStructure.
*
* @return a collection of all the StructurePieces
*/
@NotNull
public Collection<StructurePiece> getPieces();
}

View file

@ -0,0 +1,20 @@
package org.bukkit.generator.structure;
import org.bukkit.util.BoundingBox;
import org.jetbrains.annotations.NotNull;
/**
* Represents an individual part of a {@link GeneratedStructure}.
*
* @see GeneratedStructure
*/
public interface StructurePiece {
/**
* Gets the bounding box of this structure piece.
*
* @return bounding box of this structure piece
*/
@NotNull
public BoundingBox getBoundingBox();
}