From 9682e6f9b21b8f8c087d342a9c896963a5ae499d Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Thu, 26 Dec 2024 01:03:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9B=B7=E8=BE=BE=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/atsuishio/superbwarfare/ModUtils.java | 2 + .../client/screens/FuMO25Screen.java | 6 ++- .../superbwarfare/menu/FuMO25Menu.java | 4 ++ .../message/RadarChangeModeMessage.java | 45 +++++++++++++++++++ .../message/RadarSetParametersMessage.java | 42 +++++++++++++++++ 5 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/network/message/RadarChangeModeMessage.java create mode 100644 src/main/java/com/atsuishio/superbwarfare/network/message/RadarSetParametersMessage.java diff --git a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java index dd9ff31a2..436db1d56 100644 --- a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java +++ b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java @@ -156,6 +156,8 @@ public class ModUtils { addNetworkMessage(SwitchScopeMessage.class, SwitchScopeMessage::encode, SwitchScopeMessage::decode, SwitchScopeMessage::handler); addNetworkMessage(SetFiringParametersMessage.class, SetFiringParametersMessage::encode, SetFiringParametersMessage::decode, SetFiringParametersMessage::handler); addNetworkMessage(ContainerDataMessage.class, ContainerDataMessage::encode, ContainerDataMessage::decode, ContainerDataMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); + addNetworkMessage(RadarChangeModeMessage.class, RadarChangeModeMessage::encode, RadarChangeModeMessage::decode, RadarChangeModeMessage::handler); + addNetworkMessage(RadarSetParametersMessage.class, RadarSetParametersMessage::encode, RadarSetParametersMessage::decode, RadarSetParametersMessage::handler); event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)), Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get()))); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/FuMO25Screen.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/FuMO25Screen.java index 4cc371c68..0f1a67731 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/FuMO25Screen.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/FuMO25Screen.java @@ -3,6 +3,8 @@ package com.atsuishio.superbwarfare.client.screens; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.block.entity.FuMO25BlockEntity; import com.atsuishio.superbwarfare.menu.FuMO25Menu; +import com.atsuishio.superbwarfare.network.message.RadarChangeModeMessage; +import com.atsuishio.superbwarfare.network.message.RadarSetParametersMessage; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; import net.minecraft.client.gui.narration.NarrationElementOutput; @@ -113,7 +115,7 @@ public class FuMO25Screen extends AbstractContainerScreen { @Override public void onPress() { - + ModUtils.PACKET_HANDLER.sendToServer(new RadarSetParametersMessage((byte) 0)); } @Override @@ -138,7 +140,7 @@ public class FuMO25Screen extends AbstractContainerScreen { @Override public void onPress() { - + ModUtils.PACKET_HANDLER.sendToServer(new RadarChangeModeMessage((byte) this.mode)); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/menu/FuMO25Menu.java b/src/main/java/com/atsuishio/superbwarfare/menu/FuMO25Menu.java index d5156495b..5873ab614 100644 --- a/src/main/java/com/atsuishio/superbwarfare/menu/FuMO25Menu.java +++ b/src/main/java/com/atsuishio/superbwarfare/menu/FuMO25Menu.java @@ -157,6 +157,10 @@ public class FuMO25Menu extends EnergyMenu { return this.containerData.get(1); } + public void setFuncType(byte type) { + this.containerData.set(1, type); + } + public long getTime() { return this.containerData.get(2); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/RadarChangeModeMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/RadarChangeModeMessage.java new file mode 100644 index 000000000..349886528 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/RadarChangeModeMessage.java @@ -0,0 +1,45 @@ +package com.atsuishio.superbwarfare.network.message; + +import com.atsuishio.superbwarfare.menu.FuMO25Menu; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class RadarChangeModeMessage { + + private final byte mode; + + public RadarChangeModeMessage(byte mode) { + this.mode = mode; + } + + public static void encode(RadarChangeModeMessage message, FriendlyByteBuf buffer) { + buffer.writeByte(message.mode); + } + + public static RadarChangeModeMessage decode(FriendlyByteBuf buffer) { + return new RadarChangeModeMessage(buffer.readByte()); + } + + public static void handler(RadarChangeModeMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> { + byte mode = message.mode; + if (mode < 1 || mode > 4) return; + + ServerPlayer player = ctx.get().getSender(); + if (player == null) return; + + AbstractContainerMenu menu = player.containerMenu; + if (menu instanceof FuMO25Menu fuMO25Menu) { + if (!player.containerMenu.stillValid(player)) { + return; + } + fuMO25Menu.setFuncType(mode); + } + }); + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/RadarSetParametersMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/RadarSetParametersMessage.java new file mode 100644 index 000000000..4d9c88a9f --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/RadarSetParametersMessage.java @@ -0,0 +1,42 @@ +package com.atsuishio.superbwarfare.network.message; + +import com.atsuishio.superbwarfare.menu.FuMO25Menu; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class RadarSetParametersMessage { + + private final byte mode; + + public RadarSetParametersMessage(byte mode) { + this.mode = mode; + } + + public static void encode(RadarSetParametersMessage message, FriendlyByteBuf buffer) { + buffer.writeByte(message.mode); + } + + public static RadarSetParametersMessage decode(FriendlyByteBuf buffer) { + return new RadarSetParametersMessage(buffer.readByte()); + } + + public static void handler(RadarSetParametersMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> { + ServerPlayer player = ctx.get().getSender(); + if (player == null) return; + + AbstractContainerMenu menu = player.containerMenu; + if (menu instanceof FuMO25Menu fuMO25Menu) { + if (!player.containerMenu.stillValid(player)) { + return; + } + fuMO25Menu.setPosToParameters(); + } + }); + ctx.get().setPacketHandled(true); + } +}