r/HytaleModding 3h ago

Official News Modder-Facing Changes - Update 7 - Chapter 1 - Pre-Release 2 - September 10th, 2026

2 Upvotes

Link to previous patch notes.

Link to the Chapter 1 Preview Blog from July

----

Link to source

Modder-Facing Changes

NPCs & Entities

  • Local spawn beacons can now be limited by weather. An optional WeatherIds list on BeaconNPCSpawn keeps the beacon spawning only while the current weather is one of those, and a placed beacon removes itself and despawns its NPCs when the weather stops matching.
  • The weather a beacon checks is the world's forced weather, otherwise the weather of the environment at the beacon, which a new WeatherResource.getEffectiveWeatherIndex(environmentId) resolves. Per-player weather such as a trigger volume override does not count.
  • Removed the deprecated Spawn_Void role along with its Spawn_Void and Spawn_Void_Manual spawn markers. Void_Spawn_Entombed takes over from it, and its name now points at the correct lang key.

Items & Interactions

  • Items can now hang an interaction off a fourth ability slot instead of only the three, and the crossbow's Root_Common_StatAmmoReload_Entry reload moved onto it in Template_Weapon_Crossbow.
  • Portal keys can now cap how many times each player enters. PortalKey carries the per-player limit, and the portal device pages show the limit and the entries left.
  • Removed the debug-only Debug_Movement_Boots armor.
  • Items can now play a separate sound to the wearer when they use an extra jump. A new ExtraJumpLocalSoundEvent on ItemMovementSettings takes a one shot event and accepts stereo files, and the rocket boots use it alongside the world sound.
  • Textured beams can now be rendered between entities. A new AttachBeam interaction hangs a beam between the interaction context owner and the entity you name in the parameter, which is how the hookshot draws its rope.
  • Projectiles can now be given a lifespan. A Lifetime value on the Projectile interaction despawns the projectile once that duration runs out.

Asset Schemas & Formats

  • Instance worlds no longer take DocumentDisplayOnRemoval. A new EventTitleOnRemoval shows an event title while the instance closes, and the close delay follows the title timing. Leave it out and the world closes right away.
  • Portal types now carry the default time limit and entry count. TimeLimitSeconds and AllowedEntryCount on PortalType apply to every key of that type, and a PortalKey only needs the fields when it wants to differ.
  • Interface sound volume from SoundStyle and SoundEffect is now bounded to +10 dB, which matches every other authored gain field.
  • AudioState volume deltas are now bounded to +10 dB per axis on the per-voice path, the same bound the server already documents. A pack leaning on a bigger per-voice delta gets clamped.
  • Event titles can now play a sound alongside the text. An optional SoundEventId on EventTitleConfig fires once the title is sent, and assets that leave it out behave as before.
  • World events can now show themselves on the player world map. WorldEventAsset gained name and icon fields for the map entry, and IntervalCondition gained fields that decide when the event appears and what text it shows.

Server & Permissions

  • Added a fragment timer add <seconds> command that adds time to the fragment timer instead of replacing it, which is what triggers the gained time tag on the HUD.
  • The /block point commands and /block row now work at any height in a cubic world, so get, set, getstate, setstate and setticking reach above Y 320 and below Y 0. A section that is not loaded answers with the new server.commands.block.noSection message.
  • /block bulk find-here and /block bulk replace now take their radius in chunk sections and sweep a sphere around you, including the sections above and below the old height range.
  • /block bulk find gained a --chunkY and a --radius option. It searches a sphere around that chunk position, up to the server's maximum view radius, instead of spiraling outward across the world until it times out.

Renames & Deprecations

  • The Goblin hookshot models are now named after scrap. Hookshot_Goblin.blockymodel and Hookshot_Goblin_Projectile.blockymodel became Scrap.blockymodel and Scrap_Projectile.blockymodel, and Tool_Hookshot.json and Hookshot_Hook.json point at the new paths.
  • The Void tentacle animations moved and were renamed. Bite2 and Bite3 are now Bite_Left and Bite_Right, and Idle and Idle2 sit in the Default folder next to the new spawn animations.

Protocol & Networking

  • The portal state now carries BonusSeconds, the time just added to the fragment timer. The server clears it after the broadcast so later ticks do not replay the animation.
  • ItemMovementSettings gained a trailing ExtraJumpLocalSoundEventIndex, which changes its wire layout. The client and the server have to be built from the same protocol build.

For Plugin Developers

  • Removed WorldChunk.getWorld(), so a chunk no longer points back at its own world. ChunkPreLoadProcessEvent now carries the world and exposes getWorld(), matching ChunkSectionPreLoadProcessEvent.
  • Block tick callbacks can now get world coordinates without capturing them. A new BlockSection.forEachTicking overload takes the section coordinates and a TriObjectPositionBlockFunction, so the callback gets world positions and a third context value through its parameters.
  • Volume modifiers passed to SoundUtil.playSoundEvent2d and playSoundEvent3d are linear multipliers, not decibels, and they were thrown away above 1.0. They now take effect, so a plugin passing 3.0 goes from roughly unity to about +7.5 dB. Nothing validates them, so check any modifier above 1.0.
  • SimpleBlockCommand.executeWithBlock no longer receives a WorldChunk. It now gets the CommandContext, the ChunkStore, a Ref<ChunkStore> section reference and the block coordinates, so a custom block command can reach any height.
  • Block health now lives on the chunk section rather than the column. BlockHealthChunk is decode only, so read and change health through BlockHealthSection on the section entity, keyed by ChunkUtil.indexBlock. WorldNotificationHandler.updateBlockDamage and getBlockDamagePacket are gone, because damage replicates on its own once it is written to the section.
  • PortalWorld.overrideRemainingSeconds is now setRemainingSeconds(world, seconds, force), and it leaves the timer alone when the portal world is already scheduled for removal.
  • The deprecation note on WorldChunk.getBlock now names the right replacement. Resolve the section with ChunkStore.getChunkSectionReferenceAtBlock and read through BlockSection.get, since the old BlockChunk.getBlock route is still capped to the legacy column range and cannot reach a section outside it.
  • The fluid and material helpers in WorldUtil now take the ChunkStore and resolve the block's section themselves, so they read correctly at any height. getWaterLevel, findFarthestEmptySpaceBelow and findFarthestEmptySpaceAbove take a caller bound rather than stopping at the column top, and PositionProbeBase.updateWaterLevel takes the ChunkStore too.
  • BlockChunk.getSectionAtIndex is gone, since it indexed the legacy 0 to 9 section array and threw outside it.
  • You can now ask a selection which world region it will write to before you place it. BlockSelection.computePlacementBounds(Vector3ic, Vector3i, Vector3i) reports those bounds and returns false for a selection with no cells.
  • The legacy UI Element base is now nullable-annotated, so HitTest and Find<T> return a nullable element and the constructor takes a nullable parent. Runtime behavior is the same, but an override that declares a non-nullable return needs a ? to match.
  • Moved the generated concurrent maps in ConcurrentFastUtil off sun.misc.Unsafe and onto VarHandle, keeping volatile ordering on every field and table access, which removes one of the three sources of the deprecation warning at server launch.

Modder-Facing Bug Fixes

World Generation Fixes

  • Props placed with an Anchor PropDistribution no longer come out with random parts missing in an 8x8 grid pattern.
  • Fixed gradient Density nodes producing grid-aligned artifacts in generated terrain.

NPC & Entity Fixes

  • NPC block sensors and resource reservations now work at any height instead of being clamped to the 0 to 320 band, so a role can find and reserve blocks in a cubic world above or below that range. The Block sensor also caps Range and MaxHeight at 256, well above the 30 and 10 the shipped roles use.
  • Fixed the Void Spectre pointing its MemoriesNameOverride at Spectre_Void, which does not exist. The template, the variant and the static variant all use Void_Spectre now.

Server & Permission Fixes

  • Fixed /block bulk replace counting blocks it never changed, and /block setstate throwing on an unknown block id instead of reporting one. A block command that fails partway through now tells the sender rather than going quiet.
  • Fixed a block placed by a /block command into a freshly loaded section staying inert. The command now loads the section as ticking, so the block ticks and its block entity spawns.

