package zmaster587.advancedRocketry.tile.multiblock.machine;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import zmaster587.advancedRocketry.api.AdvancedRocketryBlocks;
import zmaster587.advancedRocketry.inventory.TextureResources;
import zmaster587.libVulpes.api.LibVulpesBlocks;
import zmaster587.libVulpes.api.material.AllowedProducts;
import zmaster587.libVulpes.api.material.Material;
import zmaster587.libVulpes.api.material.MaterialRegistry;
import zmaster587.libVulpes.block.BlockMeta;
import zmaster587.libVulpes.client.util.ProgressBarImage;
import zmaster587.libVulpes.interfaces.IRecipe;
import zmaster587.libVulpes.inventory.modules.IModularInventory;
import zmaster587.libVulpes.inventory.modules.IProgressBar;
import zmaster587.libVulpes.inventory.modules.ModuleBase;
import zmaster587.libVulpes.inventory.modules.ModuleImage;
import zmaster587.libVulpes.inventory.modules.ModuleProgress;
import zmaster587.libVulpes.recipe.RecipesMachine;
import zmaster587.libVulpes.tile.multiblock.TileMultiBlock;
import zmaster587.libVulpes.tile.multiblock.TileMultiblockMachine;
import zmaster587.libVulpes.util.IconResource;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.util.ForgeDirection;
public class TilePrecisionAssembler extends TileMultiblockMachine implements IModularInventory, IProgressBar {
public static final Object structure[][][] = new Object[][][]{ {{LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock},
{LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock},
{LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock}},
{{LibVulpesBlocks.blockStructureBlock, Blocks.glass, Blocks.glass, LibVulpesBlocks.blockStructureBlock},
{LibVulpesBlocks.blockStructureBlock, Blocks.air, Blocks.air, LibVulpesBlocks.blockStructureBlock},
{LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock, LibVulpesBlocks.blockStructureBlock}},
{{'c', '*', '*', '*'},
{'*', new BlockMeta(Block.getBlockFromItem(MaterialRegistry.getMaterialFromName("Copper").getProduct(AllowedProducts.getProductByName("COIL")).getItem()), MaterialRegistry.getMaterialFromName("Copper").getMeta()), new BlockMeta(Block.getBlockFromItem(MaterialRegistry.getMaterialFromName("Copper").getProduct(AllowedProducts.getProductByName("COIL")).getItem()), MaterialRegistry.getMaterialFromName("Copper").getMeta()), '*'},
{'*', AdvancedRocketryBlocks.blockMotor, AdvancedRocketryBlocks.blockMotor, '*'}}};
@Override
public Object[][][] getStructure() {
return structure;
}
@Override
public List<BlockMeta> getAllowableWildCardBlocks() {
List<BlockMeta> list = super.getAllowableWildCardBlocks();
list.add(new BlockMeta(LibVulpesBlocks.blockStructureBlock, BlockMeta.WILDCARD));
list.addAll(TileMultiBlock.getMapping('O'));
list.addAll(TileMultiBlock.getMapping('I'));
list.addAll(TileMultiBlock.getMapping('P'));
return list;
}
@Override
public ResourceLocation getSound() {
return TextureResources.sndPrecAss;
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
return AxisAlignedBB.getBoundingBox(xCoord -4, yCoord -4, zCoord -4, xCoord + 4, yCoord + 4, zCoord + 4);
}
@Override
public List<ModuleBase> getModules(int ID, EntityPlayer player) {
List<ModuleBase> modules = super.getModules(ID, player);
int yOffset = 16;
int xOffset = 65;
if(worldObj.isRemote)
modules.add(new ModuleImage(xOffset, yOffset, new IconResource(132, 0, 53, 66, TextureResources.progressBars)));
modules.add(new ModuleProgress(xOffset + 35, yOffset + 22, 1, new ProgressBarImage(167, 22, 13, 15, 54, 42, 13, 15, ForgeDirection.DOWN, TextureResources.progressBars), this));
modules.add(new ModuleProgress(xOffset + 36, yOffset + 41, 2, new ProgressBarImage(168, 41, 11, 15, 67, 42, 11, 15, ForgeDirection.DOWN, TextureResources.progressBars), this));
modules.add(new ModuleProgress(xOffset + 31, yOffset + 62, 3, new ProgressBarImage(163, 62, 21, 3, 90, 42, 21, 3, ForgeDirection.EAST, TextureResources.progressBars), this));
return modules;
}
@Override
public int getProgress(int id) {
if(id == 0) {
return super.getProgress(id);
}
if(id == 1) {
return Math.min(currentTime, completionTime/3);
}
else if(id == 2) {
int relativeTime = currentTime - (completionTime/3);
return relativeTime >= 0 ? Math.min(relativeTime, completionTime/3) : 0;
}
int relativeTime = currentTime - (2*completionTime/3);
return relativeTime >= 0 ? Math.min(relativeTime, completionTime/3) : 0;
}
@Override
public int getTotalProgress(int id) {
if(id == 0)
return super.getTotalProgress(id);
return completionTime/3;
}
@Override
public void setTotalProgress(int id, int progress) {
if(id == 0)
super.setTotalProgress(id, progress);
}
@Override
public void setProgress(int id, int progress) {
if(id == 0)
super.setProgress(id, progress);
}
@Override
public float getNormallizedProgress(int id) {
return getProgress(id)/(float)getTotalProgress(id);
}
@Override
public String getMachineName() {
return "container.precisionassemblingmachine";
}
}