Json block behaviors OmniRotatable: Difference between revisions

From Vintage Story Wiki
(Describe the other rotation properties)
Line 1: Line 1:
== Purpose ==
== Purpose ==


Provides slabs with the functionality to rotate depending on the orientation of the player.  
When placing the block, a orientation variant is selected based on the orientation of the player.
 
There are several meaningful ways to define a group of orientation variants for a block. Each orientation group type has different variant group requirements and different properties for the OmniRotatable behavior. Where possible, the examples below use [[Json:block:worldvariantgroups|world properties]] to assist in defining the variant states, but this is optional; the states may be directly listed instead.
<table class="wikitable">
  <tr style="background-color: rgba(0,0,0,0.2);">
    <th style="background-color: rgba(0,0,0,0.2);">Orientation group type</th>
    <th style="background-color: rgba(0,0,0,0.2);">Required variant groups</th>
    <th style="background-color: rgba(0,0,0,0.2);">Example block</th>
    <th style="background-color: rgba(0,0,0,0.2);">Example variant group definition</th>
    <th style="background-color: rgba(0,0,0,0.2);">Required behavior properties</th>
  </tr>
  <tr>
    <td>Face 6 directions</td>
    <td>
* <code>rot</code> variant group with the states "north", "east", "south", "west", "up", and "down"
    </td>
    <td>slab</td>
    <td><code>{ code:"rot", states: ["up", "down"], loadFromProperties: "abstract/horizontalorientation" }</code></td>
    <td><code>{ name: "OmniRotatable", properties: {rotateSides: "true"} }</code></td>
  </tr>
  <tr>
    <td>Face up/down</td>
    <td>
* <code>rot</code> variant group with the states "up" and "down"
    </td>
    <td>none</td>
    <td><code>{ code:"rot", loadFromProperties: "abstract/verticalorientation" }</code></td>
    <td><code>{ name: "OmniRotatable", properties: {rotateV: "true"} }</code></td>
  </tr>
  <tr>
    <td>Face horizontally</td>
    <td>
* <code>rot</code> variant group with the states "north", "east", "south", and "west"
    </td>
    <td>none</td>
    <td><code>{ code:"rot", loadFromProperties: "abstract/horizontalorientation" }</code></td>
    <td><code>{ name: "OmniRotatable", properties: {rotateH: "true"} }</code></td>
  </tr>
  <tr>
    <td>Face horizontally and flip vertically</td>
    <td>
* <code>rot</code> variant group with the states "north", "east", "south", and "west"
* <code>v</code> variant group with the states "up" and "down"
    </td>
    <td>none</td>
    <td><code>{ code:"rot", loadFromProperties: "abstract/horizontalorientation"}, { code:"v", loadFromProperties: "abstract/verticalorientation" }</code></td>
    <td><code>{ name: "OmniRotatable", properties: {rotateH: "true", rotateV: "true"} }</code></td>
  </tr>
  <tr>
    <td>Face 6 directions and rotate along axis</td>
    <td>
* <code>rot</code> variant group with the states "north", "east", "south", and "west"
* <code>v</code> variant group with the states "up", "down", "left", and "right"
    </td>
    <td>trapdoor</td>
    <td><code>{ code:"rot", loadFromProperties: "abstract/horizontalorientation"}, { code:"v", states: ["left", "right"], loadFromProperties: "abstract/verticalorientation" }</code></td>
    <td><code>{ name: "OmniRotatable", properties: {rotateH: "true", rotateV: "true", rotateV4: "true"} }</code></td>
  </tr>
</table>
 
Additionally, the behavior adds a placement mode to items. The behavior shows the placement mode when the item is hovered over in the inventory or hotbar. The placement modes are auto, horizontal, and vertical. Auto is the default. The horizontal and vertical modes only work correctly for face 6 directions blocks.
 
The behavior changes the placement mode when it detects that the block was created through crafting, and the first item in the recipe was an orientable block. So to allow changing the placement mode, add a 1x1 recipe that takes the block as input and produces it as output. The placement mode changes in the following cycle: auto to horizontal, horizontal to vertical, and vertical to auto.


