package gtnhlanth.common.tileentity;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder;
import static gregtech.api.enums.GTValues.VN;
import static gregtech.api.enums.HatchElement.Energy;
import static gregtech.api.enums.HatchElement.InputHatch;
import static gregtech.api.enums.HatchElement.Maintenance;
import static gregtech.api.enums.HatchElement.OutputHatch;
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.GTStructureUtility.buildHatchAdder;
import static gtnhlanth.util.DescTextLocalization.addDotText;
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.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 bartworks.API.BorosilicateGlass;
import gregtech.api.GregTechAPI;
import gregtech.api.enums.GTValues;
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.MTEEnhancedMultiBlockBase;
import gregtech.api.metatileentity.implementations.MTEHatchEnergy;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GTUtility;
import gregtech.api.util.MultiblockTooltipBuilder;
import gregtech.api.util.shutdown.ShutDownReason;
import gregtech.api.util.shutdown.SimpleShutDownReason;
import gtnhlanth.common.beamline.BeamInformation;
import gtnhlanth.common.beamline.BeamLinePacket;
import gtnhlanth.common.beamline.Particle;
import gtnhlanth.common.block.BlockAntennaCasing;
import gtnhlanth.common.hatch.MTEHatchInputBeamline;
import gtnhlanth.common.hatch.MTEHatchOutputBeamline;
import gtnhlanth.common.register.LanthItemList;
import gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeLoader;
import gtnhlanth.util.DescTextLocalization;
import gtnhlanth.util.Util;
public class MTESynchrotron extends MTEEnhancedMultiBlockBase<MTESynchrotron> implements ISurvivalConstructable {
private static final IStructureDefinition<MTESynchrotron> 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<MTEHatchInputBeamline> mInputBeamline = new ArrayList<>();
private ArrayList<MTEHatchOutputBeamline> mOutputBeamline = new ArrayList<>();
public ArrayList<BlockAntennaCasing> mAntennaCasings = new ArrayList<>();
private static final int CASING_INDEX = GTUtility.getCasingTextureIndex(GregTechAPI.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.<MTESynchrotron>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 ",
" ccc ccccccccccc ",
" "
},
{
" ccccccccccc ",
" ccc cc-----------cc ",
" c---c cc-------------cc ",
" c---c cc-------------cc ",
" c---c cc------