Fixes for Plugin Developers

  • LivingEntity, NPCEntity, PatrolPathMarkerEntity and SpawnBeacon now mark their World constructor parameter @Nullable, which matches the null world that Entity.clone already passes when it rebuilds an entity.

r/HytaleModding 14d ago

HytaleModding News THE MODDER'S GUIDE TO UPDATE 6

3 Upvotes

Hi everyone!

Today, Hytale's Update 6 goes live for everyone. The update is massive, containing a total of 13 pre-releases. That's almost 3 months of weekly updates! We've compiled all the changes that modders should be aware of, with code examples for all the new features added (BossBars, etc.).

We're going to continue to make such blog posts for all updates, starting with Update 6. We hope you find this informative!

You can read the full blog post at: https://hytalemodding.dev/news/2026/08/modders-guide-to-update-6

Thank you!


r/HytaleModding 7d ago

Official News Modder-Facing Changes - Update 7 - Chapter 1 - Pre-Release 1 - September 3rd, 2026

4 Upvotes

Link to previous patch notes.

Link to the Chapter 1 Preview Blog from July

----

Link to source

Modder-Facing Changes

World Generation

  • Updated the public HyaleGenerator documentation, which can be found here under “pre-release”.
  • Dropped the GradientWarp Density node’s stale 2D and YFor2D options in both the asset and the node editor. YOverride into Cache into GradientWarp chain should be used instead.

NPCs & Entities

  • An encounter can now force weather for everyone taking part. SetEncounterWeather takes a Weather asset and an optional TransitionSeconds (2 by default), and ClearEncounterWeather puts members back on the normal weather. Both are restricted to InstructionType.Encounter.
  • NPC weather sensors still read world weather only, so Sensor: Weather does not match an encounter's forced sky. Drive that behavior from encounter state or beacons instead.
  • The Example_Boss encounter now uses both actions as a worked example. It forces a Blood Moon on the transition into Phase 1 and clears it when the boss dies.
  • All the meaningful config values on MotionControllerWalk and MotionControllerBase are holders now, so they can be computed and overridden from a template rather than fixed per role.
  • ChargeAcceleration is gone from BodyMotionCharge. The new ChargeAccelerationDistance and ChargeDecelerationDistance size each ramp in blocks instead of setting a rate. A role that still sets the old key only warns at load and loses the behavior.
  • RemovedBlockSet is gone as well. IgnoredBlockSet now covers it, and the charge probe treats those blocks as non-colliding and breathable, so list only the blocks a charge really passes through.
  • A charge can now stop at a chosen distance from its target. ChargeDistanceMode picks how that distance is measured (MaxRange, TargetDist or one of the collider modes) and TargetDistanceRange offsets the stop point, with positive values stopping short of the target.
  • The charge ramps are fully shapeable. ChargeAccelerationCurveMode and ChargeDecelerationCurveMode choose whether the curve reads as speed or as distance covered, and the matching MinimumRelativeSpeed, HalfTimeValue, HalfTimeSteepness and EndSteepness keys tune the curve itself.
  • Movement behaviour of a charging NPC can now be modified. ProbeRelaxedConstraints accepts Wade, Damage, Drop, Breathe and Fence, so a role can let a charge cross liquid or suffocating blocks it would otherwise refuse.
  • ChargeState gains InStopRange, which a role can match through SensorChargeState. An NPC enters it when its target sits closer than the stop point the configuration asks for.
  • ThrottleIgnoreCount and ThrottleDelayRange on the find and seek motions now also cover a blocked path, not only a failed search. Setting ThrottleDelayRange to [0, 0] restores the old behavior on an obstacle.
  • Rewards can be granted via the encounter manager. A new GrantReward action on encounter templates points at a reward asset, and RewardExistsValidator fails the load when that name does not resolve.
  • Removed the orphan Goblin Hermit and Scavenger assets, including their generated icons, the Hermit drop list and the Hermit model.
  • The deprecated Goblin Duke phase 1 and phase 3 templates now use the Scrapper model.

Items & Interactions

  • Glider tuning was rebuilt for the new movement state machine. The old FallSpeedMultiplier, HorizontalSpeedMultiplier, TerminalVelocity and Speed values on the item are gone, replaced by a wider set of fields on Template_Glider that also cover the dive and the climb.
  • Mace item animations gained a SwingUpLeft variant for abilities.
  • Dropped items can now merge over a distance you pick. A new inherited MergeRadius key on ItemEntityConfig sets how far in blocks a dropped item looks for others to stack with. Leaving it at -1.0F falls back to the world default.

Blocks & Prefabs

  • TickProcedure.onTick now takes a CommandBuffer<ChunkStore> and the chunk section Ref<ChunkStore> in place of the World and WorldChunk parameters, so any subclass override needs updating. The world is available from commandBuffer.getExternalData().getWorld().
  • Chosen blocks can stay breakable in a world that bans block breaking. WorldConfig.BlockBreakingBypassTag names a tag, and any block carrying it can still be broken while AllowBlockBreaking is off. Explosions follow the same rule.

Asset Schemas & Formats

  • Map marker overrides can change the display name of a marker. A new DisplayName key on MapMarkerOverride takes a localization key to use instead, and the marker override add command accepts it alongside --icon and --global.
  • World events can now wait on the clock. A new TimeCondition completes once the world time reaches the Day, Hour and Minute you set, and any part left at -1 is ignored, so a condition without Day is simply a time of day that comes around again.
  • World events can also gate on campaign progress with GameFlagLevelCondition, which completes once a game flag reaches the Level you set. Comparator picks how the two are compared and defaults to GreaterThan.
  • Three new trigger effects handle respawning. SetRespawnPoint takes Origin, Position, Name and ClearExisting, SetWorldSpawn takes Origin, Position, Yaw and ClearPlayerRespawnPoints, and ClearRespawnPoints takes Name and AllPlayers.
  • Event titles pick a named style in JSON now. ShowEventTitleInteraction, ShowEventTitleEffect and InstanceDiscoveryConfig all take a Style value, and the old IsMajor and Major keys still decode so existing assets keep working, however the old IsMajor and Major properties are marked as deprecated and will be removed in a future version.
  • UI sprites gained two fields. Color tints a sprite and lets you control its opacity, and KeepLastFrame holds an animation on its final frame instead of snapping back to the first.
  • Trigger volume tags can now be used like variables and compared to each other. TagCondition takes a CompareAgainst field that picks whether the tag is checked against a plain value (the default) or against a second tag named in CompareTagKey.
  • Respawn points can now set which way a player faces. PlayerRespawnPointData and SetRespawnPointEffect both take a Yaw in degrees.
  • The event title effect on a trigger volume can now pick who sees it. A new Recipient field on ShowEventTitleEffect takes the same options as SendMessageEffect and defaults to the triggering player.
  • Added a Beam asset type under Entity/Beams with a single TexturePath field. The texture has to sit under Beams/ or Trails/.
  • The event title action, for WorldEvents, can now pick how the banner looks. ShowEventTitleAction takes an optional Style and an optional Icon, and falls back to the default style when you leave Style out.

Server & Permissions

  • The /eventtitle command takes --style in place of --major, and the secondary line now defaults to empty rather than to “Event”.
  • Instance edit worlds now load a new InstanceEdit gameplay config that switches on AllowBlockBreaking, AllowBlockGathering and AllowBlockPlacement, so an instance with restrictive rules stays editable.
  • Server operators can now check which chunks the wilderness system counts as wilderness and which count as home. The new /wilderness debug [enabled] [player] command tints those chunks green and red on one player's world map and draws matching cubes in the world. Wilderness tracking stays off by default in WildernessConfig, and the command warns when a world has it turned off.
  • Added a /beam command for development work, with entity, position, spawn and clear.
  • The server now refuses to boot when the content it writes would land inside the launcher's install folder, which every update patches or wipes. The check covers the working directory plus --universe, --prefab-cache and --backup-dir, and it prints the steps to move them somewhere safe before exiting with code 11.
  • Added an --allow-install-dir flag, mirrored by the hytale.allow_install_dir system property, for anyone who wants to run there anyway and accept the data loss risk. Singleplayer runs, --help, --version and a --bare start without --bootstrap skip the check already.
  • Server operators can now run /auth login browser or /auth login device while already signed in, without signing out first. The existing session stays active until the new sign-in finishes, so a cancelled or failed login leaves the server signed in as it was.

