From 4b231c9ae43641c51967e416cca6f28f23dc2cac Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Tue, 13 Aug 2024 02:22:10 +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=E6=B7=BB=E5=8A=A0=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 | 47 +++++++++++++++++++ .../client/screens/ReforgingTableScreen.java | 9 ++-- .../network/message/GunReforgeMessage.java | 43 +++++++++++++++++ 4 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 src/main/java/net/mcreator/superbwarfare/network/message/GunReforgeMessage.java diff --git a/src/main/java/net/mcreator/superbwarfare/ModUtils.java b/src/main/java/net/mcreator/superbwarfare/ModUtils.java index 34f182353..1d2fda806 100644 --- a/src/main/java/net/mcreator/superbwarfare/ModUtils.java +++ b/src/main/java/net/mcreator/superbwarfare/ModUtils.java @@ -108,6 +108,7 @@ public class ModUtils { addNetworkMessage(DroneMovementMessage.class, DroneMovementMessage::encode, DroneMovementMessage::decode, DroneMovementMessage::handler); 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); 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 f44139b53..d30bbd113 100644 --- a/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java +++ b/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java @@ -4,7 +4,9 @@ import net.mcreator.superbwarfare.init.ModBlocks; import net.mcreator.superbwarfare.init.ModMenuTypes; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.PerkItem; +import net.mcreator.superbwarfare.item.gun.GunItem; import net.mcreator.superbwarfare.perk.Perk; +import net.mcreator.superbwarfare.perk.PerkHelper; import net.minecraft.world.Container; import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.player.Inventory; @@ -45,6 +47,10 @@ public class ReforgingTableMenu extends AbstractContainerMenu { this.container = container; this.access = pContainerLevelAccess; + this.ammoPerkLevel.set(1); + this.funcPerkLevel.set(1); + this.damagePerkLevel.set(1); + this.addDataSlot(ammoPerkLevel); this.addDataSlot(funcPerkLevel); this.addDataSlot(damagePerkLevel); @@ -142,6 +148,47 @@ public class ReforgingTableMenu extends AbstractContainerMenu { }); } + public void generateResult() { + ItemStack gun = this.container.getItem(INPUT_SLOT); + if (!(gun.getItem() instanceof GunItem gunItem)) { + return; + } + + ItemStack ammo = this.container.getItem(AMMO_PERK_SLOT); + ItemStack func = this.container.getItem(FUNC_PERK_SLOT); + ItemStack damage = this.container.getItem(DAMAGE_PERK_SLOT); + if (ammo.isEmpty() && func.isEmpty() && damage.isEmpty()) { + return; + } + + ItemStack result = gun.copy(); + + if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem perkItem) { + if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.AMMO)) { + PerkHelper.setPerk(result, perkItem.getPerk(), this.ammoPerkLevel.get()); + this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY); + } + } + + if (!func.isEmpty() && func.getItem() instanceof PerkItem perkItem) { + if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.FUNCTIONAL)) { + PerkHelper.setPerk(result, perkItem.getPerk(), this.funcPerkLevel.get()); + this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY); + } + } + + if (!damage.isEmpty() && damage.getItem() instanceof PerkItem perkItem) { + if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.DAMAGE)) { + PerkHelper.setPerk(result, perkItem.getPerk(), this.damagePerkLevel.get()); + this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY); + } + } + + this.container.setItem(INPUT_SLOT, ItemStack.EMPTY); + this.container.setItem(RESULT_SLOT, result); + this.container.setChanged(); + } + static class InputSlot extends Slot { public InputSlot(Container pContainer, int pSlot, int pX, int pY) { super(pContainer, pSlot, pX, pY); 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 5b3b1af58..579ef034c 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/ReforgingTableScreen.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/ReforgingTableScreen.java @@ -2,6 +2,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.perk.Perk; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; @@ -66,7 +67,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen 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.generateResult(); + } + }); + ctx.get().setPacketHandled(true); + } +}