classic-casting/src/main/java/net/anvilcraft/classiccasting/container/ContainerInfusionWorkbench.java

187 lines
7 KiB
Java

package net.anvilcraft.classiccasting.container;
import dev.tilera.auracore.api.crafting.IInfusionRecipe;
import net.anvilcraft.classiccasting.WandManager;
import net.anvilcraft.classiccasting.recipes.InfusionCraftingManager;
import net.anvilcraft.classiccasting.tiles.TileInfusionWorkbench;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.common.container.ContainerDummy;
import thaumcraft.common.items.wands.ItemWandCasting;
public class ContainerInfusionWorkbench extends Container {
private TileInfusionWorkbench tileEntity;
private InventoryPlayer ip;
public ContainerInfusionWorkbench(
final InventoryPlayer par1InventoryPlayer, final TileInfusionWorkbench e
) {
this.tileEntity = e;
this.tileEntity.eventHandler = this;
this.ip = par1InventoryPlayer;
this.addSlotToContainer((Slot) new SlotCraftingInfusionWorkbench(
par1InventoryPlayer.player,
(IInventory) this.tileEntity,
(IInventory) this.tileEntity,
9,
132,
28
));
this.addSlotToContainer((Slot
) new SlotWand((IInventory) this.tileEntity, 10, 132, 61));
for (int var6 = 0; var6 < 3; ++var6) {
for (int var7 = 0; var7 < 3; ++var7) {
this.addSlotToContainer(new Slot(
(IInventory) this.tileEntity,
var7 + var6 * 3,
36 + var7 * 20,
8 + var6 * 20
));
}
}
for (int var6 = 0; var6 < 3; ++var6) {
for (int var7 = 0; var7 < 9; ++var7) {
this.addSlotToContainer(new Slot(
(IInventory) par1InventoryPlayer,
var7 + var6 * 9 + 9,
8 + var7 * 18,
106 + var6 * 18
));
}
}
for (int var6 = 0; var6 < 9; ++var6) {
this.addSlotToContainer(
new Slot((IInventory) par1InventoryPlayer, var6, 8 + var6 * 18, 164)
);
}
this.onCraftMatrixChanged((IInventory) this.tileEntity);
}
public void onCraftMatrixChanged(final IInventory par1IInventory) {
this.tileEntity.dispTags = new AspectList();
final InventoryCrafting ic
= new InventoryCrafting((Container) new ContainerDummy(), 3, 3);
for (int a = 0; a < 9; ++a) {
ic.setInventorySlotContents(a, this.tileEntity.getStackInSlot(a));
}
this.tileEntity.setInventorySlotContentsSoftly(
9,
CraftingManager.getInstance().findMatchingRecipe(
ic, this.tileEntity.getWorldObj()
)
);
// TODO: need arcane crafting stuff for this
//if (this.tileEntity.getStackInSlot(9) == null
// && this.tileEntity.getStackInSlot(10) != null
// && this.tileEntity.getStackInSlot(10).getItem() instanceof ItemWandCasting
// && WandManager.hasCharge(
// this.tileEntity.getStackInSlot(10),
// this.ip.player,
// ThaumcraftCraftingManager.findMatchingArcaneRecipeCost(
// (IInventory) this.tileEntity, this.ip.player
// )
// )) {
// this.tileEntity.setInventorySlotContentsSoftly(
// 9,
// ThaumcraftCraftingManager.findMatchingArcaneRecipe(
// (IInventory) this.tileEntity, this.ip.player
// )
// );
//}
if (this.tileEntity.getStackInSlot(9) == null
&& this.tileEntity.getStackInSlot(10) != null) {
IInfusionRecipe rec
= InfusionCraftingManager.INSTANCE.findMatchingInfusionRecipe(
this.tileEntity, this.ip.player
);
if (rec != null
&& WandManager.hasCharge(
this.tileEntity.getStackInSlot(10), this.ip.player, rec.getCost()
)
&& this.tileEntity.doSourcesMatch(rec.getAspects())) {
this.tileEntity.setInventorySlotContentsSoftly(9, rec.getRecipeOutput());
}
}
}
public void onContainerClosed(final EntityPlayer par1EntityPlayer) {
super.onContainerClosed(par1EntityPlayer);
if (!this.tileEntity.getWorldObj().isRemote) {
this.tileEntity.eventHandler = null;
}
}
public boolean canInteractWith(final EntityPlayer par1EntityPlayer) {
return this.tileEntity.getWorldObj().getTileEntity(
this.tileEntity.xCoord, this.tileEntity.yCoord, this.tileEntity.zCoord
)
== this.tileEntity
&& par1EntityPlayer.getDistanceSq(
this.tileEntity.xCoord + 0.5,
this.tileEntity.yCoord + 0.5,
this.tileEntity.zCoord + 0.5
)
<= 64.0;
}
public ItemStack
transferStackInSlot(final EntityPlayer par1EntityPlayer, final int par1) {
ItemStack var2 = null;
final Slot var3 = (Slot) super.inventorySlots.get(par1);
if (var3 != null && var3.getHasStack()) {
final ItemStack var4 = var3.getStack();
var2 = var4.copy();
if (par1 == 0) {
if (!this.mergeItemStack(var4, 11, 47, true)) {
return null;
}
var3.onSlotChange(var4, var2);
} else if (par1 >= 11 && par1 < 38) {
if (var4.getItem() instanceof ItemWandCasting) {
if (!this.mergeItemStack(var4, 1, 2, false)) {
return null;
}
var3.onSlotChange(var4, var2);
} else if (!this.mergeItemStack(var4, 38, 47, false)) {
return null;
}
} else if (par1 >= 38 && par1 < 47) {
if (!this.mergeItemStack(var4, 11, 38, false)) {
return null;
}
} else if (!this.mergeItemStack(var4, 11, 47, false)) {
return null;
}
if (var4.stackSize == 0) {
var3.putStack((ItemStack) null);
} else {
var3.onSlotChanged();
}
if (var4.stackSize == var2.stackSize) {
return null;
}
var3.onPickupFromSlot(this.ip.player, var4);
}
return var2;
}
public ItemStack slotClick(
final int par1,
final int par2,
final int par3,
final EntityPlayer par4EntityPlayer
) {
return super.slotClick(par1, par2, par3, par4EntityPlayer);
}
}