package lumaceon.mods.clockworkphase2.inventory;
import lumaceon.mods.clockworkphase2.inventory.slot.SlotNever;
import lumaceon.mods.clockworkphase2.tile.machine.TileClockworkMachine;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IContainerListener;
import net.minecraft.inventory.Slot;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class ContainerClockworkMachine extends Container
{
protected TileClockworkMachine tile;
private int playerInventoryX, playerInventoryY;
private int progressTimer = 0;
private int energy = 0;
private int maxEnergy = 0;
public ContainerClockworkMachine(TileClockworkMachine tile, int playerInventoryX, int playerInventoryY) {
this.tile = tile;
this.playerInventoryX = playerInventoryX;
this.playerInventoryY = playerInventoryY;
}
@Override
public void addListener(IContainerListener listener)
{
super.addListener(listener);
listener.sendAllWindowProperties(this, this.tile);
}
@Override
public void detectAndSendChanges()
{
super.detectAndSendChanges();
for(int i = 0; i < this.listeners.size(); ++i)
{
IContainerListener icontainerlistener = this.listeners.get(i);
if(this.progressTimer != this.tile.getField(0))
{
icontainerlistener.sendProgressBarUpdate(this, 0, this.tile.getField(0));
}
if(this.energy != this.tile.getField(1))
{
icontainerlistener.sendProgressBarUpdate(this, 1, this.tile.getField(1));
}
if(this.maxEnergy != this.tile.getField(2))
{
icontainerlistener.sendProgressBarUpdate(this, 2, this.tile.getField(2));
}
}
this.progressTimer = this.tile.getField(0);
this.energy = this.tile.getField(1);
this.maxEnergy = this.tile.getField(2);
}
@SideOnly(Side.CLIENT)
public void updateProgressBar(int id, int data)
{
this.tile.setField(id, data);
}
public void initializeSlots(InventoryPlayer ip, boolean hideSlots)
{
this.inventorySlots.clear();
if(hideSlots) //GUI is being configured, hide all the slots off-screen.
{
//Player Inventory
for(int n = 0; n < 36; n++)
this.addSlotToContainer(new Slot(ip, n, -1000000, -1000000));
if(tile != null)
{
Slot[] slots = tile.slots;
if(slots != null)
{
for(Slot slot : slots)
{
Slot newSlot = new SlotNever(slot.inventory, slot.getSlotIndex(), -1000000, -1000000);
this.addSlotToContainer(newSlot);
}
}
}
}
else //GUI is in a usable state, display the slots normally.
{
//Player Inventory
for(int x = 0; x < 9; x++)
this.addSlotToContainer(new Slot(ip, x, playerInventoryX + x * 18 , playerInventoryY+58));
for(int x = 0; x < 9; x++)
for(int y = 0; y < 3; y++)
this.addSlotToContainer(new Slot(ip, 9 + y * 9 + x, playerInventoryX + x * 18, playerInventoryY + y * 18));
if(tile != null)
{
Slot[] slots = tile.slots;
if(slots != null)
for(Slot slot : slots)
this.addSlotToContainer(slot);
}
}
}
@Override
public boolean canInteractWith(EntityPlayer playerIn) {
return tile.isUseableByPlayer(playerIn);
}
}