Paper/Spigot-API-Patches/0132-Provide-Chunk-Coordinates-as-a-Long-API.patch
Shane Freeder 9a7ca3dbc5
Updated Upstream (Bukkit/CraftBukkit/Spigot)
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:
564ed152 #482: Add a DragonBattle API to manipulate respawn phases etc
9f2fd967 #474: Add ability to set other plugin names as provided API so others can still depend on it

CraftBukkit Changes:
fc318cc1 #642: Add a DragonBattle API to manipulate respawn phases etc
796eb15a #644: Fix ChunkMapDistance#removeAllTicketsFor not propagating ticket level updates
a6f80937 SPIGOT-5606: call BlockRedstoneEvent for fence gates

Spigot Changes:
a03b1fdb Rebuild patches
2020-03-26 02:44:23 +00:00

76 lines
2.4 KiB
Diff

From 71e820cd9199e5769916ef29cb8bfd68fccd6e69 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 95e485ee..0bbef14a 100644
--- a/src/main/java/org/bukkit/Chunk.java
+++ b/src/main/java/org/bukkit/Chunk.java
@@ -27,6 +27,32 @@ public interface Chunk {
*/
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 889756b1..e5b76d59 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
*
--
2.26.0