Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Обсуждение Minecraft", создана пользователем Shevchik, 17 сен 2014.

  1. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

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

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

    Alexgrist Старожил Пользователь

    Баллы:
    173
    Теперь ещё и сундуки запретить прийдётся.
     
  4. sashabelii

    sashabelii Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    sashabelii
    Лучше уж вернуть старые-добрые квадратные и беззвучные сундуки. Я эти модельные недолюбливаю.
     
  5. miron36357

    miron36357 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    refo1689
    Как обстоят дела с IronChests?
     
  6. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Фигня в том что мне потребовалось всего 10 минут чтобы сделать нормальную логику сундуков. Теперь сундуки не тикают. Но сам факт что весь код усеян таким говном не радует.
     
  7. RedEnergy

    RedEnergy Старожил Пользователь

    Баллы:
    103
    Если не ошибаюсь, там сундуки наследуются от BlockChest, так что скорее всего то же самое
     
  8. dirt34

    dirt34 Старожил Пользователь

    Баллы:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    выложить можешь?
     
  9. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Это вообще для 1.8 для ванильного деобфусцированного сервера сделано.
     
  10. dirt34

    dirt34 Старожил Пользователь

    Баллы:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    да пофиг) Думаю будет полезно всем.
     
  11. xDiP

    xDiP Старожил Девелопер Переводчик Пользователь

    Баллы:
    123
    Человек просто решил показать как все плохо..
     
    Последнее редактирование: 18 сен 2014
  12. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Возможно наследуется только модель, а логика сделана получше (хотя бы потому, что "двойных" сундуков в этом моде нет).

    Всё кричат, что игру на C с плюсами переписать, хотя всё дело в хреновой логике и говнокоде.
     
  13. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Исходники декомпилированного сервера итак находятся у меня на гитхабе.
    Вот только сервер 1.8, так что толку в принципе от этого не будет.

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

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

    И вообще много чего... Правда большинство из этого соптимизировано спайготом либо иногда баккитом. Но вот фордж никаких оптимизаций не делает поэтому будущее выглядит мрачным. Не нравится мне идея спонжа основываться на фордже.[DOUBLEPOST=1411055364,1411055068][/DOUBLEPOST]
    Ирон честы не наследуются от обычных честов. Но тем не менее занимаются тем же самым говном что и обычные.
     
  14. sashabelii

    sashabelii Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    sashabelii
    Думаю, что фордж претерпит большие изменения в связи с появлением губки.
     
  15. Zakton

    Zakton Активный участник Пользователь

    Баллы:
    68
    Там же теперь обработчик изменен
     

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