aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0436-Add-Destroy-Speed-API.patch
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 /patches/server/0436-Add-Destroy-Speed-API.patch
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.
Diffstat (limited to 'patches/server/0436-Add-Destroy-Speed-API.patch')
-rw-r--r--patches/server/0436-Add-Destroy-Speed-API.patch21
1 files changed, 12 insertions, 9 deletions
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;
+ }