Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Костыли в сундуках

Shevchik

Старожил
Пользователь
Баллы
173
Имя в Minecraft
_Shevchik_
Итак как собственно понятно речь сегодня пойдёт о сундуках.
А точнее о специфике их обработки.

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

выложить можешь?
 
Если не ошибаюсь, там сундуки наследуются от BlockChest, так что скорее всего то же самое
Возможно наследуется только модель, а логика сделана получше (хотя бы потому, что "двойных" сундуков в этом моде нет).

Всё кричат, что игру на C с плюсами переписать, хотя всё дело в хреновой логике и говнокоде.
 
Человек просто решил показать как все плохо..
Исходники декомпилированного сервера итак находятся у меня на гитхабе.
Вот только сервер 1.8, так что толку в принципе от этого не будет.

Ещё кстати можно вспомнить замечательный ChunkProviderServer, благо в бакките он итак переписан.
А вот в ванили он выглядит как говно ибо чанки хранятся одновременно и в хэшмапе и arraylist из-за чего загрузка-выгрузка чанков доставляет серверу огромную боль.

А ещё есть рамки которые проверяют блок на котором они висят. Но как по уёбищному они это делают...

И вообще много чего... Правда большинство из этого соптимизировано спайготом либо иногда баккитом. Но вот фордж никаких оптимизаций не делает поэтому будущее выглядит мрачным. Не нравится мне идея спонжа основываться на фордже.
Возможно наследуется только модель, а логика сделана получше (хотя бы потому, что "двойных" сундуков в этом моде нет).

Всё кричат, что игру на C с плюсами переписать, хотя всё дело в хреновой логике и говнокоде.
Ирон честы не наследуются от обычных честов. Но тем не менее занимаются тем же самым говном что и обычные.
 

Поделиться этой страницей

Назад
Верх