添加扳手调整无线收发器频率

This commit is contained in:
GaLicn 2025-10-05 14:04:39 +08:00
parent 3fffc27b03
commit 379a8353e5
2 changed files with 46 additions and 13 deletions

View File

@ -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));

View File

@ -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()),