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"; } }