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.
This commit is contained in:
parent
3555a7776e
commit
e339ec27b4
6 changed files with 27 additions and 18 deletions
|
@ -6,10 +6,10 @@ Subject: [PATCH] Add Destroy Speed API
|
|||
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||
|
||||
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;
|
||||
+ }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue