From 7d48a46bc295e12426d4a7b5530448ef6a45bd3e Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Wed, 29 Dec 2021 10:34:38 +0100 Subject: [PATCH] Fix block key with negative y unpacking (#7219) Fixes #7218 --- ...Blocks-to-be-accessed-via-a-long-key.patch | 20 ++++++++++++++----- .../0182-Add-BlockSoundGroup-interface.patch | 4 ++-- ...-Add-effect-to-block-break-naturally.patch | 4 ++-- ...-Add-methods-to-get-translation-keys.patch | 4 ++-- patches/api/0235-Add-Destroy-Speed-API.patch | 4 ++-- ...0246-Additional-Block-Material-API-s.patch | 4 ++-- patches/api/0277-Add-Block-isValidTool.patch | 4 ++-- ...Collidable-methods-to-various-places.patch | 4 ++-- 8 files changed, 29 insertions(+), 19 deletions(-) diff --git a/patches/api/0140-Allow-Blocks-to-be-accessed-via-a-long-key.patch b/patches/api/0140-Allow-Blocks-to-be-accessed-via-a-long-key.patch index 9f331cb08c..14b5ddf640 100644 --- a/patches/api/0140-Allow-Blocks-to-be-accessed-via-a-long-key.patch +++ b/patches/api/0140-Allow-Blocks-to-be-accessed-via-a-long-key.patch @@ -48,7 +48,7 @@ index 36ed248f0716f2cc465c08ab851b7d83d4c7c0a7..58728a0f0722b378efa129e26f0c822b * @return A new location where X/Y/Z are the center of the block */ diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index d3d0e4448135f6c0440c15e0dd3fc15c2616263a..7ed2442031cdcc429aabe91d639871566359ba53 100644 +index dbfa490c997c515007fc0d86ee5e2b4b98d174e5..4789dafc716c3db63983d49d7af75e3f374f4f51 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java @@ -90,6 +90,38 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @@ -91,10 +91,10 @@ index d3d0e4448135f6c0440c15e0dd3fc15c2616263a..7ed2442031cdcc429aabe91d63987156 * Gets the highest non-empty (impassable) coordinate at the given * coordinates. diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 62ab55729e69bfac8eb4b40d877b945d95df27cd..79c0fa47a0d733d1547f8926d88169939c986d8c 100644 +index 62ab55729e69bfac8eb4b40d877b945d95df27cd..50fb2c8cbed7a3875a81cf409238912d9b38d820 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -155,6 +155,72 @@ public interface Block extends Metadatable { +@@ -155,6 +155,82 @@ public interface Block extends Metadatable { */ int getZ(); @@ -104,7 +104,9 @@ index 62ab55729e69bfac8eb4b40d877b945d95df27cd..79c0fa47a0d733d1547f8926d8816993 + * Computed via: {@code Block.getBlockKey(this.getX(), this.getY(), this.getZ())} + * @see Block#getBlockKey(int, int, int) + * @return This block's x, y, and z coordinates packed into a long value ++ * @deprecated see {@link #getBlockKey(int, int, int)} + */ ++ @Deprecated + public default long getBlockKey() { + return Block.getBlockKey(this.getX(), this.getY(), this.getZ()); + } @@ -122,13 +124,15 @@ index 62ab55729e69bfac8eb4b40d877b945d95df27cd..79c0fa47a0d733d1547f8926d8816993 + *
+ * {@code int x = (int) ((packed << 37) >> 37);} + *
-+ * {@code int y = (int) (packed >>> 54);} ++ * {@code int y = (int) (packed >> 54);} + *
+ * {@code int z = (int) ((packed << 10) >> 37);} + *

+ * + * @return This block's x, y, and z coordinates packed into a long value ++ * @deprecated only encodes y block ranges from -512 to 511 and represents an already changed implementation detail + */ ++ @Deprecated + public static long getBlockKey(int x, int y, int z) { + return ((long)x & 0x7FFFFFF) | (((long)z & 0x7FFFFFF) << 27) | ((long)y << 54); + } @@ -138,7 +142,9 @@ index 62ab55729e69bfac8eb4b40d877b945d95df27cd..79c0fa47a0d733d1547f8926d8816993 + * @param packed The packed value, as computed by {@link Block#getBlockKey(int, int, int)} + * @see Block#getBlockKey(int, int, int) + * @return The x component from the packed value. ++ * @deprecated see {@link #getBlockKey(int, int, int)} + */ ++ @Deprecated + public static int getBlockKeyX(long packed) { + return (int) ((packed << 37) >> 37); + } @@ -148,9 +154,11 @@ index 62ab55729e69bfac8eb4b40d877b945d95df27cd..79c0fa47a0d733d1547f8926d8816993 + * @param packed The packed value, as computed by {@link Block#getBlockKey(int, int, int)} + * @see Block#getBlockKey(int, int, int) + * @return The y component from the packed value. ++ * @deprecated see {@link #getBlockKey(int, int, int)} + */ ++ @Deprecated + public static int getBlockKeyY(long packed) { -+ return (int) (packed >>> 54); ++ return (int) (packed >> 54); + } + + /** @@ -158,7 +166,9 @@ index 62ab55729e69bfac8eb4b40d877b945d95df27cd..79c0fa47a0d733d1547f8926d8816993 + * @param packed The packed value, as computed by {@link Block#getBlockKey(int, int, int)} + * @see Block#getBlockKey(int, int, int) + * @return The z component from the packed value. ++ * @deprecated see {@link #getBlockKey(int, int, int)} + */ ++ @Deprecated + public static int getBlockKeyZ(long packed) { + return (int) ((packed << 10) >> 37); + } diff --git a/patches/api/0182-Add-BlockSoundGroup-interface.patch b/patches/api/0182-Add-BlockSoundGroup-interface.patch index 0edfea3df9..2e8075a8fa 100644 --- a/patches/api/0182-Add-BlockSoundGroup-interface.patch +++ b/patches/api/0182-Add-BlockSoundGroup-interface.patch @@ -64,10 +64,10 @@ index 0000000000000000000000000000000000000000..8cf87d228a7006658d52ce0da16c2d74 + Sound getFallSound(); +} diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 79c0fa47a0d733d1547f8926d88169939c986d8c..5e92f8f6ba5368ae934c24154ab13fbc6a46272f 100644 +index 50fb2c8cbed7a3875a81cf409238912d9b38d820..747303fd89aad344af0ed0767d3555b4894701dd 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -596,4 +596,16 @@ public interface Block extends Metadatable { +@@ -606,4 +606,16 @@ public interface Block extends Metadatable { * @return true if the block data can be placed here */ boolean canPlace(@NotNull BlockData data); diff --git a/patches/api/0187-Add-effect-to-block-break-naturally.patch b/patches/api/0187-Add-effect-to-block-break-naturally.patch index fc1d381d17..ae4377303d 100644 --- a/patches/api/0187-Add-effect-to-block-break-naturally.patch +++ b/patches/api/0187-Add-effect-to-block-break-naturally.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add effect to block break naturally diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 5e92f8f6ba5368ae934c24154ab13fbc6a46272f..20463f92d83dea3130d4a3f0ac70e5f399c97711 100644 +index 747303fd89aad344af0ed0767d3555b4894701dd..2a862123a8b12d64a1cda39283b5fa501dd90f26 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -470,6 +470,26 @@ public interface Block extends Metadatable { +@@ -480,6 +480,26 @@ public interface Block extends Metadatable { */ boolean breakNaturally(@Nullable ItemStack tool); diff --git a/patches/api/0222-Add-methods-to-get-translation-keys.patch b/patches/api/0222-Add-methods-to-get-translation-keys.patch index fb9df5c3b6..781f56693e 100644 --- a/patches/api/0222-Add-methods-to-get-translation-keys.patch +++ b/patches/api/0222-Add-methods-to-get-translation-keys.patch @@ -212,7 +212,7 @@ index 13eac9ad2c1672051635d1c35cc49239252e7a61..107e36ef02a9481954bd770ce9a55a0b + // Paper end } diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 20463f92d83dea3130d4a3f0ac70e5f399c97711..9bc8e82c1f5192e32781958ecd17fe8467eaeb80 100644 +index 2a862123a8b12d64a1cda39283b5fa501dd90f26..893c6cef7dd8507b165be89c5182a1500afce631 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java @@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable; @@ -224,7 +224,7 @@ index 20463f92d83dea3130d4a3f0ac70e5f399c97711..9bc8e82c1f5192e32781958ecd17fe84 /** * Gets the metadata for this block -@@ -627,5 +627,15 @@ public interface Block extends Metadatable { +@@ -637,5 +637,15 @@ public interface Block extends Metadatable { */ @NotNull com.destroystokyo.paper.block.BlockSoundGroup getSoundGroup(); diff --git a/patches/api/0235-Add-Destroy-Speed-API.patch b/patches/api/0235-Add-Destroy-Speed-API.patch index f1b58f766c..57af2c4b38 100644 --- a/patches/api/0235-Add-Destroy-Speed-API.patch +++ b/patches/api/0235-Add-Destroy-Speed-API.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add Destroy Speed API Co-authored-by: Jake Potrebic diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 9bc8e82c1f5192e32781958ecd17fe8467eaeb80..f53377f1d860ef89d016ffd9068f261a09a8a556 100644 +index 893c6cef7dd8507b165be89c5182a1500afce631..a403ee3eeadd8138b252d188773428037fde1fe7 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -637,5 +637,29 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran +@@ -647,5 +647,29 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran @NotNull @Deprecated String getTranslationKey(); diff --git a/patches/api/0246-Additional-Block-Material-API-s.patch b/patches/api/0246-Additional-Block-Material-API-s.patch index b167d757a0..8b7fe92077 100644 --- a/patches/api/0246-Additional-Block-Material-API-s.patch +++ b/patches/api/0246-Additional-Block-Material-API-s.patch @@ -9,10 +9,10 @@ process to do this in the Bukkit API Adds API for buildable, replaceable, burnable too. diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index f53377f1d860ef89d016ffd9068f261a09a8a556..40fc747fa229d8ae682e8b126de98de6471eef6b 100644 +index a403ee3eeadd8138b252d188773428037fde1fe7..cd807331e55e3caded2a812eeda438c1a781a04f 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -428,6 +428,42 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran +@@ -438,6 +438,42 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran */ boolean isLiquid(); diff --git a/patches/api/0277-Add-Block-isValidTool.patch b/patches/api/0277-Add-Block-isValidTool.patch index 5c7698188b..61d286b542 100644 --- a/patches/api/0277-Add-Block-isValidTool.patch +++ b/patches/api/0277-Add-Block-isValidTool.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Block#isValidTool diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 40fc747fa229d8ae682e8b126de98de6471eef6b..e959f844581eaa88f581a4fabcb39148624bbe9b 100644 +index cd807331e55e3caded2a812eeda438c1a781a04f..d789f14d7af2fbe1a653040f3014748acfc3b240 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -219,6 +219,15 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran +@@ -229,6 +229,15 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran public static int getBlockKeyZ(long packed) { return (int) ((packed << 10) >> 37); } diff --git a/patches/api/0339-Add-isCollidable-methods-to-various-places.patch b/patches/api/0339-Add-isCollidable-methods-to-various-places.patch index 3d8b26cdd6..7932527080 100644 --- a/patches/api/0339-Add-isCollidable-methods-to-various-places.patch +++ b/patches/api/0339-Add-isCollidable-methods-to-various-places.patch @@ -45,10 +45,10 @@ index 12b945dbae1d24c3e8a95037d17d0535108ec163..85296a8aa92465e1ee8a828d56a13407 // Paper end } diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index e959f844581eaa88f581a4fabcb39148624bbe9b..0dd0beee6800fb34520dfa2d05e5bdda76624d64 100644 +index d789f14d7af2fbe1a653040f3014748acfc3b240..5f35ba35f8517ec28c1b21b3007c9a20dea097a7 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -471,6 +471,13 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran +@@ -481,6 +481,13 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran * @return true if block is solid */ boolean isSolid();