[1.7.10 | Вопрос]Как запретить игроку бежать?

Статус
В этой теме нельзя размещать новые ответы.
771
5
Собственно, нужно при определеннем условии запрещать игроку бежать(я о том, когда два раза жмешь 'W'. Спринт, вообщем).
Как это можно сделать?
 
2,955
12
Хм... Помню видел эвент, похожий на MouseEvent, только с клавой. Вот его лови и делай что надо.
 
1,990
18
105
Добавь свой класс реализующий ITickHandler, в методе tickEnd проверяешь tickType, если PLAYER - вытаскиваешь игрока и делаешь ему setSprinting(false);
Контроллировать клаву\мышь - не надо. Так и лепят потом хаки, снимая такие клиентские блокировки.
 
771
5
Я так делал, но он все равно на долю секунды ускоряет и экран дергается.
Я так понял, от этого никак не избавится?
 
1,990
18
105
Ну, тогда можно добавить (не заменить) блокиратор на клиент. Проверь, запускается ли tickEnd на клиенте.
Если запускается и камера дергается, тогда лови в ITickHandler tickStart, так же вытаскивай там игрока и при своем условии ставишь это:

Код:
player.sprintToggleTimer = 0;

Если придется, используй рефлексию.
Ну и если сервер дает краши - делай, чтобы запускалось только на клиенте.
 
771
5
Что-то я не нашел такую переменную...
 
2,955
12
Странно. Мне казалось было что то вроде KeyboardEvent'a, может мне просто показалось.
 
1,990
18
105
Majestic написал(а):
Что-то я не нашел такую переменную...
Да, она определяется в EntityPlayerSP.
Поэтому тут нужно трогать только клиент, сервер об этом знать не должен, ибо крашнется.
 
771
5
Рефлексией каждый тик? Она же это, медленная.
 
1,990
18
105
А ты попробуй не искать каждый тик переменную %name% в классе %класснейм% у обьекта %обжектреф%, а сохрани её в переменную в первый раз, а потом просто пиши setValue.
 
771
5
setValue не медленный?
Ок, спасибо, решено.
Закрывайте тему.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху