mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-03 23:07:40 +01:00
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
26f246b908
commit
a2c7a9b490
@ -58,7 +58,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ *
|
+ *
|
||||||
+ * @param itemStack {@link ItemStack} used to mine this Block
|
+ * @param itemStack {@link ItemStack} used to mine this Block
|
||||||
+ * @return the speed that this Block will be mined by the given {@link 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")
|
||||||
+ default float getDestroySpeed(final @NotNull ItemStack itemStack) {
|
+ default float getDestroySpeed(final @NotNull ItemStack itemStack) {
|
||||||
+ return this.getDestroySpeed(itemStack, false);
|
+ return this.getDestroySpeed(itemStack, false);
|
||||||
+ }
|
+ }
|
||||||
@ -71,7 +74,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ * @param itemStack {@link ItemStack} used to mine this Block
|
+ * @param itemStack {@link ItemStack} used to mine this Block
|
||||||
+ * @param considerEnchants true to look at enchants on the itemstack
|
+ * @param considerEnchants true to look at enchants on the itemstack
|
||||||
+ * @return the speed that this Block will be mined by the given {@link 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);
|
+ float getDestroySpeed(@NotNull ItemStack itemStack, boolean considerEnchants);
|
||||||
+ // Paper end - destroy speed API
|
+ // Paper end - destroy speed API
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
--- a/src/main/java/org/bukkit/block/data/BlockData.java
|
--- a/src/main/java/org/bukkit/block/data/BlockData.java
|
||||||
+++ b/src/main/java/org/bukkit/block/data/BlockData.java
|
+++ b/src/main/java/org/bukkit/block/data/BlockData.java
|
||||||
@@ -0,0 +0,0 @@ public interface BlockData extends Cloneable {
|
@@ -0,0 +0,0 @@ public interface BlockData extends Cloneable {
|
||||||
*/
|
@Deprecated(forRemoval = true, since = "1.21")
|
||||||
float getDestroySpeed(@NotNull ItemStack itemStack, boolean considerEnchants);
|
float getDestroySpeed(@NotNull ItemStack itemStack, boolean considerEnchants);
|
||||||
// Paper end - destroy speed API
|
// Paper end - destroy speed API
|
||||||
+
|
+
|
||||||
|
@ -20,15 +20,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ net.minecraft.world.item.ItemStack nmsItemStack = CraftItemStack.unwrap(itemStack);
|
+ net.minecraft.world.item.ItemStack nmsItemStack = CraftItemStack.unwrap(itemStack);
|
||||||
+ float speed = nmsItemStack.getDestroySpeed(this.state);
|
+ float speed = nmsItemStack.getDestroySpeed(this.state);
|
||||||
+ if (speed > 1.0F && considerEnchants) {
|
+ if (speed > 1.0F && considerEnchants) {
|
||||||
+ final org.apache.commons.lang3.mutable.MutableFloat mutableFloat = new org.apache.commons.lang3.mutable.MutableFloat(0);
|
+ final net.minecraft.core.Holder<net.minecraft.world.item.enchantment.Enchantment> efficiencyHolder = net.minecraft.server.MinecraftServer
|
||||||
+ net.minecraft.world.item.enchantment.EnchantmentHelper.forEachModifier(
|
+ .getServer()
|
||||||
+ nmsItemStack, net.minecraft.world.entity.EquipmentSlotGroup.MAINHAND,
|
+ .registryAccess()
|
||||||
+ (attributeHolder, attributeModifier) -> {
|
+ .registryOrThrow(net.minecraft.core.registries.Registries.ENCHANTMENT)
|
||||||
+ if (!attributeHolder.is(net.minecraft.world.entity.ai.attributes.Attributes.MINING_EFFICIENCY)) return;
|
+ .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;
|
+ return speed;
|
||||||
+ }
|
+ }
|
||||||
|
Loading…
Reference in New Issue
Block a user