diff options
Diffstat (limited to 'patches/api/0133-Provide-Chunk-Coordinates-as-a-Long-API.patch')
-rw-r--r-- | patches/api/0133-Provide-Chunk-Coordinates-as-a-Long-API.patch | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/patches/api/0133-Provide-Chunk-Coordinates-as-a-Long-API.patch b/patches/api/0133-Provide-Chunk-Coordinates-as-a-Long-API.patch new file mode 100644 index 0000000000..c239c5731e --- /dev/null +++ b/patches/api/0133-Provide-Chunk-Coordinates-as-a-Long-API.patch @@ -0,0 +1,87 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar <[email protected]> +Date: Sat, 4 Aug 2018 19:37:35 -0400 +Subject: [PATCH] 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. + +diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chunk.java +index efbfed855248cff8b4bdbfc181d3e82058df4749..766d643f0fe79660942fdad25e39e488e9379419 100644 +--- a/src/main/java/org/bukkit/Chunk.java ++++ b/src/main/java/org/bukkit/Chunk.java +@@ -33,6 +33,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 + * +diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java +index ffe6c8be86fc93d39e256a89e5016e3025afbe5c..315ecb5dc0f33edfef893ead1297c8165d292250 100644 +--- a/src/main/java/org/bukkit/World.java ++++ b/src/main/java/org/bukkit/World.java +@@ -180,6 +180,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 + * |