Прыжок

Версия Minecraft
1.7.10
API
Forge
Решение
проверку на двойной прыжок? как лучше?
Очень просто. Вот пример как это сделано в ботании:

Java:
    private static boolean jumpDown;
    
    @Override
    public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected)
    {
        if(worldIn.isRemote)
        {
            if(entityIn instanceof EntityPlayerSP)
            {
                EntityPlayerSP playerSp = (EntityPlayerSP) entityIn;
                
                if (playerSp.movementInput.jump) {
                    if (!jumpDown) {
                        
                        // прыжок второй раз
                        playerSp.jump();
                        // отправка пакета о прыжке на сервер...

sk9zist :l

Исправился
981
18
157
LivingJumpEvent как я понял как раз и срабатывает при прыжке, т.е. - нажатии пробела.
Есть еще вот такой вариант отлавливать его нажатие:

Для 1.7.10:
EventsHandler.java:
@SubscribeEvent
public void isKeyPressed(InputEvent.KeyInputEvent e)
{
    if(Keyboard.isKeyDown(57)) // 57 - код клавиши Space (пробел)
    {
        // действие при нажатой клавише
    }
}
 

sk9zist :l

Исправился
981
18
157
Мне удобней так. Я беру числа отсюда:
Можно и через константы, если хочешь
 
1,082
72
374
Мне удобней так. Я беру числа отсюда
Легких путей не ищете) В самом классе есть константы с кодами всех стандартных клавиш.
Java:
Keyboard.isKeyDown(Keyboard.KEY_SPACE);
Такой код явно читается лучше, чем число (его потом подставит компил).
 

sk9zist :l

Исправился
981
18
157
Легких путей не ищете) В самом классе есть константы с кодами всех стандартных клавиш.
Я не ищу легких путей, сказал же мне так нравиться :/
В самом классе есть константы с кодами всех стандартных клавиш.
Я знаю
 
а если надо сделать проверку на двойной прыжок? как лучше? (я про смоу проверку
Просто делаешь несколько проверок:
1. if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)) - если нажали Space (он же пробел)
2. if (player.isJumping) - если игрок в прыжке (на данный момент, уже)
3. if (player.isAirBorne) - если игрок в воздухе
4. if (player.motionY < 0.05) - узнаем путь прыжка, к примеру 0.05 (тут могу ошибаться)
5. if (!WasJumped) - до этого прыжка не было

Переменную WasJumped нужно где-то хранить. Но по сути, 5-й пункт не обязательно. Просто если его не учесть, то каждый прыжок после прыжка будет двойным прыжком :)

Где можно использовать? В событии InputEvent.KeyInputEvent? Но тогда как получить игрока, как узнать прыгает ли он?
А вот и нет.
Хе-хе, а тут подумай головой уже <3, где ты можешь использовать то, что я написал :)
 

sk9zist :l

Исправился
981
18
157
проверку на двойной прыжок? как лучше?
Очень просто. Вот пример как это сделано в ботании:

Java:
    private static boolean jumpDown;
    
    @Override
    public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected)
    {
        if(worldIn.isRemote)
        {
            if(entityIn instanceof EntityPlayerSP)
            {
                EntityPlayerSP playerSp = (EntityPlayerSP) entityIn;
                
                if (playerSp.movementInput.jump) {
                    if (!jumpDown) {
                        
                        // прыжок второй раз
                        playerSp.jump();
                        // отправка пакета о прыжке на сервер
                        /*sendToServer(new PacketJump());*/
                    }
                    jumpDown = true;
                } else {
                    jumpDown = false;
                }
            }
        }
    }
 
Сверху