package zmaster587.advancedRocketry.inventory;
import zmaster587.advancedRocketry.api.AdvancedRocketryBlocks;
import zmaster587.advancedRocketry.api.AdvancedRocketryItems;
import zmaster587.advancedRocketry.integration.CompatibilityMgr;
import zmaster587.advancedRocketry.tile.multiblock.TileSpaceLaser;
import zmaster587.libVulpes.gui.SlotSingleItem;
import zmaster587.libVulpes.gui.SlotOreDict;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
public class ContainerSpaceLaser extends Container {
TileSpaceLaser laserTile;
boolean finished, jammed;
int prevEnergy = 0, prevLaserX = 0, prevLaserZ = 0, buildingX, buildingZ;
TileSpaceLaser.MODE currMode;
ContainerSpaceLaser(InventoryPlayer inventoryPlayer, TileSpaceLaser tile) {
super();
laserTile = tile;
if(CompatibilityMgr.gregtechLoaded)
addSlotToContainer(new SlotOreDict(tile,0,56,54,"lenseRuby"));
else
addSlotToContainer(new SlotSingleItem(tile,0,56,54, AdvancedRocketryItems.itemLens));
// Player inventory
for (int i1 = 0; i1 < 3; i1++) {
for (int l1 = 0; l1 < 9; l1++) {
addSlotToContainer(new Slot(inventoryPlayer, l1 + i1 * 9 + 9, 8 + l1 * 18, 89 + i1 * 18));
}
}
// Player hotbar
for (int j1 = 0; j1 < 9; j1++) {
addSlotToContainer(new Slot(inventoryPlayer, j1, 8 + j1 * 18, 147));
}
currMode = laserTile.getMode();
jammed = false;
finished = false;
}
@Override
public void detectAndSendChanges()
{
super.detectAndSendChanges();
if(laserTile.getBatteries().getEnergyStored() != prevEnergy) {
prevEnergy = laserTile.getBatteries().getEnergyStored();
for (int j = 0; j < this.crafters.size(); ++j)
{
((ICrafting)this.crafters.get(j)).sendProgressBarUpdate(this, 0, prevEnergy/100);
}
}
if(laserTile.laserX != prevLaserX) {
prevLaserX = laserTile.laserX;
for(int i = 0; i < this.crafters.size(); i++) {
((ICrafting)this.crafters.get(i)).sendProgressBarUpdate(this, 1, prevLaserX & 65535);
int j = prevLaserX >>> 16;
//if(j != 0)
((ICrafting)this.crafters.get(i)).sendProgressBarUpdate(this, 2, j);
}
}
if(laserTile.laserZ != prevLaserZ) {
prevLaserZ = laserTile.laserZ;
for(int i = 0; i < this.crafters.size(); i++) {
((ICrafting)this.crafters.get(i)).sendProgressBarUpdate(this, 3, prevLaserZ & 65535);
int j = prevLaserZ >>> 16;
//if(j != 0)
((ICrafting)this.crafters.get(i)).sendProgressBarUpdate(this, 4, j);
}
}
if(currMode.compareTo(laserTile.getMode()) != 0) {
for(int i = 0; i < this.crafters.size(); i++) {
((ICrafting)this.crafters.get(i)).sendProgressBarUpdate(this, 5, laserTile.getMode().ordinal());
}
}
if(jammed != laserTile.isJammed()) {
jammed = laserTile.isJammed();
for(int i = 0; i < this.crafters.size(); i++) {
((ICrafting)this.crafters.get(i)).sendProgressBarUpdate(this, 6, laserTile.isJammed() ? 1 : 0);
}
}
if(finished != laserTile.isFinished()) {
finished = laserTile.isFinished();
for(int i = 0; i < this.crafters.size(); i++) {
((ICrafting)this.crafters.get(i)).sendProgressBarUpdate(this, 7, laserTile.isFinished() ? 1 : 0);
}
}
}
@Override
public void updateProgressBar(int id, int value) {
if(id == 0) {
laserTile.getBatteries().setEnergyStored(value*100);
}
else if(id == 1) {
buildingX = value;
}
else if(id == 2) {
buildingX |= value << 16;
laserTile.laserX = buildingX;
buildingX = 0;
}
else if(id == 3) {
buildingZ = value;
}
else if(id == 4) {
buildingZ |= value << 16;
laserTile.laserZ = buildingZ;
buildingZ = 0;
}
else if(id == 5) {
laserTile.setMode(currMode.values()[value]);
}
else if(id == 6)
laserTile.setJammed(value == 1 ? true : false);
else if(id == 7)
laserTile.setFinished(value == 1 ? true : false);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slot)
{
ItemStack stack = null;
Slot slotObject = (Slot) inventorySlots.get(slot);
//null checks and checks if the item can be stacked (maxStackSize > 1)
if (slotObject != null && slotObject.getHasStack()) {
ItemStack stackInSlot = slotObject.getStack();
stack = stackInSlot.copy();
//merges the item into player inventory since its in the tileEntity
if (slot == 0) {
if (!this.mergeItemStack(stackInSlot, 1, 35, true)) {
return null;
}
}
//placing it into the tileEntity is possible since its in the player inventory
//check to make sure it's valid for the slot
else if (!laserTile.isItemValidForSlot(0, stack) || !this.mergeItemStack(stackInSlot, 0, 1, false)) {
return null;
}
if (stackInSlot.stackSize == 0) {
slotObject.putStack(null);
} else {
slotObject.onSlotChanged();
}
if (stackInSlot.stackSize == stack.stackSize) {
return null;
}
slotObject.onPickupFromSlot(player, stackInSlot);
}
return stack;
}
@Override
public boolean canInteractWith(EntityPlayer entityplayer) {
return laserTile.isUseableByPlayer(entityplayer);
}
}