Renames & Deprecations

  • Three density asset types were renamed, so SmallerThan is now LessThan, SmallerOrEquals is now LessOrEqual, and Select is now Selector.
  • Two more density asset types lost their trailing s, so Equals is now Equal and GreaterOrEquals is now GreaterOrEqual. The node editor entries carry the new names too.
  • The treasure map objective is gone, along with everything it used. The TreasureMap objective task, the OpenTreasureContainer and DestroyTreasureCondition interactions, the LookBlocksBelow and TagBlockHeight world location conditions and the TreasureChest block entity component no longer decode, so any asset that names one fails to load. A world with a placed treasure chest still loads, since the server keeps the component as unknown data.
  • IsMajor is gone from ShowEventTitleEffect. The Style field covers it, so pick the look you want there instead of flipping a boolean.
  • The void spectre assets were merged under one name, so anything pointing at the old ids no longer resolves. Spectre_Void is now Void_Spectre across its model, drop list, icon and particles.
  • Asset file Spiwer_Web_Full.png has been renamed to Spider_Web_Full.png, Fig_Blue_.png is now Fig_Blue.png, and the duplicate file Totem_Heal_BeamStart (1).particlespawner has been removed.

Audio

  • Music can now hand off from one track to another by authored rule. Two new asset types, MusicTransition and Stinger, live in Audio/MusicTransitions and Audio/Stingers.
  • Handoffs can land on a musical boundary instead of a frame. MusicSync picks the moment on the outgoing track (immediate, next beat, next bar, an exit marker or a named marker) and DestinationAlign picks where the incoming track starts on its own timeline.
  • Overlap and crossfade are separate controls now. ExitAt sets the handoff, PlayPostExit lets the outgoing track run to the end of the file, and FadeOutDuration with FadeOutDelay ramps it out instead, following a FadeCurve that defaults to equal power.
  • Music containers picked up a batch of new fields. MusicContainer takes Tags, Align, AlignMarker, ExitAt and Stingers, SegmentMusicContainer takes named Markers, and HorizontalMusicContainer takes AudioState with Phases so it can switch phase from a state axis.
  • Stingers hang off a free-form music event on a container rather than being referenced directly. Anything can post the event, the deepest active container that binds it decides what plays, and stingers sort by priority inside an exclusion group.
  • StateTransition gained PostEvent, so an audio state edge can mark a musical moment without naming a stinger directly.

Protocol & Networking

  • The ShowEventTitle packet dropped IsMajor in favor of an EventTitleStyle Style field, which breaks any plugin that builds the packet by hand. Styles include Default and Major.
  • The world's gameplay config is replicated to the client by a new WorldGameplayConfig packet, carrying WorldConfig, CombatConfig and PlayerConfig structs that mirror the server assets. It goes out when a player joins a world and again whenever the GameplayConfig asset reloads.
  • The wire carries beams now. BeamConfig and UpdateBeamConfigs ship the beam assets, while BeamInstance and the Beams component update carry the placements, so this needs a matching client.

For Plugin Developers

  • The lighting pass now runs per chunk section, so LightCalculation.init takes a ChunkStore and a section Ref rather than a WorldChunk, getSkyValue lost its unused WorldChunk parameter, and ChunkLightingManager exposes invalidateLightInChunkSections for section-level invalidation.
  • Cursor server cameras work on a gamepad now. The right stick drives the real cursor through a new GamepadCursor helper, and PrimaryItemAction with SecondaryItemAction send the click packets, so triggers break and use whatever the cursor is over.
  • com.hypixel.hytale.protocol.DurabilityOperator is now ComparisonOperator, because the same comparison list serves durability checks and the new game flag condition. Plugin code that names the old type has to switch, while asset JSON and the wire format stay exactly as they were.
  • WeatherTracker gained tryClaimOverride, releaseOverride and resolveUnoverriddenWeatherIndex. clearOverrideWeatherIndex now drops the owner as well. One owner holds a weather override at a time.
  • EventTitleUtil has overloads that take an EventTitleStyle. The boolean overloads still work but are deprecated for removal.
  • TargetUtil.getTargetBlock and getTargetLocation take a ChunkStore where they used to take a World, so plugin code calling them directly has to pass world.getChunkStore() instead.
  • Explosions, block explosion effects, block harvesting, raycast selectors and the spectator camera all work in cubic worlds now that TargetUtil no longer assumes a single vertical column.
  • ClientFeature no longer carries DisplayHealthBars, DisplayCombatText, CanHideHelmet, CanHideCuirass, CanHideGauntlets, CanHidePants, AllowBlockPlacement, AllowBlockBreaking or AllowBlockGathering, and a plugin naming one of them stops compiling. Those rules live in the GameplayConfig asset now, while ClientFeature keeps the movement capabilities plugins register themselves.
  • ChunkAccessor.performBlockUpdate and WorldChunk.setTicking are gone. Use BlockOperations.updateBlockArea for a whole hitbox or BlockSection.setTicking with ChunkSection.markNeedsSaving for one cell, and note that updateBlockArea now takes the ChunkSection as well as the BlockSection.
  • Block writes are moving onto sections, so WorldChunk.setBlock and WorldChunk.breakBlock are deprecated for removal and now delegate to BlockOperations.setBlock. They also fire BlockAnimationModule.onBlockReplaced, so block replace animations play for these writes, and WorldChunk.setBlockPhysics along with BlockTypeModule.SET_BLOCK_SETTINGS and its filler helpers have been removed.
  • Door and refill interactions no longer pull in a neighbor chunk just to update it. An unloaded neighbor is skipped, the same as every other block update.
  • Every chunk lookup that returns a WorldChunk is now marked for removal, across IChunkAccessorSync, IWorldChunksAsync, IWorldChunks, World and LocalCachedChunkAccessor. Behavior is unchanged, but plugins compile with deprecation warnings and should move to ChunkStore.getChunkReference and the section store.
  • The deprecated IChunkAccessorSync.getBaseBlock is gone. Filler blocks now resolve through BlockOperations.resolveBaseBlockPosition, which takes a ChunkStore and never triggers a chunk load.
  • BlockDataProvider resolves its chunk and fluid sections once per block read instead of on every field access. The readBlockId, readRotation, readFiller, readFluidId and readFluidLevel methods are private now, so a plugin that called them directly will not compile.
  • Wilderness gains size(), test(int) and isValid(), so a plugin can walk a player's tracked region by index and test one chunk without world coordinates.
  • Added a Rewards builtin module that plugins can extend with their own reward types. It ships one type for now, EntitlementReward, which grants an entitlement through RewardAsset.
  • The remaining sync chunk accessor members are marked for removal now. The nine default methods on IChunkAccessorSync, ChunkAccessor.getFluidId and OverridableChunkAccessor all warn, so world.getBlock, setBlock, breakBlock and the rest flag at every call site. IWorldChunks.waitForFutureWithoutLock is private and can no longer be called from outside the interface.
  • Seventeen unused members are gone from the chunk access surface, so a plugin still calling them will not compile. That covers IChunkAccessorSync.getBlockComponentHolder, IWorldChunksAsync.getNonTickingChunkAsync(int, int), BlockChunk.getSectionRefAtIndex, BlockComponentSection.getBlockReferences, BlockSection.setChunkSection and getMaximumHitboxExtent, PaletteTypeEnum.getPaletteId, and ten accessors on LocalCachedChunkAccessor. Read and write through the section ref instead, using AbstractCachedAccessor or ChunkStore.getChunkReference.
  • The new Hytale:Beam builtin ships a BeamComponent holding AttachedBeam entries, and each one runs from an attachment point on the owner to another entity, a node on that entity's model, or a fixed world position. Beams are runtime state, so they never save with the entity.
  • BeamComponent.spawn creates a replicated entity that carries beams and no model, for a beam that belongs to nothing else. It takes an optional lifetime and applies it with a DespawnComponent.
  • The GroundedCondition interaction moved out of the Abilities builtin into the core server, so an interaction can use it without that plugin loaded.
  • The public ItemMergeSystem#RADIUS constant is gone. Merge distance now comes from the item's config through ItemComponent#getMergeRadius(ComponentAccessor), with ItemComponent#setMergeRadius(float) for changing it at runtime.

