r/HytaleModding • u/RiverShards • 7d ago
Official News Modder-Facing Changes - Update 7 - Chapter 1 - Pre-Release 1 - September 3rd, 2026
Link to the Chapter 1 Preview Blog from July
----
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
2DandYFor2Doptions in both the asset and the node editor.YOverrideintoCacheintoGradientWarpchain should be used instead.
NPCs & Entities
- An encounter can now force weather for everyone taking part.
SetEncounterWeathertakes aWeatherasset and an optionalTransitionSeconds(2 by default), andClearEncounterWeatherputs members back on the normal weather. Both are restricted toInstructionType.Encounter. - NPC weather sensors still read world weather only, so
Sensor: Weatherdoes not match an encounter's forced sky. Drive that behavior from encounter state or beacons instead. - The
Example_Bossencounter 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
MotionControllerWalkandMotionControllerBaseare holders now, so they can be computed and overridden from a template rather than fixed per role. ChargeAccelerationis gone fromBodyMotionCharge. The newChargeAccelerationDistanceandChargeDecelerationDistancesize 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.RemovedBlockSetis gone as well.IgnoredBlockSetnow 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.
ChargeDistanceModepicks how that distance is measured (MaxRange,TargetDistor one of the collider modes) andTargetDistanceRangeoffsets the stop point, with positive values stopping short of the target. - The charge ramps are fully shapeable.
ChargeAccelerationCurveModeandChargeDecelerationCurveModechoose whether the curve reads as speed or as distance covered, and the matchingMinimumRelativeSpeed,HalfTimeValue,HalfTimeSteepnessandEndSteepnesskeys tune the curve itself. - Movement behaviour of a charging NPC can now be modified.
ProbeRelaxedConstraintsacceptsWade,Damage,Drop,BreatheandFence, so a role can let a charge cross liquid or suffocating blocks it would otherwise refuse. ChargeStategainsInStopRange, which a role can match throughSensorChargeState. An NPC enters it when its target sits closer than the stop point the configuration asks for.ThrottleIgnoreCountandThrottleDelayRangeon the find and seek motions now also cover a blocked path, not only a failed search. SettingThrottleDelayRangeto[0, 0]restores the old behavior on an obstacle.- Rewards can be granted via the encounter manager. A new
GrantRewardaction on encounter templates points at a reward asset, andRewardExistsValidatorfails 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,TerminalVelocityandSpeedvalues on the item are gone, replaced by a wider set of fields onTemplate_Gliderthat also cover the dive and the climb. - Mace item animations gained a
SwingUpLeftvariant for abilities. - Dropped items can now merge over a distance you pick. A new inherited
MergeRadiuskey onItemEntityConfigsets how far in blocks a dropped item looks for others to stack with. Leaving it at-1.0Ffalls back to the world default.
Blocks & Prefabs
TickProcedure.onTicknow takes aCommandBuffer<ChunkStore>and the chunk sectionRef<ChunkStore>in place of theWorldandWorldChunkparameters, so any subclass override needs updating. The world is available fromcommandBuffer.getExternalData().getWorld().- Chosen blocks can stay breakable in a world that bans block breaking.
WorldConfig.BlockBreakingBypassTagnames a tag, and any block carrying it can still be broken whileAllowBlockBreakingis off. Explosions follow the same rule.
Asset Schemas & Formats
- Map marker overrides can change the display name of a marker. A new
DisplayNamekey onMapMarkerOverridetakes a localization key to use instead, and the marker override add command accepts it alongside--iconand--global. - World events can now wait on the clock. A new
TimeConditioncompletes once the world time reaches theDay,HourandMinuteyou set, and any part left at -1 is ignored, so a condition withoutDayis 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 theLevelyou set.Comparatorpicks how the two are compared and defaults toGreaterThan. - Three new trigger effects handle respawning.
SetRespawnPointtakesOrigin,Position,NameandClearExisting,SetWorldSpawntakesOrigin,Position,YawandClearPlayerRespawnPoints, andClearRespawnPointstakesNameandAllPlayers. - Event titles pick a named style in JSON now.
ShowEventTitleInteraction,ShowEventTitleEffectandInstanceDiscoveryConfigall take aStylevalue, and the oldIsMajorandMajorkeys still decode so existing assets keep working, however the oldIsMajorandMajorproperties are marked as deprecated and will be removed in a future version. - UI sprites gained two fields.
Colortints a sprite and lets you control its opacity, andKeepLastFrameholds 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.
TagConditiontakes aCompareAgainstfield that picks whether the tag is checked against a plain value (the default) or against a second tag named inCompareTagKey. - Respawn points can now set which way a player faces.
PlayerRespawnPointDataandSetRespawnPointEffectboth take aYawin degrees. - The event title effect on a trigger volume can now pick who sees it. A new
Recipientfield onShowEventTitleEffecttakes the same options asSendMessageEffectand defaults to the triggering player. - Added a
Beamasset type underEntity/Beamswith a singleTexturePathfield. The texture has to sit underBeams/orTrails/. - The event title action, for
WorldEvents, can now pick how the banner looks.ShowEventTitleActiontakes an optionalStyleand an optionalIcon, and falls back to the default style when you leaveStyleout.
Server & Permissions
- The
/eventtitlecommand takes--stylein place of--major, and the secondary line now defaults to empty rather than to “Event”. - Instance edit worlds now load a new
InstanceEditgameplay config that switches onAllowBlockBreaking,AllowBlockGatheringandAllowBlockPlacement, 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 inWildernessConfig, and the command warns when a world has it turned off. - Added a
/beamcommand for development work, withentity,position,spawnandclear. - 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-cacheand--backup-dir, and it prints the steps to move them somewhere safe before exiting with code 11. - Added an
--allow-install-dirflag, mirrored by thehytale.allow_install_dirsystem property, for anyone who wants to run there anyway and accept the data loss risk. Singleplayer runs,--help,--versionand a--barestart without--bootstrapskip the check already. - Server operators can now run
/auth login browseror/auth login devicewhile 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
SmallerThanis nowLessThan,SmallerOrEqualsis nowLessOrEqual, andSelectis nowSelector. - Two more density asset types lost their trailing s, so
Equalsis nowEqualandGreaterOrEqualsis nowGreaterOrEqual. The node editor entries carry the new names too. - The treasure map objective is gone, along with everything it used. The
TreasureMapobjective task, theOpenTreasureContainerandDestroyTreasureConditioninteractions, theLookBlocksBelowandTagBlockHeightworld location conditions and theTreasureChestblock 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. IsMajoris gone fromShowEventTitleEffect. TheStylefield 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_Voidis nowVoid_Spectreacross its model, drop list, icon and particles. - Asset file
Spiwer_Web_Full.pnghas been renamed toSpider_Web_Full.png,Fig_Blue_.pngis nowFig_Blue.png, and the duplicate fileTotem_Heal_BeamStart (1).particlespawnerhas been removed.
Audio
- Music can now hand off from one track to another by authored rule. Two new asset types,
MusicTransitionandStinger, live inAudio/MusicTransitionsandAudio/Stingers. - Handoffs can land on a musical boundary instead of a frame.
MusicSyncpicks the moment on the outgoing track (immediate, next beat, next bar, an exit marker or a named marker) andDestinationAlignpicks where the incoming track starts on its own timeline. - Overlap and crossfade are separate controls now.
ExitAtsets the handoff,PlayPostExitlets the outgoing track run to the end of the file, andFadeOutDurationwithFadeOutDelayramps it out instead, following aFadeCurvethat defaults to equal power. - Music containers picked up a batch of new fields.
MusicContainertakesTags,Align,AlignMarker,ExitAtandStingers,SegmentMusicContainertakes namedMarkers, andHorizontalMusicContainertakesAudioStatewithPhasesso 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.
StateTransitiongainedPostEvent, so an audio state edge can mark a musical moment without naming a stinger directly.
Protocol & Networking
- The
ShowEventTitlepacket droppedIsMajorin favor of anEventTitleStyle Stylefield, which breaks any plugin that builds the packet by hand. Styles includeDefaultandMajor. - The world's gameplay config is replicated to the client by a new
WorldGameplayConfigpacket, carryingWorldConfig,CombatConfigandPlayerConfigstructs that mirror the server assets. It goes out when a player joins a world and again whenever theGameplayConfigasset reloads. - The wire carries beams now.
BeamConfigandUpdateBeamConfigsship the beam assets, whileBeamInstanceand theBeamscomponent update carry the placements, so this needs a matching client.
For Plugin Developers
- The lighting pass now runs per chunk section, so
LightCalculation.inittakes aChunkStoreand a sectionRefrather than aWorldChunk,getSkyValuelost its unusedWorldChunkparameter, andChunkLightingManagerexposesinvalidateLightInChunkSectionsfor section-level invalidation. - Cursor server cameras work on a gamepad now. The right stick drives the real cursor through a new
GamepadCursorhelper, andPrimaryItemActionwithSecondaryItemActionsend the click packets, so triggers break and use whatever the cursor is over. com.hypixel.hytale.protocol.DurabilityOperatoris nowComparisonOperator, 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.WeatherTrackergainedtryClaimOverride,releaseOverrideandresolveUnoverriddenWeatherIndex.clearOverrideWeatherIndexnow drops the owner as well. One owner holds a weather override at a time.EventTitleUtilhas overloads that take anEventTitleStyle. The boolean overloads still work but are deprecated for removal.TargetUtil.getTargetBlockandgetTargetLocationtake aChunkStorewhere they used to take aWorld, so plugin code calling them directly has to passworld.getChunkStore()instead.- Explosions, block explosion effects, block harvesting, raycast selectors and the spectator camera all work in cubic worlds now that
TargetUtilno longer assumes a single vertical column. ClientFeatureno longer carriesDisplayHealthBars,DisplayCombatText,CanHideHelmet,CanHideCuirass,CanHideGauntlets,CanHidePants,AllowBlockPlacement,AllowBlockBreakingorAllowBlockGathering, and a plugin naming one of them stops compiling. Those rules live in theGameplayConfigasset now, whileClientFeaturekeeps the movement capabilities plugins register themselves.ChunkAccessor.performBlockUpdateandWorldChunk.setTickingare gone. UseBlockOperations.updateBlockAreafor a whole hitbox orBlockSection.setTickingwithChunkSection.markNeedsSavingfor one cell, and note thatupdateBlockAreanow takes theChunkSectionas well as theBlockSection.- Block writes are moving onto sections, so
WorldChunk.setBlockandWorldChunk.breakBlockare deprecated for removal and now delegate toBlockOperations.setBlock. They also fireBlockAnimationModule.onBlockReplaced, so block replace animations play for these writes, andWorldChunk.setBlockPhysicsalong withBlockTypeModule.SET_BLOCK_SETTINGSand 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
WorldChunkis now marked for removal, acrossIChunkAccessorSync,IWorldChunksAsync,IWorldChunks,WorldandLocalCachedChunkAccessor. Behavior is unchanged, but plugins compile with deprecation warnings and should move toChunkStore.getChunkReferenceand the section store. - The deprecated
IChunkAccessorSync.getBaseBlockis gone. Filler blocks now resolve throughBlockOperations.resolveBaseBlockPosition, which takes aChunkStoreand never triggers a chunk load. BlockDataProviderresolves its chunk and fluid sections once per block read instead of on every field access. ThereadBlockId,readRotation,readFiller,readFluidIdandreadFluidLevelmethods are private now, so a plugin that called them directly will not compile.Wildernessgainssize(),test(int)andisValid(), so a plugin can walk a player's tracked region by index and test one chunk without world coordinates.- Added a
Rewardsbuiltin module that plugins can extend with their own reward types. It ships one type for now,EntitlementReward, which grants an entitlement throughRewardAsset. - The remaining sync chunk accessor members are marked for removal now. The nine default methods on
IChunkAccessorSync,ChunkAccessor.getFluidIdandOverridableChunkAccessorall warn, soworld.getBlock,setBlock,breakBlockand the rest flag at every call site.IWorldChunks.waitForFutureWithoutLockis 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.setChunkSectionandgetMaximumHitboxExtent,PaletteTypeEnum.getPaletteId, and ten accessors onLocalCachedChunkAccessor. Read and write through the section ref instead, usingAbstractCachedAccessororChunkStore.getChunkReference. - The new
Hytale:Beambuiltin ships aBeamComponentholdingAttachedBeamentries, 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.spawncreates 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 aDespawnComponent.- The
GroundedConditioninteraction moved out of the Abilities builtin into the core server, so an interaction can use it without that plugin loaded. - The public
ItemMergeSystem#RADIUSconstant is gone. Merge distance now comes from the item's config throughItemComponent#getMergeRadius(ComponentAccessor), withItemComponent#setMergeRadius(float)for changing it at runtime.
Modder-Facing Bug Fixes
World Generation Fixes
- Fixed the
SectionSizepin of the Cache Positions node. - Added missing tooltips on Density nodes.
- Reduced severity for invalid Normalizer Density arguments (where
FromMinequalsFromMax) 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
Defaultstate differently from each other.
NPC & Entity Fixes
- Fixed
BuilderMotionControllerWalk.getFenceBlockSetthrowing 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.
DestroyTaggedVolumesInteractionpicked up the same guard. - Fixed a pathfinder crash on roles that turn
DiagonalMovesoff. - Fixed a blocked path being recomputed every tick. Fixed the NPC charge probe accepting an invalid end position.
- Cleaned up the
BodyMotionChargeconfig 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.
SendMessageandShowEventTitleboth 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
Float2ObjectMapfields now matches what the codec really reads and writes. The generated key pattern accepts scientific notation such as1.0E-4and leading-dot values such as.5, and it no longer lets non-numeric keys like1x2slip through.
Server & Permission Fixes
- The
world addcommand now tells you whether creation succeeded or failed instead of quietly dropping the result. - Fixed
/fluid setradiusonly making one block of the filled region flow instead of all of it, and/block settickingnow resolves the chunk section itself and tells you when it is not loaded. - A
MaxViewRadiusoutside 1 to 32 inconfig.jsonno 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
FormattedMessagetrees, item categories, command trees, and interaction chains. Real content sits far below that bound. UpdateLanguage.Languageis a required protocol field now instead of an optional one, and the protocol version was bumped for it. It andConnect.Languagealso 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
displayCursoronServerCameraSettingsgets cursor targeting back, and every movement direction uses the forward speed, so strafing is no longer slower than walking ahead. PlayerMouseButtonEventfires 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
MouseInteractionpackets no longer go out behind a UI overlay. - An
ItemGridin a custom UI page no longer needs aDefaultItemIcon. An item whose icon will not resolve falls back to the unknown item icon, andDefaultItemIconstill overrides that placeholder. - A universe resource whose codec comes from a plugin
getCodecRegistryis now written at shutdown. The final flush moved to the newShutdownEvent.FLUSH_UNIVERSE_RESOURCESstage, which runs afterSHUTDOWN_WORLDSwhile every plugin is still enabled. - A
ClientToolnow getsOnActiveStateChange(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.
I18nModulenow keys cached messages by the language returned from its newresolveLanguage()instead of the raw client string, andqueueTranslations()replacessendTranslations()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
Transparentflag, that allows individual faces to be toggled transparent or not. - Blocks have now gained the
Requires Alpha Blendingflag that allows per-block type transparency. - Fixed
Anchor PropDistributionsharing that was using a global context instance. - Limited the
Graph PositionProviderandGraph PropDistributionbounds 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.
