From 379a8353e524bc9525c698a8b08487c563bd0087 Mon Sep 17 00:00:00 2001 From: GaLicn <133291877+GaLicn@users.noreply.github.com> Date: Sun, 5 Oct 2025 14:04:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=B3=E6=89=8B=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=97=A0=E7=BA=BF=E6=94=B6=E5=8F=91=E5=99=A8=E9=A2=91?= =?UTF-8?q?=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/extendedae_plus/hooks/WrenchHook.java | 40 ++++++++++++++++--- .../SetWirelessFrequencyC2SPacket.java | 19 +++++---- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/extendedae_plus/hooks/WrenchHook.java b/src/main/java/com/extendedae_plus/hooks/WrenchHook.java index 5890cb1..1976a88 100644 --- a/src/main/java/com/extendedae_plus/hooks/WrenchHook.java +++ b/src/main/java/com/extendedae_plus/hooks/WrenchHook.java @@ -90,15 +90,15 @@ public final class WrenchHook { } } } else if (!InteractionUtil.isInAlternateUseMode(player) && InteractionUtil.canWrenchRotate(stack)) { - // 未潜行 + 扳手:打开频率输入界面 + // 未潜行 + 扳手:切换锁定状态 BlockEntity be = level.getBlockEntity(hit.getBlockPos()); if (be instanceof WirelessTransceiverBlockEntity te) { - if (level.isClientSide) { - // 客户端打开GUI - openFrequencyInputScreen(hit.getBlockPos(), te.getFrequency()); - } + boolean newLocked = !te.isLocked(); + te.setLocked(newLocked); + // 提示玩家 + player.displayClientMessage(Component.literal(newLocked ? "已锁定收发器" : "已解锁收发器"), true); // 轻微反馈音效 - level.playSound(player, hit.getBlockPos(), SoundEvents.UI_BUTTON_CLICK.get(), SoundSource.BLOCKS, 0.5F, 1.0F); + level.playSound(player, hit.getBlockPos(), SoundEvents.LEVER_CLICK, SoundSource.BLOCKS, 0.5F, newLocked ? 0.6F : 0.9F); event.setCanceled(true); event.setCancellationResult(InteractionResult.sidedSuccess(level.isClientSide)); @@ -106,6 +106,34 @@ public final class WrenchHook { } } + @SubscribeEvent + public static void onPlayerLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) { + var player = event.getEntity(); + var level = event.getLevel(); + var pos = event.getPos(); + + // 非旁观者 + if (player.isSpectator()) { + return; + } + + ItemStack stack = player.getMainHandItem(); + // 潜行 + 扳手 + 无线收发器:打开频率输入界面 + if (InteractionUtil.isInAlternateUseMode(player) && InteractionUtil.canWrenchRotate(stack)) { + BlockEntity be = level.getBlockEntity(pos); + if (be instanceof WirelessTransceiverBlockEntity te) { + if (level.isClientSide) { + // 客户端打开GUI + openFrequencyInputScreen(pos, te.getFrequency()); + } + // 轻微反馈音效 + level.playSound(player, pos, SoundEvents.UI_BUTTON_CLICK.get(), SoundSource.BLOCKS, 0.5F, 1.0F); + + event.setCanceled(true); + } + } + } + @OnlyIn(Dist.CLIENT) private static void openFrequencyInputScreen(net.minecraft.core.BlockPos pos, long currentFrequency) { Minecraft.getInstance().setScreen(new FrequencyInputScreen(pos, currentFrequency)); diff --git a/src/main/java/com/extendedae_plus/network/SetWirelessFrequencyC2SPacket.java b/src/main/java/com/extendedae_plus/network/SetWirelessFrequencyC2SPacket.java index f3d398f..31413a5 100644 --- a/src/main/java/com/extendedae_plus/network/SetWirelessFrequencyC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/SetWirelessFrequencyC2SPacket.java @@ -52,13 +52,13 @@ public class SetWirelessFrequencyC2SPacket { return; } - // 检查是否锁定 - if (te.isLocked()) { - player.displayClientMessage( - Component.literal("收发器已锁定,无法修改频道"), - true - ); - return; + // 通过GUI设置频率时,忽略锁定状态 + // 临时保存锁定状态 + boolean wasLocked = te.isLocked(); + + // 临时解锁以允许设置 + if (wasLocked) { + te.setLocked(false); } // 设置频率 @@ -68,6 +68,11 @@ public class SetWirelessFrequencyC2SPacket { } te.setFrequency(newFreq); + // 恢复锁定状态 + if (wasLocked) { + te.setLocked(true); + } + // 发送反馈消息 player.displayClientMessage( Component.literal("频道已设置为:" + te.getFrequency()),