== Properties ==
== Properties ==
<code>rotateSides: (boolean)</code> Setting this to true will enable rotation of the slab shape. <br>
; <code>rotateSides</code>&#58; (boolean) : Enables face 6 directions mode.
<code>facing: (string)</code> Tells the block what it should orient to, which is usually "block" since the player almost always is building against another block.
; <code>rotateH</code>&#58; (boolean) : Enables orienting along the 4 cardinal directions.
; <code>rotateV</code>&#58; (boolean) : Enables orienting up or down.
; <code>rotateV4</code>&#58; (boolean) : This can only be used if <code>rotateV</code> is also enabled. It extends the <code>rotateV</code> mode to also use the "left" and "right" values for the vertical variant group.
; <code>facing</code>&#58; (string, default "player") : Tells the block what it should orient to. Typically "block" is used, since the player almost always is building against another block.
; <code>dropChance</code>&#58; (float, default 1) : Values less than 1 reduce the chances of the block getting dropped when it is broken. Values 1 and above do not affect the drop rate.


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

Revision as of 05:05, 11 October 2023

Purpose

When placing the block, a orientation variant is selected based on the orientation of the player.

There are several meaningful ways to define a group of orientation variants for a block. Each orientation group type has different variant group requirements and different properties for the OmniRotatable behavior. Where possible, the examples below use world properties to assist in defining the variant states, but this is optional; the states may be directly listed instead.

Orientation group type Required variant groups Example block Example variant group definition Required behavior properties
Face 6 directions
  • rot variant group with the states "north", "east", "south", "west", "up", and "down"
slab { code:"rot", states: ["up", "down"], loadFromProperties: "abstract/horizontalorientation" } { name: "OmniRotatable", properties: {rotateSides: "true"} }
Face up/down
  • rot variant group with the states "up" and "down"
none { code:"rot", loadFromProperties: "abstract/verticalorientation" } { name: "OmniRotatable", properties: {rotateV: "true"} }
Face horizontally
  • rot variant group with the states "north", "east", "south", and "west"
none { code:"rot", loadFromProperties: "abstract/horizontalorientation" } { name: "OmniRotatable", properties: {rotateH: "true"} }
Face horizontally and flip vertically
  • rot variant group with the states "north", "east", "south", and "west"
  • v variant group with the states "up" and "down"
none { code:"rot", loadFromProperties: "abstract/horizontalorientation"}, { code:"v", loadFromProperties: "abstract/verticalorientation" } { name: "OmniRotatable", properties: {rotateH: "true", rotateV: "true"} }
Face 6 directions and rotate along axis
  • rot variant group with the states "north", "east", "south", and "west"
  • v variant group with the states "up", "down", "left", and "right"
trapdoor { code:"rot", loadFromProperties: "abstract/horizontalorientation"}, { code:"v", states: ["left", "right"], loadFromProperties: "abstract/verticalorientation" } { name: "OmniRotatable", properties: {rotateH: "true", rotateV: "true", rotateV4: "true"} }

Additionally, the behavior adds a placement mode to items. The behavior shows the placement mode when the item is hovered over in the inventory or hotbar. The placement modes are auto, horizontal, and vertical. Auto is the default. The horizontal and vertical modes only work correctly for face 6 directions blocks.

The behavior changes the placement mode when it detects that the block was created through crafting, and the first item in the recipe was an orientable block. So to allow changing the placement mode, add a 1x1 recipe that takes the block as input and produces it as output. The placement mode changes in the following cycle: auto to horizontal, horizontal to vertical, and vertical to auto.

Properties

rotateSides: (boolean)
Enables face 6 directions mode.
rotateH: (boolean)
Enables orienting along the 4 cardinal directions.
rotateV: (boolean)
Enables orienting up or down.
rotateV4: (boolean)
This can only be used if rotateV is also enabled. It extends the rotateV mode to also use the "left" and "right" values for the vertical variant group.
facing: (string, default "player")
Tells the block what it should orient to. Typically "block" is used, since the player almost always is building against another block.
dropChance: (float, default 1)
Values less than 1 reduce the chances of the block getting dropped when it is broken. Values 1 and above do not affect the drop rate.
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 ItemEntityBlockBlock BehaviorsBlock ClassesBlock EntitiesBlock Entity 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