auracore/src/main/java/dev/tilera/auracore/container/ContainerWorkbench.java
Timo Ley 6ffec2106c
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
fix: arcane workbench
fixes #3
2023-01-20 18:43:51 +01:00

117 lines
5.3 KiB
Java

package dev.tilera.auracore.container;
import dev.tilera.auracore.api.IWand;
import dev.tilera.auracore.crafting.AuracoreCraftingManager;
import dev.tilera.auracore.helper.Utils;
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.crafting.IArcaneRecipe;
import thaumcraft.common.container.ContainerDummy;
import thaumcraft.common.items.wands.ItemWandCasting;
import thaumcraft.common.tiles.TileArcaneWorkbench;
public class ContainerWorkbench extends Container {
private TileArcaneWorkbench tileEntity;
private InventoryPlayer ip;
public ContainerWorkbench(InventoryPlayer par1InventoryPlayer, TileArcaneWorkbench e) {
int var7;
int var6;
this.tileEntity = e;
this.tileEntity.eventHandler = this;
this.ip = par1InventoryPlayer;
this.addSlotToContainer((Slot)new SlotCraftingArcaneWorkbench(par1InventoryPlayer.player, this.tileEntity, this.tileEntity, 9, 124, 29));
this.addSlotToContainer(new SlotWorkbenchWand(this.tileEntity, 10, 124, 61, par1InventoryPlayer.player));
for (var6 = 0; var6 < 3; ++var6) {
for (var7 = 0; var7 < 3; ++var7) {
this.addSlotToContainer(new Slot(this.tileEntity, var7 + var6 * 3, 30 + var7 * 18, 17 + var6 * 18));
}
}
for (var6 = 0; var6 < 3; ++var6) {
for (var7 = 0; var7 < 9; ++var7) {
this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 94 + var6 * 18));
}
}
for (var6 = 0; var6 < 9; ++var6) {
this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 152));
}
this.onCraftMatrixChanged(this.tileEntity);
}
@Override
public void onCraftMatrixChanged(IInventory par1IInventory) {
InventoryCrafting ic = new InventoryCrafting(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()));
if (this.tileEntity.getStackInSlot(9) == null && this.tileEntity.getStackInSlot(10) != null && this.tileEntity.getStackInSlot(10).getItem() instanceof IWand) {
IArcaneRecipe recipe = AuracoreCraftingManager.findMatchingArcaneRecipe(this.tileEntity, this.ip.player);
if (recipe != null && Utils.hasCharge(this.tileEntity.getStackInSlot(10), this.ip.player, AuracoreCraftingManager.getArcaneRecipeVisCost(recipe, this.tileEntity))) {
this.tileEntity.setInventorySlotContentsSoftly(9, recipe.getCraftingResult(this.tileEntity));
}
}
}
@Override
public void onContainerClosed(EntityPlayer par1EntityPlayer) {
super.onContainerClosed(par1EntityPlayer);
if (!this.tileEntity.getWorldObj().isRemote) {
this.tileEntity.eventHandler = null;
}
}
@Override
public boolean canInteractWith(EntityPlayer par1EntityPlayer) {
return this.tileEntity.getWorldObj().getTileEntity(this.tileEntity.xCoord, this.tileEntity.yCoord, this.tileEntity.zCoord) != this.tileEntity ? false : par1EntityPlayer.getDistanceSq((double)this.tileEntity.xCoord + 0.5, (double)this.tileEntity.yCoord + 0.5, (double)this.tileEntity.zCoord + 0.5) <= 64.0;
}
@Override
public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par1) {
ItemStack var2 = null;
Slot var3 = (Slot)this.inventorySlots.get(par1);
if (var3 != null && var3.getHasStack()) {
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 || var4.getItem() instanceof IWand) {
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 ? !this.mergeItemStack(var4, 11, 38, false) : !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;
}
@Override
public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer par4EntityPlayer) {
return super.slotClick(par1, par2, par3, par4EntityPlayer);
}
}