
    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 LargeMetalArchObject : WorldObject
    {
        public override string FriendlyName { get { return "Metal Arch"; } } 


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

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



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

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

        static LargeMetalArchItem()
        {
            
        }      
    }

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

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

        protected LargeMetalArchObjectBlock()
        { }
    }

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