mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-09 06:50:32 +08:00
9a7ca3dbc5
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 etc796eb15a
#644: Fix ChunkMapDistance#removeAllTicketsFor not propagating ticket level updatesa6f80937
SPIGOT-5606: call BlockRedstoneEvent for fence gates Spigot Changes: a03b1fdb Rebuild patches
76 lines
2.4 KiB
Diff
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 & 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.26.0
|
|
|