volatile-entities-1.0.3-SNAPSHOT.jar
9 Jun 2026
CurseForge · Hytale mod
VolatileEntities is an ECS-based framework for Hytale that lets you create and manage non-persistent or time-controlled entities, without leaving “garbage” in the world.
Quick answer
VolatileEntities volatile-entities-1.0.3-SNAPSHOT.jar targets Hytale. Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer. No required dependencies listed for this file.
Where it goes
Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.
Put Hytale mods on the world host or dedicated server. Singleplayer runs a local server too; Hytale does not use separate client mods.
volatile-entities-1.0.3-SNAPSHOT.jar. Change the file and its required mods may change too.
This file does not list any required mods. Do not add a library just because a different file uses it.
This file does not list any required or optional project dependencies. Check the creator notes before changing an existing world.
Before you install it
Built for VolatileEntities volatile-entities-1.0.3-SNAPSHOT.jar. Pick another file and the loader, install side or required mods may change.
Use volatile-entities-1.0.3-SNAPSHOT.jar. It targets Hytale; another release may target a different game build or dependency set.
This file does not list any required mods. Do not add a library just because a different file uses it.
Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.
Use the “Get this file” button beside volatile-entities-1.0.3-SNAPSHOT.jar. It opens that exact file at the source.
About this project
VolatileEntities is an ECS-based framework for Hytale that lets you create and manage non-persistent or time-controlled entities, without leaving “garbage” in the world.
It is designed to:
Any entity with a VolatileComponent is automatically removed on the very first tick after a server restart, thanks to:
expiredOnLoad flag handled by the component’s codec (VolatileComponent.CODEC),VolatileTickSystem that kills “loaded-from-disk” volatile entities.This guarantees that volatile entities never survive a reboot, even if they were saved to disk.
Using VolatileConfig and VolatilePolicy, you can precisely control how long an entity should live at runtime:
IDLE_TIMEOUT – despawn after X ticks or seconds of activity,MAX_DISTANCE – despawn when too far from a linked entity,LINKED_ENTITY_INVALID – despawn if the linked entity becomes invalid,CUSTOM – fully custom despawn logic via a predicate on VolatileContext.All of these are evaluated by VolatileTickSystem while your plugin is loaded.
Policies are not exclusive.
A single volatile entity can combine multiple policies at the same time. The entity will be removed as soon as any policy condition is met.
For example, an entity can:
IDLE_TIMEOUT),MAX_DISTANCE),OWNER_DISCONNECT).This allows you to express complex lifecycles without custom code.
VolatileEntities.builder()
.withinDistance(targetRef, 30f)
.idleTimeoutSeconds(10f)
.ownedBy(playerUuid)
.spawn(commandBuffer);
This example demonstrates how multiple VolatilePolicy rules can be combined inside a single VolatileConfig.
Policies are not exclusive: an entity can have several lifecycle rules applied at the same time.
The entity will be removed as soon as any policy condition is met.
VolatileConfig.VolatileConfigBuilder configBuilder = VolatileConfig.builder()
// Automatically remove the entity when its chunk unloads
.policy(VolatilePolicy.CHUNK_UNLOAD)
// Remove immediately as soon as a policy condition becomes invalid
.removeOnInvalid(true);
// Optionally link this volatile entity to another one (e.g. a mob or NPC)
if (linkedEntity != null) {
configBuilder
.policy(VolatilePolicy.LINKED_ENTITY_INVALID)
.linkedEntity(linkedEntity);
}
VolatileConfig config = configBuilder.build();
return new VolatileComponent(config);
DespawnComponent (chunk unload/reload safe)VolatileEntities integrates cleanly with vanilla Hytale systems:
DespawnComponent + DespawnSystem handle absolute, real-time TTL,USE_DESPAWN_TTL policy tells VolatileEntities to delegate TTL handling entirely to DespawnComponent.This means:
TimeResource), not ticks,You can therefore choose between:
IDLE_TIMEOUT), orUSE_DESPAWN_TTL + DespawnComponent).To solve the classic “entities left behind after removing a mod” problem, VolatileEntities uses a keep-alive pattern:
VolatileDespawnKeepAliveSystem continuously refreshes a vanilla DespawnComponent on volatile entities (except those using USE_DESPAWN_TTL),At that point, Hytale’s core DespawnSystem automatically cleans up all remaining volatile entities, even though your plugin is no longer present.
No manual world scans. No orphaned entities.
In addition to core TTL policies, the framework supports:
CHUNK_UNLOAD – automatically remove volatile entities when their chunk unloads (handled by VolatileChunkUnloadSystem, an EntityEventSystem<ChunkUnloadEvent>).
OWNER_DISCONNECT – mark or remove volatile entities owned by a player when they disconnect (handled by VolatileOwnerDisconnectListener, listening to PlayerDisconnectEvent).
Combined together, these policies form a robust lifecycle toolkit for temporary entities.
Use VolatileEntities to mark:
as volatile, so that they:
If you already spawn an entity manually (for example a hologram), you can simply attach a VolatileComponent to make it non-persistent.
holder.addComponent(
VolatileComponent.getComponentType(),
VolatileComponent.restartOnly()
);
Result:
To despawn an entity after a fixed amount of real time, even across chunk unloads, combine DespawnComponent with USE_DESPAWN_TTL:
holder.addComponent(
DespawnComponent.getComponentType(),
DespawnComponent.despawnInSeconds(time, 10f)
);
VolatileConfig cfg = VolatileConfig.builder()
.policy(VolatilePolicy.USE_DESPAWN_TTL)
.build();
holder.addComponent(
VolatileComponent.getComponentType(),
new VolatileComponent(cfg)
);
Here:
You can mark an entity as volatile after it already exists:
store.putComponent(
ref,
VolatileComponent.getComponentType(),
VolatileComponent.restartOnly()
);
No respawn or manual despawn logic required.
VolatileComponent – factory methodsrestartOnly() – runtime-only, removed on restartwithTimeout(int ticks) / withTimeoutSeconds(float seconds, int tickRate)withinDistance(Ref<EntityStore> target, float distance)linkedTo(Ref<EntityStore> target)ownedBy(UUID playerUuid)useDespawnTtl()VolatileConfigPresets and builders for advanced control:
chunkBound()linkedTo(ref)withinDistance(ref, distance)ownedBy(playerUuid)withTimeout(ticks)useDespawnTtl()custom(ctx -> { ... })VolatileEntities.builder()For convenience, the builder API provides a fluent way to spawn volatile entities:
VolatileEntities.builder()
.at(new Vector3d(x, y, z))
.with(MyComponent.TYPE, new MyComponent(...))
.withinDistance(targetRef, 50f)
.idleTimeoutSeconds(10f)
.spawn(commandBuffer);
Drop the VolatileEntities JAR into your server’s plugin folder.
Declare a dependency in your plugin manifest:
{
"Group": "Ender_Griefeur99",
"Name": "MyPlugin",
"Version": "1.0.0",
"Main": "fr.ender_griefeur99.myplugin.MyPlugin",
"ServerVersion": "*",
"IncludesAssetPack": false,
"Dependencies": {
"Ender_Griefeur99:VolatileEntities": "*"
}
}
Project description from CurseForge.
Recent files
9 Jun 2026
17 Feb 2026
26 Jan 2026
Looking for an older file? The official CurseForge project page is in Resources.