{
	code: "boat",
	class: "EntityBoat",
	tags: ["inanimate", "vehicle"],
	weight: 1900,
	variantgroups: [
		{ code: "type", states: ["sailed"] },
		{ code: "material", states: ["aged"], loadFromProperties: "block/wood" }
	],
	attributes: {
		disabledweatherVaneAnimCode: "weathervane",
		deconstructible: true,
		deconstructDrops: [
			{ type: "item", code: "plank-{material}", quantity: 32 },
			{ type: "item", code: "plank-{material}", quantity: 32 },
			{ type: "item", code: "plank-{material}", quantity: 32 },
			{ type: "item", code: "plank-{material}", quantity: 32 },
			{ type: "item", code: "plank-{material}", quantity: 16 },
			{ type: "block", code: "supportbeam-{material}", quantity: 22 },
			{ type: "item", code: "rope", quantity: 13 },
			{ type: "block", code: "linen-normal-down", quantity: 15 }
		],
		shouldSwivelFromMotion: false,
		speedMultiplier: 1.2,
		swimmingOffsetY: 1,
		unfurlSails: true,
		mountAnimations: {
			idle: "sitboatidle",
			ready: "",
			forwards: "",
			backwards: ""
		}
	},
	hitboxSize: { x: 3, y: 1.2, z: 3 },
	behaviorConfigs: {
		ellipsoidalrepulseagents: {
			offset: { x:0.1, z: 1.5 },
			// Not a 3d Ellipse but essentially a 2d ellipse lengthened in the y-axis
			radius: { x: 1.9, y: 1.5, z: 4.6 }
		},
		passivephysicsmultibox: {
			collisionBoxes: [
				{ x1: -1.4, y1: 0, z1: 0.1, x2: 1.4, y2: 1.2, z2: 2.9 },
				{ x1: -1.4, y1: 0, z1: -2.9, x2: 1.4, y2: 1.2, z2: -0.1 },
				{ x1: -1.4, y1: 0, z1: -5.9, x2: 1.4, y2: 1.2, z2: -2.9 }
			],
			groundDragFactor: 1,
			airDragFallingFactor: 0.5,
			gravityFactor: 1.0
		},
		creaturecarrier: {
			// Note: The FrontSeat selection box originally had that Y-Rotation of 180 degrees - it offseted the player somehow weirdly. Was not able to figure out why. Setting mountRotation works better.
			seats: [
				{ apName: "LeftSeatAP", mountOffset: { x: 0.5 }, bodyYawLimit: 0.4, eyeHeight: 1 },
				{ apName: "RightSeatAP", mountOffset: { x: 0.5 }, bodyYawLimit: 0.4, controllable: true, eyeHeight: 1 }
			]
		},
		writingsurface: {
			fontConfig: {
				maxWidth: 208,
				maxHeight: 96,
				fontSize: 20,
				textVoxelOffsetY: -1,
				textVoxelOffsetZ: 0.25,
				textVoxelHeight: 6,
				fontName: "Almendra",
				verticalAlign: "Middle",
				boldFont: true,
			}
		},
		rideableaccessories: {
			dropContentsOnDeath: true,
			wearableSlots: [
				{
					code: "Left Prow Storage",
					forCategoryCodes: ["anchor"],
					attachmentPointCode: "LProwAP",
					stepParentTo: {
						"": { elementName: "LeftProwStorage" }
					}
				},
				{
					code: "Upper Mast Storage",
					forCategoryCodes: ["lantern"],
					attachmentPointCode: "UpperMastAP",
					stepParentTo: {
						"": { elementName: "UpperMastStorage" }
					}
				},
				{
					code: "Figurehead",
					forCategoryCodes: ["figurehead", "chiseled"],
					attachmentPointCode: "FigureheadAP",
					stepParentTo: {
						"": { elementName: "FigureHeadStorage" }
					}
				},
				{
					code: "Left Ratlines",
					forCategoryCodes: ["ratlines"],
					attachmentPointCode: "RatlineLAP",
					stepParentTo: {
						"": { elementName: "RatlineL" }
					}
				},
				{
					code: "Right Ratlines",
					forCategoryCodes: ["ratlines"],
					attachmentPointCode: "RatlineRAP",
					stepParentTo: {
						"": { elementName: "RatlineR" }
					}
				},
				{
					code: "Left Storage 1",
					forCategoryCodes: ["seat", "chest", "ropetiepost", "basket", "crate"],
					behindSlots: ["Left Storage 2"],
					attachmentPointCode: "LStore1AP",
					stepParentTo: {
						"": { elementName: "LeftStorage1" }
					}
				},
				{
					code: "Left Storage 2",
					forCategoryCodes: ["seat", "chest", "ropetiepost", "basket", "crate"],
					behindSlots: ["Left Storage 3"],
					attachmentPointCode: "LStore2AP",
					stepParentTo: {
						"": { elementName: "LeftStorage2" }
					}
				},
				{
					code: "Left Storage 3",
					forCategoryCodes: ["seat", "chest", "ropetiepost", "basket", "crate"],
					behindSlots: ["Left Storage 4"],
					attachmentPointCode: "LStore3AP",
					stepParentTo: {
						"": { elementName: "LeftStorage3" }
					}
				},
				{
					code: "Left Storage 4",
					forCategoryCodes: ["seat", "chest", "basket", "crate"],
					attachmentPointCode: "LStore4AP",
					stepParentTo: {
						"": { elementName: "LeftStorage4" }
					}
				},
				{
					code: "Right Storage 1",
					forCategoryCodes: ["seat", "chest", "ropetiepost", "basket", "crate"],
					behindSlots: ["Right Storage 2"],
					attachmentPointCode: "RStore1AP",
					stepParentTo: {
						"": { elementName: "RightStorage1" }
					}
				},
				{
					code: "Right Storage 2",
					forCategoryCodes: ["seat", "chest", "ropetiepost", "basket", "crate"],
					behindSlots: ["Right Storage 3"],
					attachmentPointCode: "RStore2AP",
					stepParentTo: {
						"": { elementName: "RightStorage2" }
					}
				},
				{
					code: "Right Storage 3",
					forCategoryCodes: ["seat", "chest", "ropetiepost", "basket", "crate"],
					behindSlots: ["Right Storage 4"],
					attachmentPointCode: "RStore3AP",
					stepParentTo: {
						"": { elementName: "RightStorage3" }
					}
				},
				{
					code: "Right Storage 4",
					forCategoryCodes: ["seat", "chest", "basket", "crate"],
					attachmentPointCode: "RStore4AP",
					stepParentTo: {
						"": { elementName: "RightStorage4" }
					}
				},
				{
					code: "LeftSeatAP",
					forCategoryCodes: [],
				},
				{
					code: "RightSeatAP",
					forCategoryCodes: [],
				},
				{
					code: "Lower Mast Storage",
					forCategoryCodes: ["rope"],
					attachmentPointCode: "LowerMastAP",
					stepParentTo: {
						"": { elementName: "LowerMastStorage" }
					}
				},
				{
					code: "Left Plaque",
					forCategoryCodes: ["plaque"],
					attachmentPointCode: "LPlaqueAP",
					stepParentTo: {
						"": { elementName: "PlaqueLeftFront" }
					}
				},
				{
					code: "Right Plaque",
					forCategoryCodes: ["plaque"],
					attachmentPointCode: "RPlaqueAP",
					stepParentTo: {
						"": { elementName: "PlaqueRightFront" }
					}
				},
					{
					code: "Right Shield1",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "RShield1AP",
					stepParentTo: {
						"LowerArmL": { elementName: "RShield1SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Right Shield2",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "RShield2AP",
					stepParentTo: {
						"LowerArmL": { elementName: "RShield2SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Right Shield3",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "RShield3AP",
					stepParentTo: {
						"LowerArmL": { elementName: "RShield3SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Right Shield4",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "RShield4AP",
					stepParentTo: {
						"LowerArmL": { elementName: "RShield4SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Right Shield5",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "RShield5AP",
					stepParentTo: {
						"LowerArmL": { elementName: "RShield5SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Right Shield6",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "RShield6AP",
					stepParentTo: {
						"LowerArmL": { elementName: "RShield6SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Right Shield7",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "RShield7AP",
					stepParentTo: {
						"LowerArmL": { elementName: "RShield7SP" }
					},
					emptyInteractPassThrough: true
				},
					{
					code: "Left Shield1",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "LShield1AP",
					stepParentTo: {
						"LowerArmL": { elementName: "LShield1SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Left Shield2",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "LShield2AP",
					stepParentTo: {
						"LowerArmL": { elementName: "LShield2SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Left Shield3",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "LShield3AP",
					stepParentTo: {
						"LowerArmL": { elementName: "LShield3SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Left Shield4",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "LShield4AP",
					stepParentTo: {
						"LowerArmL": { elementName: "LShield4SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Left Shield5",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "LShield5AP",
					stepParentTo: {
						"LowerArmL": { elementName: "LShield5SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Left Shield6",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "LShield6AP",
					stepParentTo: {
						"LowerArmL": { elementName: "LShield6SP" }
					},
					emptyInteractPassThrough: true
				},
				{
					code: "Left Shield7",
					forCategoryCodes: ["shield"],
					attachmentPointCode: "LShield7AP",
					stepParentTo: {
						"LowerArmL": { elementName: "LShield7SP" }
					},
					emptyInteractPassThrough: true
				}
			]
		},
		selectionboxes: {
			selectionBoxes: ["LProwAP", "UpperMastAP", "FigureheadAP", "RatlineLAP", "RatlineRAP", "LStore1AP", "LStore2AP", "LStore3AP", "LStore4AP", "RStore1AP", "RStore2AP", 
							"RStore3AP", "RStore4AP", "LeftSeatAP", "RightSeatAP", "LowerMastAP", "LPlaqueAP", "RPlaqueAP", "RShield1AP", "RShield2AP", "RShield3AP", "RShield4AP", "RShield5AP", "RShield6AP", "RShield7AP", "LShield1AP", "LShield2AP", "LShield3AP", "LShield4AP", "LShield5AP", "LShield6AP", "LShield7AP" ],
		}
	},
	client: {
		size: 1,
		renderer: "Shape",
		shape: { base: "entity/nonliving/boat/sailed", ignoreElements: ["hideWater"] },
		animations: [
			{
				code: "turnLeft",
				animation: "turnLeft",
				animationSpeed: 1,
				easeInSpeed: 2,
				easeOutSpeed: 2
			},
			{
				code: "turnRight",
				animation: "turnRight",
				animationSpeed: 1,
				easeInSpeed: 2,
				easeOutSpeed: 2
			},
			{
				code: "weathervane",
				animation: "weathervane",
				animationSpeed: 0,
				weight: 1,
				blendMode: "AddAverage"
			}
		],
		textures: {
			"material": { base: "game:block/wood/debarked/{material}" },
			"oak": { base: "game:block/wood/debarked/{material}" },
			"oak1": { base: "game:block/wood/planks/{material}*" },
			"birch1": { base: "game:block/wood/planks/{material}*" },
			"plainoak": { base: "game:block/wood/debarked/{material}" }
		},
		behaviors: [
			{ code: "ellipsoidalrepulseagents" },
			{ code: "passivephysicsmultibox" },
			{ code: "interpolateposition" },
			{ code: "hidewatersurface", hideWaterElement: "ORIGIN/hideWater/*" },
			{ code: "selectionboxes" },
			{ code: "rideableaccessories" },
			{ code: "creaturecarrier" },
			{ code: "writingsurface" }
		]
	},
	server: {
		behaviors: [
			{ code: "ellipsoidalrepulseagents" },
			{ code: "passivephysicsmultibox" },
			{ code: "selectionboxes" },
			{ code: "rideableaccessories" },
			{ code: "creaturecarrier" },
			{ code: "writingsurface" }
		]
	},
	sounds: { }
}
