package postInit.machines

import gregtech.api.metatileentity.MetaTileEntity
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity
import gregtech.api.metatileentity.multiblock.IMultiblockPart
import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController
import gregtech.api.pattern.BlockPattern
import gregtech.api.pattern.FactoryBlockPattern
import gregtech.api.recipes.RecipeMap
import gregtech.api.recipes.builders.SimpleRecipeBuilder
import gregtech.client.renderer.ICubeRenderer

import gregtech.client.renderer.texture.Textures
import gregicality.multiblocks.api.render.GCYMTextures
import preInit.CustomTexturesClient

import gregtech.common.blocks.BlockGlassCasing
import gregtech.common.blocks.BlockMachineCasing
import gregtech.common.blocks.BlockSteamCasing
import gregtech.common.blocks.BlockComputerCasing
import gregtech.common.blocks.BlockMetalCasing
import gregtech.common.blocks.BlockBoilerCasing
import gregtech.common.blocks.MetaBlocks
import gregtech.common.blocks.BlockFrame

import net.minecraft.init.Blocks
import net.minecraft.util.ResourceLocation

import net.minecraftforge.fml.relauncher.Side
import net.minecraftforge.fml.relauncher.SideOnly



public class MetaTileEntityPlasmaPolymerizationBellTypeReactor extends RecipeMapMultiblockController {

    private static final RecipeMap<SimpleRecipeBuilder> PLASMA_POLYMERIZATION_BELL_TYPE_REACTOR_RECIPES = new RecipeMap<>("plasma_polymerization_bell_type_reactor", 4, 4, 1, 1, new SimpleRecipeBuilder(), false)


    public MetaTileEntityPlasmaPolymerizationBellTypeReactor(ResourceLocation metaTileEntityId) {
        super(metaTileEntityId, PLASMA_POLYMERIZATION_BELL_TYPE_REACTOR_RECIPES)
    }

    @Override
    public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) {
        return new MetaTileEntityPlasmaPolymerizationBellTypeReactor(metaTileEntityId)
    }

    @Override
    protected BlockPattern createStructurePattern() {
        return FactoryBlockPattern.start()
                .aisle("FFFFF","F F F","F   F","FFFFF")
                .aisle("XCCCX"," CCC "," CCC ","F   F")
                .aisle("FFFFF"," C#C "," CCC ","F   F")
                .aisle("XCCCX"," CCC "," CCC ","F   F")
                .aisle("FXSXF","F X F","F   F","FFFFF")
                .where('S' as char, selfPredicate())
                .where('F' as char, RecipeMapMultiblockController.frames(Materials.TreatedWood))
                .where('X' as char, states(blockstate('gregtech:metal_casing', 'variant=bronze_bricks')).setMinGlobalLimited(10).or(autoAbilities(true, false, true, true, false)))
                .where('C' as char, states(MetaBlocks.STEAM_CASING.getState(BlockSteamCasing.SteamCasingType.WOOD_WALL)))
                .where('#' as char, air())
                .where(' ' as char, TraceabilityPredicate.ANY)
                .build()
    }
    @Override
    public ICubeRenderer getBaseTexture(IMultiblockPart sourcePart) {
        return GCYMTextures.NONCONDUCTING_CASING
    }
}