Server crash fixes
There are a number of hytale server bugs that can cause the server to crash in certain scenarios, this plugin aims to fix and limit impact of those bugs.
Описание
Сервер исправляет 1.1.1
Этот плагин направлен на исправление (или уменьшение воздействия) ряда ошибок в hytale-серверной банке, которые могут привести к сбою сервера или к сбою мировых потоков. См. ниже информацию об исправлениях.
исправления
Цель нулевого пикапа Крушение Ref
Исключение
java.lang.NullPointerException: не может ссылаться на "com.hypixel.hytale.component.Ref.isValid()", поскольку "targetRef" является недействительным; на com.hypixel.hytale.server.core.modules.entity.item.PickupItemSystem.tick(PickupItemSystem.java:69); на com.hypixel.hytale.component.system.tick(EntityTickingSystem.java:92); на com.hypixel.hytale.component.system.tick(EntityTickingSystem.tick(36); на com.hypixel.hytale.component.Store.tick(Store.java:1971);
...
Почему это происходит?
Это происходит, если PickupItemComponent создается без использования конструкторов, которые устанавливают целевой Ref (например, генерируется или загружается из данных с помощью кодека) или если какой-либо плагин / мод случайно передает нулевое значение.
Как ServerFixes это исправляет?
Serverfixes отслеживает недействительные объекты PickupItem и удаляет их во время мировых клещей перед PickupItemSystem, предотвращая сбой, этот журнал утешает, когда это происходит.
горный Смягчение последствий аварий архетипа
Исключение
Исключение в потоке Thread\[#72,WorldThread - по умолчанию,5,InnocuousForkJoinWorkerThreadGroup\]:
java.lang.IllegalArgumentИсключение: Компонент Тип не является архетипом: Компонентный тип[...]
com.hypixel.hytale.component.Archetype.validateComponentType (Archetype.java: 146)
на сайте com.hypixel.hytale.component.Holder.removeComponent(Holder.java:304)
com.hypixel.hytale.component.Store.removeComponent (Store.java:1254)
com.hypixel.hytale.component.CommandBuffer.lambda$removeComponent$0 (CommandBuffer.java:430)
com.hypixel.hytale.component.CommandBuffer.consume (CommandBuffer.java:520)
Почему это происходит?
Это происходит потому, что есть подтверждение компонент Проверка типа событий ECS, которая проверяет наличие компонента. Если очередь команд содержит более одного обновления RelativeMovement или AbsoluteMovement, которое очень возможно на занятом сервере, буфер команд в конечном итоге содержит несколько команд «удалить MountedComponent», первая из них изменяет архетип объектов (в этот момент компонент исчез), а затем вторая запись удаления проверяется. и бросать
Как ServerFixes это исправляет?
Серверфиксы будут отслеживать PlayerInput.getMovementUpdateQueue и обрезать его, чтобы убедиться, что он содержит только одно событие движения, когда игрок установлен после 600 мс. Это может вызвать небольшое движение в игре, но это небольшая визуальная вещь, которая будет происходить только в тех случаях, когда мир в противном случае потерпел бы крах.
Обсуждение NullPointer Невозможно прочитать длину массива, потому что «<local15>» не соответствует npcReferences onEntityRemove.
Исключение
Исключение в потоке Thread[#151,WorldThread - по умолчанию,5,InnocuousForkJoinWorkerThreadGroup]:java.lang.NullPointerException: Невозможно прочитать длину массива, потому что «<local15>» не имеет значения.по адресу com.hypixel.hytale.server.npc.systems.SpawnReferenceSystems$MarkerAddRemoveSystem.onEntityRemove (SpawnReferenceSystems.java:166)com.hypixel.hytale.component.Store.removeEntity (Store.java:848)com.hypixel.hytale.component.CommandBuffer.lambda$removeEntity$0 (CommandBuffer.java:292) at com.hypixel.hytale.component.CommandBuffer.consume (CommandBuffer.java:520)...
Почему это происходит?
Когда сервер удаляет NPC, он запускает крючок очистки, который обновляет маркер нереста NPC, Во время очистки сервер удаляет этот NPC из списка маркера, зацикливаясь на этом списке. Но поскольку список нулевой, Java сразу же падает, когда пытается зациклиться («не может прочитать длину массива, потому что он нулевой»), и мировой поток умирает. В случае неудачи маркер нереста находится в непоследовательном состоянии, когда:
- Он по-прежнему считает, что NPC нерестятся (spawnCount) 0)
- Но его внутренний список ссылок NPC (npcReferences) отсутствует.
Как ServerFixes это исправляет?
ServerFixes добавляет небольшой предохранитель, который работает перед кодом очистки сервера.
- Если NPC удаляется, а связанный маркер нереста имеет нерест-счет > 0 и npcReferences == null (точное условие аварии), ServerFixes корректирует нерест маркера. Подсчитайте так, чтобы код очистки сервера пропускал ветку, которая зацикливала бы нулевой массив.
Помогите! На мой сервер влияет фатальная ошибка сервера, вызывающая сбои, но исправления сервера не включают исправление
Не стесняйтесь обращаться ко мне через мой сервер диссонанса, связанный с этим сообщением, или DMing me on discord (jamo.sh), и я буду рад посмотреть ваш журнал и внедрить исправление, где это возможно.
Ссылки
Показать оригинальное описание (English)
Server fixes 1.1.1
This plugin aims to fix (or reduce impact from) a number of bug in the hytale server jar which can lead to the server crashing, or world threads crashing. See below for information on the fixes.
Fixes
Null pickup item targetRef crash
Exception
java.lang.NullPointerException: Cannot invoke "com.hypixel.hytale.component.Ref.isValid()" because "targetRef" is null; at com.hypixel.hytale.server.core.modules.entity.item.PickupItemSystem.tick(PickupItemSystem.java:69); at com.hypixel.hytale.component.system.tick.EntityTickingSystem.doTick(EntityTickingSystem.java:92); at com.hypixel.hytale.component.system.tick.EntityTickingSystem.tick(EntityTickingSystem.java:36); at com.hypixel.hytale.component.Store.tick(Store.java:1971);
...
Why is this happening?
This happens if a PickupItemComponent is created without using the constructors which set the targetRef (for example spawned or loaded from data using the codec) or if some plugin/mod accidentally passes a null value.
How does ServerFixes fix this?
Serverfixes monitors for invalid PickupItem entities and will remove them during world ticks before the PickupItemSystem, preventing the crash, this logs to console when it happens.
MountedComponent archetype crash mitigation
Exception
Exception in thread Thread\[#72,WorldThread - default,5,InnocuousForkJoinWorkerThreadGroup\]:
java.lang.IllegalArgumentException: ComponentType is not in archetype: ComponentType{} ……..
at com.hypixel.hytale.component.Archetype.validateComponentType(Archetype.java:146)
at com.hypixel.hytale.component.Holder.removeComponent(Holder.java:304)
at com.hypixel.hytale.component.Store.removeComponent(Store.java:1254)
at com.hypixel.hytale.component.CommandBuffer.lambda$removeComponent$0(CommandBuffer.java:430)
at com.hypixel.hytale.component.CommandBuffer.consume(CommandBuffer.java:520)
Why is this happening?
This happens because there is a validateComponentType check on ECS events which checks to ensure that the component actually exists. If the command queue contains more than one RelativeMovement or AbsoluteMovement update which is very possible on a busy server, the command buffer ends up containing multiple "remove MountedComponent" commands, the first one changes the entities archetype (at this point the component is gone) and then the second removal hits validateComponentType(…) and will throw
How does ServerFixes fix this?
Serverfixes will monitor the PlayerInput.getMovementUpdateQueue and trim it to ensure it only contains one movement event when a player is mounted after 600ms. This may cause small movement jitter in game but that's a small visual thing that will only happen in cases where the world would otherwise crash.
NullPointerException Cannot read the array length because "<local15>" is null in npcReferences onEntityRemove
Exception
Exception in thread Thread[#151,WorldThread - default,5,InnocuousForkJoinWorkerThreadGroup]:java.lang.NullPointerException: Cannot read the array length because "<local15>" is nullat com.hypixel.hytale.server.npc.systems.SpawnReferenceSystems$MarkerAddRemoveSystem.onEntityRemove(SpawnReferenceSystems.java:166)at com.hypixel.hytale.component.Store.removeEntity(Store.java:848)at com.hypixel.hytale.component.CommandBuffer.lambda$removeEntity$0(CommandBuffer.java:292) at com.hypixel.hytale.component.CommandBuffer.consume(CommandBuffer.java:520)...
Why is this happening?
When the server removes an NPC, it runs a cleanup hook that updates the NPC’s spawn marker, During cleanup, the server does “remove this NPC from the marker’s list” by looping over that list. But because the list is null, Java crashes immediately when it tries to loop (“can’t read array length because it’s null”), and the world thread dies. In the failing case, the spawn marker is in an inconsistent state where:
- it still thinks there are NPCs spawned (spawnCount > 0)
- but its internal list of NPC references (npcReferences) is missing (null)
How does ServerFixes fix this?
ServerFixes adds a small pre-cleanup guard that runs before the server’s buggy cleanup code.
- If the NPC is being removed and the linked spawn marker has spawnCount > 0 and npcReferences == null (the exact crash condition), ServerFixes adjusts the marker’s spawnCount so that the server’s cleanup code skips the branch that would loop the null array.
HELP! My server is impacted by a fatal server bug causing crashes but Server Fixes doesn't include a fix
Feel free to reach out to me via my discord server linked on this post, or DMing me on discord (jamo.sh) and I'd be happy to look at your log and implement a fix where possible.
Links
Информация
Авторы:
Категории:
Версии игры:
Создан: 17.01.2026