实现移除perk功能
This commit is contained in:
parent
68115e4994
commit
51f0157bd9
2 changed files with 16 additions and 57 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue