
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using Eco.Gameplay.Blocks;
    using Eco.Gameplay.Components;
    using Eco.Gameplay.Components.Auth;
    using Eco.Gameplay.DynamicValues;
    using Eco.Gameplay.Economy;
    using Eco.Gameplay.Housing;
    using Eco.Gameplay.Interactions;
    using Eco.Gameplay.Items;
    using Eco.Gameplay.Minimap;
    using Eco.Gameplay.Objects;
    using Eco.Gameplay.Players;
    using Eco.Gameplay.Property;
    using Eco.Gameplay.Skills;
    using Eco.Gameplay.Systems.TextLinks;
    using Eco.Gameplay.Pipes.LiquidComponents;
    using Eco.Gameplay.Pipes.Gases;
    using Eco.Gameplay.Systems.Tooltip;
    using Eco.Shared;
    using Eco.Shared.Math;
    using Eco.Shared.Serialization;
    using Eco.Shared.Utils;
    using Eco.Shared.View;
    using Eco.Shared.Items;
    using Eco.Gameplay.Pipes;
    using Eco.World.Blocks;
	using Eco.World;
	
	namespace Eco.Mods.TechTree
{ 
	[Serialized]    
    [RequireComponent(typeof(AttachmentComponent))]
    [RequireComponent(typeof(PropertyAuthComponent))]
    [RequireComponent(typeof(MinimapComponent))]                
    public partial class LargeMetalDoorObject : WorldObject
    {
        public override string FriendlyName { get { return "Metal Arch"; } } 


        protected override void Initialize()
        {
                               
            this.GetComponent<PropertyAuthComponent>().Initialize(AuthModeType.Inherited);
			
        }

		static LargeMetalDoorObject()
		{
            WorldObject.AddOccupancy<LargeMetalDoorObject>(new List<BlockOccupancy>(){
                new BlockOccupancy(new Vector3i(0, 0, 0), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 0, 1), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 0, 2), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 0, 3), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, 0), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, 1), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, 2), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, 3), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 2, 0), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 2, 1), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 2, 2), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 2, 3), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 3, 0), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 3, 1), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 3, 2), typeof(LargeMetalDoorObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 3, 3), typeof(LargeMetalDoorObjectBlock)),



                });
        }
		
        public override void Destroy()
        {
            base.Destroy();
        }
       
    }

    [Serialized]
    public partial class LargeMetalDoorItem : WorldObjectItem<LargeMetalDoorObject>
    {
        public override string FriendlyName { get { return "Metal Arch"; } } 
        public override string Description { get { return "A Doorway Arch For Vehicle Access to WorkShops And Other Storage"; } }

        static LargeMetalDoorItem()
        {
            
        }      
    }

    [RequiresSkill(typeof(SteelworkingSkill), 2)]   
    public partial class LargeMetalDoorRecipe : Recipe
    {
        public LargeMetalDoorRecipe()
        {
            this.Products = new CraftingElement[]
            {
                new CraftingElement<LargeMetalDoorItem>(),          
            };
            this.Ingredients = new CraftingElement[]
            {
                new CraftingElement<SteelItem>(typeof(SteelworkingEfficiencySkill), 40, SteelworkingEfficiencySkill.MultiplicativeStrategy),
            };
            this.CraftMinutes = CreateCraftTimeValue(typeof(LargeMetalDoorRecipe), Item.Get<LargeMetalDoorItem>().UILink(), 15, typeof(SteelworkingSpeedSkill));    
            this.Initialize("Metal Arch", typeof(LargeMetalDoorRecipe));

            CraftingComponent.AddRecipe(typeof(RollingMillObject), this);
        }
    }
	
	[Serialized]
    [Wall, Solid]
    public class LargeMetalDoorObjectBlock : BuildingWorldObjectBlock
    {
        public LargeMetalDoorObjectBlock(WorldObject obj)
            : base(obj)
        { }

        protected LargeMetalDoorObjectBlock()
        { }
    }

    [Serialized]
    public partial class LargeMetalDoorBlock :
    Block
    { }
}