001    package org.bukkit;
002    
003    import org.bukkit.block.Block;
004    import org.bukkit.block.BlockState;
005    import org.bukkit.entity.Entity;
006    
007    /**
008     * Represents a chunk of blocks
009     */
010    public interface Chunk {
011    
012        /**
013         * Gets the X-coordinate of this chunk
014         *
015         * @return X-coordinate
016         */
017        int getX();
018    
019        /**
020         * Gets the Z-coordinate of this chunk
021         *
022         * @return Z-coordinate
023         */
024        int getZ();
025    
026        /**
027         * Gets the world containing this chunk
028         *
029         * @return Parent World
030         */
031        World getWorld();
032    
033        /**
034         * Gets a block from this chunk
035         *
036         * @param x 0-15
037         * @param y 0-127
038         * @param z 0-15
039         * @return the Block
040         */
041        Block getBlock(int x, int y, int z);
042    
043        /**
044         * Capture thread-safe read-only snapshot of chunk data
045         *
046         * @return ChunkSnapshot
047         */
048        ChunkSnapshot getChunkSnapshot();
049    
050        /**
051         * Capture thread-safe read-only snapshot of chunk data
052         *
053         * @param includeMaxblocky - if true, snapshot includes per-coordinate
054         *     maximum Y values
055         * @param includeBiome - if true, snapshot includes per-coordinate biome
056         *     type
057         * @param includeBiomeTempRain - if true, snapshot includes per-coordinate
058         *     raw biome temperature and rainfall
059         * @return ChunkSnapshot
060         */
061        ChunkSnapshot getChunkSnapshot(boolean includeMaxblocky, boolean includeBiome, boolean includeBiomeTempRain);
062    
063        /**
064         * Get a list of all entities in the chunk.
065         *
066         * @return The entities.
067         */
068        Entity[] getEntities();
069    
070        /**
071         * Get a list of all tile entities in the chunk.
072         *
073         * @return The tile entities.
074         */
075        BlockState[] getTileEntities();
076    
077        /**
078         * Checks if the chunk is loaded.
079         *
080         * @return True if it is loaded.
081         */
082        boolean isLoaded();
083    
084        /**
085         * Loads the chunk.
086         *
087         * @param generate Whether or not to generate a chunk if it doesn't
088         *     already exist
089         * @return true if the chunk has loaded successfully, otherwise false
090         */
091        boolean load(boolean generate);
092    
093        /**
094         * Loads the chunk.
095         *
096         * @return true if the chunk has loaded successfully, otherwise false
097         */
098        boolean load();
099    
100        /**
101         * Unloads and optionally saves the Chunk
102         *
103         * @param save Controls whether the chunk is saved
104         * @param safe Controls whether to unload the chunk when players are
105         *     nearby
106         * @return true if the chunk has unloaded successfully, otherwise false
107         */
108        boolean unload(boolean save, boolean safe);
109    
110        /**
111         * Unloads and optionally saves the Chunk
112         *
113         * @param save Controls whether the chunk is saved
114         * @return true if the chunk has unloaded successfully, otherwise false
115         */
116        boolean unload(boolean save);
117    
118        /**
119         * Unloads and optionally saves the Chunk
120         *
121         * @return true if the chunk has unloaded successfully, otherwise false
122         */
123        boolean unload();
124    }