Managing a Hytale server is a bit like juggling: you have to maintain stable performance to ensure gameplay enjoyment, while managing resource consumption that can skyrocket at any moment.
A small group of explorers scattered across the map can bring your server to its knees faster than an army of players in the same spot. Faced with these unpredictable load spikes, the risk of lag, TPS (Ticks Per Second) drops, or even crashes becomes a reality.
This is precisely where the Hytale Performance Saver Plugin comes in—a smartly designed plugin to ensure your Hytale server’s stability. Its goal isn’t to restrict your server, but to intelligently manage resource pressure to maintain a pleasant gaming experience, even during the most intense moments.
Main Features
This plugin acts as a vigilant guardian for your server. It uses several optimization measures to manage resource consumption dynamically.
TPS Limiting (Ticks Per Second)
For the player experience, it is much more pleasant to have stable TPS, even if slightly lower, than high but highly fluctuating TPS. The plugin allows you to cap the TPS at a configurable value (20 by default) to ensure constant fluidity. Even better, it intelligently reduces TPS when the server is empty (5 by default), saving valuable resources when no one is connected.
Dynamic View Radius Adjustment
This is the most powerful feature of this plugin. The view radius (draw distance) is one of the biggest consumers of memory and CPU. The plugin constantly monitors your server’s health:
- CPU Pressure: Detected by a drop in TPS.
- RAM Pressure: Detected by observing memory cleanup attempts by Java (the famous “Garbage Collection”).
If pressure is detected, the plugin will automatically and dynamically lower the view radius to free up resources. Once the server stabilizes, it progressively increases the display distance again. This measure is incredibly effective at preventing resource-related crashes.
Garbage Collector
Java tends to hold onto memory even if it is no longer being used. This plugin observes the number of loaded chunks on your server. If it detects a sharp drop (for example, players disconnecting or grouping up), it triggers an extra memory cleanup, ensuring that unused resources are properly released.
Plugin Installation
Installation is a breeze. Simply place the plugin’s JAR file, once downloaded, into your Hytale server’s mods/ folder. Restart the server, and the plugin will be active.
Plugin Configuration
The plugin is configured via a single file that you must create: config.json.
This file must be placed in a specific folder.
Configuration file path: mods/Nitrado_PerformanceSaver/config.json
TPS Adjustment (Tps)
This section controls the behavior of the TPS limiting.
| Option | Type | Default Value | Description |
| Enabled | boolean | true | Enables or disables TPS limiting on your server. |
| TpsLimit | integer | 20 | Defines the maximum number of ticks per second (TPS) the server will attempt to reach when players are connected. A stable value of 20 is ideal for a fluid experience. |
| TpsLimitEmpty | integer | 5 | Limits TPS when the server is empty to save resources. |
| OnlyWorlds | string array | [] | Allows restricting TPS adjustment to specific worlds. Leave empty to apply to all worlds. Use __DEFAULT to target the default world. |
| InitialDelaySeconds | integer | 30 | Delay in seconds after server startup before TPS adjustment begins. |
| CheckIntervalSeconds | integer | 5 | Frequency (in seconds) at which the plugin checks and adjusts TPS. |
| EmptyLimitDelaySeconds | integer | 300 | Inactivity time (in seconds) before the empty server TPS limit is applied. |
View Radius Adjustment (ViewRadius)
Controls the dynamic adjustment of the display distance based on server load.
| Option | Type | Default Value | Description |
| Enabled | boolean | true | Enables or disables dynamic view radius adjustment. |
| MinViewRadius | integer | 2 | The absolute minimum view radius the plugin can set. Prevents the view distance from becoming too low. |
| DecreaseFactor | double | 0.75 | The factor by which the current view radius is multiplied to reduce it. A value of 0.75 means the radius will drop to 75% of its previous value. |
| IncreaseValue | integer | 1 | The value added to the view radius when it is in the recovery phase (e.g., from 8 to 9). |
| InitialDelaySeconds | integer | 30 | Delay before the module starts monitoring performance. |
| CheckIntervalSeconds | integer | 5 | Frequency for checking resource load. |
| RecoveryWaitTimeSeconds | integer | 60 | Wait time (in seconds) after stabilization before attempting to increase the view radius again. |
| RequireNotifyPermission | boolean | false | If true, only players with the appropriate permission will receive notifications about view distance changes. |
Memory Monitor (GcMonitor)
Monitors RAM to detect pressure.
| Option | Type | Default Value | Description |
| Enabled | boolean | true | Enables or disables memory-based pressure detection. |
| HeapThresholdRatio | double | 0.85 | RAM usage threshold (85% by default) that triggers pressure detection. |
| TriggerSequenceLength | integer | 3 | Number of consecutive memory cleanup events with high RAM needed to trigger a view radius reduction. |
| WindowSeconds | integer | 60 | Time window (in seconds) to analyze memory cleanup events. |
TPS Monitor (TpsMonitor)
Monitors TPS to detect processor (CPU) pressure.
| Option | Type | Default Value | Description |
| Enabled | boolean | true | Enables or disables TPS-based pressure detection. |
| TpsWaterMarkHigh | double | 0.75 | TPS ratio (75% of the limit) above which the view radius can begin to recover. |
| TpsWaterMarkLow | double | 0.6 | TPS ratio (60% of the limit) below which the view radius must be reduced. |
| OnlyWorlds | string array | [] | Restricts TPS monitoring to specific worlds. Leave empty for all. |
| AdjustmentDelaySeconds | integer | 20 | Delay in seconds between two view radius adjustments triggered by a TPS drop. |
Chunk Collection (ChunkGarbageCollection)
Triggers memory cleanup when chunk unloading suggests that RAM can be freed.
| Option | Type | Default Value | Description |
| Enabled | boolean | true | Enables or disables this feature. |
| MinChunkCount | integer | 128 | Minimum number of loaded chunks before this function becomes active. |
| ChunkDropRatioThreshold | double | 0.8 | If the number of chunks falls below this ratio (e.g., from 1000 to 799), a cleanup is triggered. |
| GarbageCollectionDelaySeconds | integer | 300 | Minimum time between two memory cleanups triggered by this module. |
| InitialDelaySeconds | integer | 5 | Delay before chunk monitoring begins. |
| CheckIntervalSeconds | integer | 5 | Frequency for checking the chunk count. |
Complete Configuration Example
Here is an example of the complete config.json file with all default values. You can copy and paste this content and adapt it to your needs.
{
"Tps": {
"Enabled": true,
"TpsLimit": 20,
"TpsLimitEmpty": 5,
"OnlyWorlds": [],
"InitialDelaySeconds": 30,
"CheckIntervalSeconds": 5,
"EmptyLimitDelaySeconds": 300
},
"ViewRadius": {
"Enabled": true,
"MinViewRadius": 2,
"DecreaseFactor": 0.75,
"IncreaseValue": 1,
"InitialDelaySeconds": 30,
"CheckIntervalSeconds": 5,
"RecoveryWaitTimeSeconds": 60,
"RequireNotifyPermission": false,
"GcMonitor": {
"Enabled": true,
"HeapThresholdRatio": 0.85,
"TriggerSequenceLength": 3,
"WindowSeconds": 60
},
"TpsMonitor": {
"Enabled": true,
"TpsWaterMarkHigh": 0.75,
"TpsWaterMarkLow": 0.6,
"OnlyWorlds": [],
"AdjustmentDelaySeconds": 20
}
},
"ChunkGarbageCollection": {
"Enabled": true,
"MinChunkCount": 128,
"ChunkDropRatioThreshold": 0.8,
"GarbageCollectionDelaySeconds": 300,
"InitialDelaySeconds": 5,
"CheckIntervalSeconds": 5
}
}
