mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-29 19:51:30 +01:00
Provide Chunk Coordinates as a Long API
Allows you to easily access the chunks X/z as a long, and a method to look up by the long key too.
This commit is contained in:
parent
0961228e4c
commit
1dd927ee10
@ -36,6 +36,32 @@ public interface Chunk extends PersistentDataHolder {
|
||||
*/
|
||||
int getZ();
|
||||
|
||||
// Paper start
|
||||
/**
|
||||
* @return The Chunks X and Z coordinates packed into a long
|
||||
*/
|
||||
default long getChunkKey() {
|
||||
return getChunkKey(getX(), getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param loc Location to get chunk key
|
||||
* @return Location's chunk coordinates packed into a long
|
||||
*/
|
||||
static long getChunkKey(@NotNull Location loc) {
|
||||
return getChunkKey((int) Math.floor(loc.getX()) >> 4, (int) Math.floor(loc.getZ()) >> 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x X Coordinate
|
||||
* @param z Z Coordinate
|
||||
* @return Chunk coordinates packed into a long
|
||||
*/
|
||||
static long getChunkKey(int x, int z) {
|
||||
return (long) x & 0xffffffffL | ((long) z & 0xffffffffL) << 32;
|
||||
}
|
||||
// Paper end
|
||||
|
||||
/**
|
||||
* Gets the world containing this chunk
|
||||
*
|
||||
|
@ -182,6 +182,37 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
||||
@NotNull
|
||||
public Chunk getChunkAt(@NotNull Block block);
|
||||
|
||||
// Paper start - chunk long key API
|
||||
/**
|
||||
* Gets the chunk at the specified chunk key, which is the X and Z packed into a long.
|
||||
* <p>
|
||||
* See {@link Chunk#getChunkKey()} for easy access to the key, or you may calculate it as:
|
||||
* long chunkKey = (long) chunkX & 0xffffffffL | ((long) chunkZ & 0xffffffffL) >> 32;
|
||||
*
|
||||
* @param chunkKey The Chunk Key to look up the chunk by
|
||||
* @return The chunk at the specified key
|
||||
*/
|
||||
@NotNull
|
||||
default Chunk getChunkAt(long chunkKey) {
|
||||
return getChunkAt(chunkKey, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the chunk at the specified chunk key, which is the X and Z packed into a long.
|
||||
* <p>
|
||||
* See {@link Chunk#getChunkKey()} for easy access to the key, or you may calculate it as:
|
||||
* long chunkKey = (long) chunkX & 0xffffffffL | ((long) chunkZ & 0xffffffffL) >> 32;
|
||||
*
|
||||
* @param chunkKey The Chunk Key to look up the chunk by
|
||||
* @param generate Whether the chunk should be fully generated or not
|
||||
* @return The chunk at the specified key
|
||||
*/
|
||||
@NotNull
|
||||
default Chunk getChunkAt(long chunkKey, boolean generate) {
|
||||
return getChunkAt((int) chunkKey, (int) (chunkKey >> 32), generate);
|
||||
}
|
||||
// Paper end - chunk long key API
|
||||
|
||||
/**
|
||||
* Checks if the specified {@link Chunk} is loaded
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user