Поведение энтитией в игре

tox1cozZ

aka Agravaine
8,455
598
2,892
Я вот не пойму, зачем майн просчитывает движение энтитией(например, прожектайлов) и на клиенте и на сервере одновременно?
Почему нельзя считать только на сервере, а на клиенте лишь интерполировать позицию?
Это из-за того что можно "открыть мир для сети" или есть другая причина?
Просто проблема в том что часто эти вычисления отличаются и вот у тебя граната отскочила в одну сторону на клиенте, потом сервер присылает пакет с актуальной позицией и граната "проскакивает" в другую сторону.
 

Icosider

Kotliner
Администратор
3,600
99
663
Тут обсуждалось перемещение. А вот почему это сделано так:
1580756129027.png
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Я вообще о другом. Когда кидаешь снежок то его движение вычисляется на обеих сторонах и по КД сервер присылает позицию чтобы не было рассинхрона.
А я спрашиваю почему сервер не может полностью контролировать движение, зачем ещё тут клиент делает тоже самое?
Про игрока это понятно.
 

Icosider

Kotliner
Администратор
3,600
99
663
зачем ещё тут клиент делает тоже самое
Ну наверное точно также, как и для игрока, разве не логично? Прикинь, пинг подскочит у игрока, а когда инфа дойдёт до клиента, граната будет уже у его лица... Суть не меняется, что игрок, что граната. Возможно я ошибаюсь. Взываю експертов: @Oldestkon, @Dahaka
 
7,099
324
1,510
и по КД сервер присылает позицию чтобы не было рассинхрона
При создании энтити через EntityEntryBuilder можно указать, как часто будет происходить синхронизация с клиентом. Указывай 1, будет каждый тик синхронизироваться
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Одинаковые, но все равно возникают неприятные рывки прожектайлов когда сервер присылает актуальные данные.

Указывай 1, будет каждый тик синхронизироваться
Ставил, все равно дёргается неприятно
 

Icosider

Kotliner
Администратор
3,600
99
663
@hohserg1, уже обсуждали. Это не поможет, реальные значения пилятся на клиенте.
 
7,099
324
1,510
так там же одинаковые расчеты, не?
Кстати, да. Данные одинаковые, значит вычисления должны быть одинаковые.
Причиной может быть, например, снижение точность при упаковке в пакет(на сервере double, в пакете byte или short(дельта позиции, а не полная позиция), в итоге на клиенте небольшое округление; и если граната сталкивается с углом, то это округление может сыграть роль). Также из-за передачи дельты может постепенно накапливаться ошибка(если сущность долго живет без точной синхронизации)
 
7,099
324
1,510
Тогда почему результаты вычислений разные? Баги в процессорах?
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Ну ля, я кинул гренку, она отскочила от стены. На одно мгновение видно что она отлетела чуток в другую сторону, а потом сервера пришел пакет и она "скакнула" в нужное место.
 
1,188
31
182
Покаж код и регестрацию
EntityRegistry.registerModEntity(EntityGrenade.class, "EntityGrenade", EntityRegistry.findGlobalUniqueEntityId()+1, this, 80, 10000, true);

На серве то тестишь или в одиночке?
и там и там одинаково, что в одиночке, что мы тестили на сервере обычном с разрабами
 
Сверху