From a8b16d3b5bd91c730cdaf7378c7790dc92c137f7 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Tue, 13 Aug 2024 02:34:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=9F=BA=E7=A1=80=E7=9A=84pe?= =?UTF-8?q?rk=E5=8D=87=E9=99=8D=E7=BA=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/mcreator/superbwarfare/ModUtils.java | 1 + .../block/menu/ReforgingTableMenu.java | 11 +++++ .../client/screens/ReforgingTableScreen.java | 19 +++----- .../network/message/SetPerkLevelMessage.java | 48 +++++++++++++++++++ 4 files changed, 66 insertions(+), 13 deletions(-) create mode 100644 src/main/java/net/mcreator/superbwarfare/network/message/SetPerkLevelMessage.java diff --git a/src/main/java/net/mcreator/superbwarfare/ModUtils.java b/src/main/java/net/mcreator/superbwarfare/ModUtils.java index 1d2fda806..fee14bee7 100644 --- a/src/main/java/net/mcreator/superbwarfare/ModUtils.java +++ b/src/main/java/net/mcreator/superbwarfare/ModUtils.java @@ -109,6 +109,7 @@ public class ModUtils { addNetworkMessage(DroneFireMessage.class, DroneFireMessage::buffer, DroneFireMessage::new, DroneFireMessage::handler); addNetworkMessage(SimulationDistanceMessage.class, SimulationDistanceMessage::encode, SimulationDistanceMessage::decode, SimulationDistanceMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(GunReforgeMessage.class, GunReforgeMessage::encode, GunReforgeMessage::decode, GunReforgeMessage::handler); + addNetworkMessage(SetPerkLevelMessage.class, SetPerkLevelMessage::encode, SetPerkLevelMessage::decode, SetPerkLevelMessage::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/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java b/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java index d30bbd113..1904ed0ab 100644 --- a/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java +++ b/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java @@ -148,6 +148,17 @@ public class ReforgingTableMenu extends AbstractContainerMenu { }); } + public void setPerkLevel(Perk.Type type, boolean add) { + switch (type) { + case AMMO -> + this.ammoPerkLevel.set(add ? Math.min(10, this.ammoPerkLevel.get() + 1) : Math.max(1, this.ammoPerkLevel.get() - 1)); + case FUNCTIONAL -> + this.funcPerkLevel.set(add ? Math.min(10, this.funcPerkLevel.get() + 1) : Math.max(1, this.funcPerkLevel.get() - 1)); + case DAMAGE -> + this.damagePerkLevel.set(add ? Math.min(10, this.damagePerkLevel.get() + 1) : Math.max(1, this.damagePerkLevel.get() - 1)); + } + } + public void generateResult() { ItemStack gun = this.container.getItem(INPUT_SLOT); if (!(gun.getItem() instanceof GunItem gunItem)) { diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/ReforgingTableScreen.java b/src/main/java/net/mcreator/superbwarfare/client/screens/ReforgingTableScreen.java index 579ef034c..e4c9eab9d 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/ReforgingTableScreen.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/ReforgingTableScreen.java @@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.client.screens; import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu; import net.mcreator.superbwarfare.network.message.GunReforgeMessage; +import net.mcreator.superbwarfare.network.message.SetPerkLevelMessage; import net.mcreator.superbwarfare.perk.Perk; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; @@ -67,7 +68,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen { - - } - } + ModUtils.PACKET_HANDLER.sendToServer(new SetPerkLevelMessage(type.ordinal(), true)); } @Override @@ -119,7 +116,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen { - - } - } + ModUtils.PACKET_HANDLER.sendToServer(new SetPerkLevelMessage(type.ordinal(), false)); } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/SetPerkLevelMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/SetPerkLevelMessage.java new file mode 100644 index 000000000..b7bcf829e --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/network/message/SetPerkLevelMessage.java @@ -0,0 +1,48 @@ +package net.mcreator.superbwarfare.network.message; + +import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu; +import net.mcreator.superbwarfare.perk.Perk; +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 SetPerkLevelMessage { + int type; + boolean add; + + public SetPerkLevelMessage(int type, boolean add) { + this.type = type; + this.add = add; + } + + public static void encode(SetPerkLevelMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.type); + buffer.writeBoolean(message.add); + } + + public static SetPerkLevelMessage decode(FriendlyByteBuf buffer) { + return new SetPerkLevelMessage(buffer.readInt(), buffer.readBoolean()); + } + + public static void handler(SetPerkLevelMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> { + ServerPlayer player = ctx.get().getSender(); + if (player == null) { + return; + } + + AbstractContainerMenu abstractcontainermenu = player.containerMenu; + if (abstractcontainermenu instanceof ReforgingTableMenu menu) { + if (!menu.stillValid(player)) { + return; + } + + menu.setPerkLevel(Perk.Type.values()[message.type], message.add); + } + }); + ctx.get().setPacketHandled(true); + } +}