# Hytale Modding Documentation > The number one community resource for modding Hytale, featuring comprehensive guides, detailed documentation, and essential tools to kickstart your modding journey. --- Quick Start Source: https://hytalemodding.dev/en/docs/quick-start Welcome to the Hytale modding documentation! Here you'll find everything you need to know about creating your own mods for Hytale. ## Where to start If you don't know anything about modding Hytale or even Java, or you would like to brush up on your knowledge, here are some links that will help you with that. * [Java Basics](./guides/java-basics/00-introduction) - learn the Java syntax and language features you'll need for modding. * [Learning to learn](./guides/learning-to-learn) - why are we using Java. * [Setting up your dev environment](./guides/plugin/setting-up-env) - set up your project for development. * [Build and test](.guide/plugin/build-and-test) - build your project. * [Logging](./guides/plugin/logging) - find and interpret output from your mod when you run the game. * [Creating a Block](./guides/plugin/creating-block) - build a simple block to verify your setup works. If you have experience or you want to try something harder: * [World Generation](./guides/plugin/world-gen) - add new terrain, biomes, and custom ore spawns. * [Custom Camera Controls](./guides/plugin/customizing-camera-controls) - change how the player camera behaves during gameplay. * [Entity Component System (ECS)](./guides/ecs/entity-component-system) - how to use ECS. * [Prefabs](./guides/prefabs) - build reusable structures and templates for world editing. * [Publishing your mod](./publishing) - package and share your mod with others. ## Guides Here are some links to guides that will help you learn how to make mods. ### Video guides * [HytaleModding's Modding Videos](https://www.youtube.com/@HytaleModding) * [Kaupenjoe's Modding Videos](https://www.youtube.com/@ModdingByKaupenjoe) * [TroubleDEV's Modding Videos](https://www.youtube.com/@TroubleDEV) --- Introduction Source: https://hytalemodding.dev/en/docs Hytale is a voxel-based sandbox RPG game by **Hypixel Studios**, as described on the [Hytale website](https://hytale.com/): > Set out on an adventure built for both creation and play. Hytale blends the freedom > of a sandbox with the momentum of an RPG: explore a procedurally generated world full > of dungeons, secrets, and a variety of creatures, then shape it block by block. Hytale has been built from the ground up with modding and user-generated content in mind. The goal of **Hytale Modding** is to provide an excellent resource so that anyone can mod Hytale themselves, regardless of skill level or specialization. It is important to note that modding Hytale is not restricted to programming plugins only. Programming, visual scripting, texturing, 3D modelling, modifying assets, etc., are all modding. In Hytale, anyone can be a modder. --- 6 - GitHub Sync Source: https://hytalemodding.dev/en/docs/wiki/6-github ## Overview If your documentation already lives on GitHub, you can sync it directly with your mod wiki. Changes pushed to your repository will automatically appear on the site — no manual updates needed. Once GitHub sync is enabled, the built-in editor will be disabled. All edits must be made in your repository. ## Setting up Go to your mod settings and scroll down to **GitHub Repository URL**. Paste your repository link and save. If your documentation is inside a subfolder, set the path in **Repository Path**. If the entire repository is documentation, leave this field empty. ## Repository structure Your repository should contain `.md` files at the root of your documentation folder: ``` my-repo/ └── docs/ ├── intro.md ├── installation.md └── usage.md ``` Each file becomes a page on your wiki. The filename (without `.md`) is used as the page slug. ## Frontmatter You can let our software know how you would like to configure and show your pages via the Frontmatter on all Markdown (.md) files. The Frontmatter must be at the very beginning of your files. Here is a table of available fields: | Field | Type | Required | Default | Description | | --------- | ------- | -------- | ------------------------- | ------------------------------------------- | | title | string | No | Derived from filename | Override the page title. | | order | integer | No | Position in the file list | Sort among siblings (lower = appears first) | | published | boolean | No | false | Whether the page is published. | | draft | boolean | No | false | Whether the page is a draft. | ### Example ```md --- title: "Introduction" order: 1 published: true draft: false --- # Introduction ``` ## Categorys and Hierarchy If you want to make children pages under a page, you need to create a folder. If you want the parent page to have contents, you can make a file named `index.md` and put the content inside it. The rest of the pages in that folder will be children of the folder. If you want to create a category and do not want content on the parent page, you can make a `meta.json` file which will let you modify the title of the category, etc. ### Example ```json { "title": "My Category", "published": true } ``` ## Updating documentation Push changes to your repository as usual — the wiki will update automatically. ```bash git add . git commit -m "Update documentation" git push ``` --- 1 - Account Creation Source: https://hytalemodding.dev/en/docs/wiki/1-create-account ## 1. Creating an account Go to the [site](https://wiki.hytalemodding.dev/) and click **Register**. Already have an account? Just click **Login** instead. After registering, you'll be taken to the main page. You don't need it right now, but it will come up in the next step. ## 2. Setting up your account To access your settings, click your profile picture in the top-right corner and select **Settings** — or follow [this link](https://wiki.hytalemodding.dev/settings/profile) directly. On the left you'll find four sections: * [**Profile**](https://wiki.hytalemodding.dev/settings/profile): Basic account information. * [**Password**](https://wiki.hytalemodding.dev/settings/password): Change your password. * [**Two-Factor Auth**](https://wiki.hytalemodding.dev/settings/two-factor): Add an extra layer of security to your account. * [**Appearance**](https://wiki.hytalemodding.dev/settings/appearance): Customize the look of the site. To update your profile picture, click **Upload Photo** and choose an image. That's all for the basic setup. --- 3 - Creating Pages Source: https://hytalemodding.dev/en/docs/wiki/3-creating-pages ## Creating a page To add a page to your mod, open your mod's management page and click **New Page**. This will take you to the page editor — the screen you'll spend most of your time on. ### Page settings At the top you'll find the page configuration fields: * **Page title** *(Required)*: The name of your page as it will appear in the sidebar and heading. * **Page type** *(Optional, default: "Page")*: Choose between **Page** (regular content) or **Category** (an empty grouping page with no content of its own). * **Parent page** *(Optional)*: Nest this page under another — useful for building a hierarchy. * **Index page** *(Optional)*: Mark this page as the mod's landing page, shown when someone first opens your mod. * **Published** *(Required)*: Whether the page is visible to readers. Unpublished pages are saved as drafts — visible only to you and your collaborators, regardless of the mod's visibility setting. ### Editor Below the settings you'll find two panels: * **Content Editor**: Where you write your page content in Markdown. * **Live Preview**: A real-time preview of how your page will look when published. ### Saving your page At the bottom of the page you have three options: * **Cancel**: Discard and go back without creating anything. * **Save as draft**: Save the page without publishing it. * **Publish**: Save and publish the page immediately. *** You're ready to create pages! To learn how to format content and make your pages look great, see [Styling your pages](./styling/index.mdx). --- 2 - Creating a Wiki for Your Mod Source: https://hytalemodding.dev/en/docs/wiki/2-create-mod ## 1. Creating a mod Start by going to the [dashboard](https://wiki.hytalemodding.dev/dashboard). If you haven't created any mods yet, you'll see a **"No mods yet"** message with a create button below it. If you already have mods, they'll be listed there — click **New mod** to add another. On the creation page, you'll see the following fields: * **Mod name** *(Required)*: The name of your mod as it will appear on pages. * **Description** *(Optional)*: A short description of what your mod does. * **Mod Icon** *(Optional)*: An icon to represent your mod. * **Visibility** *(Required, default: "Private")*: Controls who can see your mod. ### About visibility * **Private**: Only you and your collaborators can see this mod. * **Unlisted**: Accessible to anyone with the link, but won't appear in public listings. * **Public**: Your mod will be listed [here](https://wiki.hytalemodding.dev/mods). Since you're just getting started, **Private** or **Unlisted** is recommended. Congratulations — you've created your first mod wiki! ## 2. Collaborators If you're working with a team and want to give members editing access, you can add them as collaborators. On your mod's main page, look for the collaborators panel in the bottom-left — initially it will only show you. Click **Manage** to open the collaborator settings. There you'll see the owner, a list of collaborators, and a reference to the available permission levels: * **Owner**: Full control over everything. This role cannot be changed. * **Admin**: Can create, edit, and delete pages. Can also manage collaborators and invite new members. * **Editor**: Can create, edit, and publish pages. Cannot manage collaborators or mod settings. * **Viewer**: Can view private mod content, but cannot edit or create pages. To add someone, click **Invite Collaborators**, enter their username, and select a role. They'll receive an email invitation — once they accept, they'll appear in your collaborators list. If you plan on creating pages on GitHub, check out the [guide there](./6-github). --- Wiki Source: https://hytalemodding.dev/en/docs/wiki ## What is Hytale Modding Wiki Hytale Modding Wiki is a free platform where mod developers can create and maintain documentation for their mods. It gives you a straightforward way to publish guides, explain features, and document how your mod works — making it easier for both players and developers to understand and use your project. In this guide, you will learn how to: * create a wiki for your mod, * edit and organize pages, * structure your documentation effectively, * keep it up to date over time. ## Why use this platform You could host documentation on GitHub, your own website, or another platform — but Hytale Modding Wiki is built specifically for mod documentation, so everything you need is already here. --- 4 - Editing and Organizing Pages Source: https://hytalemodding.dev/en/docs/wiki/4-editing-pages ## 1. Editing a page To edit a page, click the pencil icon in your mod's page list, or click **Edit** while viewing a page. Editing works the same as creating a page, with one difference — the buttons at the bottom: * **Cancel**: Discard your changes and go back. * **Delete Page**: Permanently delete this page. * **Save as draft**: Save the page without publishing it. * **Publish**: Save and publish the page. ## 2. Organizing your pages ### Nesting pages You can nest pages under a parent to create a hierarchy — set the **Parent page** field when creating or editing a page. ### Reordering pages To change the order pages appear in the sidebar, go to your mod's management page, click **View all Pages**, then **Reorder Pages**. Drag pages into the desired order and click **Exit** when done. *** You now know how to edit pages and control how they're arranged. --- Interactions Source: https://hytalemodding.dev/en/docs/server/interaction-reference ### The Interaction Base Type All interactions of every type below are inherited from Interaction and have these fields. **Interaction Fields** | Field Name | Type | Required? | Notes | | ------------------------- | -------------------------------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ViewDistance | `Double`
(Default: 96.0) | **No** | Distance in blocks at which other players can see the effects from this interaction. | | Effects | `InteractionEffects` | **No** | Sound, animations, and particle effects that should trigger when this interaction begins executing. | | HorizontalSpeedMultiplier | `Float`
(Default: 1.0) | **No** | Multiplier applied to the User entity's movement speed while this interaction is executing | | RunTime | `Float` | **No** | If provided, this interaction will continue executing for at least this long before the interaction chain moves onto the next interaction. | | CancelOnItemChange | `Boolean`
(Default: true) | **No** | If true, this interaction will be cancelled if the User entity's held item changes during execution. This can happen either due to the selected hotbar slot changing or the contents of the item's inventory slot changing. | | Rules | `InteractionRules` | **Yes** | If provided, adds additional limitations and cancellation conditions to this interaction. | | Settings | `Map`
(Key Type: `GameMode`, Value Type: `InteractionSettings`) | **No** | If provided, adds additional per-GameMode settings to the interaction. | | Camera | `InteractionCameraSettings` | **No** | Arrays of camera motion keyframes for cutscenes and reveals. | **GameMode Values** * `Creative`: The game is currently in Creative Mode * `Adventure`: The game is currently in Adventure Mode **InteractionEffects Fields** | Field Name | Type | Required? | Notes | | ------------------------ | ------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | Particles | `Array`
(Element Type: `ModelParticle`) | **No** | Particle systems to activate when this interaction begins if the player is in third-person mode. | | FirstPersonParticles | `Array`
(Element Type: `ModelParticle`) | **No** | Particle systems to activate when this interaction begins if the player is in first-person mode. | | WorldSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | A sound to play in the world at the User entity's location when this interaction begins.
**The SoundEvent must be single-channel (mono) sound.** | | LocalSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | A 2D sound to play for the User entity when this interaction begins. Ignored if the User entity is not a player. | | Trails | `Array`
(Element Type: `ModelTrail`) | **No** | Trail effects to activate on the User entity when this interaction begins. | | WaitForAnimationToFinish | `Boolean`
(Default: false) | **No** | If true, this interaction will continue executing for at least the length of any animations in this InteractionEffects object. | | ItemPlayerAnimationsId | `Asset`
(Asset Type: `ItemPlayerAnimations`) | **No** | If provided, the User entity will use this ItemPlayerAnimations set while this interaction is executing. | | ItemAnimationId | `String` | **No** | Id of an animation to trigger when this interaction begins executing.
**This animation id is not validated on server start.** | | ClearAnimationOnFinish | `Boolean`
(Default: false) | **No** | If true, animations triggered by this interaction will be halted when the interaction completes. | | ClearSoundEventOnFinish | `Boolean`
(Default: false) | **No** | If true, sounds triggered by this interaction will be halted when the interaction completes. | | CameraEffect | `Asset`
(Asset Type: `CameraEffect` ) | **No** | If provided, the CameraEffect will be applied while this interaction is executing. | | MovementEffects | `MovementEffects` | **No** | If provided, apply the movement effects to the User entity while this interaction is executing. | | StartDelay | `Float`
(Default: 0.0f) | **No** | The interaction will wait this many seconds before triggering the effects in this object. | **InteractionRules Fields** | Field Name | Type | Required? | Notes | | ------------------- | --------------------------------------------------------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | BlockedBy | `Array`
(Element Type: `InteractionType`)
(Default: Based on the chain's InteractionType) | **No** | If provided, this RootInteraction cannot be executed while interaction chains of the provided types are executing.
**This field only functions for rules attached to a RootInteraction. It has no effect on an Interaction.** | | Blocking | `Array`
(Element Type: `InteractionType`) | **No** | If provided, interaction chains with the specified InteractionTypes cannot be executed while this interaction is executing. | | InterruptedBy | `Array`
(Element Type: `InteractionType`) | **No** | If provided, interaction chains with the specified InteractionTypes will cancel this interaction chain when they execute.
**This field only functions for rules attached to a RootInteraction. It has no effect on an Interaction.** | | Interrupting | `Array`
(Element Type: `InteractionType`) | **No** | If provided, interaction chains with the specified InteractionTypes will be canceled when this interaction begins. | | BlockedByBypass | `String` | **No** | If provided, this RootInteraction cannot be blocked by interaction chains whose RootInteraction has this value as an asset tag. | | BlockingBypass | `String` | **No** | If provided, this interaction will not block RootInteractions that have the this value as an asset tag. | | InterruptedByBypass | `String` | **No** | If provided, this RootInteraction cannot be canceled by RootInteractions that have this value as an asset tag. | | InterruptingBypass | `String` | **No** | If provided, this interaction will not cancel interaction chains whose RootInteraction has this value as an asset tag. | **InteractionType Values** * `Primary` * `Secondary` * `Ability1` * `Ability2` * `Ability3` * `Use` * `Pick` * `Pickup` * `CollisionEnter` * `CollisionLeave` * `Collision` * `EntityStatEffect` * `SwapTo` * `SwapFrom` * `Death` * `Wielding` * `ProjectileSpawn` * `ProjectileHit` * `ProjectileMiss` * `ProjectileBounce` * `Held` * `HeldOffhand` * `Equipped` * `Dodge` * `GameModeSwap` **InteractionSettings Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------- | --------- | -------------------------------------------------------------------------------------------- | | AllowSkipOnClick | `Boolean`
(Default: false) | **No** | If true, the user will be able to skip this interaction by clicking shortly after it starts. | **InteractionCameraSettings Fields** | Field Name | Type | Required? | Notes | | ----------- | ------------------------------------------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | FirstPerson | `Array`
(Element Type: `InteractionCamera`) | **No** | A list of camera keyframes to be played if the player is in first-person.
**The time of each keyframe must be after the keyframe before it in the array.** | | ThirdPerson | `Array`
(Element Type: `InteractionCamera`) | **No** | A list of camera keyframes to be played if the player is in third-person.
**The time of each keyframe must be after the keyframe before it in the array.** | **InteractionCamera Fields** | Field Name | Type | Required? | Notes | | ---------- | ---------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | Time | `Float`
(Default: 0.1f) | **No** | How long after the interaction begins executing that the camera should arrive at this keyframe.
**Cannot be less than or equal to 0.** | | Position | `Vector3` | **Yes** | Where the camera should be located when it arrives at this keyframe. | | Rotation | `Direction` | **Yes** | Where the camera should be pointing when it arrives at this keyframe. | ### SimpleInteraction Most interaction types below are inherited from SimpleInteraction and have these fields. If a type does not have these fields, the documentation will mention it. The purpose of SimpleInteraction is to facilitate Interaction chaining by taking different paths based on whether the Interaction succeeded or failed. The circumstances under which a given Interaction fails are generally type-specific (and described in the documentation below), but all interactions will be marked failed if they are cancelled via one of the many, many mechanisms for doing so. It is valid to create an interaction asset of type "Simple", which can be valuable when you want to use the interaction fields with no additional functionality. **SimpleInteraction Fields** | Field Name | Type | Required? | Notes | | ---------- | ---------------------------------------- | --------- | ---------------------------------------------------------------------------------------------- | | Next | `Asset`
(Asset Type: `Interaction`) | **No** | After this Interaction has finished, "Next" will be executed if this Interaction did not fail. | | Failed | `Asset`
(Asset Type: `Interaction`) | **No** | After this Interaction has finished, "Failed" will be executed if this Interaction failed. | ## Flow Control These are interaction types used to control the flow of an interaction chain and allow interactions to be composed into more complex behaviors. These interaction types generally do not pertain to the game and instead pertain to the interaction system itself. ### Condition This interaction will fail if one of the fields is provided but does not match the current state. **Condition Fields** | Field Name | Type | Required? | Notes | | ---------------- | ---------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | RequiredGameMode | `GameMode` | **No** | If provided, the interaction will fail if the current GameMode does not match the provided value. | | Jumping | `Boolean` | **No** | If provided, the interaction will fail if the player's Jumping state does not match the provided value. (i.e. if True, the player must be jumping, if False, the player must not be) | | Swimming | `Boolean` | **No** | If provided, the interaction will fail if the player's Swimming state does not match the provided value. (i.e. if True, the player must be swimming, if False, the player must not be) | | Crouching | `Boolean` | **No** | If provided, the interaction will fail if the player's Crouching state does not match the provided value. (i.e. if True, the player must be crouching, if False, the player must not be) | | Running | `Boolean` | **No** | If provided, the interaction will fail if the player's Running state does not match the provided value. (i.e. if True, the player must be running, if False, the player must not be) | | Flying | `Boolean` | **No** | If provided, the interaction will fail if the player's Flying state does not match the provided value. (i.e. if True, the player must be flying, if False, the player must not be) | **GameMode Values** * `Creative`: The game is currently in Creative Mode * `Adventure`: The game is currently in Adventure Mode ### FirstClick This interaction does not inherit from SimpleInteraction and therefore has no Next or Failed fields. This interaction has two fields that each contain a reference to an Interaction: Click and Hold. If the root interaction of the chain was initiated by a client button/key press (or simulated NPC input) and the input was a tap, then the Click interaction is run. if it was a longer press, then the Hold interaction is run. As a minor implementation detail, this interaction is internally marked as failed when the Hold path is followed. This generally shouldn't matter. If the interaction was not initiated by a key press at all, the Click path will be followed, but it seems risky to rely on that behavior. **FirstClick Fields** | Field Name | Type | Required? | Notes | | ---------- | ---------------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | Click | `Asset`
(Asset Type: `Interaction`) | **No** | If provided and the root interaction of the chain was initiated by button/key press, this interaction is executed next if the press was a quick tap. | | Hold | `Asset`
(Asset Type: `Interaction`) | **No** | If provided and the root interaction of the chain was initiated by a button/key press, this interaction is executed next if the press was a longer hold. | ### Interrupt This interaction can be used to cancel one or more running interaction chains on an entity and **all forked interaction chains those chains have spawned that are still currently running**. All interaction chains canceled in this manner will be marked as Failed, which may have additional implications if the canceled chains are themselves forked from other chains that are still running. **Interrupt Fields** | Field Name | Type | Required? | Notes | | -------------- | ---------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Entity | `InteractionTarget`
(Default: User) | **Yes** | The entity that is the owner of the target interaction chains. This field can indicate the Owner, User, or Target of this interaction chain. | | InterruptTypes | `Array`
(Element Type: `InteractionType`) | **No** | A set of InteractionTypes that are to be interrupted. Only interactions of these types are affected. If null, all types will be interrupted.
**(Note: An empty set will interrupt NO TYPES.)** | | RequiredTag | `String` | **No** | An asset tag that, if provided, the RootInteraction of the interaction chain must have in order to be canceled. | | ExcludedTag | `String` | **No** | An asset tag that, if provided, the RootInteraction of the interaction chain must not have in order to be canceled. | **InteractionTarget Values** * `User` - The user of this interaction chain. The entity whose actions caused this interaction chain to be executed. This is usually the same as the Owner. * `Owner` - The owner of this interaction chain. The entity upon whom this interaction chain is executing. * `Target` - The entity target of this interaction chain, if any. This value is mutable (and can therefore come from many places) but most commonly, it is an entity the User was targeting when this interaction chain began executing. **InteractionType Values** * `Primary` * `Secondary` * `Ability1` * `Ability2` * `Ability3` * `Use` * `Pick` * `Pickup` * `CollisionEnter` * `CollisionLeave` * `Collision` * `EntityStatEffect` * `SwapTo` * `SwapFrom` * `Death` * `Wielding` * `ProjectileSpawn` * `ProjectileHit` * `ProjectileMiss` * `ProjectileBounce` * `Held` * `HeldOffhand` * `Equipped` * `Dodge` * `GameModeSwap` ### Parallel This interaction does not inherit from SimpleInteraction and therefore has no Next or Failed fields. This interaction has a field `Interactions` that is an array of RootInteraction assets. The list must contain at least two RootInteractions. This interaction will fork all of its children except for the first into their own interaction chains and immediately complete. After this interaction completes, this interaction chain will execute the first RootInteraction in the `Interactions` list. This interaction does not have any failure conditions and is indifferent to the fate of the forked interaction chains. **Parallel Fields** | Field Name | Type | Required? | Notes | | ------------ | --------------------------------------------------- | --------- | ------------------------------------------------------------- | | Interactions | `AssetArray`
(Element Type: `RootInteraction`) | **Yes** | An array of RootInteractions that will be forked or executed. | ### Repeat This interaction has a field `ForkInteractions` that is an asset of type RootInteraction. This interaction will fork that RootInteraction into its own interaction chain and then wait for it to complete. If the RootInteraction fails, this interaction will complete immediately and be marked failed. Otherwise, the RootInteraction will be forked and run again, up to a specified total number of times. **Repeat Fields** | Field Name | Type | Required? | Notes | | ---------------- | -------------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | ForkInteractions | `Asset`
(Asset Type: `RootInteraction`) | **Yes** | A RootInteraction that will be forked. | | Repeat | `Integer`
(Default: 1)
**Must be -1 or a positive integer. 0 is not valid.** | **No** | The total number of times to fork ForkInteractions. If -1 is provided, ForkInteractions will continue being forked and executed indefinitely, until this interaction is cancelled or until ForkInteractions fails. | ### Replace This interaction does not inherit from SimpleInteraction and therefore has no Next or Failed fields. This interaction uses the InteractionVars system that is avaiable for items. InteractionVars are RootInteractions that can be attached to an Item asset with a name. This interaction specifies a var name, and if this interaction chain was executed through an item and that item has an InteractionVar of the same name, then this interaction will immediately execute the RootInteraction on the var. Otherwise, it will execute the default RootInteraction specified in this interaction. If no default is specified, then this interaction will be marked as failed. **Replace Fields** | Field Name | Type | Required? | Notes | | ------------ | -------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Var | `String` | **Yes** | The name of the InteractionVar to execute. | | DefaultValue | `Asset`
(Asset Type: `RootInteraction`) | **No** | The RootInteraction to execute if the owning item does not have an InteractionVar by the specified name. If not provided, the interaction will be marked as failed instead. | | DefaultOk | `Boolean`
(Default: false) | **No** | If false, then an angry message will be printed to the server logs if the owning item does not have an InteractionVar by the specified name. The functioning of this interaction will be otherwise unaffected. | ### RunRootInteraction This interaction immediately executes the provided RootInteraction as part of this interaction chain. This interaction does not have any failure conditions. **RunRootInteraction Fields** | Field Name | Type | Required? | Notes | | --------------- | -------------------------------------------- | --------- | ------------------------------- | | RootInteraction | `Asset`
(Asset Type: `RootInteraction`) | **Yes** | The RootInteraction to execute. | ### Selector This interaction will execute a Selector to find entities and/or blocks (depending on the Selector) and fork off an interaction chain for each located entity or block. This interaction will not wait for those interaction chains to complete and is indifferent to their fate. The forked interaction chains will use the located entity/block as their target entity/target block. Each entity or block will only fork one interaction chain over the life of this interaction. The Selector is guaranteed to run once for each execution of this interaction, but some Selectors are intended to be run over a period of time and sweep across an area to locate targets. In order to use those Selectors properly, you will need to extend the execution time of this interaction using `RunTime` or `WaitForAnimationToFinish`. The Selector will be executed repeatedly over the lifetime of the interaction. If the Selector is configured to locate entities, you can add additional sets of entity matching rules. If a located entity matches one of the rules, the matching RootInteraction will be forked instead of the standard `HitEntity` RootInteraction. Entities located by the Selector will be ignored if they do not have a NetworkId, if they are dead, or if they are invulnerable. The only exception to this rule is that players in Creative Mode that are marked to receive hits will not be ignored. This interaction's failure conditions are configurable via the `FailOn` field. You can configure this interaction to never fail, to fail if the Selector does not locate any blocks before this interaction finishes executing, to fail if the Selector does not locate any entities before this interaction finishes executing, or to fail in either case. **Selector Fields** | Field Name | Type | Required? | Notes | | -------------- | -------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Selector | `Selector` | **Yes** | The Selector is executed at least once and may be executed repeatedly to locate blocks and/or entities in an area. | | HitEntity | `Asset`
(Asset Type: `RootInteraction`) | **No** | If included and the `Selector` locates an entity that does not match any `HitEntityRules`, this RootInteraction will be forked into a new interaction chain with the located entity as the target entity. | | HitEntityRules | `Array`
(Element Type: `HitEntity`) | **No** | If included, these rules will be matched against any entity located by the `Selector`. If an entity matches a set of rules, the RootInteraction associated with the rules will be forked instead of the standard `HitEntity` interaction. | | HitBlock | `Asset`
(Asset Type: `RootInteraction`) | **No** | If included and the `Selector` locates a block, this RootInteraction will be forked into a new interaction chain with the located block as the block target. | | FailOn | `FailOnType`
(Default: `Neither`) | **No** | Defines under what circumstances this interaction will fail. It can be marked to fail when it completes without locating any blocks, it can be marked to fail when it completes without locating any entities, both, or neither. | | IgnoreOwner | `Boolean`
(Default: true) | **No** | If true, the Selector will not locate the User entity of this interaction. | **HitEntity Fields** | Field Name | Type | Required? | Notes | | ---------- | -------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------- | | Matchers | `Array`
(Element Type: `EntityMatcher`) | **Yes** | A set of rules that an entity must match. An entity must successful match all rules to be considered. | | Next | `Asset`
(Asset Type: `RootInteraction`) | **Yes** | The RootInteraction to fork if an entity matches all rules. | **EntityMatcher Fields** | Field Name | Type | Required? | Notes | | ---------- | ------------------------------- | --------- | --------------------------------------------------------------------------------------------------------- | | Type | `String` | **Yes** | If provided, specifies a type of EntityMatcher to use. Each matcher type may come with additional fields. | | Invert | `Boolean`
(Default: false) | **No** | If true, an entity must fail this rule for it to be marked as succeeded. | **EntityMatcher Type: Player** This EntityMatcher will succesfully match the entity only if they are a player. **EntityMatcher Type: Vulnerable** This Entitymatcher will successfully match the entity only if they are not marked as invulnerable. **FailOnType Values** * `Neither` * `Entity` * `Block` * `Either` ### Serial This interaction does not inherit from SimpleInteraction and therefore has no Next or Failed fields. This interaction has a field `Interactions` which is a list of Interaction assets. This interaction immediately completes and the interaction chain continues by executing the interactions in the list one at a time. This interaction does not have any failure conditions. **Serial Fields** | Field Name | Type | Required? | Notes | | ------------ | ----------------------------------------------- | --------- | ------------------------------------------ | | Interactions | `AssetArray`
(Element Type: `Interaction`) | **Yes** | An array of Interaction assets to execute. | ## Cooldowns RootInteractions interface with a complex cooldown system that can be used for a variety of purposes. Aside from simply adding an important aspect of resource management to your game design, cooldowns can be used to ensure that click-activated interaction chains don't repeatedly spam if the player holds down the input. By default, every RootInteraction has a cooldown timer that is keyed to the RootInteraction name, and by default, it will launch a cooldown of 0.35 seconds when activated by client input. Otherwise, no cooldown will be activated. However, by configuring your RootInteraction, you can change the key for the cooldown (so that multiple RootInteractions can share a single cooldown), set the cooldown timer to whatever you like, and configure multiple charges that can build up over time to allow the entity to activate the RootInteraction multiple times before being forced to pause. One important concept to keep in mind is the difference between **cooldown** and **charge time**. The cooldown, if any, is activated each time a RootInteraction triggers, even if the player has more available charges. If the RootInteraction is configured to use charges, then they will gradually build up over time. In order for a RootInteraction to be activated, the cooldown (if any) must be expired, and the RootInteraction must have at least one charge (if it has been configured to use charges). Bear in mind that the entire Cooldown configuration is shared between different RootInteractions with the same cooldown id. If you activate an ability with 5 charges and a short cooldown and then another ability with a much longer cooldown and no charges, the second ability will use the cooldown properties of the first ability until/unless the first ability finishes charging and is cleared from the system. You should generally only have multiple RootInteractions share a cooldown id if they have the same configuration. The interactions below interact with the cooldown system to allow you to manipulate cooldowns via the interaction system. By using these interactions, you can have several interaction chains with different cooldown configurations share cooldowns that are checked and activated as part of the interaction chain itself, or have some components of an interaction change use a second cooldown separate from the main one. ### CooldownCondition **CooldownCondition Fields** This interaction will fail if the specified cooldown id is on cooldown for the User entity. This interaction will only function for players- the interaction will always succeed for NPCs. In order for this interaction to succeed, the cooldown, if any, must have expired and at least one charge, if any, must have filled. | Field Name | Type | Required? | Notes | | ---------- | -------- | --------- | ------------------------- | | Id | `String` | **Yes** | The cooldown id to check. | ### IncrementCooldown **IncrementCooldown Fields** This interaction will modify a cooldown that is currently active on the User entity, allowing charges and remaining cooldown to be modified. Despite its name, this interaction can be used to reduce a cooldown as well as increase it. If the cooldown is not currently active, this interaction will have no effect. The interaction has no special failure conditions. | Field Name | Type | Required? | Notes | | ----------------- | --------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Id | `String` | **No** | If provided, the cooldown id of the cooldown to be manipulated. If not provided, the cooldown id of the current chain's RootInteraction will be used. | | Time | `Float`
(Default: 0.0) | **No** | The amount to increase the remaining cooldown by. Can be negative. The remaining cooldown time will not be reduced below zero or increased above the maximum cooldown time. | | ChargeTime | `Float`
(Default: 0.0) | **No** | The amount to increase the remaining time until the next charge is filled by. Can be negative. The remaining charge time cannot be reduced below zero or increased above the maximum cooldown time. **This will not work on abilities that have a maximum of 1 charge, for some reason.** | | Charge | `Integer`
(Default: 0) | **No** | The amount to increase the number of charges by. Can be negative. The number of charges cannot be reduced below 0 or increased above the maximum. | | InterruptRecharge | `Boolean`(Default: false) | **No** | If true and `Charge` is not 0, will reset the remaining time to the next charge to the maximum value after changing the charge count. | ### ResetCooldown This interaction will trigger a cooldown on the User entity with a specified configuration. The charges will be refilled but the cooldown will be immediately triggered. The mechanisms for deciding on the configuration are a little bit complicated. You may specify a cooldown configuration via the `Cooldown` field. If you do not include an `Id` field, then the interaction chain's RootInteraction will be used for any field not specified in the configuration. If there is an active cooldown under the specified `Id` (or under the RootInteraction's cooldown id if none is specified) then the fields from that active cooldown will overwrite data in the RootInteraction's cooldown, but not data in your `Cooldown` field. **ResetCooldown Fields** | Field Name | Type | Required? | Notes | | ---------- | --------------------- | --------- | ------------------------------------------------------------ | | Cooldown | `InteractionCooldown` | **No** | A cooldown configuration to use for the new, reset cooldown. | **InteractionCooldown Fields** | Field Name | Type | Required? | Notes | | ----------------- | ------------------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Id | `String` | **No** | The cooldown id to use for this cooldown. If not provided, the RootInteraction's cooldown id will be used, if any. | | Cooldown | `Float`
(Default: 0.0) | **No** | The duration of the cooldown, in seconds. | | Charges | `Array`
(Element Type: `Float`) | **No** | If provided, a list of how many charges this cooldown can build, and how long each charge takes to build, in seconds. | | InterruptRecharge | `Boolean`
(Default: false) | **No** | If true, the charge time will be reset when the number of charges changes. | | ClickBypass | `Boolean`
(Default: false) | **No** | If true, RootInteractions keyed to this cooldown can still be activated when it is on cooldown provided that the RootInteraction was triggered by a distinct key or mouse button press on the client. | ### TriggerCooldown This interaction is similar to ResetCooldown, except instead of refilling the cooldown's charges, one charge will be deducted as normal. **TriggerCooldown Fields** | Field Name | Type | Required? | Notes | | ---------- | --------------------- | --------- | ------------------------------------------------------------ | | Cooldown | `InteractionCooldown` | **No** | A cooldown configuration to use for the new, reset cooldown. | **InteractionCooldown Fields** | Field Name | Type | Required? | Notes | | ----------------- | ------------------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Id | `String` | **No** | The cooldown id to use for this cooldown. If not provided, the RootInteraction's cooldown id will be used, if any. | | Cooldown | `Float`
(Default: 0.0) | **No** | The duration of the cooldown, in seconds. | | Charges | `Array`
(Element Type: `Float`) | **No** | If provided, a list of how many charges this cooldown can build, and how long each charge takes to build, in seconds. | | InterruptRecharge | `Boolean`
(Default: false) | **No** | If true, the charge time will be reset when the number of charges changes. | | ClickBypass | `Boolean`
(Default: false) | **No** | If true, RootInteractions keyed to this cooldown can still be activated when it is on cooldown provided that the RootInteraction was triggered by a distinct key or mouse button press on the client. | ## Combo Chains Hytale additionally comes with a rich "combo chaining" system, which allows several inputs in a row to result in different attacks and special moves. Rather than being attached to the RootInteraction like the cooldown system, these are primarily driven by the `Chaining` interaction. ### Chaining This interaction does not inherit from SimpleInteraction and therefore has no Failed field. Its Next field works differently from most interaction types. Chaining is a type of flow control interaction- each time a Chaining interaction with the same `ChainId` is called, a single interaction in the `Next` list is chosen and the others are ignored. The first time the `ChainId` is used, the first interaction in the list is chosen, the next time the second, etc. Once the end of the list is reached, the first interaction will be chosen again. Bear in mind: the progress through the Next list is based on the **ChainId**, not the interaction! That means that two different Chaining interactions can share a single combo chain. You could have a pair of daggers that attacks with the left when the left mouse button is clicked and with the right when the right mouse button is clicked. You could give both interaction chains a Chaining interaction with the same `ChainId` and three `Next` entries that do a light-light-heavy combo. Each specific hit would occur with either the left or the right knife based on which button you clicked, but the combo would be otherwise identical regardless of which you chose. The Chaining interaction also has a concept called "flags". It is possible to attach named flags to a `ChainId` by using the ChainFlag interaction. Then, you specify the flag name in Chaining's `Flags` field. If a Flag is active when the Chaining interaction is run, the Flag's interaction will be run instead of the appropriate interaction in `Next`. Bear in mind: the entity's progress through the `Next` list still advances, the resulting `Next` interaction is just not run. Only one flag can be active at a time. Lastly, it is possible to cancel the entity's progress through the combo chain and reset them to the first interaction in the list. This can be done with the CancelChain interaction, but it will also happen automatically if the player does not trigger an interaction with the ChainId for the specified ChainingAllowance. When either of these happen, all flags will be canceled as well. All of these effects are triggered on the User entity only. Non-players can use the chaining system, but Flags do not currently work for non-players. This interaction has no special failure conditions. **Chaining Fields** | Field Name | Type | Required? | Notes | | ----------------- | ---------------------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ChainId | `String` | **No** | If provided, acts as a key that multiple Chaining interactions can use to share combo chain progress and flags. If not provided, a unique ChainId will be generated for this interaction. | | ChainingAllowance | `Double`
(Default: 0.0) | **No** | If, at the time this interaction is triggered, it has been this long in seconds since the last time a Chaining interaction with the same ChainId was executed, all state for this ChainId will be cleared before execution. | | Next | `AssetArray`
(Element Type: `Interaction`) | **Yes** | A list of interactions to cycle between each time this interaction is run. | | Flags | `Map`
(Key Type: `String`, Value Type: `Interaction`) | **No** | A map of flag names to interactions to run if the flag is active when this interaction executes. | ### CancelChain This interaction resets all progress and flag data on the User entity for the provided `ChainId`. The next time a Chaining interaction is called for the provided `ChainId`, it will begin at the first interaction in the `Next` list. This interaction has no special failure conditions. **CancelChain Fields** | Field Name | Type | Required? | Notes | | ---------- | -------- | --------- | ------------------------------------- | | ChainId | `String` | **Yes** | A ChainId whose data should be reset. | ### ChainFlag This interaction activates a flag on the User entity for the provided `ChainId`, which can be used to change behavior the next time a Chaining interaction with this `ChainId` is run. This will overwrite any flag that has already been raised. This interaction will have no effect for non-players. This interaction has no special failure conditions. | Field Name | Type | Required? | Notes | | ---------- | -------- | --------- | -------------------------------------------- | | ChainId | `String` | **Yes** | A ChainId on whom the flag should be raised. | | Flag | `String` | **Yes** | The name of the flag to raise. | ## Charging A unique flow-control interaction that is frequently used is the Charging interaction. It is a flow-control interaction that delays while the input button used to trigger the interaction chain is held. When it is released (or the interaction is forced to end), the interaction chain can continue with a different interaction based on how long the input was held for. These interactions are all related by either being the Charging interaction, or other interaction types that inherit the Charging interaction's behavior. ### Charging This interaction does not inherit from SimpleInteraction and therefore its Next field works different from most interactions. This interaction adds its own Failed field which works the same way that SimpleInteraction's does. This interaction only works properly when its interaction chain was triggered by a client key or button press (or NPC-simulated equivalent). This interaction will continue executing for as long as the key or button press is held (with some exceptions, covered below) by the User entity. Like other interactions, it has a `Next` field indicating which interaction to execute after this one, but the field is a map from `Float` values to `Interaction` assets. When this interaction ends, either due to the input being released or the charge duration completing, this interaction will determine the largest `Float` key that is less than the amount of time in seconds that the interaction was executing for. The Interaction mapped to that key will be executed next. The interaction includes some cancellation conditions that are specific to this interaction. For instance, the interaction has a `CancelOnOtherClick` field that matches the field on RootInteraction. If it is active on this interaction but not the RootInteraction, then clicking while charging will cancel this interaction (and execute the `Failed` interaction rather than any of the `Next` interactions) but otherwise continue the interaction chain. Another valuable feature Charging has is the `Forks` field. For input-triggered interactions that are triggered while the Charging interaction is executing, you can add an entry for the relevant InteractionType to this field and instead of triggering the usual interaction chain based on held item, targeted block, etc. the RootInteraction specified in the `Forks` field will be triggered. This can unlock rich attack modes and behaviors. For instance, having a shield bash attack triggered off left click while blocking, or a special attack that triggers when both mouse buttons are pressed at the same time. There are two modes of operation for the Charging interaction. One is to have the ability charge for as long as the input is held and only end execution when the entity releases the input. Bows in the main Hytale game work that way. That is accomplished by setting `AllowIndefiniteHold` to true. Another mode of operation is to have the interaction complete execution when the execution time has surpassed the largest key value in the `Next` field and immediately begin executing the Interaction mapped to that key. Food in the main Hytale game work like this. It is accomplished by setting `AllowIndefiniteHold` to false. One pitfall to be careful of when setting `AllowIndefiniteHold` to false is the way it interacts with cooldowns.\ Normally, input-initiated interaction chains start a 0.35s cooldown on the triggered RootInteraction that prevents holding the mouse button from immediately spamming a new interaction when the first one completes. However, if the duration of a Charging interaction is longer than 0.35s, then the cooldown will have already completed when the interaction chain finishes, which will often result in a new execution beginning immediately before the player can stop pressing the mouse button. One solution for this problem is to add a `Simple` interaction to the end of your interaction chain with a `RunTime` of 0.35s to simulate the cooldown. Alternatively, you can add a longer cooldown (the maximum duration of your Charging interaction plus 0.35s) to the RootInteraction. However, the longer cooldown is not always desirable, as the interaction may have ended prematurely, resulting in an unusually long lockout between executions. **Charging Fields** | Field Name | Type | Required? | Notes | | ---------------------------------- | ----------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | FailOnDamage | `Boolean`
(Default: false) | **No** | If true, this interaction will fail and end immediately if the User entity takes any damage while it is executing. | | CancelOnOtherClick | `Boolean`
(Default: true) | **No** | If true, this interaction will fail and end immediately if the User entity sends another button or key press while it is executing. | | Forks | `Map`
(Key Type: `InteractionType`, Value Type: `RootInteraction`) | **No** | A map of InteractionType to RootInteraction. If entity input triggers the InteractionType while this interaction is executing, the mapped RootInteraction will be forked into its own interaction chain. This will happen instead of the usual handling for that InteractionType. This fork will occur even if `CancelOnOtherClick` is set to true. | | Failed | `Asset`
(Asset Type: `Interaction`) | **No** | After this Interaction has finished, "Failed" will be executed if this Interaction failed. | | AllowIndefiniteHold | `Boolean`
(Default: false) | **No** | If true, this interaction will continue executing for as long as the User entity continues to hold the input. If false, execution will end as soon as the execution time in seconds reaches the largest key value in the `Next` map. | | DisplayProgress | `Boolean`
(Default: true) | **No** | If true, players executing this interaction will see a progress bar will be displayed below their cursor indicating how close to reaching the highest key value in `Next` they are. | | Next | `Map`
(Key Type: `Float`, Value Type: `Interaction`) | **No** | A map from `Float` to `Interaction`. When this interaction successfully finishes executing (either because the input was released or because the maximum duration was reached), this interaction will find the `Float` value with the largest duration in seconds that is less than the amount of time this interaction executed for. That key's mapped Interaction will then be executed. | | MouseSensitivityAdjustmentTarget | `Float`
(Default: 1.0) | **No** | While charging, this mouse sensitivity multiplier will gradually be applied. | | MouseSensitivityAdjustmentDuration | `Float`
(Default: 1.0) | **No** | Duration in seconds. After this many seconds, `MouseSensitivityAdjustmentTarget` will be fully applied to the mouse sensitivity. | | Delay | `ChargingDelay` | **No** | Settings that allow charging progress to be pushed back when the User entity takes damage. | **ChargingDelay Fields** | Field Name | Type | Required? | Notes | | ------------- | --------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | MinHealth | `Float`
(Default: 0.0) | **No** | Damage taken as a percentage of entity health (0.0-1.0). If a hit deals less than this much damage, no pushback will be applied. If a hit deals exactly this much damage, `MinDelay` seconds worth of pushback will be applied. | | MaxHealth | `Float`
(Default: 0.0) | **No** | Damage taken as a percentage of entity health (0.0-1.0). If a hit deals at least this much damage, `MaxDelay` seconds worth of pushback will be applied. | | MinDelay | `Float`
(Default: 0) | **No** | The amount of pushback, in seconds, to apply if the entity takes a hit that deals `MinHealth` damage. The amount of pushback applied by a hit is a gradiant between `MinDelay` and `MaxDelay` based on the amount of damage between `MinHealth` and `MaxHealth`. | | MaxDelay | `Float`
(Default: 0) | **No** | The amount of pushback, in seconds, to apply if the entity takes a hit that deals at least `MaxHealth` damage. The amount of pushback applied by a hit is a gradiant between `MinDelay` and `MaxDelay` based on the amount of damage between `MinHealth` and `MaxHealth`. | | MaxTotalDelay | `Float`
(Deault: 0) | **No** | The maximum amount of pushback the entity can receive over the course of a single charge, regardless of how many times they are hit. | **InteractionType Values** * `Primary` * `Secondary` * `Ability1` * `Ability2` * `Ability3` * `Use` * `Pick` * `Pickup` * `CollisionEnter` * `CollisionLeave` * `Collision` * `EntityStatEffect` * `SwapTo` * `SwapFrom` * `Death` * `Wielding` * `ProjectileSpawn` * `ProjectileHit` * `ProjectileMiss` * `ProjectileBounce` * `Held` * `HeldOffhand` * `Equipped` * `Dodge` * `GameModeSwap` ### Wielding This interaction is inherited from Charging rather than SimpleInteraction. However, its `Failed` and `Next` fields function identically to SimpleInteraction. It does not inherit all fields from Charging, so be sure to pay close attention to the field list below. This interaction drives most blocking behavior in the game. While this interaction is executing, attacks made against the Owner entity will (conditionally) trigger effects defined in this interaction. Unlike the Charging interaction, this interaction can always execute indefinitely and will only end when it fails or when the input is released. One option available in Wielding is `AngledWielding`, which allows damage and knockback modifiers to only be applied depending on the direction the attack against the Owner entity is coming from. The AngledWielding type has a field `Angle` which determines which direction the protection points relative to the player (0 is the player's front), and `AngleDistance` which determines how wide the cone of protection extends around the player. Block effects from this interaction (such as `BlockedEffects`, `BlockedInteractions`, and `StaminaCost`) will only apply if the DamageCause matches `DamageModifiers` OR if the DamageCause matches `AngledWielding.DamageModifiers` and the source of the damage matches `Angle` and `AngleDistance`. It is possible for damage and knockback multipliers specified on both this interaction's modifier fields and `AngledWielding`'s modifier fields to stack, if both have entries for the same DamageCause. This interaction will only have an effect on damage taken by one of the DamageCause entries in `DamageModifiers` or `AngledWielding.DamageModifiers`. If a DamageCause is in `DamageModifiers`, then the block effect will be triggered and the damage modifier applied regardless of what direction the Owner entity is attacked from. If a DamageCause is in `AngledWielding.DamageModifiers`, then the damage modifier is only applied if the \*\* Wielding Fields\*\* | Field Name | Type | Required? | Notes | | ------------------- | ----------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | FailOnDamage | `Boolean`
(Default: false) | **No** | If true, this interaction will fail and end immediately if the User entity takes any damage while it is executing. | | CancelOnOtherClick | `Boolean`
(Default: true) | **No** | If true, this interaction will fail and end immediately if the User entity sends another button or key press while it is executing. | | Forks | `Map`
(Key Type: `InteractionType`, Value Type: `RootInteraction`) | **No** | A map of InteractionType to RootInteraction. If entity input triggers the InteractionType while this interaction is executing, the mapped RootInteraction will be forked into its own interaction chain. This will happen instead of the usual handling for that InteractionType. This fork will occur even if `CancelOnOtherClick` is set to true (after which this interaction chain will be canceled). | | Next | `Asset`
(Asset Type: `Interaction`) | **No** | After this interaction has finished, "Next" will be executed if this interaction did not fail. | | Failed | `Asset`
(Asset Type: `Interaction`) | **No** | After this interaction has finished, "Failed" will be executed if this interaction failed. | | DamageModifiers | `Map`
(Key Type: `DamageCause`, Value Type: `Float`) | **No** | A map from DamageCause to Float, where the Float is multiplied against any damage received from the mapped DamageCause while this interaction is executing. | | KnockbackModifiers | `Map`
(Key Type: `DamageCause`, Value Type: `Float`) | **No** | A map from DamageCause to Float, where the Float is multiplied against any knockback force received from the mapped DamageCause while this interaction is executing. | | AngledWielding | `AngledWielding` | **No** | Configuration to only trigger block effects from certain angles. | | StaminaCost | `StaminaCost` | **No** | If the Owner entity receives damage that matches `DamageModifiers` or `AngledWielding` while this interaction is executing, then the entity's stamina will be deducted according to this configuration. | | BlockedEffects | `DamageEffects` | **No** | If the Owner entity receives damage that matches `DamageModifiers` or `AngledWielding` while this interaction is executing, then these effects will be applied to the instance of damage. | | BlockedInteractions | `Asset`
(Asset Type: `RootInteraction`) | **No** | If the Owner entity receives damage that matches `DamageModifiers` or `AngledWielding` while this interaction is executing, then this RootInteraction will be launched as a brand new interaction chain with the Owner entity as both Owner and User, and the attacker as the Target entity. This new interaction chain is, notably, brand new, **not** forked from the current one. | **AngledWielding Fields** | Field Name | Type | Required? | Notes | | ------------------ | --------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Angle | `Float`
(Default: 0.0) | **No** | Angle in degrees relative to the Owner entity where the angled protection is centered. 0.0 means pointed towards the front of the Owner entity. | | AngleDistance | `Float`
(Default: 0.0) | **No** | Angle in degrees indicating how wide the cone of protection is. | | DamageModifiers | `Map`
(Key Type: `DamageCause`, Value Type: `Float`) | **No** | A map from DamageCause to Float, where the Float is multiplied against any damage received from the mapped DamageCause received from within the cone of protection while this interaction is executing. | | KnockbackModifiers | `Map`
(Key Type: `DamageCause`, Value Type: `Float`) | **No** | A map from DamageCause to Float, where the Float is multiplied against any knockback force received from the mapped DamageCause received from within the cone of protection while this interaction is executing. | **StaminaCost Fields** | Field Name | Type | Required? | Notes | | ---------- | ------------------------------------------------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | CostType | `CostType`
(Default: `MaxHealthPercentage`) | **No** | How to calculate stamina consumed by blocking from the raw pre-block damage. If `Damage`, then the stamina consumed will be `rawDamage / Value`. If `MaxHealthPercentage`, then the stamina consumed will be `rawDamage / (EntityMaxHealth * Value)` | | Value | `Float`
(Default: 0.04) | **No** | The value to use in the `CostType` formula. | **DamageEffects Fields** | Field Name | Type | Required? | Notes | | ---------------------- | -------------------------------------------- | --------- | ------------------------------------------------------------------------------- | | ModelParticles | `Array`
(Element Type: `ModelParticle`) | **No** | Particle systems to trigger in the first-person view. | | WorldParticles | `Array`
(Element Type: `WorldParticle`) | **No** | Particle systems to trigger in the third-person view. | | LocalSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | 2D sound to play locally to the attacking entity if they are a player. | | WorldSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | Sound to play in the world at the Owner entity's location. | | PlayerSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | 2D sound to play locally to the Owner entity if they are a player. | | ViewDistance | `Double`
(Default: 75.0) | **No** | Distance at which these effects should play for other players. | | Knockback | `Knockback` | **No** | The properties of the knockback that will be applied. | | CameraEffect | `Asset`
(Asset Type: `CameraEffect`) | **No** | CameraEffect to briefly apply locally to the Owner entity if they are a player. | | StaminaDrainMultiplier | `Float`
(Default: 1.0) | **No** | This multiplier is applied to the `StaminaCost`, if any. | **Knockback Fields** | Field Name | Type | Required? | Notes | | -------------- | ------------------------------------------ | --------- | -------------------------------------------------------------------------------------------------------------------------- | | Type | `String` | **No** | If provided, specifies a type of knockback to use. Each knockback type may come with additional fields. | | Force | `Double`
(Default: 0.0) | **No** | The amount of force to apply to the Owner entity. | | Duration | `Double`
(Default: 0.0) | **No** | If 0.0, apply the force as a single impulse. If more, continuously apply the force over a period of time. | | VelocityType | `ChangeVelocityType`
(Default: `Add`) | **No** | How to apply the force, either adding it to the entity's current velocity, or setting the velocity to the knockback force. | | VelocityConfig | `VelocityConfig` | **No** | Characteristics of friction as the Owner entity is thrown by this knockback. | **Knockback Type: Force** Apply the calculated knockback force along the provided direction. | Field Name | Type | Required? | Notes | | ---------- | ---------------------------- | --------- | ------------------------------------------------------------------------------------ | | Direction | `Vector3`
(Default: Up) | **No** | Which direction the player should be flung, relative to the direction of the attack. | **Knockback Type: Point** Apply the calculated knockback force laterally along the XZ plane, plus provided Y velocity. | Field Name | Type | Required? | Notes | | ---------- | --------------------------- | --------- | ------------------------------------------------------------------------------------------------------- | | OffsetX | `Integer`
(Default: 0) | **No** | Offset the source position of the knockback left or right perpendicular to the direction of the attack. | | OffsetZ | `Integer`
(Default: 0) | **No** | Offset the source position of the knockback, forward or backward along the directon of the attack. | | RotateY | `Integer`
(Default: 0) | **No** | Rotate the knockback direction around the Y axis, where 0 is the default attack direction. | | VelocityY | `Float`
(Default: 0.0) | **No** | Add vertical velocity to the knockback force after the direction and force has been calculated. | **Knockback Type: Directional** Apply the calculated knockback force along the attack direction, removing any vertical component and replacing it with a provided Y velocity. | Field Name | Type | Required? | Notes | | ---------- | ------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | RelativeX | `Float`
(Default: 0) | **No** | Apply additional force left or right perpendicular to the direction of the attack. The additional force is multiplied by the knockback strength. | | RelativeZ | `Float`
(Default: 0) | **No** | Apply additional force forward or backward along the attack direction. The additional force is multiplied by the knockback strength. | | VelocityY | `Float`
(Default: 0) | **No** | Replace the vertical velocity of the knockback with this value. This value is not multiplied by knockback strength. | **VelocityConfig Fields** | Field Name | Type | Required? | Notes | | ------------------- | ------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | GroundResistance | `Float`
(Default: 0.82) | **No** | The minimum amount of friction applied when the entity is in contact with the ground. 1.0 = no friction, 0.0 = total friction | | GroundResistanceMax | `Float`
(Default: 0.0) | **No** | The maximum amount of friction applied when the entity is in contact with the ground. 1.0 = no friction, 0.0 = total friction | | AirResistance | `Float`
(Default: 0.96) | **No** | The minimum amount of friction applied when the entity is in the air. 1.0 = no friction, 0.0 = total friction | | AirResistanceMax | `Float`
(Default: 0.0) | **No** | The maximum amount of friction applied when the entity is in the air. 1.0 = no friction, 0.0 = total friction | | Threshold | `Float`
(Default: 1.0) | **No** | The speed at which the maximum amount of friction will be applied to the entity. The amount of friction applied will increase from minimum to maximum as the entity moves from 0 to this speed. | | Style | `VelocityThresholdStyle`
(Default: `Linear`) | **No** | The curve that friction follows as the entity's speed increases toward the `Threshold`. | **CostType Values** * `MaxHealthPercentage` * `Damage` **ChangeVelocityType Values** * `Add` * `Set` **VelocityThresholdStyle Values** * `Linear` * `Exp` ## Blocks These are interaction types meant to reason about and modify blocks in the world. The most important concept unique to these interactions is the Block Target. Like the Entity Target, it is mutable and can come from many places. However, for interaction chains initiated by the client, the block target will initially be the block that the player's cursor was over, if any. Additionally, for interaction chains initiated by the client, the client will send along which face of the block is targeted, which is used by a few block-related interactions. It is left up to each interaction type that cares about block faces as to how to handle this behavior for simulated input (i.e. NPCs initiating chains that are normally initated by the client). At the time of this writing, all block-related interactions choose the top face where relevant in simulated input. ### BlockCondition This interaction has a field `Matchers` which specifies certain conditions, such as block type, state, etc. This interaction fails if the current target block does not match all of them. **BlockCondition Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | | Matchers | `Array`
(Element Type: `BlockMatcher`) | **Yes** | A list of conditions that the target block must match or this condition will fail.
**Note: This field is technically not required but there is a bug that makes it dangerous to not provide at the time of this writing.**
**Note: If no conditions are added to this array, the interaction will fail, counterintuitively.** | **BlockMatcher Fields** | Field Name | Type | Required? | Notes | | ---------- | -------------------------- | --------- | ------------------------------------------------------------------------------ | | Block | `BlockIdMatcher` | **No** | If provided, requires the block itself match some set of conditions. | | Face | `BlockFace` | **No** | If provided and not 'None', requires a specific block face be targeted. | | StaticFace | `Boolean` (Default: false) | **No** | If false, the face condition will be adjusted by the block's current rotation. | **BlockFace Values** * `Up` * `Down` * `North` * `South` * `East` * `West` * `None` **BlockIdMatcher Fields** | Field Name | Type | Required? | Notes | | ---------- | -------------------------------------- | --------- | -------------------------------------------------------------------------- | | Id | `Asset`
(Asset Type: `BlockType`) | **No** | If provided, the block must match the specified `BlockType`. | | State | `String` | **No** | If provided, the block's current state must match the provided state name. | | Tag | `String` | **No** | If provided, the block type's asset tags must contain the provided tag. | ### DestroyCondition This interaction fails if the current User entity cannot destroy the current target blcok. **DestroyCondition Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | ### PlacementCountCondition This interaction accepts the name of a BlockType that has the TrackedPlacement BlockEntity. The interaction will fail if the number of blocks of the provided BlockType in the world do not match the provided condition. **PlacementCountCondition Fields** | Field Name | Type | Required? | Notes | | ---------- | ------------------------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Block | `String` | **Yes** | The BlockType to examine. The number of instances of the BlockType in the world will be compared to Value.
**Note: The specified BlockType must have the TrackedPlacement BlockEntity. Otherwise, the number of blocks in the world will always be zero.** | | Value | `Integer`
(Default: 0) | **No** | The value to compare the number of blocks in the world with. | | LessThan | \`Boolean
(Default: true) | **No** | If true, the interaction will fail if the number of blocks in the world is greater than or equal to Value. If false, the interaction will fail if the number of blocks in the world is less than or equal to Value. | ### BreakBlock This interaction attempts to break the target block while acting as the User entity. The User entity must be a player. It is not guaranteed to work, depending on world settings and the User entity's current state, it may not work. If it fails, it will fail the interaction under some circumstances, but not others. **Note: In particular, if `Harvest`=false and the player is in Survival mode, the player will simply execute a damage operation against the block. Even when the Tool field is specified, the player's currently-held item can impact the results in unintuitive ways.** This interaction will fail if there is no block target, if `Harvest`=true and the block is not harvestable, or if the world settings prevent the Harvest/Break operation. It will generally not fail otherwise, even if the block was not broken or damaged. The block will generally break every time if `Harvest`=true or the player is in Creative mode. **BreakBlock Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | | Harvest | `Boolean` (Default: false) | **No** | If true, harvest the block and deposit the drops in the player's inventory. This operation will generally always succeed. If false, this interaction will effectively perform whatever action would have occurred if the player had left-clicked the block. | | Tool | `String` | **No** | If `Harvest`=true, the player is in Survival mode, and this field is provided, then the break operation will be performed as though with this tool type.
**This field mostly doesn't work. Your held item will be used for most block damage calculations regardless of this field's contents.** | | MatchTool | `Boolean` (Default: false) | **No** | If true, `Harvest`=true, the player is in Survival mode, and `Tool` is provided, block breaking will be prevented unless `Tool` is a valid gathering tool for the target block. The interaction will not be failed, even if block breaking is prevented in this manner. | ### ChangeBlock This interaction requires a mapping from one or more current BlockTypes to one or more target BlockTypes. If the target block is one of the key BlockTypes, then it will be changed to the mapped target BlockType. If the current BlockType of the target block does not appear as a key in the Changes field, then this interaction fails. **ChangeBlock Fields** | Field Name | Type | Required? | Notes | | ----------------- | ----------------------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | | Changes | `Map`
(Key Type: `BlockType`, Value Type: `BlockType`) | **No** | A list of potential block type changes, with each entry having a current and new BlockType id. | | WorldSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | If provided, this SoundEvent is played in the world at the position of the block if the block successfully changes. | | RequireNotBroken | `Boolean`
(Default: false) | **No** | If true, this interaction will fail if the player's held item is broken (durability 0), and the block change will not take place. | ### ChangeState This interaction requires a mapping from one or more current block state names to one or more state names. If the target block is in one of the key block states, then it will be changed to the mapped target blocks tate. If the current block state of the target block does nto appear as a key in the Changes field, then this interaction fails. All blocks start out with a null state by default. This null state can be referenced by the key "default" and the block can be returned to that state with the value "default". **ChangeState Fields** | Field Name | Type | Required? | Notes | | ---------------- | ----------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | | Changes | `Map`
(Key Type: `String`, Value Type: `String`) | **No** | A list of potential block state changes, with each entry having a current and new state name. | | UpdateBlockState | `Boolean`
(Default: false) | **No** | If true, performs a full refresh of the block's BlockEntity component and notifies nearby players as though a full block type change occurred. | ### CycleBlockGroup This interaction will attempt to change the target block to the next block type in one of the BlockGroups it belongs to. If the block type belongs to multiple BlockGroups, which one is used is effectively arbitrary. The User entity must be a player. If the block cannot be changed for any reason (entity not a player, no block target, block does not belong to a BlockGroup, etc.). If the block is the only entry in the BlockGroup, this interaction will succeed and the block will be considered changed despite nothing happening. Unlike most other block-changing interactions, this one will fail if the world settings prevent players from breaking blocks. **This interaction always reduces the player's held item's durability by a single 'hit' worth of damage if the block changes. There is no way to prevent it. The block type will change and the interaction will succeed even if the player's held item is broken, however.** **CycleBlockGroup Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | ### DestroyBlock This interaction destroys the target block without dropping anything. It will successfully destroy the block if the target block exists and this interaction has no failure conditions. **This interaction has no additional fields.** ### PickBlock This interaction is effectively equivalent to using the middle mouse button in creative mode. In survival mode, the block's item will be moved to the user's current active hotbar slot if it is in the player's inventory. This interaction is performed entirely on the client and cannot be performed by non-players. It is unclear if this interaction has failure conditions. **PickBlock Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | ### PlaceBlock This interaction is effectively identical to a right clicking while holding a block in their hand, with some additional options. For one, it can be executed with any LivingEntity as the User entity. For another, it has some useful fields. For the most part, though, it follows the same behaviors and rules as any ordinary block placement by a player. It's not clear under what circumstances this interaction can fail. The server will not fail the interaction under any special circumstances (including when there is no target block, or when `BlockTypeToPlace` is not provided and the LivingEntity is not holding a block). However, the client is very involved with the function of this interaction and its behavior is unknown. **PlaceBlock Fields** | Field Name | Type | Required? | Notes | | ------------------ | -------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | BlockTypeToPlace | `Asset`
(Asset Type: `BlockType`) | **No** | If provided, the block placed by this interaction will be the specified BlockType. If not provided, the User entity's held item will be used, instead, if it is a block. | | RemoveItemInHand | `Boolean`
(Default: True) | **No** | If true and the User entity is not a player in Creative mode, the item in the player's hand must match the block being placed and one quantity will be removed for each block placed. If the item does not match, the block cannot be placed. If false, the player's hand item is ignored entirely.\*\* | | AllowDragPlacement | `Boolean`
(Default: True) | **No** | If true and the interaction was triggered on the client by a player, then the player can hold the input that was used to activate this interaction chain and move the mouse around in order to execute this interaction repeatedly and place several blocks. The interaction chain will not move onto the next interaction until the player releases the input. | ### RunOnBlockTypes This interaction retrieves all blocks within a provided radius of the User entity. For each block that matches any of the provided BlockSets, a new interaction chain will be forked that uses the matching block as the target block. This interaction will continue executing until all forked interaction chains have completed. The interaction will fail if no blocks within the radius match the provided BlockSets or if all of the forked interaction chains fail. **RunOnBlockTypes Fields** | Field Name | Type | Required? | Notes | | ------------ | -------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Range | `Integer` | **Yes** | The spherical radius around the User entity to search for blocks. Must be at least 1. | | BlockSets | `AssetArray`
(Element Type: `BlockSet`) | **No** | A list of BlockSets to match nearby blocks again. Only blocks that match any of the BlockSets will have interaction chains forked for them. | | MaxCount | `Integer` | **Yes** | The maximum number of blocks that will be located with the search. Further blocks will be ignored. If there are more matching blocks within the radius than this number, the specific set of blocks that will be found is completely arbitrary and may change from execution to execution. | | Interactions | `Asset`
(Asset Type: `RootInteraction`) | **No, but yes.** | The RootInteraction that will be forked for each matching block. This interaction will not fail to validate if it is missing, but every execution of this interaction will fail. | ### UseBlock If the target block has an interaction for this interaction chain's interaction type, execute it immediately as part of this interaction chain. The execution will be wrapped in UseBlockEvent.Pre and UseBlockEvent.Post events, and cancellations of the UserBlockEvent.Pre event are respected. The User entity is considered the triggering entity for both events. If the target block does not have an interaction for this interaction chain's interaction type, this interaction fails. **This interaction has no additional fields.** ## Items These are interactions intended to interface with an entity's inventory. There is no concept of an "item target", unfortunately, so these generally either interact with the entity's held item or the entity's inventory at a high level. ### AddItem Adds a specified quantity of a specified item to the User entity's inventory, preferring to add it to the entity's hotbar where possible. This interaction will have no effect on User entities that are not LivingEntities. This interaction has no failure states. **Note: This interaction has a bug in its field validators that will cause interactions that reference items declared in the same mod to fail validation on startup. Additionally, this interaction has a bug that will cause it to fail and have no effect if the User entity has no block target. Use ModifyInventory instead.** **AddItem Fields** | Field Name | Type | Required? | Notes | | ---------------- | --------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | | ItemId | `Asset`
(Asset Type: `Item`) | **Yes** | The item id of the item to add to the player's inventory. | | Quantity | `Integer`
(Default: 0) | **No** | The quantity of the item to add to the player's inventory. | ### CheckUniqueItemUsage This interaction will check whether it has run once for the User entity with their currently-held item before. If it hasn't, it will succeed. If it has, it will fail. It will also fail if the User entity is not a player. The interaction will record the item id of the User entity's currently-held item on success, ensuring it cannot be successfully run with that player and item id combination again. **This interaction has no additional fields.** ### ChangeActiveSlot This interaction does not inherit from SimpleInteraction and therefore has no Next or Failed fields. The `CancelOnItemChange` field is ignored for this interaction and is always treated as false. This interaction will set the User entity's currently- active hotbar slot to the specified slot index. If none is specified, the interaction chain's target slot will be used, if any. Otherwise, slot 0 will be used. If a slot is specified and it is already active, then this interaction will have no effect, but if no slot is specified and the interaction chain's target slot is already active, the logic in the next paragraph will still be executed. This interaction will also have no effect if the User entity is not a LivingEntity. Once the slot has changed, a new SwapTo interaction chain will be forked off for the selected slot. If a target slot was specified, then the interaction chain's current target slot will be set to the specified slot, as will the forked SwapTo interaction chain. If this interaction chain was initiated by a player swapping an item into or out of an occupied active hotbar slot, then the swap will be executed after the slot is changed and before the SwapTo interaction is forked. Not running this interaction in the resulting SwapFrom interaction chain is a way for the server to cancel players performing these sorts of swap interactions. The default behavior for these swap interactions is that the SwapFrom interaction chain will be initiated with the currently-active-slot as the target slot. As a result, the target slot will usually not change when this interaction runs, it merely exists as a signal for the server to continue the item swap. **ChangeActiveSlot Fields** | Field Name | Type | Required? | Notes | | ---------- | --------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | TargetSlot | `Integer` | **No** | If not provided, indicates the slot the player's active hotbar slot should be changed to. Otherwise, the interaction chain's target slot will be used (which is usually the already-active hotbar slot). | ### EquipItem This interaction will equip the User entity's currently-held item into the appropriate armor slot, if it is armor. The interaction will fail if the item is armor but it cannot be equipped for some reason. The interaction will succeed but take no action if the User entity cannot equip armor or if the item is not armor. **This interaction has no additional fields.** ### IncreaseBackpackCapacity This interaction will increase the User entity's backpack size by the provided amount. **It will additionally remove one quantity from the player's currently-held item. There is no way to prevent this.** This interaction will have no effect if the User entity is not a player. This interaction has no special failure conditions, even if the User entity is not a player, or the player is not currently holding an item. | Field Name | Type | Required? | Notes | | ---------- | --------------------------- | --------- | --------------------------------------------------------------------------------------- | | Capacity | `Integer`
(Default: 1) | **No** | The additional backpack capacity to add to the player. **Must be between 1 and 32767.** | ### ModifyInventory This interaction attempts to perform one or more inventory-modifying actions against the User entity. The User entity must be a player. If they are not, no actions will be performed, but the interaction will not fail. Any item removals performed by this interaction, either as a result of `ItemToRemove` or `AdjustHeldItemQuantity`, are both atomic (meaning the entire quantity must be removed, or none) and required (meaning that the interaction will fail and no further actions taken if the removal fails for any reason). Item additions performed by this interaction, either as a result of `ItemToAdd` or `AdjustHeldItemQuantity` will drop excess items on the ground near the player if necesary and continue on. This interaction first executes the item removal in `ItemToRemove`, if any, then adjusts the held item as specified by `AdjustHeldItemQuantity`, if provided, then executes the item addition in `ItemToAdd`, if any, and then finally executes the damage/healing of the held item in `AdjustHeldItemDurability`, if provided. **ModifyDurability Fields** | Field Name | Type | Required? | Notes | | ------------------------ | ------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | RequiredGameMode | `GameMode` | **No** | If provided, only execute the inventory-modifying actions if the player is in the provided GameMode. The interaction will not fail if the GameMode doesn't match. | | ItemToRemove | `ItemStack` | **No** | If provided, a matching item will be removed in the provided quantity. If there is no matching item in the player inventory in the required quantity, then the interaction will fail and further actions will not be executed. | | AdjustHeldItemQuantity | `Integer`
(Default: 0) | **No** | The player's held item, if any, will have its quantity will be modified by the provided amount- subtracted from if this number is negative or added to if this item is positive. If the player has no held item, then this field will have no effect regardless of its value and the interaction will NOT fail. If the player's inventory does not have sufficient quantity of items to support the removal, this interaction will fail and further actions will not be executed. Excess items will be dropped on the ground near the player. | | ItemToAdd | `ItemStack` | **No** | If provided, the ItemStack will be added to the player's inventory. Excess items will be dropped on the ground near the player. | | AdjustHeldItemDurability | `Double`
(Default: 0.0) | **No** | The player's held item, if any, will have its durability adjusted by the specified amount. The durability cannot go below 0 or raise above the item's maximum durability. Invalid durability values in this field will not cause the interaction to fail. Neither will it fail if the player has no held item. | | BrokenItem | `String` | **No** | This field should contain an ItemId, but it is not validated by the server on startup, so be careful. This field can have the value of "Empty" to specify no item, or an empty hand. If specified and the `AdjustHeldItemDurability` operation reduces the player's held item to 0 durability, the player's held item is changed to this ItemId. If the inventory replacement fails, this interaction will fail. | | NotifyOnBreak | `Boolean`
(Default: false) | **No** | If true and the `AdjustHeldItemDurability` operation reduces the player's held item to 0 durability, this interaction will perform the usual audiovisual feedback of a broken tool. It will play the usual tool breaking sound and send the player a text message in chat that their item has broken. | | NotifyOnBreakMessage | `String` | **No** | If provided, and `NotifyOnBreak` is true, when the player is notified of a broken tool by this interaction, the message sent to their chat will instead be the translation key specified by this field. The translation key supports the templating parameter `{itemName}`. See the translation key `server.general.repair.itemBroken_Hoe` for an example. | **GameMode Values** * `Creative`: The game is currently in Creative Mode * `Adventure`: The game is currently in Adventure Mode **ItemStack Fields** | Field Name | Type | Required? | Notes | | ---------------------------- | --------------------------------- | --------- | ------------------------------------------------------------------------------------ | | Id | `Asset`
(Asset Type: `Item`) | **Yes** | The id of the Item asset this stack contains. | | Quantity | `Integer`
(Default: 1) | **No** | The number of items in this stack.
**Must be greater than 0.** | | Durability | `Double`
(Default: 0.0) | **No** | The durability of the item stack.
**Cannot be negative.** | | MaxDurability | `Double`
(Default: 0.0) | **No** | The maximum durability of the item this stack contains.
**Cannot be negative.** | | Metadata | `Bson Document` | **No** | If provided, applies the bson to the item stack metadata. | | OverrideDroppedItemAnimation | `Boolean`\*(Default: false) | **No** | ??? | ### PickupItem This interaction will attempt to pick up the User entity's current target entity and add it to their inventory. It will fail if the User entity is not a player, if they do not have a target entity, or if the target entity is not an item located in the world. It will not fail if the player simply cannot pick up the item. **This interaction has no additional fields.** ### RefillContainer This interaction will fail if the User entity is not a player. The interaction will draw a ray from the player's head down their look direction until the edge of the player's held item's interaction range or until the first solid block. The nearest fluid block of a type listed in this interaction's `States` map will result in the one of the player's currently-held items being converted to the fluid's related item state. If the `States` map indicates a durability for the new item state, then the converted item will use that durability. If the item is already in the fluid's related item state, then this interaction will fail if the player's held item is already at maximum durability (unless the `States` map indicates a durability value greater than the item's maximum, in which case the interaction will succeed but the item will not change). Otherwise, the durability listed for the fluid in the `States` map will be added to the item's current durability. If the interaction has not failed by this point, the fluid block in the world may be transformed to a different type if one is listed in the `States` map. If any part of this process does not proceed for any reason (for instance, if the player is not holding an item), then this interaction will fail. **RefillContainer Fields** | Field Name | Type | Required? | Notes | | ---------- | ---------------------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | States | `Map`
(Key Type: `String`, Value Type: `RefillState`) | **Yes** | A map from item state names to `RefillState` objects, which contain information such as acceptable fluid block types, durability increases, and what fluid type to convert the targeted fluid block to after refill, if any. If the player targets a fluid block that matches one of the fluid types in the `RefillState`, the item will be converted to the keyed item state and the `RefillState` will be used to decide what happens next. | **RefillState Fields** | Field Name | Type | Required? | Notes | | -------------- | ------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | AllowedFluids | `Array`
(Element Type: `String`) | **Yes** | If any of these fluids are targeted by the player, the player's held item will be converted to the keyed item state and `Durability` and `TransformFluid` will be used. | | Durability | `Double`
(Default: -1.0) | **No** | If the player's held item changes item states, this value is the new item's durability, unless it is negative, in which case the item will begin at full durability. If the player's held item is already in the item state, and the item is not already at full durability, this value will be added to the item's durability. | | TransformFluid | `String` | **No** | If provided, this field is a fluid id that the targeted fluid block should be transformed to if the player's held item is successfully updated. | ## Entities ### DamageEntity This interaction does not inherit from SimpleInteraction, but adds its own Next and Failed fields that work similarly. This interaction will cause the User entity to damage the Target entity. It has the capability to apply different damage based on the direction of the attack or what body part was targeted by the User entity, with each possibility providing different damage calculations, effects, and Next interaction. If multiple entires match the attack, `TargetedDamage` (body part damage) takes highest priority, then the first matching `AngledDamage` in the list, then the default damage in the base interaction fields. It is possible for elements of these different damage priorities to be taken peacemeal if higher-priority damage fields do not overwrite lower-priority damage fields. For instance, damage calculation could be taken from `TargetedDamage`, the damage effects could be taken from the first matching `AngledDamage`, and the Next interaction coming from the default damage field. If all damage dealt by this interaction is cancelled, then this interaction will fail, and the `Failed` interaction will be executed next in the chain. If any damage dealt by this interaction is blocked, then this interaction will succeed, but the `Blocked` interaction wil lbe executed next in the chain. Otherwise, the highest-precedent matching `Next` interaction that you provide will be executed. For instance, if you provide `Next` interactions for all `TargetedDamage` and `AngledDamage` entries, and one in the interaction's `Next` field, then a headshot could result in a unique `Next` interaction being executed, even if there is a matching `AngledDamage` entry. However, if you leave the `Next` interaction out of your `TargetedDamage` entries, a special `Next` interaction for backstabs could be executed. Otherwise, the `Next` field in the root of the interaction will be executed instead. DamageEntity has an unusual relationship with `RunTime`. This interaction always ends immediately after its first tick, regardless of the status of `RunTime` or `WaitForAnimationToFinish`. However, if damage dealt by this interaction is calculated as `DamageCalculatorType` `Dps`, then the `RunTime` will be used to determine the precise amount of damage to deal. If `RunTime` is 0, then no damage will be dealt. **DamageEntity Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | DamageCalculator | `DamageCalculator` | **No** | If provided, describes the damage amounts and types to apply to the Target entity. | | DamageEffects | `DamageEffects` | **No** | If provided, describes particles, sounds, knockback, etc. to apply to the target entity on damage. | | Next | `Asset`
(Asset Type: `Interaction`) | **No** After this interaction has finished, "Next" will be executed if damage was dealt to the target and none was blocked. | | | AngledDamage | `Array`
(Element Type: `AngledDamage`) | **No** | If provided, allows alternative `DamageCalculator`, `DamageEffects`, and `Next` entries for attacks that approach the target from certain angles. | | TargetedDamage | `Map`
(Key Type: `String`, Value Type: `TargetedDamage`) | **Yes** | This field must be provided, but is not required to have any entries. This is a map from body part names to `TargetedDamage` values. Hypixel only uses one body part name: `Head`, and it is not clear whether there are others. If provided, allows alternative `DamageCalculator`, `DamageEffects`, and `Next` entries for attacks that damage specific enemy body parts. | | EntityStatsOnHit | `Array`
(Element Type: `EntityStatOnHit`) | **No** | If provided, allows this attack to reduce enemy stats other than health. Each individual damage application dealt by the same ability will apply stat reductions, at diminishing returns. All damage dealt in interaction chains forked by a Selector interaction will share the number of hits across all targets. | | Failed | `Asset`
(Asset Type: `Interaction`) | **No** | After this interaction has finished, "Failed" will be executed if no damage hits were applied to the player, or if all damage hits were cancelled. | | Blocked | `Asset`
(Asset Type: `Interaction`) | **No** | After this interaction has finished, "Blocked" will be executed if any damage hits were blocked by the target. | **DamageCalculator Fields** | Field Name | Type | Required? | Notes | | ------------------------- | --------------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Type | `DamageCalculatorType`
(Default: Absolute) | **No** | Whether the damage being applied is `Absolute` or \`Dps'. | | Class | `DamageClass`
(Default: Unknown) | **No** | The type of attack producing the damage. Some weapon systems apply equipment modifiers based on this value. | | BaseDamage | `Map`
(Key Type: `DamageCause`, Value Type: `Float`) | **No** | A set of DamageCauses and how much base damage is dealt for each. | | SequentialModifierStep | `Float`
(Default: 0.0) | **No** | Value between 0.0-1.0. Each additional hit from a single ability will have its damage reduced by this much as a percentage. All damage dealt in interaction chains forked by a Selector interaction will share the number of hits across all targets. | | SequentialModifierMinimum | `Float`
(Default: 0.0) | **No** | Value between 0.0-1.0. `SequentialModifierStep` cannot reduce damage below this percentage regardless of the number of hits. | | RandomPercentageModifier | `Float`
(Default: 0.0) | **No** | A random value between +/- this amount multiplied by the base damage will be added to the base damage. | **DamageEffects Fields** | Field Name | Type | Required? | Notes | | ---------------------- | -------------------------------------------- | --------- | --------------------------------------------------------------------------------------- | | ModelParticles | `Array`
(Element Type: `ModelParticle`) | **No** | Particle systems to trigger in the first-person view. | | WorldParticles | `Array`
(Element Type: `WorldParticle`) | **No** | Particle systems to trigger in the third-person view. | | LocalSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | 2D sound to play locally to the attacking entity if they are a player. | | WorldSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | Sound to play in the world at the Target entity's location. | | PlayerSoundEventId | `Asset`
(Asset Type: `SoundEvent`) | **No** | 2D sound to play locally to the Target entity if they are a player. | | ViewDistance | `Double`
(Default: 75.0) | **No** | Distance at which these effects should play for other players. | | Knockback | `Knockback` | **No** | The properties of the knockback that will be applied. | | CameraEffect | `Asset`
(Asset Type: `CameraEffect`) | **No** | CameraEffect to briefly apply locally to the Target entity if they are a player. | | StaminaDrainMultiplier | `Float`
(Default: 1.0) | **No** | This multiplier is applied to the stamina cost incurred by the target blocking, if any. | **AngledDamage Fields** | Field Name | Type | Required? | Notes | | ---------------- | ---------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | AngleDistance | `Float`
(Default: 0) | **No** | The width in degrees of the matching arc around the Target entity. If the attack against the Target originates from within the arc, then the properties below will be applied to the attack, if provided. | | Angle | `Float`
(Default: 0.0) | **No** | The angle in degrees around the Target entity at which the matching arc is centered. | | DamageCalculator | `DamageCalculator` | **No** | If provided and the attack against the Target entity originates from within the provided arc, this DamageCalculator will override the interaction's `DamageCalculator` field. | | DamageEffects | `DamageEffects` | **No** | If provided and the attack against the Target entity originates from within the provided arc, this DamageEffects will override the interaction's `DamageEffects` field. | | Next | `Asset`
(Asset Type: `Interaction`) | **No** | If provided and the attack against the Target entity originates from within the provided arc, this Interaction will override the interaction's `Next` field. | **TargetedDamage Fields** | Field Name | Type | Required? | Notes | | ---------------- | ---------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | DamageCalculator | `DamageCalculator` | **No** | If provided and this TargetedDamage was matched, this DamageCalculator will override the interaction's `DamageCalculator` field and the `DamageCalculator` field of any matching `AngledDamage`. | | DamageEffects | `DamageEffects` | **No** | If provided and this TargetedDamage was matched, this DamageEffects will override the interaction's `DamageEffects` field and the `DamageEffects` field of any matching `AngledDamage`. | | Next | `Asset`
(Asset Type: `Interaction`) | **No** | If provided and this TargetedDamage was matched, this Interaction will override the interaction's `Next` field and the `Next` field of any matching `AngledDamage`. | **EntityStatOnHit Fields** | Field Name | Type | Required? | Notes | | --------------------------- | -------------------------------------------------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | EntityStatId | `Asset`
(AssetType: `EntityStatType`) | **Yes** | Which entity stat to affect. | | Amount | `Float`
(Default: 0.0) | **No** | How much of the stat to apply for each damage application. Use negative numbers to reduce stats. | | MultipliersPerEntitiesHit | `Array`
(Element Type: `Float`, Default: `[1.0, 0.6, 0.4, 0.2, 0.1]`) | **No** | The diminishing returns curve to be applied for multiple damage applications by the same ability. Each hit's stat impact will be multiplied by the next value in the list. If there are more hits than array elements, subsequent hits will be multiplied by `MultiplierPerExtraEntityHit`. | | MultiplierPerExtraEntityHit | `Float`
(Default: 0.05) | **No** | If an ability carries out more damage applications than there are elements in the `MultipliersPerEntitiesHit` array, then subsequent stat values will be multiplied by this number. | **Knockback Fields** | Field Name | Type | Required? | Notes | | -------------- | ------------------------------------------ | --------- | -------------------------------------------------------------------------------------------------------------------------- | | Type | `String` | **No** | If provided, specifies a type of knockback to use. Each Target type may come with additional fields. | | Force | `Double`
(Default: 0.0) | **No** | The amount of force to apply to the Owner entity. | | Duration | `Double`
(Default: 0.0) | **No** | If 0.0, apply the force as a single impulse. If more, continuously apply the force over a period of time. | | VelocityType | `ChangeVelocityType`
(Default: `Add`) | **No** | How to apply the force, either adding it to the entity's current velocity, or setting the velocity to the knockback force. | | VelocityConfig | `VelocityConfig` | **No** | Characteristics of friction as the Owner entity is thrown by this knockback. | **Knockback Type: Force** Apply the calculated knockback force along the provided direction. | Field Name | Type | Required? | Notes | | ---------- | ---------------------------- | --------- | ------------------------------------------------------------------------------------ | | Direction | `Vector3`
(Default: Up) | **No** | Which direction the entity should be flung, relative to the direction of the attack. | **Knockback Type: Point** Apply the calculated knockback force laterally along the XZ plane, plus provided Y velocity. | Field Name | Type | Required? | Notes | | ---------- | --------------------------- | --------- | ------------------------------------------------------------------------------------------------------- | | OffsetX | `Integer`
(Default: 0) | **No** | Offset the source position of the knockback left or right perpendicular to the direction of the attack. | | OffsetZ | `Integer`
(Default: 0) | **No** | Offset the source position of the knockback, forward or backward along the directon of the attack. | | RotateY | `Integer`
(Default: 0) | **No** | Rotate the knockback direction around the Y axis, where 0 is the default attack direction. | | VelocityY | `Float`
(Default: 0.0) | **No** | Add vertical velocity to the knockback force after the direction and force has been calculated. | **Knockback Type: Directional** Apply the calculated knockback force along the attack direction, removing any vertical component and replacing it with a provided Y velocity. | Field Name | Type | Required? | Notes | | ---------- | ------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | RelativeX | `Float`
(Default: 0) | **No** | Apply additional force left or right perpendicular to the direction of the attack. The additional force is multiplied by the knockback strength. | | RelativeZ | `Float`
(Default: 0) | **No** | Apply additional force forward or backward along the attack direction. The additional force is multiplied by the knockback strength. | | VelocityY | `Float`
(Default: 0) | **No** | Replace the vertical velocity of the knockback with this value. This value is not multiplied by knockback strength. | **VelocityConfig Fields** | Field Name | Type | Required? | Notes | | ------------------- | ------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | GroundResistance | `Float`
(Default: 0.82) | **No** | The minimum amount of friction applied when the entity is in contact with the ground. 1.0 = no friction, 0.0 = total friction | | GroundResistanceMax | `Float`
(Default: 0.0) | **No** | The maximum amount of friction applied when the entity is in contact with the ground. 1.0 = no friction, 0.0 = total friction | | AirResistance | `Float`
(Default: 0.96) | **No** | The minimum amount of friction applied when the entity is in the air. 1.0 = no friction, 0.0 = total friction | | AirResistanceMax | `Float`
(Default: 0.0) | **No** | The maximum amount of friction applied when the entity is in the air. 1.0 = no friction, 0.0 = total friction | | Threshold | `Float`
(Default: 1.0) | **No** | The speed at which the maximum amount of friction will be applied to the entity. The amount of friction applied will increase from minimum to maximum as the entity moves from 0 to this speed. | | Style | `VelocityThresholdStyle`
(Default: `Linear`) | **No** | The curve that friction follows as the entity's speed increases toward the `Threshold`. | **DamageCalculatorType Values** * `Absolute` * `Dps` **DamageClass Values** * `Unknown` * `Light` * `Charged` * `Signature` **ChangeVelocityType Values** * `Add` * `Set` **VelocityThresholdStyle Values** * `Linear` * `Exp` ### LaunchProjectile This is just a worse version of Projectile and is slated to be removed. Use Projectile. ### Projectile This interaction will spawn a new projectile at the User entity's eye position that will travel in its look direction. | Field Name | Type | Required? | Notes | | ---------- | --------------------------------------------- | --------- | ------------------------------------------------------ | | Config | `Asset`
(Asset Type: `ProjectileConfig`) | **No** | Configuration describing the projectile to be spawned. | ### RemoveEntity Despawns the specified entity from the world. This interaction will have no effect if the specified entity is a player. This interaction has no special failure conditions. | Field Name | Type | Required? | Notes | | ---------- | ---------------------------------------- | --------- | ---------------------- | | Entity | `InteractionTarget`
(Default: User) | **No** | The entity to despawn. | **InteractionTarget Values** * `User` - The user of this interaction chain. The entity whose actions caused this interaction chain to be executed. This is usually the same as the Owner. * `Owner` - The owner of this interaction chain. The entity upon whom this interaction chain is executing. * `Target` - The entity target of this interaction chain, if any. This value is mutable (and can therefore come from many places) but most commonly, it is an entity the User was targeting when this interaction chain began executing. ### SendMessage This interaction sends a message to the Owner entity if that entity can receive messages. Otherwise, the message is written to the server logs. If the entity is a player, the message will appear in the player's chat window. \*\*SendMessage | Field Name | Type | Required? | Notes | | ---------- | -------- | --------- | --------------------------------------------------------------------------------------------------------------------- | | Message | `String` | **No** | A text message to be sent to the Owner entity. If this field is not provided, `Key` is used instead. | | Key | `String` | **No** | A translation key for a message to be sent to the Owner entity. If `Message` is provided, then this field is ignored. | ### UseEntity This interaction is not in use by Hypixel and has some unusual qualities that mean it probably won't do what you want it to. Do not use it. This interaction will retrieve the entity currently targeted by the client (NOT the interaction chain's current Target entity) and execute that entity's RootInteraction for this interaction chain's current interaction type. The RootInteraction will be executed as part of this current interaction chain. None of the properties of this interaction chain will be modified. This interaction will fail if the client is not currently targeting an entity, or if no interaction for the current interaction type exists on the entity. ## Stats Hytale's resource system has been written about fairly extensively. You can use these interactions to modify stats in response to actions or use stats as a cost for abilities. ### ChangeStat This interaction applies a set of raw stat changes to the User entity. It has no special failure conditions. | Field Name | Type | Required? | Notes | | ------------- | ------------------------------------------------------------ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | StatModifiers | `Map`
(Key Type: `EntityStatType`, Value Type: `Float`) | **Yes** | A set of stats to modify and what value to apply to them. | | ValueType | `ValueType`
(Default: Absolute) | **No** | Whether the values in the `StatModifiers` map represent flat values to apply to the stat total, or percentages (0.0-100.0). Percentage values are percentage of the difference between the maximum and minimum stat value. | | Behaviour | `ChangeStatBehavior`
(Default: Add) | **No** | Whether the values in the `StatModifiers` map represent deltas to add into the User entity's current stat values, or fixed values to set the entity's stats to. | **ValueType Values** * `Absolute` * `Percent` **ChangeStatBehaviour Values** * `Add` * `Set` ### ChangeStatWithModifier This interaction is like ChangeStat, except an armor stat modifier can be chosen which will apply bonuses and penalties to a stat from the User entity's equipped armor before it is applied. | Field Name | Type | Required? | Notes | | --------------------- | ------------------------------------------------------------ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | StatModifiers | `Map`
(Key Type: `EntityStatType`, Value Type: `Float`) | **Yes** | A set of stats to modify and what value to apply to them. | | ValueType | `ValueType`
(Default: Absolute) | **No** | Whether the values in the `StatModifiers` map represent flat values to apply to the stat total, or percentages (0.0-100.0). Percentage values are percentage of the difference between the maximum and minimum stat value. | | Behaviour | `ChangeStatBehavior`
(Default: Add) | **No** | Whether the values in the `StatModifiers` map represent deltas to add into the User entity's current stat values, or fixed values to set the entity's stats to. | | InteractionModifierId | `InteractionModifierId` | **Yes** | The armor interaction modifier to apply bonuses and penalties for. | **ValueType Values** * `Absolute` * `Percent` **ChangeStatBehaviour Values** * `Add` * `Set` **InteractionModifierId Values** * `Dodge` ### StatsCondition This interaction will fail if the User entity cannot afford the specified stats costs, or if it does not have the requested stats. | Field Name | Type | Required? | Notes | | ---------- | ------------------------------------------------------------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Costs | `Map`
(Key Type:` EntityStatType`, Value Type: `Float`) | **Yes** | A set of costs that the User entity needs to be able to afford for this interaction to succeed. | | ValueType | `ValueType`
(Default: Absolute) | **No** | Whether the values in the `Costs` map represetn flat values or percentages (0.0-100.0). Percentage values are percentage of the difference between the maximum and minimum value. | | LessThan | `Boolean`
(Default: false) | **No** | If true, this interaction will fail unless the User entity's current stat values are at or **below** the specified levels. If false, they must be at or **above** the specified levels. | | Lenient | `Boolean`
(Default: false) | **No** | If true and `LessThan` is true, and a player's minimum stat value is below zero, then the player can afford a stat cost if the current value of a stat if above 0. | **ValueType Values** * `Absolute` * `Percent` ### StatsConditionWithModifier This interaction is like StatsCondition, except an armor stat modifier can be chosen which will apply bonuses and penalties to a stat's cost from the User entity's equipped armor before it is compared. | Field Name | Type | Required? | Notes | | --------------------- | ------------------------------------------------------------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Costs | `Map`
(Key Type:` EntityStatType`, Value Type: `Float`) | **Yes** | A set of costs that the User entity needs to be able to afford for this interaction to succeed. | | ValueType | `ValueType`
(Default: Absolute) | **No** | Whether the values in the `Costs` map represetn flat values or percentages (0.0-100.0). Percentage values are percentage of the difference between the maximum and minimum value. | | LessThan | `Boolean`
(Default: false) | **No** | If true, this interaction will fail unless the User entity's current stat values are at or **below** the specified levels. If false, they must be at or **above** the specified levels. | | Lenient | `Boolean`
(Default: false) | **No** | If true and `LessThan` is true, and a player's minimum stat value is below zero, then the player can afford a stat cost if the current value of a stat if above 0. | | InteractionModifierId | `InteractionModifierId` | **Yes** | The armor interaction modifier to apply bonuses and penalties for. | **ValueType Values** * `Absolute` * `Percent` **InteractionModifierId Values** * `Dodge` ## EntityEffects EntityEffects are buff or debuff effects that can be applied to a LivingEntity. These can have a variety of effects from movement speed changes to periodic damage. ### EffectCondition This interaction will fail if the specified entity's EntityEffects do not match the provided conditions. **EffectCondition Fields** | Field Name | Type | Required? | Notes | | --------------- | ------------------------------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Entity | `InteractionTarget`
(Default: User) | **Yes** | The entity to examine for EntityEffects. This field can indicate the Owner, User, or Target of this interaction chain. | | Match | `Match`
(Default: All) | **No** | If `All`, then this interaction will fail if any EntityEffect in the `EntityEffectIds` is not on the specified entity. If `None`, then this interaction will fail if any EntityEffect IS on the specified entity. | | EntityEffectIds | `AssetArray`
(Element Type: `EntityEffect`) | **Yes** | The set of EntityEffects to check against the specified entity and `Match`. | **InteractionTarget Values** * `User` - The user of this interaction chain. The entity whose actions caused this interaction chain to be executed. This is usually the same as the Owner. * `Owner` - The owner of this interaction chain. The entity upon whom this interaction chain is executing. * `Target` - The entity target of this interaction chain, if any. This value is mutable (and can therefore come from many places) but most commonly, it is an entity the User was targeting when this interaction chain began executing. **Match Values** * `All` - All EntityEffects must be on the specified entity for this interaction to succeed. * `None` - None of the EntityEffects must be on the specified entity for this interaction to succeed. ### ApplyEffect This interaction will apply the specified EntityEffect to the specified Entity. It has no special failure conditions. **ApplyEffect Fields** | Field Name | Type | Required? | Notes | | ---------- | ----------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------- | | Entity | `InteractionTarget`
(Default: User) | **Yes** | The entity to apply the EntityEffect to. This field can indicate the Owner, User, or Target of this interaction chain. | | EffectId | `Asset`
(Asset Type: `EntityEffect`) | **Yes** | The effect to apply. | **InteractionTarget Values** * `User` - The user of this interaction chain. The entity whose actions caused this interaction chain to be executed. This is usually the same as the Owner. * `Owner` - The owner of this interaction chain. The entity upon whom this interaction chain is executing. * `Target` - The entity target of this interaction chain, if any. This value is mutable (and can therefore come from many places) but most commonly, it is an entity the User was targeting when this interaction chain began executing. ### ClearEntityEffect This interaction will remove the specified EntityEffect from the specified Entity. It has no special failure conditions. It will not fail if the Entity does not have the EntityEffect. **ClearEntityEffect Fields** | Field Name | Type | Required? | Notes | | ---------- | ----------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------- | | Entity | `InteractionTarget`
(Default: User) | **Yes** | The entity to remove the EntityEffect from. This field can indicate the Owner, User, or Target of this interaction chain. | | EffectId | `Asset`
(Asset Type: `EntityEffect`) | **Yes** | The effect to remove. | **InteractionTarget Values** * `User` - The user of this interaction chain. The entity whose actions caused this interaction chain to be executed. This is usually the same as the Owner. * `Owner` - The owner of this interaction chain. The entity upon whom this interaction chain is executing. * `Target` - The entity target of this interaction chain, if any. This value is mutable (and can therefore come from many places) but most commonly, it is an entity the User was targeting when this interaction chain began executing. ## Farming These are interaction types built to support the in-game farming system in Hytale. They are mostly block-related interactions with a few exceptions. ### ChangeFarmingStage If the target block is a farming block, this interaction will attempt to modify the current farming stage in one of three ways. The interaction can optionally specify which StageSet to use for the new stage. If it is not specified, the current StageSet will be used. If any part of the the process of changing the growth stage fails, this interaction will fail, with the one exception that attempting to set the stage to the crop's existing stage will have no effect but still succeed. | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | | StageSet | `String` | **No** | If provided, set the block's current stage to one in the provided StageSet. Otherwise, use the crop's current StageSet. | | Increase | `Integer` | **No** | If provided, increase the current stage by the specified amount. If the specified stage does not exist, the block will be set to the closest extant stage. | | Decrease | `Integer` | **No** | If provided and `Increase` is not provided, decrease the current stage by the specified amount. If the specified stage does not exist, the block will be set to the closest extant stage. | | Stage | `Integer`
(Default: -1) | **No** | If provided and `Increase`/`Decrease` are not provided, set the current stage to the specified stage. If this value is less than 0, set the current stage to the final growth stage. If the specified stage does not exist, the block will be set to the closest extant stage. | ### FertilizeSoil If the target block is unfertilized tilled soil or a farming block on top of unfertilized tilled soil, fertilizes the soil. The interaction will fail otherwise. **FertilizeSoil Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | | RefreshModifiers | `Array`
(Element Type: `String`) | **No** | Does nothing. | ### HarvestCrop This interaction will attempt to execute the harvest action on the current block target and add the crop's drops to the User entity's inventory. The block will either be destroyed or set to its post-harvest growth stage, depending on the farming configuration of the block. This will happen (and the player will receive the full harvest drops) regardless of the block's current growth stage. This interaction has no special failure conditions, even if the block target isn't a farming block or gathering isn't permitted in the current world, but nothing will occur in those cases. **HarvestCrop Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | ### UseWateringCan If the target block is tilled soil or a farming block on top of tilled soil, waters the soil for the specified duration. The interaction will fail otherwise. **UseWateringCan Fields** | Field Name | Type | Required? | Notes | | ---------------- | ------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | | UserLatestTarget | `Boolean`
(Default: false) | **No** | If true, update this interaction chain's target block from the client's current cursor position before executing the interaction. | | Duration | `Integer`
(Default: 0) | **No** | The duration in seconds to water the soil for. | | RefreshModifiers | `Array`
(Element Type: `String`) | **No** | Does nothing. | --- Events Source: https://hytalemodding.dev/en/docs/server/events ## IEvent * AddPlayerToWorldEvent * AllNPCsLoadedEvent * AllWorldsLoadedEvent * AssetMonitorEvent * AssetStoreMonitorEvent * CommonAssetMonitorEvent * AssetPackRegisterEvent * AssetPackUnregisterEvent * AssetStoreEvent * RegisterAssetStoreEvent * RemoveAssetStoreEvent * AssetsEvent * GenerateAssetsEvent * LoadedAssetsEvent * RemovedAssetsEvent * BootEvent * ChunkEvent * ChunkPreLoadProcessEvent * DrainPlayerFromWorldEvent * EditorClientEvent * AssetEditorActivateButtonEvent * AssetEditorAssetCreatedEvent * AssetEditorClientDisconnectEvent * AssetEditorSelectAssetEvent * AssetEditorUpdateWeatherPreviewLockEvent * EntityEvent * EntityRemoveEvent * LivingEntityInventoryChangeEvent * GenerateDefaultLanguageEvent * GenerateSchemaEvent * GenerateServerStateEvent * ItemContainerChangeEvent * ~~LivingEntityUseBlockEvent~~ DEPRECATED * LoadAssetEvent * LoadedNPCEvent * MessagesUpdated * PlayerConnectEvent * PlayerEvent * ~~PlayerCraftEvent~~ DEPRECATED * ~~PlayerInteractEvent~~ DEPRECATED * PlayerMouseButtonEvent * PlayerMouseMotionEvent * PlayerReadyEvent * PlayerRefEvent * PlayerDisconnectEvent * PlayerSetupConnectEvent * PlayerSetupDisconnectEvent * PluginEvent * PluginSetupEvent * ~~PrepareUniverseEvent~~ DEPRECATED * ShutdownEvent * SingleplayerRequestAccessEvent * TreasureChestOpeningEvent * WindowCloseEvent * WorldEvent * AddWorldEvent * RemoveWorldEvent * StartWorldEvent * WorldPathChangedEvent ## IAsyncEvent * AssetEditorFetchAutoCompleteDataEvent * AssetEditorRequestDataSetEvent * PlayerChatEvent * SendCommonAssetsEvent ## EcsEvent * CancellableEcsEvent * BreakBlockEvent * ChangeGameModeEvent * ChunkSaveEvent * ChunkUnloadEvent * CraftRecipeEvent * Post * Pre * Damage * DamageBlockEvent * DropItemEvent * Drop * PlayerRequest * InteractivelyPickupItemEvent * PlaceBlockEvent * PrefabPasteEvent * SwitchActiveSlotEvent * DiscoverInstanceEvent * Display * DiscoverZoneEvent * Display * MoonPhaseChangeEvent * UseBlockEvent * Post * Pre --- ArgTypes Source: https://hytalemodding.dev/en/docs/server/argtypes | Name | Target Class | Description | | | :---------------------------- | :------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | - | | Boolean | java.lang.Boolean | A 'true' or 'false' input | | | Integer | java.lang.Integer | A whole number | | | String | java.lang.String | Words, text, numbers, letters. To input more than one word at a time, you may need to wrap it with double quotes (`"my fancy sentence"`). | | | Float | java.lang.Float | A floating-pointer number | | | Double | java.lang.Double | A decimal number | | | UUID | java.util.UUID | A UUID (Universally Unique IDentifier) | | | Player\_UUID | java.util.UUID | A UUID or an online player username | | | Game\_Profile\_Lookup\_Async | ProfileServiceClient.PublicGameProfile | A player UUID or username. If not found locally, performs a remote lookup via the Profile Service. | | | Relative\_Double\_Coord | Coord | An x, y, or z coordinate as a decimal, optionally relative by specifying a tilde (\~) in front of the number | | | Relative\_Int\_Coord | IntCoord | An x, y, or z coordinate as a whole number, optionally relative by specifying a tilde (\~) in front of the number | | | Relative\_Integer | RelativeInteger | A tilde to mark an integer relative to a base | | | Relative\_Float | RelativeFloat | A tilde to mark a float relative to a base | | | Player\_Ref | PlayerRef | A UUID or an online player's username | | | World | World | A world folder name | | | Model\_Asset | ModelAsset | A reference to an Asset of type Model | | | Weather\_Asset | Weather | A reference to an Asset of type Weather | | | Interaction\_Asset | Interaction | A reference to an Asset of type Interaction | | | Root\_Interaction\_Asset | RootInteraction | A reference to an Asset of type Root Interaction | | | Effect\_Asset | EntityEffect | A refernece to an Asset of type EntityEffect | | | Environment\_Asset | Environment | A reference to an Asset of type Environment | | | Item\_Asset | Item | A reference to an Asset of type Item | | | Block\_Type\_Asset | BlockType | A reference to an Asset of type BlockType | | | Particle\_System | ParticleSystem | A reference to an Asset of type ParticleSystem | | | Hitbox\_Collision\_Config | HitboxCollisionConfig | A reference to an Asset of type HitboxCollisionConfig | | | Repulsion\_Config | RepulsionConfig | A reference to an Asset of type RepulsionConfig | | | Sound\_Event\_Asset | SoundEvent | A reference to an Asset of type SoundEvent | | | Ambiance\_Fx\_Asset | AmbianceFX | A reference to an Asset of type AmbianceFX | | | Sound\_Category | SoundCategory | A sound category (sfx, music, ambient, ui) | | | Entity\_ID | `ArgWrapper` | A UUID representing an entity id | | | Integer\_Comparison\_Operator | IntegerComparisonOperator | A mathematical sign for integer comparison | | | Integer\_Operation | IntegerOperation | A mathematical sign for performing an operation | | | Int\_Range | `Pair` | Two integers representing a minimum and maximum of a range | | | Relative\_Int\_Range | RelativeIntRange | Two integers representing a minimum and maximum of a range | | | Vector2I | Vector2i | Two integers, generally corresponding to x/z axis | | | Vector3I | Vector3i | Three integers, generally corresponding to x/y/z axis | | | Relative\_Vector3I | RelativeVector3i | Three optionally relative integers, generally corresponding to x/y/z axis | | | Relative\_Block\_Position | RelativeIntPosition | A position with three integer coordinates, representing a block's location in world space. | | | Relative\_Position | Relative | A position with three decimal coordinates, representing a location in world space. | | | Relative\_Chunk\_Position | RealtiveChunkPosition | A position with two integer coordinates (x, z), representing a chunk's location. | | | Rotation | Vector3f | A rotation with three coordinates, representing the pitch, yaw, and roll respectively | | | Block\_Type\_Key | String | A block type | | | Block\_ID | Integer | A block type, converted to an int id | | | Color | Integer | A color value in hex format, hex integer, or decimal integer | | | Weighted\_Block\_Type | `Pair` | A weight corresponding to a blocktype | | | Weighted\_Block\_Entry | String | A block with optional weight prefix | | | Block\_Pattern | BlockPattern | A list of blocks with optional weights | | | Individual\_Block\_Mask | BlockMask | Create a block mask using symbols and block names | | | Block\_Mask | BlockMask | A tick rate value (e.g., 30tps, 33ms, or 30) | | | Tick\_Rate | Integer | A list of block masks that combine together | | | Game\_Mode | GameMode | GameMode | | --- Sounds Source: https://hytalemodding.dev/en/docs/server/sounds This page contains a list of all Sounds available to be used as a key in the AssetMap. * SFX\_Alchemy\_Bench\_Close * SFX\_Alchemy\_Bench\_Craft * SFX\_Alchemy\_Bench\_Open * SFX\_Antelope\_Alerted * SFX\_Antelope\_Death * SFX\_Antelope\_Hurt * SFX\_Antelope\_Run * SFX\_Antelope\_Walk * SFX\_Arcane\_Workbench\_Close\_Local * SFX\_Arcane\_Workbench\_Craft * SFX\_Arcane\_Workbench\_Open\_Local * SFX\_Armour\_Bench\_Close * SFX\_Armour\_Bench\_Craft * SFX\_Armour\_Bench\_Open * SFX\_Arrow\_Fire\_Hit * SFX\_Arrow\_Fire\_Miss * SFX\_Arrow\_Frost\_Hit * SFX\_Arrow\_Frost\_Miss * SFX\_Arrow\_FullCharge\_Hit * SFX\_Arrow\_FullCharge\_Miss * SFX\_Arrow\_HalfCharge\_Hit * SFX\_Arrow\_HalfCharge\_Miss * SFX\_Arrow\_NoCharge\_Hit * SFX\_Arrow\_NoCharge\_Miss * SFX\_Arrow\_Whistle * SFX\_Attn\_Loud * SFX\_Attn\_Moderate * SFX\_Attn\_Quiet * SFX\_Attn\_VeryLoud * SFX\_Attn\_VeryQuiet * SFX\_Avatar\_Powers\_Disable * SFX\_Avatar\_Powers\_Disable\_Local * SFX\_Avatar\_Powers\_Enable * SFX\_Avatar\_Powers\_Enable\_Local * SFX\_Axe\_Crude\_Impact * SFX\_Axe\_Crude\_Swing * SFX\_Axe\_Iron\_Impact * SFX\_Axe\_Iron\_Swing * SFX\_Axe\_Special\_Impact * SFX\_Axe\_Special\_Swing * SFX\_Axe\_Stone\_Trork\_Hit * SFX\_Axe\_Stone\_Trork\_Miss * SFX\_Bat\_Alerted * SFX\_Bat\_Death * SFX\_Bat\_Hurt * SFX\_Battleaxe\_T1\_Block\_Impact * SFX\_Battleaxe\_T1\_Impact * SFX\_Battleaxe\_T1\_Launch * SFX\_Battleaxe\_T1\_Launch\_Local * SFX\_Battleaxe\_T1\_Raise * SFX\_Battleaxe\_T1\_Raise\_Local * SFX\_Battleaxe\_T1\_Shove * SFX\_Battleaxe\_T1\_Shove\_Local * SFX\_Battleaxe\_T1\_Swing * SFX\_Battleaxe\_T1\_Swing\_Charged * SFX\_Battleaxe\_T1\_Swing\_Charged\_Local * SFX\_Battleaxe\_T1\_Swing\_Down\_Local * SFX\_Battleaxe\_T1\_Swing\_LR\_Local * SFX\_Battleaxe\_T1\_Swing\_RL\_Local * SFX\_Battleaxe\_T2\_Impact * SFX\_Battleaxe\_T2\_Raise * SFX\_Battleaxe\_T2\_Raise\_Local * SFX\_Battleaxe\_T2\_Signature\_End * SFX\_Battleaxe\_T2\_Signature\_End\_Local * SFX\_Battleaxe\_T2\_Signature\_Swing * SFX\_Battleaxe\_T2\_Signature\_Swing\_Local * SFX\_Battleaxe\_T2\_Swing * SFX\_Battleaxe\_T2\_Swing\_Charged * SFX\_Battleaxe\_T2\_Swing\_Charged\_Local * SFX\_Battleaxe\_T2\_Swing\_Down\_Local * SFX\_Battleaxe\_T2\_Swing\_LR\_Local * SFX\_Battleaxe\_T2\_Swing\_RL\_Local * SFX\_Bear\_Grizzly\_Alerted * SFX\_Bear\_Grizzly\_Attack * SFX\_Bear\_Grizzly\_Death * SFX\_Bear\_Grizzly\_Hurt * SFX\_Bear\_Grizzly\_Run * SFX\_Bear\_Grizzly\_Sleep * SFX\_Bear\_Walk * SFX\_Bench\_Placeholder * SFX\_Bison\_Alerted * SFX\_Bison\_Death * SFX\_Bison\_Hurt * SFX\_Bison\_Idle * SFX\_Bison\_Run * SFX\_Bison\_Walk * SFX\_Blunderbuss\_Bullet\_WhizBy * SFX\_Blunderbuss\_Fire * SFX\_Blunderbuss\_Fire\_Local * SFX\_Blunderbuss\_Hit * SFX\_Blunderbuss\_Load * SFX\_Blunderbuss\_Load\_Local * SFX\_Blunderbuss\_Miss * SFX\_Blunderbuss\_No\_Ammo * SFX\_Boar\_Alerted * SFX\_Boar\_Death * SFX\_Boar\_Hurt * SFX\_Boar\_Run * SFX\_Boar\_Sleep * SFX\_Boar\_Walk * SFX\_Bomb\_Fire\_Goblin\_Bounce * SFX\_Bomb\_Fire\_Goblin\_Death * SFX\_Bomb\_Fire\_Goblin\_Hit * SFX\_Bomb\_Fire\_Goblin\_Miss * SFX\_Bomb\_Fuse * SFX\_Bone\_Break * SFX\_Bone\_Build * SFX\_Bone\_Hit * SFX\_Bone\_Land * SFX\_Bone\_Walk * SFX\_Bow\_No\_Ammo * SFX\_Bow\_T1\_Block\_Impact * SFX\_Bow\_T1\_Draw * SFX\_Bow\_T1\_Draw\_Local * SFX\_Bow\_T1\_Raise * SFX\_Bow\_T1\_Raise\_Local * SFX\_Bow\_T1\_Shoot * SFX\_Bow\_T1\_Shoot\_Local * SFX\_Bow\_T1\_Swing * SFX\_Bow\_T1\_Swing\_Local * SFX\_Bow\_T2\_Draw * SFX\_Bow\_T2\_Draw\_Local * SFX\_Bow\_T2\_Shoot * SFX\_Bow\_T2\_Shoot\_Local * SFX\_Bow\_T2\_Signature\_Loop * SFX\_Bow\_T2\_Signature\_Loop\_Local * SFX\_Bow\_T2\_Signature\_Nock * SFX\_Bow\_T2\_Signature\_Nock\_Local * SFX\_Bow\_T2\_Signature\_Shoot * SFX\_Bow\_T2\_Signature\_Shoot\_Local * SFX\_Bramble\_MoveIn * SFX\_Branch\_Break * SFX\_Branch\_Build * SFX\_Branch\_Hit * SFX\_Branch\_Land * SFX\_Branch\_Walk * SFX\_Brazier\_Break * SFX\_Brazier\_Build * SFX\_Bunny\_Alerted * SFX\_Bunny\_Death * SFX\_Bunny\_Hurt * SFX\_Bush\_Break * SFX\_Bush\_Hit * SFX\_Bush\_MoveIn * SFX\_Cactus\_Break * SFX\_Cactus\_Hit * SFX\_Cactus\_Large\_Hit * SFX\_Cactus\_Small\_Break * SFX\_Cactus\_Small\_Hit * SFX\_Calf\_Hurt * SFX\_Calf\_Run * SFX\_Calf\_Walk * SFX\_Camel\_Alerted * SFX\_Camel\_Death * SFX\_Camel\_Hurt * SFX\_Camel\_Laydown * SFX\_Camel\_Run * SFX\_Camel\_Sleep * SFX\_Camel\_Wake * SFX\_Camel\_Walk * SFX\_Campfire\_Break * SFX\_Campfire\_Build * SFX\_Campfire\_Close\_Local * SFX\_Campfire\_Default\_Loop * SFX\_Campfire\_Open\_Local * SFX\_Campfire\_Processing * SFX\_Campfire\_Processing\_End * SFX\_Campfire\_Processing\_Failed * SFX\_Candle\_Default\_Loop * SFX\_Candle\_Off * SFX\_Capture\_Crate\_Capture\_Fail\_Local * SFX\_Capture\_Crate\_Capture\_Succeed * SFX\_Capture\_Crate\_Capture\_Succeed\_Local * SFX\_Capture\_Crate\_Spawn\_Fail\_Local * SFX\_Capture\_Crate\_Spawn\_Succeed * SFX\_Cauldron\_Bubbling * SFX\_Cauldron\_Bubbling\_Small * SFX\_Chest\_Legendary\_Close\_Player * SFX\_Chest\_Legendary\_FirstOpen\_Player * SFX\_Chest\_Legendary\_Loop * SFX\_Chest\_Legendary\_Open * SFX\_Chest\_Wooden\_Close * SFX\_Chest\_Wooden\_Open * SFX\_Chest\_Wooden\_Open\_Player * SFX\_Chick\_Alerted * SFX\_Chick\_Death * SFX\_Chick\_Hurt * SFX\_Chicken\_Alerted * SFX\_Chicken\_Death * SFX\_Chicken\_Flee * SFX\_Chicken\_Hurt * SFX\_Chicken\_Run * SFX\_Chicken\_Walk * SFX\_Clay\_Pot\_Large\_Break * SFX\_Clay\_Pot\_Large\_Build * SFX\_Clay\_Pot\_Large\_Hit * SFX\_Clay\_Pot\_Large\_Walk * SFX\_Clay\_Pot\_Small\_Break * SFX\_Clay\_Pot\_Small\_Build * SFX\_Clay\_Pot\_Small\_Hit * SFX\_Clay\_Pot\_Small\_Walk * SFX\_Cloth\_Break * SFX\_Cloth\_Build * SFX\_Cloth\_Hit * SFX\_Cloth\_Land * SFX\_Cloth\_Walk * SFX\_Club\_Meat\_Impact * SFX\_Club\_Meat\_Swing * SFX\_Club\_Special\_Impact * SFX\_Club\_Special\_Swing * SFX\_Club\_Steel\_Impact * SFX\_Club\_Steel\_Swing * SFX\_Club\_Wood\_Impact * SFX\_Club\_Wood\_Swing * SFX\_Cocoon\_Active * SFX\_Cocoon\_Break * SFX\_Cocoon\_Build * SFX\_Cocoon\_Hit * SFX\_Cocoon\_Walk * SFX\_Coins\_Land * SFX\_Coins\_Walk * SFX\_Consume\_Bread * SFX\_Consume\_Bread\_Local * SFX\_Cow\_Alerted * SFX\_Cow\_Death * SFX\_Cow\_Hurt * SFX\_Cow\_Idle * SFX\_Cow\_Run * SFX\_Cow\_Sleep * SFX\_Cow\_Walk * SFX\_Crawler\_Void\_Alerted * SFX\_Crawler\_Void\_Alerted\_02 * SFX\_Crawler\_Void\_Death * SFX\_Crawler\_Void\_Despawn * SFX\_Crawler\_Void\_Hurt * SFX\_Crawler\_Void\_Run * SFX\_Crawler\_Void\_Sleep * SFX\_Crawler\_Void\_Spawn * SFX\_Crawler\_Void\_Spawn\_02 * SFX\_Crawler\_Void\_Walk * SFX\_Creative\_Play\_Add\_Mask * SFX\_Creative\_Play\_Brush\_Erase * SFX\_Creative\_Play\_Brush\_Mode * SFX\_Creative\_Play\_Brush\_Paint\_Base * SFX\_Creative\_Play\_Brush\_Paint\_Idle\_Layer * SFX\_Creative\_Play\_Brush\_Paint\_Move\_Layer * SFX\_Creative\_Play\_Brush\_Shape * SFX\_Creative\_Play\_Brush\_Stamp * SFX\_Creative\_Play\_Error * SFX\_Creative\_Play\_Eyedropper\_Select * SFX\_Creative\_Play\_Paste * SFX\_Creative\_Play\_Selection\_Drag * SFX\_Creative\_Play\_Selection\_Place * SFX\_Creative\_Play\_Selection\_Scale * SFX\_Creative\_Play\_Selection\_Widget * SFX\_Creative\_Play\_Set\_Mask * SFX\_Crocodile\_Alerted * SFX\_Crocodile\_Death * SFX\_Crocodile\_Hurt * SFX\_Crops\_Grow * SFX\_Crops\_Grow\_Stage\_Complete * SFX\_Crow\_Death * SFX\_Crow\_Hurt * SFX\_Crystal\_Break * SFX\_Crystal\_Build * SFX\_Crystal\_Hit * SFX\_Crystal\_Walk * SFX\_Daggers\_T1\_Guard * SFX\_Daggers\_T1\_Guard\_Local * SFX\_Daggers\_T1\_Pounce * SFX\_Daggers\_T1\_Pounce\_Local * SFX\_Daggers\_T1\_Slash\_Impact * SFX\_Daggers\_T1\_Stab\_Double\_Impact * SFX\_Daggers\_T1\_Stab\_Impact * SFX\_Daggers\_T1\_Stab\_Left\_Local * SFX\_Daggers\_T1\_Stab\_Retreat * SFX\_Daggers\_T1\_Stab\_Retreat\_Local * SFX\_Daggers\_T1\_Stab\_Right\_Local * SFX\_Daggers\_T1\_Swing * SFX\_Daggers\_T1\_Swing\_Double * SFX\_Daggers\_T1\_Swing\_Double\_Local * SFX\_Daggers\_T1\_Swing\_LR\_Local * SFX\_Daggers\_T1\_Swing\_RL\_Local * SFX\_Daggers\_T2\_Guard * SFX\_Daggers\_T2\_Guard\_Local * SFX\_Daggers\_T2\_Signature\_P1 * SFX\_Daggers\_T2\_Signature\_P1\_Local * SFX\_Daggers\_T2\_Signature\_P2 * SFX\_Daggers\_T2\_Signature\_P2\_Local * SFX\_Daggers\_T2\_Signature\_P3 * SFX\_Daggers\_T2\_Signature\_P3\_Local * SFX\_Daggers\_T2\_Slash\_Impact * SFX\_Daggers\_T2\_Stab\_Double\_Impact * SFX\_Daggers\_T2\_Stab\_Impact * SFX\_Daggers\_T2\_Stab\_Left\_Local * SFX\_Daggers\_T2\_Stab\_Retreat * SFX\_Daggers\_T2\_Stab\_Retreat\_Local * SFX\_Daggers\_T2\_Stab\_Right\_Local * SFX\_Daggers\_T2\_Swing * SFX\_Daggers\_T2\_Swing\_Double * SFX\_Daggers\_T2\_Swing\_Double\_Local * SFX\_Daggers\_T2\_Swing\_LR\_Local * SFX\_Daggers\_T2\_Swing\_RL\_Local * SFX\_Deer\_Doe\_Alerted * SFX\_Deer\_Doe\_Death * SFX\_Deer\_Doe\_Hurt * SFX\_Deer\_Doe\_Run * SFX\_Deer\_Doe\_Sleep * SFX\_Deer\_Stag\_Alerted * SFX\_Deer\_Stag\_Death * SFX\_Deer\_Stag\_Hurt * SFX\_Deer\_Stag\_Roar * SFX\_Deer\_Stag\_Run * SFX\_Deer\_Stag\_Sleep * SFX\_Deer\_Walk * SFX\_Default\_Break * SFX\_Default\_Build * SFX\_Default\_Clone * SFX\_Default\_Harvest * SFX\_Default\_Walk * SFX\_Deployable\_Totem\_Heal\_Despawn * SFX\_Deployable\_Totem\_Heal\_Effect\_Local * SFX\_Deployable\_Totem\_Heal\_Spawn * SFX\_Deployable\_Totem\_Slowing\_Despawn * SFX\_Deployable\_Totem\_Slowing\_Effect\_Local * SFX\_Deployable\_Totem\_Slowing\_Spawn * SFX\_Dirt\_Break * SFX\_Dirt\_Build * SFX\_Dirt\_Clone * SFX\_Dirt\_Hit * SFX\_Dirt\_Land * SFX\_Dirt\_Walk * SFX\_Discovery\_Z1\_Medium * SFX\_Discovery\_Z1\_Short * SFX\_Discovery\_Z2\_Medium * SFX\_Discovery\_Z2\_Short * SFX\_Discovery\_Z3\_Medium * SFX\_Discovery\_Z3\_Short * SFX\_Discovery\_Z4\_Medium * SFX\_Discovery\_Z4\_Short * SFX\_Divine\_Respawn * SFX\_Door\_Ancient\_Close * SFX\_Door\_Ancient\_Open * SFX\_Door\_Crude\_Close * SFX\_Door\_Crude\_Open * SFX\_Door\_Desert\_Close * SFX\_Door\_Desert\_Open * SFX\_Door\_Jungle\_Close * SFX\_Door\_Jungle\_Open * SFX\_Door\_Lumberjack\_Close * SFX\_Door\_Lumberjack\_Open * SFX\_Door\_Temple\_Dark\_Close * SFX\_Door\_Temple\_Dark\_Open * SFX\_Door\_Temple\_Light\_Close * SFX\_Door\_Temple\_Light\_Open * SFX\_Door\_Wooden\_Close * SFX\_Door\_Wooden\_Open * SFX\_Drag\_Armor\_Cloth * SFX\_Drag\_Armor\_Heavy * SFX\_Drag\_Armor\_Leather * SFX\_Drag\_Blocks\_Gravel * SFX\_Drag\_Blocks\_Soft * SFX\_Drag\_Blocks\_Splatty * SFX\_Drag\_Blocks\_Stone * SFX\_Drag\_Blocks\_Wood * SFX\_Drag\_Item\_Default * SFX\_Drag\_Items\_Bones * SFX\_Drag\_Items\_Chest * SFX\_Drag\_Items\_Clay * SFX\_Drag\_Items\_Cloth * SFX\_Drag\_Items\_Foliage * SFX\_Drag\_Items\_Gadget * SFX\_Drag\_Items\_Gems * SFX\_Drag\_Items\_Ingots * SFX\_Drag\_Items\_Leather * SFX\_Drag\_Items\_Metal * SFX\_Drag\_Items\_Paper * SFX\_Drag\_Items\_Potion * SFX\_Drag\_Items\_Seeds * SFX\_Drag\_Items\_Shells * SFX\_Drag\_Items\_Splatty * SFX\_Drag\_Weapon\_Blade\_Small * SFX\_Drag\_Weapon\_Blunt\_Large * SFX\_Drag\_Weapons\_Arrows * SFX\_Drag\_Weapons\_Blade\_Large * SFX\_Drag\_Weapons\_Blunt\_Small * SFX\_Drag\_Weapons\_Books * SFX\_Drag\_Weapons\_Shield\_Metal * SFX\_Drag\_Weapons\_Shield\_Wood * SFX\_Drag\_Weapons\_Stone\_Large * SFX\_Drag\_Weapons\_Stone\_Small * SFX\_Drag\_Weapons\_Wand * SFX\_Drag\_Weapons\_Wood * SFX\_Dragon\_Sleep * SFX\_Drop\_Armor\_Cloth * SFX\_Drop\_Armor\_Heavy * SFX\_Drop\_Armor\_Leather * SFX\_Drop\_Blocks\_Gravel * SFX\_Drop\_Blocks\_Soft * SFX\_Drop\_Blocks\_Splatty * SFX\_Drop\_Blocks\_Stone * SFX\_Drop\_Blocks\_Wood * SFX\_Drop\_Item\_Default * SFX\_Drop\_Items\_Bones * SFX\_Drop\_Items\_Chest * SFX\_Drop\_Items\_Clay * SFX\_Drop\_Items\_Cloth * SFX\_Drop\_Items\_Foliage * SFX\_Drop\_Items\_Gadget * SFX\_Drop\_Items\_Gems * SFX\_Drop\_Items\_Ingots * SFX\_Drop\_Items\_Leather * SFX\_Drop\_Items\_Metal * SFX\_Drop\_Items\_Paper * SFX\_Drop\_Items\_Potion * SFX\_Drop\_Items\_Seeds * SFX\_Drop\_Items\_Shells * SFX\_Drop\_Items\_Splatty * SFX\_Drop\_Weapon\_Blade\_Small * SFX\_Drop\_Weapon\_Blunt\_Large * SFX\_Drop\_Weapons\_Arrows * SFX\_Drop\_Weapons\_Blade\_Large * SFX\_Drop\_Weapons\_Blunt\_Small * SFX\_Drop\_Weapons\_Books * SFX\_Drop\_Weapons\_Shield\_Metal * SFX\_Drop\_Weapons\_Shield\_Wood * SFX\_Drop\_Weapons\_Stone\_Large * SFX\_Drop\_Weapons\_Stone\_Small * SFX\_Drop\_Weapons\_Wand * SFX\_Drop\_Weapons\_Wood * SFX\_Duck\_Alerted * SFX\_Duck\_Death * SFX\_Duck\_Hurt * SFX\_Duck\_Run * SFX\_Effect\_Burn\_Local * SFX\_Effect\_Burn\_World * SFX\_Effect\_Poison\_Local * SFX\_Effect\_Poison\_World * SFX\_Egg\_Hit * SFX\_Egg\_Miss * SFX\_Eggsac\_Active * SFX\_Emberwulf\_Alerted * SFX\_Emberwulf\_Attack\_Bite * SFX\_Emberwulf\_Death * SFX\_Emberwulf\_Hurt * SFX\_Emberwulf\_Run * SFX\_Emberwulf\_Sleep * SFX\_Emberwulf\_Walk * SFX\_Emit\_Forgotten\_Whispers * SFX\_Emit\_Lake\_Water * SFX\_Emit\_Temple\_Wisps * SFX\_Emit\_Tree\_Creak * SFX\_Emit\_Wind\_Grass * SFX\_Emit\_Wind\_Gusts * SFX\_Env\_Emit\_Fluid\_Lava * SFX\_Env\_Emit\_Fluid\_Water * SFX\_Env\_Emit\_Fluid\_Water\_Far * SFX\_Env\_Emit\_Geyzer * SFX\_Eye\_Void\_Alerted * SFX\_Eye\_Void\_Attack\_Blast * SFX\_Eye\_Void\_Attack\_Summon * SFX\_Eye\_Void\_Death * SFX\_Eye\_Void\_Fly\_Movement * SFX\_Eye\_Void\_Hurt * SFX\_Eye\_Void\_Idle * SFX\_Fen\_Stalker\_Alerted * SFX\_Fen\_Stalker\_Attack\_Swing * SFX\_Fen\_Stalker\_Attack\_Swipe * SFX\_Fen\_Stalker\_Death * SFX\_Fen\_Stalker\_Eat * SFX\_Fen\_Stalker\_Eat\_Finish * SFX\_Fen\_Stalker\_Greet * SFX\_Fen\_Stalker\_Hurt * SFX\_Fen\_Stalker\_Run * SFX\_Fen\_Stalker\_Scared * SFX\_Fen\_Stalker\_Seek * SFX\_Fen\_Stalker\_Sniff * SFX\_Feran\_Death * SFX\_Fern\_Break * SFX\_Fern\_MoveIn * SFX\_Fireball\_Bounce * SFX\_Fireball\_Death * SFX\_Fireball\_Miss * SFX\_Fish\_Death * SFX\_Fish\_Flee * SFX\_Fish\_Hurt * SFX\_Flail\_Charge * SFX\_Flail\_Charge\_Local * SFX\_Flail\_Swing * SFX\_Flail\_Swing\_Left\_Local * SFX\_Flail\_Swing\_Right\_Local * SFX\_Flame\_Break * SFX\_Flame\_Build * SFX\_Flame\_Default\_Loop * SFX\_Flamingo\_Alerted * SFX\_Flamingo\_Death * SFX\_Flamingo\_Fly * SFX\_Flamingo\_Hurt * SFX\_Forgotten\_Temple\_Emit\_Birds * SFX\_Forgotten\_Temple\_Emit\_Birds\_Interior * SFX\_Fox\_Alerted * SFX\_Fox\_Death * SFX\_Fox\_Hurt * SFX\_Fox\_Run * SFX\_Fox\_Sleep * SFX\_Frog\_Alerted * SFX\_Frog\_Croak * SFX\_Frog\_Death * SFX\_Frog\_Hurt * SFX\_Frog\_Idle * SFX\_Frog\_Run * SFX\_Furnace\_Bench\_Close * SFX\_Furnace\_Bench\_Open * SFX\_Furnace\_Bench\_Processing * SFX\_Furnace\_Bench\_Processing\_Complete * SFX\_Furnace\_Bench\_Processing\_End * SFX\_Furnace\_Bench\_Processing\_Failed * SFX\_Gecko\_Alerted * SFX\_Gecko\_Death * SFX\_Gecko\_Hurt * SFX\_Gem\_Break * SFX\_Gem\_Emit\_Loop * SFX\_Generic\_Crafting\_Failed * SFX\_Glass\_Break * SFX\_Global\_Weather\_Thunder * SFX\_Goat\_Run * SFX\_Goat\_Walk * SFX\_Goblin\_Alerted * SFX\_Goblin\_Death * SFX\_Goblin\_Hurt * SFX\_Goblin\_Lobber\_Bomb\_Bounce * SFX\_Goblin\_Lobber\_Bomb\_Death * SFX\_Goblin\_Lobber\_Bomb\_Hit * SFX\_Goblin\_Lobber\_Bomb\_Miss * SFX\_Goblin\_Run * SFX\_Goblin\_Search * SFX\_Golem\_Earth\_Alerted * SFX\_Golem\_Earth\_Death * SFX\_Golem\_Earth\_Hurt * SFX\_Golem\_Earth\_Laydown * SFX\_Golem\_Earth\_Slam * SFX\_Golem\_Earth\_Slam\_Impact * SFX\_Golem\_Earth\_Spin * SFX\_Golem\_Earth\_Stomp * SFX\_Golem\_Earth\_Stomp\_Impact * SFX\_Golem\_Earth\_Swing * SFX\_Golem\_Earth\_Swing\_Impact * SFX\_Golem\_Earth\_Wake * SFX\_Golem\_Firesteel\_Alerted\_01 * SFX\_Golem\_Firesteel\_Alerted\_02 * SFX\_Golem\_Firesteel\_Death * SFX\_Golem\_Firesteel\_Laydown * SFX\_Golem\_Firesteel\_Wake * SFX\_Golem\_Frost\_Alerted * SFX\_Golem\_Frost\_Death * SFX\_Golem\_Frost\_Hurt * SFX\_Golem\_Frost\_Laydown * SFX\_Golem\_Frost\_Slam * SFX\_Golem\_Frost\_Slam\_Impact * SFX\_Golem\_Frost\_Spin * SFX\_Golem\_Frost\_Stomp * SFX\_Golem\_Frost\_Swing * SFX\_Golem\_Frost\_Swing\_Impact * SFX\_Golem\_Frost\_Wake * SFX\_Golem\_Sand\_Alerted * SFX\_Golem\_Sand\_Death * SFX\_Golem\_Sand\_Hurt * SFX\_Golem\_Sand\_Laydown * SFX\_Golem\_Sand\_Slam * SFX\_Golem\_Sand\_Slam\_Impact * SFX\_Golem\_Sand\_Spin * SFX\_Golem\_Sand\_Stomp * SFX\_Golem\_Sand\_Stomp\_Impact * SFX\_Golem\_Sand\_Swing * SFX\_Golem\_Sand\_Swing\_Impact * SFX\_Golem\_Sand\_Wake * SFX\_Grass\_Break * SFX\_Grass\_Build * SFX\_Grass\_Hit * SFX\_Grass\_Land * SFX\_Grass\_Walk * SFX\_Gravel\_Break * SFX\_Gravel\_Build * SFX\_Gravel\_Hit * SFX\_Gravel\_Land * SFX\_Gravel\_Walk * SFX\_GunPvP\_Assault\_Rifle\_Bullet\_Death * SFX\_GunPvP\_Grenade\_Frag\_Bounce * SFX\_GunPvP\_Grenade\_Frag\_Death * SFX\_GunPvP\_Grenade\_Frag\_Hit * SFX\_GunPvP\_Grenade\_Frag\_Miss * SFX\_GunPvP\_Handgun\_Bullet\_Death * SFX\_Gun\_Fire * SFX\_Hand\_Crossbow\_T1\_Block\_Impact * SFX\_Hand\_Crossbow\_T1\_Raise * SFX\_Hand\_Crossbow\_T1\_Raise\_Local * SFX\_Hand\_Crossbow\_T1\_Shove * SFX\_Hand\_Crossbow\_T1\_Shove\_Local * SFX\_Hand\_Crossbow\_T2\_Load * SFX\_Hand\_Crossbow\_T2\_Load\_Local * SFX\_Hand\_Crossbow\_T2\_Reload\_Start * SFX\_Hand\_Crossbow\_T2\_Reload\_Start\_Local * SFX\_Handgun\_Fire * SFX\_Handgun\_Fire\_Local * SFX\_Hatchet\_T1\_Swing\_RL\_Local * SFX\_Hatchet\_T2\_Impact\_Nice * SFX\_Health\_Potion\_High\_Drink * SFX\_Health\_Potion\_High\_Drink\_Local * SFX\_Health\_Potion\_Low\_Drink * SFX\_Health\_Potion\_Low\_Drink\_Local * SFX\_Hedera\_Scream * SFX\_Hoe\_T1\_Swing\_Down\_Local * SFX\_Hoe\_T1\_Till * SFX\_Horse\_Alerted * SFX\_Horse\_Death * SFX\_Horse\_Hurt * SFX\_Horse\_Idle * SFX\_Horse\_Sleep * SFX\_Horse\_Wake * SFX\_Hyena\_Alerted * SFX\_Hyena\_Death * SFX\_Hyena\_Hurt * SFX\_Hyena\_Idle * SFX\_Ice\_Ball\_Death * SFX\_Ice\_Bolt\_Death * SFX\_Ice\_Break * SFX\_Ice\_Build * SFX\_Ice\_Hit * SFX\_Ice\_Item\_Impact * SFX\_Ice\_Item\_Swing * SFX\_Ice\_Land * SFX\_Ice\_Walk * SFX\_Incorrect\_Tool * SFX\_Item\_Break * SFX\_Item\_Repair * SFX\_Klops\_Alerted * SFX\_Klops\_Death * SFX\_Klops\_Hurt * SFX\_Klops\_Idle * SFX\_Klops\_Run * SFX\_Kweebec\_Plushie\_Impact * SFX\_Lamb\_Alerted * SFX\_Lamb\_Death * SFX\_Lamb\_Hurt * SFX\_Larva\_Alerted * SFX\_Larva\_Death * SFX\_Larva\_Despawn * SFX\_Larva\_Hurt * SFX\_Larva\_Spawn * SFX\_LeavesGround\_Break * SFX\_LeavesGround\_Hit * SFX\_LeavesGround\_Land * SFX\_LeavesGround\_Walk * SFX\_Leaves\_Break * SFX\_Leaves\_Hit * SFX\_Leaves\_Walk * SFX\_Leopard\_Snow\_Alerted * SFX\_Leopard\_Snow\_Death * SFX\_Leopard\_Snow\_Hurt * SFX\_Leopard\_Snow\_Run * SFX\_Light\_Melee\_T1\_Block * SFX\_Light\_Melee\_T1\_Guard\_Hit * SFX\_Light\_Melee\_T1\_Impact * SFX\_Light\_Melee\_T1\_Lunge * SFX\_Light\_Melee\_T1\_Lunge\_Charge * SFX\_Light\_Melee\_T1\_Shove * SFX\_Light\_Melee\_T1\_Swing * SFX\_Light\_Melee\_T2\_Block * SFX\_Light\_Melee\_T2\_Guard\_Break * SFX\_Light\_Melee\_T2\_Guard\_Hit * SFX\_Light\_Melee\_T2\_Lunge * SFX\_Light\_Melee\_T2\_Lunge\_Charge * SFX\_Light\_Melee\_T2\_Swing * SFX\_Longsword\_Special\_Impact * SFX\_Longsword\_Special\_Swing * SFX\_Longsword\_Steel\_Charged\_Swing * SFX\_Longsword\_Steel\_Impact * SFX\_Longsword\_Steel\_Swing * SFX\_Lumbermill\_Bench\_Close * SFX\_Lumbermill\_Bench\_Open * SFX\_Lumbermill\_Bench\_Processing * SFX\_Mace\_T1\_Block\_Impact * SFX\_Mace\_T1\_Impact * SFX\_Mace\_T1\_Raise * SFX\_Mace\_T1\_Raise\_Local * SFX\_Mace\_T1\_Shove * SFX\_Mace\_T1\_Shove\_Local * SFX\_Mace\_T1\_Swing * SFX\_Mace\_T1\_Swing\_Charged * SFX\_Mace\_T1\_Swing\_Charged\_LR\_Local * SFX\_Mace\_T1\_Swing\_Charged\_RL\_Local * SFX\_Mace\_T1\_Swing\_Charged\_Up\_Local * SFX\_Mace\_T1\_Swing\_LR\_Local * SFX\_Mace\_T1\_Swing\_RL\_Local * SFX\_Mace\_T1\_Swing\_Up\_Local * SFX\_Mace\_T2\_Impact * SFX\_Mace\_T2\_Raise * SFX\_Mace\_T2\_Raise\_Local * SFX\_Mace\_T2\_Signature\_Impact * SFX\_Mace\_T2\_Signature\_Impact\_Local * SFX\_Mace\_T2\_Signature\_Launch * SFX\_Mace\_T2\_Signature\_Launch\_Local * SFX\_Mace\_T2\_Swing * SFX\_Mace\_T2\_Swing\_Charged * SFX\_Mace\_T2\_Swing\_Charged\_LR\_Local * SFX\_Mace\_T2\_Swing\_Charged\_RL\_Local * SFX\_Mace\_T2\_Swing\_Charged\_Up\_Local * SFX\_Mace\_T2\_Swing\_LR\_Local * SFX\_Mace\_T2\_Swing\_RL\_Local * SFX\_Mace\_T2\_Swing\_Up\_Local * SFX\_Meerkat\_Alerted * SFX\_Meerkat\_Death * SFX\_Meerkat\_Hurt * SFX\_Meerkat\_Idle * SFX\_Memories\_Unlock\_Local * SFX\_Metal\_Break * SFX\_Metal\_Build * SFX\_Metal\_Hit * SFX\_Metal\_Land * SFX\_Metal\_Walk * SFX\_Moose\_Bull\_Alerted * SFX\_Mouse\_Alerted * SFX\_Mouse\_Death * SFX\_Mouse\_Flee * SFX\_Mouse\_Hurt * SFX\_Mouse\_Run * SFX\_Mouse\_Sleep * SFX\_Mud\_Break * SFX\_Mud\_Build * SFX\_Mud\_Hit * SFX\_Mud\_Land * SFX\_Mud\_Walk * SFX\_Mug\_Fill * SFX\_Mug\_Fill\_Local * SFX\_Mushroom\_Break * SFX\_Mushroom\_Harvest * SFX\_Music\_Ducking\_2db * SFX\_NPC\_Unarmed\_Impact * SFX\_NPC\_Unarmed\_Swing * SFX\_Ore\_Break * SFX\_Ore\_Hit * SFX\_Outlander\_Hunter\_Arrow\_Hit * SFX\_Outlander\_Hunter\_Arrow\_Miss * SFX\_Outlander\_Hurt * SFX\_Owl\_Alerted * SFX\_Owl\_Death * SFX\_Owl\_Hurt * SFX\_Pickaxe\_T1\_Swing\_Down\_Local * SFX\_Pickaxe\_T2\_Impact\_Nice * SFX\_Pig\_Alerted * SFX\_Pig\_Death * SFX\_Pig\_Hurt * SFX\_Pig\_Run * SFX\_Pig\_Walk * SFX\_Pigeon\_Death * SFX\_Pigeon\_Hurt * SFX\_Piglet\_Alerted * SFX\_Piglet\_Death * SFX\_Piglet\_Hurt * SFX\_Piglet\_Run * SFX\_Pistol\_Fire * SFX\_Plant\_Break * SFX\_Plant\_Hit * SFX\_Plant\_MoveIn * SFX\_Player\_Climb\_Down * SFX\_Player\_Climb\_Side * SFX\_Player\_Climb\_Up * SFX\_Player\_Craft\_Item\_Inventory * SFX\_Player\_Death * SFX\_Player\_Death\_Drown * SFX\_Player\_Death\_Fall * SFX\_Player\_Drop\_Item * SFX\_Player\_Fall * SFX\_Player\_Glide\_Motion * SFX\_Player\_Glide\_Stationary * SFX\_Player\_Grab\_Item * SFX\_Player\_Hurt * SFX\_Player\_Hurt\_Burn * SFX\_Player\_Hurt\_Drowning * SFX\_Player\_Hurt\_Fall * SFX\_Player\_Jump * SFX\_Player\_Mantle * SFX\_Player\_Pickup\_Item * SFX\_Player\_Roll * SFX\_Player\_Slide * SFX\_Player\_Swim * SFX\_Player\_Swim\_Fast * SFX\_Player\_Swim\_Jump * SFX\_Player\_Unarmed\_Swing\_Left * SFX\_Player\_Unarmed\_Swing\_Right * SFX\_Plushie\_Break * SFX\_Plushie\_Build * SFX\_Poop\_Bounce * SFX\_Poop\_Break * SFX\_Poop\_Hit * SFX\_Poop\_Walk * SFX\_Portal\_Neutral * SFX\_Portal\_Neutral\_Open * SFX\_Portal\_Neutral\_Teleport\_Local * SFX\_Portal\_Void * SFX\_Potion\_Drink\_Success * SFX\_Processing\_Placeholder * SFX\_Projectile\_Poop\_Hit * SFX\_Rabbit\_Alerted * SFX\_Rabbit\_Death * SFX\_Rabbit\_Hurt * SFX\_Rabbit\_Run * SFX\_Rabbit\_Sleep * SFX\_Ram\_Alerted * SFX\_Ram\_Death * SFX\_Ram\_Hurt * SFX\_Ram\_Run * SFX\_Ram\_Sleep * SFX\_Raptor\_Cave\_Alerted * SFX\_Raptor\_Cave\_Idle * SFX\_Rat\_Death * SFX\_Rat\_Hurt * SFX\_Raven\_Alerted * SFX\_Raven\_Death * SFX\_Raven\_Flee * SFX\_Raven\_Hurt * SFX\_Reeds\_MoveIn * SFX\_Rifle\_Fire * SFX\_Rifle\_Fire\_Local * SFX\_Rope\_Break * SFX\_Rope\_Build * SFX\_Rope\_Land * SFX\_Rope\_Walk * SFX\_Rotate\_Pitch\_Default * SFX\_Rotate\_Roll\_Default * SFX\_Rotate\_Yaw\_Default * SFX\_Rubble\_Bounce * SFX\_Rubble\_Hit * SFX\_Sand\_Break * SFX\_Sand\_Build * SFX\_Sand\_Hit * SFX\_Sand\_Land * SFX\_Sand\_Walk * SFX\_Scarak\_Fighter\_Alerted * SFX\_Scarak\_Fighter\_Death * SFX\_Scarak\_Fighter\_Hurt * SFX\_Scarak\_Seeker\_Alerted * SFX\_Scarak\_Seeker\_Death * SFX\_Scarak\_Seeker\_Hurt * SFX\_Scarak\_Seeker\_Spitball\_Death * SFX\_Scarak\_Spitball\_Fire * SFX\_Scorpion\_Alerted * SFX\_Scorpion\_Death * SFX\_Scorpion\_Run * SFX\_Scorpion\_Threaten * SFX\_Seeds\_Place * SFX\_Shark\_Death * SFX\_Shark\_Dive * SFX\_Shark\_Hurt * SFX\_Shark\_Swim * SFX\_Shears\_Activate * SFX\_Sheep\_Alerted * SFX\_Sheep\_Death * SFX\_Sheep\_Hurt * SFX\_Sheep\_Run * SFX\_Sheep\_Sheared * SFX\_Sheep\_Walk * SFX\_Shield\_T1\_Break * SFX\_Shield\_T1\_Impact * SFX\_Shield\_T1\_Raise * SFX\_Shield\_T1\_Raise\_Local * SFX\_Shield\_T1\_Swing * SFX\_Shield\_T1\_Swing\_Local * SFX\_Shield\_T2\_Impact * SFX\_Shield\_T2\_Raise * SFX\_Shield\_T2\_Raise\_Local * SFX\_Shield\_T2\_Swing * SFX\_Shield\_T2\_Swing\_Local * SFX\_Shovel\_T1\_Swing\_RL\_Local * SFX\_Shovel\_T2\_Impact\_Nice * SFX\_Skeleton\_Alerted * SFX\_Skeleton\_Death\_1 * SFX\_Skeleton\_Death\_2 * SFX\_Skeleton\_Death\_3 * SFX\_Skeleton\_Death\_4 * SFX\_Skeleton\_Despawn\_1 * SFX\_Skeleton\_Despawn\_2 * SFX\_Skeleton\_Hurt * SFX\_Skeleton\_Mage\_Spellbook\_Charge * SFX\_Skeleton\_Mage\_Spellbook\_Impact * SFX\_Skeleton\_Praetorian\_Alerted * SFX\_Skeleton\_Praetorian\_Death\_1 * SFX\_Skeleton\_Praetorian\_Death\_2 * SFX\_Skeleton\_Praetorian\_Death\_3 * SFX\_Skeleton\_Praetorian\_Death\_4 * SFX\_Skeleton\_Praetorian\_Despawn\_1 * SFX\_Skeleton\_Praetorian\_Despawn\_2 * SFX\_Skeleton\_Praetorian\_Hurt * SFX\_Skeleton\_Praetorian\_Run * SFX\_Skeleton\_Praetorian\_Search\_2 * SFX\_Skeleton\_Praetorian\_Spawn\_1 * SFX\_Skeleton\_Praetorian\_Walk * SFX\_Skeleton\_Run * SFX\_Skeleton\_Search\_2 * SFX\_Skeleton\_Spawn\_1 * SFX\_Skeleton\_Spawn\_2 * SFX\_Skeleton\_Walk * SFX\_Snake\_Alerted * SFX\_Snake\_Death * SFX\_Snake\_Hurt * SFX\_Snake\_Idle * SFX\_Snow\_Break * SFX\_Snow\_Build * SFX\_Snow\_Hit * SFX\_Snow\_Land * SFX\_Snow\_Walk * SFX\_Soft\_Break * SFX\_Soft\_Build * SFX\_Soft\_Hit * SFX\_Soft\_Land * SFX\_Soft\_Walk * SFX\_Spark\_Living\_Alerted * SFX\_Spark\_Living\_Death * SFX\_Sparrow\_Alerted * SFX\_Sparrow\_Death * SFX\_Sparrow\_Hurt * SFX\_Sparrow\_Idle * SFX\_Spawn\_Void\_Alerted * SFX\_Spawn\_Void\_Attack * SFX\_Spawn\_Void\_Death * SFX\_Spawn\_Void\_Hurt * SFX\_Spawn\_Void\_Run * SFX\_Spear\_Impact * SFX\_Spear\_Lunge * SFX\_Spear\_Lunge\_Local * SFX\_Spear\_Miss * SFX\_Spear\_Projectile\_Impact * SFX\_Spear\_Throw * SFX\_Spear\_Throw\_Charge * SFX\_Spear\_Throw\_Charge\_Local * SFX\_Spear\_Throw\_Local * SFX\_Spider\_Alerted * SFX\_Spider\_Death * SFX\_Spider\_Run * SFX\_Spirit\_Root\_Alerted * SFX\_Spirit\_Root\_Death\_01 * SFX\_Spirit\_Root\_Death\_02 * SFX\_Spirit\_Root\_Hurt * SFX\_Spirit\_Root\_Spawn * SFX\_Squirrel\_Alerted * SFX\_Squirrel\_Death * SFX\_Squirrel\_Hurt * SFX\_Squirrel\_Run * SFX\_Staff\_Charged\_Loop * SFX\_Staff\_Fire\_Shoot * SFX\_Staff\_Flame\_Consume\_Charge\_1 * SFX\_Staff\_Flame\_Consume\_Charge\_1\_Local * SFX\_Staff\_Flame\_Consume\_Charge\_2 * SFX\_Staff\_Flame\_Consume\_Charge\_2\_Local * SFX\_Staff\_Flame\_Consume\_Charge\_3 * SFX\_Staff\_Flame\_Consume\_Charge\_3\_Local * SFX\_Staff\_Flame\_Consume\_Charge\_4 * SFX\_Staff\_Flame\_Consume\_Charge\_4\_Local * SFX\_Staff\_Flame\_Fireball\_Impact * SFX\_Staff\_Flame\_Fireball\_Launch * SFX\_Staff\_Flame\_Fireball\_Launch\_Local * SFX\_Staff\_Flame\_Flamethrower * SFX\_Staff\_Flame\_Flamethrower\_End * SFX\_Staff\_Flame\_Flamethrower\_End\_Local * SFX\_Staff\_Flame\_Flamethrower\_Impact * SFX\_Staff\_Flame\_Flamethrower\_Local * SFX\_Staff\_Flame\_Trap\_Deploy * SFX\_Staff\_Flame\_Trap\_Despawn * SFX\_Staff\_Flame\_Trap\_Loop * SFX\_Staff\_Ice\_Shoot * SFX\_Stamina\_Potion\_Success * SFX\_Sticks\_Break * SFX\_Stone\_Break * SFX\_Stone\_Build * SFX\_Stone\_Coffin\_Open\_Close * SFX\_Stone\_Harvest * SFX\_Stone\_Hit * SFX\_Stone\_Land * SFX\_Stone\_Walk * SFX\_Sword\_T1\_Block\_Local * SFX\_Sword\_T1\_Lunge\_Charge\_Local * SFX\_Sword\_T1\_Lunge\_Local * SFX\_Sword\_T1\_Shove\_Local * SFX\_Sword\_T1\_Swing\_Down\_Local * SFX\_Sword\_T1\_Swing\_LR\_Local * SFX\_Sword\_T1\_Swing\_RL\_Local * SFX\_Sword\_T2\_Block\_Local * SFX\_Sword\_T2\_Impact * SFX\_Sword\_T2\_Lunge\_Charge\_Local * SFX\_Sword\_T2\_Lunge\_Local * SFX\_Sword\_T2\_Signature\_Part\_1 * SFX\_Sword\_T2\_Signature\_Part\_1\_Local * SFX\_Sword\_T2\_Signature\_Part\_2 * SFX\_Sword\_T2\_Signature\_Part\_2\_Local * SFX\_Sword\_T2\_Swing\_Down\_Local * SFX\_Sword\_T2\_Swing\_LR\_Local * SFX\_Sword\_T2\_Swing\_RL\_Local * SFX\_T1\_Impact\_Blunt * SFX\_Tall\_Grass\_MoveIn * SFX\_Test\_Blip\_A * SFX\_Test\_Blip\_B * SFX\_Test\_Blip\_C * SFX\_Tetrabird\_Alerted * SFX\_Tetrabird\_Death * SFX\_Tetrabird\_Flee * SFX\_Tetrabird\_Hurt * SFX\_Tetrabird\_Run * SFX\_Tiger\_Sabertooth\_Alerted * SFX\_Tiger\_Sabertooth\_Death * SFX\_Tiger\_Sabertooth\_Hurt * SFX\_Tiger\_Sabertooth\_Run * SFX\_Toad\_Rhino\_Alerted * SFX\_Toad\_Rhino\_Death * SFX\_Toad\_Rhino\_Hurt * SFX\_Toad\_Rhino\_Magma\_Alerted * SFX\_Toad\_Rhino\_Magma\_Death * SFX\_Toad\_Rhino\_Magma\_Hurt * SFX\_Toad\_Rhino\_Magma\_Run * SFX\_Toad\_Rhino\_Magma\_Tongue\_Impact * SFX\_Toad\_Rhino\_Magma\_Tongue\_Whoosh * SFX\_Toad\_Rhino\_Run * SFX\_Toad\_Rhino\_Tongue\_Impact * SFX\_Toad\_Rhino\_Tongue\_Whoosh * SFX\_Tombstone\_Break * SFX\_Tool\_T1\_Swing * SFX\_Tool\_Watering\_Can\_Water * SFX\_Torch\_Break * SFX\_Torch\_Build * SFX\_Torch\_Default\_Loop * SFX\_Torch\_Impact * SFX\_Torch\_Off * SFX\_Torch\_On\_Loop * SFX\_Torch\_Swing * SFX\_Torch\_Swing\_Left\_Local * SFX\_Torch\_Swing\_Right\_Local * SFX\_Tornado * SFX\_Trashpile\_Land * SFX\_Trashpile\_Walk * SFX\_Trork\_Alerted * SFX\_Trork\_Chieftain\_Alerted * SFX\_Trork\_Chieftain\_Death * SFX\_Trork\_Chieftain\_Hurt * SFX\_Trork\_Chieftain\_Run * SFX\_Trork\_Chieftain\_Search * SFX\_Trork\_Death * SFX\_Trork\_Exertion * SFX\_Trork\_Hurt\_01 * SFX\_Trork\_Hurt\_02 * SFX\_Trork\_Run * SFX\_Trork\_Search * SFX\_Trork\_Sleep * SFX\_Trork\_Throwing\_Axe * SFX\_Unarmed\_Impact * SFX\_Unarmed\_Swing * SFX\_Unbreakable\_Block * SFX\_Vulture\_Alerted * SFX\_Vulture\_Death * SFX\_Vulture\_Flee * SFX\_Vulture\_Hurt * SFX\_Wand\_Fire\_Shoot * SFX\_Wand\_Ice\_Shoot * SFX\_Warthog\_Alerted * SFX\_Warthog\_Death * SFX\_Warthog\_Hurt * SFX\_Warthog\_Piglet\_Alerted * SFX\_Warthog\_Piglet\_Death * SFX\_Warthog\_Piglet\_Hurt * SFX\_Warthog\_Piglet\_Run * SFX\_Warthog\_Run * SFX\_Warthog\_Sleep * SFX\_Warthog\_Walk * SFX\_Water\_MoveIn * SFX\_Water\_MoveOut * SFX\_Weapon\_Bench\_Close * SFX\_Weapon\_Bench\_Craft * SFX\_Weapon\_Bench\_Open * SFX\_Weapon\_Charge\_Swing * SFX\_Web\_MoveIn * SFX\_Window\_Break * SFX\_Window\_Stone\_Break * SFX\_Wisp\_Lamp\_Loop * SFX\_Wolf\_Alerted * SFX\_Wolf\_Death * SFX\_Wolf\_Hurt * SFX\_Wolf\_Run * SFX\_Wolf\_Sleep * SFX\_Wood\_Break * SFX\_Wood\_Build * SFX\_Wood\_Hit * SFX\_Wood\_Land * SFX\_Wood\_Walk * SFX\_Woodpecker\_Death * SFX\_Woodpecker\_Hurt * SFX\_Workbench\_Close * SFX\_Workbench\_Craft * SFX\_Workbench\_Open * SFX\_Workbench\_Upgrade\_Complete\_Default * SFX\_Workbench\_Upgrade\_Start\_Default * SFX\_Yeti\_Alerted * SFX\_Z1\_Emit\_Forest\_Autumn\_Day\_Birds * SFX\_Z1\_Emit\_Forest\_Autumn\_Day\_Insects * SFX\_Z1\_Emit\_Forest\_Autumn\_Day\_Wind * SFX\_Z1\_Emit\_Forest\_Azure\_Day\_Insects * SFX\_Z1\_Emit\_Forest\_Azure\_Day\_Wind * SFX\_Z1\_Emit\_Forest\_Gen\_Day\_Birds * SFX\_Z1\_Emit\_Forest\_Gen\_Day\_Insects * SFX\_Z1\_Emit\_Forest\_Gen\_Day\_Winds * SFX\_Z1\_Emit\_Forest\_Moss\_Day\_Birds * SFX\_Z1\_Emit\_Forest\_Moss\_Day\_Insects * SFX\_Z1\_Emit\_Forest\_Moss\_Day\_Wind * SFX\_Z1\_Emit\_Forest\_Night\_Birds * SFX\_Z1\_Emit\_Forest\_Night\_Insects * SFX\_Z1\_Emit\_Forest\_Night\_Wind * SFX\_Z1\_Emit\_Kweebec\_Village\_Wind * SFX\_Z1\_Emit\_Mountain\_Day\_Birds * SFX\_Z1\_Emit\_Plains\_Gen\_Day\_Birds * SFX\_Z1\_Emit\_Plains\_Gen\_Day\_Insects * SFX\_Z1\_Emit\_Plains\_Gen\_Day\_Wind * SFX\_Z1\_Emit\_Plains\_Gen\_Night\_Birds * SFX\_Z1\_Emit\_Plains\_Gen\_Night\_Insects * SFX\_Z1\_Emit\_Plains\_Gen\_Night\_Wind * SFX\_Z1\_Emit\_Shore\_Day\_Birds * SFX\_Z1\_Emit\_Shore\_Waves * SFX\_Z1\_Emit\_Shore\_Wind * SFX\_Z1\_Emit\_Swamp\_Day\_Birds * SFX\_Z1\_Emit\_Swamp\_Day\_Frogs * SFX\_Z1\_Emit\_Swamp\_Day\_Insects * SFX\_Z1\_Emit\_Swamp\_Day\_Wind * SFX\_Z1\_Emit\_Swamp\_Night\_Frogs * SFX\_Z1\_Emit\_Trork\_Camp * SFX\_Z1\_Shore\_Day\_Birds * SFX\_Z3\_Emit\_Cave\_Ice\_Crackle * SFX\_Z3\_Emit\_Cave\_Ice\_Rumble * SFX\_Z3\_Emit\_Cave\_Ice\_Stress * SFX\_Z3\_Emit\_Cave\_Snow\_Crackle * SFX\_Z3\_Emit\_Cave\_Snow\_Melt * SFX\_Z3\_Emit\_Hedera\_FX * SFX\_Z3\_Emit\_Hedera\_PlantRustle * SFX\_Z3\_Emit\_Tree\_Creak * SFX\_Z3\_Emit\_Wind\_Leaves * SFX\_Z3\_Emit\_Wind\_Leaves\_Stereo * SFX\_Z3\_Forest\_Day\_Birds * SFX\_Z3\_Forest\_Day\_General * SFX\_Z3\_Forest\_Night\_Birds * SFX\_Zombie\_Alerted * SFX\_Zombie\_Attack\_Bite * SFX\_Zombie\_Attack\_Swing * SFX\_Zombie\_Death * SFX\_Zombie\_Despawn * SFX\_Zombie\_Hurt * SFX\_Zombie\_Pursuit * SFX\_Zombie\_ScratchBack * SFX\_Zombie\_Spawn --- Entities Source: https://hytalemodding.dev/en/docs/server/entities This page contains a list of all Entities available to be used as a key in the AssetMap. * Antelope * Archaeopteryx * Armadillo * Arrow\_Crossbow\_Signature * Arrow\_Crude * Arrow\_Fire * Arrow\_Frost * Arrow\_Iron * Arrow\_Ricochet * Arrow\_Ricochet\_Signature * Arrow\_Shortbow\_Signature * Arrow\_Vamp * Arrow\_Vamp\_Signature * Axe\_Bone * Axe\_Stone\_Trork * Bat * Bat\_Ice * Bear\_Grizzly * Bear\_Polar * Bison * Bison\_Calf * Bluebird * Bluegill * Boar * Boar\_Piglet * Boat * Bomb * Bomb\_Fire\_Goblin * Bomb\_Fire\_Goblin\_Dud * Bomb\_Large\_Fire\_Goblin * Bomb\_Popberry * Bomb\_Potion\_Poison * Boy\_Trail * Bramblekin * Bramblekin\_Shaman * Bullet\_Blunderbuss * Bunny * Cactee * Cactee\_Spike * Calf * Camel * Camel\_Calf * Cat * Catfish * Chick * Chick\_Desert * Chicken * Chicken\_Desert * Chicken\_Undead * Clownfish * Corgi * Cow * Cow\_Undead * Crab * Crawler\_Void * Crocodile * Crossbow\_Turret * Crossbow\_Turret\_Item\_Projectile * Crow * Dagger\_Adamantite * Dagger\_Bone * Dagger\_Bronze * Dagger\_Bronze\_Ancient * Dagger\_Cobalt * Dagger\_Copper * Dagger\_Crude * Dagger\_Doomed * Dagger\_Fang\_Doomed * Dagger\_Iron * Dagger\_Mithril * Dagger\_Onyxium * Dagger\_Stone\_Trork * Dagger\_Thorium * Debug * Deer\_Doe * Deployable\_Fire\_Trap * Deployable\_Fire\_Trap\_Preview * Dog * Dragon\_Fire * Dragon\_Frost * Dragon\_Void * Duck * Eel\_Moray * Egg * Emberwulf * Eye\_Void * Eye\_Void\_Blast * Fen\_Stalker * Feran * Feran\_Burrower * Feran\_Civilian * Feran\_Cub * Feran\_Longtooth * Feran\_Sharptooth * Feran\_Windwalker * Feran\_Windwalker\_Wind\_Burst * Feran\_Windwalker\_Wind\_Vortex * Finch\_Green * Fireball * Flamingo * Fox * Frog\_Blue * Frog\_Green * Frog\_Orange * Frostgill * Gecko * Ghoul * Goat * Goat\_Kid * Goblin * Goblin\_Boss * Goblin\_Duke * Goblin\_Duke\_Large * Goblin\_Hermit * Goblin\_Lobber * Goblin\_Miner * Goblin\_Ogre * Goblin\_Scrapper * Goblin\_Thief * Golem\_Crystal\_Earth * Golem\_Crystal\_Flame * Golem\_Crystal\_Frost * Golem\_Crystal\_Sand * Golem\_Crystal\_Thunder * Golem\_Firesteel * Golem\_Guardian\_Void * Grooble * Hatworm * Hawk * Healing\_Totem * Healing\_Totem\_Projectile * Hedera * Horse * Horse\_Foal * Horse\_Skeleton * Horse\_Skeleton\_Armored * Hound\_Bleached * Hyena * Ice\_Ball * Ice\_Bolt * Ingredient\_Poop * Jellyfish\_Blue * Jellyfish\_Cyan * Jellyfish\_Green * Jellyfish\_Man\_Of\_War * Jellyfish\_Red * Jellyfish\_Yellow * Klops * Klops\_Gentleman * Klops\_Merchant * Klops\_Miner * Kunai * Kweebec\_Rootling * Kweebec\_Sapling * Kweebec\_Sapling\_Brown * Kweebec\_Sapling\_Christmas\_Blue * Kweebec\_Sapling\_Christmas\_Green * Kweebec\_Sapling\_Christmas\_Pink * Kweebec\_Sapling\_Green * Kweebec\_Sapling\_HardHat * Kweebec\_Sapling\_Orange * Kweebec\_Sapling\_Pink * Kweebec\_Sapling\_Razorleaf * Kweebec\_Sapling\_Red * Kweebec\_Sapling\_Treesinger * Kweebec\_Sapling\_Yellow * Kweebec\_Seedling * Kweebec\_Sproutling * Kweebec\_Sproutling\_Blue * Kweebec\_Sproutling\_Lime * Lamb * Larva\_Silk * Larva\_Void * Leopard\_Snow * Lizard\_Sand * Lobster * Mannequin * Meerkat * Minecart * Minnow * Model\_Bee\_Swarm * Model\_Deer\_Stag * Molerat * Moose\_Bull * Moose\_Cow * Mosshorn * Mosshorn\_Plain * Mouflon * Mouflon\_Lamb * Mouse * Mushee * NPC\_Elf * NPC\_Path\_Marker * NPC\_Santa * NPC\_Sound\_Shoe * NPC\_Spawn\_Marker * Necromancer\_Void * Objective\_Location\_Marker * Outlander * Outlander\_Berserker * Outlander\_Brute * Outlander\_Cultist * Outlander\_Hunter * Outlander\_Marauder * Outlander\_Peon * Outlander\_Priest * Outlander\_Sorcerer * Outlander\_Stalker * Owl\_Brown * Owl\_Snow * Parrot * Penguin * Pig * Pig\_Undead * Pig\_Wild * Pigeon * Piglet * Piglet\_Wild * Pike * Piranha * Piranha\_Black * Player * PlayerTestModel\_G * PlayerTestModel\_V * Projectile * Pterodactyl * Pufferfish * Rabbit * Ram * Ram\_Lamb * Raptor\_Cave * Rat * Raven * Reindeer\_Christmas * Rex\_Cave * Rubble\_Aqua * Rubble\_Basalt * Rubble\_Calcite * Rubble\_Default * Rubble\_Ice * Rubble\_Marble * Rubble\_Quartzite * Rubble\_Sandstone * Rubble\_Sandstone\_Red * Rubble\_Sandstone\_White * Rubble\_Shale * Rubble\_Slate * Rubble\_Stone * Rubble\_Stone\_Mossy * Rubble\_Volcanic * Salmon * Saurian * Saurian\_Hunter * Saurian\_Rogue * Saurian\_Warrior * Scarak\_Broodmother * Scarak\_Broodmother\_Young * Scarak\_Defender * Scarak\_Fighter * Scarak\_Fighter\_Royal\_Guard * Scarak\_Louse * Scarak\_Seeker * Scarak\_Seeker\_Spitball * Scorpion * Shadow\_Knight * Shark\_Hammerhead * Sheep * Shellfish\_Lava * Showcase\_Cobalt\_Gear * Showcase\_Copper\_Gear * Showcase\_Iron\_Gear * Showcase\_Iron\_TargetDummy\_1 * Showcase\_Mannequin\_Heal * Showcase\_Mannequin\_Inv\_Portal * Showcase\_Mannequin\_Inv\_Sphere * Showcase\_Mannequin\_Lightning * Showcase\_Mannequin\_Sitting * Showcase\_Onyxium\_Gear * Showcase\_Prisma\_Gear * Showcase\_Skeleton\_Assasin * Showcase\_Skeleton\_Dead * Showcase\_Skeleton\_Guard * Showcase\_Skeleton\_Tank * Showcase\_Wooden\_Gear * Skeleton * Skeleton\_Archer * Skeleton\_Archmage * Skeleton\_Burnt\_Alchemist * Skeleton\_Burnt\_Archer * Skeleton\_Burnt\_Gunner * Skeleton\_Burnt\_Knight * Skeleton\_Burnt\_Lancer * Skeleton\_Burnt\_Praetorian * Skeleton\_Burnt\_Soldier * Skeleton\_Burnt\_Wizard * Skeleton\_Fighter * Skeleton\_Frost\_Archer * Skeleton\_Frost\_Archmage * Skeleton\_Frost\_Fighter * Skeleton\_Frost\_Knight * Skeleton\_Frost\_Mage * Skeleton\_Frost\_Ranger * Skeleton\_Frost\_Scout * Skeleton\_Frost\_Soldier * Skeleton\_Incandescent\_Fighter * Skeleton\_Incandescent\_Footman * Skeleton\_Incandescent\_Head * Skeleton\_Incandescent\_Mage * Skeleton\_Knight * Skeleton\_Mage * Skeleton\_Mage\_Corruption\_Orb * Skeleton\_Pirate\_Captain * Skeleton\_Pirate\_Gunner * Skeleton\_Pirate\_Striker * Skeleton\_Ranger * Skeleton\_Sand\_Archer * Skeleton\_Sand\_Archmage * Skeleton\_Sand\_Assassin * Skeleton\_Sand\_Guard * Skeleton\_Sand\_Mage * Skeleton\_Sand\_Ranger * Skeleton\_Sand\_Scout * Skeleton\_Sand\_Soldier * Skeleton\_Scout * Skeleton\_Soldier * Skrill * Skrill\_Chick * Slothian * Slothian\_Elder * Slothian\_Kid * Slothian\_Monk * Slothian\_Scout * Slothian\_Villager * Slothian\_Warrior * Slowness\_Totem * Slowness\_Totem\_Projectile * Slug\_Magma * Snail\_Frost * Snail\_Magma * Snake\_Cobra * Snake\_Marsh * Snake\_Rattle * Snapdragon * Snapjaw * Spark\_Living * Sparrow * Spawn\_Void * Spear\_Adamantite * Spear\_Adamantite\_Saurian * Spear\_Bone * Spear\_Bronze * Spear\_Cobalt * Spear\_Copper * Spear\_Crude * Spear\_Double\_Incandescent * Spear\_Iron * Spear\_Leaf * Spear\_Mithril * Spear\_Onyxium * Spear\_Scrap * Spear\_Stone\_Trork * Spear\_Thorium * Spear\_Tribal * Spectre\_Void * Spider * Spider\_Cave * Spirit\_Ember * Spirit\_Frost * Spirit\_Root * Spirit\_Thunder * Squirrel * Swarm\_Bees * Sword\_Charged\_Test * Tang\_Blue * Tang\_Chevron * Tang\_Lemon\_Peel * Tang\_Sailfin * Tank * Temple\_Mithril\_Guard * Test\_Platform * Tetrabird * Tiger\_Sabertooth * Toad\_Rhino * Toad\_Rhino\_Magma * Tornado * Tortoise * Trash * Trillodon * Trilobite * Trilobite\_Black * Trork * Trork\_Brawler * Trork\_Chieftain * Trork\_Christmas * Trork\_Doctor\_Witch * Trork\_Guard * Trork\_Hunter * Trork\_Mauler * Trork\_Sentry * Trork\_Shaman * Trork\_Warrior * Trout\_Rainbow * Tuluk * Tuluk\_Fisherman * Turkey * Turkey\_Chick * Vulture * Warp * Warrior\_Quest * Warthog * Warthog\_Piglet * Werewolf * Whale\_Humpback * Wolf\_Black * Wolf\_Outlander\_Priest * Wolf\_Outlander\_Sorcerer * Wolf\_Trork\_Hunter * Wolf\_Trork\_Shaman * Wolf\_White * Woodpecker * Wraith * Wraith\_Lantern * Wurmling\_Frost * Yeti * Zombie * Zombie\_Aberrant * Zombie\_Aberrant\_Big * Zombie\_Aberrant\_Small * Zombie\_Burnt * Zombie\_Frost * Zombie\_Sand * Zombie\_Werewolf --- NPC Meta Source: https://hytalemodding.dev/en/docs/official-documentation/npc-doc # List of Builders | | Name | Type | Description | | --- | ------------------------------------------------------------------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | [Abstract](#role_abstract) | Role | Generic role for NPC | | 2 | [ActionList](#actionlist_actionlist) | ActionList | An array of actions to be executed | | 3 | [AddToHostileTargetMemory](#action_addtohostiletargetmemory) | Action | Adds the passed target from the sensor to the hostile target memory | | 4 | [AdjustPosition](#sensor_adjustposition) | Sensor | Perform adjustments to the wrapped sensor's returned position | | 5 | [Age](#sensor_age) | Sensor | Triggers when the age of the NPC falls between a certain range | | 6 | [Aim](#headmotion_aim) | HeadMotion | Aim at target | | 7 | [AimCharge](#bodymotion_aimcharge) | BodyMotion | Aim the NPC at a target position for performing a charge based on aiming information and ensure that the charge is possible before it's executed. | | 8 | [Alarm](#sensor_alarm) | Sensor | Check the state of a named alarm | | 9 | [Altitude](#ientityfilter_altitude) | IEntityFilter | Matches targets if they're within the defined range above the ground | | 10 | [And](#sensor_and) | Sensor | Logical AND of list of sensors | | 11 | [And](#ientityfilter_and) | IEntityFilter | Logical AND of a list of filters | | 12 | [Animation](#sensor_animation) | Sensor | Check if a given animation is being played | | 13 | [Any](#sensor_any) | Sensor | Return always true | | 14 | [Appearance](#action_appearance) | Action | Set model displayed for NPC | | 15 | [ApplyEntityEffect](#action_applyentityeffect) | Action | Applies an entity effect to the target or self | | 16 | [Attack](#action_attack) | Action | Starts attack | | 17 | [Attitude](#isensorentityprioritiser_attitude) | ISensorEntityPrioritiser | Prioritises return entities by attitude | | 18 | [Attitude](#ientityfilter_attitude) | IEntityFilter | Matches the attitude towards the locked target | | 19 | [Beacon](#action_beacon) | Action | Send Beacon Message | | 20 | [Beacon](#sensor_beacon) | Sensor | Checks to see if any messages have been broadcasted by nearby NPCs | | 21 | [Block](#sensor_block) | Sensor | Checks for one of a set of blocks in the nearby area | | 22 | [BlockChange](#sensor_blockchange) | Sensor | Matches when a block from a blockset within a certain range is changed or interacted with | | 23 | [BlockType](#sensor_blocktype) | Sensor | Checks if the block at the given position matches the provided block set | | 24 | [CanInteract](#sensor_caninteract) | Sensor | Checks whether or not the player being iterated by the interaction instruction can interact with this NPC | | 25 | [CanPlaceBlock](#sensor_canplaceblock) | Sensor | Test if the currently set block can be placed at the relative position given direction and offset | | 26 | [Combat](#ientityfilter_combat) | IEntityFilter | Check the target's combat state | | 27 | [CombatAbility](#action_combatability) | Action | Starts the combat ability selected by the combat action evaluator. | | 28 | [CombatActionEvaluator](#sensor_combatactionevaluator) | Sensor | A sensor which handles funnelling information to actions and motions from the combat action evaluator. | | 29 | [CombatTargets](#isensorentitycollector_combattargets) | ISensorEntityCollector | A collector which processes matched friendly and hostile targets and adds them to the NPC's short-term combat memory. | | 30 | [CompleteTask](#action_completetask) | Action | Complete a task | | 31 | [Count](#sensor_count) | Sensor | Check if there is a certain number of NPCs or players within a specific range | | 32 | [Crouch](#action_crouch) | Action | Set NPC crouching state | | 33 | [Damage](#sensor_damage) | Sensor | Test if NPC suffered damage | | 34 | [DelayDespawn](#action_delaydespawn) | Action | Delay the despawning cycle for some amount of time | | 35 | [Despawn](#action_despawn) | Action | Trigger the NPC to despawn | | 36 | [Die](#action_die) | Action | Kill the NPC | | 37 | [DisplayName](#action_displayname) | Action | Set display name. | | 38 | [Dive](#motioncontroller_dive) | MotionController | Provide diving abilities for NPC | | 39 | [DropItem](#action_dropitem) | Action | Drop an item | | 40 | [DroppedItem](#sensor_droppeditem) | Sensor | Triggers if a given item is within a certain range of the NPC. | | 41 | [EntityEvent](#sensor_entityevent) | Sensor | Matches when an entity from a specific NPC group within a certain range is damaged, killed, or interacted with | | 42 | [Eval](#sensor_eval) | Sensor | Evaluate javascript expression and test if true | | 43 | [Flag](#sensor_flag) | Sensor | Test if a named flag is set or not | | 44 | [Flee](#bodymotion_flee) | BodyMotion | Move away from target | | 45 | [Flock](#bodymotion_flock) | BodyMotion | Flocking - WIP | | 46 | [Flock](#ientityfilter_flock) | IEntityFilter | Test for flock membership and related properties | | 47 | [FlockBeacon](#action_flockbeacon) | Action | Send beacon message to flock | | 48 | [FlockCombatDamage](#sensor_flockcombatdamage) | Sensor | Test if flock with NPC received combat damage | | 49 | [FlockLeader](#sensor_flockleader) | Sensor | Test for the presence and provide position of the flock leader | | 50 | [FlockState](#action_flockstate) | Action | Set state name for flock. | | 51 | [FlockTarget](#action_flocktarget) | Action | Set or clear locked target for flock. | | 52 | [Fly](#motioncontroller_fly) | MotionController | Flight motion controller | | 53 | [Generic](#role_generic) | Role | Generic role for NPC | | 54 | [HasHostileTargetMemory](#sensor_hashostiletargetmemory) | Sensor | Checks if there is currently a hostile target in the target memory. | | 55 | [HasInteracted](#sensor_hasinteracted) | Sensor | Checks whether the currently iterated player in the interaction instruction has interacted with this NPC | | 56 | [HasTask](#sensor_hastask) | Sensor | Checks whether or not the player being iterated by the interaction instruction has any of the given tasks | | 57 | [HashMap](#hashmap_hashmap) | HashMap | List of motion controllers | | 58 | [HeightDifference](#ientityfilter_heightdifference) | IEntityFilter | Matches entities within the given height range | | 59 | [IgnoreForAvoidance](#action_ignoreforavoidance) | Action | Set the target slot of an entity that should be ignored during avoidance | | 60 | [InAir](#sensor_inair) | Sensor | Test if NPC is not on ground | | 61 | [InWater](#sensor_inwater) | Sensor | Check if NPC is currently in water | | 62 | [InflictedDamage](#sensor_inflicteddamage) | Sensor | Test if an individual or the flock it belongs to inflicted combat damage | | 63 | [InsideBlock](#ientityfilter_insideblock) | IEntityFilter | Matches if the entity is inside any of the blocks in the BlockSet | | 64 | [Instruction](#instruction_instruction) | Instruction | An instruction with Sensor, and Motions and Actions, or a list of nested instructions. | | 65 | [InteractionContext](#sensor_interactioncontext) | Sensor | Checks whether the currently iterated player in the interaction instruction has interacted with this NPC in the given context | | 66 | [Inventory](#action_inventory) | Action | Add or remove items from inventory. | | 67 | [Inventory](#ientityfilter_inventory) | IEntityFilter | Test various conditions relating to entity inventory | | 68 | [IsBackingAway](#sensor_isbackingaway) | Sensor | Test if the NPC is currently backing away from something. | | 69 | [IsBusy](#sensor_isbusy) | Sensor | Tests if an NPC is in one of the defined Busy States. | | 70 | [ItemInHand](#ientityfilter_iteminhand) | IEntityFilter | Check if entity is holding an item | | 71 | [JoinFlock](#action_joinflock) | Action | Join/build a flock with other entity | | 72 | [Kill](#sensor_kill) | Sensor | Test if NPC made a kill | | 73 | [Land](#bodymotion_land) | BodyMotion | Try to land at the given position | | 74 | [Leash](#sensor_leash) | Sensor | Triggers when the NPC is outside a specified range from the leash point | | 75 | [Leave](#bodymotion_leave) | BodyMotion | Leave place | | 76 | [LeaveFlock](#action_leaveflock) | Action | Leave flock. | | 77 | [Light](#sensor_light) | Sensor | Check the light levels of the block an entity is standing on | | 78 | [LineOfSight](#ientityfilter_lineofsight) | IEntityFilter | Matches if there is line of sight to the target | | 79 | [LockOnInteractionTarget](#action_lockoninteractiontarget) | Action | Locks on to the currently iterated player in the interaction instruction | | 80 | [Log](#action_log) | Action | Log a message to console. | | 81 | [MaintainDistance](#bodymotion_maintaindistance) | BodyMotion | Maintain distance from a given position | | 82 | [MakePath](#action_makepath) | Action | Constructs a transient path for the NPC based on a series of rotations and distances | | 83 | [MatchLook](#bodymotion_matchlook) | BodyMotion | Make NPC body rotate to match look direction | | 84 | [Mob](#sensor_mob) | Sensor | Test if entity matching specific attributes and filters is in range | | 85 | [ModelAttachment](#action_modelattachment) | Action | Set an attachment on the current NPC model | | 86 | [MotionController](#sensor_motioncontroller) | Sensor | Test if specific motion controller is active. | | 87 | [Mount](#action_mount) | Action | Enable the player to mount the entity | | 88 | [MovementState](#ientityfilter_movementstate) | IEntityFilter | Check if the entity is in the given movement state | | 89 | [NPCGroup](#ientityfilter_npcgroup) | IEntityFilter | Returns whether the entity matches one of the provided NPCGroups | | 90 | [Nav](#sensor_nav) | Sensor | Queries navigation state | | 91 | [Not](#sensor_not) | Sensor | Invert sensor test | | 92 | [Not](#ientityfilter_not) | IEntityFilter | Invert filter test | | 93 | [Nothing](#action_nothing) | Action | Do nothing | | 94 | [Nothing](#bodymotion_nothing) | BodyMotion | Do nothing | | 95 | [Nothing](#headmotion_nothing) | HeadMotion | Do nothing | | 96 | [Notify](#action_notify) | Action | Directly notifies a target NPC with a beacon message | | 97 | [Observe](#headmotion_observe) | HeadMotion | Observe surroundings in various ways. | | 98 | [OnGround](#sensor_onground) | Sensor | Test if NPC is on ground | | 99 | [OpenBarterShop](#action_openbartershop) | Action | Open the barter shop UI for the current player | | 100 | [OpenShop](#action_openshop) | Action | Open the shop UI for the current player | | 101 | [Or](#sensor_or) | Sensor | Logical OR of list of sensors | | 102 | [Or](#ientityfilter_or) | IEntityFilter | Logical OR of a list of filters | | 103 | [OverrideAltitude](#action_overridealtitude) | Action | Temporarily override the preferred altitude of a flying NPC | | 104 | [OverrideAttitude](#action_overrideattitude) | Action | Override this NPCs attitude towards the provided target for a given duration | | 105 | [ParentState](#action_parentstate) | Action | Set the main state of NPC from within a component | | 106 | [Path](#path_path) | Path | List of transient path points | | 107 | [Path](#sensor_path) | Sensor | Find a path based on various criteria | | 108 | [Path](#bodymotion_path) | BodyMotion | Walk along a path | | 109 | [PickUpItem](#action_pickupitem) | Action | Pick up an item | | 110 | [PlaceBlock](#action_placeblock) | Action | Place a block (chosen by another action) at a position returned by a Sensor if close enough | | 111 | [PlayAnimation](#action_playanimation) | Action | Play an animation | | 112 | [PlaySound](#action_playsound) | Action | Plays a sound to players within a specified range. | | 113 | [Player](#sensor_player) | Sensor | Test if player matching specific attributes and filters is in range | | 114 | [Random](#action_random) | Action | Execute a single random action from a list of weighted actions. | | 115 | [Random](#sensor_random) | Sensor | Alternates between returning true and false for specified random durations | | 116 | [Random](#instruction_random) | Instruction | Randomised list of weighted instructions. | | 117 | [ReadPosition](#sensor_readposition) | Sensor | Read a stored position with some conditions | | 118 | [RecomputePath](#action_recomputepath) | Action | Force recomputation of path finder solution | | 119 | [Reference](#instruction_reference) | Instruction | Prioritized instruction list that can be referenced from elsewhere in the file | | 120 | [RelativeWaypointDefinition](#relativewaypointdefinition_relativewaypointdefinition) | RelativeWaypointDefinition | A simple path waypoint definition where each waypoint is relative to the previous | | 121 | [ReleaseTarget](#action_releasetarget) | Action | Clear locked target | | 122 | [Remove](#action_remove) | Action | Erase the target entity from the world (no death animation). | | 123 | [ResetBlockSensors](#action_resetblocksensors) | Action | Resets a specific block sensor by name, or all block sensors | | 124 | [ResetInstructions](#action_resetinstructions) | Action | Force reset instructionList | | 125 | [ResetPath](#action_resetpath) | Action | Resets the current patrol path this NPC follows. | | 126 | [ResetSearchRays](#action_resetsearchrays) | Action | Resets a specific search ray sensor cached position by name, or all search ray sensors | | 127 | [Role](#action_role) | Action | Change the Role of the NPC | | 128 | [SearchRay](#sensor_searchray) | Sensor | Fire a ray at a specific angle to see if what it hits matches a given sought block | | 129 | [Seek](#bodymotion_seek) | BodyMotion | Chase target | | 130 | [Self](#sensor_self) | Sensor | Test if the NPC itself matches a set of entity filters | | 131 | [Sequence](#action_sequence) | Action | List of actions. | | 132 | [Sequence](#bodymotion_sequence) | BodyMotion | (Looped)Sequence of motions | | 133 | [Sequence](#headmotion_sequence) | HeadMotion | (Looped)Sequence of motions | | 134 | [SetAlarm](#action_setalarm) | Action | Set a named alarm on the NPC | | 135 | [SetBlockToPlace](#action_setblocktoplace) | Action | Set the block type the NPC will place | | 136 | [SetFlag](#action_setflag) | Action | Set a named flag to a boolean value | | 137 | [SetInteractable](#action_setinteractable) | Action | Set whether the currently iterated player in the interaction instruction should be able to interact with this NPC | | 138 | [SetLeashPosition](#action_setleashposition) | Action | Sets the NPCs current position to the spawn/leash position | | 139 | [SetMarkedTarget](#action_setmarkedtarget) | Action | Explicitly sets a marked target in a given slot. | | 140 | [SetStat](#action_setstat) | Action | Sets (or adds to) an entity stat on the NPC. | | 141 | [Spawn](#action_spawn) | Action | Spawn an NPC | | 142 | [SpawnParticles](#action_spawnparticles) | Action | Spawn particle system visible within a given range with an offset relative to npc heading | | 143 | [SpotsMe](#ientityfilter_spotsme) | IEntityFilter | Checks if the entity can view the NPC in a given view sector or cone and without obstruction. | | 144 | [StandingOnBlock](#ientityfilter_standingonblock) | IEntityFilter | Matches the block directly beneath the entity against a BlockSet | | 145 | [StartObjective](#action_startobjective) | Action | Start the given objective for the currently iterated player in the interaction instruction | | 146 | [Stat](#ientityfilter_stat) | IEntityFilter | Match stat values of the entity | | 147 | [State](#action_state) | Action | Set state of NPC | | 148 | [State](#sensor_state) | Sensor | Test for a specific state | | 149 | [StateTransition](#statetransition_statetransition) | StateTransition | An entry containing a list of actions to execute when moving from one state to another | | 150 | [StateTransitionController](#statetransitioncontroller_statetransitioncontroller) | StateTransitionController | A list of state transitions | | 151 | [StateTransitionEdges](#statetransitionedges_statetransitionedges) | StateTransitionEdges | Sets of from and to states defining state transitions | | 152 | [StorePosition](#action_storeposition) | Action | Store the position from the attached sensor | | 153 | [Switch](#sensor_switch) | Sensor | Check if a computed boolean is true | | 154 | [TakeOff](#bodymotion_takeoff) | BodyMotion | Switch NPC from walking to flying motion controller | | 155 | [Target](#sensor_target) | Sensor | Test if given target matches a series of criteria and optional entity filters | | 156 | [Teleport](#bodymotion_teleport) | BodyMotion | Teleport NPC to a position given by a sensor | | 157 | [Test](#action_test) | Action | Test action to exercise attribute evaluation (DO NOT USE) | | 158 | [TestProbe](#bodymotion_testprobe) | BodyMotion | Debugging - Test probing | | 159 | [Time](#sensor_time) | Sensor | Check if the day/year time is within some specified time. | | 160 | [Timeout](#action_timeout) | Action | Delay an action, or insert a delay in a sequence of actions | | 161 | [Timer](#sensor_timer) | Sensor | Tests if a timer exists and the value is within a certain range | | 162 | [Timer](#bodymotion_timer) | BodyMotion | Execute a Motion for a specific maximum time | | 163 | [Timer](#headmotion_timer) | HeadMotion | Execute a Motion for a specific maximum time | | 164 | [TimerContinue](#action_timercontinue) | Action | Continue a timer | | 165 | [TimerModify](#action_timermodify) | Action | Modify values of a timer | | 166 | [TimerPause](#action_timerpause) | Action | Pause a timer | | 167 | [TimerRestart](#action_timerrestart) | Action | Restart a timer | | 168 | [TimerStart](#action_timerstart) | Action | Start a timer | | 169 | [TimerStop](#action_timerstop) | Action | Stop a timer | | 170 | [ToggleStateEvaluator](#action_togglestateevaluator) | Action | Enable or disable the NPC's state evaluator | | 171 | [TriggerSpawnBeacon](#action_triggerspawnbeacon) | Action | Trigger the nearest spawn beacon matching the configuration id | | 172 | [TriggerSpawners](#action_triggerspawners) | Action | Trigger all, or up to a certain number of manual spawn markers in a radius around the NPC | | 173 | [ValueProviderWrapper](#sensor_valueproviderwrapper) | Sensor | Wraps a sensor and passes down some additional parameter overrides pulled from the value store | | 174 | [ValueToParameterMapping](#valuetoparametermapping_valuetoparametermapping) | ValueToParameterMapping | An entry containing a list of actions to execute when moving from one state to another | | 175 | [Variant](#role_variant) | Role | Create a variant from an existing NPC JSON file | | 176 | [ViewSector](#ientityfilter_viewsector) | IEntityFilter | Matches entities within the given view sector | | 177 | [Walk](#motioncontroller_walk) | MotionController | Provide walk on ground abilities for NPC | | 178 | [Wander](#bodymotion_wander) | BodyMotion | Random movement | | 179 | [WanderInCircle](#bodymotion_wanderincircle) | BodyMotion | Random movement in circle around spawn position | | 180 | [WanderInRect](#bodymotion_wanderinrect) | BodyMotion | Random movement in rectangle around spawn position | | 181 | [Watch](#headmotion_watch) | HeadMotion | Rotate to target | | 182 | [Weather](#sensor_weather) | Sensor | Matches the current weather at the NPCs position against a set of weather globs | | 183 | [WeightedAction](#weightedaction_weightedaction) | WeightedAction | A wrapped and weighted action intended to be used for Random action lists. | # List of Roles ## Abstract: Role (Stable) Generic role for NPC with a core planner and list of Motion controllers. ### Attributes #### - MaxHealth (Stable) * Max health * **Type**: `Integer`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - Debug (WorkInProgress) * Debugging flags * **Type**: `String`, **Optional** (Default: ) #### - Appearance (Stable) * Model to use for rendering * **Type**: `Asset`, **Required**, **Computable** #### - DisplayNames (Stable) * List of possible display names to choose from * **Type**: `StringList`, **Optional** (Default: null) * **Constraint**: Strings in array must not be empty #### - NameTranslationKey (Stable) * The translation key for this NPC's name * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - OpaqueBlockSet (Stable) * Blocks blocking line of sight * **Type**: `Asset`, **Optional** (Default: Opaque) #### - Inertia (Experimental) * Inertia * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0.1 #### - KnockbackScale (Stable) * Scale factor for knockback. Values greater 1 increase knockback. Smaller values decrease it. * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - InventorySize (Stable) * Number of available inventory slots * **Type**: `Integer`, **Optional** (Default: 0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 36 #### - HotbarSize (Stable) * Number of available hotbar slots * **Type**: `Integer`, **Optional** (Default: 3) * **Constraint**: Value must be greater or equal than 3 and less or equal than 8 #### - OffHandSlots (Stable) * The number of slots for off-hand items * **Type**: `Integer`, **Optional** (Default: 0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 4 #### - HotbarItems (Stable) * Hotbar items (e.g. primary weapon, secondary weapon, etc) * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: Item #### - OffHandItems (Stable) * Off-hand items (e.g. shields, torches, etc) * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: Item #### - PossibleInventoryItems (Stable) * A droplist defining the possible items the NPCs inventory could contain * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - DefaultOffHandSlot (Stable) * The default off-hand item slot (-1 is empty) * **Type**: `Integer`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 4 #### - Armor (WorkInProgress) * Armor items * **Type**: `AssetArray`, **Optional** (Default: null), **Element Type**: Item #### - DropList (Stable) * Drop list to spawn when killed * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - StartState (Stable) * Initial state * **Type**: `String`, **Optional** (Default: start) * **Constraint**: String must be not empty #### - DefaultSubState (Stable) * The default sub state to reference when transitioning to a main state without a specified sub state * **Type**: `String`, **Optional** (Default: Default) * **Constraint**: String must be not empty #### - CollisionDistance (Stable) * Collision lookahead * **Type**: `Double`, **Optional** (Default: 5.0) * **Constraint**: Value must be greater than 0 #### - CollisionForceFalloff (Experimental) * Falloff rate for collision force * **Type**: `Double`, **Optional** (Default: 2.0) * **Constraint**: Value must be greater than 0 #### - CollisionRadius (Experimental) * Collision radius override * **Type**: `Double`, **Optional** (Default: -1.0) #### - CollisionViewAngle (Experimental) * Collision detection view cone * **Type**: `Double`, **Optional** (Default: 320.0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - SeparationDistance (Experimental) * Desired separation distance * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - SeparationWeight (Experimental) * Blend factor separation * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - SeparationDistanceTarget (Experimental) * Desired separation distance when close to target * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - SeparationNearRadiusTarget (Experimental) * Distance when using SeparationDistanceTarget * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - SeparationFarRadiusTarget (Experimental) * Use normal separation distance from further than this distance * **Type**: `Double`, **Optional** (Default: 5.0), **Computable** * **Constraint**: Value must be greater than 0 #### - ApplyAvoidance (Experimental) * Apply avoidance steering force * **Type**: `Boolean`, **Optional** (Default: false) #### - ApplySeparation (Experimental) * Apply separation steering force * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - AvoidanceMode (Experimental) * Abilities to use for avoidance * **Type**: `Flag`, **Optional** (Default: Any) * **Flag Values**: * `Evade`: Only evade * `Slowdown`: Only slow down NPC * `Any`: Any avoidance allowed #### - EntityAvoidanceStrength (Experimental) * Blending factor avoidance * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 #### - StayInEnvironment (Experimental) * Stay in spawning environment * **Type**: `Boolean`, **Optional** (Default: false) #### - AllowedEnvironments (Experimental) * Allowed environment to walk in * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty #### - FlockSpawnTypes (WorkInProgress) * Types of NPC this flock should consist off * **Type**: `Array`, **Optional** (Default: null), **Computable**, **Element Type**: String * **Constraint**: Strings in array must not be empty #### - FlockSpawnTypesRandom (WorkInProgress) * Create a randomized flock if true else spawn in order of FlockSpawnTypes * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - FlockAllowedNPC (Experimental) * List of NPCs allowed in flock * **Type**: `Array`, **Optional** (Default: null), **Computable**, **Element Type**: String * **Constraint**: Strings in array must not be empty #### - FlockCanLead (Experimental) * This NPC can be flock leader * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - FlockWeightAlignment (Experimental) * Blending flock alignment * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0 #### - FlockWeightSeparation (Experimental) * Blending flock separation * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0 #### - FlockWeightCohesion (Experimental) * Blending flock cohesion * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0 #### - FlockInfluenceRange (Experimental) * Influence radius flock forces * **Type**: `Double`, **Optional** (Default: 10.0) * **Constraint**: Value must be greater than 0 #### - DisableDamageFlock (WorkInProgress) * If true disables combat damage from flock members * **Type**: `Boolean`, **Optional** (Default: true) #### - DisableDamageGroups (WorkInProgress) * Members in this list of group won't cause damage * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: TagSet #### - BusyStates (Stable) * States during which this NPC is busy and can't be interacted with * **Type**: `StringList`, **Required** * **Constraint**: String must be a valid state string. A main state must be included before the period (e.g. Main.Test). State strings consist of a main state and a sub state (e.g. Main.Test). If nested within a substate, the main state may be omitted (e.g. .Test) when referencing. #### - CombatConfig (Stable) * The combat configuration providing optional combat action evaluator * **Type**: `CodecObject`, **Optional** (Default: null) #### - Invulnerable (Stable) * Makes NPC ignore damage * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - BreathesInAir (WorkInProgress) * Can breath in air * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - BreathesInWater (WorkInProgress) * Can breath in fluid/water * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - PickupDropOnDeath (Stable) * Drop last picked item on death * **Type**: `Boolean`, **Optional** (Default: false) #### - DeathAnimationTime (Experimental) * How long to let the death animation play before removing * **Type**: `Double`, **Optional** (Default: 5.0) * **Constraint**: Value must be greater or equal than 0 #### - DeathInteraction (Experimental) * Interaction to run on death * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - DespawnAnimationTime (Experimental) * How long to let the despawn animation play before removing * **Type**: `Double`, **Optional** (Default: 0.800000011920929) * **Constraint**: Value must be greater or equal than 0 #### - SpawnParticles (Experimental) * Particle system when spawning * **Type**: `String`, **Optional** (Default: null) #### - SpawnParticlesOffset (Experimental) * Displacement from foot point to spawn relative to NPC heading * **Type**: `Array`, **Optional** (Default: null), **Element Type**: Double #### - SpawnViewDistance (Experimental) * View distance for spawn particle * **Type**: `Double`, **Optional** (Default: 75.0) * **Constraint**: Value must be greater than 0 #### - DefaultPlayerAttitude (Stable) * The default attitude of this NPC towards players * **Type**: `Flag`, **Optional** (Default: HOSTILE), **Computable** * **Flag Values**: * `HOSTILE`: is hostile towards the target * `REVERED`: reveres the target * `FRIENDLY`: is friendly towards the target * `IGNORE`: is ignoring the target * `NEUTRAL`: is neutral towards the target #### - DefaultNPCAttitude (Stable) * The default attitude of this NPC towards other NPCs * **Type**: `Flag`, **Optional** (Default: NEUTRAL), **Computable** * **Flag Values**: * `HOSTILE`: is hostile towards the target * `REVERED`: reveres the target * `FRIENDLY`: is friendly towards the target * `IGNORE`: is ignoring the target * `NEUTRAL`: is neutral towards the target #### - AttitudeGroup (Stable) * The attitude group towards other NPCs this NPC belongs to (often species related) * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - ItemAttitudeGroup (Stable) * This NPC's item attitudes * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - CorpseStaysInFlock (Stable) * Whether the NPC should stay in the flock until corpse removal or be removed at the moment of death * **Type**: `Boolean`, **Optional** (Default: false) #### - OverrideHeadPitchAngle (Experimental) * Whether to override the head pitch angle range * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - HeadPitchAngleRange (Experimental) * Head rotation pitch range to be used instead of model camera settings * **Type**: `Array`, **Optional** (Default: \[-89.0, 89.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than -90, less or equal than 90and in weakly ascending order #### - MotionControllerList (Stable) * Motion controllers * **Type**: `ObjectRef`, **Required**, **Object Type**: HashMap #### - Instructions (WorkInProgress) * List of instructions * **Type**: `Array`, **Optional** (Default: null), **Element Type**: Instruction #### - InteractionInstruction (Stable) * An instruction designed to evaluate and set which players can interact with an NPC, along with setting correct states upon interaction * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: Instruction #### - DeathInstruction (Stable) * An instruction which will run only when the NPC is dead until they are removed * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: Instruction #### - StateTransitions (Stable) * A set of state transitions and the actions that will be executed during them * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: StateTransitionController #### - StateEvaluator (Stable) * A state evaluator * **Type**: `CodecObject`, **Optional** (Default: null) #### - InitialMotionController (Stable) * The initial motion controller to set. If omitted and there are multiple, one will be chosen at random. * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - InteractionVars (Stable) * Interaction vars to be used in interactions. * **Type**: `CodecObject`, **Optional** (Default: null) #### - IsMemory (Stable) * Used to define if the NPC has a Memory to record. * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - MemoriesCategory (Stable) * Category to put the NPC in, as part of the Memories Plugin * **Type**: `String`, **Optional** (Default: Other), **Computable** * **Constraint**: String value must be either null or not empty #### - MemoriesNameOverride (Stable) * Overrides the Memory name when set. * **Type**: `String`, **Optional** (Default: ), **Computable** #### - SpawnLockTime (Stable) * How long the NPC should be locked and unable to perform behavior when first spawned * **Type**: `Double`, **Optional** (Default: 1.5), **Computable** * **Constraint**: Value must be greater or equal than 0 ### Constraints * At least one of BreathesInAir, BreathesInWater must be true [(Top)](#top) ## Generic: Role (Stable) Generic role for NPC with a core planner and list of Motion controllers. ### Attributes #### - MaxHealth (Stable) * Max health * **Type**: `Integer`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - Debug (WorkInProgress) * Debugging flags * **Type**: `String`, **Optional** (Default: ) #### - Appearance (Stable) * Model to use for rendering * **Type**: `Asset`, **Required**, **Computable** #### - DisplayNames (Stable) * List of possible display names to choose from * **Type**: `StringList`, **Optional** (Default: null) * **Constraint**: Strings in array must not be empty #### - NameTranslationKey (Stable) * The translation key for this NPC's name * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - OpaqueBlockSet (Stable) * Blocks blocking line of sight * **Type**: `Asset`, **Optional** (Default: Opaque) #### - Inertia (Experimental) * Inertia * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0.1 #### - KnockbackScale (Stable) * Scale factor for knockback. Values greater 1 increase knockback. Smaller values decrease it. * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - InventorySize (Stable) * Number of available inventory slots * **Type**: `Integer`, **Optional** (Default: 0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 36 #### - HotbarSize (Stable) * Number of available hotbar slots * **Type**: `Integer`, **Optional** (Default: 3) * **Constraint**: Value must be greater or equal than 3 and less or equal than 8 #### - OffHandSlots (Stable) * The number of slots for off-hand items * **Type**: `Integer`, **Optional** (Default: 0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 4 #### - HotbarItems (Stable) * Hotbar items (e.g. primary weapon, secondary weapon, etc) * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: Item #### - OffHandItems (Stable) * Off-hand items (e.g. shields, torches, etc) * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: Item #### - PossibleInventoryItems (Stable) * A droplist defining the possible items the NPCs inventory could contain * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - DefaultOffHandSlot (Stable) * The default off-hand item slot (-1 is empty) * **Type**: `Integer`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 4 #### - Armor (WorkInProgress) * Armor items * **Type**: `AssetArray`, **Optional** (Default: null), **Element Type**: Item #### - DropList (Stable) * Drop list to spawn when killed * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - StartState (Stable) * Initial state * **Type**: `String`, **Optional** (Default: start) * **Constraint**: String must be not empty #### - DefaultSubState (Stable) * The default sub state to reference when transitioning to a main state without a specified sub state * **Type**: `String`, **Optional** (Default: Default) * **Constraint**: String must be not empty #### - CollisionDistance (Stable) * Collision lookahead * **Type**: `Double`, **Optional** (Default: 5.0) * **Constraint**: Value must be greater than 0 #### - CollisionForceFalloff (Experimental) * Falloff rate for collision force * **Type**: `Double`, **Optional** (Default: 2.0) * **Constraint**: Value must be greater than 0 #### - CollisionRadius (Experimental) * Collision radius override * **Type**: `Double`, **Optional** (Default: -1.0) #### - CollisionViewAngle (Experimental) * Collision detection view cone * **Type**: `Double`, **Optional** (Default: 320.0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - SeparationDistance (Experimental) * Desired separation distance * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - SeparationWeight (Experimental) * Blend factor separation * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - SeparationDistanceTarget (Experimental) * Desired separation distance when close to target * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - SeparationNearRadiusTarget (Experimental) * Distance when using SeparationDistanceTarget * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - SeparationFarRadiusTarget (Experimental) * Use normal separation distance from further than this distance * **Type**: `Double`, **Optional** (Default: 5.0), **Computable** * **Constraint**: Value must be greater than 0 #### - ApplyAvoidance (Experimental) * Apply avoidance steering force * **Type**: `Boolean`, **Optional** (Default: false) #### - ApplySeparation (Experimental) * Apply separation steering force * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - AvoidanceMode (Experimental) * Abilities to use for avoidance * **Type**: `Flag`, **Optional** (Default: Any) * **Flag Values**: * `Evade`: Only evade * `Slowdown`: Only slow down NPC * `Any`: Any avoidance allowed #### - EntityAvoidanceStrength (Experimental) * Blending factor avoidance * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 #### - StayInEnvironment (Experimental) * Stay in spawning environment * **Type**: `Boolean`, **Optional** (Default: false) #### - AllowedEnvironments (Experimental) * Allowed environment to walk in * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty #### - FlockSpawnTypes (WorkInProgress) * Types of NPC this flock should consist off * **Type**: `Array`, **Optional** (Default: null), **Computable**, **Element Type**: String * **Constraint**: Strings in array must not be empty #### - FlockSpawnTypesRandom (WorkInProgress) * Create a randomized flock if true else spawn in order of FlockSpawnTypes * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - FlockAllowedNPC (Experimental) * List of NPCs allowed in flock * **Type**: `Array`, **Optional** (Default: null), **Computable**, **Element Type**: String * **Constraint**: Strings in array must not be empty #### - FlockCanLead (Experimental) * This NPC can be flock leader * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - FlockWeightAlignment (Experimental) * Blending flock alignment * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0 #### - FlockWeightSeparation (Experimental) * Blending flock separation * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0 #### - FlockWeightCohesion (Experimental) * Blending flock cohesion * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0 #### - FlockInfluenceRange (Experimental) * Influence radius flock forces * **Type**: `Double`, **Optional** (Default: 10.0) * **Constraint**: Value must be greater than 0 #### - DisableDamageFlock (WorkInProgress) * If true disables combat damage from flock members * **Type**: `Boolean`, **Optional** (Default: true) #### - DisableDamageGroups (WorkInProgress) * Members in this list of group won't cause damage * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: TagSet #### - BusyStates (Stable) * States during which this NPC is busy and can't be interacted with * **Type**: `StringList`, **Required** * **Constraint**: String must be a valid state string. A main state must be included before the period (e.g. Main.Test). State strings consist of a main state and a sub state (e.g. Main.Test). If nested within a substate, the main state may be omitted (e.g. .Test) when referencing. #### - CombatConfig (Stable) * The combat configuration providing optional combat action evaluator * **Type**: `CodecObject`, **Optional** (Default: null) #### - Invulnerable (Stable) * Makes NPC ignore damage * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - BreathesInAir (WorkInProgress) * Can breath in air * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - BreathesInWater (WorkInProgress) * Can breath in fluid/water * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - PickupDropOnDeath (Stable) * Drop last picked item on death * **Type**: `Boolean`, **Optional** (Default: false) #### - DeathAnimationTime (Experimental) * How long to let the death animation play before removing * **Type**: `Double`, **Optional** (Default: 5.0) * **Constraint**: Value must be greater or equal than 0 #### - DeathInteraction (Experimental) * Interaction to run on death * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - DespawnAnimationTime (Experimental) * How long to let the despawn animation play before removing * **Type**: `Double`, **Optional** (Default: 0.800000011920929) * **Constraint**: Value must be greater or equal than 0 #### - SpawnParticles (Experimental) * Particle system when spawning * **Type**: `String`, **Optional** (Default: null) #### - SpawnParticlesOffset (Experimental) * Displacement from foot point to spawn relative to NPC heading * **Type**: `Array`, **Optional** (Default: null), **Element Type**: Double #### - SpawnViewDistance (Experimental) * View distance for spawn particle * **Type**: `Double`, **Optional** (Default: 75.0) * **Constraint**: Value must be greater than 0 #### - DefaultPlayerAttitude (Stable) * The default attitude of this NPC towards players * **Type**: `Flag`, **Optional** (Default: HOSTILE), **Computable** * **Flag Values**: * `HOSTILE`: is hostile towards the target * `REVERED`: reveres the target * `FRIENDLY`: is friendly towards the target * `IGNORE`: is ignoring the target * `NEUTRAL`: is neutral towards the target #### - DefaultNPCAttitude (Stable) * The default attitude of this NPC towards other NPCs * **Type**: `Flag`, **Optional** (Default: NEUTRAL), **Computable** * **Flag Values**: * `HOSTILE`: is hostile towards the target * `REVERED`: reveres the target * `FRIENDLY`: is friendly towards the target * `IGNORE`: is ignoring the target * `NEUTRAL`: is neutral towards the target #### - AttitudeGroup (Stable) * The attitude group towards other NPCs this NPC belongs to (often species related) * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - ItemAttitudeGroup (Stable) * This NPC's item attitudes * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - CorpseStaysInFlock (Stable) * Whether the NPC should stay in the flock until corpse removal or be removed at the moment of death * **Type**: `Boolean`, **Optional** (Default: false) #### - OverrideHeadPitchAngle (Experimental) * Whether to override the head pitch angle range * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - HeadPitchAngleRange (Experimental) * Head rotation pitch range to be used instead of model camera settings * **Type**: `Array`, **Optional** (Default: \[-89.0, 89.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than -90, less or equal than 90and in weakly ascending order #### - MotionControllerList (Stable) * Motion controllers * **Type**: `ObjectRef`, **Required**, **Object Type**: HashMap #### - Instructions (WorkInProgress) * List of instructions * **Type**: `Array`, **Optional** (Default: null), **Element Type**: Instruction #### - InteractionInstruction (Stable) * An instruction designed to evaluate and set which players can interact with an NPC, along with setting correct states upon interaction * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: Instruction #### - DeathInstruction (Stable) * An instruction which will run only when the NPC is dead until they are removed * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: Instruction #### - StateTransitions (Stable) * A set of state transitions and the actions that will be executed during them * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: StateTransitionController #### - StateEvaluator (Stable) * A state evaluator * **Type**: `CodecObject`, **Optional** (Default: null) #### - InitialMotionController (Stable) * The initial motion controller to set. If omitted and there are multiple, one will be chosen at random. * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - InteractionVars (Stable) * Interaction vars to be used in interactions. * **Type**: `CodecObject`, **Optional** (Default: null) #### - IsMemory (Stable) * Used to define if the NPC has a Memory to record. * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - MemoriesCategory (Stable) * Category to put the NPC in, as part of the Memories Plugin * **Type**: `String`, **Optional** (Default: Other), **Computable** * **Constraint**: String value must be either null or not empty #### - MemoriesNameOverride (Stable) * Overrides the Memory name when set. * **Type**: `String`, **Optional** (Default: ), **Computable** #### - SpawnLockTime (Stable) * How long the NPC should be locked and unable to perform behavior when first spawned * **Type**: `Double`, **Optional** (Default: 1.5), **Computable** * **Constraint**: Value must be greater or equal than 0 ### Constraints * At least one of BreathesInAir, BreathesInWater must be true [(Top)](#top) ## Variant: Role (WorkInProgress) Create a variant from an existing NPC JSON file [(Top)](#top) # List of Motion Controllers ## Dive: MotionController (WorkInProgress) Provide diving abilities for NPC ### Attributes #### - Type (Stable) * Type field * **Type**: `String`, **Required** * **Constraint**: String must be not empty #### - EpsilonSpeed (Experimental) * Minimum speed considered non 0 * **Type**: `Double`, **Optional** (Default: 1.0E-5) * **Constraint**: Value must be greater than 0 #### - EpsilonAngle (Experimental) * Minimum angle difference considered non 0 in degrees * **Type**: `Double`, **Optional** (Default: 3.0) * **Constraint**: Value must be greater than 0 #### - MaxHeadRotationSpeed (Stable) * Maximum rotation speed of the head in degrees * **Type**: `Double`, **Optional** (Default: 360.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - ForceVelocityDamping (Experimental) * Damping of external force/velocity over time * **Type**: `Double`, **Optional** (Default: 0.5) * **Constraint**: Value must be greater than 0 #### - RunThreshold (WorkInProgress) * Relative threshold when running animation should be used * **Type**: `Double`, **Optional** (Default: 0.7), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - RunThresholdRange (WorkInProgress) * Relative threshold range for switching between running/walking * **Type**: `Double`, **Optional** (Default: 0.15) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - MaxSwimSpeed (Stable) * Maximum horizontal speed * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxDiveSpeed (Stable) * Maximum vertical speed * **Type**: `Double`, **Optional** (Default: 8.0) * **Constraint**: Value must be greater than 0 #### - MaxFallSpeed (Stable) * Terminal velocity falling in air * **Type**: `Double`, **Optional** (Default: 10.0) * **Constraint**: Value must be greater than 0 #### - MaxSinkSpeed (Stable) * Terminal velocity sinking in water * **Type**: `Double`, **Optional** (Default: 4.0) * **Constraint**: Value must be greater than 0 #### - Gravity (Stable) * Gravity * **Type**: `Double`, **Optional** (Default: 10.0) * **Constraint**: Value must be greater than 0 #### - Acceleration (Stable) * Acceleration * **Type**: `Double`, **Optional** (Default: 3.0) * **Constraint**: Value must be greater than 0 #### - MaxRotationSpeed (Stable) * Maximum rotational speed in degrees * **Type**: `Double`, **Optional** (Default: 360.0) * **Constraint**: Value must be greater than 0 #### - MaxSwimTurnAngle (WorkInProgress) * Maximum angle NPC can walk without explicit turning in degrees * **Type**: `Double`, **Optional** (Default: 90.0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - FastSwimThreshold (WorkInProgress) * Relative threshold when fast swimming animation should be used * **Type**: `Double`, **Optional** (Default: 0.6) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - SwimDepth (WorkInProgress) * 0 is at eye height, -1 is bottom of bounding box, +1 top of bounding box. other values between -1 and +1 scale linear * **Type**: `Double`, **Optional** (Default: 0.4) * **Constraint**: Value must be greater or equal than -1 and less or equal than 1 #### - SinkRatio (WorkInProgress) * Relative sink or climb speed while wandering * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 #### - MinDiveDepth (Unknown) * null * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - MaxDiveDepth (WorkInProgress) * Maximum dive depth below surface desired * **Type**: `Double`, **Optional** (Default: 1.7976931348623157E308) * **Constraint**: Value must be greater than 0 #### - MinDepthAboveGround (WorkInProgress) * Minimum distance from ground desired * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 #### - MinDepthBelowSurface (WorkInProgress) * Minimum distance from water surface desired * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 #### - MinWaterDepth (Unknown) * null * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 #### - MaxWaterDepth (Unknown) * null * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - DesiredDepthWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 ### Constraints * MinSwimSpeed must be less or equal than MaxSwimSpeed [(Top)](#top) ## Fly: MotionController (WorkInProgress) Flight motion controller ### Attributes #### - Type (Stable) * Type field * **Type**: `String`, **Required** * **Constraint**: String must be not empty #### - EpsilonSpeed (Experimental) * Minimum speed considered non 0 * **Type**: `Double`, **Optional** (Default: 1.0E-5) * **Constraint**: Value must be greater than 0 #### - EpsilonAngle (Experimental) * Minimum angle difference considered non 0 in degrees * **Type**: `Double`, **Optional** (Default: 3.0) * **Constraint**: Value must be greater than 0 #### - MaxHeadRotationSpeed (Stable) * Maximum rotation speed of the head in degrees * **Type**: `Double`, **Optional** (Default: 360.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - ForceVelocityDamping (Experimental) * Damping of external force/velocity over time * **Type**: `Double`, **Optional** (Default: 0.5) * **Constraint**: Value must be greater than 0 #### - RunThreshold (WorkInProgress) * Relative threshold when running animation should be used * **Type**: `Double`, **Optional** (Default: 0.7), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - RunThresholdRange (WorkInProgress) * Relative threshold range for switching between running/walking * **Type**: `Double`, **Optional** (Default: 0.15) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - MinAirSpeed (WorkInProgress) * Minimum in air speed * **Type**: `Double`, **Optional** (Default: 0.1) * **Constraint**: Value must be greater or equal than 0 #### - MaxHorizontalSpeed (Stable) * Maximum horizontal speed * **Type**: `Double`, **Optional** (Default: 8.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxClimbSpeed (Stable) * Maximum climbing speed * **Type**: `Double`, **Optional** (Default: 6.0) * **Constraint**: Value must be greater than 0 #### - MaxSinkSpeed (Stable) * Maximum sink/drop speed * **Type**: `Double`, **Optional** (Default: 10.0) * **Constraint**: Value must be greater than 0 #### - MaxFallSpeed (Stable) * Maximum fall speed * **Type**: `Double`, **Optional** (Default: 40.0) * **Constraint**: Value must be greater than 0 #### - MaxSinkSpeedFluid (Stable) * Maximum sink/fall speed in fluids * **Type**: `Double`, **Optional** (Default: 4.0) * **Constraint**: Value must be greater or equal than 0 #### - MaxClimbAngle (Stable) * Maximum climb angle * **Type**: `Double`, **Optional** (Default: 45.0) * **Constraint**: Value must be greater than 0 #### - MaxSinkAngle (Stable) * Maximum sink angle * **Type**: `Double`, **Optional** (Default: 85.0) * **Constraint**: Value must be greater than 0 #### - Acceleration (Stable) * Maximum Acceleration * **Type**: `Double`, **Optional** (Default: 4.0) * **Constraint**: Value must be greater than 0 #### - Deceleration (Stable) * Maximum deceleration * **Type**: `Double`, **Optional** (Default: 4.0) * **Constraint**: Value must be greater than 0 #### - Gravity (Stable) * Gravity * **Type**: `Double`, **Optional** (Default: 40.0) * **Constraint**: Value must be greater than 0 #### - MaxTurnSpeed (Stable) * Maximum turn speed in degrees per second * **Type**: `Double`, **Optional** (Default: 180.0) * **Constraint**: Value must be greater than 0 #### - MaxRollAngle (Stable) * Maximum roll angle in degrees * **Type**: `Double`, **Optional** (Default: 45.0) * **Constraint**: Value must be greater than 0 #### - MaxRollSpeed (Stable) * Maximum roll speed in degrees per second * **Type**: `Double`, **Optional** (Default: 180.0) * **Constraint**: Value must be greater than 0 #### - RollDamping (Stable) * Roll damping * **Type**: `Double`, **Optional** (Default: 0.8999999761581421) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - MinHeightOverGround (Stable) * Minimum height over ground * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - MaxHeightOverGround (Stable) * Maximum height over ground * **Type**: `Double`, **Optional** (Default: 20.0), **Computable** * **Constraint**: Value must be greater than 0 #### - FastFlyThreshold (WorkInProgress) * Relative threshold when fast flying animation should be used * **Type**: `Double`, **Optional** (Default: 0.6) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - AutoLevel (Stable) * Set pitch to 0 when no steering forces applied * **Type**: `Boolean`, **Optional** (Default: true) #### - DesiredAltitudeWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 [(Top)](#top) ## Walk: MotionController (WorkInProgress) Provide walk on ground abilities for NPC ### Attributes #### - Type (Stable) * Type field * **Type**: `String`, **Required** * **Constraint**: String must be not empty #### - EpsilonSpeed (Experimental) * Minimum speed considered non 0 * **Type**: `Double`, **Optional** (Default: 1.0E-5) * **Constraint**: Value must be greater than 0 #### - EpsilonAngle (Experimental) * Minimum angle difference considered non 0 in degrees * **Type**: `Double`, **Optional** (Default: 3.0) * **Constraint**: Value must be greater than 0 #### - MaxHeadRotationSpeed (Stable) * Maximum rotation speed of the head in degrees * **Type**: `Double`, **Optional** (Default: 360.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - ForceVelocityDamping (Experimental) * Damping of external force/velocity over time * **Type**: `Double`, **Optional** (Default: 0.5) * **Constraint**: Value must be greater than 0 #### - RunThreshold (WorkInProgress) * Relative threshold when running animation should be used * **Type**: `Double`, **Optional** (Default: 0.7), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - RunThresholdRange (WorkInProgress) * Relative threshold range for switching between running/walking * **Type**: `Double`, **Optional** (Default: 0.15) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - MaxWalkSpeed (Stable) * Maximum horizontal speed * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MinWalkSpeed (WorkInProgress) * Minimum horizontal speed * **Type**: `Double`, **Optional** (Default: 0.1) * **Constraint**: Value must be greater or equal than 0 #### - MaxFallSpeed (Stable) * Maximum fall speed * **Type**: `Double`, **Optional** (Default: 8.0) * **Constraint**: Value must be greater than 0 #### - MaxSinkSpeedFluid (Stable) * Maximum sink speed in fluids * **Type**: `Double`, **Optional** (Default: 4.0) * **Constraint**: Value must be greater than 0 #### - Gravity (Stable) * Gravity * **Type**: `Double`, **Optional** (Default: 10.0) * **Constraint**: Value must be greater than 0 #### - Acceleration (Stable) * Acceleration * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxRotationSpeed (Stable) * Maximum rotational speed in degrees * **Type**: `Double`, **Optional** (Default: 360.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxWalkTurnAngle (WorkInProgress) * Maximum angle NPC can walk without explicit turning in degrees * **Type**: `Double`, **Optional** (Default: 90.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - BlendRestTurnAngle (WorkInProgress) * When NPC is blending heading and turn angle required is larger than this value speed is reduced * **Type**: `Double`, **Optional** (Default: 60.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - BlendRestRelativeSpeed (WorkInProgress) * When NPC is blending heading relative speed used when reducing speed * **Type**: `Double`, **Optional** (Default: 0.2), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - MaxClimbHeight (Stable) * Maximum height NPC can climb * **Type**: `Double`, **Optional** (Default: 1.3), **Computable** * **Constraint**: Value must be greater than 0 #### - JumpHeight (Experimental) * How high the NPC jumps above climb height * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - MinJumpHeight (Experimental) * Minimum height above which a jump will be attempted * **Type**: `Double`, **Optional** (Default: 0.6), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - MinJumpDistance (Experimental) * Minimum distance above which a jump will be executed * **Type**: `Double`, **Optional** (Default: 0.2), **Computable** * **Constraint**: Value must be greater than 0 #### - JumpForce (Experimental) * The force multiplier for the upward motion of the jump * **Type**: `Double`, **Optional** (Default: 1.5), **Computable** * **Constraint**: Value must be greater than 0 #### - JumpBlending (Experimental) * The blending of the upward jump pattern. 0 is more curved and 1 is linear * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - JumpDescentBlending (Experimental) * The blending of the jump descent pattern. 0 is linear while higher values become more curved * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - JumpDescentSteepness (Experimental) * The steepness of the descent portion of the jump * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - AscentAnimationType (Stable) * The animation to play when walking up a block * **Type**: `Flag`, **Optional** (Default: Walk), **Computable** * **Flag Values**: * `Walk`: Play walk animation * `Fly`: Play fly animation * `Idle`: Play idle animation * `Climb`: Play climb animation * `Jump`: Play jump animation #### - ClimbSpeedMult (WorkInProgress) * Climb speed multiplier (const + multiplier \* walkspeed \*\* power) * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** #### - ClimbSpeedPow (WorkInProgress) * Climb speed power (const + multiplier \* walkspeed \*\* power) * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** #### - ClimbSpeedConst (WorkInProgress) * Climb speed constant (const + multiplier \* walkspeed \*\* power) * **Type**: `Double`, **Optional** (Default: 5.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MinDescentAnimationHeight (Stable) * The min drop distance to switch from the standard walking animation to the specified descent animation * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - DescendFlatness (WorkInProgress) * Relative scale how fast NPC moves forward while climbing down * **Type**: `Double`, **Optional** (Default: 0.7), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - DescendSpeedCompensation (WorkInProgress) * Factor to compensate forward speed reduction while moving downwards * **Type**: `Double`, **Optional** (Default: 0.9), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - DescentAnimationType (Experimental) * The animation to play when moving down a block * **Type**: `Flag`, **Optional** (Default: Fall), **Computable** * **Flag Values**: * `Walk`: Play walk animation * `Idle`: Play idle animation * `Fall`: Play fall animation #### - DescentSteepness (Experimental) * The relative steepness of the descent * **Type**: `Double`, **Optional** (Default: 1.4), **Computable** * **Constraint**: Value must be greater than 0 #### - DescentBlending (Experimental) * The blending of the descent pattern. 0 is linear, while higher values become more curved * **Type**: `Double`, **Optional** (Default: 1.8), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - MaxDropHeight (WorkInProgress) * Maximum height NPC considers drop safe * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - FenceBlockSet (Stable) * Unclimbable blocks * **Type**: `Asset`, **Optional** (Default: Fence) #### - JumpRange (WorkInProgress) * Jump distance range * **Type**: `Array`, **Optional** (Default: \[0.0, 0.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 10and in weakly ascending order #### - MinHover (WorkInProgress) * Minimum hover height over ground * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - MinHoverClimb (WorkInProgress) * Minimum hover height over ground when climbing * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - MinHoverDrop (WorkInProgress) * Minimum hover height over ground when dropping * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - FloatsDown (WorkInProgress) * If true NPC floats down when hovering enabled else gravity decides * **Type**: `Boolean`, **Optional** (Default: true) #### - MaxHover (WorkInProgress) * Maximum hover height over ground * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - HoverFreq (WorkInProgress) * Hover frequency * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - MinHitSlowdown (Stable) * The minimum percentage to slow down by when attacked from behind * **Type**: `Double`, **Optional** (Default: 0.1) * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 ### Constraints * MinHover must be less or equal than MaxHover * MinHoverClimb must be less or equal than MinHover * MinHoverDrop must be less or equal than MinHover * MinWalkSpeed must be less or equal than MaxWalkSpeed [(Top)](#top) # List of Misc Parts ## ActionList: ActionList (Stable) An array of actions to be executed * List of actions * **Type**: `Array`, **Required**, **Element Type**: Action [(Top)](#top) ## Aim: HeadMotion (Stable) Aim at target considering weapon in hand. ### Attributes #### - Spread (Experimental) * Random targeting error * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 5 #### - HitProbability (Experimental) * Probability of shot being straight on target * **Type**: `Double`, **Optional** (Default: 0.33), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - Deflection (Experimental) * Compute deflection for moving targets * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelativeTurnSpeed (Stable) * The relative turn speed modifier * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 ### Constraints * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position [(Top)](#top) ## AimCharge: BodyMotion (Stable) Aim the NPC at a target position for performing a charge based on aiming information and ensure that the charge is possible before it's executed. ### Attributes #### - RelativeTurnSpeed (Stable) * The relative turn speed modifier * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 ### Constraints * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position [(Top)](#top) ## Altitude: IEntityFilter (Stable) Matches targets if they're within the defined range above the ground ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - AltitudeRange (Stable) * The range above the ground to match * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order [(Top)](#top) ## And: IEntityFilter (Stable) Logical AND of a list of filters ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Filters (Stable) * List of filters * **Type**: `Array`, **Required**, **Element Type**: IEntityFilter * **Constraint**: Array must not be empty [(Top)](#top) ## Attitude: ISensorEntityPrioritiser (Stable) Prioritises return entities by attitude ### Attributes #### - AttitudesByPriority (Stable) * A prioritised list of attitudes * **Type**: `FlagArray`, **Required**, **Computable** * **Flag Values**: * `HOSTILE`: is hostile towards the target * `REVERED`: reveres the target * `FRIENDLY`: is friendly towards the target * `IGNORE`: is ignoring the target * `NEUTRAL`: is neutral towards the target * **Constraint**: Array must not contain duplicates [(Top)](#top) ## Attitude: IEntityFilter (Stable) Matches the attitude towards the locked target ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Attitudes (Stable) * The attitudes to match * **Type**: `FlagSet`, **Required**, **Computable** * **Flag Values**: * `HOSTILE`: is hostile towards the target * `REVERED`: reveres the target * `FRIENDLY`: is friendly towards the target * `IGNORE`: is ignoring the target * `NEUTRAL`: is neutral towards the target ### Constraints [(Top)](#top) ## Combat: IEntityFilter (Stable) Check the target's combat state. This includes whether they're attacking at all, if they're using a particular attack, etc ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sequence (Stable) * The attack ID to check for. * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - TimeElapsedRange (Stable) * The acceptable elapsed time range in seconds. * **Type**: `Array`, **Optional** (Default: \[0.0, 3.4028234663852886E38]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 3.4028234663852886e+38and in weakly ascending order #### - Mode (Stable) * Type of combat to trigger on * **Type**: `Flag`, **Optional** (Default: Attacking), **Computable** * **Flag Values**: * `Ranged`: Ranged * `Charging`: Weapon charging * `Melee`: Melee * `Blocking`: Blocking * `Sequence`: Combat sequence * `Attacking`: Attacking * `Any`: Any * `None`: None ### Constraints * If Mode is Sequence, the asset Sequencemust be provided [(Top)](#top) ## CombatTargets: ISensorEntityCollector (Stable) A collector which processes matched friendly and hostile targets and adds them to the NPC's short-term combat memory. [(Top)](#top) ## Flee: BodyMotion (Experimental) Move away from a target using path finding or steering ### Attributes #### - RelativeSpeed (Stable) * Maximum relative speed the NPC should move * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - RelativeSpeedWaypoint (Stable) * Maximum relative speed the NPC should move close to waypoints * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 1 #### - WaypointRadius (Stable) * Radius to slow down around waypoints * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0.1 #### - UseBestPath (Stable) * Use best partial path if goal can't be reached * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ThrottleDelayRange (Stable) * Time to delay after no path finding solution found * **Type**: `Array`, **Optional** (Default: \[3.0, 5.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - ThrottleIgnoreCount (Stable) * How often no valid path solution can be found before throttling delay is applied * **Type**: `Integer`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - BuildOptimisedPath (Stable) * Try to reduce number of nodes of generated path * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - AvoidBlockDamage (Stable) * Should avoid environmental damage from blocks * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelaxedMoveConstraints (Stable) * NPC can do movements like wading (depends on motion controller type) * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - BlendHeading (Stable) * Relative rotation angle into next waypoint when arriving at current waypoint * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - PathSmoothing (Stable) * Try to smooth followed path. Larger values smooth more. * **Type**: `Integer`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - RejectionWeight (Stable) * Weight of rejection vector pushing entity closer to original path * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - UseSteering (Stable) * Use simple/cheap steering if available * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - SkipSteering (Experimental) * Skip steering if target not reachable * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - UsePathfinder (Stable) * Use path finder * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - MinPathLength (Experimental) * Minimum length of path required when not able to reach target (should be greater equal 2) * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - DiagonalMoves (Stable) * Allow diagonal moves * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - StepsPerTick (Stable) * Steps per iteration * **Type**: `Integer`, **Optional** (Default: 50.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxPathLength (Stable) * Max path steps before aborting path finding * **Type**: `Integer`, **Optional** (Default: 200.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxOpenNodes (Stable) * Max open nodes before aborting path finding * **Type**: `Integer`, **Optional** (Default: 200.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxTotalNodes (Stable) * Max total node before aborting path finding * **Type**: `Integer`, **Optional** (Default: 900.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Debug (Stable) * Debugging flags * **Type**: `String`, **Optional** (Default: ) #### - DesiredAltitudeWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. Values below 0 mean the default in the motion controller will be used. * **Type**: `Double`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 1 #### - WaitDistance (Experimental) * Minimum distance target needs to move before recomputing path when no path can be found * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - RecomputeDistance (Experimental) * Maximum distance target can move before path is recomputed or 0 to supress recomputation * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - ReprojectDistance (Experimental) * Maximum distance target can move before position is reprojected * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - AdjustRangeByHitboxSize (Stable) * Correct range by hitbox sizes of involved entities * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - RecomputeConeAngle (Experimental) * Recompute path when target leaves cone from initial position to target * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - SlowDownDistance (Stable) * Distance from target when NPC should start to slowdown * **Type**: `Double`, **Optional** (Default: 8.0), **Computable** * **Constraint**: Value must be greater than 0 #### - StopDistance (Stable) * Distance from target when NPC should halt * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Falloff (Stable) * Rate how fast the slowdown should happen relative to distance * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - HoldDirectionTimeRange (Stable) * How often to change heading * **Type**: `Array`, **Optional** (Default: \[2.0, 5.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - ChangeDirectionViewSector (Stable) * The view sector the NPC uses to decide if it should switch direction * **Type**: `Double`, **Optional** (Default: 230.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - DirectionJitter (Stable) * How much jitter in degrees to add to the heading the NPC uses * **Type**: `Double`, **Optional** (Default: 45.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - ErraticDistance (Stable) * If the player is closer than this distance, the NPC will behave more erratically using the additional jitter parameter * **Type**: `Double`, **Optional** (Default: 4.0), **Computable** * **Constraint**: Value must be greater than 0 #### - ErraticExtraJitter (Stable) * Extra jitter to add to the NPC heading on top of the standard when the target is too close * **Type**: `Double`, **Optional** (Default: 45.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - ErraticChangeDurationMultiplier (Stable) * A multiplier to decrease the duration between direction changes when the target is too close * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 1 ### Constraints * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position * SlowDownDistance must be less or equal than StopDistance [(Top)](#top) ## Flock: BodyMotion (Experimental) Flocking - WIP ### Constraints [(Top)](#top) ## Flock: IEntityFilter (Stable) Test for flock membership and related properties ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - FlockStatus (Stable) * Test for NPC status in relation to flock * **Type**: `Flag`, **Optional** (Default: Any) * **Flag Values**: * `Leader`: Is leader of a flock * `Follower`: Is part of a flock but not leader * `NotMember`: Is not part of a flock * `Member`: Is part of a flock * `Any`: Don't care #### - FlockPlayerStatus (Stable) * Test for Player status for flock NPC is member * **Type**: `Flag`, **Optional** (Default: Any) * **Flag Values**: * `NotMember`: Player is not member of a flock * `Member`: Player is member of a flock * `Any`: Don't care #### - Size (Stable) * Check for a certain range of NPCs in the flock * **Type**: `Array`, **Optional** (Default: null), **Element Type**: integer #### - CheckCanJoin (Stable) * If true, will filter entities in a flock the executor can join * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## HashMap: HashMap (Stable) Non-empty list of motion controllers. * List of motion controllers * **Type**: `Array`, **Required**, **Element Type**: MotionController * **Constraint**: Array must not be empty [(Top)](#top) ## HeightDifference: IEntityFilter (Stable) Matches entities within the given height range ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - HeightDifference (Stable) * The height range to test entities in. Extends into negatives for positions below the NPC * **Type**: `Array`, **Optional** (Default: \[-1.7976931348623157E308, 1.7976931348623157E308]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than -1.7976931348623157e+308, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - UseEyePosition (Stable) * Use eye position for height difference checks * **Type**: `Boolean`, **Optional** (Default: true), **Computable** ### Constraints [(Top)](#top) ## InsideBlock: IEntityFilter (Stable) Matches if the entity is inside any of the blocks in the BlockSet ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - BlockSet (Stable) * The BlockSet to match against * **Type**: `Asset`, **Required**, **Computable** [(Top)](#top) ## Instruction: Instruction (WorkInProgress) An instruction with Sensor, and Motions and Actions, or a list of nested instructions. ### Attributes #### - Name (Stable) * Optional name for descriptor * **Type**: `String`, **Optional** (Default: null) #### - Tag (Experimental) * Internal identifier tag for debugging * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty #### - Enabled (Stable) * Whether this instruction should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensor (Stable) * Sensor for testing if instruction can be applied. If not supplied, will always match * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: Sensor #### - BodyMotion (Stable) * Body motion to be executed * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: BodyMotion #### - HeadMotion (Stable) * Head motion to be executed * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: HeadMotion #### - Actions (Stable) * Actions to be executed * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: ActionList #### - ActionsBlocking (Stable) * Do not execute an action unless the previous action could execute * **Type**: `Boolean`, **Optional** (Default: false) #### - ActionsAtomic (Stable) * Only execute actions if all actions can be executed * **Type**: `Boolean`, **Optional** (Default: false) #### - Instructions (Stable) * Optional nested list of instructions * **Type**: `Array`, **Optional** (Default: null), **Element Type**: Instruction #### - Continue (WorkInProgress) * Continue after this instruction was executed * **Type**: `Boolean`, **Optional** (Default: false) #### - Weight (Stable) * Weighted chance of picking this instruction in a random instruction * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - TreeMode (Stable) * Whether this instruction and its contents should be treated like a traditional behaviour tree, i.e. will continue if all child instructions fail * **Type**: `Boolean`, **Optional** (Default: false) #### - InvertTreeModeResult (Stable) * Whether or not to invert the result of TreeMode evaluation when passing up to parent TreeMode instructions * **Type**: `Boolean`, **Optional** (Default: false), **Computable** ### Constraints * At most one or none of BodyMotion, Instructions must be provided * At most one or none of HeadMotion, Instructions must be provided * At most one or none of Actions, Instructions must be provided * If TreeMode is true, Continue must be false [(Top)](#top) ## Inventory: IEntityFilter (Stable) Test various conditions relating to entity inventory. This includes whether it contains a specific item, item count, and free slots ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Items (Stable) * A list of glob item patterns to match * **Type**: `AssetArray`, **Optional** (Default: \[\*]), **Computable**, **Element Type**: Item #### - CountRange (Stable) * The range of number of items that need to match the patterns * **Type**: `Array`, **Optional** (Default: \[1, 2147483647]), **Computable**, **Element Type**: integer * **Constraint**: Values must be greater or equal than 0, less or equal than 2147483647and in weakly ascending order #### - FreeSlotRange (Stable) * The range designating the number of required free slots. Setting min and max to zero would check if full * **Type**: `Array`, **Optional** (Default: \[0, 2147483647]), **Computable**, **Element Type**: integer * **Constraint**: Values must be greater or equal than 0, less or equal than 2147483647and in weakly ascending order [(Top)](#top) ## ItemInHand: IEntityFilter (Stable) Check if entity is holding an item ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Items (Stable) * A list of glob item patterns to match * **Type**: `AssetArray`, **Required**, **Computable**, **Element Type**: Item #### - Hand (Stable) * Which hand to check * **Type**: `Flag`, **Optional** (Default: Both), **Computable** * **Flag Values**: * `OffHand`: The off-hand * `Main`: The main hand * `Both`: Both hands [(Top)](#top) ## Land: BodyMotion (Experimental) Try to land at the given position using a seek like motion ### Attributes #### - RelativeSpeed (Stable) * Maximum relative speed the NPC should move * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - RelativeSpeedWaypoint (Stable) * Maximum relative speed the NPC should move close to waypoints * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 1 #### - WaypointRadius (Stable) * Radius to slow down around waypoints * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0.1 #### - UseBestPath (Stable) * Use best partial path if goal can't be reached * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ThrottleDelayRange (Stable) * Time to delay after no path finding solution found * **Type**: `Array`, **Optional** (Default: \[3.0, 5.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - ThrottleIgnoreCount (Stable) * How often no valid path solution can be found before throttling delay is applied * **Type**: `Integer`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - BuildOptimisedPath (Stable) * Try to reduce number of nodes of generated path * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - AvoidBlockDamage (Stable) * Should avoid environmental damage from blocks * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelaxedMoveConstraints (Stable) * NPC can do movements like wading (depends on motion controller type) * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - BlendHeading (Stable) * Relative rotation angle into next waypoint when arriving at current waypoint * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - PathSmoothing (Stable) * Try to smooth followed path. Larger values smooth more. * **Type**: `Integer`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - RejectionWeight (Stable) * Weight of rejection vector pushing entity closer to original path * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - UseSteering (Stable) * Use simple/cheap steering if available * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - SkipSteering (Experimental) * Skip steering if target not reachable * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - UsePathfinder (Stable) * Use path finder * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - MinPathLength (Experimental) * Minimum length of path required when not able to reach target (should be greater equal 2) * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - DiagonalMoves (Stable) * Allow diagonal moves * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - StepsPerTick (Stable) * Steps per iteration * **Type**: `Integer`, **Optional** (Default: 50.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxPathLength (Stable) * Max path steps before aborting path finding * **Type**: `Integer`, **Optional** (Default: 200.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxOpenNodes (Stable) * Max open nodes before aborting path finding * **Type**: `Integer`, **Optional** (Default: 200.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxTotalNodes (Stable) * Max total node before aborting path finding * **Type**: `Integer`, **Optional** (Default: 900.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Debug (Stable) * Debugging flags * **Type**: `String`, **Optional** (Default: ) #### - DesiredAltitudeWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. Values below 0 mean the default in the motion controller will be used. * **Type**: `Double`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 1 #### - WaitDistance (Experimental) * Minimum distance target needs to move before recomputing path when no path can be found * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - RecomputeDistance (Experimental) * Maximum distance target can move before path is recomputed or 0 to supress recomputation * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - ReprojectDistance (Experimental) * Maximum distance target can move before position is reprojected * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - AdjustRangeByHitboxSize (Stable) * Correct range by hitbox sizes of involved entities * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - RecomputeConeAngle (Experimental) * Recompute path when target leaves cone from initial position to target * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - Reachable (Experimental) * Target must be reachable so that hitboxes can overlap * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - HeightDifference (Experimental) * Height difference allowed to target * **Type**: `Array`, **Optional** (Default: \[-1.0, 1.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than -1.7976931348623157e+308, less or equal than 1.7976931348623157e+308and in strictly ascending order #### - SlowDownDistance (Stable) * Distance when to slow down when approaching * **Type**: `Double`, **Optional** (Default: 8.0), **Computable** * **Constraint**: Value must be greater than 0 #### - StopDistance (Stable) * Distance to stop at * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater than 0 #### - AbortDistance (Stable) * Distance to abort behaviour * **Type**: `Double`, **Optional** (Default: 96.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Falloff (Stable) * Deceleration when approaching target * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - SwitchToSteeringDistance (Stable) * Distance below NPC can test if target is reachable and abort existing path * **Type**: `Double`, **Optional** (Default: 20.0), **Computable** * **Constraint**: Value must be greater than 0 #### - GoalLenience (Experimental) * The distance from the target landing point that is acceptable to land at * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater than 0 ### Constraints * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position * SlowDownDistance must be greater or equal than StopDistance * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position [(Top)](#top) ## Leave: BodyMotion (Experimental) Get away from current position using path finding ### Attributes #### - RelativeSpeed (Stable) * Maximum relative speed the NPC should move * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - RelativeSpeedWaypoint (Stable) * Maximum relative speed the NPC should move close to waypoints * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 1 #### - WaypointRadius (Stable) * Radius to slow down around waypoints * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0.1 #### - UseBestPath (Stable) * Use best partial path if goal can't be reached * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ThrottleDelayRange (Stable) * Time to delay after no path finding solution found * **Type**: `Array`, **Optional** (Default: \[3.0, 5.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - ThrottleIgnoreCount (Stable) * How often no valid path solution can be found before throttling delay is applied * **Type**: `Integer`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - BuildOptimisedPath (Stable) * Try to reduce number of nodes of generated path * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - AvoidBlockDamage (Stable) * Should avoid environmental damage from blocks * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelaxedMoveConstraints (Stable) * NPC can do movements like wading (depends on motion controller type) * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - BlendHeading (Stable) * Relative rotation angle into next waypoint when arriving at current waypoint * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - PathSmoothing (Stable) * Try to smooth followed path. Larger values smooth more. * **Type**: `Integer`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - RejectionWeight (Stable) * Weight of rejection vector pushing entity closer to original path * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MinPathLength (Experimental) * Minimum length of path required when not able to reach target (should be greater equal 2) * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - DiagonalMoves (Stable) * Allow diagonal moves * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - StepsPerTick (Stable) * Steps per iteration * **Type**: `Integer`, **Optional** (Default: 50.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxPathLength (Stable) * Max path steps before aborting path finding * **Type**: `Integer`, **Optional** (Default: 200.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxOpenNodes (Stable) * Max open nodes before aborting path finding * **Type**: `Integer`, **Optional** (Default: 200.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxTotalNodes (Stable) * Max total node before aborting path finding * **Type**: `Integer`, **Optional** (Default: 900.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Debug (Stable) * Debugging flags * **Type**: `String`, **Optional** (Default: ) #### - DesiredAltitudeWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. Values below 0 mean the default in the motion controller will be used. * **Type**: `Double`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 1 #### - Distance (Experimental) * Minimum distance required * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 ### Constraints [(Top)](#top) ## LineOfSight: IEntityFilter (Stable) Matches if there is line of sight to the target ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** ### Constraints [(Top)](#top) ## MaintainDistance: BodyMotion (Stable) Maintain distance from a given position ### Attributes #### - DesiredDistanceRange (Stable) * The desired distance to remain at. * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than -1.7976931348623157e+308, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - TargetDistanceFactor (Stable) * A factor used to decide what distance to move to within the target range when the target falls outside of it. 0 will result in moving the shortest distance to fall within the range, 1 the furthest distance, and 0.5 roughly the middle of the range. * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - MoveThreshold (Stable) * An extra threshold distance on either side of the desired range before the NPC will trigger movement. * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - RelativeForwardsSpeed (Stable) * Maximum relative speed for the NPC moving forwards * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - RelativeBackwardsSpeed (Stable) * Maximum relative speed for the NPC moving backwards * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - MoveTowardsSlowdownThreshold (Stable) * The distance away from the target stopping point at which the NPC will start to slow down while moving towards the target * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - StrafingDurationRange (Stable) * How long to strafe for (moving left or right around the target). If set to \[ 0, 0 ], will not move horizontally at all. * **Type**: `Array`, **Optional** (Default: \[0.0, 0.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - StrafingFrequencyRange (Stable) * How frequently to execute strafing * **Type**: `Array`, **Optional** (Default: \[2.0, 2.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order ### Constraints * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position [(Top)](#top) ## MatchLook: BodyMotion (Stable) Make NPC body rotate to match look direction ### Constraints [(Top)](#top) ## MovementState: IEntityFilter (Stable) Check if the entity is in the given movement state ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - State (Stable) * The movement state to check * **Type**: `Flag`, **Required** * **Flag Values**: * `WALKING`: Walking * `FLYING`: Flying * `RUNNING`: Running * `FALLING`: Falling * `IDLE`: Idle * `SPRINTING`: Sprinting * `CROUCHING`: Crouching * `CLIMBING`: Climbing * `ANY`: Any * `JUMPING`: Jumping [(Top)](#top) ## NPCGroup: IEntityFilter (Stable) Returns whether the entity matches one of the provided NPCGroups ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - IncludeGroups (Stable) * A set of NPCGroups to include in the match * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: TagSet #### - ExcludeGroups (Stable) * A set of NPCGroups to exclude from the match * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: TagSet ### Constraints * One (and only one) of IncludeGroups, ExcludeGroups must be provided [(Top)](#top) ## Not: IEntityFilter (WorkInProgress) Invert filter test ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Filter (Stable) * Filter to test * **Type**: `ObjectRef`, **Required**, **Object Type**: IEntityFilter [(Top)](#top) ## Nothing: BodyMotion (Stable) Do nothing ### Constraints [(Top)](#top) ## Nothing: HeadMotion (Stable) Do nothing ### Constraints [(Top)](#top) ## Observe: HeadMotion (Stable) Observe surroundings in various ways. This includes looking in random directions within an angle, or sweeping the head left and right, etc. Angles are relative to body angle at any given time. ### Attributes #### - AngleRange (Stable) * The angle range to observe in degrees, offset from facing forwards * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than -180, less or equal than 180and in weakly ascending order #### - PauseTimeRange (Stable) * How long to continue looking in a given direction * **Type**: `Array`, **Optional** (Default: \[2.0, 2.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - PickRandomAngle (Stable) * Whether to pick random angles within the range. If false, will instead sweep across the range, pausing at either end. * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - ViewSegments (Stable) * The number of distinct segments to stop at when sweeping from left to right * **Type**: `Integer`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - RelativeTurnSpeed (Stable) * The relative turn speed modifier * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 ### Constraints [(Top)](#top) ## Or: IEntityFilter (Stable) Logical OR of a list of filters ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Filters (Stable) * List of filters * **Type**: `Array`, **Required**, **Element Type**: IEntityFilter * **Constraint**: Array must not be empty [(Top)](#top) ## Path: Path (Stable) List of transient path points ### Attributes #### - Waypoints (Stable) * List of transient path points * **Type**: `Array`, **Required**, **Element Type**: RelativeWaypointDefinition #### - Scale (Stable) * Overall path scale * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 [(Top)](#top) ## Path: BodyMotion (Stable) Walk along a path. ### Attributes #### - StartAtNearestNode (Stable) * Start at closest warp point * **Type**: `Boolean`, **Optional** (Default: true) #### - PathWidth (Experimental) * Walking corridor width * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - NodeWidth (Experimental) * Radius of warp point node * **Type**: `Double`, **Optional** (Default: 0.2) * **Constraint**: Value must be greater than 0 #### - MinRelSpeed (Stable) * Minimum relative walk speed * **Type**: `Double`, **Optional** (Default: 0.5) * **Constraint**: Value must be greater than 0 and less or equal than 1 #### - MaxRelSpeed (Stable) * Maximum relative walk speed * **Type**: `Double`, **Optional** (Default: 0.5) * **Constraint**: Value must be greater than 0 and less or equal than 1 #### - MinWalkDistance (Experimental) * Minimum walk distance when PathWidth greater 0 * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - MaxWalkDistance (Experimental) * Maximum walk distance when PathWidth greater 0 * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - Direction (Stable) * Walking direction relative to order of nodes * **Type**: `Flag`, **Optional** (Default: FORWARD) * **Flag Values**: * `BACKWARD`: Start visiting nodes in reverse order * `RANDOM`: Can change direction between nodes and randomly pick target node in Points shape mode * `FORWARD`: Start visiting nodes in order * `ANY`: Pick any start direction #### - Shape (Stable) * Shape of Path * **Type**: `Flag`, **Optional** (Default: LOOP), **Computable** * **Flag Values**: * `CHAIN`: Nodes form an open path of line segments and will chain together with the next nearest path upon reaching the final node * `LINE`: Nodes form an open path of line segments * `LOOP`: Nodes form a closed loop of line segments (last node leads to first node) * `POINTS`: Any path between nodes is possible #### - MinNodeDelay (Stable) * Minimum resting time at a node * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - MaxNodeDelay (Stable) * Maximum resting time at a node * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 #### - UseNodeViewDirection (Stable) * Look into next node direction at node * **Type**: `Boolean`, **Optional** (Default: false) #### - NodePauseScaleRange (Stable) * The range from which to pick a value that defines the portion of the total node pause time that should be spent facing a direction before turning * **Type**: `Array`, **Optional** (Default: \[0.2, 0.4]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - NodePauseExtraPercentRange (Stable) * A range from which to pick the additional percentage of the directional pause time to add to it * **Type**: `Array`, **Optional** (Default: \[0.0, 0.2]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1and in weakly ascending order #### - PickRandomAngle (Stable) * Whether to sweep left and right using the observation angle, or pick a random angle within the sector each time * **Type**: `Boolean`, **Optional** (Default: false) #### - ViewSegments (Stable) * The number of distinct segments to stop at when sweeping from left to right using the observation angle * **Type**: `Integer`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 ### Constraints * MinRelativeSpeed must be less or equal than MaxRelativeSpeed * MinWalkDistance must be less or equal than MaxWalkDistance * MinNodeDelay must be less or equal than MaxNodeDelay * Must be attached to a sensor that provides one of path [(Top)](#top) ## Random: Instruction (Stable) Randomised list of weighted instructions. One will be selected at random and executed until the NPC state changes. ### Attributes #### - Name (Stable) * Optional name for descriptor * **Type**: `String`, **Optional** (Default: null) #### - Tag (Experimental) * Internal identifier tag for debugging * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty #### - Enabled (Stable) * Whether this instruction should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensor (Stable) * Sensor for testing if instruction can be applied. If not supplied, will always match * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: Sensor #### - Instructions (Stable) * List of weighted instructions to select from * **Type**: `Array`, **Optional** (Default: null), **Element Type**: Instruction #### - Continue (WorkInProgress) * Continue after this instruction was executed * **Type**: `Boolean`, **Optional** (Default: false) #### - Weight (Stable) * Weighted chance of picking this instruction in a random instruction * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - TreeMode (Stable) * Whether this instruction and its contents should be treated like a traditional behaviour tree, i.e. will continue if all child instructions fail * **Type**: `Boolean`, **Optional** (Default: false) #### - InvertTreeModeResult (Stable) * Whether or not to invert the result of TreeMode evaluation when passing up to parent TreeMode instructions * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - ResetOnStateChange (Stable) * Whether to reset when NPC state changes * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ExecuteFor (Stable) * How long to execute the chosen instruction before picking another * **Type**: `Array`, **Optional** (Default: \[1.7976931348623157E308, 1.7976931348623157E308]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order ### Constraints * If TreeMode is true, Continue must be false [(Top)](#top) ## Reference: Instruction (Stable) Prioritized instruction list that can be referenced from elsewhere in the file. Otherwise works like the default ### Attributes #### - Parameters (Stable) * The parameter block for defining variables * **Type**: `Parameters`, **Optional** (Default: ) #### - Name (Stable) * Name for referencing * **Type**: `String`, **Required** #### - Tag (Experimental) * Internal identifier tag for debugging * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty #### - Enabled (Stable) * Whether this instruction should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensor (Stable) * Sensor for testing if instruction can be applied. If not supplied, will always match * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: Sensor #### - BodyMotion (Stable) * Body motion to be executed * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: BodyMotion #### - HeadMotion (Stable) * Head motion to be executed * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: HeadMotion #### - Actions (Stable) * Actions to be executed * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: ActionList #### - ActionsBlocking (Stable) * Do not execute an action unless the previous action could execute * **Type**: `Boolean`, **Optional** (Default: false) #### - ActionsAtomic (Stable) * Only execute actions if all actions can be executed * **Type**: `Boolean`, **Optional** (Default: false) #### - Instructions (Stable) * Optional nested list of instructions * **Type**: `Array`, **Optional** (Default: null), **Element Type**: Instruction #### - Continue (WorkInProgress) * Continue after this instruction was executed * **Type**: `Boolean`, **Optional** (Default: false) #### - Weight (Stable) * Weighted chance of picking this instruction in a random instruction * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - TreeMode (Stable) * Whether this instruction and its contents should be treated like a traditional behaviour tree, i.e. will continue if all child instructions fail * **Type**: `Boolean`, **Optional** (Default: false) #### - InvertTreeModeResult (Stable) * Whether or not to invert the result of TreeMode evaluation when passing up to parent TreeMode instructions * **Type**: `Boolean`, **Optional** (Default: false), **Computable** ### Constraints * At most one or none of BodyMotion, Instructions must be provided * At most one or none of HeadMotion, Instructions must be provided * At most one or none of Actions, Instructions must be provided * If TreeMode is true, Continue must be false [(Top)](#top) ## RelativeWaypointDefinition: RelativeWaypointDefinition (Stable) A simple path waypoint definition where each waypoint is relative to the previous ### Attributes #### - Rotation (Stable) * Rotation to turn from previous waypoint * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater than -360 and less than 360 #### - Distance (Stable) * A distance to move from the previous waypoint * **Type**: `Double`, **Required** * **Constraint**: Value must be greater than 0 [(Top)](#top) ## Seek: BodyMotion (Experimental) Move towards a target using path finding or steering ### Attributes #### - RelativeSpeed (Stable) * Maximum relative speed the NPC should move * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - RelativeSpeedWaypoint (Stable) * Maximum relative speed the NPC should move close to waypoints * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 1 #### - WaypointRadius (Stable) * Radius to slow down around waypoints * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0.1 #### - UseBestPath (Stable) * Use best partial path if goal can't be reached * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ThrottleDelayRange (Stable) * Time to delay after no path finding solution found * **Type**: `Array`, **Optional** (Default: \[3.0, 5.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - ThrottleIgnoreCount (Stable) * How often no valid path solution can be found before throttling delay is applied * **Type**: `Integer`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - BuildOptimisedPath (Stable) * Try to reduce number of nodes of generated path * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - AvoidBlockDamage (Stable) * Should avoid environmental damage from blocks * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelaxedMoveConstraints (Stable) * NPC can do movements like wading (depends on motion controller type) * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - BlendHeading (Stable) * Relative rotation angle into next waypoint when arriving at current waypoint * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 1 #### - PathSmoothing (Stable) * Try to smooth followed path. Larger values smooth more. * **Type**: `Integer`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - RejectionWeight (Stable) * Weight of rejection vector pushing entity closer to original path * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - UseSteering (Stable) * Use simple/cheap steering if available * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - SkipSteering (Experimental) * Skip steering if target not reachable * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - UsePathfinder (Stable) * Use path finder * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - MinPathLength (Experimental) * Minimum length of path required when not able to reach target (should be greater equal 2) * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - DiagonalMoves (Stable) * Allow diagonal moves * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - StepsPerTick (Stable) * Steps per iteration * **Type**: `Integer`, **Optional** (Default: 50.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxPathLength (Stable) * Max path steps before aborting path finding * **Type**: `Integer`, **Optional** (Default: 200.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxOpenNodes (Stable) * Max open nodes before aborting path finding * **Type**: `Integer`, **Optional** (Default: 200.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MaxTotalNodes (Stable) * Max total node before aborting path finding * **Type**: `Integer`, **Optional** (Default: 900.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Debug (Stable) * Debugging flags * **Type**: `String`, **Optional** (Default: ) #### - DesiredAltitudeWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. Values below 0 mean the default in the motion controller will be used. * **Type**: `Double`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 1 #### - WaitDistance (Experimental) * Minimum distance target needs to move before recomputing path when no path can be found * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - RecomputeDistance (Experimental) * Maximum distance target can move before path is recomputed or 0 to supress recomputation * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - ReprojectDistance (Experimental) * Maximum distance target can move before position is reprojected * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - AdjustRangeByHitboxSize (Stable) * Correct range by hitbox sizes of involved entities * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - RecomputeConeAngle (Experimental) * Recompute path when target leaves cone from initial position to target * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - Reachable (Experimental) * Target must be reachable so that hitboxes can overlap * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - HeightDifference (Experimental) * Height difference allowed to target * **Type**: `Array`, **Optional** (Default: \[-1.0, 1.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than -1.7976931348623157e+308, less or equal than 1.7976931348623157e+308and in strictly ascending order #### - SlowDownDistance (Stable) * Distance when to slow down when approaching * **Type**: `Double`, **Optional** (Default: 8.0), **Computable** * **Constraint**: Value must be greater than 0 #### - StopDistance (Stable) * Distance to stop at * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater than 0 #### - AbortDistance (Stable) * Distance to abort behaviour * **Type**: `Double`, **Optional** (Default: 96.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Falloff (Stable) * Deceleration when approaching target * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - SwitchToSteeringDistance (Stable) * Distance below NPC can test if target is reachable and abort existing path * **Type**: `Double`, **Optional** (Default: 20.0), **Computable** * **Constraint**: Value must be greater than 0 ### Constraints * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position * SlowDownDistance must be greater or equal than StopDistance * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position [(Top)](#top) ## Sequence: BodyMotion (Stable) Sequence of motions. Can be used in conjunction with 'Timer' to model more complex motions. ### Attributes #### - Looped (Stable) * When true restart after last motion is finished * **Type**: `Boolean`, **Optional** (Default: true) #### - RestartOnActivate (Experimental) * Restart from first motion when NPC is activated. * **Type**: `Boolean`, **Optional** (Default: false) #### - Motions (Stable) * Array of motions * **Type**: `Array`, **Required**, **Element Type**: BodyMotion * **Constraint**: Array must not be empty ### Constraints [(Top)](#top) ## Sequence: HeadMotion (Stable) Sequence of motions. Can be used in conjunction with 'Timer' to model more complex motions. ### Attributes #### - Looped (Stable) * When true restart after last motion is finished * **Type**: `Boolean`, **Optional** (Default: true) #### - RestartOnActivate (Experimental) * Restart from first motion when NPC is activated. * **Type**: `Boolean`, **Optional** (Default: false) #### - Motions (Stable) * Array of motions * **Type**: `Array`, **Required**, **Element Type**: HeadMotion * **Constraint**: Array must not be empty ### Constraints [(Top)](#top) ## SpotsMe: IEntityFilter (Stable) Checks if the entity can view the NPC in a given view sector or cone and without obstruction. ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ViewAngle (Stable) * Angle used for view sector and view cone test * **Type**: `Double`, **Optional** (Default: 90.0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - ViewTest (Stable) * Check if the entity is in the view cone, view sector, or neither * **Type**: `Flag`, **Optional** (Default: VIEW\_SECTOR) * **Flag Values**: * `VIEW_SECTOR`: View\_Sector * `NONE`: None * `VIEW_CONE`: View\_Cone #### - TestLineOfSight (Stable) * Check if view to the npc is not obstructed * **Type**: `Boolean`, **Optional** (Default: true) ### Constraints [(Top)](#top) ## StandingOnBlock: IEntityFilter (Stable) Matches the block directly beneath the entity against a BlockSet ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - BlockSet (Stable) * The BlockSet to match against * **Type**: `Asset`, **Required**, **Computable** [(Top)](#top) ## Stat: IEntityFilter (Stable) Match stat values of the entity ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Stat (Stable) * The stat value to check * **Type**: `Asset`, **Required**, **Computable** #### - StatTarget (Stable) * The stat target * **Type**: `Flag`, **Required**, **Computable** * **Flag Values**: * `Min`: Min value * `Max`: Max value * `Value`: Current value #### - RelativeTo (Stable) * The stat value to check against * **Type**: `Asset`, **Required**, **Computable** #### - RelativeToTarget (Stable) * The stat target * **Type**: `Flag`, **Required**, **Computable** * **Flag Values**: * `Min`: Min value * `Max`: Max value * `Value`: Current value #### - ValueRange (Stable) * The fractional range within which to trigger, with 1 being equal * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order [(Top)](#top) ## StateTransition: StateTransition (Stable) An entry containing a list of actions to execute when moving from one state to another ### Attributes #### - States (Stable) * List of state transitions * **Type**: `Array`, **Required**, **Element Type**: StateTransitionEdges #### - Actions (Stable) * List of actions * **Type**: `ObjectRef`, **Required**, **Object Type**: ActionList #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## StateTransitionController: StateTransitionController (Stable) A list of state transitions * A list of state transition entries with lists of actions * **Type**: `Array`, **Required**, **Element Type**: StateTransition [(Top)](#top) ## StateTransitionEdges: StateTransitionEdges (Stable) Sets of from and to states defining state transitions ### Attributes #### - Priority (Stable) * Priority for the actions in this transition * **Type**: `Integer`, **Optional** (Default: 0) * **Constraint**: Value must be greater or equal than 0 #### - From (Stable) * A set of from states * **Type**: `StringList`, **Required** * **Constraint**: Strings in array must not be empty #### - To (Stable) * A set of to states * **Type**: `StringList`, **Required** * **Constraint**: Strings in array must not be empty #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## TakeOff: BodyMotion (Experimental) Switch NPC from walking to flying motion controller ### Attributes #### - JumpSpeed (Experimental) * Speed to jump off * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 ### Constraints [(Top)](#top) ## Teleport: BodyMotion (Experimental) Teleport NPC to a position given by a sensor or to a random position nearby with an optional minimum offset up to a maximum offset ### Attributes #### - OffsetRange (Experimental) * The minimum and maximum offset the NPC can be spawned from the target position * **Type**: `Array`, **Optional** (Default: \[0.0, 0.0]), **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - MaxYOffset (Experimental) * Maximum vertical offset from the target position in case of terrain obstacles * **Type**: `Double`, **Optional** (Default: 5.0) * **Constraint**: Value must be greater than 0 #### - OffsetSector (Experimental) * The sector around the target in which to teleport to. The origin point is directly between the target and the NPC teleporting * **Type**: `Double`, **Optional** (Default: 0.0) * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - Orientation (Experimental) * The direction to face after teleporting * **Type**: `Flag`, **Optional** (Default: Unchanged) * **Flag Values**: * `UseTarget`: Use the target's orientation * `TowardsTarget`: Face towards the target * `Unchanged`: Do not change orientation ### Constraints * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position * If Orientation is UseTarget, must be attached to a sensor that provides one of player target, NPC target, dropped item target [(Top)](#top) ## TestProbe: BodyMotion (Experimental) Debugging - Test probing ### Attributes #### - AdjustX (Experimental) * X block position adjustment * **Type**: `Double`, **Optional** (Default: -1.0) #### - AdjustZ (Experimental) * Y block position adjustment * **Type**: `Double`, **Optional** (Default: -1.0) #### - AdjustDistance (Experimental) * Set probe direction length for debugging * **Type**: `Double`, **Optional** (Default: -1.0) #### - SnapAngle (Experimental) * Snap angle to multiples of value for debugging * **Type**: `Double`, **Optional** (Default: -1.0) #### - AvoidBlockDamage (Stable) * Should avoid environmental damage from blocks * **Type**: `Boolean`, **Optional** (Default: true) #### - RelaxedMoveConstraints (Stable) * NPC can do movements like wading (depends on motion controller type) * **Type**: `Boolean`, **Optional** (Default: false) ### Constraints [(Top)](#top) ## Timer: BodyMotion (Stable) Execute a Motion for a specific maximum time. If the motion finishes earlier the Timer also finishes. ### Attributes #### - Time (Stable) * Range of time from which the random timer length can be chosen * **Type**: `Array`, **Optional** (Default: \[1.0, 1.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - Motion (Stable) * Motion to execute * **Type**: `ObjectRef`, **Required**, **Object Type**: BodyMotion ### Constraints [(Top)](#top) ## Timer: HeadMotion (Stable) Execute a Motion for a specific maximum time. If the motion finishes earlier the Timer also finishes. ### Attributes #### - Time (Stable) * Range of time from which the random timer length can be chosen * **Type**: `Array`, **Optional** (Default: \[1.0, 1.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - Motion (Stable) * Motion to execute * **Type**: `ObjectRef`, **Required**, **Object Type**: HeadMotion ### Constraints [(Top)](#top) ## ValueToParameterMapping: ValueToParameterMapping (Stable) An entry containing a list of actions to execute when moving from one state to another ### Attributes #### - ValueType (Stable) * The type of the value being mapped * **Type**: `Flag`, **Required** * **Flag Values**: * `String`: String value * `Double`: Double value * `Int`: Integer value #### - FromValue (Stable) * The value to read from the value store * **Type**: `String`, **Required** * **Constraint**: String must be not empty #### - ToParameter (Stable) * The parameter name to override * **Type**: `String`, **Required** * **Constraint**: String must be not empty [(Top)](#top) ## ViewSector: IEntityFilter (Stable) Matches entities within the given view sector ### Attributes #### - Enabled (Stable) * Whether this entity filter should be enabled * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ViewSector (Stable) * View sector to test entities in * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 ### Constraints [(Top)](#top) ## Wander: BodyMotion (Stable) Random movement in short linear pieces. ### Attributes #### - MinWalkTime (Stable) * Minimum time to wander for a segment. * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - MaxWalkTime (Stable) * Maximum time to wander for a segment. * **Type**: `Double`, **Optional** (Default: 4.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MinHeadingChange (Stable) * Approximate minimum heading change between segments * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - MaxHeadingChange (Stable) * Approximate maximum heading change between segments * **Type**: `Double`, **Optional** (Default: 90.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - RelaxHeadingChange (Stable) * Allow other directions when preferred directions blocked * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelativeSpeed (Stable) * Relative wander speed * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - MinMoveDistance (Stable) * Minimum distance to move in a segment * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 #### - StopDistance (Stable) * Distance to stop at target * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 #### - TestsPerTick (Stable) * Direction tests per tick * **Type**: `Integer`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - AvoidBlockDamage (Stable) * Should avoid environmental damage from blocks * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelaxedMoveConstraints (Stable) * NPC can do movements like wading (depends on motion controller type) * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - DesiredAltitudeWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. Values below 0 mean the default in the motion controller will be used. * **Type**: `Double`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 1 ### Constraints * MinWalkTime must be less or equal than MaxWalkTime * MinHeadingChange must be less or equal than MaxHeadingChange [(Top)](#top) ## WanderInCircle: BodyMotion (Stable) Random movement in short linear pieces inside circle around spawn position. ### Attributes #### - MinWalkTime (Stable) * Minimum time to wander for a segment. * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - MaxWalkTime (Stable) * Maximum time to wander for a segment. * **Type**: `Double`, **Optional** (Default: 4.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MinHeadingChange (Stable) * Approximate minimum heading change between segments * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - MaxHeadingChange (Stable) * Approximate maximum heading change between segments * **Type**: `Double`, **Optional** (Default: 90.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - RelaxHeadingChange (Stable) * Allow other directions when preferred directions blocked * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelativeSpeed (Stable) * Relative wander speed * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - MinMoveDistance (Stable) * Minimum distance to move in a segment * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 #### - StopDistance (Stable) * Distance to stop at target * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 #### - TestsPerTick (Stable) * Direction tests per tick * **Type**: `Integer`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - AvoidBlockDamage (Stable) * Should avoid environmental damage from blocks * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelaxedMoveConstraints (Stable) * NPC can do movements like wading (depends on motion controller type) * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - DesiredAltitudeWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. Values below 0 mean the default in the motion controller will be used. * **Type**: `Double`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 1 #### - Radius (Stable) * Radius of circle to wander in * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Flock (Experimental) * Do not use * **Type**: `Boolean`, **Optional** (Default: false) #### - UseSphere (Stable) * Use a sphere instead of circle cylinder * **Type**: `Boolean`, **Optional** (Default: false) ### Constraints * MinWalkTime must be less or equal than MaxWalkTime * MinHeadingChange must be less or equal than MaxHeadingChange [(Top)](#top) ## WanderInRect: BodyMotion (Stable) Random movement in short linear pieces inside rectangle around spawn position. ### Attributes #### - MinWalkTime (Stable) * Minimum time to wander for a segment. * **Type**: `Double`, **Optional** (Default: 2.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - MaxWalkTime (Stable) * Maximum time to wander for a segment. * **Type**: `Double`, **Optional** (Default: 4.0), **Computable** * **Constraint**: Value must be greater than 0 #### - MinHeadingChange (Stable) * Approximate minimum heading change between segments * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - MaxHeadingChange (Stable) * Approximate maximum heading change between segments * **Type**: `Double`, **Optional** (Default: 90.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 180 #### - RelaxHeadingChange (Stable) * Allow other directions when preferred directions blocked * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelativeSpeed (Stable) * Relative wander speed * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 #### - MinMoveDistance (Stable) * Minimum distance to move in a segment * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 #### - StopDistance (Stable) * Distance to stop at target * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 #### - TestsPerTick (Stable) * Direction tests per tick * **Type**: `Integer`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - AvoidBlockDamage (Stable) * Should avoid environmental damage from blocks * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - RelaxedMoveConstraints (Stable) * NPC can do movements like wading (depends on motion controller type) * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - DesiredAltitudeWeight (Stable) * How much this NPC prefers being within the desired height range. 0 means it doesn't care much, 1 means it will do its best to get there fast. Values below 0 mean the default in the motion controller will be used. * **Type**: `Double`, **Optional** (Default: -1.0), **Computable** * **Constraint**: Value must be greater or equal than -1 and less or equal than 1 #### - Width (Stable) * Rectangle width * **Type**: `Double`, **Optional** (Default: 10.0) * **Constraint**: Value must be greater than 0 #### - Depth (Stable) * Rectangle depth * **Type**: `Double`, **Optional** (Default: 10.0) * **Constraint**: Value must be greater than 0 ### Constraints * MinWalkTime must be less or equal than MaxWalkTime * MinHeadingChange must be less or equal than MaxHeadingChange [(Top)](#top) ## Watch: HeadMotion (Stable) Rotate to target. ### Attributes #### - RelativeTurnSpeed (Stable) * The relative turn speed modifier * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 2 ### Constraints * Must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position [(Top)](#top) ## WeightedAction: WeightedAction (Stable) A wrapped and weighted action intended to be used for Random action lists. ### Attributes #### - Action (Stable) * The action to run * **Type**: `ObjectRef`, **Required**, **Object Type**: Action #### - Weight (Stable) * The weight representing how likely this action is to run * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 [(Top)](#top) # List of Core Components (audiovisual) ## Animation: Sensor (Stable) Check if a given animation is being played ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Slot (Stable) * The animation slot to check * **Type**: `Flag`, **Required**, **Computable** * **Flag Values**: * `Status`: Status * `Action`: Action * `Face`: Face #### - Animation (Stable) * The animation ID to check for * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty [(Top)](#top) ## Appearance: Action (Stable) Change model of NPC to given appearance. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Appearance (Stable) * Model name to use * **Type**: `Asset`, **Required** [(Top)](#top) ## DisplayName: Action (Stable) Set the name displayed above NPC ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - DisplayName (Stable) * Name to display above NPC * **Type**: `String`, **Required**, **Computable** [(Top)](#top) ## ModelAttachment: Action (Stable) Set an attachment on the current NPC model ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Slot (Stable) * The attachment slot to set * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - Attachment (Stable) * The attachment to set, or empty to remove * **Type**: `String`, **Required**, **Computable** [(Top)](#top) ## PlayAnimation: Action (Experimental) Play an animation ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Slot (Stable) * The animation slot to play on * **Type**: `Flag`, **Required** * **Flag Values**: * `Status`: Status * `Action`: Action * `Face`: Face #### - Animation (Stable) * The animation ID to play * **Type**: `String`, **Optional** (Default: null), **Computable** [(Top)](#top) ## PlaySound: Action (Stable) Plays a sound to players within a specified range. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - SoundEventId (Stable) * The sound event to play * **Type**: `Asset`, **Required**, **Computable** [(Top)](#top) ## SpawnParticles: Action (WorkInProgress) Spawn particle system visible within a given range with an offset relative to npc heading ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - ParticleSystem (Stable) * Particle system to spawn * **Type**: `Asset`, **Required**, **Computable** #### - Range (Stable) * Maximum visibility range * **Type**: `Double`, **Optional** (Default: 75.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Offset (Stable) * Offset relative to footpoint in view direction of NPC * **Type**: `Array`, **Optional** (Default: null), **Computable**, **Element Type**: Double [(Top)](#top) # List of Core Components (combat) ## ApplyEntityEffect: Action (Stable) Applies an entity effect to the target or self ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - EntityEffect (Stable) * The entity effect to apply * **Type**: `Asset`, **Required**, **Computable** #### - UseTarget (Stable) * Use the sensor-provided target for the action, self otherwise * **Type**: `Boolean`, **Optional** (Default: true), **Computable** ### Constraints * If UseTarget is true, must be attached to a sensor that provides one of player target, NPC target [(Top)](#top) ## Attack: Action (Experimental) Let NPC start an attack. When an attack is running no new attack is started. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Attack (Experimental) * Attack pattern to use. If omitted, will cancel current attack * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - AttackType (Stable) * The interaction type to use * **Type**: `Flag`, **Optional** (Default: Primary), **Computable** * **Flag Values**: * `Secondary`: Secondary attack * `Ability3`: Ability 3 * `Primary`: Primary attack * `Ability2`: Ability 2 * `Ability1`: Ability 1 #### - ChargeFor (Stable) * How long to charge for. 0 indicates no charging. Also doubles as how long to block for * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - AttackPauseRange (Stable) * Range of minimum pause between attacks * **Type**: `Array`, **Optional** (Default: \[0.0, 0.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - AimingTimeRange (Stable) * A range from which to pick a random value denoting the max time the NPC will wait for aiming before launching the attack. * **Type**: `Array`, **Optional** (Default: \[0.0, 0.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - LineOfSight (Experimental) * Check Line of Sight before firing * **Type**: `Boolean`, **Optional** (Default: false) #### - AvoidFriendlyFire (Experimental) * Tries to avoid friendly fire if true * **Type**: `Boolean`, **Optional** (Default: true) #### - BallisticMode (WorkInProgress) * Trajectory to use * **Type**: `Flag`, **Optional** (Default: Short) * **Flag Values**: * `Random`: Random long or short * `Long`: Longer flight curve * `Short`: Shorter flight curve * `Alternate`: Alternate between long and short #### - MeleeConeAngle (WorkInProgress) * Cone angle considered for on target for melee * **Type**: `Double`, **Optional** (Default: 30.0) * **Constraint**: Value must be greater than 0 and less or equal than 360 #### - DamageFriendlies (Stable) * Whether this attack should bypass ignored damage groups and deal damage to the target * **Type**: `Boolean`, **Optional** (Default: false) #### - SkipAiming (Stable) * Whether aiming should be skipped an the attack just executed immediately. * **Type**: `Boolean`, **Optional** (Default: false) #### - ChargeDistance (Stable) * If this is a charge attack, the distance required for the charge * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - InteractionVars (Stable) * Set of interaction vars for modifying the interaction * **Type**: `CodecObject`, **Optional** (Default: null) ### Constraints * If SkipAiming is true, LineOfSight, AvoidFriendlyFire must be false [(Top)](#top) ## Damage: Sensor (Stable) Test if NPC suffered damage. A position is only returned when NPC suffered combat damage. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Combat (Stable) * Test for combat damage * **Type**: `Boolean`, **Optional** (Default: true) #### - Friendly (Stable) * Test for damage from usually disabled damage groups * **Type**: `Boolean`, **Optional** (Default: false) #### - Drowning (Stable) * Test for damage from drowning * **Type**: `Boolean`, **Optional** (Default: false) #### - Environment (Stable) * Test for damage from environment * **Type**: `Boolean`, **Optional** (Default: false) #### - Other (Stable) * Test for other damage * **Type**: `Boolean`, **Optional** (Default: false) #### - TargetSlot (Stable) * The slot to use for locking on the target if damage is taken. If omitted, target will not be locked * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty ### Constraints * At least one of Combat, Drowning, Environment, Other must be true * If TargetSlot is true, Drowning, Environment, Other must be false ### Provides * Player target * NPC target * Dropped item target [(Top)](#top) ## IsBackingAway: Sensor (Stable) Test if the NPC is currently backing away from something. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) # List of Core Components (corecomponents) ## AddToHostileTargetMemory: Action (Stable) Adds the passed target from the sensor to the hostile target memory ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) ### Constraints * Must be attached to a sensor that provides one of player target, NPC target [(Top)](#top) ## CombatAbility: Action (Stable) Starts the combat ability selected by the combat action evaluator. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## CombatActionEvaluator: Sensor (Experimental) A sensor which handles funnelling information to actions and motions from the combat action evaluator. Delivers the current attack target and desired range for supported direct child motions. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - TargetInRange (Stable) * Whether to match on target being in or out of range. * **Type**: `Boolean`, **Required**, **Computable** #### - AllowableDeviation (Stable) * The allowable deviation from the desired attack range * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 ### Provides * Player target * NPC target [(Top)](#top) ## FlockBeacon: Action (Experimental) Let the NPC send out a message to the flock members ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Message (Stable) * Message to send to targets * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - SendTargetSlot (Stable) * The marked target slot to send. If omitted, sends own position * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty #### - ExpirationTime (Stable) * The number of seconds that the message should last and be acknowledged by the receiving NPC. -1 represents infinite time. * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 or equal -1 #### - SendToSelf (Stable) * Send the message to self * **Type**: `Boolean`, **Optional** (Default: true) #### - SendToLeaderOnly (Stable) * Only send the message to the leader of the flock * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## FlockCombatDamage: Sensor (Stable) Return true if flock with NPC received combat damage. Target position is entity which did most damage. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - LeaderOnly (Stable) * Only test for damage to flock leader * **Type**: `Boolean`, **Optional** (Default: true) ### Provides * Player target * NPC target [(Top)](#top) ## FlockLeader: Sensor (Stable) Test for the presence and provide position of the flock leader ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** ### Provides * Player target * NPC target [(Top)](#top) ## FlockState: Action (Stable) Sets the state name for the flock the NPC is member of.The flock leader is explicitly excluded from this operation. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - State (Stable) * State name to set * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be a valid state string. A main state must be included before the period (e.g. Main.Test). State strings consist of a main state and a sub state (e.g. Main.Test). If nested within a substate, the main state may be omitted (e.g. .Test) when referencing. ### Constraints [(Top)](#top) ## FlockTarget: Action (Stable) Sets or clears the locked target for the flock the NPC is member of. If Clear flag is true, the locked target is cleared otherwise it is set to the the target.The flock leader is explicitly excluded from this operation. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Clear (Stable) * If true, clear locked target. If false, set to current target. * **Type**: `Boolean`, **Optional** (Default: false) #### - TargetSlot (Stable) * The target slot to use * **Type**: `String`, **Optional** (Default: LockedTarget), **Computable** * **Constraint**: String must be not empty ### Constraints * Must be attached to a sensor that provides one of player target, NPC target [(Top)](#top) ## HasHostileTargetMemory: Sensor (Stable) Checks if there is currently a hostile target in the target memory. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## InflictedDamage: Sensor (Stable) Return true if an individual or the flock it belongs to inflicted combat damage. Target position is entity which received most damage. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Target (Stable) * Who to check has inflicted damage * **Type**: `Flag`, **Optional** (Default: Self) * **Flag Values**: * `FlockLeader`: Check flock leader only * `Self`: Check self * `Flock`: Check flock #### - FriendlyFire (Stable) * Consider friendly fire too * **Type**: `Boolean`, **Optional** (Default: false) ### Provides * Player target * NPC target [(Top)](#top) ## JoinFlock: Action (Stable) Tries to build/join flock with target. Fails if both NPC and target are in a flock. If either NPC or target are in a flock, the one not in flock tries to join existing flock.If NPC and target are both not in a flock, a new flock with NPC is created and target is tried to be joined.Joining the flock can be rejected if the joining entity does have the correct type or the flock is full. This can be overridden by setting the ForceJoin flag to true. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - ForceJoin (Stable) * Disables checking flock join conditions test and forces joining flock. * **Type**: `Boolean`, **Optional** (Default: false) ### Constraints * Must be attached to a sensor that provides one of player target, NPC target [(Top)](#top) ## LeaveFlock: Action (Stable) NPC leaves flock currently in. Does nothing when not in flock. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## TriggerSpawnBeacon: Action (Stable) Trigger the nearest spawn beacon matching the configuration id ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - BeaconSpawn (Stable) * The beacon spawn config ID * **Type**: `Asset`, **Required**, **Computable** #### - Range (Stable) * The distance to search for a beacon to trigger * **Type**: `Integer`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - TargetSlot (Stable) * A slot to use as the target for the spawned NPC. If omitted the NPC itself will be used * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty [(Top)](#top) # List of Core Components (debug) ## Log: Action (Stable) Log a message to console. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Message (Stable) * Text to print to console. * **Type**: `String`, **Required**, **Computable** [(Top)](#top) ## Test: Action (Experimental) Test action to exercise attribute evaluation (DO NOT USE) ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Boolean (Deprecated) * Boolean True * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Double (Deprecated) * Double 0 * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** #### - Float (Deprecated) * Float 0 * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** #### - Int (Deprecated) * Int 0 * **Type**: `Integer`, **Optional** (Default: 0.0), **Computable** #### - String (Deprecated) * String Test * **Type**: `String`, **Optional** (Default: Test), **Computable** #### - Enum (Deprecated) * Enum RoleDebugFlags Collisions * **Type**: `Flag`, **Optional** (Default: Collisions), **Computable** * **Flag Values**: * `Overlaps`: Log overlapping blocks when validating position * `ProbeBlockCollisions`: Trace collisions down to block level when probing * `SteeringRole`: Debug blended steering behaviour from role like avoidance/separation * `DisplayInternalId`: Display the internal server ID for this entity * `Pathfinder`: Display pathfinder status * `DisplayStamina`: Display NPC Stamina as numerical values * `FlockDamage`: Trace flock damage events * `Collisions`: Trace collision information of motion controllers * `DisplayFreeSlots`: Display free inventory slots * `DisplayTime`: Set display name to day time * `DisplayName`: Display the role name for this entity * `DisplayLightLevel`: Display light levels * `DisplayAnim`: Display animation state * `TraceSensorFailures`: Trace failing sensors * `DisplayHP`: Display NPC HP as numerical values * `DisplayFlock`: Set display name to flock state * `DisplaySpeed`: Display speed of entity * `ValidateMath`: Validate (some) math computations in movement * `VisSeparation`: Visualize separation vector * `DisplayState`: Set display name to contents of state * `TraceSuccess`: Trace matched instructions * `MotionControllerMove`: Trace movement activity of motion controllers * `TraceFail`: Trace failed instructions * `DisplayCustom`: Display custom debug information (generated by debug components) * `VisAvoidance`: Visualize avoidance vectors * `Flock`: Trace flock events * `MotionControllerSteer`: Trace steering activity of motion controllers * `BlockCollisions`: Trace collisions down to block level * `ValidatePositions`: Validate computed movement positions are not intersecting blocks * `DisplayTarget`: Set display name to locked target type * `BeaconMessages`: Enable debugging of beacon message sending and receiving #### - EnumSet (Deprecated) * EnumSet Collisions Flock * **Type**: `FlagSet`, **Optional** (Default: \[Flock, Collisions]), **Computable** * **Flag Values**: * `Overlaps`: Log overlapping blocks when validating position * `ProbeBlockCollisions`: Trace collisions down to block level when probing * `SteeringRole`: Debug blended steering behaviour from role like avoidance/separation * `DisplayInternalId`: Display the internal server ID for this entity * `Pathfinder`: Display pathfinder status * `DisplayStamina`: Display NPC Stamina as numerical values * `FlockDamage`: Trace flock damage events * `Collisions`: Trace collision information of motion controllers * `DisplayFreeSlots`: Display free inventory slots * `DisplayTime`: Set display name to day time * `DisplayName`: Display the role name for this entity * `DisplayLightLevel`: Display light levels * `DisplayAnim`: Display animation state * `TraceSensorFailures`: Trace failing sensors * `DisplayHP`: Display NPC HP as numerical values * `DisplayFlock`: Set display name to flock state * `DisplaySpeed`: Display speed of entity * `ValidateMath`: Validate (some) math computations in movement * `VisSeparation`: Visualize separation vector * `DisplayState`: Set display name to contents of state * `TraceSuccess`: Trace matched instructions * `MotionControllerMove`: Trace movement activity of motion controllers * `TraceFail`: Trace failed instructions * `DisplayCustom`: Display custom debug information (generated by debug components) * `VisAvoidance`: Visualize avoidance vectors * `Flock`: Trace flock events * `MotionControllerSteer`: Trace steering activity of motion controllers * `BlockCollisions`: Trace collisions down to block level * `ValidatePositions`: Validate computed movement positions are not intersecting blocks * `DisplayTarget`: Set display name to locked target type * `BeaconMessages`: Enable debugging of beacon message sending and receiving #### - Asset (Deprecated) * Asset Sheep * **Type**: `Asset`, **Optional** (Default: Sheep), **Computable** #### - DoubleArray (Deprecated) * DoubleArray \[1,2] 0-10 * **Type**: `Array`, **Optional** (Default: \[1.0, 2.0]), **Computable**, **Element Type**: Double #### - StringArray (Deprecated) * StringArray \[a,b] 0-10 * **Type**: `Array`, **Optional** (Default: \[a, b]), **Computable**, **Element Type**: String [(Top)](#top) # List of Core Components (entity) ## Beacon: Sensor (Stable) Checks to see if any messages have been broadcasted by nearby NPCs. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Message (Experimental) * The message to listen for * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - Range (Experimental) * The max distance beacons should be received from * **Type**: `Double`, **Optional** (Default: 64.0), **Computable** * **Constraint**: Value must be greater than 0 #### - TargetSlot (Stable) * A slot to store the sender as a target. If omitted no target will be stored * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty #### - ConsumeMessage (Stable) * Whether the message should be consumed by this sensor * **Type**: `Boolean`, **Optional** (Default: true) ### Provides * Player target * NPC target * Dropped item target [(Top)](#top) ## Count: Sensor (Stable) Check if there is a certain number of NPCs or players within a specific range ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Count (Stable) * Specifies the allowed number of entities (inclusive) * **Type**: `Array`, **Required**, **Computable**, **Element Type**: integer * **Constraint**: Values must be greater or equal than 0, less or equal than 2147483647and in weakly ascending order #### - Range (Stable) * Range to find entities in (inclusive) * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - IncludeGroups (Stable) * Match for NPCs in these groups * **Type**: `AssetArray`, **Optional** (Default: null), **Element Type**: TagSet #### - ExcludeGroups (Stable) * Never match NPCs in these groups * **Type**: `AssetArray`, **Optional** (Default: null), **Element Type**: TagSet [(Top)](#top) ## IgnoreForAvoidance: Action (Stable) Set the target slot of an entity that should be ignored during avoidance ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - TargetSlot (Stable) * The target slot containing the entity to be ignored * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty [(Top)](#top) ## Kill: Sensor (Stable) Return true if NPC made a kill. Target position is killed entity position. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - TargetSlot (Stable) * The target slot to check if killed. If omitted, will accept any entity killed * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty ### Provides * Vector position [(Top)](#top) ## Mob: Sensor (Stable) Return true if entity matching specific attributes and filters is in range. Target is entity. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - MinRange (Stable) * Minimum range to test entities in * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - Range (Stable) * Maximum range to test entities in * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - LockOnTarget (Stable) * Matched target becomes locked target * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - LockedTargetSlot (Stable) * The target slot to use for locking on or unlocking * **Type**: `String`, **Optional** (Default: LockedTarget), **Computable** * **Constraint**: String value must be either null or not empty #### - AutoUnlockTarget (Stable) * Unlock locked target when sensor not matching it anymore * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - OnlyLockedTarget (Stable) * Test only locked target * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - IgnoredTargetSlot (Stable) * The target slot to use for ignoring * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - UseProjectedDistance (Stable) * Use the projected movement direction vector for distance, rather than the Euclidean distance * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - Prioritiser (Stable) * A prioritiser for selecting results based on additional parameters * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: ISensorEntityPrioritiser #### - Collector (Stable) * A collector which can process all checked entities and act on them based on whether they match or not * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: ISensorEntityCollector #### - Filters (Stable) * A series of entity filter sensors to test * **Type**: `Array`, **Optional** (Default: null), **Element Type**: IEntityFilter #### - GetPlayers (Stable) * Test players * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - GetNPCs (Stable) * Test mobs/NPCs * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ExcludeOwnType (Stable) * Exclude NPCs of same type as current NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** ### Constraints * Range must be greater or equal than MinRange * At least one of GetPlayers, GetNPCs must be true ### Provides * Player target * NPC target [(Top)](#top) ## OverrideAttitude: Action (Stable) Override this NPCs attitude towards the provided target for a given duration ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Attitude (Stable) * The attitude to set * **Type**: `Flag`, **Required**, **Computable** * **Flag Values**: * `HOSTILE`: is hostile towards the target * `REVERED`: reveres the target * `FRIENDLY`: is friendly towards the target * `IGNORE`: is ignoring the target * `NEUTRAL`: is neutral towards the target #### - Duration (Stable) * The duration to override for * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater than 0 ### Constraints * Must be attached to a sensor that provides one of player target, NPC target [(Top)](#top) ## Player: Sensor (Stable) Return true if player matching specific attributes and filters is in range. Target is player. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - MinRange (Stable) * Minimum range to test entities in * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - Range (Stable) * Maximum range to test entities in * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - LockOnTarget (Stable) * Matched target becomes locked target * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - LockedTargetSlot (Stable) * The target slot to use for locking on or unlocking * **Type**: `String`, **Optional** (Default: LockedTarget), **Computable** * **Constraint**: String value must be either null or not empty #### - AutoUnlockTarget (Stable) * Unlock locked target when sensor not matching it anymore * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - OnlyLockedTarget (Stable) * Test only locked target * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - IgnoredTargetSlot (Stable) * The target slot to use for ignoring * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - UseProjectedDistance (Stable) * Use the projected movement direction vector for distance, rather than the Euclidean distance * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - Prioritiser (Stable) * A prioritiser for selecting results based on additional parameters * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: ISensorEntityPrioritiser #### - Collector (Stable) * A collector which can process all checked entities and act on them based on whether they match or not * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: ISensorEntityCollector #### - Filters (Stable) * A series of entity filter sensors to test * **Type**: `Array`, **Optional** (Default: null), **Element Type**: IEntityFilter ### Constraints * Range must be greater or equal than MinRange ### Provides * Player target * NPC target [(Top)](#top) ## ReleaseTarget: Action (Stable) Clear locked target for NPC. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - TargetSlot (Stable) * The target slot to release * **Type**: `String`, **Optional** (Default: LockedTarget), **Computable** * **Constraint**: String must be not empty [(Top)](#top) ## Self: Sensor (Stable) Test if the NPC itself matches a set of entity filters ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Filters (Stable) * A series of entity filter sensors to test * **Type**: `Array`, **Required**, **Element Type**: IEntityFilter ### Provides * Vector position [(Top)](#top) ## SetMarkedTarget: Action (Stable) Explicitly sets a marked target in a given slot. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - TargetSlot (Stable) * The target slot to set a target to. * **Type**: `String`, **Optional** (Default: LockedTarget), **Computable** * **Constraint**: String must be not empty ### Constraints * Must be attached to a sensor that provides one of player target, NPC target [(Top)](#top) ## SetStat: Action (Stable) Sets (or adds to) an entity stat on the NPC. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Stat (Stable) * The entity stat to affect. * **Type**: `Asset`, **Required**, **Computable** #### - Value (Stable) * The value to set the stat to. * **Type**: `Double`, **Required**, **Computable** #### - Add (Stable) * Add the value to the existing value instead of setting it. * **Type**: `Boolean`, **Optional** (Default: false), **Computable** [(Top)](#top) ## Target: Sensor (Stable) Test if given target matches a series of criteria and optional entity filters ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - TargetSlot (Stable) * The target slot to check * **Type**: `String`, **Optional** (Default: LockedTarget), **Computable** * **Constraint**: String must be not empty #### - Range (Stable) * Maximum range of locked target * **Type**: `Double`, **Optional** (Default: 1.7976931348623157E308), **Computable** * **Constraint**: Value must be greater than 0 #### - AutoUnlockTarget (Stable) * Unlock locked target if match fails * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - Filters (Stable) * A series of entity filter sensors to test * **Type**: `Array`, **Optional** (Default: null), **Element Type**: IEntityFilter ### Provides * Player target * NPC target [(Top)](#top) # List of Core Components (interaction) ## CanInteract: Sensor (Stable) Checks whether or not the player being iterated by the interaction instruction can interact with this NPC ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - ViewSector (Stable) * View sector to test the player in * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - Attitudes (Stable) * A set of attitudes to match * **Type**: `FlagSet`, **Optional** (Default: \[NEUTRAL, FRIENDLY, REVERED]), **Computable** * **Flag Values**: * `HOSTILE`: is hostile towards the target * `REVERED`: reveres the target * `FRIENDLY`: is friendly towards the target * `IGNORE`: is ignoring the target * `NEUTRAL`: is neutral towards the target ### Constraints [(Top)](#top) ## HasInteracted: Sensor (Stable) Checks whether the currently iterated player in the interaction instruction has interacted with this NPC ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** ### Constraints [(Top)](#top) ## InteractionContext: Sensor (Stable) Checks whether the currently iterated player in the interaction instruction has interacted with this NPC in the given context ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Context (Stable) * The context of the interaction * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty ### Constraints [(Top)](#top) ## LockOnInteractionTarget: Action (Stable) Locks on to the currently iterated player in the interaction instruction ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - TargetSlot (Stable) * The target slot to use * **Type**: `String`, **Optional** (Default: LockedTarget), **Computable** * **Constraint**: String must be not empty ### Constraints [(Top)](#top) ## SetInteractable: Action (Stable) Set whether the currently iterated player in the interaction instruction should be able to interact with this NPC ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Interactable (Stable) * Toggle whether the currently iterated player in the interaction instruction should be able to interact with this NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Hint (Stable) * The interaction hint translation key to show for this player (e.g. 'interactionHints.trade') * **Type**: `String`, **Optional** (Default: null) #### - ShowPrompt (Stable) * Whether to show the F-key interaction prompt. Set to false for contextual-only interactions (e.g. shearing with tools). Defaults to true. * **Type**: `Boolean`, **Optional** (Default: true) ### Constraints [(Top)](#top) # List of Core Components (items) ## DropItem: Action (Stable) Drop an item. Can be a specific item, or from a drop table ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Delay (Stable) * Range of time to delay in seconds * **Type**: `Array`, **Optional** (Default: \[1.0, 1.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - Item (Stable) * A specific item to drop * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - DropList (Stable) * A reference to an item drop list * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - ThrowSpeed (Stable) * The throw speed to use * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater than 0 and less or equal than 3.4028234663852886e+38 #### - Distance (Stable) * The range from which to pick a distance to throw the item * **Type**: `Array`, **Optional** (Default: \[1.0, 1.0]), **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - DropSector (Stable) * The sector to spread drops in relative to view direction of NPC in degrees. * **Type**: `Array`, **Optional** (Default: \[0.0, 0.0]), **Element Type**: Double * **Constraint**: Values must be greater or equal than -360, less or equal than 360and in weakly ascending order #### - PitchHigh (Stable) * Whether to pitch high or pitch low instead * **Type**: `Boolean`, **Optional** (Default: false) ### Constraints * One (and only one) of Item, DropList must be provided [(Top)](#top) ## DroppedItem: Sensor (Stable) Triggers if a given item is within a certain range of the NPC. Will match anything if Items and Attitudes are not defined, otherwise will match items meeting either criteria. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Range (Stable) * The range within which to look * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - ViewSector (Stable) * View sector in which to look * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - LineOfSight (Stable) * Requires line of sight to item * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - Items (Stable) * A list of glob item patterns to match. If omitted, will match any item * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: Item #### - Attitudes (Stable) * Attitudes to match * **Type**: `FlagSet`, **Optional** (Default: \[]), **Computable** * **Flag Values**: * `Neutral`: Neutral * `Ignore`: Ignore * `Like`: Like * `Love`: Love * `Dislike`: Dislike ### Provides * Dropped item target [(Top)](#top) ## Inventory: Action (Stable) Add or remove a number of items from an inventory. Can also be used to equip them. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Operation (Stable) * Operation to perform * **Type**: `Flag`, **Optional** (Default: Add), **Computable** * **Flag Values**: * `Add`: Add items to inventory * `RemoveHeldItem`: Destroy the held item * `SetHotbar`: Sets the hotbar item in a specific slot * `Equip`: Equip item as weapon or armour * `ClearHeldItem`: Clear the held item * `EquipOffHand`: Equips the item from a specific off-hand slot * `Remove`: Remove items from inventory * `EquipHotbar`: Equips the item from a specific hotbar slot * `SetOffHand`: Sets the off-hand item in a specific slot #### - Count (Stable) * Number of items to add/remove * **Type**: `Integer`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Item (Stable) * Item type to add, remove, or equip * **Type**: `Asset`, **Optional** (Default: ), **Computable** #### - UseTarget (Stable) * Use the sensor-provided target for the action * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Slot (Stable) * The hotbar or off-hand to effect. Only valid for Hotbar/OffHand Set/Equip operations * **Type**: `Integer`, **Optional** (Default: 0.0), **Computable** ### Constraints * If UseTarget is true, must be attached to a sensor that provides one of player target, NPC target [(Top)](#top) ## PickUpItem: Action (Stable) Pick up an item. In hoover mode, will match to the Item array. Otherwise, requires a target to be provided e.g. by a DroppedItemSensor ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Delay (Stable) * Range of time to delay in seconds * **Type**: `Array`, **Optional** (Default: \[1.0, 1.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - Range (Stable) * The range the item will be picked up from * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - StorageTarget (Experimental) * Where to prioritise putting the item * **Type**: `Flag`, **Optional** (Default: Hotbar), **Computable** * **Flag Values**: * `Destroy`: Destroy the item * `Hotbar`: Prioritise hotbar * `Inventory`: Prioritise inventory #### - Hoover (Stable) * Suck up all items in range with optional cooldown. Can be filtered with a list of glob patterns. Ignored outside hoover mode * **Type**: `Boolean`, **Optional** (Default: false) #### - Items (Stable) * A list of glob item patterns to match for hoover mode. If omitted, will match any item. Ignored outside hoover mode * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: Item ### Constraints * If Hoover is false, must be attached to a sensor that provides dropped item target [(Top)](#top) # List of Core Components (lifecycle) ## Age: Sensor (Stable) Triggers when the age of the NPC falls between a certain range. Range is defined in terms of period (e.g. 1Y2M3W4D - 1 year, 2 months, 3 weeks, 4 days) or duration (e.g. 2DT3H4M - 2 days, 3 hours, 4 minutes) ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - AgeRange (Stable) * The age range within which to trigger * **Type**: `Array`, **Required**, **Computable**, **Element Type**: TemporalAmount * **Constraint**: Values must be greater or equal than a few seconds, less or equal than 5879611 years, in strictly ascending order and either all Periods or all Durations [(Top)](#top) ## DelayDespawn: Action (Stable) Delay the despawning cycle for some amount of time ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Time (Stable) * How long to set the to delay * **Type**: `Double`, **Required** * **Constraint**: Value must be greater than 0 #### - Shorten (Stable) * Set the delay to either the current delay or the given time. Whatever is smaller. * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## Despawn: Action (Stable) Trigger the NPC to start the despawning cycle. If the script contains a despawn sensor it will run that action/motion before removing. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Force (Stable) * Force the NPC to remove automatically * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## Die: Action (Stable) Kill the NPC ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## Remove: Action (Stable) Erase the target entity from the world (no death animation). ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - UseTarget (Stable) * Use the sensor-provided target for the action * **Type**: `Boolean`, **Optional** (Default: true), **Computable** ### Constraints * If UseTarget is true, must be attached to a sensor that provides one of player target, NPC target [(Top)](#top) ## Role: Action (Stable) Change the Role of the NPC ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Role (Stable) * The name of the Role to change to * **Type**: `Asset`, **Required**, **Computable** #### - ChangeAppearance (Stable) * Whether the appearance of the new Role should be used * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - State (Stable) * State name to set * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String must be a valid state string. A main state must be included before the period (e.g. Main.Test). State strings consist of a main state and a sub state (e.g. Main.Test). If nested within a substate, the main state may be omitted (e.g. .Test) when referencing. [(Top)](#top) ## Spawn: Action (Experimental) Spawn an NPC ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - SpawnDirection (Experimental) * Direction of spawn cone relative to view direction (in degrees) * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than -180 and less or equal than 180 #### - SpawnAngle (Experimental) * Cone width of spawn direction (in degrees) * **Type**: `Double`, **Optional** (Default: 360.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - FanOut (Experimental) * Fan NPCs out equally over angle * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - DistanceRange (Stable) * Distance from spawner to spawn * **Type**: `Array`, **Optional** (Default: \[1.0, 1.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater than 0, less or equal than 128and in weakly ascending order #### - CountRange (Stable) * Number of NPCs to spawn * **Type**: `Array`, **Optional** (Default: \[5, 5]), **Computable**, **Element Type**: integer * **Constraint**: Values must be greater than 0, less or equal than 100and in weakly ascending order #### - DelayRange (Stable) * Time between consecutive spawns in seconds * **Type**: `Array`, **Optional** (Default: \[0.25, 0.25]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - Kind (Experimental) * NPC role to spawn * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - Flock (Stable) * Flock definition to spawn * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - LaunchAtTarget (WorkInProgress) * Launch the spawned NPC at target position/entity * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - PitchHigh (Stable) * If launching at a target, use high pitch * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - LaunchSpread (Stable) * The radius of the circle centred on the target within which to spread thrown NPCs * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - JoinFlock (Stable) * Whether to join the parent NPC's flock * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - SpawnState (Stable) * An optional state to set on the spawned NPC if it exists * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - SpawnSubState (Stable) * An optional substate to set on the spawned NPC if it exists * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty ### Constraints * If LaunchAtTarget is true, must be attached to a sensor that provides one of player target, NPC target, dropped item target, vector position [(Top)](#top) # List of Core Components (message) ## Beacon: Action (Experimental) Let the NPC send out a message to a target group of entities within a certain distance. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Message (Experimental) * Message to send to targets * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - Range (Experimental) * The maximum range to send the message * **Type**: `Double`, **Optional** (Default: 64.0) * **Constraint**: Value must be greater than 0 #### - TargetGroups (Experimental) * The target group(s) to send the message to * **Type**: `AssetArray`, **Required**, **Computable**, **Element Type**: TagSet #### - SendTargetSlot (Stable) * The target slot of the marked entity to send. Omit to send own position * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - ExpirationTime (Experimental) * The number of seconds that the message should last and be acknowledged by the receiving NPC. -1 represents infinite time. * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 or equal -1 #### - SendCount (Experimental) * Tne number of entities to send the message to. -1 will send to all. Entities will be chosen with a roughly even random distribution using reservoir sampling * **Type**: `Integer`, **Optional** (Default: -1) * **Constraint**: Value must be greater than 0 or equal -1 [(Top)](#top) ## Notify: Action (Stable) Directly notifies a target NPC with a beacon message ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Message (Stable) * The message to send * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - ExpirationTime (Experimental) * The number of seconds that the message should last and be acknowledged by the receiving NPC. -1 represents infinite time. * **Type**: `Double`, **Optional** (Default: 1.0) * **Constraint**: Value must be greater or equal than 0 or equal -1 #### - UseTargetSlot (Stable) * A marked target to send to instead of the target provided by a sensor. Omit to use the target provided by the sensor. * **Type**: `String`, **Optional** (Default: null) * **Constraint**: String value must be either null or not empty ### Constraints * If UseTargetSlot is false, must be attached to a sensor that provides NPC target [(Top)](#top) # List of Core Components (movement) ## Crouch: Action (Stable) Set NPC crouching state ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Crouch (Stable) * True for crouching, false for non-crouching * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## InAir: Sensor (Stable) Return true if NPC is not on ground. No target is returned. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## MotionController: Sensor (Experimental) Test if specific motion controller is active. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - MotionController (Experimental) * Motion controller name to test for * **Type**: `String`, **Required** * **Constraint**: String must be not empty [(Top)](#top) ## Nav: Sensor (Stable) Queries navigation state ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - NavStates (Stable) * Trigger when path finder is in one of the states or empty to match all * **Type**: `FlagSet`, **Optional** (Default: \[]), **Computable** * **Flag Values**: * `PROGRESSING`: Moving or computing a path * `INIT`: Doing nothing * `AT_GOAL`: Reached target * `BLOCKED`: Can't advance any further * `ABORTED`: Search stopped but target not reached * `DEFER`: Delaying/unable to advance #### - ThrottleDuration (Stable) * Minimum time in seconds the path finder isn't able to reach target or 0 to ignore * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - TargetDelta (Stable) * Minimum distance target has moved since path was computed or 0 to ignore * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 [(Top)](#top) ## OnGround: Sensor (Stable) Return true if NPC is on ground. No target is returned. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## OverrideAltitude: Action (Stable) Temporarily override the preferred altitude of a flying NPC. Must be refreshed each tick ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - DesiredAltitudeRange (Stable) * The desired altitude range * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order [(Top)](#top) ## RecomputePath: Action (Stable) Force recomputation of path finder solution ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) # List of Core Components (npc) ## CompleteTask: Action (Stable) Complete a task. Tasks are picked based on those provided to SensorCanInteract. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Slot (Stable) * The animation slot to play on * **Type**: `Flag`, **Required** * **Flag Values**: * `Status`: Status * `Action`: Action * `Face`: Face #### - Animation (Stable) * The animation ID to play * **Type**: `String`, **Optional** (Default: null), **Computable** #### - PlayAnimation (Stable) * Whether or not to play the animation associated with completing this task * **Type**: `Boolean`, **Optional** (Default: true), **Computable** ### Constraints [(Top)](#top) ## HasTask: Sensor (Stable) Checks whether or not the player being iterated by the interaction instruction has any of the given tasks ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - TasksById (Stable) * Completable tasks to match by name * **Type**: `Array`, **Required**, **Computable**, **Element Type**: String * **Constraint**: String array must not be empty ### Constraints [(Top)](#top) ## Mount: Action (Stable) Enable the player to mount the entity ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - AnchorX (Stable) * The X anchor pos * **Type**: `Double`, **Required**, **Computable** #### - AnchorY (Stable) * The Y anchor pos * **Type**: `Double`, **Required**, **Computable** #### - AnchorZ (Stable) * The Z anchor pos * **Type**: `Double`, **Required**, **Computable** #### - MovementConfig (Stable) * The MovementConfig to use for this mount * **Type**: `String`, **Required**, **Computable** [(Top)](#top) ## OpenBarterShop: Action (Stable) Open the barter shop UI for the current player ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Shop (Stable) * The barter shop to open * **Type**: `Asset`, **Required**, **Computable** ### Constraints [(Top)](#top) ## OpenShop: Action (Stable) Open the shop UI for the current player ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Shop (Stable) * The shop to open * **Type**: `Asset`, **Required**, **Computable** ### Constraints [(Top)](#top) ## StartObjective: Action (Stable) Start the given objective for the currently iterated player in the interaction instruction ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Objective (Stable) * The task to start * **Type**: `Asset`, **Required**, **Computable** ### Constraints [(Top)](#top) # List of Core Components (path) ## MakePath: Action (WorkInProgress) Constructs a transient path for the NPC based on a series of rotations and distances ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Path (WorkInProgress) * A transient path definition * **Type**: `ObjectRef`, **Required**, **Object Type**: Path [(Top)](#top) ## Path: Sensor (Stable) Find a path based on various criteria. Provides the position of the nearest waypoint and the path itself ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Path (Stable) * The name of the path. If left blank, will find the nearest path * **Type**: `String`, **Optional** (Default: null), **Computable** #### - Range (Stable) * The range to test to nearest waypoint. 0 is unlimited * **Type**: `Double`, **Optional** (Default: 10.0), **Computable** * **Constraint**: Value must be greater than 0 #### - PathType (Stable) * The type of path to search for * **Type**: `Flag`, **Optional** (Default: AnyPrefabPath), **Computable** * **Flag Values**: * `CurrentPrefabPath`: a path from the prefab the NPC spawned in * `TransientPath`: a transient path (testing purposes only) * `AnyPrefabPath`: a path from any prefab * `WorldPath`: named world path ### Constraints * If PathType is WorldPath, the following must apply to Path: String must be not empty ### Provides * Vector position * Path [(Top)](#top) # List of Core Components (statemachine) ## IsBusy: Sensor (Stable) Tests if an NPC is in one of the defined Busy States. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## ParentState: Action (Stable) Set the main state of NPC from within a component ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - State (Stable) * The alias of the external state to set, as defined by \_ImportStates in parameters * **Type**: `String`, **Required** * **Constraint**: String must be a valid state string. A main state must be included before the period (e.g. Main.Test). Only the main state can be included. ### Constraints * May only be included within a component [(Top)](#top) ## State: Action (Stable) Set state of NPC. The state can be queried with a sensor later on. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - State (Stable) * State name to set * **Type**: `String`, **Required** * **Constraint**: String must be a valid state string. State strings consist of a main state and a sub state (e.g. Main.Test). If nested within a substate, the main state may be omitted (e.g. .Test) when referencing. #### - ClearState (Stable) * Clear the state of things like set once flags on transition * **Type**: `Boolean`, **Optional** (Default: true) ### Constraints [(Top)](#top) ## State: Sensor (Stable) Signal if NPC is set to specific state. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - State (Stable) * State to compare to * **Type**: `String`, **Required** * **Constraint**: String must be a valid state string. State strings consist of a main state and a sub state (e.g. Main.Test). If nested within a substate, the main state may be omitted (e.g. .Test) when referencing. #### - IgnoreMissingSetState (Stable) * Override and ignore checks for matching setter action that sets this state. Intended for use in cases such as the FlockState action which sets the state via another NPC * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## ToggleStateEvaluator: Action (Stable) Enable or disable the NPC's state evaluator ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether or not to enable the state evaluator * **Type**: `Boolean`, **Required** [(Top)](#top) # List of Core Components (timer) ## Alarm: Sensor (Stable) Check the state of a named alarm and optionally clear it if the time has passed ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Name (Stable) * The name of the alarm to check * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - State (Stable) * The state to check for * **Type**: `Flag`, **Required**, **Computable** * **Flag Values**: * `SET`: Set * `UNSET`: Not set * `PASSED`: Passed #### - Clear (Stable) * Whether to clear the alarm (unset it) if it has passed * **Type**: `Boolean`, **Optional** (Default: false), **Computable** [(Top)](#top) ## SetAlarm: Action (Stable) Set a named alarm on the NPC ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Name (Stable) * The name of the alarm to set * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - DurationRange (Stable) * The duration range from which to pick a duration to set the alarm for. \[ "P0D", "P0D" ] will unset the alarm * **Type**: `Array`, **Required**, **Computable**, **Element Type**: TemporalAmount * **Constraint**: Values must be greater or equal than a few seconds, less or equal than 5879611 years, in weakly ascending order and either all Periods or all Durations [(Top)](#top) ## Timer: Sensor (Stable) Tests if a timer exists and the value is within a certain range. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Name (Stable) * The name of the timer * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - State (Stable) * The timer's state to check * **Type**: `Flag`, **Optional** (Default: ANY) * **Flag Values**: * `PAUSED`: Paused * `RUNNING`: Running * `STOPPED`: Stopped * `ANY`: Any #### - TimeRemainingRange (Stable) * The acceptable remaining time on the timer. * **Type**: `Array`, **Optional** (Default: \[0.0, 1.7976931348623157E308]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order [(Top)](#top) ## TimerContinue: Action (Stable) Continue a timer ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Name (Stable) * The name of the timer * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty [(Top)](#top) ## TimerModify: Action (Stable) Modify values of a timer ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Name (Stable) * The name of the timer * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - AddValue (Stable) * Add value to the timer * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - MaxValue (Stable) * Set the restart value range the timer can have. If \[ 0, 0 ] (default) it will be ignored * **Type**: `Array`, **Optional** (Default: \[0.0, 0.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308 #### - Rate (Stable) * Set the rate at which the timer will decrease. If 0 (default) it will be ignored * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - SetValue (Stable) * Set the value of the timer. If 0 (default) it will be ignored * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - Repeating (Stable) * Whether to repeat the timer when countdown finishes * **Type**: `Boolean`, **Optional** (Default: false), **Computable** [(Top)](#top) ## TimerPause: Action (Stable) Pause a timer ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Name (Stable) * The name of the timer * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty [(Top)](#top) ## TimerRestart: Action (Stable) Restart a timer. Will be set to the original initial values. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Name (Stable) * The name of the timer * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty [(Top)](#top) ## TimerStart: Action (Stable) Start a timer ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Name (Stable) * The name of the timer * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - StartValueRange (Stable) * The range from which to pick an initial value to start at * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - RestartValueRange (Stable) * The range from which to pick a value when the timer is restarted. The upper bound is also the timer max * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - Rate (Stable) * The rate at which the timer will decrease * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - Repeating (Stable) * Whether to repeat the timer when countdown finishes * **Type**: `Boolean`, **Optional** (Default: false), **Computable** [(Top)](#top) ## TimerStop: Action (Stable) Stop a timer ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Name (Stable) * The name of the timer * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty [(Top)](#top) # List of Core Components (utility) ## AdjustPosition: Sensor (Stable) Perform adjustments to the wrapped sensor's returned position ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensor (Stable) * Sensor to wrap * **Type**: `ObjectRef`, **Required**, **Object Type**: Sensor #### - Offset (Stable) * The offset to apply to the returned position from the sensor * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double ### Provides * Vector position [(Top)](#top) ## And: Sensor (Stable) Evaluate all sensors and execute action only when all sensor signal true. Target is provided by first sensor. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensors (Stable) * List of sensors * **Type**: `Array`, **Required**, **Element Type**: Sensor * **Constraint**: Array must not be empty #### - AutoUnlockTargetSlot (Stable) * A target slot to unlock when sensor doesn't match anymore * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty [(Top)](#top) ## Any: Sensor (Stable) Sensor always signals true but doesn't return a target. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## Eval: Sensor (Experimental) Evaluate javascript expression and test truth value. Current values accessible are 'health' and 'blocked'. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Expression (Experimental) * Javascript expression * **Type**: `String`, **Required** * **Constraint**: String must be not empty [(Top)](#top) ## Flag: Sensor (Stable) Test if a named flag is set or not ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Name (Stable) * The name of the flag * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - Set (Stable) * Whether the flag should be set or not * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## Not: Sensor (WorkInProgress) Return true when the given sensor test fails. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensor (Stable) * Sensor to test * **Type**: `ObjectRef`, **Required**, **Object Type**: Sensor #### - UseTargetSlot (Stable) * A locked target slot to feed to action (if available) * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - AutoUnlockTargetSlot (Stable) * A target slot to unlock when sensor doesn't match anymore * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty [(Top)](#top) ## Nothing: Action (Stable) Do nothing. Used often as placeholder. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## Or: Sensor (Stable) Evaluate sensors and execute action when at least one sensor signals true. Target is provided by first sensor signalling true. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensors (Stable) * List of sensors * **Type**: `Array`, **Required**, **Element Type**: Sensor * **Constraint**: Array must not be empty #### - AutoUnlockTargetSlot (Stable) * A target slot to unlock when sensor doesn't match anymore * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty [(Top)](#top) ## Random: Action (Stable) Execute a single random action from a list of weighted actions. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Actions (Stable) * List of possible actions * **Type**: `Array`, **Required**, **Element Type**: WeightedAction [(Top)](#top) ## Random: Sensor (Stable) Alternates between returning true and false for specified random durations ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - TrueDurationRange (Stable) * The duration range to pick a random period to return true * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - FalseDurationRange (Stable) * The duration range to pick a random period to return false * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order [(Top)](#top) ## ResetInstructions: Action (Stable) Force reset instructionList, either by name, or as a whole ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Instructions (Stable) * The instructionList to reset. If left empty, will reset all instructionList * **Type**: `Array`, **Optional** (Default: null), **Computable**, **Element Type**: String * **Constraint**: Strings in array must not be empty [(Top)](#top) ## Sequence: Action (Stable) Execute list of actions. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Blocking (Stable) * Do not execute an action unless the previous action could execute * **Type**: `Boolean`, **Optional** (Default: false) #### - Atomic (Stable) * Only execute actions if all actions can be executed * **Type**: `Boolean`, **Optional** (Default: false) #### - Actions (Stable) * List of actions * **Type**: `ObjectRef`, **Required**, **Object Type**: ActionList [(Top)](#top) ## SetFlag: Action (Stable) Set a named flag to a boolean value ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Name (Stable) * The name of the flag * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - SetTo (Stable) * The value to set the flag to * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## Switch: Sensor (Stable) Check if a computed boolean is true ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Switch (Stable) * The switch to check * **Type**: `Boolean`, **Required**, **Computable** [(Top)](#top) ## Timeout: Action (Stable) Delay an action by a time which is randomly picked between a given minimum and maximum value. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Delay (Stable) * Range of time to delay in seconds * **Type**: `Array`, **Optional** (Default: \[1.0, 1.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 1.7976931348623157e+308and in weakly ascending order #### - DelayAfter (Stable) * Delay after executing the action * **Type**: `Boolean`, **Optional** (Default: false) #### - Action (Stable) * Optional action to delay * **Type**: `ObjectRef`, **Optional** (Default: null), **Object Type**: Action [(Top)](#top) ## ValueProviderWrapper: Sensor (Stable) Wraps a sensor and passes down some additional parameter overrides pulled from the value store ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - PassValues (Stable) * Used to enable/disable passing of values in components * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensor (Stable) * Sensor to wrap * **Type**: `ObjectRef`, **Required**, **Object Type**: Sensor #### - ValueToParameterMappings (Stable) * The mappings of values to override parameters * **Type**: `Array`, **Required**, **Element Type**: ValueToParameterMapping * **Constraint**: Array must not be empty [(Top)](#top) # List of Core Components (world) ## Block: Sensor (Experimental) Checks for one of a set of blocks in the nearby area and caches the result until explicitly reset or the targeted block changes/is removed. All block sensors with the same sought blockset share the same targeted block once found ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Range (Stable) * The range to search for the blocks in * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 1.7976931348623157e+308 #### - MaxHeight (Stable) * The vertical range to search for the blocks in * **Type**: `Double`, **Optional** (Default: 4.0), **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 1.7976931348623157e+308 #### - Blocks (Stable) * The set of blocks to search for * **Type**: `Asset`, **Required**, **Computable** #### - Random (Stable) * Whether to pick at random from within the matched blocks or pick the closest * **Type**: `Boolean`, **Optional** (Default: false), **Computable** #### - Reserve (Stable) * Whether to reserve the found block to prevent other NPCs selecting it * **Type**: `Boolean`, **Optional** (Default: false), **Computable** ### Provides * Vector position [(Top)](#top) ## BlockChange: Sensor (Stable) Matches when a block from a blockset within a certain range is changed or interacted with ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Range (Stable) * Max range to listen in * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - SearchType (Stable) * Whether to listen for events triggered by players, npcs, or both in a certain order * **Type**: `Flag`, **Optional** (Default: PlayerOnly), **Computable** * **Flag Values**: * `NpcOnly`: search only for events triggered by npcs * `PlayerFirst`: search for events triggered by players first * `PlayerOnly`: search only for events triggered by players * `NpcFirst`: search for events triggered by npcs first #### - TargetSlot (Stable) * A target slot to place the target in. If omitted, no slot will be used * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - BlockSet (Stable) * Block set to listen for * **Type**: `Asset`, **Required**, **Computable** #### - EventType (Stable) * The event type to listen for * **Type**: `Flag`, **Optional** (Default: DAMAGE), **Computable** * **Flag Values**: * `DESTRUCTION`: On block destruction * `INTERACTION`: On block use interaction * `DAMAGE`: On block damage ### Provides * Player target * NPC target [(Top)](#top) ## BlockType: Sensor (Stable) Checks if the block at the given position matches the provided block set ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Sensor (Stable) * Sensor to wrap * **Type**: `ObjectRef`, **Required**, **Object Type**: Sensor #### - BlockSet (Stable) * Block set to check against * **Type**: `Asset`, **Required**, **Computable** [(Top)](#top) ## CanPlaceBlock: Sensor (Stable) Test if the currently set block can be placed at the relative position given direction and offset ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Direction (Stable) * The direction to place relative to heading * **Type**: `Flag`, **Optional** (Default: Forward), **Computable** * **Flag Values**: * `Left`: Left * `Backward`: Backward * `Right`: Right * `Forward`: Forward #### - Offset (Stable) * The offset to place at * **Type**: `Flag`, **Optional** (Default: BodyPosition), **Computable** * **Flag Values**: * `BodyPosition`: BodyPosition * `FootPosition`: FootPosition * `HeadPosition`: HeadPosition #### - RetryDelay (Stable) * The amount of time to delay if a placement fails before trying to place something again * **Type**: `Double`, **Optional** (Default: 5.0), **Computable** * **Constraint**: Value must be greater than 0 #### - AllowEmptyMaterials (Stable) * Whether it should be possible to replace blocks that have empty material * **Type**: `Boolean`, **Optional** (Default: false), **Computable** ### Provides * Vector position [(Top)](#top) ## EntityEvent: Sensor (Stable) Matches when an entity from a specific NPC group within a certain range is damaged, killed, or interacted with ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Range (Stable) * Max range to listen in * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - SearchType (Stable) * Whether to listen for events triggered by players, npcs, or both in a certain order * **Type**: `Flag`, **Optional** (Default: PlayerOnly), **Computable** * **Flag Values**: * `NpcOnly`: search only for events triggered by npcs * `PlayerFirst`: search for events triggered by players first * `PlayerOnly`: search only for events triggered by players * `NpcFirst`: search for events triggered by npcs first #### - TargetSlot (Stable) * A target slot to place the target in. If omitted, no slot will be used * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty #### - NPCGroup (Stable) * NPC group to listen for * **Type**: `Asset`, **Required**, **Computable** #### - EventType (Stable) * The event type to listen for * **Type**: `Flag`, **Optional** (Default: DAMAGE), **Computable** * **Flag Values**: * `DEATH`: On dying * `INTERACTION`: On use interaction * `DAMAGE`: On taking damage #### - FlockOnly (Stable) * Whether to only listen for flock events * **Type**: `Boolean`, **Optional** (Default: false), **Computable** ### Provides * Player target * NPC target [(Top)](#top) ## InWater: Sensor (Stable) Check if NPC is currently in water ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** [(Top)](#top) ## Leash: Sensor (Stable) Triggers when the NPC is outside a specified range from the leash point ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Range (Stable) * The farthest distance allowed from the leash point * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 ### Provides * Vector position [(Top)](#top) ## Light: Sensor (Stable) Check the light levels of the block an entity is standing on. Can test light intensity, sky light or block channel levels. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - LightRange (Stable) * The light intensity percentage range * **Type**: `Array`, **Optional** (Default: \[0.0, 100.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 100and in weakly ascending order #### - SkyLightRange (Stable) * The sky light percentage range * **Type**: `Array`, **Optional** (Default: \[0.0, 100.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 100and in weakly ascending order #### - SunlightRange (Stable) * The sunlight percentage range * **Type**: `Array`, **Optional** (Default: \[0.0, 100.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 100and in weakly ascending order #### - RedLightRange (Stable) * The red light percentage range * **Type**: `Array`, **Optional** (Default: \[0.0, 100.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 100and in weakly ascending order #### - GreenLightRange (Stable) * The green light percentage range * **Type**: `Array`, **Optional** (Default: \[0.0, 100.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 100and in weakly ascending order #### - BlueLightRange (Stable) * The blue light percentage range * **Type**: `Array`, **Optional** (Default: \[0.0, 100.0]), **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 100and in weakly ascending order #### - UseTargetSlot (Stable) * A target slot to check. If omitted, will check self * **Type**: `String`, **Optional** (Default: null), **Computable** * **Constraint**: String value must be either null or not empty [(Top)](#top) ## PlaceBlock: Action (Stable) Place a block (chosen by another action) at a position returned by a Sensor if close enough ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Range (Stable) * The range to target position before block will be placed * **Type**: `Double`, **Optional** (Default: 3.0), **Computable** * **Constraint**: Value must be greater than 0 #### - AllowEmptyMaterials (Stable) * Whether it should be possible to replace blocks that have empty material * **Type**: `Boolean`, **Optional** (Default: false), **Computable** ### Constraints * Must be attached to a sensor that provides one of vector position [(Top)](#top) ## ReadPosition: Sensor (Stable) Read a stored position with some conditions ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Slot (Stable) * The slot to read the position from * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - MinRange (Stable) * Minimum range from stored position * **Type**: `Double`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 #### - Range (Stable) * Maximum range from stored position * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - UseMarkedTarget (Stable) * Whether to read from a marked target slot instead of a position slot * **Type**: `Boolean`, **Optional** (Default: false), **Computable** ### Provides * Vector position [(Top)](#top) ## ResetBlockSensors: Action (Stable) Resets a specific block sensor by name, or all block sensors by clearing the current targeted block ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - BlockSets (Stable) * The searched blocksets to reset block sensors for. If left empty, will reset all block sensors and found blocks * **Type**: `AssetArray`, **Optional** (Default: null), **Computable**, **Element Type**: BlockSet [(Top)](#top) ## ResetPath: Action (Stable) Resets the current patrol path this NPC follows. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) [(Top)](#top) ## ResetSearchRays: Action (Stable) Resets a specific search ray sensor cached position by name, or all search ray sensors ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Names (Stable) * The search ray sensor ids. If left empty, will reset all search ray sensors * **Type**: `Array`, **Optional** (Default: null), **Computable**, **Element Type**: String * **Constraint**: Strings in array must not be empty [(Top)](#top) ## SearchRay: Sensor (Stable) Fire a ray at a specific angle to see if what it hits matches a given sought block ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Name (Stable) * The id of this search ray sensor so the position can be cached * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty #### - Angle (Stable) * Angle to fire the ray. Horizontal is 0. Positive is downwards * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater or equal than -90 and less or equal than 90 #### - Range (Stable) * How far to search * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 and less or equal than 96 #### - Blocks (Stable) * The blockset to search for * **Type**: `Asset`, **Required**, **Computable** #### - MinRetestAngle (Stable) * The minimum change in NPC rotation before rays stop being throttled * **Type**: `Double`, **Optional** (Default: 5.0), **Computable** * **Constraint**: Value must be greater or equal than 0 and less or equal than 360 #### - MinRetestMove (Stable) * The minimum distance the NPC needs to move while facing the same direction before rays stop being throttled * **Type**: `Double`, **Optional** (Default: 1.0), **Computable** * **Constraint**: Value must be greater than 0 #### - ThrottleTime (Stable) * The delay between retests when an NPC is facing the same direction * **Type**: `Double`, **Optional** (Default: 0.5), **Computable** * **Constraint**: Value must be greater than 0 ### Provides * Vector position [(Top)](#top) ## SetBlockToPlace: Action (Stable) Set the block type the NPC will place ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Block (Stable) * The block item type * **Type**: `Asset`, **Required**, **Computable** [(Top)](#top) ## SetLeashPosition: Action (Stable) Sets the NPCs current position to the spawn/leash position to be used with the Leash Sensor. ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - ToCurrent (Stable) * Set to the NPCs current position. * **Type**: `Boolean`, **Optional** (Default: false) #### - ToTarget (Stable) * Set to the target position. * **Type**: `Boolean`, **Optional** (Default: false) ### Constraints * At least one of ToCurrent, ToTarget must be true * If ToTarget is true, must be attached to a sensor that provides one of player target, NPC target, dropped item target [(Top)](#top) ## StorePosition: Action (Stable) Store the position from the attached sensor ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - Slot (Stable) * The slot to store the position in * **Type**: `String`, **Required**, **Computable** * **Constraint**: String must be not empty [(Top)](#top) ## Time: Sensor (Stable) Check if the day/year time is within some specified time. If you want to check a range of time which crosses through midnight and switches to the next day, use the greater time as the min value and the lesser value as the max value. ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Period (Stable) * The time period to trigger within * **Type**: `Array`, **Required**, **Computable**, **Element Type**: Double * **Constraint**: Values must be greater or equal than 0, less or equal than 24 #### - CheckDay (Stable) * Check the day time. When using a double the values go from \[.00, .99]. Don't get confused with there only being 60 minutes in an hour. * **Type**: `Boolean`, **Optional** (Default: true) #### - CheckYear (WorkInProgress) * Check the year time. When using a double the values go from \[.00, .99]. Don't get confused with there only being 60 minutes in an hour. * **Type**: `Boolean`, **Optional** (Default: false) #### - ScaleDayTimeRange (Stable) * Whether to use a relative scale for the day time. Sunrise will be at relative 6, Noon at 12, and Sunset at 18, regardless of actual in-game time * **Type**: `Boolean`, **Optional** (Default: true) [(Top)](#top) ## TriggerSpawners: Action (Stable) Trigger all, or up to a certain number of manual spawn markers in a radius around the NPC ### Attributes #### - Once (Stable) * Execute only once * **Type**: `Boolean`, **Optional** (Default: false) #### - SpawnMarker (Stable) * The spawn marker type to trigger * **Type**: `Asset`, **Optional** (Default: null), **Computable** #### - Range (Stable) * The range within which to trigger spawn markers * **Type**: `Double`, **Required**, **Computable** * **Constraint**: Value must be greater than 0 #### - Count (Stable) * The number of markers to randomly trigger (0 will trigger all matching validators) * **Type**: `Integer`, **Optional** (Default: 0.0), **Computable** * **Constraint**: Value must be greater or equal than 0 [(Top)](#top) ## Weather: Sensor (Stable) Matches the current weather at the NPCs position against a set of weather globs ### Attributes #### - Once (Stable) * Sensor only triggers once * **Type**: `Boolean`, **Optional** (Default: false) #### - Enabled (Stable) * Whether this sensor should be enabled on the NPC * **Type**: `Boolean`, **Optional** (Default: true), **Computable** #### - Weathers (Stable) * The glob patterns to match against weather * **Type**: `AssetArray`, **Required**, **Computable**, **Element Type**: Weather [(Top)](#top) --- Introduction Source: https://hytalemodding.dev/en/docs/official-documentation All of the documentation under the "Official Documentation" category is provided to us by Hypixel Studios Canada, Inc. This documentation is provided as-is and may be subject to change without notice. If you've found a issue with this documentation, please create a ticket on our [Discord Server](https://discord.gg/hytalemodding) and we will look into it. You can also email us at `hello@hytalemodding.dev` for such requests. --- Frequently Asked Questions Source: https://hytalemodding.dev/en/docs/established-information/faq On this page, we'll answer some of your Frequently Asked Questions. ## 1. Can the client be modded? No, the client is not able to be modded, although the Client will not have control over how the game and the UI looks. The server decides the visuals, more like the "Resource Packs" available in Minecraft. The server decides what mods are used ## 2. What Network Protocol will be used? Hytale will use the QUIC transport protocol. For context, the two main Internet protocols are UDP and TCP. * UDP is connectionless, fast, fire-and-forget packets but has less reliability as packets can be lost. * TCP is connection-based, slower than UDP, can guarantee packet delivery with much more reliability. Both are pretty fast in modern times, games can run fine on both (but generally prefer UDP). QUIC is a **hybrid protocol** that builds off UDP to get the same speed benefits, but adds some layers of reliability like TCP. Essentially, a solid choice for game development that blends speed and reliability. ## 3. What are Transfer Packets? Transfer packets in Hytale are small data payloads *(4kb)* that allow players to move from one server to another while carrying information. They are not equivalent to something like BungeeCord or Velocity and are primarily intended for smaller servers. Unlike BungeeCord, they do not manage network-wide features such as global plugins. Implementing DDOS protection would also be incredibly hard for smaller networks by using transfer packets. Transfer packets work quite well in scenarios such as small server networks or hubs where players will hop between servers without the loss of progress. For example, a player might finish a dungeon on one server and then move to a lobby or different game mode with their inventory and stats intact. This lessens server costs and enables the developers to put more effort into gameplay improvement rather than complicated network setups. ## 4. Will Hytale support dedicated servers? Yes, Hytale will support dedicated servers. This allows server owners to host their own Hytale servers on their own hardware or through third-party hosting services. Dedicated servers provide more control over server settings, mods, and performance compared to using official hosting solutions. ## 5. Will Hytale support modding on consoles? As of now, Hytale modding is primarily focused on PC platforms. --- Developer Q&A Technical Insights Source: https://hytalemodding.dev/en/docs/established-information/developer-qa-insights # Developer Q\&A Technical Insights This extensive Q\&A session with Hytale developers reveals critical technical details about the game's architecture, modding philosophy, gameplay systems, and development approach. ## Technical Architecture ### Network & Infrastructure * **Protocol**: Uses QUIC (reliable UDP with unreliable channels) instead of TCP * **Server Compatibility**: Runs on any platform supporting Java 25 * **Connection Method**: Direct IP initially, server discovery planned post-launch * **Data Layer**: Current custom serialization format will be replaced post-launch * **Performance**: Multi-core support - each world has main thread + parallel execution * **Rendering**: OpenGL 3.3 for Mac compatibility, potential future Vulkan/Metal migration * **Tick Model**: Base server tick rate is 30 TPS by default; can be changed using server plugins. ### Security & Distribution * **No Client-Side Code Execution**: Prevents remote code execution exploits * **Downloads Limited To**: Configuration files and assets only * **Mod Distribution**: Community platforms (CurseForge, Modrinth), no immediate in-game marketplace * **Server Hosting**: Available day 1, no business agreements required (just EULA/TOS) ## Modding Capabilities ### Server-Side Power * **Full Java Access**: Database connections, web requests, any Java functionality * **Custom Libraries**: Can create Lua scripting, ML frameworks, or any Java library * **Server Modification**: Shared source code allows heavy server modifications * **Hot Reload**: Supported for most asset types * **Documentation**: Public GitBook planned, though initially sparse ### Content Creation (No Code Required) * **World Generation**: Custom biomes and maps without Java * **NPCs & Items**: JSON-based configuration * **Crafting Recipes**: Data-driven system * **Visual Scripting**: Replaces command blocks, fully sandboxed * **Prefab System**: Sophisticated building blocks with in-game editor ### Advanced Modding * **Combat System**: Data-driven interaction system for attack chains and abilities * **Sub-Hitboxes**: Support for complex boss mechanics (needs improvement) * **Status Effects**: Buff/debuff system with custom effects and stats * **Custom UI**: NoesisGUI transition enables powerful interface customization * **Block Physics**: Selective system (trees fall, but placed blocks don't) ## Gameplay Systems ### Core Mechanics * **Stamina System**: No hunger by default (can be modded in) * **Gravity**: Selective block physics - trees collapse, buildings can float * **Lighting**: Major overhaul to fix model/voxel inconsistencies * **World Height**: Currently limited, may change with voxel storage updates * **Automation**: No redstone equivalent at launch (moddable) ### Player Systems * **Character Models**: Humans by default, changeable in creative mode * **Multiplayer Avatars**: Server-controlled (no custom models in multiplayer) * **Skins**: Full customization possible ("mod yourself into a potato") * **Shapeshifting**: Transformation potions exist for fun/modding ### World & NPCs * **Faction System**: Living world with dynamic NPC interactions * **Village Systems**: Planned dynamic villages with relationships and behaviors * **Chunk Loading**: Entities unload when out of all players' render distance * **Seeds**: Shareable world generation seeds supported ## Development Philosophy ### Release Strategy * **Base Game Priority**: Adventure mode is primary focus, modding architecture supports it * **Tech Debt**: Acknowledged as necessary for release, commitment to improvement * **Update Frequency**: Very frequent updates planned, especially post-launch * **Version Policy**: Always latest version, but servers can run modified versions ### Community Focus * **Creator Support**: Development bounties planned for community contributors * **Tutorials**: Official modding tutorials planned with partners * **Feedback Integration**: Strong commitment to community-driven improvements * **Accessibility**: Designed for lower-end hardware, reasonable system requirements ### Tools & Documentation * **Blockbench Integration**: Replaces custom "Hytale Model Maker" * **Machinima Tools**: Full cinematic creation capabilities * **Creative Tools**: Major reveal planned for building/creation features * **Source Access**: Server code will be unobfuscated with developer comments ## Platform Support * **Current**: Windows (primary) * **Planned**: Mac/Linux support actively in development * **VR**: Not feasible in near future * **Performance**: Uncapped framerate, designed for accessibility * **Offline Play**: Single-player works without internet connection ## Monetization & Legal * **No Pay-to-Win**: Firm commitment against P2W mechanics * **Cosmetics Only**: Low-price cosmetic packs to support infrastructure * **Server EULA**: Terms being finalized for server monetization policies * **QUIC Blocking**: Acknowledged issue in some regions, no alternative protocol ## Current Limitations * **Custom Shaders**: Not supported until sandboxing solution found * **UI/Input Limitations**: Being expanded but currently restricted * **Documentation**: Sparse initially, will improve over time * **Client Mods**: No client-side code execution for security * **Nameplates**: Currently limited customization This comprehensive technical foundation positions Hytale as a secure, extensible platform that empowers creators while maintaining performance, accessibility, and a commitment to continuous improvement. --- Server Code Insights Source: https://hytalemodding.dev/en/docs/established-information/server-plugin-insights The following information is based on insights shared by Technical Director Slikey on December 15, 2025 on the Hytale Discord Server. It provides an overview of the server code architecture and plugin capabilities. Majority of this document is just straight quotes from Slikey with minimal commentary. It is more over to preserve the information shared rather than reword it. # Server Source Code The server will be released as shared source - we will have the source code with no obfuscation and all their comments. ### License The license permits usage for any **hytale related** things, so as long as you don't use the server / source to make your own game or sell their algorithms. # Permission system After being asked in the Hytale Modding server, Lead Architect Zero has replied: It's quite basic, so don't expect much but yes we do have a permissions system built in. It also support implementing your own backend. Ex. if you wanted to store it in a database. Premission Source Snippet # World Gen Implementation The following block of text is directly from Lead Architect Zero: You can totally implement a custom world gen in a plugin super easy. So if you want a totally different config or logic for generating terrain you can add that into a plugin and then configure a world to use that, We have some stuff load prefabs and there is existing code in the current world generators that could possibly be reused but no APIs specifically for the details of the generation itself. ```java public interface IWorldGenProvider { BuilderCodecMapCodec CODEC = new BuilderCodecMapCodec<>("Type", true); IWorldGen getGenerator() throws WorldGenLoadException; } ``` ```java public interface IWorldGen { @Nullable WorldGenTimingsCollector getTimings(); CompletableFuture generate(int seed, long index, int x, int z, LongPredicate stillNeeded); @Deprecated Transform[] getSpawnPoints(int seed); @Nonnull default ISpawnProvider getDefaultSpawnProvider(int seed) { return new FitToHeightMapSpawnProvider(new IndividualSpawnProvider(getSpawnPoints(seed))); } default void shutdown() {} } ``` # Server Code Snippets Some code snippets from a plugin they made were also shared. The following snippets are directly quoted from Technical Director Slikey: ## BlockSpawner Plugin Alright, I'll drop some code snippets here for a simple plugin called "BlockSpawner" which will turn into a "random" block when put into the world based on the configured rules There is more code here in general but it shows the Asset System and the plugin layout. You can see that the asset system defines "Codecs" which are used to serialize and deserialize data. Using these codecs we can generate schemas. Let's say you connect to a server and open the asset editor: the server will send those schemas - so every single asset type defined server side, even you own, now become part of the asset editor on the client - no need to do anything, you just get to enjoy the editor UI for making your assets that you defined Block Spawner Code 1 Block Spawner Code 2 Block Spawner Code 3 Block Spawner Manifest > i guess this part also shows a bit how we use constants to store some language keys - Slikey > (in reference to the image below) Constants to store Language Keys > you can completely customize the chunk storage provider, we for example made one that is just empty where it doesn't load any chunks from disk > you could add an MySQLChunkStorageProvider and it could read the data from a database > and the same goes for worldgen, you can simply implement this interface to generate a world generator - slikey Chunks 1 Chunks 2 Chunks 3 > i mean here are all the weapons defined, you tell me, obviously you will discover limitations but i think there is plenty of room to make changes - this stuff is actually hard though, there is a lot of QoL to have happen here Weapons 1 --- PR Guidelines Source: https://hytalemodding.dev/en/docs/contributing/pr-guidelines # Pull Request Guidelines To ensure a smooth and efficient review process, both contributors and reviewers should adhere to the following guidelines when submitting and reviewing pull requests (PRs). ## For Contributors 1. **Descriptive Titles and Descriptions** * Use clear and concise titles that summarize the changes. * Provide detailed descriptions of what the PR does, why the changes are necessary, and any relevant context. 2. **Link to Issues** * In your PR title, add `GH-ISSUE-NUMBER` to link the PR to the relevant issue. This is required for all PRs. 3. **Small, Focused Changes** * Aim to keep PRs small and focused on a single issue or feature. This makes it easier for reviewers to understand and provide feedback. 4. **Code Quality** * Ensure your code follows the project's coding standards and best practices. * Include comments where necessary to explain complex logic. * Always test your changes locally before submitting the PR to catch any issues early. * Format your code using `bun format` to maintain consistency across the codebase. 5. **Testing** * Test your changes thoroughly before submitting the PR. * If applicable, include unit tests or integration tests to verify your changes. 6. **Documentation** * Update or add documentation as needed to reflect your changes. 7. **Commit Messages** * Use clear and descriptive commit messages that follow the [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) format. 8. **Check for Conflicts** * Before submitting your PR, ensure that your branch is up to date with the base branch to minimize merge conflicts. ## For Reviewers * You are supposed to review PRs thoroughly, and request changes if needed. * Provide constructive feedback and suggestions for improvement. * Verify that the changes meet the project's coding standards and best practices. * Deploy the PR using the dokploy integration to ensure the changes work as expected. * Ensure that documentation is updated as necessary. * Approve the PR only when you are satisfied with the changes and all checks have passed. --- Writing Guides Source: https://hytalemodding.dev/en/docs/contributing/writing-guides ## Creating a guide file To start writing a guide, you need to create a file with extension `.mdx`. You need to create this file inside the `/content/docs/en` directory, now it depends in which section you want to make the guide, so you can decide which folder you should put it in after that. Suppose I want to make a java basics guide, I'd put it in `/content/docs/en/guides/java-basics`. You'll have to do some digging to find out where you want to place it. If there's already a guide in the section you want to write about, you can just press on the "Edit On GitHub" button on our website and it'll take you to the folder, now you can write in the same folder to have your guide appear in the same section. ## Frontmatter Frontmatter is the metadata of your guide, it tells our website how to display your guide. This needs to be at the very top of the file, which starts with `---` and ends with `---`. Here's an example: ```mdx --- title: "Java Basics" description: "Learn the basics of Java programming." authors: - name: "Your Name" url: "https://yourwebsite.com" icon: YourIcon --- ``` Now as you can see, it's pretty self explanatory, you just need to fill in the details for your specific guide. If you don't have a URL you want to link yourself to, just don't write that whole line. Additionally, the authors section is optional, so if you don't want to add it, you can just leave it out although we encourage you to do so and credit yourself. The indentation in the frontmatter is important, so make sure to keep it consistent with the example. ## Content Structure You should structure the content of your guide in a clear and organized manner. Here are some tips on how to do that: * **Introduction:** Start with an overview of the topic and what the reader can expect to learn. * **Prerequisites:** List any prerequisites or prior knowledge the reader should have before diving into the guide. * **Step-by-Step Instructions:** Break down the content into clear, actionable steps. Use headings and subheadings to organize the information. * **Code Examples:** Include code snippets to illustrate key points. Make sure to explain each example thoroughly. * **Conclusion:** Summarize the main points and encourage the reader to explore further or try out what they've learned. Now if you're writing a really big section, you should split this into multiple pages so that it's easier for the reader to digest the information. No one wants to read a big wall of text all at once! When we write guides, we should also think of how people will consume them, and many people prefer to skim content rather than read it in detail. This is why it's better to split information into multiple pages, so it looks like a smaller amount of information to the reader. Also, consider using bullet points, numbered lists, and other formatting techniques to make the content more scannable. ## Formatting We use [Markdown](https://www.markdownguide.org/) for formatting our guides. Here are some key points to keep in mind: * Use headings (`#`, `##`, `###`) to organize your content. * Use bullet points and numbered lists for clarity. * Use code blocks (\`\`\`) for code snippets. * Use links to reference other guides or external resources. This is the same type of formatting you'll see on most documentation websites, and also social media platforms like Discord. ### Links Everyone knows what a link is. However, there is a difference between linking to an external resource and linking to an internal one. In general, in Markdown they are written like this: `[Your Text](Your link)` #### External Nothing to explain, just `https://example.com`. #### Internal You cannot use regular links here. Let's say your link to another guide is `https://hytalemodding.dev/en/docs/quick-start`. You can't write it like that because you are not only referring to the page but also to the language, which is not correct. Instead, type `./quick-start` which is correct and links to the page in the user's language. **Accessing files** * **Current Folder**: `./` * **Folder above**: `../` as many times as this folder is higher in the hierarchy. ## Icons If you want to add an icon for your page then you should use [Lucide](https://lucide.dev/). 1. Go to the [site](https://lucide.dev/) and find an icon you like. 2. Once you have selected an icon, click on it, then click "See in action" 3. Next, click on "React" which we are using. You will only need the text in the curly brackets on the first line. 4. Next, simply paste `icon: YourIcon` into Frontmatter. ## Callout You can also make a Callout to highlight important information or tips. Use the following syntax: ```mdx This is a callout message. ``` This is a callout message. You can change the color of the callout by adding a `type` attribute. For example: ```mdx This is an info callout. ``` Available types are: `info`, `warning`, `error`, and `success`. ## Difficulty levels These are types of callouts, they are optional, they show how complex your page can be. There are 3 main levels of complexity. Use `lvl_beginner`. This page contains information for those who are starting out with modding. Use `lvl_intermediate`. This page contains information for those who want to deepen their knowledge. Use `lvl_advanced`. This page contains information for those who already know how to make quality mods, and contains something additional. Their usage is the same as in callout, but we would advise not to change the title. Inside, you write why your page is classified as this level and what the user should know. ## Conclusion That's all! You are now a master at writing guides. Just remember, do not think you need to be perfect with your English, write the guide the way you will explain the topic to someone, and don't hesitate to ask for feedback or help if you need it. Happy writing! --- Translate Source: https://hytalemodding.dev/en/docs/contributing/translate # Translating HytaleModding HytaleModding is translated with the help of the community using **Crowdin**. If you want to help translate or improve existing translations, this is the right place. ## Steps to Translate All translations are managed **via Crowdin**. 1. Visit [our Crowdin project](https://crowdin.com/project/hytalemodding) and log in if required. 2. Click on your language. 3. Click on the file/article you wish to translate. We recommend starting with Official Documentation, and then Server Plugin Documentation. 4. Start translating! 5. Approved translations will appear on the website. ### Video Guide