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); + } +}