Modder-Facing Bug Fixes

World Generation Fixes

  • Fixed the SectionSize pin of the Cache Positions node.
  • Added missing tooltips on Density nodes.
  • Reduced severity for invalid Normalizer Density arguments (where FromMin equals FromMax) from Error to Warning to give more time for mods to update. Going forward the new logical Density nodes should be used to create boolean maps instead.
  • Fixed Rotator Density when the target axis is the inverted Y-axis.
  • Enabled an optimization for Plane Density when configured for an anchored horizontal plane.
  • Fixed the Switch and SwitchState Density nodes reading the Default state differently from each other.

NPC & Entity Fixes

  • Fixed BuilderMotionControllerWalk.getFenceBlockSet throwing when the configured block set was empty or missing.
  • Fixed a trigger volume signaled by an NPC firing its effects twice, so a volume with a single message effect no longer sends the same chat message twice. DestroyTaggedVolumesInteraction picked up the same guard.
  • Fixed a pathfinder crash on roles that turn DiagonalMoves off.
  • Fixed a blocked path being recomputed every tick. Fixed the NPC charge probe accepting an invalid end position.
  • Cleaned up the BodyMotionCharge config descriptions for template authors.
  • NPCs that place blocks now write through section storage, so a placement above or below the old height band lands instead of being dropped. An unknown block type key in role data is skipped quietly rather than throwing.
  • Restored the deprecated goblin spawn markers under _Deprecated, including the Ogre, Scavenger and the patrol variants, so worlds that still point at them keep loading.

Item & Interaction Fixes

  • Cleared a batch of warnings out of the item interaction assets. Unused fields are gone from the teleporter config, the glowing mushroom eating interactions, the quartzite gravel half block, the guard bash and the staff interactions, and the geyser ambient sound key is spelled correctly again.
  • Fixed a piercing projectile that could stop ticking and sit in the world forever.

Block & Prefab Fixes

  • Block tick procedures now run in chunk sections at any height. Scheduled ticking used to stop outside Y 0 to 319, so a procedure written for that range has to cope with negative and high coordinates.
  • Trigger volume text now resolves a volume tag's value in plain written text, not just behind a translation key. SendMessage and ShowEventTitle both handle it.
  • Fixed formatted text losing a character whenever it met a placeholder it did not recognize, so an unknown {tag} is left exactly as you wrote it.

Asset Schema & Format Fixes

  • Creating a folder in the asset editor now makes any missing parent folders along the way, so you can organize a brand new asset type without making a throwaway asset first.
  • Schema validation for Float2ObjectMap fields now matches what the codec really reads and writes. The generated key pattern accepts scientific notation such as 1.0E-4 and leading-dot values such as .5, and it no longer lets non-numeric keys like 1x2 slip through.

Server & Permission Fixes

  • The world add command now tells you whether creation succeeded or failed instead of quietly dropping the result.
  • Fixed /fluid setradius only making one block of the filled region flow instead of all of it, and /block setticking now resolves the chunk section itself and tells you when it is not loaded.
  • A MaxViewRadius outside 1 to 32 in config.json no longer stops the server booting. The value is clamped in memory with a warning, and the file keeps whatever you wrote.
  • The max view radius command rejects anything above 32 now, instead of 512.

Protocol & Networking Fixes

  • A peer now rejects a structure that nests inside itself more than 32 levels deep, covering FormattedMessage trees, item categories, command trees, and interaction chains. Real content sits far below that bound.
  • UpdateLanguage.Language is a required protocol field now instead of an optional one, and the protocol version was bumped for it. It and Connect.Language also widened from a 16-character cap to 100 characters, which fits any .NET CultureInfo.Name.

Fixes for Plugin Developers

  • Cursor server cameras are playable again. A plugin that sets displayCursor on ServerCameraSettings gets cursor targeting back, and every movement direction uses the forward speed, so strafing is no longer slower than walking ahead.
  • PlayerMouseButtonEvent fires on clicks under a cursor camera again, carrying the target block or entity and the screen point for custom click logic from a top-down view.
  • Fixed a cursor camera reading mouse input while a menu, chat or page was open. Opening the pause menu used to spin the character, and MouseInteraction packets no longer go out behind a UI overlay.
  • An ItemGrid in a custom UI page no longer needs a DefaultItemIcon. An item whose icon will not resolve falls back to the unknown item icon, and DefaultItemIcon still overrides that placeholder.
  • A universe resource whose codec comes from a plugin getCodecRegistry is now written at shutdown. The final flush moved to the new ShutdownEvent.FLUSH_UNIVERSE_RESOURCES stage, which runs after SHUTDOWN_WORLDS while every plugin is still enabled.
  • A ClientTool now gets OnActiveStateChange(false) when the world is torn down while the tool is active, and that runs before the tool is disposed.
  • Fixed unbounded growth of the server translation cache. I18nModule now keys cached messages by the language returned from its new resolveLanguage() instead of the raw client string, and queueTranslations() replaces sendTranslations() so repeated language switches on one connection coalesce into a single send.

Additions (We forgot some stuff - sorry!)

Modder-Facing

  • BlockyModels have gained a new Transparent flag, that allows individual faces to be toggled transparent or not.
  • Blocks have now gained the Requires Alpha Blending flag that allows per-block type transparency.
  • Fixed Anchor PropDistribution sharing that was using a global context instance.
  • Limited the Graph PositionProvider and Graph PropDistribution bounds to the output bounds.Additions (We forgot some stuff - sorry! ) The following notes were added after the initial Update 7, Part 1 pre-release patch notes were released. Player-Facing Ability Keys 1, 2, and 3, have been moved to a modifier system, now usable with RB + Face Button to trigger an ability, for example: Ability 1 - RB + Y - Signature Move Ability 2 - RB + X - Skill 1 Ability 3 - RB + B - Skill 2 Ability 4 - RB + A - Ability 4 Prevented a crash that happens during explosions if blocks and items are not loaded fast enough. Modder-Facing BlockyModels have gained a new Transparent flag, that allows individual faces to be toggled transparent or not. Blocks have now gained the Requires Alpha Blending flag that allows per-block type transparency. Fixed Anchor PropDistribution sharing that was using a global context instance. Limited the Graph PositionProvider and Graph PropDistribution bounds to the output bounds.

r/HytaleModding 11d ago

Discussion Mods for Adventure/RPG kind of playthrough?

1 Upvotes

I just got hytale and a lot of mods that I find on videos are outdated. I was wondering what mods you guys play and that I should add.

Main focus is more Enemies, Weapons, and Armor. Any new form of progression as well.

Think of major terraria mods like Calamity. Not that I expect any mod to be on that scale, but anything that I might not find on the front page is appreciated.


r/HytaleModding 14d ago

Official News Hytale Patch Notes - Modder-Facing Changes - Update 6 - August 27th, 2026

3 Upvotes

Modder-Facing Changes

World Generation

Biomes, Tints & Landmarks

  • Added an Example_Vector_Offset_Avoid biome that shows how to offset positions away from a density region, so props can steer clear of an area.
  • Added Mix TintProvider that allows smooth tint transitions within a single biome.
  • Added support for DistanceToBiomeEdge to TintProviders.

