Corteco Опубликовано: 12 июля 2022 Опубликовано: 12 июля 2022 22.06.2022 в 20:05, xtrafrancyz сказал: Баг исправлен. Он не связан с нашими оптимизациями и существовал еще с самых первых версий Minecraft. Ниже написано описание причины бага для умных. Клиент имеет особенность "тонуть" в пустоте, пока чанк не прогрузился и потихоньку опускается вниз. Когда чанк наконец прогружается, то может быть два исхода:- Чанк загрузился до того как игрок провалился под блок- Игрок успел провалиться в блок на всего 0.0625- Игрок провалился еще глубже в блок В первом случае все нормально, игрок просто приземляется на блок. В последнем случае игрока выталкивает на поверхность и все тоже нормально. И наконец во втором случае происходит магия. Есть 2 стороны (клиент и сервер) и каждая из них воспринимает эту ситуацию по-своему. Сервер при каждом перемещении игрока проверяет где тот находился в прошлой точке (в блоке или нет), затем проверяет находится ли новая точка внутри блока. Если игрок был не в блоке и перемещается в точку без блока - то это самое обычное движение, сервер принимает это. Когда же игрок в прошлой точке находился не в блоке, а на месте новой точке уже находится блок - то сервер не принимает это перемещение и телепортирует игрока обратно, чтобы тот не мог зайти внутрь стены или перемещаться сквозь пол/потолок. Это и есть причина дергания, сервер не позволяет провалиться внутрь блока и возвращает игрока обратно. Клиент в свою очередь правильно думает что находится уже внутри блока и, следовательно, ничего не мешает ему падать вниз до следующего блока (думаю у вас были ситуации когда вы ходили внутри блока, например при использовании ендер перла). В итоге клиент постоянно падает вниз и сервер постоянно возвращает игрока обратно. И тут возникает вопрос - А почему сервер думает что игрок находится не в блоке, когда он провалился туда на 0.0625? Дело в том, что при проверке пересечения хитбокса игрока с блоками, сервер уменьшает хитбокс игрока как раз на 0.0625. Скорее всего, это делается чтобы избавиться от ошибок связанных с погрешностью в вычислениях координат, но это совсем другая тема. Предположим, координата Y игрока 51.99, это значит что игрок провалился внутрь блока на 0.01. С точки зрения сервера игрок не находится в блоке, так как 51.99+0.0625=52.0525 (хитбокс сжимается к центру, поэтому тут сложение), а на Y=52 уже нет никаких блоков. С точки зрения клиента игрок уже внутри блока и поэтому он его игнорирует и падает. Вот и получается вечное недопонимание сервера с клиентом. Хорош, спасибо бро
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас