Урон

Версия Minecraft
1.12.2

sk9zist :l

Исправился
981
18
157
1) Как отменять весь урон, который приходиться получать игроку в различных случаях. Например, если отменять LivingHurtEvent - будет отменяться только урон, полученный от любого entity. Как отменять урон, получаемый, например от динамита?

Доп. вопрос: Как отбрасывать игрока назад? К примеру, как будто тебя спереди ударил мечом невидимый игрока (хотя нет никакого игрока) и ты откинулся назад?
 

ReyMagos

Тег-бомбастер
412
7
121
Динамит тоже ентити. Тем более этот евент вызывается, когда сущность получила урон, неважно как.
Доп.ответ: посмотри, как игрок отбрасывается при ударе и сделай тоже самое, только там где тебе нужно.

P.S. Слушай, а ты хоть что-то попытался сам сделать?
 

sk9zist :l

Исправился
981
18
157
Динамит тоже ентити
Во время взрыва (зажигания) - да.
вызывается, когда сущность получила урон, неважно как.
Я знав,
ааа но меня взрывает динамит, может это потому, что я стою прям в нём, во время его взрыва?

хоть что-то попытался сам сделать?
ну, я искал другие эвенты чтобы отменять урон, и, искал где отбрасываеться игрок в кодах игры!

посмотри, как игрок отбрасывается при ударе
Можете пожалуйста сказать где это...(
 

ReyMagos

Тег-бомбастер
412
7
121
Можете пожалуйста сказать где это...
Класс EntityLivingBase строка 1352. Метод knonkback();

Насчёт урона.
А вы точно отменяете событие? Проверяли ли на других предметах (кактус, или что-то другое)?
 

Eifel

Модератор
1,623
78
608
Если юзать и отменять LivingHurtEvent, то по энтити будет идти анимация урона, но урон не будет проходить. Если этого не надо, то лучше использовать LivingAttackEvent, по той же аналогии. (Но это еще не все их различия) И да, там есть DamageSource, в котором есть .isExplosion() или же, посмотрев все, что тебе доступно в ивенте, ты найдешь методы для получения энтити, которое в данный момент атакует жертву. Откидывать игрока можно там же
 

sk9zist :l

Исправился
981
18
157
Так, e.getEntityLiving().knockBack(to, 1, 5, 5); (честно не понял что за значения тут надо ставить)
В эвенте. - Работает. А если делаю тут:
какойто-итем.java:
@Override
    public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) {
        attacker.knockBack(attacker, 1, 5, 5);
        return super.hitEntity(stack, target, attacker);
    }
То ничошеньки не работает, подскажите как решить
 
Последнее редактирование:
1,038
57
229
to, x,y,z
Отброс можно делать только в определенное время. У него есть таймер который не дает это делать когда захочется. У каждого EntityLiving (EntityMob) есть свойство, которое отвечает за кулдаун. Представь если бы скелет в тебя стрелял и ты каждый раз отскакивал назад, так ты бы улетел за тридевять земель..
А вообще Java стоит подучить, тут она конечно не помогла бы... но в целом, ты бы и сам мог найти это..
видимо надо снова тутор делать

Как отменять урон, получаемый, например от динамита?
Проверяй кто его наносит.. DamageSource вроде, и если это динамит, setCanceled(true);
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Отброс можно делать только в определенное время. У него есть таймер который не дает это делать когда захочется. У каждого EntityLiving (EntityMob) есть свойство, которое отвечает за кулдаун.
Кулдаун на урон, а не на отбрасывание. Его не отбрасывает из-за того что он в аргументы передал самого себя, метод тупо не знает в какую сторону его откидывать, ибо высчитывает с какой стороны нанесли урон.
Надо так, наверное: target.knockBack(attacker, 1, 5, 5);

P.S Насчет языка я уже предупреждал, судя по твоим сообщениям ты вообще не чаешь что ты делаешь. Грядет профилактический бан)
 

sk9zist :l

Исправился
981
18
157

sk9zist :l

Исправился
981
18
157
Надо так, наверное: target.knockBack(attacker, 1, 5, 5);
Я так сделал первый раз... Но изменил ибо подумал, что оно просто генерирует отбрасывание в какую-либо сторону. А это оказываеться оно изменяет отбрасывание со стороны атакуемого.. Ну или как-то так :)
Спасибо! Тема решена!
 
Сверху