PaperMC/Spigot-API-Patches/0131-Provide-Chunk-Coordinates-as-a-Long-API.patch
Mariell 595734a57e
Updated Upstream (Bukkit/CraftBukkit/Spigot) (#4659)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
01e22e09 Misc maven build updates
746f5324 #556: Allow sending messages from specific UUIDs
92b99cde #501: Add PersistentDataHolder to Chunk

CraftBukkit Changes:
4ef13f94 Misc maven build updates
04639f5a #759: Allow sending messages from specific UUIDs
77c894a2 #672: Add PersistentDataHolder to Chunk

Spigot Changes:
57bbdd8e Rebuild patches

Co-authored-by: Shane Freeder <theboyetronic@gmail.com>
2020-10-17 11:39:45 +01:00

72 lines
2.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
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 beac1439c71fb28f1a3baecf56157237e12ccfd5..fa576096e908f8fbdbef53e1bd91215ac9e73ed6 100644
--- a/src/main/java/org/bukkit/Chunk.java
+++ b/src/main/java/org/bukkit/Chunk.java
@@ -28,6 +28,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 79267ebf4fd0d5ea3fc37f62bf50c4064f62fc8d..ff132bd7677e384debf2399ba9b1ffdb932541e9 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -207,6 +207,22 @@ public interface World extends PluginMessageRecipient, Metadatable {
@NotNull
public Chunk getChunkAt(@NotNull Block block);
+ // Paper start
+ /**
+ * Gets the chunk at the specified chunk key, which is the X and Z packed into a long.
+ *
+ * See {@link Chunk#getChunkKey()} for easy access to the key, or you may calculate it as:
+ * long chunkKey = (long) chunkX &amp; 0xffffffffL | ((long) chunkZ &amp; 0xffffffffL) &gt;&gt; 32;
+ *
+ * @param chunkKey The Chunk Key to look up the chunk by
+ * @return The chunk at the specified key
+ */
+ @NotNull
+ public default Chunk getChunkAt(long chunkKey) {
+ return getChunkAt((int) chunkKey, (int) (chunkKey >> 32));
+ }
+ // Paper end
+
/**
* Checks if the specified {@link Chunk} is loaded
*