aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjarne Koll <[email protected]>2024-06-16 00:19:10 +0200
committerBjarne Koll <[email protected]>2024-06-16 00:19:10 +0200
commite339ec27b4ae868499dadaef53bf7f5ed362c753 (patch)
tree48fdcf7475f94a270c468ed165a627f733e70734
parent3555a7776e34b46357c3d69b66976ce9c9d6c510 (diff)
downloadPaper-e339ec27b4ae868499dadaef53bf7f5ed362c753.tar.gz
Paper-e339ec27b4ae868499dadaef53bf7f5ed362c753.zip
Deprecate BlockData#getDestroySpeed for removal
The method sadly is not usable in 1.21 without a player as all of an enchantments attribtue modifiers rely on a base value supplied by a player. The method could only offer a rough estimate based on some default values, however a better method for this should be added down the line rather than trying to force such logic into the existing one.
-rw-r--r--patches/api/0214-Add-Destroy-Speed-API.patch10
-rw-r--r--patches/api/0357-Block-Ticking-API.patch6
-rw-r--r--patches/api/0425-Add-API-to-get-the-collision-shape-of-a-block-before.patch2
-rw-r--r--patches/server/0436-Add-Destroy-Speed-API.patch21
-rw-r--r--patches/server/0736-Block-Ticking-API.patch4
-rw-r--r--patches/server/0906-Add-API-to-get-the-collision-shape-of-a-block-before.patch2
6 files changed, 27 insertions, 18 deletions
diff --git a/patches/api/0214-Add-Destroy-Speed-API.patch b/patches/api/0214-Add-Destroy-Speed-API.patch
index 4fb7eb4c7b..509bde4c8a 100644
--- a/patches/api/0214-Add-Destroy-Speed-API.patch
+++ b/patches/api/0214-Add-Destroy-Speed-API.patch
@@ -42,10 +42,10 @@ index 25db31b2e9a6d75f0c59f75237842f9ad7d1c350..75c2aadb0a2baebe8b2625ad11b16380
+ // Paper end - destroy speed API
}
diff --git a/src/main/java/org/bukkit/block/data/BlockData.java b/src/main/java/org/bukkit/block/data/BlockData.java
-index cd3b3e05cc825cfedec07f9a2a1e0b7b2a8866d6..8a26e7215672f5fd4555fd455c9b1571488f0259 100644
+index cd3b3e05cc825cfedec07f9a2a1e0b7b2a8866d6..a2dc7376b2a3d386b671c894f73389139e0d97bf 100644
--- a/src/main/java/org/bukkit/block/data/BlockData.java
+++ b/src/main/java/org/bukkit/block/data/BlockData.java
-@@ -266,4 +266,29 @@ public interface BlockData extends Cloneable {
+@@ -266,4 +266,35 @@ public interface BlockData extends Cloneable {
@NotNull
@ApiStatus.Experimental
BlockState createBlockState();
@@ -58,7 +58,10 @@ index cd3b3e05cc825cfedec07f9a2a1e0b7b2a8866d6..8a26e7215672f5fd4555fd455c9b1571
+ *
+ * @param itemStack {@link ItemStack} used to mine this Block
+ * @return the speed that this Block will be mined by the given {@link ItemStack}
++ * @deprecated the destroy speed of a block was never purely tied to an item stack. Since 1.21 enchantments
++ * also use complex effects that require a consuming player to compute their effects, including mining efficiency.
+ */
++ @Deprecated(forRemoval = true, since = "1.21")
+ default float getDestroySpeed(final @NotNull ItemStack itemStack) {
+ return this.getDestroySpeed(itemStack, false);
+ }
@@ -71,7 +74,10 @@ index cd3b3e05cc825cfedec07f9a2a1e0b7b2a8866d6..8a26e7215672f5fd4555fd455c9b1571
+ * @param itemStack {@link ItemStack} used to mine this Block
+ * @param considerEnchants true to look at enchants on the itemstack
+ * @return the speed that this Block will be mined by the given {@link ItemStack}
++ * @deprecated the destroy speed of a block was never purely tied to an item stack. Since 1.21 enchantments
++ * also use complex effects that require a consuming player to compute their effects, including mining efficiency.
+ */
++ @Deprecated(forRemoval = true, since = "1.21")
+ float getDestroySpeed(@NotNull ItemStack itemStack, boolean considerEnchants);
+ // Paper end - destroy speed API
}
diff --git a/patches/api/0357-Block-Ticking-API.patch b/patches/api/0357-Block-Ticking-API.patch
index d588899982..5371277e73 100644
--- a/patches/api/0357-Block-Ticking-API.patch
+++ b/patches/api/0357-Block-Ticking-API.patch
@@ -51,11 +51,11 @@ index 87327df6a37668eaf87394b6b049e6d4badec6df..a13c8ddd4a1222e7a16debb61769af37
/**
diff --git a/src/main/java/org/bukkit/block/data/BlockData.java b/src/main/java/org/bukkit/block/data/BlockData.java
-index 8a26e7215672f5fd4555fd455c9b1571488f0259..64188a78211195fe792eac427e483e1984f52318 100644
+index a2dc7376b2a3d386b671c894f73389139e0d97bf..26b70af4a1f3db5b17957bfa644e758603f8863c 100644
--- a/src/main/java/org/bukkit/block/data/BlockData.java
+++ b/src/main/java/org/bukkit/block/data/BlockData.java
-@@ -291,4 +291,14 @@ public interface BlockData extends Cloneable {
- */
+@@ -297,4 +297,14 @@ public interface BlockData extends Cloneable {
+ @Deprecated(forRemoval = true, since = "1.21")
float getDestroySpeed(@NotNull ItemStack itemStack, boolean considerEnchants);
// Paper end - destroy speed API
+
diff --git a/patches/api/0425-Add-API-to-get-the-collision-shape-of-a-block-before.patch b/patches/api/0425-Add-API-to-get-the-collision-shape-of-a-block-before.patch
index 0481690ad4..b5d2e36ec2 100644
--- a/patches/api/0425-Add-API-to-get-the-collision-shape-of-a-block-before.patch
+++ b/patches/api/0425-Add-API-to-get-the-collision-shape-of-a-block-before.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add API to get the collision shape of a block before it's
diff --git a/src/main/java/org/bukkit/block/data/BlockData.java b/src/main/java/org/bukkit/block/data/BlockData.java
-index 64188a78211195fe792eac427e483e1984f52318..fb4c7cf0f67f3e4227d17f6702ae7b7bf1c110ab 100644
+index 26b70af4a1f3db5b17957bfa644e758603f8863c..a1ee73254b1389396e7d53f08abe4b3780bd3d0e 100644
--- a/src/main/java/org/bukkit/block/data/BlockData.java
+++ b/src/main/java/org/bukkit/block/data/BlockData.java
@@ -205,6 +205,19 @@ public interface BlockData extends Cloneable {
diff --git a/patches/server/0436-Add-Destroy-Speed-API.patch b/patches/server/0436-Add-Destroy-Speed-API.patch
index bc04541e7c..6832fd221a 100644
--- a/patches/server/0436-Add-Destroy-Speed-API.patch
+++ b/patches/server/0436-Add-Destroy-Speed-API.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Add Destroy Speed API
Co-authored-by: Jake Potrebic <[email protected]>
diff --git a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
-index 9953b6b36cbcbfd1756bac478b568ca5700fc898..9fd636424f1300e0b8263bdd26418e6892053f8f 100644
+index 9953b6b36cbcbfd1756bac478b568ca5700fc898..b318b287572ced45cc3e9f0691a98a037635fbce 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
-@@ -721,4 +721,24 @@ public class CraftBlockData implements BlockData {
+@@ -721,4 +721,27 @@ public class CraftBlockData implements BlockData {
public BlockState createBlockState() {
return CraftBlockStates.getBlockState(this.state, null);
}
@@ -20,15 +20,18 @@ index 9953b6b36cbcbfd1756bac478b568ca5700fc898..9fd636424f1300e0b8263bdd26418e68
+ net.minecraft.world.item.ItemStack nmsItemStack = CraftItemStack.unwrap(itemStack);
+ float speed = nmsItemStack.getDestroySpeed(this.state);
+ if (speed > 1.0F && considerEnchants) {
-+ final org.apache.commons.lang3.mutable.MutableFloat mutableFloat = new org.apache.commons.lang3.mutable.MutableFloat(0);
-+ net.minecraft.world.item.enchantment.EnchantmentHelper.forEachModifier(
-+ nmsItemStack, net.minecraft.world.entity.EquipmentSlotGroup.MAINHAND,
-+ (attributeHolder, attributeModifier) -> {
-+ if (!attributeHolder.is(net.minecraft.world.entity.ai.attributes.Attributes.MINING_EFFICIENCY)) return;
++ final net.minecraft.core.Holder<net.minecraft.world.item.enchantment.Enchantment> efficiencyHolder = net.minecraft.server.MinecraftServer
++ .getServer()
++ .registryAccess()
++ .registryOrThrow(net.minecraft.core.registries.Registries.ENCHANTMENT)
++ .getHolderOrThrow(net.minecraft.world.item.enchantment.Enchantments.EFFICIENCY);
+
-+ // TODO do we just attempt to calculate the full "modifier" to the mining efficiency?
-+ }
++ final int enchantLevel = net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(
++ efficiencyHolder, nmsItemStack
+ );
++ if (enchantLevel > 0) {
++ speed += enchantLevel * enchantLevel + 1;
++ }
+ }
+ return speed;
+ }
diff --git a/patches/server/0736-Block-Ticking-API.patch b/patches/server/0736-Block-Ticking-API.patch
index 341f5a79ac..3da9c64590 100644
--- a/patches/server/0736-Block-Ticking-API.patch
+++ b/patches/server/0736-Block-Ticking-API.patch
@@ -46,10 +46,10 @@ index 6d10396347b69d9243ab902ecc68ede93fa17b7d..af219df5267589300f0ad1d30fa5c81a
// Paper end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
-index 9fd636424f1300e0b8263bdd26418e6892053f8f..bfa0ec7bbf18b47546a4c2d3409164e3e53a9fb5 100644
+index b318b287572ced45cc3e9f0691a98a037635fbce..53dddaf1fb608312991739d488b8cd2dadc58e22 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
-@@ -741,4 +741,11 @@ public class CraftBlockData implements BlockData {
+@@ -744,4 +744,11 @@ public class CraftBlockData implements BlockData {
return speed;
}
// Paper end - destroy speed API
diff --git a/patches/server/0906-Add-API-to-get-the-collision-shape-of-a-block-before.patch b/patches/server/0906-Add-API-to-get-the-collision-shape-of-a-block-before.patch
index 8c1635a676..ea30c04785 100644
--- a/patches/server/0906-Add-API-to-get-the-collision-shape-of-a-block-before.patch
+++ b/patches/server/0906-Add-API-to-get-the-collision-shape-of-a-block-before.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add API to get the collision shape of a block before it's
diff --git a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
-index bfa0ec7bbf18b47546a4c2d3409164e3e53a9fb5..260285a3b0643e3262e3e7c01db23889755998aa 100644
+index 53dddaf1fb608312991739d488b8cd2dadc58e22..17933c51abf657335fd449635f198c6802adf14c 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
@@ -679,6 +679,20 @@ public class CraftBlockData implements BlockData {