package shedar.mods.ic2.nuclearcontrol.containers;
import shedar.mods.ic2.nuclearcontrol.SlotFilter;
import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityAverageCounter;
import shedar.mods.ic2.nuclearcontrol.utils.NuclearNetworkHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerAverageCounter extends Container
{
public TileEntityAverageCounter averageCounter;
private EntityPlayer player;
private double lastAverage = -1;
public ContainerAverageCounter(EntityPlayer player, TileEntityAverageCounter averageCounter)
{
super();
this.averageCounter = averageCounter;
this.player = player;
//transformer upgrades
addSlotToContainer(new SlotFilter(averageCounter, 0, 8, 18));
//inventory
for (int i = 0; i < 3; i++)
{
for (int k = 0; k < 9; k++)
{
addSlotToContainer(new Slot(player.inventory, k + i * 9 + 9, 8 + k * 18, 84 + i * 18));
}
}
for (int j = 0; j < 9; j++)
{
addSlotToContainer(new Slot(player.inventory, j, 8 + j * 18, 142));
}
}
public void addCraftingToCrafters(ICrafting crafting)
{
super.addCraftingToCrafters(crafting);
NuclearNetworkHelper.sendAverageCounterValue(averageCounter, crafting, averageCounter.getClientAverage());
}
@Override
public void detectAndSendChanges()
{
super.detectAndSendChanges();
int average = averageCounter.getClientAverage();
for (int i = 0; i < crafters.size(); i++)
{
ICrafting crafting = (ICrafting)crafters.get(i);
if (lastAverage != average)
{
NuclearNetworkHelper.sendAverageCounterValue(averageCounter, crafting, average);
}
}
lastAverage = average;
}
@Override
public boolean canInteractWith(EntityPlayer var1)
{
return averageCounter.isUseableByPlayer(player);
}
@Override
public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer player)
{
ItemStack stack = super.slotClick(par1, par2, par3, player);
averageCounter.markDirty();
return stack;
}
@Override
public ItemStack transferStackInSlot(EntityPlayer p, int slotId)
{
Slot slot = (Slot)this.inventorySlots.get(slotId);
if (slot != null)
{
ItemStack items = slot.getStack();
if (items != null)
{
int initialCount = items.stackSize;
if (slotId < averageCounter.getSizeInventory())//moving from counter to inventory
{
mergeItemStack(items, averageCounter.getSizeInventory(), inventorySlots.size(), false);
if (items.stackSize == 0)
{
slot.putStack((ItemStack)null);
}
else
{
slot.onSlotChanged();
if(initialCount!=items.stackSize)
return items;
}
}
else//moving from inventory to counter
{
for(int i = 0;i < averageCounter.getSizeInventory();i++)
{
if (!averageCounter.isItemValid(i, items))
{
continue;
}
ItemStack targetStack = averageCounter.getStackInSlot(i);
if (targetStack == null)
{
Slot targetSlot = (Slot)this.inventorySlots.get(i);
targetSlot.putStack(items);
slot.putStack((ItemStack)null);
break;
}
else if (items.isStackable() && items.isItemEqual(targetStack))
{
mergeItemStack(items, i, i + 1, false);
if (items.stackSize == 0)
{
slot.putStack((ItemStack)null);
}
else
{
slot.onSlotChanged();
if(initialCount != items.stackSize)
return items;
}
break;
}
}
}
}
}
return null;
}
}