From 8448e1ee252b750a8c85ee87b386bf3f7ce27dce Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Tue, 13 Aug 2024 23:51:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=87=8D=E9=93=B8=E5=8F=B0?= =?UTF-8?q?=E7=9A=84=E5=AD=98=E5=8F=96=E7=89=A9=E5=93=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/menu/ReforgingTableMenu.java | 59 ++++++++++++++++--- .../client/screens/ReforgingTableScreen.java | 19 ++++-- 2 files changed, 64 insertions(+), 14 deletions(-) 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 83890a59b..45d8028d3 100644 --- a/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java +++ b/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java @@ -17,6 +17,8 @@ import net.minecraft.world.inventory.DataSlot; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; +import javax.annotation.Nullable; + public class ReforgingTableMenu extends AbstractContainerMenu { protected final Container container; protected final ContainerLevelAccess access; @@ -50,9 +52,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu { this.container = container; this.access = pContainerLevelAccess; - this.ammoPerkLevel.set(1); - this.funcPerkLevel.set(1); - this.damagePerkLevel.set(1); + this.ammoPerkLevel.set(0); + this.funcPerkLevel.set(0); + this.damagePerkLevel.set(0); this.addDataSlot(ammoPerkLevel); this.addDataSlot(funcPerkLevel); @@ -206,6 +208,10 @@ public class ReforgingTableMenu extends AbstractContainerMenu { } } + this.ammoPerkLevel.set(0); + this.funcPerkLevel.set(0); + this.damagePerkLevel.set(0); + this.container.setItem(INPUT_SLOT, ItemStack.EMPTY); this.container.setItem(RESULT_SLOT, result); this.container.setChanged(); @@ -223,14 +229,14 @@ public class ReforgingTableMenu extends AbstractContainerMenu { } if (perk.getItem() instanceof PerkItem perkItem) { - if (PerkHelper.getItemPerkLevel(perkItem.getPerk(), gun) <= 0) { - return; + switch (perkItem.getPerk().type) { + case AMMO -> this.ammoPerkLevel.set(0); + case FUNCTIONAL -> this.funcPerkLevel.set(0); + case DAMAGE -> this.damagePerkLevel.set(0); } - switch (perkItem.getPerk().type) { - case AMMO -> this.ammoPerkLevel.set(1); - case FUNCTIONAL -> this.funcPerkLevel.set(1); - case DAMAGE -> this.damagePerkLevel.set(1); + if (PerkHelper.getItemPerkLevel(perkItem.getPerk(), gun) <= 0) { + return; } ItemStack output = gun.copy(); @@ -241,6 +247,23 @@ public class ReforgingTableMenu extends AbstractContainerMenu { } } + /** + * 放置perk物品时,将对应位置的level设置为1 + * + * @param pStack Perk物品 + */ + private void onPlacePerk(ItemStack pStack) { + if (!(pStack.getItem() instanceof PerkItem perkItem)) { + return; + } + + switch (perkItem.getPerk().type) { + case AMMO -> this.ammoPerkLevel.set(1); + case FUNCTIONAL -> this.funcPerkLevel.set(1); + case DAMAGE -> this.damagePerkLevel.set(1); + } + } + /** * 将枪械放入输入槽中时,根据枪械上已有的Perk生成对应的Perk物品,并将等级调整为当前的等级 * @@ -291,6 +314,7 @@ public class ReforgingTableMenu extends AbstractContainerMenu { if (ammoPerk != null) { if (this.container.getItem(AMMO_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == ammoPerk) { this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY); + this.ammoPerkLevel.set(0); } } @@ -298,6 +322,7 @@ public class ReforgingTableMenu extends AbstractContainerMenu { if (funcPerk != null) { if (this.container.getItem(FUNC_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == funcPerk) { this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY); + this.funcPerkLevel.set(0); } } @@ -305,12 +330,22 @@ public class ReforgingTableMenu extends AbstractContainerMenu { if (damagePerk != null) { if (this.container.getItem(DAMAGE_PERK_SLOT).getItem() instanceof PerkItem perkItem && perkItem.getPerk() == damagePerk) { this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY); + this.damagePerkLevel.set(0); } } this.container.setChanged(); } + @Nullable + public ItemStack getPerkItemBySlot(Perk.Type type) { + return switch (type) { + case AMMO -> this.container.getItem(AMMO_PERK_SLOT); + case FUNCTIONAL -> this.container.getItem(FUNC_PERK_SLOT); + case DAMAGE -> this.container.getItem(DAMAGE_PERK_SLOT); + }; + } + class InputSlot extends Slot { public InputSlot(Container pContainer, int pSlot, int pX, int pY) { super(pContainer, pSlot, pX, pY); @@ -369,6 +404,12 @@ public class ReforgingTableMenu extends AbstractContainerMenu { onTakePerk(pStack); super.onTake(pPlayer, pStack); } + + @Override + public void setByPlayer(ItemStack pStack) { + onPlacePerk(pStack); + super.setByPlayer(pStack); + } } static class ResultSlot extends Slot { 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 c04684593..972074570 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/ReforgingTableScreen.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/ReforgingTableScreen.java @@ -13,6 +13,7 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -90,7 +91,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen