1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Фикс Снятие ограничения размера NBT в пакете (фикс вылета) [1.7.10]

Тема в разделе "Управление сервером Bukkit", создана пользователем gamerforEA, 27 апр 2017.

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

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Многие уже знают о проблеме с "объёмными" (карты с кучей предметов в сумке, которая лежит в карте, которая лежит в сумке...) предметами: если дропнуть или поместить себе в инвентарь предмет с NBT, превышающим некоторый размер, то при попытке зайти на сервер игрок будет тут же вылетать.
    Данный мод решает эту проблему, снимая ограничение на размер NBT и позволяя успешно отправить и принять необходимые данные.

    Скачать: клик
    Исходники: клик
    Мод устанавливается и на сервер, и на клиент.

    1. Раньше длина сериализованного NBT записывалась двумя байтами, что позволяло прочитать только часть данных. Другая же часть "терялась" (на самом деле просто не читалась). Теперь при исчерпании этих двух байт дополнительная длина будет записана в специальное поле. Стоит отметить, что это будет происходить только при необходимости, так что в подавляющем большинстве случаев пакеты никак не изменятся.
    2. При десериализации NBT стояло ограничение в 2097152 байт, что так же не позволяло прочитать большие пакеты. Теперь размер ограничивается Long.MAX_VALUE.

    Старая запись NBT:
    Код:
    length: short
    data: byte[]
    Новая запись NBT:
    Код:
    length: short
    data: byte[]
    
    Optional:
    length1: int
    data1: byte[]
     
    Последнее редактирование: 27 апр 2017
  2. yaroslavik

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

    Баллы:
    66
    Имя в Minecraft:
    yaroslavik
    Супер! Спасибо! =)

    А этот мод устанавливаеться на сервер?
     
  3. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Ставить и на сервер, и на клиент. Сейчас подправлю шапку.
     
  4. alexandrage

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

    Баллы:
    173
    Никогда такого не случалось, кроме того случая с креатив крашем, стаки с 30к nbt.
     
  5. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Такой стак, конечно, создать сложно, но не невозможно. Я, например, был свидетелем, когда один из игроков при переносе дома сложил все свои МЕ Карты в Бездонную сумку. Думаю, вы догадываетесь, что было дальше.
     
  6. alexandrage

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

    Баллы:
    173
    Ну все прально, у сервера лимит сработал, чтоб какой то идиот его не положил овердлинным nbt.
     
    Последнее редактирование: 4 май 2017
  7. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    1. Он и так грузит большие объёмы. Не думаю, что станет хуже, если сервер будет загрузить 1 большой стак вместо нескольких стаков поменьше.
    2. Для создания такого стака нужно сильно постараться. Чтобы получить критический объём, от которого будет падать сервер, не хватит никакого терпения (проще соорудить большую энергосеть IC2 для создания лагов).
    3. А что помешает набить чанк заполненными контейнерами? И проще, и нагрузка больше.
    4. Простые игроки как создадут большой стак, так и в скором времени разберут его, когда он не потребуется (например, когда донесут вещи до места назначения).
     
  8. alexandrage

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

    Баллы:
    173

    Так достаточно просто слать пакеты на сервер. Они же тоже со снятым лимитом? Или нет?
     
  9. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    1. Да, тоже со снятым.
    2. Их можно было слать и раньше. Просто там вместо одного большого пакета спамили множеством мелких пакетов с большой вложенностью.
    3. Не спорю, моё решение имеет некоторые минусы. Впрочем, их можно частично нивелировать (сделать на сервере ограничение только на приём пакетов, а отправку оставить разблокированной; вернуть ограничение объём распакованных данных и т.д.).
    4. Полагаю, что мой мод чаще всего будет использоваться на серверах с лаунчерами. Задача защиты от вмешательства извне лежит на них.
     
  10. alexandrage

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

    Баллы:
    173
    Таких лаунчеров уже не осталось, которые не обошли. Так что ограничь пакеты от клиента серверу.
     
  11. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Завтра, наверное, сделаю обновление.
     
  12. Saharo4ek

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

    Баллы:
    96
    Имя в Minecraft:
    tin
    Привет с SazHost'a
     
  13. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Мод обновлён до версии 1.1. Добавлены новые опции в конфиге.
    Приветствую.
     
  14. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Vime обходят?
     
  15. alexandrage

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

    Баллы:
    173
    Давно слили же и продожлают сливать.
     
  16. VssteLorde

    VssteLorde Ньюби

    Баллы:
    1
    Имя в Minecraft:
    VasteLorde
    Привет, тут выскачила такая проблема с nbt, но на версии 1.12.2 можно ее там както решить?
     
  17. SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Только если портировать
     
  18. alexandrage

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

    Баллы:
    173
    Берешь jbytemod и правишь интовую ограничения в клиенте. Изи фикс. Даже мод не нужен.
     
  19. VssteLorde

    VssteLorde Ньюби

    Баллы:
    1
    Имя в Minecraft:
    VasteLorde
    Насколько сложно это сделать тому кто это не делал?)
     

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