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