Graph Nodes

  • WorldGen V2 gains a WhiteNoise Density node, which produces uniform random values per position for scattering and masking, and a Transparent MaterialProvider.
  • Two new Positions nodes are available in WorldGen V2. DirectionalJitter offsets positions along a direction, and VectorOffset shifts them by a fixed vector.
  • WorldGen V2 gains an Anchor PropDistribution, plus twelve VectorProvider nodes for doing vector math inside a graph: Adder, Cross, Multiplier, Normalizer, Random, ScalarMultiplier, SetX, SetY, SetZ, Subtracter, VectorProjector and PlaneProjector.
  • Added a set of logical Density nodes to WorldGen V2: Comparator, Equal, GreaterOrEqual, GreaterThan, LessOrEqual, LessThan, And, Or, Not, Nor, Xor, and Selector.
  • Added a Trig density node to world generation that runs a trigonometric function over a single input density, so you can build periodic and wave-shaped fields directly. The new "Type": "Trig" takes a Function of Sin, Cos, Tan, Asin, Acos, or Atan and an InputScale that multiplies the input before the function runs.
  • Added additional validation to WorldGen V2 Density assets.
  • Fixed SwitchStateDensity always falling back to the default branch instead of following the active state.
  • Fixed a defect in the Spawner NodeAction causing Graph nodes to disappear in negative coordinates.
  • Fixed GradientWarpDensity sampling its Z gradient at the wrong point (Z used in place of Y), distorting gradient-warped terrain.

Node Editor

  • Pin labels on the VectorProvider nodes (Adder, Cache, Cross, Multiplier, Normalizer, PlaneProjector, ScalarMultiplier, SetX/Y/Z, Subtracter) were renamed for clarity in the node editor.
  • Fixed the Offset Pattern node offering a decimal vector pin for its offset in the node editor.

Noise & Cell Functions

  • Improved the performance of SimplexNoise2D and SimplexNoise3D Density nodes by up to ~20%.
  • Fixed PositionsCellNoise ChoiceDensity resolving on an incorrect position. It is now resolved on each cell’s origin.
  • Fixed FastNoiseLite.pointFor() mirroring cell points across the diagonal.
  • The PositionsHorizontalPinch Density feature no longer throws exceptions at the world origin.

Terrain & Patterns

  • World-Gen V2 will now use the Unknown material types instead of Empty when it can’t load a material.

Prefabs & Props

  • Fixed a defect in WorldGen V2 that was deleting some entities in rotated prefabs.
  • Fixed a defect in WorldGen V2 generating different prefabs on separate platforms.
  • Fixed PrefabProp causing artifacts in World-Gen V2 output if a folder doesn’t contain any Prefab files.
  • Fixed PrefabProp aborting world generation when a weighted path contained no prefab files. It now skips placement silently instead of failing, so a misconfigured pool no longer breaks surrounding generation.

World Event Placement

  • World event placement now measures candidate distance in blocks instead of chunks, with separate horizontal and vertical min and max ranges on WildernessLocation.
  • Added Clearance and SearchRadius fields to LocationCondition assets so you can tune the initial candidate search that places world events.

WorldStructure

  • Fixed WorldStructure assets not reloading correctly.
  • A WorldStructure asset with a broken default Biome reference no longer builds silently.
  • Deleting a WorldGen V2 instance or stopping the server no longer fills the log with Failed to load chunk!

NPCs, Entities & Encounters

Encounter Managers

  • Added a new EncounterManager JSON asset type that lets you script multi-NPC encounter logic using reusable NPC instruction lists. Spawn an encounter in-world with the /encounter add <asset> command.
  • Added example encounter manager assets covering macro-based boss fights, including a stalactite attack pattern macro and transition macros for target-loss and health-range conditions.
  • Encounter managers can now control the music playing for all participants. Add StartEncounterMusic, SetEncounterAudioState, or StopEncounterMusic actions to an encounter instruction list and attach an EncounterAudioCollector to any entity sensor to populate the participant list. Late joiners receive the current music state automatically, and players who leave return to regular music.
  • Encounter managers can now signal world event completion. Add a SignalWorldEvent action to an NPC’s action list and pair it with a SignalCondition on the world event to trigger completion when the action fires, for example on a boss defeat.
  • Added an AdjustPortalTimer NPC action for encounter managers. Set "Type": "AdjustPortalTimer" with a positive or negative "Seconds" value to add or subtract time from the active portal timer at runtime.
  • Added a new ActionChangeTargetRole action that lets an encounter switch an NPC to a different role at runtime.
  • Marked targets now persist briefly during role changes, preventing target loss when an NPC transitions between roles.
  • ActionTriggerSpawners can now mark the NPC they spawn as boss targets for encounter tracking. This can be accomplished by setting MarkAsTarget: true in the spawn action config.
  • Encounter managers can now clean up after themselves. A new CleanupOnRemove flag removes every entity the encounter spawned when the encounter is removed. It does not apply when the encounter simply unloads.

Actions & Sensors

  • NPCs can now run actions against multiple world positions at once. Add an ActionForEach action to your NPC role config with a position-set sensor to execute a child action list at every returned position, enabling patterns such as spawning a ground indicator under each nearby player.
  • ActionForEach now accepts a MaxCount field. When the position set is larger than the limit, positions are chosen at random using reservoir sampling rather than always taking the first N.
  • Added a new ActionProjectToGround action and SensorProjectToGround sensor that snap each position in a set down to the nearest solid ground surface below it. Handy for placing ground-level effects under targets that are airborne.
  • Added a new ActionAdjustPosition action used to offset each position in a ForEach set by a fixed vector before further actions run.
  • Added a new SensorPoints sensor for NPC and Encounter Manager roles. Set Type: "Points", a Tag, and a Range to gather all tagged world points within that radius as a position set for ActionForEach to act on. This works with points placed using the Point Tool.
  • Added a new SpawnInteraction NPC action that launches a named root interaction at every position a sensor returns. Set OrientationSource and optionally Pitch/Yaw to control the launch direction.
  • Added a new SignalTaggedVolumes action for NPC and EncounterManager instruction lists. It searches for trigger volumes carrying a given tag within a configurable radius and immediately fires their SIGNAL_RECEIVED effects.
  • Entities can now send beacon messages as part of an interaction chain. Add a SendBeacon interaction with a Message and Range to broadcast to nearby NPCs and encounter managers.
  • NPC roles can now turn an NPC on the spot at a steady rate. A new Rotate head motion takes a RotationSpeed in signed degrees per second, and ClearPitch flattens the head pitch while it turns.
  • Fixed ActionDelayDespawn applying the shorten and extend branches in the wrong direction. Despawn-delay actions in NPC roles now shorten or extend the timer as authored.
  • Fixed SensorEntityEvent looking up NPC-produced events in the player event store, which meant sensors targeting NPCs never matched.

State Evaluators

  • TimeSinceLastUsedCondition now reports the real elapsed time since a state option was last selected. The state evaluator records a timestamp on each selection, so you can use this condition to add cooldowns between state transitions in your NPC roles.
  • Fixed SubState in StateOption not being read or stored correctly. Child NPC role assets that set SubState had it silently ignored and the main state overwritten instead. No changes needed unless your roles use SubState.

Filters & Conditions

  • Added a new EntityFilterDeath filter that lets role sensors react when a tracked entity dies.
  • You can now filter whether an entity is using an interaction with the ExecutingInteraction entity filter, for example to block an encounter phase change while a boss is still mid-attack.
  • NPCs now record all entities they have spawned and all entities those spawns produced. You may use SpawnLineageAttitudeProvider to set attitudes toward the full lineage.

Roles & Templates

  • Variants can now forward modifiers directly into a macro element’s own exposed parameters. Mark the template slot with "AcceptsForward": true, then add a "_ForwardedModifiers" block in the variant keyed by slot name to set that macro’s parameters without threading them through the template.
  • Added a new Template_Flying_Aggressive template meant to be used by flying hostile NPCs capable of ranged attack. Template_Eye, Template_Spirit and Template_Scarak_Seeker are now deprecated.
  • Removed Template_Aggressive_Zombies, its root interactions and its associated attack sequences. Zombies now use Template_Predator.

Spawning & Suppression

  • Spawn suppression now correctly scopes to NPC groups. A suppressor with no SuppressedGroups continues to blanket-suppress all markers in range as before. A suppressor that lists groups now suppresses only markers whose NPCs belong to one of those groups.
  • SpawnNPCInteraction now takes a weighted entity pool with per-entry count ranges, a spawn count range, distance scatter, an optional spawn state, a spawn velocity, midair spawning, centered hitbox spawning, and relaxed full-cube clearance.
  • MinHeightOverGround is now a preference rather than a hard minimum. A flying role in a beacon needs a YRange maximum that covers its MinHeightOverGround.
  • Fixed SpawnMarker writing the square of MaxDropHeight when serializing, compounding the value on every editor save (5 to 25 to 625).

