Помогите Отключение урона от падения

Zemf4you

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
zemf4you
Есть эвент, при котором игрока отправляет в воздух через setVelocity(). Каким образом можно отключить урон от падения? Если через EntityDamageEvent, то каким образом понять, что получивший урон игрок был запущен в воздухе при другом событии?
 
Код:
DamageCause cause = event.getCause();
if(cause.equals(DamageCause.FALL)){
    //TODO
}
 
Есть эвент, при котором игрока отправляет в воздух через setVelocity(). Каким образом можно отключить урон от падения? Если через EntityDamageEvent, то каким образом понять, что получивший урон игрок был запущен в воздухе при другом событии?
Я бы сделал простейшую HashMap<String, Long> (имя игрока - время броска в миллисекундах) и записывал туда каждого игрока, которого бросаешь. Затем как сказал _Nanit_ выше - чекаем, что урон приходит от падения и сравниваем, сколько времени прошло с момента броска (с мапы). Делаешь там секунд 5-10 в зависимости от того, насколько высоко ты будешь подкидывать. Так же после урона можно удалить с мапы игрока. Вот такой костыль. По нормальному не получится, но все можно просчитать и сделать максимально близко.
 
Я бы сделал простейшую HashMap<String, Long> (имя игрока - время броска в миллисекундах) и записывал туда каждого игрока, которого бросаешь. Затем как сказал _Nanit_ выше - чекаем, что урон приходит от падения и сравниваем, сколько времени прошло с момента броска (с мапы). Делаешь там секунд 5-10 в зависимости от того, насколько высоко ты будешь подкидывать. Так же после урона можно удалить с мапы игрока. Вот такой костыль. По нормальному не получится, но все можно просчитать и сделать максимально близко.
А не лучше сделать HashMap<String, Boolean> - когда он взлетает добавлять значение true, когда падает делать его false? Если он взлетел от этого velocity, то он гарантированно упадет же
 
Проблема в том, что игрок может и не получить урона от падения)
В зависимости от того, как высоко его подкинет
 
Я бы сделал простейшую HashMap<String, Long> (имя игрока - время броска в миллисекундах) и записывал туда каждого игрока, которого бросаешь. Затем как сказал _Nanit_ выше - чекаем, что урон приходит от падения и сравниваем, сколько времени прошло с момента броска (с мапы). Делаешь там секунд 5-10 в зависимости от того, насколько высоко ты будешь подкидывать. Так же после урона можно удалить с мапы игрока. Вот такой костыль. По нормальному не получится, но все можно просчитать и сделать максимально близко.
Извините, я абсолютный ламер. Как именно нужно реализовывать HashMap? Где объявлять, как брать, как записывать
 
Извините, я абсолютный ламер. Как именно нужно реализовывать HashMap? Где объявлять, как брать, как записывать
Возьми себе книжку по Java, освой первые 15 глав. Потом берись за плагины.
В гугле все ищется, Baeldung в целом дает неплохие туториалы по разным частям.
Я бы написал краткий пример, но там достаточно много разных тонкостей, расписывать слишком много всего, чтобы ты понял наверняка. В целом:
PHP:
Map<String, Long> map = new HashMap<>();

String playername = "Player";
long timestamp = System.currentTimeMillis(); // текущее время в миллисекундах
map.put(playername, timestamp); // ассоциируем игрока с текущим временем

// вернет время, ассоциированное с ником игрока, иначе вернет -1
long time = map.getOrDefault("Player", -1);
 
Последнее редактирование:
Возьми себе книжку по Java, освой первые 15 глав. Потом берись за плагины.
В гугле все ищется, Baeldung в целом дает неплохие туториалы по разным частям.
Я бы написал краткий пример, но там достаточно много разных тонкостей, расписывать слишком много всего, чтобы ты понял наверняка. В целом:
PHP:
Map<String, Long> map = new HashMap<>();

String playername = "Player";
long timestamp = System.currentTimeMillis(); // текущее время в миллисекундах
map.put(playername, timestamp); // ассоциируем игрока с текущим временем

// вернет время, ассоциированное с ником игрока, иначе вернет -1
long time = map.getOrDefault("Player", -1);
Дак дело в том, что знаком, просто не знал, как именно работают плагины)
Проблема решена, тема закрыта.
 
Назад
Верх