mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-02 17:32:03 +01:00
a2c7a9b490
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.
39 lines
1.9 KiB
Diff
39 lines
1.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Ineusia <ineusia@yahoo.com>
|
|
Date: Mon, 26 Oct 2020 11:48:06 -0500
|
|
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
|
|
@@ -0,0 +0,0 @@ public class CraftBlockData implements BlockData {
|
|
public BlockState createBlockState() {
|
|
return CraftBlockStates.getBlockState(this.state, null);
|
|
}
|
|
+
|
|
+ // Paper start - destroy speed API
|
|
+ @Override
|
|
+ public float getDestroySpeed(final ItemStack itemStack, final boolean considerEnchants) {
|
|
+ net.minecraft.world.item.ItemStack nmsItemStack = CraftItemStack.unwrap(itemStack);
|
|
+ float speed = nmsItemStack.getDestroySpeed(this.state);
|
|
+ if (speed > 1.0F && considerEnchants) {
|
|
+ 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);
|
|
+
|
|
+ final int enchantLevel = net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(
|
|
+ efficiencyHolder, nmsItemStack
|
|
+ );
|
|
+ if (enchantLevel > 0) {
|
|
+ speed += enchantLevel * enchantLevel + 1;
|
|
+ }
|
|
+ }
|
|
+ return speed;
|
|
+ }
|
|
+ // Paper end - destroy speed API
|
|
}
|