hyfixes-bundle-v1.9.7.zip
What's new
[1.9.7] - 2026-01-20
//github.com/John-Willikers/hyfixes/blob/main/CHANGELOG.md#197---2026-01-20" rel="noopener nofollow" target="_blank">https://github.com/John-Willikers/hyfixes/blob/main/CHANGELOG.md#197---2026-01-20" aria-label="Permalink: [1.9.7] - 2026-01-20">- PacketHandler transformer: Corrected class paths for PongType (now in protocol.packets.connection), PingInfo (inner class), and HistoricMetric (renamed from PingMetricSet)
- UUIDSystem transformer: Fixed package path (server.core.universe.world.storage) and method descriptor for onEntityRemove()
- UUIDRemoveMethodVisitor: Fixed UUIDComponent class path (server.core.entity)
- PongType:
com/hypixel/hytale/protocol/packets/connection/PongType - PingInfo:
com/hypixel/hytale/server/core/io/PacketHandler$PingInfo - HistoricMetric:
com/hypixel/hytale/metrics/metric/HistoricMetric - UUIDSystem:
com.hypixel.hytale.server.core.universe.world.storage.EntityStore$UUIDSystem - UUIDComponent:
com/hypixel/hytale/server/core/entity/UUIDComponent
[1.9.6] - 2026-01-20
//github.com/John-Willikers/hyfixes/blob/main/CHANGELOG.md#196---2026-01-20" rel="noopener nofollow" target="_blank">https://github.com/John-Willikers/hyfixes/blob/main/CHANGELOG.md#196---2026-01-20" aria-label="Permalink: [1.9.6] - 2026-01-20">- Target:
PacketHandler.getOperationTimeoutThreshold() - Bug: Players get kicked when experiencing network lag during block-breaking or weapon interactions
- GitHub Issue: #25
- Error:
RuntimeException: Client took too long to send clientData! - Root Cause: Vanilla timeout formula
(ping × 2.0) + 3000msis too aggressive for players with unstable connections - Fix: Bytecode transformation replaces timeout calculation with configurable values:
- Default
baseTimeoutMs: 6000 (was 3000) - Default
pingMultiplier: 3.0 (was 2.0) - Configurable via
mods/hyfixes/config.json
- Default
- Impact: Players on unstable connections no longer get randomly kicked during interactions
- Target:
EntityStore$UUIDSystem.onEntityRemove() - Bug: Server crashes with NPE when removing entities during chunk unload
- GitHub Issue: #28
- Error:
NullPointerException: Cannot invoke "UUIDComponent.getUuid()" because "uuidComponent" is null - Root Cause: Entities can be removed during chunk unload before their UUIDComponent is initialized
- Fix: Bytecode transformation injects null check before
getUuid()call:- If null: logs warning, returns early (safe no-op)
- If not null: continues normal UUID cleanup
- Impact: Prevents server crashes during chunk unload operations
- Target:
ArchetypeChunk.copySerializableEntity() - Bug: Server crashes with IndexOutOfBoundsException when serializing entities during chunk saving
- GitHub Issue: #29
- Error:
IndexOutOfBoundsException: Index out of range: 11 - Root Cause: Entity archetype/component data can change while serialization is in progress
- Fix: Extended existing
ArchetypeChunkTransformerto wrapcopySerializableEntity()in try-catch:- On exception: logs warning, returns null (skips entity - safe degradation)
- Impact: Prevents server crashes during chunk save operations
- Target:
TickingThread.stop() - Bug: Server crashes when trying to force-stop stuck threads during instance world shutdown
- GitHub Issue: #32
- Error:
UnsupportedOperationExceptionatThread.stop() - Root Cause: Java 21+ removed
Thread.stop()- it now throws UnsupportedOperationException - Fix: Bytecode transformation wraps
Thread.stop()calls in try-catch:- On exception: falls back to
Thread.interrupt(), logs warning
- On exception: falls back to
- Impact: Instance world shutdown works correctly on Java 21+
- Target:
Universe.removePlayer()async lambda - Bug: Server experiences 20GB+ memory leak when players timeout
- GitHub Issue: #34
- Error:
IllegalStateException: Invalid entity reference! - Root Cause: Race condition - entity ref invalidated before async cleanup runs, preventing
playerComponent.remove()from executing. ChunkTracker data (thousands of HLongSet entries) never gets released. - Fix: Bytecode transformation wraps async lambda with try-catch:
- On
IllegalStateException: performs fallback cleanup viaplayerRef.getChunkTracker().clear() - Logs warning for debugging
finalizePlayerRemoval()still runs via whenComplete handler
- On
- Impact: Prevents massive memory leaks from player timeouts
New transformer toggles in mods/hyfixes/config.json:
{
"transformers": {
"interactionTimeout": true,
"uuidSystem": true,
"tickingThread": true,
"universeRemovePlayer": true
},
"interactionTimeout": {
"baseTimeoutMs": 6000,
"pingMultiplier": 3.0
}
}
This release supersedes v1.9.5 which had a critical startup crash (VerifyError). The bytecode transformer for Universe.removePlayer() was incorrectly transforming all lambda methods instead of only the one with PlayerRef parameter. This has been fixed by filtering lambdas by descriptor and dynamically detecting the correct parameter slot for instance methods.
This mod has no additional files

