添加扳手调整无线收发器频率
This commit is contained in:
parent
3fffc27b03
commit
379a8353e5
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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()),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user