1.8.1: краш при клике по сущности, потерянный HUD и контекст сущности - #40
Merged
Merged
Conversation
added 4 commits
September 12, 2026 01:57
PlayerInteractEvent.EntityInteract приходит на обеих сторонах, и на клиенте игрок — LocalPlayer. Приведение к ServerPlayer роняло игру на первом же правом клике по сущности с привязанным GUI. Обработчик теперь выходит, если это не ServerPlayer: открыть GUI игроку может только сервер, ровно как это уже сделано в fabric-ветке.
Порядок пакетов. Открытие GUI создаёт новый браузер и сбрасывает кэш клиентского пуша, а контекст сущности живёт именно в этом кэше — отправленный до пакета открытия, он затирался тем самым экраном, для которого и был нужен, и страница получала null. Теперь контекст уходит после открытия: пакеты одного соединения сохраняют порядок, так что он приходит уже после сброса.
Игра при замене экрана зовёт removed() у уходящего, а не onClose(), и мод переопределяет только второй — восстановление HUD не срабатывало. Заодно входящий экран закрывал припаркованный HUD-браузер по дороге: openForGui делал closeSuspendedHudBrowser() безусловно, хотя заменял всего лишь GUI. А onGuiOpened, вызываемый до openForGui, к этому моменту видел режим GUI_SCREEN и гасил флаг восстановления. Итог: умереть с открытым магазином (экран смерти заменяет GUI) или получить второй `webgui gui` — и HUD не возвращался, пока сервер не пришлёт его заново. Теперь HUD паркуется только при переходе из HUD, а флаг пересчитывается только тогда же. Сценарий стенда на этот путь ходит: hud, gui, gui, escape. Отдельно: sessionToken, port и server в сервере статики стали volatile. Их пишут под замком, а читают восемь потоков пула без него, из-за чего отозванный при выходе токен мог продолжать работать.
Три исправления после разбора. Подробности в CHANGELOG.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Три исправления, найденные разбором мода и покрытые сценариями стенда.
window.webgui.entityбылnull. Контекст отправлялся на мгновение раньше экрана, который его и сбрасывал./webgui gui— и HUD не возвращался, пока сервер не пришлёт его заново.Плюс токен страниц сервера переставал действовать не сразу после выхода.
Проверено на 26.2-neoforge: 11/11 сценариев стенда, включая новый на жизненный цикл HUD, который этот баг и ловит (до исправления 6/12).