From 82cee745450b2bfae444541c2f2377383070f968 Mon Sep 17 00:00:00 2001 From: twme-ai <299940106+twme-ai@users.noreply.github.com> Date: Mon, 13 Jul 2026 06:31:22 +0000 Subject: [PATCH] fix(freeze): target air-backed frozen blocks --- .../mode/freeze/FreezeRightClick.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/twme/debugstickpro/mode/freeze/FreezeRightClick.java b/src/main/java/dev/twme/debugstickpro/mode/freeze/FreezeRightClick.java index 778954b..0e57c36 100644 --- a/src/main/java/dev/twme/debugstickpro/mode/freeze/FreezeRightClick.java +++ b/src/main/java/dev/twme/debugstickpro/mode/freeze/FreezeRightClick.java @@ -10,10 +10,12 @@ import org.bukkit.block.data.FaceAttachable; import org.bukkit.entity.Player; import org.bukkit.event.block.Action; +import org.bukkit.util.BlockIterator; import java.util.UUID; public class FreezeRightClick { + private static final int TARGET_DISTANCE = 5; public static void onRightClick(UUID playerUUID, Action action, Block clickedBlock, BlockFace clickedFace) { @@ -64,12 +66,31 @@ private static Block resolveTargetBlock(Player player, Action action, Block clic } if (action == Action.RIGHT_CLICK_AIR || clickedBlock == null) { - return player.getTargetBlockExact(5); + return resolveAirTarget(player); } return null; } + private static Block resolveAirTarget(Player player) { + Block normalTarget = player.getTargetBlockExact(TARGET_DISTANCE); + // BlockIterator also visits air cells, so display-only frozen blocks remain targetable. + BlockIterator sightLine = new BlockIterator(player, TARGET_DISTANCE); + + while (sightLine.hasNext()) { + Block block = sightLine.next(); + if (FreezeBlockManager.isFreezeBlock(block.getLocation())) { + return block; + } + + if (normalTarget != null && normalTarget.equals(block)) { + return normalTarget; + } + } + + return normalTarget; + } + private static Block resolveFrozenSupportBlock(Block clickedBlock, BlockFace clickedFace) { if (!(clickedBlock.getBlockData() instanceof FaceAttachable faceAttachable)) { return null;