实现移除perk功能

This commit is contained in:
17146 2024-08-13 04:08:44 +08:00
parent 68115e4994
commit 51f0157bd9
2 changed files with 16 additions and 57 deletions

View file

@ -86,6 +86,7 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
return ItemStack.EMPTY;
}
} else if (pIndex >= AMMO_PERK_SLOT && pIndex <= DAMAGE_PERK_SLOT) {
onTakePerk(stack);
if (!this.moveItemStackTo(stack, RESULT_SLOT + 1, RESULT_SLOT + 37, false)) {
return ItemStack.EMPTY;
}
@ -210,33 +211,29 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
/**
* 从Perk槽中取出对应的Perk物品时根据其类型移除输入槽中枪械的Perk
*
* @param type Perk类型
* @param perk Perk物品
*/
private void onTakePerk(Perk.Type type) {
private void onTakePerk(ItemStack perk) {
ItemStack gun = this.container.getItem(INPUT_SLOT);
if (!(gun.getItem() instanceof GunItem)) {
return;
}
ItemStack perk = 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);
};
if (perk.getItem() instanceof PerkItem perkItem) {
if (PerkHelper.getItemPerkLevel(perkItem.getPerk(), gun) <= 0) {
return;
}
switch (type) {
switch (perkItem.getPerk().type) {
case AMMO -> this.ammoPerkLevel.set(1);
case FUNCTIONAL -> this.funcPerkLevel.set(1);
case DAMAGE -> this.damagePerkLevel.set(1);
}
PerkHelper.removePerkByType(gun, perkItem.getPerk().type);
this.container.setItem(INPUT_SLOT, gun);
ItemStack output = gun.copy();
PerkHelper.removePerkByType(output, perkItem.getPerk().type);
this.container.setItem(INPUT_SLOT, output);
this.container.setChanged();
}
}
@ -251,6 +248,8 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
return;
}
this.container.setChanged();
var ammoPerk = PerkHelper.getPerkByType(pStack, Perk.Type.AMMO);
if (ammoPerk != null) {
this.ammoPerkLevel.set(PerkHelper.getItemPerkLevel(ammoPerk, pStack));
@ -271,6 +270,8 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
var damagePerkItem = PerkHelper.getPerkItem(damagePerk);
damagePerkItem.ifPresent(registryObject -> this.container.setItem(DAMAGE_PERK_SLOT, registryObject.get().getDefaultInstance()));
}
this.broadcastChanges();
}
/**
@ -287,7 +288,6 @@ 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.container.setChanged();
}
}
@ -295,7 +295,6 @@ 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.container.setChanged();
}
}
@ -303,10 +302,11 @@ 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.container.setChanged();
}
}
}
class InputSlot extends Slot {
public InputSlot(Container pContainer, int pSlot, int pX, int pY) {
@ -340,8 +340,8 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
@Override
public void setByPlayer(ItemStack pStack) {
super.setByPlayer(pStack);
onPlaceGun(pStack);
super.setByPlayer(pStack);
}
}
@ -363,7 +363,7 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
@Override
public void onTake(Player pPlayer, ItemStack pStack) {
onTakePerk(type);
onTakePerk(pStack);
super.onTake(pPlayer, pStack);
}
}

View file

@ -1,41 +0,0 @@
package net.mcreator.superbwarfare.event;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.PerkItem;
import net.mcreator.superbwarfare.perk.PerkHelper;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.event.AnvilUpdateEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
// TODO 移除此类功能移动到枪械重铸台
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE)
public class TempEventHandler {
@SubscribeEvent
public static void onAnvilUpdate(AnvilUpdateEvent event) {
ItemStack left = event.getLeft();
ItemStack right = event.getRight();
if (right.getItem() instanceof PerkItem perkItem && left.is(ModTags.Items.GUN)) {
ItemStack output = left.copy();
int level = PerkHelper.getItemPerkLevel(perkItem.getPerk(), output);
PerkHelper.setPerk(output, perkItem.getPerk(), level + 1);
event.setOutput(output);
event.setCost(10);
event.setMaterialCost(1);
}
if (right.is(ModTags.Items.GUN) && left.getItem() instanceof PerkItem perkItem) {
ItemStack output = right.copy();
PerkHelper.removePerkByType(output, perkItem.getPerk().type);
event.setOutput(output);
event.setCost(10);
event.setMaterialCost(0);
}
}
}