f09fed894f
--- work/Bukkit Submodule work/Bukkit 6a4242cb..337955e3: > SPIGOT-5468: Improve Beehive TileEntity API > #473: Add an API for passing the heightmap to getHighestBlockAt* method --- work/CraftBukkit Submodule work/CraftBukkit 807a677e..708be695: > SPIGOT-5468: Improve Beehive TileEntity API > #624: Add an API for passing the heightmap to getHighestBlockAt* method > MC-135989, SPIGOT-5564: Don't kick players for flight while riptiding This deprecates the Paper getHighestBlockAt HeightMap APIs now that Bukkit has added their own. These methods will stick around long enough for people to migrate. Their API is pretty much the same as ours, migration should be quick and easy.
75 lines
2.4 KiB
Diff
75 lines
2.4 KiB
Diff
From 95f8aab973c23ae9661bd35f135f30589ab91a88 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 f82063af..ae414b51 100644
|
|
--- a/src/main/java/org/bukkit/World.java
|
|
+++ b/src/main/java/org/bukkit/World.java
|
|
@@ -206,6 +206,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 & 0xffffffffL | ((long) chunkZ & 0xffffffffL) >> 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.25.0
|
|
|