9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 18:09:27 +00:00

refactor(bukkit): 优化门方块行为

This commit is contained in:
jhqwqmc
2025-07-07 00:49:16 +08:00
parent fcb5ae36fd
commit b0d30e2d69

View File

@@ -37,6 +37,7 @@ import org.bukkit.block.data.Bisected;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Door;
import org.bukkit.event.block.BlockRedstoneEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import javax.annotation.Nullable;
@@ -133,8 +134,8 @@ public class DoorBlockBehavior extends AbstractCanSurviveBlockBehavior {
if (blockState == null || blockState.isEmpty()) return superMethod.call();
org.bukkit.entity.Player bukkitPlayer = FastNMS.INSTANCE.method$ServerPlayer$getBukkitEntity(player);
BukkitServerPlayer cePlayer = BukkitCraftEngine.instance().adapt(bukkitPlayer);
Item<?> item = cePlayer.getItemInHand(InteractionHand.MAIN_HAND);
if (preventsBlockDrops(cePlayer) || !hasCorrectToolForDrops(blockState, item)) {
Item<ItemStack> item = cePlayer.getItemInHand(InteractionHand.MAIN_HAND);
if (preventsBlockDrops(cePlayer) || !BlockStateUtils.isCorrectTool(blockState, item)) {
preventDropFromBottomPart(level, pos, blockState, player);
}
return superMethod.call();
@@ -154,13 +155,6 @@ public class DoorBlockBehavior extends AbstractCanSurviveBlockBehavior {
}
}
private boolean hasCorrectToolForDrops(ImmutableBlockState state, @Nullable Item<?> item) {
if (item == null) return !state.settings().requireCorrectTool();
return !state.settings().requireCorrectTool()
|| state.settings().isCorrectTool(item.id())
|| (state.settings().respectToolComponent() && FastNMS.INSTANCE.method$ItemStack$isCorrectToolForDrops(item.getLiteralObject(), state));
}
private boolean preventsBlockDrops(BukkitServerPlayer cePlayer) {
return VersionHelper.isOrAbove1_21_5() ? cePlayer.canInstabuild() : cePlayer.isCreativeMode();
}