
    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;
	
	namespace Eco.Mods.TechTree
{ 
	[Serialized]    
    [RequireComponent(typeof(AttachmentComponent))]
    [RequireComponent(typeof(PropertyAuthComponent))]
    [RequireComponent(typeof(MinimapComponent))]                
    [RequireComponent(typeof(LinkComponent))]                   
    public partial class ShippingContainerObject : WorldObject
    {
        public override string FriendlyName { get { return "Shipping Container"; } } 


        protected override void Initialize()
        {
            this.GetComponent<MinimapComponent>().Initialize("Storage");                                 



        }

		static ShippingContainerObject()
		{
            WorldObject.AddOccupancy<ShippingContainerObject>(new List<BlockOccupancy>(){
				new BlockOccupancy(new Vector3i(0, 0, -1), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, -1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 2, -1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 0, -2), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, -2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 2, -2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 0, -3), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, -3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 2, -3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 0, -0), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(1, 1, -0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 2, -0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 0, -1), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(1, 1, -1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 2, -1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 0, -2), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(1, 1, -2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 2, -2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 0, -3), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(1, 1, -3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 2, -3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 0, -0), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(-1, 1, -0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 2, -0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 0, -1), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(-1, 1, -1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 2, -1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 0, -2), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(-1, 1, -2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 2, -2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 0, -3), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(-1, 1, -3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 2, -3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 0, 0), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, 0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 2, 0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 0, 1), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, 1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 2, 1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 0, 2), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, 2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 2, 2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 0, 3), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(0, 1, 3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(0, 2, 3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 0, 0), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(1, 1, 0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 2, 0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 0, 1), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(1, 1, 1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 2, 1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 0, 2), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(1, 1, 2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 2, 2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 0, 3), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(1, 1, 3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(1, 2, 3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 0, 0), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(-1, 1, 0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 2, 0), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 0, 1), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(-1, 1, 1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 2, 1), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 0, 2), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(-1, 1, 2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 2, 2), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 0, 3), typeof(LargeMetalArchObjectBlock)),
                new BlockOccupancy(new Vector3i(-1, 1, 3), typeof(LargeMetalArchObjectBlock)),
				new BlockOccupancy(new Vector3i(-1, 2, 3), typeof(LargeMetalArchObjectBlock)),
                });
        }
		
        public override void Destroy()
        {
            base.Destroy();
        }
       
    }


    [Serialized]
    public partial class ShippingContainerItem : WorldObjectItem<ShippingContainerObject>
    {
        public override string FriendlyName { get { return "Shipping Container"; } } 
        public override string Description { get { return "Shipping Container For Storage."; } }

        static ShippingContainerItem()
        {
            
        }
        
    }

    [RequiresSkill(typeof(SteelworkingSkill), 2)]   
    public partial class ShippingContainerRecipe : Recipe
    {
        public ShippingContainerRecipe()
        {
            this.Products = new CraftingElement[]
            {
                new CraftingElement<ShippingContainerItem>(),          
            };
            this.Ingredients = new CraftingElement[]
            {
                new CraftingElement<SteelItem>(typeof(SteelworkingEfficiencySkill), 40, SteelworkingEfficiencySkill.MultiplicativeStrategy),
            };
            this.CraftMinutes = CreateCraftTimeValue(typeof(ShippingContainerRecipe), Item.Get<ShippingContainerItem>().UILink(), 10, typeof(SteelworkingSpeedSkill));    
            this.Initialize("Shipping Container", typeof(ShippingContainerRecipe));

            CraftingComponent.AddRecipe(typeof(RollingMillObject), this);
        }
    }
}