Захотел я сделать такую штуку: что-то типа амулета, рядом с которым все падающие блоки начинают не падать, а взлетать (ну или что-то около того).
Я реализовал это вот таким способом:
Но движение немного дерганное.
Из-за чего происходит такое и как можно исправить?
tox1cozZ
Окей, объясню по-другому.
На сервере происходит спавн сущности, ей задается motion. Летит пакет на клиент, на клиенте спавнится сущность и ей задается motion. Далее сервер считает позицию сущности сам, а клиент сам. Раз в n тиков сервер посылается пакет клиенту с своими значениями и позицией, чтобы не было большого расхождения клиента с сервером. Из-за того что данные немного разные, когда прилетает пакет с сервера, у тебя дергается на клиенте из-за применения данных сервера.
Выкинь любой предмет на землю и последи за ним. Он лежит и не двигается, но раз в некоторое время можно увидеть рывок — это как раз момент синхронизации.
russia_nekto
Дело в математике.
ПАДАЮЩИЕ БЛОКИ — FALLING SAND
Ты используешь пороговый алгоритм, вместо периодических функций.
GlassSpirit
Дело скорее всего в кривой синхронизации клиента и сервера. Попробуй также изменять velocityChanged на true.
Последнее редактирование: 5 Июл 2021
tox1cozZ
aka Agravaine
8,435 597 2,873
Лучше хукнуться в энтити и менять моушен, не давай действовать гравитации.
liapel
Хм. Ладно. Предположим решение тут уже есть, но нельзя ли это сделать без хуков? Не могли бы еще подсказать, из-за чего же все таки проблема. Ясно, что причина в синхронизации, но из-за чего она может возникать?
GlassSpirit
Проверь, может этот метод вообще только на клиенте вызывается, яж говорю
liapel
[22:31:16] [Client thread/INFO] [STDOUT]: [ensorcellcraft.common.item.ItemAntigravityCharm:onUpdate:21]: Client thread [22:31:16] [Server thread/INFO] [STDOUT]: [ensorcellcraft.common.item.ItemAntigravityCharm:onUpdate:21]: Server thread
Не только на клиенте
russia_nekto
Ну раз это синхронизация.
То всегда по идее два метода Update (для логики) и Render(для отрисовки)
А тут как устроено?
sk9zist :l
Исправился
981 18 156
хукнуться в энтити и менять моушен, не давай действовать гравитации.
У меня тоже была похожая идея, как у ТС. Я хуком пытался заставить падающие блоки остановиться — в итоге не смог. Проблема таже, что и у ТС. Нельзя даже поставить motion на 0 или замедлить падение, все равно дергается. Падающие блоки это вообще тема отдельного разговора.
Я верила давно, что жить вполне легко.
М ы встречаемся, чтобы разойтись.
Как цветут цветы, ч тобы умереть,
Жизнь это з амкнутый круг.
Л ибо предай, либо тебя обманут!
Бесконечным, будет траур !
tox1cozZ
aka Agravaine
8,435 597 2,873
Чтобы не было рывков, нужно чтобы и на клиенте и на сервере был одинаковый motion. Тогда движения будут одинаковые и там и там. Сущности не интерполируются как игроки, поэтому и видны рывки.
sk9zist :l
Исправился
981 18 156
Сущности не интерполируются как игроки, поэтому и видны рывки.
У стрелы рывков нет
Только у EntityFallingBlock
Я верила давно, что жить вполне легко.
М ы встречаемся, чтобы разойтись.
Как цветут цветы, ч тобы умереть,
Жизнь это з амкнутый круг.
Л ибо предай, либо тебя обманут!
Бесконечным, будет траур !
liapel
«Падающие блоки это вообще тема отдельного разговора. »
Скорее проблема не в падающих блоках, а классе Entity. Он рендерится как-то криво. В какой-то момент при выводе значения motion в консоль начинаются дикие расходы в значениях между клиентом и сервером. Но раз в какой-то промежуток времени происходит какая-то жалкая попытка синхронизации motion. И эта синхронизация достаточно редкая, чтобы отчетливо увидеть рывки.
Похожую проблему можно наблюдать у орбов в тауме, которые с мобов падают. Интересно, что у того же шарика опыта вообще все прекрасно.
«Чтобы не было рывков, нужно чтобы и на клиенте и на сервере был одинаковый motion. Тогда движения будут одинаковые и там и там. Сущности не интерполируются как игроки, поэтому и видны рывки.»
Как это можно исправить? Или где посмотреть, как работает интерполяция? Я смотрел класс EntityLivingBase, так никаких новшеств, но работает, вроде, все просто чудесно.
tox1cozZ
aka Agravaine
8,435 597 2,873
Окей, объясню по-другому.
На сервере происходит спавн сущности, ей задается motion. Летит пакет на клиент, на клиенте спавнится сущность и ей задается motion. Далее сервер считает позицию сущности сам, а клиент сам. Раз в n тиков сервер посылается пакет клиенту с своими значениями и позицией, чтобы не было большого расхождения клиента с сервером. Из-за того что данные немного разные, когда прилетает пакет с сервера, у тебя дергается на клиенте из-за применения данных сервера.
Выкинь любой предмет на землю и последи за ним. Он лежит и не двигается, но раз в некоторое время можно увидеть рывок — это как раз момент синхронизации.
Источник: forum.mcmodding.ru
Падающий блок
Падающий блок (англ. Falling Block) — это сущность, которая появляется, когда подверженный гравитации блок теряет под собой опору.
Спаун
Падающий блок появляется, если под блоком, подверженным гравитации, исчезнет опора. Такие свойства имеют следующие блоки:
Поведение
Падающий блок будет продолжать падать до тех пор, пока не достигнет твёрдой поверхности, после чего снова приобретёт состояние обычного блока. Возвращение в исходное состояние произойдёт в том случае, если при приземлении центру нижней грани данной сущности не будет препятствовать любой другой блок (например, трава, вода, лианы, воздух и т. д.); в противном случае подверженный гравитации блок выпадет как предмет.
Значения данных
Идентификатор
Падающий блок | falling_block | entity.minecraft.falling_block |
Bedrock Edition:
Падающий блок | falling_block | 66 | entity.falling_block.name |
Данные сущности
- Данные сущности
- Общие теги для всех сущностей see Шаблон:Nbt наследование/сущность/шаблон
- BlockState : Падающий блок, представленный этой сущностью.
- Name : Текстовый идентификатор блока.
- Properties : Необязательный для работы тег, устанавливающий состояния блока.
- Name : Название состояния блока и его значение.
История
Падающие блоки добавлены в игру вместе с идентификатором FallingSand . Несмотря на название идентификатора, это свойство также есть у гравия. |
Добавлено яйцо дракона, которое способно становиться падающим блоком. |
Добавлена наковальня, которая способна становиться падающим блоком. |
Добавлен красный песок, который способен становиться падающим блоком. |
Добавлен цемент, который способен становиться падающим блоком. |
Идентификатор FallingSand переименован в falling_block . |
Добавлены строительные леса, которые способны становиться падающим блоком. |
Добавлен капельник, который способен становиться падающим блоком в том случае, если он образует сталактит и один из блоков над ним разрушается. |
С добавлением падающих блоков песок и гравий теперь подвержены гравитации. |
Добавлен красный песок, который способен становиться падающим блоком. |
Добавлена наковальня, которая способна становиться падающим блоком. |
Слой снега теперь подвержен гравитации. |
Добавлено яйцо дракона, которое способно становиться падающим блоком. |
Добавлен цемент, который способен становиться падающим блоком. |
Добавлены строительные леса, которые способны становиться падающим блоком. |
Добавлен капельник, который способен становиться падающим блоком в том случае, если он образует сталактит и один из блоков над ним разрушается. |
Добавлены песок и гравий вместе с падающими блоками. |
Добавлено яйцо дракона, которое способно становиться падающим блоком. |
Добавлена наковальня, которая способна становиться падающим блоком. |
Добавлен красный песок, который способен становиться падающим блоком. |
Добавлен цемент, который способен становиться падающим блоком. |
Добавлены строительные леса, которые способны становиться падающим блоком. |
Добавлены песок, гравий, красный песок и наковальня вместе с падающими блоками. |
Добавлено яйцо дракона, которое способно становиться падающим блоком. |
Добавлен цемент, который способен становиться падающим блоком. |
См. также
В данной статье используются материалы из статьи «Падающий блок» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0. Авторы статьи.
Источник: wiki-minecraft.ru
Плагин FallingBlocks (Падающие блоки) версии 1.8 игры Minecraft
Хотите немного разнообразить игровой процесс в Майнкрафте? Тогда поторопитесь обзавестись новым плагином FallingBlocks, который превратит обычные блоки в падающие. Они чем то будут напоминать падающий песок.
/fallingblocks enable — активировать падающие блоки;
/fallingblocks — отключить.
Установка плагина займет несколько минут: скачайте/распакуйте; перетащите файл в папку plugins. Вот и все! Приятной игры!
Источник: minecraftom.ru