Захотел я сделать такую штуку: что-то типа амулета, рядом с которым все падающие блоки начинают не падать, а взлетать (ну или что-то около того).
Я реализовал это вот таким способом:

Но движение немного дерганное.


Из-за чего происходит такое и как можно исправить?

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

Падающий блок

Песок.png Гравий.png

Падающий блок (англ. Falling Block) — это сущность, которая появляется, когда подверженный гравитации блок теряет под собой опору.

Спаун

Падающий блок появляется, если под блоком, подверженным гравитации, исчезнет опора. Такие свойства имеют следующие блоки:

Поведение

Падающий блок будет продолжать падать до тех пор, пока не достигнет твёрдой поверхности, после чего снова приобретёт состояние обычного блока. Возвращение в исходное состояние произойдёт в том случае, если при приземлении центру нижней грани данной сущности не будет препятствовать любой другой блок (например, трава, вода, лианы, воздух и т. д.); в противном случае подверженный гравитации блок выпадет как предмет.

Значения данных

Идентификатор

Название Идентификатор Ключ перевода
Падающий блок falling_block entity.minecraft.falling_block

Bedrock Edition:

Название Идентификатор Числовой ID Ключ перевода
Падающий блок falling_block 66 entity.falling_block.name

Данные сущности

  • Данные сущности
  • Общие теги для всех сущностей see Шаблон:Nbt наследование/сущность/шаблон
  • BlockState : Падающий блок, представленный этой сущностью.
  • Name : Текстовый идентификатор блока.
  • Properties : Необязательный для работы тег, устанавливающий состояния блока.
  • Name : Название состояния блока и его значение.
  • DropItem : 1 или 0 (true/false) — true, если при разрушении блок должен выпасть как предмет. Любой блок, не имеющий предмета с тем же идентификатором, что и у него, не удаляется, даже если он установлен.
  • FallHurtAmount : Умножается на значение FallDistance , чтобы вычислить наносимый урон. По умолчанию значение всегда равно 2.
  • FallHurtMax : Максимальное количество единиц урона, наносимое сущностям, на которых упал falling_block . В игре всегда по умолчанию равно 40 ( × 20).
  • HurtEntities : 1 или 0 (true/false) — true, если блок при падении может нанести урон сущности.
  • TileEntityData : Необязательный для работы тег, устанавливающий теги блока-сущности для соответствующего блока.
  • Time : Количество тактов, в течение которых существует указанная сущность. Когда установлено значение 0, то по истечении 1 такта сущность исчезает, если блок в этом месте имел идентификатор, отличающийся от TileID сущности. Если блок в своём положении имеет тот же идентификатор, что и TileID во время Time , число тактов которого равно от 0 до 1, то блок удаляется, а сущность продолжает падать, перезаписав его. Когда значение Time достигает 600 или же 100 (в случае если координата Y равна 0), сущность удаляется.
  • История

    Infdev-версия Java Edition20100618

    Официальный выпуск Java Edition1.0.0Beta 1.9 Prerelease 6

    1.4.212w41a

    1.7.213w39a

    1.1217w06a

    1.1317w47a

    1.1418w45a

    1.1720w48a

    Альфа-версия Pocket Edition0.6.0

    0.9.0build 1

    0.12.1build 1

    Официальный выпуск Pocket Edition1.0.0alpha 0.17.0.1

    1.1.0alpha 1.1.0.0

    Официальный выпуск Bedrock Edition1.8.0beta 1.8.0.8

    1.17.0beta 1.16.210.56

    Legacy Console EditionTU1CU11.00Patch 11.0.1

    TU9

    TU141.05

    TU31CU191.22Patch 3

    TU53CU431.49Patch 231.0.3

    nonenone1.83nonenone

    New Nintendo 3DS Edition0.1.0

    1.7.10

    1.9.19

    Падающие блоки добавлены в игру вместе с идентификатором FallingSand . Несмотря на название идентификатора, это свойство также есть у гравия.
    Добавлено яйцо дракона, которое способно становиться падающим блоком.
    Добавлена наковальня, которая способна становиться падающим блоком.
    Добавлен красный песок, который способен становиться падающим блоком.
    Добавлен цемент, который способен становиться падающим блоком.
    Идентификатор FallingSand переименован в falling_block .
    Добавлены строительные леса, которые способны становиться падающим блоком.
    Добавлен капельник, который способен становиться падающим блоком в том случае, если он образует сталактит и один из блоков над ним разрушается.
    С добавлением падающих блоков песок и гравий теперь подвержены гравитации.
    Добавлен красный песок, который способен становиться падающим блоком.
    Добавлена наковальня, которая способна становиться падающим блоком.
    Слой снега теперь подвержен гравитации.
    Добавлено яйцо дракона, которое способно становиться падающим блоком.
    Добавлен цемент, который способен становиться падающим блоком.
    Добавлены строительные леса, которые способны становиться падающим блоком.
    Добавлен капельник, который способен становиться падающим блоком в том случае, если он образует сталактит и один из блоков над ним разрушается.
    Добавлены песок и гравий вместе с падающими блоками.
    Добавлено яйцо дракона, которое способно становиться падающим блоком.
    Добавлена наковальня, которая способна становиться падающим блоком.
    Добавлен красный песок, который способен становиться падающим блоком.
    Добавлен цемент, который способен становиться падающим блоком.
    Добавлены строительные леса, которые способны становиться падающим блоком.
    Добавлены песок, гравий, красный песок и наковальня вместе с падающими блоками.
    Добавлено яйцо дракона, которое способно становиться падающим блоком.
    Добавлен цемент, который способен становиться падающим блоком.
    Читайте также:  Как в Майнкрафте excalibur

    См. также

    В данной статье используются материалы из статьи «Падающий блок» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0. Авторы статьи.

    Источник: wiki-minecraft.ru

    Плагин FallingBlocks (Падающие блоки) версии 1.8 игры Minecraft

    Хотите немного разнообразить игровой процесс в Майнкрафте? Тогда поторопитесь обзавестись новым плагином FallingBlocks, который превратит обычные блоки в падающие. Они чем то будут напоминать падающий песок.

    /fallingblocks enable — активировать падающие блоки;

    /fallingblocks — отключить.

    laughing

    Установка плагина займет несколько минут: скачайте/распакуйте; перетащите файл в папку plugins. Вот и все! Приятной игры!

    Источник: minecraftom.ru