- Баллы
- 173
- Имя в Minecraft
- _Shevchik_
Итак как собственно понятно речь сегодня пойдёт о сундуках.
А точнее о специфике их обработки.
Казалось бы что сложного в обработке сундука? Открыть и воспроизвести звук когда его открывает один игрок. И закрыть и воспроизвести звук когда его закроют все игроки.
НОо даже тут моджанги сумели накостылять кучу гавна.
Дело в том что сундуки тикают... То есть каждый тик они занимаются определённой операцией.
И чем же они занимаются? А вот чем: каждый тик они проверяют количество людей которые открыли сундук и был ли звук открытия воспроизведён, и воспроизводит звук если его открыли только что. То же самое и для закрытия. Уже говно, вам не кажется?, и это при всём при том что методы которые выполняются на открытии инвентаря сундука игроком и закрытия присутствуют, и в них даже реализован подсчёт игроков.
Так в чём же дело? Моджанг были бы не моджанг если бы код не имел лапши... А дело в том что специально для траппед честа количество открывших сундук проверяется некоторыми редстоун вещами. И вот тут то самый замес. Дело в том что компаратор(ну или какой-то другой редстоун механизм) может влиять на статус траппед честа даже если его никто не открыл. И вот для этого используется изменения количества игроков открывших сундук. И вот тут то и беда, ведь нужно воспроизводить звук правильно как-то, но редстоун может нарушить этот цикл, и специально для этого моджанги придумали ещё костыль. Каждые несколько тиков сундук перепроверяет всех игроков в радиусе 6 блоков на предмет открыт ли сундук или нет...
Причём даже это реализовано как говно, ибо используется локальный чанковский кэш энтитей в котором лежат все энтити, вместо того чтобы тупо проитерировать по списку игроков...
Вот такие вот костыли, так что если у вас у игроков много сундуков и вы видите в таймингах высокий doTickPending то знайте, это они, сундуки, тикают...
А точнее о специфике их обработки.
Казалось бы что сложного в обработке сундука? Открыть и воспроизвести звук когда его открывает один игрок. И закрыть и воспроизвести звук когда его закроют все игроки.
НОо даже тут моджанги сумели накостылять кучу гавна.
Дело в том что сундуки тикают... То есть каждый тик они занимаются определённой операцией.
И чем же они занимаются? А вот чем: каждый тик они проверяют количество людей которые открыли сундук и был ли звук открытия воспроизведён, и воспроизводит звук если его открыли только что. То же самое и для закрытия. Уже говно, вам не кажется?, и это при всём при том что методы которые выполняются на открытии инвентаря сундука игроком и закрытия присутствуют, и в них даже реализован подсчёт игроков.
Так в чём же дело? Моджанг были бы не моджанг если бы код не имел лапши... А дело в том что специально для траппед честа количество открывших сундук проверяется некоторыми редстоун вещами. И вот тут то самый замес. Дело в том что компаратор(ну или какой-то другой редстоун механизм) может влиять на статус траппед честа даже если его никто не открыл. И вот для этого используется изменения количества игроков открывших сундук. И вот тут то и беда, ведь нужно воспроизводить звук правильно как-то, но редстоун может нарушить этот цикл, и специально для этого моджанги придумали ещё костыль. Каждые несколько тиков сундук перепроверяет всех игроков в радиусе 6 блоков на предмет открыт ли сундук или нет...
Причём даже это реализовано как говно, ибо используется локальный чанковский кэш энтитей в котором лежат все энтити, вместо того чтобы тупо проитерировать по списку игроков...
Вот такие вот костыли, так что если у вас у игроков много сундуков и вы видите в таймингах высокий doTickPending то знайте, это они, сундуки, тикают...