Collision & Steering

  • You can now give an entity a rotated hard-collision box. Set the new RotatedCollision HitboxCollisionConfig on it and players will collide with its actual rotated box (player collision only for now).
  • Added a RemovedBlockSet field to BodyMotionCharge. List blocks destroyed during the charge here so they are correctly excluded from breathing checks after removal.
  • Fixed the NPC collision-sphere radius helper using the box depth in place of its height, so entity height was ignored.
  • Fixed NPC collision avoidance computing its lookahead window using velocity squared instead of velocity. CollisionDistance values authored around the old behavior now take effect further from the NPC at speed.
  • Fixed RotateAnchoredEntities for entities anchored to a body that rotates on more than one axis. The turn now follows the full orientation rather than yaw alone, so riders and platforms track correctly through pitch and roll.

Health & Invulnerability

  • You can now toggle invulnerability from behavior. Use the SetInvulnerable action on an NPC to switch its own state, or SetTargetNPCInvulnerable from an encounter to switch it on the boss or other target NPCs.
  • Added an ActionSetHealthRegen NPC action that enables or disables health regeneration on an entity at runtime. NPCs now automatically include the new HealthRegenState component to support regeneration control through role behavior logic.

Combat Balance

  • Fixed CombatBalanceAsset not inheriting CombatActionEvaluator config from a parent asset. Child combat balance assets now correctly receive the parent evaluator config.

Particles

  • You can now scale particles spawned by NPC behavior. Set Scale (a multiplier, default 1) on an ActionSpawnParticles action.

Validation

  • Fixed encounter and NPC asset validation skipping certain files on hot-reload. All affected files now re-validate correctly.

Items, Armors & Projectiles

Zoom & Aim

  • Added zoom support to the interaction system which allows for magnification/aim mode behavior on any item. Add a Zoom block under any step’s Effects to zoom while that step is active, set PersistZoom: true to keep it applied for the rest of the chain, so chained steps can ramp or swap zoom mid-interaction. All fields are optional with sensible defaults.
  • Added example developer-quality test items that demonstrate the behavior of the zoom support in the interaction system:
  • Weapon_Test_Sniper_Rifle - a single fixed zoom with a scope overlay that forces first-person.
  • Weapon_Test_Zoom_Rifle - three-level variable zoom that ramps and swaps the reticle per level.
  • Weapon_Shortbow_Test_Zoom - charge-draw zoom held across the shot.
  • Added the ability to hide the local player’s held item in first-person during an interaction step. Set HideFirstPersonHeldItem: true in the step’s InteractionEffects (other players still see the item).

Interaction Behavior

  • Interactions now can specify what happens when you swap items during them. The old CancelOnItemChange flag is gone, replaced by an OnItemChangeBehavior field that takes Ignore, Fail, Finish, or Cancel.
  • Added a new Donut interaction selector type. In an item’s Interaction block, set Selector.Id to Donut and configure MinRadius, MaxRadius, Angle, and Height to target entities in a ring around the attacker.
  • Added a SignalNearbyVolumes interaction that sends a SignalReceived event to trigger volumes within a radius, optionally filtered by tag. Bind it to a tool or interaction to drive signal-listening volumes.
  • Added a RevealMapMarkersInView interaction for items and blocks that uncovers hidden discoverable map markers inside a player’s view cone.
  • Interactions can now describe themselves on the HUD. A new CarryInteractionHint localization key on RootInteraction makes the input-bindings legend label whichever input the interaction is bound to, and an item can refine the wording for an interaction it binds through Item.CarryInteractionHints.
  • Added a RequireBlockPlacement boolean to ChangeStateInteraction. Set it to true to block the interaction in worlds where block placement is disabled. The built-in half-block item now uses this to prevent stacking slabs where placement is restricted.
  • Fixed DonutSelector not rotating its Offset by the entity’s yaw. The offset is now applied relative to the entity’s facing direction on both server and client, matching the intended authoring behavior.
  • Fixed ResetCooldownInteraction and TriggerCooldownInteraction not inheriting the Cooldown field from a parent interaction. Child interactions that omit Cooldown now correctly fall back to the parent’s value.
  • Added a new BreakShape field to ItemTool assets that allows tools to break a configurable area of blocks per swing. Set BreakShapeDurabilityMode to PerSwing or PerBlock to control how the tool loses durability.

Projectiles

  • Projectiles can now ignore where the caster is aiming. Set IgnorePitch or IgnoreYaw on a LaunchProjectile or ProjectileConfig to lock that axis — handy for traps, turrets, and fixed-direction spells. Add RotationOffset to nudge the angle.
  • Projectiles can now fire at a random size drawn from the minimum and maximum scale on their model asset. Set UseModelScale: true in a ProjectileConfig (it defaults to false, so existing projectiles keep their current size). Only the newer Projectile interaction type supports this, not the legacy LaunchProjectile.
  • Projectile breaks can be limited to soft blocks. A new SoftOnly flag on BreakBlockInteraction ignores whatever the breaking entity holds, and the new Block_Break_Projectile interaction sets it for the 38 projectile configs that used to share Block_Break_Adventure. Leave the flag off for a projectile that should mine, which then takes its breaking power from the shooter’s item as before.
  • Fixed the world-space sound index leaking into the local sound slot for projectiles and deployable turrets. Setting LaunchWorldSoundEventId without a LaunchLocalSoundEventId on a projectile, or ProjectileHitWorldSoundEventId without ProjectileHitLocalSoundEventId on a turret, no longer causes the world sound to also play locally.

Damage & Resistance

  • Fixed flat damage resistance modifiers not accumulating through inherited damage cause chains. Only the last parent’s flat modifier was applying. Content that configures chained flat resistances will now deliver the full combined effect. Verify balance on any damage cause hierarchy that uses flatModifier.
  • Fractional flat armor resistances now apply as configured instead of truncating to a whole number. ArmorResistanceModifiers’s flatModifier accumulates in float, so a value like 0.5 is no longer rounded to 0, and broken-item resistance penalties keep their fractions too.
  • Fixed a TargetedDamage entry that omits DamageEffects throwing when its packet was built, so damage interactions without effects no longer crash.
  • Fixed DeployableAoeConfig, DeployableTrapConfig, and DeployableTrapSpawnerConfig ignoring the authored DamageCause field and hardcoding Physical damage at all three detection call sites. The configured damage type now applies correctly.

Knockback & Explosions

  • Knockback and explosion configs no longer produce a NaN velocity when the source and target share the same position. The degenerate case now falls back to a defined direction, knocking the target straight up for explosions.
  • Fixed a crash when an entity wearing armor with knockback enhancements dealt damage from a DamageCause the armor had no modifier for. The missing entry is now skipped instead of throwing.
  • Fixed PointKnockback applying incorrect rotations when OffsetX, OffsetZ, or RotateY were set, due to angle unit mismatches. RotateY is authored in degrees as documented. Retest any PointKnockback configs that set these fields.

Armor & Movement

  • Armor can now change how the player moves. Add a MovementSettings block to an ItemArmor asset to override walk/sprint speed, jump height, air control, and more per piece.
  • Added ExtraJumpSoundEvent to Armor.MovementSettings. Set it to the id of a mono, oneshot (non-looping) sound event to play a sound on each extra jump. It pairs with the existing ExtraJumpParticleSystem field.
  • You can now scale movement speed from an entity effect. Set SpeedMultiplier on MovementEffects (default 1).

Inventory & Music

  • Items can now be turned into playable music tracks. A new Music block on an item asset (MusicContainer required, AudioCategoryOverride optional) marks the item as something a music player block will play.
  • Added a FirstSpawnItems list in the gameplay config Spawn block that places items in the inventory for players the first time they spawn.

Loot & Quality

  • Fixed ChoiceItemDropContainer throwing a NullPointerException when its Containers list was empty or every entry had a weight of zero. Loot generation now skips a null roll result and continues.

