[1.6.4] Игрок и его передвижение / Антиспидхак

1,990
18
105
Отдельный поток не нужен, вызовет лишь кучу багов.
Идеи - считать пройденное расстояние игрока по осям x\z, из этого строить прямоугольник проверямых блоков.
5 блоков по y совсем не нужны, хватит 3. Ко льду можно ещё песок душ прибавить, в качестве проверяемого блока. 
Можно вообще каждый пройденный блок игроком помечать в отдельном месте, занося в лист, каждый тик, потом сбрасывать список при проверке. Это гораздо эффективнее будет.
Что-то вроде:

Код:
ArrayList<Integer> ids = new ArrayList<Integer>();
public void onUpdate() {
    if (posX != last.posX && posY != lastPosY && posZ != lastPosZ)
        ids.add(world.getBlockId(x,y-1,z)); //проверять существуюет ли такой не стоит
        //можно даже посчитать количество пройденных блоков льда\песка душ\воды\etc
}


в твоей проверке потом просто смотреть содержит ли лист нужный тебе ID, а после проверки делать list.clear();
Оптимизировать можно и дальше, но у меня сейчас голова из-за температуры не варит вообще.
А кнокбак важен. Вот убегает игрок - в него попали стрелой, он пролетел чуть больше и бац - его откатывает. Это вызовет приступ ярости у любого.
 
675
2
Для еды и лука:

В теле класса:
Код:
int rmb = 0;

Каждую секунду:
Код:
if(!player.isUsingItem()) rmb = 0;
if(rmb == 2 && player.isUsingItem()) { maxSpeed -= 6.4; System.out.println("Этап 2"); }
if(rmb == 1 && player.isUsingItem()) { maxSpeed -= 4.5; rmb = 2; System.out.println("Этап 1") }
if(rmb == 0 && player.isUsingItem()) rmb = 1;
 
675
2
Дубль 2. Критики, налетайте :)

И есть ли у кого-нибудь идеи, как можно отследить откидывание игрока? Я так и не нашел какого-нибудь .isHit();
 
1,990
18
105
В свитче после каждого case: actions надо ставить break;
Плюс странный способ у тебя, вот набежит в листе куча блоков паутины, цикл пройдется по всему листу, найдет 10-20 блоков паутины и maxSpeed вообще в минус уйдет.
 
675
2
Oldestkon написал(а):
В свитче после каждого case: actions надо ставить break;
Плюс странный способ у тебя, вот набежит в листе куча блоков паутины, цикл пройдется по всему листу, найдет 10-20 блоков паутины и maxSpeed вообще в минус уйдет.
В list заносятся только уникальные значения. А про break я забыл, спасибо.

Есть идеи по поводу отталкивания?
 
Сверху