auracore/src/main/java/dev/tilera/auracore/container/SlotCraftingArcaneWorkbench.java
Timo Ley 7eef7b249b
All checks were successful
continuous-integration/drone/push Build is passing
feat: implement basic Arcane Workbench crafting
2022-11-20 20:46:22 +01:00

51 lines
2.5 KiB
Java

package dev.tilera.auracore.container;
import cpw.mods.fml.common.FMLCommonHandler;
import dev.tilera.auracore.crafting.AuracoreCraftingManager;
import dev.tilera.auracore.helper.Utils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.SlotCrafting;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
import thaumcraft.api.crafting.IArcaneRecipe;
public class SlotCraftingArcaneWorkbench extends SlotCrafting {
private final IInventory craftMatrix;
private EntityPlayer thePlayer;
public SlotCraftingArcaneWorkbench(EntityPlayer par1EntityPlayer, IInventory par2IInventory, IInventory par3IInventory, int par4, int par5, int par6) {
super(par1EntityPlayer, par2IInventory, par3IInventory, par4, par5, par6);
this.thePlayer = par1EntityPlayer;
this.craftMatrix = par2IInventory;
}
public void onPickupFromSlot(EntityPlayer par1EntityPlayer, ItemStack par1ItemStack) {
FMLCommonHandler.instance().firePlayerCraftingEvent(this.thePlayer, par1ItemStack, this.craftMatrix);
this.onCrafting(par1ItemStack);
IArcaneRecipe recipe = AuracoreCraftingManager.findMatchingArcaneRecipe(this.craftMatrix, this.thePlayer);
int cost = recipe == null ? 0 : AuracoreCraftingManager.getArcaneRecipeVisCost(recipe, this.craftMatrix);
if (cost > 0) {
Utils.spendCharge(this.craftMatrix.getStackInSlot(10), par1EntityPlayer, cost);
}
for (int var2 = 0; var2 < 9; ++var2) {
ItemStack var3 = this.craftMatrix.getStackInSlot(var2);
if (var3 == null) continue;
this.craftMatrix.decrStackSize(var2, 1);
if (!var3.getItem().hasContainerItem()) continue;
ItemStack var4 = var3.getItem().getContainerItem(var3);
if (var4.isItemStackDamageable() && var4.getItemDamage() > var4.getMaxDamage()) {
MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(this.thePlayer, var4));
var4 = null;
}
if (var4 == null || var3.getItem().doesContainerItemLeaveCraftingGrid(var3) && this.thePlayer.inventory.addItemStackToInventory(var4)) continue;
if (this.craftMatrix.getStackInSlot(var2) == null) {
this.craftMatrix.setInventorySlotContents(var2, var4);
continue;
}
this.thePlayer.dropPlayerItemWithRandomChoice(var4, true);
}
}
}