添加扳手调整无线收发器频率
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)) {
|
} else if (!InteractionUtil.isInAlternateUseMode(player) && InteractionUtil.canWrenchRotate(stack)) {
|
||||||
// 未潜行 + 扳手:打开频率输入界面
|
// 未潜行 + 扳手:切换锁定状态
|
||||||
BlockEntity be = level.getBlockEntity(hit.getBlockPos());
|
BlockEntity be = level.getBlockEntity(hit.getBlockPos());
|
||||||
if (be instanceof WirelessTransceiverBlockEntity te) {
|
if (be instanceof WirelessTransceiverBlockEntity te) {
|
||||||
if (level.isClientSide) {
|
boolean newLocked = !te.isLocked();
|
||||||
// 客户端打开GUI
|
te.setLocked(newLocked);
|
||||||
openFrequencyInputScreen(hit.getBlockPos(), te.getFrequency());
|
// 提示玩家
|
||||||
}
|
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.setCanceled(true);
|
||||||
event.setCancellationResult(InteractionResult.sidedSuccess(level.isClientSide));
|
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)
|
@OnlyIn(Dist.CLIENT)
|
||||||
private static void openFrequencyInputScreen(net.minecraft.core.BlockPos pos, long currentFrequency) {
|
private static void openFrequencyInputScreen(net.minecraft.core.BlockPos pos, long currentFrequency) {
|
||||||
Minecraft.getInstance().setScreen(new FrequencyInputScreen(pos, currentFrequency));
|
Minecraft.getInstance().setScreen(new FrequencyInputScreen(pos, currentFrequency));
|
||||||
|
|
|
||||||
|
|
@ -52,13 +52,13 @@ public class SetWirelessFrequencyC2SPacket {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否锁定
|
// 通过GUI设置频率时,忽略锁定状态
|
||||||
if (te.isLocked()) {
|
// 临时保存锁定状态
|
||||||
player.displayClientMessage(
|
boolean wasLocked = te.isLocked();
|
||||||
Component.literal("收发器已锁定,无法修改频道"),
|
|
||||||
true
|
// 临时解锁以允许设置
|
||||||
);
|
if (wasLocked) {
|
||||||
return;
|
te.setLocked(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置频率
|
// 设置频率
|
||||||
|
|
@ -68,6 +68,11 @@ public class SetWirelessFrequencyC2SPacket {
|
||||||
}
|
}
|
||||||
te.setFrequency(newFreq);
|
te.setFrequency(newFreq);
|
||||||
|
|
||||||
|
// 恢复锁定状态
|
||||||
|
if (wasLocked) {
|
||||||
|
te.setLocked(true);
|
||||||
|
}
|
||||||
|
|
||||||
// 发送反馈消息
|
// 发送反馈消息
|
||||||
player.displayClientMessage(
|
player.displayClientMessage(
|
||||||
Component.literal("频道已设置为:" + te.getFrequency()),
|
Component.literal("频道已设置为:" + te.getFrequency()),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user