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