Modding:HorizontalOrientable behavior: Difference between revisions

From Vintage Story Wiki
(→‎Purpose: worldvariantgroups link)
(Update and compare with other behaviors)
Line 1: Line 1:
== Purpose ==
== Purpose ==
Block can be rotated horizontally. Used for:
The behavior selects an orientation variant of a block when the block is placed. Only 4 orientations are supported: north, east, south, and west, hence why it is called HorizontalOrientable.
* Workbench
 
* Ladder
Similar block behaviors:
* Echochamber
; [[Json_block_behaviors_WrenchOrientable|WrenchOrientable]] : Allows the variant to be changed after the block is placed
* Chest
; [[Json_block_behaviors_OmniRotatable|OmniRotatable]] : Supports more orientation types. Using the <code>rotateH: "true"</code> property, it can support the horizontal orientation type, just like HorizontalOrientable. However, OmniRotatable requires the variant code to be named "rot" instead of HorizontalOrientable's variant code of "horizontalorientation" or "side". Also OmniRotatable allows changing the drop chance instead of the dropped block.
* Stove
 
* Altar
== Used by blocks ==
* Windmillrotor
* agedwallpaperplanks
* Bellows
* altar
Requires a variant group loaded from the <code>abstract/horizontalorientation</code> [[Json:block:worldvariantgroups|world property]]:
* bellows
* bloomerybase
* brake
* cage
* churn
* clayoven
* clutch
* cokeovendoor
* condenser
* crank
* creativerotor
* helvehammerbase
* jonas
* labeledchest - the HorizontalOrientable behavior is redundant for this block. The <code>BlockLabeledChest</code> block class inherits from <code>BlockGenericTypedContainer</code>, which also handles rotation. The regular chest block only uses <code>BlockGenericTypedContainer</code> for its rotation.
* metalpartpile
* palisadestakes
* palisadewall
* pulverizerframe
* resonator
* skep
* slantedroofing
* slantedroofingcornerinner
* slantedroofingcornerouter
* statictranslocator
* stationarybasket
* stonecoffinsection
* stove
* trunk
* verticalboiler
* wagonwheels
* windmillrotor
* workbench
 
== Usage ==
 
The block must have a variant code of "horizontalorientation" or "side". It is a mistake to add both variant codes to the block, but in this situation, the behavior will use the "horizontalorientation" code. The variant code must contain the 4 cardinal directions. They can be directly specified via the <code>states</code> field, but the cleaner way is to load them from the <code>abstract/horizontalorientation</code> [[Json:block:worldvariantgroups|world property]]:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
variantgroups: [
variantgroups: [
Line 15: Line 50:
],
],
</syntaxhighlight>
</syntaxhighlight>
One of the <code>dropBlockFace</code> or <code>dropBlock</code> properties must be used to specify which item is dropped when the block is broken.


== Properties ==
== Properties ==
<code>dropBlockFace (compassdirection, default: "north")</code>: Determines which direction the block drop face is done. <br>
; <code>dropBlockFace</code>&colon; (compassdirection, default&colon; "north")
<code>dropBlock (optional) </code>: Determines which block to drop.
: Specifies which variant is dropped when the block is broken. The value is used as a variant value for the orientation variant code.
; <code>dropBlock</code>&colon; (optional)
: Specifies which block to drop. The value is a full item code. Only one of the <code>dropBlock</code> and <code>dropBlockFace</code> properties should be specified.


{{Navbox/modding|Vintage Story}}
{{Navbox/modding|Vintage Story}}

Revision as of 06:26, 12 October 2023

Purpose

The behavior selects an orientation variant of a block when the block is placed. Only 4 orientations are supported: north, east, south, and west, hence why it is called HorizontalOrientable.

Similar block behaviors:

WrenchOrientable
Allows the variant to be changed after the block is placed
OmniRotatable
Supports more orientation types. Using the rotateH: "true" property, it can support the horizontal orientation type, just like HorizontalOrientable. However, OmniRotatable requires the variant code to be named "rot" instead of HorizontalOrientable's variant code of "horizontalorientation" or "side". Also OmniRotatable allows changing the drop chance instead of the dropped block.

Used by blocks

  • agedwallpaperplanks
  • altar
  • bellows
  • bloomerybase
  • brake
  • cage
  • churn
  • clayoven
  • clutch
  • cokeovendoor
  • condenser
  • crank
  • creativerotor
  • helvehammerbase
  • jonas
  • labeledchest - the HorizontalOrientable behavior is redundant for this block. The BlockLabeledChest block class inherits from BlockGenericTypedContainer, which also handles rotation. The regular chest block only uses BlockGenericTypedContainer for its rotation.
  • metalpartpile
  • palisadestakes
  • palisadewall
  • pulverizerframe
  • resonator
  • skep
  • slantedroofing
  • slantedroofingcornerinner
  • slantedroofingcornerouter
  • statictranslocator
  • stationarybasket
  • stonecoffinsection
  • stove
  • trunk
  • verticalboiler
  • wagonwheels
  • windmillrotor
  • workbench

Usage

The block must have a variant code of "horizontalorientation" or "side". It is a mistake to add both variant codes to the block, but in this situation, the behavior will use the "horizontalorientation" code. The variant code must contain the 4 cardinal directions. They can be directly specified via the states field, but the cleaner way is to load them from the abstract/horizontalorientation world property:

	variantgroups: [
		{ code:"side", loadFromProperties: "abstract/horizontalorientation" }
	],

One of the dropBlockFace or dropBlock properties must be used to specify which item is dropped when the block is broken.

Properties

dropBlockFace: (compassdirection, default: "north")
Specifies which variant is dropped when the block is broken. The value is used as a variant value for the orientation variant code.
dropBlock: (optional)
Specifies which block to drop. The value is a full item code. Only one of the dropBlock and dropBlockFace properties should be specified.
Icon Sign.png

Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.

Modding
Modding Introduction Getting Started Theme Pack
Content Modding Content Mods Developing a Content Mod Basic Tutorials Intermediate Tutorials Advanced Tutorials Content Mod Concepts
Code Modding Code Mods Setting up your Development Environment
Property Overview ItemEntityEntity BehaviorsBlockBlock BehaviorsBlock ClassesBlock EntitiesBlock Entity BehaviorsCollectible BehaviorsWorld properties
Workflows & Infrastructure Modding Efficiency TipsMod-engine compatibilityMod ExtensibilityVS Engine
Additional Resources Community Resources Modding API Updates Programming Languages List of server commandsList of client commandsClient startup parametersServer startup parameters
Example ModsAPI DocsGitHub Repository