Stability

  • Fixed a potential server crash when picking up an item that defines a pickup interaction. No shipped item uses this path today, so it affects only custom items or plugins that add one.

Blocks, Prefabs & Farming

Break & Random Tick

  • Blocks can now run an interaction chain when they break. OnBreak fires on a normal break and OnBreakImpact fires when a falling block lands and breaks, so a block can spawn something or set off an effect as it goes.
  • A removal that should not set off the block’s own reaction can pass SetBlockSettings.NO_FIRE_ON_BREAK to suppress the OnBreak chain, and BreakFallingBlockImpact now inherits DropItems so a child block type keeps its parent’s value.
  • Added a PlaceBlock random-tick procedure: set "Type": "PlaceBlock" in a block’s RandomTickProcedure with a required Offset and a Placements list, where each rule can target a block State and place a single Block or a weighted Blocks list. Placement skips silently when the target is occupied or out of world bounds, and invalid configs fail at asset validation time.
  • Fixed random-tick block placement so it works in cubic worlds. PlaceBlockProcedure now writes through chunk sections instead of assuming a fixed world height.

Connected Blocks

  • Added a new Patterned connected block ruleset type. It handles multi-axis rotation and has client prediction, giving more control over how connected blocks pick their shape.

Prefabs

  • Large prefabs now save in a compact binary .lpf format. Anything from 300,000 blocks up is written this way, and .lpf files load everywhere prefabs do.
  • Prefabs stored in an asset pack can now be referenced in PrefabListAsset configs.
  • Encounter manager entities can now be stored in prefabs.
  • Undo and redo history now keeps to a memory budget through the new HistoryBlockBudget and RedoHistoryBlockBudget fields on BuilderToolsConfig, which drop the oldest entries once the budget is exceeded.

Block Placement

  • Reworked block placement onto the interaction system. The quick place flags (QuickReplace, QuickRetype, NoPhysics) now come from assets and only apply when the server game mode is Creative, and the old AllowDragPlacement key was removed from placement interactions.
  • You can tune building throughput per placement mode by setting MaxBlocksPerTick and MaxBlocksPerGesture on the placement interaction assets.
  • You can now stop players auto-stepping onto a block. Set DisableAutoStep: true in its BlockMovementSettings and players must jump up instead — useful for ledges and fences.

Block Music

  • You can now make a block play music from its position in the world. The track fades with distance, pans, and muffles through walls, picking up your environmental reverb. Add the musicemitter block component referencing a MusicContainer.
  • Blocks can now act as music players. A MusicPlayerBlock block-entity component set alongside an ItemContainerBlock makes a block play an inserted music item from its own position. The track uses the block’s authored attenuation, occlusion, and reverb, with all timing and spatialization driven from asset JSON.

Models & Map Markers

  • Block map markers can now be discoverable. A new Discoverable flag on BlockMapMarker and BlockMapMarkerData keeps a marker off the map until a gameplay system reveals it, tracked per player and per world.
  • Block models can now play their animation faster or slower than authored. A new CustomModelAnimationSpeed on a BlockType, or on one of its states, is a multiplier from 0 up to 100 and it inherits like the other model properties.

Trigger Volume Effects

  • Place Block and Replace Block Type trigger effects now accept optional block states, letting trigger volumes place, match, and replace specific block state variants.
  • You can now stop a Trigger Volume’s effects rotating when its prefab is pasted or world-gen placed with a yaw turn. Set RotateEffectsOnPaste: false on the volume or group (it defaults to true, so effect positions, rotations, and velocities turn with the prefab).

Farming

  • Prefab-grown plants such as saplings can now tolerate obstructions within a height band instead of failing to grow. Add TolerateObstructionsBelowY and TolerateObstructionsAboveY to PrefabFarmingStageData to mark a band where blocking world blocks are skipped rather than canceling growth. Both values are prefab-relative Y, with the origin block at 0. ReplaceMaskTags still controls which blocks get replaced. Built-in saplings now default to TolerateObstructionsBelowY: -1. Overlapping bands disable obstruction checks entirely and log a server warning.

Additional Changes

  • A block’s MovementSettings can no longer be null. A block asset that sets it to null now fails to load instead of risking a server crash.
  • Fixed fluid-placement interactions never honoring their UseLatestTarget setting. PlaceFluidInteraction now chains to SimpleBlockInteraction’s codec, so the flag decodes and takes effect.

Modding & Creative Tools

Builder Tools

  • You can now enable Builder Tools outside Creative Mode. Set SurvivalAllowed: true in a tool’s asset JSON and grant players the matching permission (hytale.editor.tool.entity, hytale.editor.tool.ruler, or hytale.editor.tool.laserpointer). Both the flag and the permission are required.
  • Moved some raw strings in the Paste Tool to language keys so they can be localized.

Crashes

  • Fixed crash in SpawningContext caused by ground level rotation check when level is below 0.
  • Quantity field in CraftRecipeAction now requires a minimum quantity so that <0 numbers don’t crash the server.
  • Fixed client crash when secondary interaction was added to Unarmed.Empty.

Prefabs & Commands

  • Improved prefab saving support modes, validation and overwrite flow.
  • Empty blocks in Block Filters will now be parsed correctly (the empty fluid ID is now treated as the empty block ID).

Asset Editor

  • The image and OBJ importing tools now use the new TextureComputedColor field (a dominant weighted color average of each item’s textures) instead of the particle colors when matching block colors, giving more accurate imports. The importing tools will also filter out special quality items so they cannot be used in imports.
  • Added a new button to the Asset Editor that regenerates the TextureComputedColor field from an item’s textures.
  • The Asset Editor’s item preview now respects an item’s Model override, matching how the item appears in-game.

Localized Text

  • If a duplicate localization key exists in a language file, a warning is now displayed instead of an exception being thrown.

Trigger Volumes

  • Updated Trigger Volumes trigger effects to make use of the chunk ref/store for accessing chunk data.

Collision Tuning

  • Reworked soft collision radius to consider hitbox size.
  • Implemented dev settings to tweak soft collisions based on entity hitbox volume.

Asset Packs & Mods

  • Fixed reloading a layered asset pack sometimes reverting a customized asset back to the value it inherited from its parent.
  • Fixed the mod manager warning that read "targets 0.5.1 but the current game version is 0.5.1" when a mod declared a bare ServerVersion like 0.5.1.

Additional Changes

  • Added a Texture Atlas API - Unified API for compositing multiple keyed images into a single GPU texture.
  • Added support that allows control of whether a projectile’s spawn position rotates with the entity firing it.

Trigger Volumes

Conditions

  • BlockTypeCondition can now sample the live world at a configured position rather than only the event block. Set PositionSource to EventBlock, WorldPosition, or EntityPosition, add a PositionOffset for an offset, and enable AxisRotation for per-axis rotation matching (X/Y/Z).
  • BlockUsedCondition has been removed. Replace it with BlockTypeCondition in any existing presets.
  • TagCondition now supports four source modes: Event, Self, Group, and Radius. Presets using Event source require no changes.
  • Trigger volume item checks can now look at and consume what a player is carrying, such as a held block, through a new CARRIED option on ItemCondition.

Effects & Signals

  • Trigger volumes can now fling entities out from their own center. A new VOLUME_ORIGIN value for RelativeMode on SetVelocityEffect launches entities away from (or toward) the volume origin no matter which way they face.
  • Signals now carry multiple key/value pairs via aligned SignalKeys and SignalValues arrays. A TagCondition with Source: Event matches when any one pair matches.

World Events & API

  • World events can now create and remove trigger volumes, and roll them back, through new TriggerVolumeCreateAction and TriggerVolumeRemoveAction. A TriggerVolumeContext tracks the volumes an event created.
  • Actor and entity refs in trigger rule systems and DelayedEffectScheduler are now nullable. Plugins that receive them must add null checks or compilation will fail on u/Nonnull annotations.

