package com.elisis.gtnhlanth.common.tileentity;
import static com.elisis.gtnhlanth.util.DescTextLocalization.addDotText;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder;
import static gregtech.api.enums.GT_HatchElement.Energy;
import static gregtech.api.enums.GT_HatchElement.InputHatch;
import static gregtech.api.enums.GT_HatchElement.Maintenance;
import static gregtech.api.enums.GT_HatchElement.OutputHatch;
import static gregtech.api.enums.GT_Values.VN;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW;
import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages;
import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import java.util.ArrayList;
import java.util.Objects;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import com.elisis.gtnhlanth.common.beamline.BeamInformation;
import com.elisis.gtnhlanth.common.beamline.BeamLinePacket;
import com.elisis.gtnhlanth.common.beamline.Particle;
import com.elisis.gtnhlanth.common.block.AntennaCasing;
import com.elisis.gtnhlanth.common.hatch.TileHatchInputBeamline;
import com.elisis.gtnhlanth.common.hatch.TileHatchOutputBeamline;
import com.elisis.gtnhlanth.common.register.LanthItemList;
import com.elisis.gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeLoader;
import com.elisis.gtnhlanth.util.DescTextLocalization;
import com.elisis.gtnhlanth.util.Util;
import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass;
import com.google.common.collect.ImmutableMap;
import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.TickTime;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.shutdown.ShutDownReason;
import gregtech.api.util.shutdown.SimpleShutDownReason;
public class Synchrotron extends GT_MetaTileEntity_EnhancedMultiBlockBase<Synchrotron>
implements ISurvivalConstructable {
private static final IStructureDefinition<Synchrotron> STRUCTURE_DEFINITION;
protected static final String STRUCTURE_PIECE_ENTRANCE = "entrance";
protected static final String STRUCTURE_PIECE_BASE = "base";
public static final int CONSUMED_FLUID = 32_000; // Fluid consumed per processed recipe, maybe increase with EU
public static final int MIN_INPUT_FOCUS = 25; // Inclusive
private ArrayList<TileHatchInputBeamline> mInputBeamline = new ArrayList<>();
private ArrayList<TileHatchOutputBeamline> mOutputBeamline = new ArrayList<>();
public ArrayList<AntennaCasing> mAntennaCasings = new ArrayList<>();
private static final int CASING_INDEX = GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings5, 14);
private static final byte MIN_GLASS_TIER = 6;
private int energyHatchTier;
private int antennaeTier;
private Byte glassTier;
/*
* c: Shielded accelerator casing v: Vacuum k: Superconducting coil d: Coolant Delivery casing
*/
// TODO: E > 1200eV for x-ray lithography
// spotless:off
static {
STRUCTURE_DEFINITION = StructureDefinition.<Synchrotron>builder().addShape(
STRUCTURE_PIECE_ENTRANCE,
new String[][] {
{
" ",
" ccc ",
" cgggc ",
" cgvgc ",
" cgggc ",
" ccc "
}
})
.addShape(
STRUCTURE_PIECE_BASE,
new String[][] {
{
" ",
" ccc ",
" ccccc cjjjjjc ",
" cc-cc cjjc~cjjc ",
" ccccc cjjjjjc ",
" ccc ",
" "
},
{
" ",
" ccc ccccccccccc ",
" c---c ccc-------ccc ",
" c---c ccc-------ccc ",
" c---c ccc-------ccc ",