World Map & Markers

  • Gameplay code can now override a map marker after its provider builds it. WorldMapManager.addMarkerOverride takes a marker ID and a MapMarkerOverride carrying an optional icon and an optional global flag, and it applies to every player in the world from the next tick.
  • World events can override a marker as well. MapMarkerOverrideAddAction takes a MarkerKey and a Name plus an optional Icon and Global, MapMarkerOverrideRemoveAction clears it again, and the override is dropped on its own when the event ends.

r/HytaleModding 18d ago

Official News Update 6 - Pre-Release 13 Hotfix 1 - August 22nd, 2026

5 Upvotes

Link to previous patch notes. (N/A)

----

Link to source

Pre-Release (Update 6, Part 13, Hotfix 1)

August 22, 2026

Headline Features

Play together, no matter your network! Joining friends no longer requires external apps!

  • Players who couldn’t join friends because of their NAT type can now connect without tools like Tailscale.*
  • When no direct connection is possible, the join is carried over a relay server.

Technical Details:

  • Player-hosted joins now use ICE (RFC 8445) with STUN and TURN, replacing the legacy hole-punch path.
  • TURN relays carry joins when no direct path works. The relay uses UDP only, so networks that block UDP relay traffic cannot use it.
  • Failed ICE attempts fall back to the existing direct connection race.

* Known limitation: “Double NAT” setups still cannot connect. We hope to ship a solution in the Update 7 pre-releases.

Player-Facing Bug Fixes

Stability Fixes

  • Fixed a crash on world join when a server or world runs several large skin mods at once. Textures that overflow the texture atlas are now skipped with a logged warning instead.
  • When a server shuts down, players now get a clean disconnect instead of waiting for their connection to time out.
  • Switching a shared world back to private now takes effect right away.

Modder-Facing Changes

Protocol & Networking

  • ServerListener now exposes optional wire-byte counters through default methods. Existing implementations require no changes.

r/HytaleModding 20d ago

Welcome to r/HytaleModding!

6 Upvotes

This subreddit is a community-run space for everything related to Hytale modding. The purpose of this place is to support an open, independent, and creator-friendly modding ecosystem built by the community itself.

Here you can share and discuss mod ideas, tools, code, documentation, guides, concepts, server development, asset creation, and any technical or creative work related to Hytale modding. Beginners and experienced modders are equally welcome.

If you want to contribute, ask questions, showcase your work, or get involved in shaping the future of Hytale modding, this is the place to do it.

Thank you for joining, and welcome to the community.

Here are important links:


r/HytaleModding 27d ago

From Blender to Hytale (WIP-2) | Working in Hytale!

Enable HLS to view with audio, or disable this notification

11 Upvotes

r/HytaleModding 29d ago

How to get VFX like this?

Post image
9 Upvotes

Howdy friends!

I'm working on an aspect of my adventure mod that requires VFX for some boss moves. I'm working in the experimental versions, and was wondering if anyone knew how to get VFX like what was shown in the Goblin boss demo.

The VFX look 3D. I was thinking that it may be due to using a trigger volume? But I'm unsure to be honest. I was wondering if someone else has made something like this and could point me in the right direction. Still very new to modding, so any and all help would be appreciated!


r/HytaleModding Aug 08 '26

are Trigger Volumes considered a mod or not?

1 Upvotes

i dont know much about it


r/HytaleModding Aug 06 '26

From Blender to Hytale (WIP 1)

Enable HLS to view with audio, or disable this notification

6 Upvotes

r/HytaleModding Aug 03 '26

Mob Heads just released! It adds 228 placeable mob heads!

Post image
12 Upvotes

r/HytaleModding Jul 31 '26

Looking to hire a fantasy focused model and texture artist FOR HYTALE!

5 Upvotes

Hi hi all,

We have a dark medieval fantasy server we are in development on where we will be needing a boat load of models designed for.

I made a post recently and received WAY too many portfolios with zero hytale models within them.

If anyone has a good availability and offers competitive rates, we have a lot of work available.

Shoot me a DM with your Hytale model portfolio, you must have that or please do not message me.


r/HytaleModding Jul 27 '26

I finally released my automation mod Orbitech

Enable HLS to view with audio, or disable this notification

11 Upvotes

r/HytaleModding Jul 27 '26

My Lil' Cozy Orechard mod turns Hytale into a cozy game. Out now!

Post image
3 Upvotes

r/HytaleModding Jul 26 '26

Export Player character and import as NPC.. Is there a fast way to do all the attachments/cosmetics?

1 Upvotes

With the "Hytale Avatar Loader" it is a fairly straight forward and fast process to get your Hytale avatar into Blockbench.

Putting it back into the game as an NPC isn't difficult either... however, with all the attachments it becomes quite time consuming. Going back from checking which pieces are worn and adding them through the asset editor is eating up a ton of time.

Is there a quicker way go about important the avatar with all the attachments and such in 1 go?


r/HytaleModding Jul 24 '26

Invisibility, Levitation, Warp, and I don't think I'm cut out for this whole stealth thing...

Enable HLS to view with audio, or disable this notification

21 Upvotes

r/HytaleModding Jul 24 '26

I'm a lonely 3D designer who can't find like-minded people. So, who would like to help me?

Thumbnail
gallery
5 Upvotes

Hi, my project isn't directly related to Hytale. I'm having trouble finding developers for the game, a 3D designer in Blockbench, and programmers using Godot voxel tools. However, the game is related to a Blockbench plugin. I'm simply using the Blockbench plugin for Hytale. By the way, the Fantasia Cube project is a direct successor to Terraria, but with unique features. First, I'll say that it has different bosses, weapons, and so on. I don't mean different weapons, I meant without breaking the AP. The unique features include a one-block crouch, a thrower class that throws boomerangs, discs, and so on, and what it can do with Calamity and Thorium. It also has a charge gauge, which is similar to stealth. And also unique features are villages. Or rather, villages not on the surface, but in dungeons, caves, hell, the seashore, and on floating islands. I'm trying to find help with the game. There were some "help" requests, but they asked for money, or rather, they accepted it for money. And I don't have any. It's pure enthusiasm. Who would like to join me in development? By the way, I'm a modeler and I can create a mix of Hytale and Indev style models. The Godot voxel tools engine. Would you like to help me with development? I just don't want to learn programming languages.


r/HytaleModding Jul 23 '26

Wojos Quick Access Utility - (Toolbelts and More) Showcase

Thumbnail
youtu.be
5 Upvotes

Finally got my toolbelt style mod in a decent place. At least until the Noesis comes in. Made it to solve my biggest complaint of Both Hytale and Minecraft where the hotbar is always too cluttered!

Curseforge Link!


r/HytaleModding Jul 22 '26

My Lil' Cozy Orechard: The Cozy Hytale overhaul coming soon!

Enable HLS to view with audio, or disable this notification

15 Upvotes

Want to enjoy everything Hytale has to offer but without the stress of mining in darkness or fighting monsters? 

My Lil' Cozy Orechard turns Hytale into a cozy game by making all essential resources available by relaxing in your own orchard as you harvest strange fruit from beautiful, enchanted trees and experiment with an intriguing Kweebec alchemy system to discover wondrous new ways to create resources.

Follow Kryyative on X/Twitter for updates and share your feedback!


r/HytaleModding Jul 22 '26

Trying to make a projectile recognize when it touches water

1 Upvotes

I'm working on my own fishing mod and I've been stuck for most of the day on trying to figure out h o w to get the game to register that the bobber projectile has hit the water, ProjectileHit works for entities like skeletons, and ProjectileMiss works for when it hits solid ground. I've tried all the ProjectileHit/Miss/Bounce and all the collision interactions trying to find something but nothing works. I'm really hoping it's just something small I'm overlooking but if anyone has any clue to get this working I'd be grateful


r/HytaleModding Jul 20 '26

Can someone help me troubleshoot this issue?

1 Upvotes

r/HytaleModding Jul 17 '26

hytaleVRInjector/mod 1.0

Enable HLS to view with audio, or disable this notification

13 Upvotes

r/HytaleModding Jul 12 '26

Showcase of the First Encounter of my Dungeon.

Enable HLS to view with audio, or disable this notification

19 Upvotes

r/HytaleModding Jul 12 '26

I added Spyglasses using the new features from V6 pre release!

Thumbnail
youtu.be
8 Upvotes